[课程设计]Java实现图形化窗口界面可存储ATM机(自助取款机)
来源:互联网 发布:怎么安装mysql-5.7.1 编辑:程序博客网 时间:2024/05/16 19:43
这是一个使用io流和swing库制作的可存储的窗口化ATM机程序;臭不要脸的发上来
实现的功能有:1.登录和注册用户(虽然现实中的ATM中没有注册功能)
2.存款
3.取款
4.查询记录,包括存款和取款和转账的记录
5.更改密码
6.退卡
类的构成:1.Test类,实现读取用户文档并更新用户文档的功能;
2.LoginGui类,登录界面,实现登录和注册等功能;
3.Menu类,菜单界面
4.InMoney,OutMoney,Inqury,Transfer类,ChangePassword,分别为存款界面,取款界面,查询界面,转账界面,更改密码界面
5.Account,账户类,实现账户的各种功能,包括存款,取款,转账,更改密码等
项目思路:1.该项目中通过文本来保存用户信息和操作记录,用户信息存储在users.txt中,用户的记录存储在相应用户的用户名.txt中,在程序开始时,调用Test类中的
usesrListRead方法读取users文档,将信息读入程序,得到用户信息,创建用户的List(Tset类中的usersList),并创建用户;
2.首先在登陆界面进行登陆或注册,进行合法性验证,若能成功注册,创建相应的Account类,并创建相应的记录文本,然后要求登录。如果能成功登陆,将Tes
t中的静态变量currentAccount(当前登录的用户)设置为该用户,之后的操作对这个用户进行操作。本程序中
有一个默认用户,id为admin,密码为123456,可以直接登录。记录文本用来存储用户的操作,在后面的每一步操
作中都会通过io流写入记录文本;
3.登陆后弹出菜单,点击按钮弹出相应界面,使用功能后将记录根据文件名存储在用户相应的记录文件中,然后每一次用户状态改变时(使用功能后)都会调
用Test类中的usersListUpdate对用户文档进行更新。这样关闭程序后下次再打开程序时再读取文档就能恢复信息。也就是完成了保存功能。
4.各个界面均是使用java自带的swing库实现的。
注意:1.Test类中使用了很多静态变量来进行全局传值。Test.xxx什么都表示是Test 类中的静态变量。
2.不能同时用read和write对同一个文件进行操作,否则会清空文件 ,应注意
流的关闭
源码下载地址:链接:点击打开链接 点击打开链接 密码: 3fy5
实现的功能截图:
菜单及总功能界面:
具体代码:
Test类(测试类)
package mybank;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("admin 12345 88888"); 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("更新用户失败"); } }}
Account类(账户类)
方法主要写在这里面。
package mybank;import com.sun.deploy.util.SyncFileAccess;import com.sun.org.apache.regexp.internal.RE;import javax.swing.*;import java.io.*;import java.text.SimpleDateFormat;import java.util.*;public class Account { int money; String id;//账号名 String password; Date now=new Date(); Date currentTime; SimpleDateFormat formatter; Reader fr; ; public Account(String id, String password, String money) {//构造方法 this.id = id; this.password = password; this.money=Integer.parseInt(money); } public void outMoney (int money)throws Exception {//抛出异常,由相关的界面类弹窗处理异常,下面几个方法同理 //如在取钱界面取钱,则会调用此函数,进行try/catch处理,获得这个函数的异常,弹窗说明异常 if (money > this.money) { throw new Exception("余额不足"); } if(money<0) { throw new Exception("不能取出负数"); } formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//时间格式 currentTime = new Date();//当前时间 String dateString = formatter.format(currentTime);//处理当前时间格式 Writer fw = new FileWriter(Test.file); fw.write(Test.recordString.append(dateString + "\t" + Test.currentAccount.id + "\t取出" + money + "元\r\n").toString());//将这次的取钱行为添加到记录文件中 fw.flush();//写进文件 fw.close(); this.money -= money; Test.usersListUpdate();//更新用户文档(信息) } public void inMoney(int money)throws Exception { try { Writer fw = new FileWriter(Test.file); // System.out.println(Test.file); formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); currentTime=new Date(); String dateString=formatter.format(currentTime); fw.write(Test.recordString.append(dateString+"\t"+Test.currentAccount.id+"\t存入" + money + "元\r\n").toString()); fw.flush();//写进文件 fw.close(); this.money+=money; Test.usersListUpdate();//更新当前用户信息 } catch (Exception e1) { throw new Exception("写入记录失败"); } } public void transfer(int money,String id)throws Exception//转账 { if(id.equals(Test.currentAccount.id)) { throw new Exception("不能转给自己"); } if(money>this.money) { throw new Exception("余额不足"); } if(money<0) { throw new Exception("不能转入负数"); } for(int i=0;i<Test.usersList.size();i++) { if(Test.usersList.get(i).id.equals(id))//找到要转帐的用户 { Test.usersList.get(i).money+=money;//转入 this.money-=money;//扣钱 FileWriter fw=new FileWriter(Test.file); formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//声明时间格式 currentTime=new Date();//获取当前时间 String dateString=formatter.format(currentTime);//转换时间格式 fw.write(Test.recordString.append(dateString+"\t向"+id+"\t转出"+money+"元\r\n").toString());//Test类中的静态字符串拼接上这个字符串覆盖写入当前用户文档 fw.close(); /********************向转入目标写入转账信息*************************/ try { fr = new FileReader(id+".txt");//字符流 } catch (Exception e) { System.out.println("字符流创建失败"); } BufferedReader bfr = new BufferedReader(fr); String temp=""; String temp1; while ((temp1 = bfr.readLine()) != null) { temp+=temp1; } temp=temp.replace("元","元\n\r")+dateString+"\t由"+Test.currentAccount.id+"\t转进"+money+"元\r\n"; System.out.println(temp); fw=new FileWriter(id+".txt"); fw.write(temp); fw.close(); JOptionPane.showMessageDialog(null,"转账成功"); Test.usersListUpdate();//更新用户文档 return; } } throw new Exception("目标用户不存在"); } public void ChangePassword(String newPassword)throws Exception { if(newPassword.equals(this.password)) { throw new Exception("原密码和新密码不能一样"); } else { if(newPassword.equals("")) { throw new Exception("密码不能为空"); } } password=newPassword; Test.usersListUpdate(); }}
LoginGui类(登录界面)
package mybank;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 JTextField passWord,passwordCheck; private JButton login; private JButton register; 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("\tUserName:")); userName=new JTextField(20); p1.add(userName); p2=new JPanel(); p2.add(new JLabel("\tPassword:")); passWord=new JTextField(20); p2.add(passWord); p3=new JPanel(); login=new JButton(" Login "); register=new JButton(" Register "); p3.add(login); p3.add(register); p4=new JPanel(); p4.add(new JLabel("PasswordCheck:")); passwordCheck=new JTextField(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); frame.setBounds(500,500,350,250);//设置大小 frame.setLayout(new FlowLayout());//设置流式布局 } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals(" Register ")) {//注册,如果监听器获得的按钮文本是这个,也就是点击的按钮文本是这个的话,执行下面的语句 if(p4.isVisible()==false) { p4.setVisible(true);//检查密码输入栏 login.setText(" Cancel ");//将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(" Login ")){ 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(" Cancel ")) { p4.setVisible(false); login.setText(" Login "); regirsterable=false;//不可注册 } }}
Menu类(菜单界面)
package mybank;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Menu implements ActionListener{ public JFrame mframe; private JPanel mp0,mp1,mp2,mp3,mp4;//p4是确认密码;点击register按钮石出现 private JTextField passWord,passwordCheck; private JButton inqury; private JButton outmoney; private JButton transfer; private JButton inmoney; private JButton changepassword; public Menu() { mframe=new JFrame(); mframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JButton inqury=new JButton("查询"); JButton outmoney=new JButton("取款"); JButton transfer=new JButton("转账"); JButton inmoney=new JButton("存款"); JButton changepassword=new JButton("更改密码"); JButton exit=new JButton("退卡"); mp0=new JPanel(); mp0.add(new JLabel("选择项目")); mframe.add(mp0); mp1=new JPanel(); mp1.add(inmoney); mp1.add(inqury); mp1.add(outmoney); mp1.add(transfer); mp1.add(changepassword); mp1.add(exit); mp1.setLayout(new GridLayout(3,2,20,20)); mframe.add(mp1); mframe.pack(); mframe.setVisible(true); mframe.setLayout(new FlowLayout()); mframe.setBounds(500,500,450,300); inqury.addActionListener(this);//绑定监听器 inmoney.addActionListener(this); outmoney.addActionListener(this); transfer.addActionListener(this); changepassword.addActionListener(this); exit.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { String cmd=e.getActionCommand();//cmd赋值为点击的按钮的值 if(cmd.equals("查询")) { Inqury inquryGui=new Inqury(); } else if(cmd.equals("取款")) { OutMoney outMoneyGui=new OutMoney(); } else if(cmd.equals("存款")) { InMoney inMoney=new InMoney(); }else if(cmd.equals("转账")) { Transfer transfer=new Transfer(); }else if(cmd.equals("更改密码")) { ChangePassword changePassword=new ChangePassword(); } else if(cmd.equals("退卡")){ mframe.setVisible(false);//隐藏 LoginGui loginGui=new LoginGui(); JOptionPane.showMessageDialog(null,"请记得取走你的银行卡"); } }}
InMoney类(存款界面)
package mybank;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.FileWriter;public class InMoney implements ActionListener{ public JTextField money; public JFrame iframe; public JPanel ip0,ip1,ip2,ip3; public JButton confirm,cancel,exit; public JLabel yue; public InMoney() { iframe=new JFrame("存款"); ip0=new JPanel(); ip0.add(new JLabel("账户id:"+Test.currentAccount.id)); ip1=new JPanel(); yue=new JLabel("账户余额:"+Test.currentAccount.money); ip1.add(yue); ip2=new JPanel(); ip2.add(new JLabel("存款金额:")); money=new JTextField(20); ip2.add(money); ip3=new JPanel(); confirm=new JButton("确定"); ip3.add(confirm); cancel=new JButton("返回"); ip3.add(cancel); iframe.add(ip0); iframe.add(ip1); iframe.add(ip2); iframe.add(confirm); iframe.add(cancel); iframe.setLayout(new FlowLayout()); iframe.setVisible(true); iframe.setBounds(500,500,350,300); confirm.addActionListener(this);//绑定监听器 cancel.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定"))//按下确定按钮 { try { Test.currentAccount.inMoney(Integer.parseInt(money.getText()));//调用当前登陆账户的存钱函数 JOptionPane.showMessageDialog(null, "存款成功");//弹窗 yue.setText("账户余额:"+Test.currentAccount.money); } catch (ClassCastException e1)//捕获当前登录账户中inmoney函数中的异常。类型转换异常 { JOptionPane.showMessageDialog(null, "输入数据类型错误,请输入整数"); } catch (Exception e1)// { JOptionPane.showMessageDialog(null, e1.getMessage()); } } else { iframe.setVisible(false);//隐藏 } }}
Inqury类(查询类)
package mybank;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Inqury implements ActionListener{ public JFrame iframe; public JPanel ip0,ip1,ip2; public JTextArea inquryresult; public JButton confirm,cancel,exit; public JLabel yue; public Inqury() { iframe=new JFrame("查询"); ip0=new JPanel(); ip0.add(new JLabel("账户id:"+Test.currentAccount.id)); ip1=new JPanel(); yue=new JLabel("账户余额:"+Test.currentAccount.money); ip1.add(yue); ip2=new JPanel(); inquryresult=new JTextArea(10,30); ip2.add(inquryresult); confirm=new JButton("查询记录"); confirm.addActionListener(this); iframe.add(ip0); iframe.add(ip1); iframe.add(ip2); iframe.add(confirm); iframe.setLayout(new FlowLayout()); iframe.setVisible(true); iframe.setBounds(500,500,350,300); } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("查询记录")); { //Test.recordString是从账户文档中度去处的字符串 //在写入文本时/r/n才是换行,但在java中\r\n则是两个换行,而且Test.recordString是一行一行读取出来的拼接上的,所以并没有换行符,所以这里替换成一个\n inquryresult.setText(Test.recordString.toString().replace("元","元\n").replace("null",""));//去除掉结果字符串中的null,并将元替换为元\r\n来换行换行 yue.setText("账户余额:"+Test.currentAccount.money);//更新显示余额 } }}
OutMoney类(取款)
package mybank;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.FileWriter;public class OutMoney implements ActionListener{ public JTextField money; public JFrame iframe; public JPanel ip0,ip1,ip2,ip3; public JButton confirm,cancel,exit; public JLabel yue;//余额 public OutMoney() { iframe=new JFrame("取款"); ip0=new JPanel(); ip0.add(new JLabel("账户id:"+Test.currentAccount.id)); ip1=new JPanel(); yue=new JLabel("账户余额:"+Test.currentAccount.money); ip1.add(yue); ip2=new JPanel(); ip2.add(new JLabel("取款金额:")); money=new JTextField(20); ip2.add(money); ip3=new JPanel(); confirm=new JButton("确定"); ip3.add(confirm); cancel=new JButton("返回"); ip3.add(cancel); iframe.add(ip0); iframe.add(ip1); iframe.add(ip2); iframe.add(confirm); iframe.add(cancel); iframe.setLayout(new FlowLayout()); iframe.setVisible(true); iframe.setBounds(500,500,350,300); confirm.addActionListener(this); cancel.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定"))//点击确定按钮 { try { Test.currentAccount.outMoney(Integer.parseInt(money.getText())); JOptionPane.showMessageDialog(null, "取款成功");//弹窗 yue.setText("账户余额:"+Test.currentAccount.money);//更新余额显示 } catch (ClassCastException e1) { JOptionPane.showMessageDialog(null, "输入数据类型错误,请输入整数");//捕获Test类中outmoney方法的异常 } catch (Exception e1) { JOptionPane.showMessageDialog(null, e1.getMessage()); } } else { iframe.setVisible(false);//隐藏 } }}
Transfer类(转账)
package mybank;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Transfer implements ActionListener{ public JTextField money,other; public JFrame iframe; public JPanel ip0,ip1,ip2,ip3,ip4; public JButton confirm,cancel,exit; public JLabel yue; public Transfer() { iframe=new JFrame("转账"); ip0=new JPanel(); ip0.add(new JLabel("账户id:"+Test.currentAccount.id)); ip1=new JPanel(); yue=new JLabel("账户余额:"+Test.currentAccount.money); ip1.add(yue); ip2=new JPanel(); ip2.add(new JLabel("转账账户id:")); other=new JTextField(10); ip2.add(other); ip4=new JPanel(); ip4.add(new JLabel("转账金额:")); money=new JTextField(10); ip4.add(new JLabel("<html><br/><html>"));//换行 ip4.add(money); ip3=new JPanel(); confirm=new JButton("确定"); ip3.add(confirm); cancel=new JButton("返回"); ip3.add(cancel); iframe.add(ip0); iframe.add(ip1); iframe.add(ip2); iframe.add(ip4); iframe.add(ip3); iframe.setLayout(new FlowLayout()); iframe.setVisible(true); iframe.setBounds(500,500,350,300); confirm.addActionListener(this); cancel.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定")) { try { Test.currentAccount.transfer(Integer.parseInt(money.getText()),other.getText()); yue.setText("账户余额:"+Test.currentAccount.money);//更新面板上的余额 } catch (Exception e1) { JOptionPane.showMessageDialog(null, e1.getMessage()); } } else { iframe.setVisible(false); } }}
ChangePassword类(更改密码)
package mybank;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class ChangePassword implements ActionListener{ public JTextField 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 JTextField(20); ip2.add(new JLabel("<html><br/><html>"));//换行 ip2.add(oldPassword); ip0=new JPanel(); ip0.add(new JLabel("新密码:")); newPassword=new JTextField(20); ip0.add(new JLabel("<html><br/><html>"));//换行 ip0.add(newPassword); ip4=new JPanel(); ip4.add(new JLabel("再次输入新密码:")); checkPassword=new JTextField(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.setBounds(500,500,350,300); 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())) { Test.currentAccount.ChangePassword(newPassword.getText()); JOptionPane.showMessageDialog(null, "更改密码成功"); iframe.setVisible(false); Test.menu.mframe.setVisible(false);//关闭菜单界面 new LoginGui(); } else { JOptionPane.showMessageDialog(null, "两次输入的密码不一致"); } } catch (Exception e1) {//捕获账户类中更改密码函数的异常并弹窗显示 JOptionPane.showMessageDialog(null, e1.getMessage()); } } else { JOptionPane.showMessageDialog(null, "原密码错误"); } } else//如果点击cancel { iframe.setVisible(false); } }}
本人是一名大二的学生,目前只学了一学期的java,因此有很多不规范的地方,请见谅。
这个程序技术含量并不高,在计划做的时候觉得很简单,但实际上写的时候,发现有一些细节逻辑比较难以处理和混乱,花费了我一周的时间,其中修复逻辑上的bug花了60%的时间,所以想发出来纪念一下。
我第一次写这么大的java程序,所以可能会有些混乱和有些多余的代码,但我详细的写了注释。希望能帮助到
需要帮助的朋友。若有问题,欢迎交流。
- [课程设计]Java实现图形化窗口界面可存储ATM机(自助取款机)
- C#+Oracle:ATM自助取款机开发
- 自助取款机(ATM)与自助存款机(CDM)工作原理
- 实现ATM取款机功能
- 自动取款机(ATM)
- ATM自助取款机与CDM自助存款机工作原理
- ATM取款机模拟
- ATM取款机程序
- ATM取款机设计
- ATM 取款机
- ATM自动取款机
- 仿ATM取款机
- ATM 自动取款机
- 模拟ATM取款机
- 模拟ATM取款机
- 模拟ATM取款机
- ATM取款机
- java程序 升级版ATM取款机
- Canvas 画时钟
- 入门训练 A+B问题
- 数组对象排序
- Canvas 画五角星
- Linux shell 提取文件名和目录名
- [课程设计]Java实现图形化窗口界面可存储ATM机(自助取款机)
- python 生成字符图片
- ESLint (一)简介与安装
- 安卓源码google安卓设备OTA升级包及工厂镜像下载
- sass
- Java常用IO流
- 2.Binary Heap[数据结构]
- ESLint (二)配置文件
- 文章标题