欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Java大作业-ATM柜员机线上系统

时间:2023-07-05
简介

此程序是本人大一时期的Java大作业,初学Java一学期后所编写的一个Java图形界面程序。作业题目是要求做一个ATM柜员机模拟程序,但本人考虑到这仅仅是做一个软件程序无需搭配硬件等,故将其做成一个ATM柜员机线上系统,使用账号及密码登录,亦可进行注册等。

本程序使用Java编写,用到了Java Swing,拥有图形界面,点击首页的“更换外观”按钮可切换不同风格的外观,程序分为两个模式,用户模式和系统管理模式。用户可进行注册和登录,进入用户模式,功能包括:查看个人信息、存款和取款、转账、贷款和还款、查看交易记录、修改密码等;管理员可输入指定的账号密码登录,进入系统管理模式,功能包括:用户管理、查看历史交易记录等。

本程序的数据存储使用文件存储,程序检错能力强,功能颇多(还可将交易记录导出为excel文件哦),界面工整好看(每个组件都经过细心调整)。但由于是大一时期初学Java后所写的程序,部分代码可能有些繁杂及不合理之处(纯从零开始写的,且为了界面美观,所以有大部分代码都在调整界面组件)。

程序源代码及程序设计说明书可在下方GitHub链接处进行下载,供各位需要的人学习参考。

GitHub链接:ATM柜员机线上系统

目录

简介程序流程部分功能展示

欢迎界面-更换外观登录注册个人信息存款/取款转账贷款/还款交易记录修改密码用户管理历史记录 部分代码展示

User类HomePage类Register类Login类 后记 程序流程

程序大概流程如下图:


部分功能展示

本程序功能及细节颇多,在此仅展示部分功能,完整功能请至文章开头处GitHub链接下载程序,进行体验。

欢迎界面-更换外观

打开本程序,进入欢迎界面,在此可选择用户模式和系统管理模式,点击右上角“更换外观”可更改系统整体外观,共有5种不同风格的外观。



登录

用户模式下,输入系统中存有的卡号和密码进行登录,登录成功则进入用户功能菜单界面;系统管理模式下,输入系统中固定的账号和密码进行登录,登陆成功则进入系统管理功能菜单界面。两个模式下,登录失败都会有相应的提示或限制,如用户模式下,某卡号一天内输入密码出错超过3次,则该账户将被临时锁定,今日无法再登录,累计三日被锁定,则该账户将被永久锁定,需管理员解锁。




注册

用户注册,填写相应的信息进行注册,若信息填写格式错误,将进行提示,注册完成后,系统将赋予用户一个卡号,并显示卡号与密码,用户需在此时牢记自己的卡号和密码。




个人信息

个人信息功能,在此显示用户的个人信息。



存款/取款

存款/取款功能,可进行存款和取款。




转账

转账功能,可向指定账户进行转账。



贷款/还款

贷款/还款功能,可进行贷款和还款,需遵循贷款还款规则。






交易记录

交易记录功能,可查看该账户的所有交易记录,且可将交易记录导出为excel表格文件。





修改密码

修改密码功能,可进行密码的修改。



用户管理

用户管理功能,管理员可在此管理系统中的所有用户,点击右侧“查看”按钮进行指定用户的详细管理操作。






历史记录

历史记录功能,管理员可在此查看系统中所有用户的历史交易记录,还可查看指定用户的个人交易记录,且都可导出为excel表格文件。





部分代码展示

本程序代码量巨大,在此仅展示部分程序代码,完整代码请至文章开头处GitHub链接下载程序,进行了解。

为了系统界面的美观 强迫症患者 ,所以本程序的很多代码都在调整界面组件,请别介意。

User类

用户类,一个用户即为一个用户类对象。

import java.io.*;import java.util.*;import java.text.SimpleDateFormat;public class User implements Serializable { //用户类boolean lock ; //账户状态,是否永久锁定int lockDays,errorNum,transferNum,credit; //锁定天数,当日密码出错次数(指密码最后出错当日而非今日),当日转账限额(指最后登录当日),信用分ArrayList lockTime=new ArrayList(); //锁定时间ArrayList errorTime=new ArrayList(); //密码出错时间ArrayList transferTime=new ArrayList(); //转账时间ArrayList loanTime=new ArrayList(); //贷款时间ArrayList dai=new ArrayList(); //贷款时信用分和欠款记录,每两个元素为一组String account, //卡号 password, //密码 name, //姓名 sex, //性别 idCard, //身份证 phone, //手机 money, //余额 debt, //欠款 time; //建卡日期ArrayList record=new ArrayList(); //交易记录,每三个元素组成一条交易记录public User(String password, String name, String sex, String idCard, String phone) { //为账户各信息赋值ArrayList users=null;ObjectInputStream ois;try {ois=new ObjectInputStream(new FileInputStream("用户信息.txt"));users=(ArrayList)ois.readObject();ois.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}lock=false; //账户状态初始化正常非永久锁定lockDays=0; //锁定天数初始化0errorNum=0; //当日密码出错次数初始化0transferNum=10000; //当日转账限额初始化10000credit=90; //信用分初始化90lockTime.add("0000-00-00"); //锁定时间初始化errorTime.add("0000-00-00");errorTime.add("0000-00-00");errorTime.add("0000-00-00"); //密码出错时间初始化transferTime.add("0000-00-00"); //转账时间初始化loanTime.add("0000-00-00"); //贷款时间初始化this.password=password; //密码赋值this.name=name; //姓名赋值this.sex=sex; //性别赋值this.idCard=idCard; //身份证赋值this.phone=phone; //手机赋值money="0.0"; //余额初始化0debt="0"; //欠款初始化0SimpleDateFormat timeFormat=new SimpleDateFormat("yyyy-MM-dd");time=timeFormat.format(System.currentTimeMillis()); //建卡日期赋值Random r=new Random();boolean y=false; //是否重复do { //卡号赋值,并查重account="20202020";for(int i=0;i<8;i++) //赋值account=account+r.nextInt(10);for(int i=0;i


HomePage类

主页类,main方法包含在此类中,是程序的入口,定义了系统的欢迎界面、登录界面和更换外观功能等。

import java.awt.*;import java.awt.event.*;import javax.swing.*;public class HomePage { //主页类static Jframe mainJframe=new Jframe("ATM柜员机线上系统");static Container con=mainJframe.getContentPane();static boolean flag; //是否为管理员static int appearance=0; //当前外观static JLabel lb_appearance=new JLabel("当前外观:
默认"); //当前外观public static void main(String[] args) {mainJframe.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);mainJframe.setResizable(false);con.setLayout(null);welcomePage();}public static void welcomePage() { //欢迎界面mainJframe.setSize(550,400);mainJframe.setLocationRelativeTo(null);JPanel pn=new JPanel();pn.setSize(550,400);pn.setLayout(null);JLabel lb1=new JLabel("欢迎使用"),lb2=new JLabel("ATM柜员机线上系统");JButton bt1=new JButton("用户模式"),bt2=new JButton("系统管理模式"),bt_changeAppearance=new JButton("更换外观",new ImageIcon("image/更换外观.png"));lb1.setFont(new Font("黑体",0,35));lb1.setBounds(200,30,150,100);lb2.setFont(new Font("黑体",0,35));lb2.setBounds(125,100,300,80);bt1.setFont(new Font("黑体",0,22));bt1.setBounds(70,210,170,70);bt1.setCursor(new Cursor(Cursor.HAND_CURSOR));lb_appearance.setFont(new Font("黑体",0,17));lb_appearance.setBounds(5,5,150,40);bt2.setFont(new Font("黑体",0,22));bt2.setBounds(310,210,170,70);bt2.setCursor(new Cursor(Cursor.HAND_CURSOR));bt_changeAppearance.setFont(new Font("黑体",0,17));bt_changeAppearance.setBounds(420,10,130,25);bt_changeAppearance.setContentAreaFilled(false);bt_changeAppearance.setBorderPainted(false);bt_changeAppearance.setCursor(new Cursor(Cursor.HAND_CURSOR));pn.add(lb1);pn.add(lb2);pn.add(lb_appearance);pn.add(bt1);pn.add(bt2);pn.add(bt_changeAppearance);con.add(pn);mainJframe.setVisible(true);bt1.addActionListener(new ActionListener() { //进入用户登录界面public void actionPerformed(ActionEvent e) {flag=false;con.remove(pn);mainJframe.repaint();loginPage();mainJframe.validate();}});bt2.addActionListener(new ActionListener() { //进入管理员登录界面public void actionPerformed(ActionEvent e) {flag=true;con.remove(pn);mainJframe.repaint();loginPage();mainJframe.validate();}});bt_changeAppearance.addMouseListener(new MouseListener() { //更换整体界面外观public void mouseEntered(MouseEvent arg0) {bt_changeAppearance.setForeground(Color.blue);}public void mouseExited(MouseEvent arg0) {bt_changeAppearance.setForeground(null);}public void mouseClicked(MouseEvent arg0) {try {appearance++;String lookAndFeel=null;switch(appearance) {case 1: //Windows风格lookAndFeel="com.sun.java.swing.plaf.windows.WindowsLookAndFeel";lb_appearance.setText("当前外观:
Windows");break;case 2: //Nimbus风格lookAndFeel="com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel";lb_appearance.setText("当前外观:
Nimbus");break;case 3: //Windows Classic风格lookAndFeel="com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel";lb_appearance.setText("当前外观:
Windows Classic");break;case 4://Motif风格lookAndFeel="com.sun.java.swing.plaf.motif.MotifLookAndFeel";lb_appearance.setText("当前外观:
Motif");break; case 5: //默认风格lookAndFeel="javax.swing.plaf.metal.metalLookAndFeel";lb_appearance.setText("当前外观:
默认");break;}UIManager.setLookAndFeel(lookAndFeel);SwingUtilities.updateComponentTreeUI(mainJframe);if(appearance==5)appearance=0; } catch(Exception ex) { System.out.println(ex); }}public void mousePressed(MouseEvent arg0){}public void mouseReleased(MouseEvent arg0){}});}public static void loginPage() { //登录界面mainJframe.setSize(550,400);mainJframe.setLocationRelativeTo(null);JPanel pn=new JPanel();pn.setSize(550,400);pn.setLayout(null);JButton bt1=new JButton("返回",new ImageIcon("image/返回.png")),bt2=new JButton("注册账号"),bt3=new JButton("登 录");JTextField tf=new JTextField();JPasswordField pf=new JPasswordField();JLabel lb1,lb2,lb3=new JLabel("密码:");if(flag) {lb1=new JLabel("管理员登录");lb2=new JLabel("账号:");lb1.setFont(new Font("黑体",0,35));lb1.setBounds(185,30,180,100);}else {lb1=new JLabel("用户登录");lb2=new JLabel("卡号:");lb1.setFont(new Font("黑体",0,35));lb1.setBounds(200,30,150,100);}lb2.setFont(new Font("黑体",0,25));lb2.setBounds(100,100,80,100);lb3.setFont(new Font("黑体",0,25));lb3.setBounds(100,150,80,100);tf.setFont(new Font("黑体",0,25));tf.setBounds(170,130,230,40);pf.setFont(new Font(null,0,25));pf.setBounds(170,180,230,40);bt3.setFont(new Font("黑体",0,25));bt3.setBounds(200,250,150,60);bt3.setCursor(new Cursor(Cursor.HAND_CURSOR));bt1.setFont(new Font("黑体",0,17));bt1.setBounds(1,10,92,25);bt1.setContentAreaFilled(false);bt1.setBorderPainted(false);bt1.setCursor(new Cursor(Cursor.HAND_CURSOR));bt2.setFont(new Font("黑体",0,17));bt2.setBounds(440,330,105,25);bt2.setContentAreaFilled(false);bt2.setBorderPainted(false);bt2.setCursor(new Cursor(Cursor.HAND_CURSOR));pn.add(lb1);pn.add(lb2);pn.add(lb3);pn.add(tf);pn.add(pf);pn.add(bt1);pn.add(bt3);if(!flag)pn.add(bt2);con.add(pn);bt1.addMouseListener(new MouseListener() { //返回到欢迎界面public void mouseEntered(MouseEvent arg0) {bt1.setForeground(Color.blue);}public void mouseExited(MouseEvent arg0) {bt1.setForeground(null);}public void mouseClicked(MouseEvent arg0) {con.remove(pn);mainJframe.repaint();welcomePage();mainJframe.validate();}public void mousePressed(MouseEvent arg0){}public void mouseReleased(MouseEvent arg0){}});bt2.addMouseListener(new MouseListener() { //进入注册界面public void mouseEntered(MouseEvent arg0) {bt2.setForeground(Color.blue);}public void mouseExited(MouseEvent arg0) {bt2.setForeground(null);}public void mouseClicked(MouseEvent arg0) {con.remove(pn);mainJframe.repaint();con.add(new Register().registerPage());mainJframe.validate();}public void mousePressed(MouseEvent arg0){}public void mouseReleased(MouseEvent arg0){}});bt3.addActionListener(new ActionListener() { //登录,获取并检验账号密码,正确则进入功能界面public void actionPerformed(ActionEvent e) {if(flag) //进行管理员账号密码检验new Login().adminLogin(tf.getText(),String.valueOf(pf.getPassword()));else //进行用户账号密码检验new Login().userLogin(tf.getText(),String.valueOf(pf.getPassword()));}});}}


Register类

注册类,定义了系统的注册界面,用于完成用户的注册功能。

import java.io.*;import java.util.ArrayList;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Register { //注册类User user=null;JPanel pn=new JPanel();JLabel lb=new JLabel("用户注册"), lb_name=new JLabel("姓名:"), lb_sex=new JLabel("性别:"), lb_idCard=new JLabel("身份证:"), lb_phone=new JLabel("手机:"), lb_password=new JLabel("(输入6位数字密码)"), lb_password1=new JLabel("密码:"), lb_password2=new JLabel("确认密码:");JTextField tf_name=new JTextField(),tf_idCard=new JTextField(),tf_phone=new JTextField();JPasswordField pf_password1=new JPasswordField(),pf_password2=new JPasswordField();JButton bt1=new JButton("返回",new ImageIcon("image/返回.png")),bt2=new JButton("注 册");String[] sexx= {"------请选择------"," 男"," 女"};JComboBox cb_sex=new JComboBox(sexx);String password1,password2,name,sex,idCard,phone;JLabel lb_tips=new JLabel();public JPanel registerPage() { //注册界面HomePage.mainJframe.setSize(550,450);HomePage.mainJframe.setLocationRelativeTo(null);pn.setSize(550,450);pn.setLayout(null);lb.setFont(new Font("黑体",0,35));lb.setBounds(200,5,150,70);lb_name.setFont(new Font("黑体",0,20));lb_name.setBounds(140,80,70,30);lb_sex.setFont(new Font("黑体",0,20));lb_sex.setBounds(140,120,70,30);lb_idCard.setFont(new Font("黑体",0,20));lb_idCard.setBounds(120,160,80,30);lb_phone.setFont(new Font("黑体",0,20));lb_phone.setBounds(140,200,70,30);lb_password.setFont(new Font("黑体",0,16));lb_password.setBounds(400,240,150,30);lb_password1.setFont(new Font("黑体",0,20));lb_password1.setBounds(140,240,70,30);lb_password2.setFont(new Font("黑体",0,20));lb_password2.setBounds(100,280,100,30);tf_name.setFont(new Font("黑体",0,20));tf_name.setBounds(195,80,205,30);cb_sex.setFont(new Font("黑体",0,20));cb_sex.setBounds(195,120,205,30);tf_idCard.setFont(new Font("黑体",0,20));tf_idCard.setBounds(195,160,205,30);tf_phone.setFont(new Font("黑体",0,20));tf_phone.setBounds(195,200,205,30);tf_phone.setdocument(new NumLimit());pf_password1.setFont(new Font(null,0,20));pf_password1.setBounds(195,240,205,30);pf_password2.setFont(new Font(null,0,20));pf_password2.setBounds(195,280,205,30);bt1.setFont(new Font("黑体",0,17));bt1.setBounds(1,10,92,25);bt1.setContentAreaFilled(false);bt1.setBorderPainted(false);bt1.setCursor(new Cursor(Cursor.HAND_CURSOR));bt2.setFont(new Font("黑体",0,25));bt2.setBounds(200,330,150,60);bt2.setCursor(new Cursor(Cursor.HAND_CURSOR));pn.add(lb);pn.add(lb_name);pn.add(lb_sex);pn.add(lb_idCard);pn.add(lb_phone);pn.add(lb_password);pn.add(lb_password1);pn.add(lb_password2);pn.add(tf_name);pn.add(cb_sex);pn.add(tf_idCard);pn.add(tf_phone);pn.add(pf_password1);pn.add(pf_password2);pn.add(bt1);pn.add(bt2);bt1.addMouseListener(new MouseListener() { //返回到用户登录界面public void mouseEntered(MouseEvent arg0) {bt1.setForeground(Color.blue);}public void mouseExited(MouseEvent arg0) {bt1.setForeground(null);}public void mouseClicked(MouseEvent arg0) {HomePage.con.remove(pn);HomePage.mainJframe.repaint();HomePage.loginPage();HomePage.mainJframe.validate();}public void mousePressed(MouseEvent arg0){}public void mouseReleased(MouseEvent arg0){}});bt2.addActionListener(new ActionListener() { //注册账号public void actionPerformed(ActionEvent e) {getInfo();}});return pn;}public void getInfo() { //获取用户信息boolean y1,y2=false,y3,y4,y5,y6=false;//y1表示是否全部填写,y2表示密码格式是否正确,y3表示两次密码是否相同,y4表示密码是否为数字,y5表示密码是否为6位,y6表示六位密码是否不完全相同y1=(!tf_name.getText().trim().equals("")) //判断信息是否全部填写&&(!tf_idCard.getText().trim().equals(""))&&(!tf_phone.getText().trim().equals(""))&&(!String.valueOf(pf_password1.getPassword()).equals(""))&&(!String.valueOf(pf_password2.getPassword()).equals(""))&&(cb_sex.getSelectedIndex()!=0);if(!y1) { //若未完整填写信息,将进行提示lb_tips.setText("请完善信息!");registerTips();}else { //若完整填写信息,将进行密码格式判断password1=String.valueOf(pf_password1.getPassword());password2=String.valueOf(pf_password2.getPassword());if(password1.equals(password2)) { //判断两次密码是否相同y3=true;if(password1.length()==6) { //判断密码是否为6位y5=true;y4=true;int[] chr=new int[6]; //用于储存各位密码的值for(int i=0;i57) { //若密码不为数字,将进行提示y4=false;lb_tips.setText("请设置6位数字密码!");registerTips();break;}if(i==5) { //若密码为6位数字密码,则将进行6位密码是否完全相同的判断int x=1;for(x=1;x<6;x++) {if(chr[x-1]==chr[x])continue;elsebreak;}if(x==6) { //若6位密码完全相同,将进行提示y6=false;lb_tips.setText("请勿设置6位完全相同的密码!");registerTips();}elsey6=true;}}y2=y3&&y4&&y5&&y6; //若密码为非完全相同的6位数字密码,则密码格式正确y2为true,否则y2为false}else { //若密码不为6位,将进行提示y5=false;lb_tips.setText("请设置6位数字密码!");registerTips();}}else { //若两次密码不相同,将进行提示y3=false;lb_tips.setText("两次密码不同!");registerTips();}if(y2) { //符合注册条件,则进行注册lb_tips.setText("注册成功!");registerTips();password1=String.valueOf(pf_password1.getPassword());name=tf_name.getText();if((String)cb_sex.getSelectedItem()==" 男")sex="男";else if((String)cb_sex.getSelectedItem()==" 女")sex="女";idCard=tf_idCard.getText();phone=tf_phone.getText();register();completePage();}}}public void registerTips() { //注册时弹出的提示信息窗口JDialog tips=new JDialog(HomePage.mainJframe," 提示",true);JPanel pn_tips=new JPanel();JButton bt_tips=new JButton("确 定");tips.setSize(450,200);tips.setLocationRelativeTo(null);tips.setResizable(false);tips.setLayout(null);pn_tips.setBounds(0,30,450,70);lb_tips.setFont(new Font("黑体",0,25));bt_tips.setFont(new Font("黑体",0,20));bt_tips.setBounds(175,100,100,50);bt_tips.setCursor(new Cursor(Cursor.HAND_CURSOR));pn_tips.add(lb_tips);tips.add(pn_tips);tips.add(bt_tips);bt_tips.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {tips.dispose();}});tips.setVisible(true);}public void register() { //注册账号,储存账号信息至文件中try {ObjectInputStream ois=new ObjectInputStream(new FileInputStream("用户信息.txt"));ArrayList users=(ArrayList)ois.readObject();ois.close();user=new User(password1,name,sex,idCard,phone);users.add(user);ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("用户信息.txt"));oos.writeObject(users);oos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}public void completePage() { //注册完成界面JButton bt=new JButton("返回登录",new ImageIcon("image/返回.png"));JLabel lb0=new JLabel("注册完成"),lb1=new JLabel("请牢记您的卡号和密码"),lb2=new JLabel("卡号:"+user.account),lb3=new JLabel("密码:"+user.password);pn.removeAll();HomePage.mainJframe.repaint();HomePage.mainJframe.setSize(550,400);HomePage.mainJframe.setLocationRelativeTo(null);pn.setSize(550,400);pn.setLayout(null);lb0.setFont(new Font("黑体",0,35));lb0.setBounds(200,30,150,100);bt.setFont(new Font("黑体",0,17));bt.setBounds(1,10,135,25);bt.setContentAreaFilled(false);bt.setBorderPainted(false);bt.setCursor(new Cursor(Cursor.HAND_CURSOR));lb1.setFont(new Font("黑体",0,20));lb1.setForeground(Color.red);lb1.setBounds(170,70,200,100);lb2.setFont(new Font("黑体",0,25));lb2.setBounds(125,140,300,100);lb3.setFont(new Font("黑体",0,25));lb3.setBounds(125,190,300,100);pn.add(lb0);pn.add(lb1);pn.add(lb2);pn.add(lb3);pn.add(bt);bt.addMouseListener(new MouseListener() { //返回到用户登录界面public void mouseEntered(MouseEvent arg0) {bt.setForeground(Color.blue);}public void mouseExited(MouseEvent arg0) {bt.setForeground(null);}public void mouseClicked(MouseEvent arg0) {HomePage.con.remove(pn);HomePage.mainJframe.repaint();HomePage.loginPage();HomePage.mainJframe.validate();}public void mousePressed(MouseEvent arg0){}public void mouseReleased(MouseEvent arg0){}});HomePage.mainJframe.validate();}}


Login类

登录类,用于进行登录验证。

import java.io.*;import java.util.*;import java.text.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Login { //登录类static ArrayList allUsers=null; //所有用户static User user=null; //进行登录/操作的用户static int userNum=-1; //进行登录/操作的用户在文件中的集合中的位置JLabel lb_tips=new JLabel(); //提示窗口的内容public void adminLogin(String account,String password) { //管理员登录if(account.equals("Admin") && password.equals("Admin")) { //检验账号密码,若正确,则进入管理员功能界面try {ObjectInputStream ois=new ObjectInputStream(new FileInputStream("用户信息.txt"));allUsers=(ArrayList)ois.readObject(); //从文件中读取所有用户ois.close();for(int i=0;i=30) { //达到30天,计算信用分、利息及欠款金额//获取贷款时信用分和欠款int credit=Integer.parseInt(user.dai.get(user.dai.size()-2));String debt=user.dai.get(user.dai.size()-1); if(credit>difference%30) //信用分足够扣取user.credit=credit-(int)(difference%30); //计算信用分,每30天-1;else //信用分不足扣取,置0user.credit=0;user.debt=String.valueOf(Double.parseDouble(debt)+Double.parseDouble(debt)*0.015*(difference%30)); //计算欠款,每30天收取月利息allUsers.remove(userNum);allUsers.add(userNum,user);ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("用户信息.txt"));oos.writeObject(allUsers);oos.close();}}}} catch (ParseException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}lb_tips.setText("登录成功!");loginTips();new AdminFunction();HomePage.mainJframe.dispose();}else { //若错误,则进行提示lb_tips.setText("账号或密码错误!");loginTips();}}public void userLogin(String account,String password) { //用户登录if(account.equals("")) { //未输入卡号,进行提示lb_tips.setText("请输入卡号!");loginTips();}else if(password.equals("")) { //已输入卡号,但未输入密码,进行提示lb_tips.setText("请输入密码!");loginTips();}else { //已输入卡号和密码int i=0; //临时循环变量,代表元素在集合中的位置ArrayList users=null;try {ObjectInputStream ois=new ObjectInputStream(new FileInputStream("用户信息.txt"));users=(ArrayList)ois.readObject();ois.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}for(i=0;i=user.errorTime.size()-3;i--) { //进行当日密码出错次数计算if(timeFormat.parse(timeFormat.format(System.currentTimeMillis())).equals(timeFormat.parse(user.errorTime.get(i)))) {n++;}}user.errorNum=n;if(user.errorNum==3) { //若当日密码出错次数达3次,继续进行登录,将进行提示lb_tips.setText("今日密码出错达3次,请明日再登录!");loginTips();}else { //若当日密码出错次数未达3次,可继续尝试登录if(password.equals(user.password)) { //密码正确,登录成功,进入用户功能界面//若今日与最后转账日不同,今日转账限额初始化10000if(!(timeFormat.parse(timeFormat.format(System.currentTimeMillis())).equals(timeFormat.parse(user.transferTime.get(user.transferTime.size()-1))))) {user.transferNum=10000;users.remove(userNum);users.add(userNum,user);ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("用户信息.txt"));oos.writeObject(users);oos.close();}//若欠款,计算贷款天数和欠款金额及信用分if(Double.parseDouble(user.debt)!=0) {Date date1=timeFormat.parse(timeFormat.format(System.currentTimeMillis()));Date date2=timeFormat.parse(user.loanTime.get(user.loanTime.size()-1));int difference=(int)((date1.getTime()-date2.getTime())/(1000*3600*24)); //计算贷款天数if(difference>=30) { //达到30天,计算信用分、利息及欠款金额//获取贷款时信用分和欠款int credit=Integer.parseInt(user.dai.get(user.dai.size()-2));String debt=user.dai.get(user.dai.size()-1); if(credit>difference%30) //信用分足够扣取user.credit=credit-(int)(difference%30); //计算信用分,每30天-1;else //信用分不足扣取,置0user.credit=0;user.debt=String.valueOf(Double.parseDouble(debt)+Double.parseDouble(debt)*0.015*(difference%30)); //计算欠款,每30天收取月利息users.remove(userNum);users.add(userNum,user);ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("用户信息.txt"));oos.writeObject(users);oos.close();}}lb_tips.setText("登录成功!");loginTips();new UserFunction();HomePage.mainJframe.dispose();}else { //密码错误user.errorTime.add(timeFormat.format(System.currentTimeMillis())); //记录密码错误时间user.errorNum=n+1; //当日密码出错次数+1//若当日密码出错次数达3次,记录锁定时间,锁定天数+1if(user.errorNum==3&&!(timeFormat.parse(timeFormat.format(System.currentTimeMillis())).equals(timeFormat.parse(user.lockTime.get(user.lockTime.size()-1))))) {user.lockTime.add(timeFormat.format(System.currentTimeMillis())); //记录锁定时间user.lockDays++; //锁定天数+1if(user.lockDays==3) //若锁定天数达3天,将永久锁定账户user.lock=true;}users.remove(userNum);users.add(userNum,user);ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("用户信息.txt"));oos.writeObject(users);oos.close();lb_tips.setText("密码错误,今日剩余次数:"+(3-user.errorNum));loginTips();}}} catch (ParseException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}}public void loginTips() { //登录时弹出的提示信息窗口JDialog tips=new JDialog(HomePage.mainJframe," 提示",true);JPanel pn_tips=new JPanel();JButton bt_tips=new JButton("确 定");tips.setSize(450,200);tips.setLocationRelativeTo(null);tips.setResizable(false);tips.setLayout(null);pn_tips.setBounds(0,30,450,70);lb_tips.setFont(new Font("黑体",0,25));bt_tips.setFont(new Font("黑体",0,20));bt_tips.setBounds(175,100,100,50);bt_tips.setCursor(new Cursor(Cursor.HAND_CURSOR));pn_tips.add(lb_tips);tips.add(pn_tips);tips.add(bt_tips);bt_tips.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {tips.dispose();}});tips.setVisible(true);}}

… …
其他代码请见程序源码!

后记

本程序仅供学习和参考,请勿抄袭或另作他用。
感谢观看,有什么问题可在下方评论区进行评论,若觉得本文章写得不错,还请点个赞呢。( • ̀ω•́ )✧求点赞、评论、收藏

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。