100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java图形界面编程模拟ATM自助取款系统

Java图形界面编程模拟ATM自助取款系统

时间:2019-07-12 19:16:11

相关推荐

Java图形界面编程模拟ATM自助取款系统

本人学习Java时一直想做一个图形界面的程序,所以利用闲暇时间,做了一个Java图形界面编程模拟ATM自助取款系统,界面简洁漂亮,基本功能ATM功能实现。

程序初始时

考号:123456 密码:123456 金额:10000

实现功能:

1、漂亮简洁的图形界面

2、用户登录,注册功能

3、用户存款、取款功能

4、用户查询余额及账户资金使用情况(账户收支情况)

5、用户转账功能

6、更改账户密码功能

7、退卡功能

以下代码可连同注释复制到eclipse中运行,需要先创建同名包和类

Test.java

package atm;//import javafx.scene.layout.Pane; import javax.swing.*; import java.awt.event.ActionListener; import java.io.*; import java.util.ArrayList; import java.util.List; public class Test {public static List<Account> usersList; public static Account currentAccount;//登录的用户 public static File file;//当前用户的记录文件 public static StringBuilder recordString=new StringBuilder();//登录后读取文本中的记录,然后和recordString拼接 public static Menu menu;//静态的菜单界面,用于在更换密码后关闭菜单界面 public static File usersFile; public static StringBuilder usersString=new StringBuilder(); static Reader fw; public static void main(String[] args)throws Exception { usersList = new ArrayList<Account>(); //System.out.println(usersList); /**********************用户文本**********************/ File users = new File("users.txt"); if (!users.exists()) { try { users.createNewFile(); Writer fw = new FileWriter("users.txt"); fw.write("123456 123456 10000"); fw.flush(); fw.close(); } catch (Exception e1) { JOptionPane.showMessageDialog(null, "创建用户文档失败"); } } usersFile = users;//创建用户文档,存储用户账户,密码,余额信息; usersListRead(); usersListUpdate(); /*****************************Login****************************/ LoginGui loginGui = new LoginGui(); } public static void usersListRead() { /**********************按照用户文档读取用户列表并创建所有用户**********************/ /**********************并写入list**********************/ try { fw = new FileReader("users.txt");//字符流 } catch (Exception e) { System.out.println("字符流创建失败"); } BufferedReader bfr = new BufferedReader(fw); String temp = ""; try { System.out.println("开始写入list"); while ((temp = bfr.readLine()) != null) {//不知为何读取出的字符串中最前面会出现Null String[] tmpstr = new String[5]; tmpstr = temp.split("\\s+");//分割空格 System.out.println("余额:" + tmpstr[2]); Account a = new Account(tmpstr[0], tmpstr[1], tmpstr[2]); usersList.add(a); System.out.println("读取到"+a.id+",实例化用户" + a.id); } bfr.close(); fw.close(); System.out.println("用户list:"+usersList); } catch (Exception e) { System.out.println("读取用户文档失败"); } } public static void usersListUpdate() { /**********************按照list内容写入文本用户信息**********************/ try { Writer fw = new FileWriter("users.txt"); StringBuilder tmpstr = new StringBuilder(); for (int i = 0; i < usersList.size(); i++) { // System.out.println(Test.currentAccount.id); tmpstr.append(usersList.get(i).id + " " + usersList.get(i).password + " " + usersList.get(i).money + "\r\n"); //fw.write(Test.currentAccount.id + " " + Test.currentAccount.password + " " + Test.currentAccount.money+"\r\n"); } fw.write(tmpstr.toString()); fw.flush(); fw.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("更新用户失败"); } } }

LoginGui.java

package atm;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.Reader; public class LoginGui implements ActionListener{//实现监听器的接口 private JFrame frame; private JPanel p0,p1,p2,p3,p4;//p4包括确认密码时的输入框;点击register按钮出现 private JTextField userName; private JPasswordField passWord,passwordCheck; private JButton login; private JButton register,jb3; private Reader fw; Boolean regirsterable=true;//控制是否能注册的变量 public LoginGui() { frame=new JFrame("登录ATM"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口的点击右上角的x的处理方式,这里设置的是退出程序 p0=new JPanel(); p0.add(new JLabel("中国建设银行ATM系统")); frame.add(p0); p1=new JPanel(); p1.add(new JLabel("\t卡号:")); userName=new JTextField(20); p1.add(userName); p2=new JPanel(); p2.add(new JLabel("\t密码:")); passWord=new JPasswordField(20); p2.add(passWord); p3=new JPanel(); login=new JButton(" 登录"); register=new JButton(" 注册"); jb3=new JButton(" 重置");p3.add(login); p3.add(register); p3.add(jb3); p4=new JPanel(); p4.add(new JLabel("确认密码:")); passwordCheck=new JPasswordField(20); p4.add(passwordCheck); frame.add(p1); frame.add(p2); frame.add(p4);//确认密码框 frame.add(p3); frame.pack(); frame.setVisible(true); p4.setVisible(false); show(); /*****************************Login****************************/ } public void show(){ login.addActionListener(this);//添加监视器 register.addActionListener(this); jb3.addActionListener(this); frame.setBounds(500,500,350,250);//设置大小 frame.setLayout(new FlowLayout());//设置流式布局 frame.setLocationRelativeTo(null);//居中} public void clear() {userName.setText("");passWord.setText("");passwordCheck.setText("");}@Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals(" 注册")) {//注册,如果监听器获得的按钮文本是这个,也就是点击的按钮文本是这个的话,执行下面的语句 if(p4.isVisible()==false) { p4.setVisible(true);//检查密码输入栏 login.setText(" 取消");//将login文本改为cancel,同时也能触发作为Cancel的监听器 regirsterable=true; return; } if(regirsterable==true) { if (userName.getText().equals(""))//如果userName的文本是空 { JOptionPane.showMessageDialog(frame, "用户名不能为空");//弹窗 return; } for (int i = 0; i < Test.usersList.size(); i++) { if (Test.usersList.get(i).id.equals(userName.getText())) { JOptionPane.showMessageDialog(frame, "该用户已被注册"); userName.setText("");//清空输入框 passWord.setText(""); passwordCheck.setText(""); return;//如果同名,结束方法,不在运行下面的语句 } } //如果执行到这里说明找到用户名 if (passWord.getText().equals("")) { JOptionPane.showMessageDialog(frame, "密码不能为空,请重新输入"); return; } else { if (passwordCheck.getText().equals(passWord.getText())) { Account registeraccount = new Account(userName.getText(), passWord.getText(), "0");//实例化此账号 JOptionPane.showMessageDialog(frame, "注册成功,请登录"); Test.usersList.add(registeraccount);//加入Test类的静态用户list Test.usersListUpdate();//更新用户文档 return; } else { JOptionPane.showMessageDialog(frame, "两次输入的密码不一致,请重新输入"); return; } } } } if(e.getActionCommand().equals(" 重置")){ clear();}if(e.getActionCommand().equals(" 登录")){ for (int i = 0; i < Test.usersList.size(); i++) { if (Test.usersList.get(i).id.equals(userName.getText())) { if(passWord.getText().equals(Test.usersList.get(i).password)) { JOptionPane.showMessageDialog(frame, "登录成功"); Test.currentAccount=Test.usersList.get(i);//将list中符合登陆输入的账户密码的类设为当前Test类中的静态的“当前类”,以便后面各种操作; Test.file=new File(Test.currentAccount+".txt"); Test.recordString=new StringBuilder();//清空,避免将上一个用户的记录写进新登录的用户中 //Test.recordString.append("");//避免recordString空指针 Menu menu=new Menu();//实例化菜单窗口 Test.menu=menu; frame.setVisible(false);//隐藏登陆窗口 /************************创建记录文件**********************/ File records = new File(Test.currentAccount.id+".txt");//以账户id命名 if(!records.exists()) { try { records.createNewFile(); } catch (Exception e1) { JOptionPane.showMessageDialog(null, "创建该用户的记录失败"); } } Test.file=records; /*****************读取记录文件************/ try { fw = new FileReader(Test.file);//字符流 } catch (Exception e1) { JOptionPane.showMessageDialog(null, "读取记录失败"); } BufferedReader bfr=new BufferedReader(fw); String temp=""; try { while ((temp = bfr.readLine()) != null) {//不知为何读取出的字符串中最前面会出现Null,但不影响使用 Test.recordString .append(temp);//读取原先该账户的记录的每一行并拼接到Test.recordString中,在inqury类中输出作为查询记录的结果 } //将记录读取并合并为一个字符串 fw.close(); } catch (Exception e1) { System.out.println("读取记录过程中出现错误"); } return; } else { JOptionPane.showMessageDialog(frame, "密码错误"); passwordCheck.setText(""); return; } } } JOptionPane.showMessageDialog(frame, "该用户不存在"); } if(e.getActionCommand().equals(" 取消")) { p4.setVisible(false); login.setText(" 登录"); regirsterable=false;//不可注册 } } }

ChangePassword.java

package atm;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ChangePassword implements ActionListener{public JPasswordField oldPassword,newPassword,checkPassword; public JFrame iframe; public JPanel ip0,ip1,ip2,ip3,ip4; public JButton confirm,cancel,exit; public ChangePassword() { iframe=new JFrame("更改密码"); iframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); ip2=new JPanel(); ip2.add(new JLabel("原密码:")); oldPassword=new JPasswordField(20); ip2.add(new JLabel("<html><br/><html>"));//换行 ip2.add(oldPassword); ip0=new JPanel(); ip0.add(new JLabel("新密码:")); newPassword=new JPasswordField(20); ip0.add(new JLabel("<html><br/><html>"));//换行 ip0.add(newPassword); ip4=new JPanel(); ip4.add(new JLabel("再次输入新密码:")); checkPassword=new JPasswordField(20); ip4.add(new JLabel("<html><br/><html>"));//换行 ip4.add(checkPassword); ip3=new JPanel(); confirm=new JButton("确定"); ip3.add(confirm); cancel=new JButton("返回"); ip3.add(cancel); iframe.add(ip2); iframe.add(ip0); iframe.add(ip4); iframe.add(ip3); iframe.add(confirm); iframe.add(cancel); iframe.setLayout(new FlowLayout()); iframe.setVisible(true); iframe.setTitle("密码更改");//窗体标签 iframe.setSize(400, 200);//窗体大小 iframe.setLocationRelativeTo(null);//在屏幕中间显示(居中显示) confirm.addActionListener(this); cancel.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定")) { if (Test.currentAccount.password.equals(oldPassword.getText())) { try { if(newPassword.getText().equals(checkPassword.getText())) { if(newPassword.getText().length()>=6) {Test.currentAccount.ChangePassword(newPassword.getText()); JOptionPane.showMessageDialog(null, "更改密码成功"); iframe.setVisible(false); Test.menu.mframe.setVisible(false);//关闭菜单界面 new LoginGui(); }else {JOptionPane.showMessageDialog(null,"密码不能少于6位!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);newPassword.setText("");oldPassword.setText("");checkPassword.setText("");}} else { JOptionPane.showMessageDialog(null, "两次输入的密码不一致"); } } catch (Exception e1) {//捕获账户类中更改密码函数的异常并弹窗显示 JOptionPane.showMessageDialog(null, e1.getMessage()); } } else { JOptionPane.showMessageDialog(null, "原密码错误"); } } else//如果点击cancel { iframe.setVisible(false); } } }

上面展示了部分代码,有兴趣的朋友可以到下面的链接下载

/download/m0_37738838/10512095

运行效果

有兴趣的朋友可以一起交流,QQ交流群:247620001,验证消息:CSDN

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。