java期末课程设计----模拟银行业务(带界面)
java期末课程设计----模拟银行业务(带界面)
本项目包含存款,取款,查询,转账,修改密码等功能的银行管理系统的功能(不涉及数据库)。大致流程图如下:
一、设计思路
本系统采用JAVA语言并在eclipse环境下编写测试完成,涉及类的概念,以及面向对象的几大特性(继承,封装,多态,抽象),也有异常处理机制,采用集合(更好)存储账户数据。JAVA类的面向对象的应用,拥有异常处理机制,不会因为输入错误而导致程序崩溃。本系统各个类之间的相互关系,涉及继承、封装、多态、抽象,可以实现数据保存功能,数据将保存在文件中(即当你注册了一个账户,下次再登录系统时,可以实现与上次最后的操作相衔接)。最后账户号自动生成。注册时需要输入用户的个人信息,将信息保存到文件。忘记密码则需要验证用户卡号和身份证号来重新设置新密码,成功后则返回登录界面登录。系统的默认账户名是张三,卡号是123456,密码是123456,身份证号为123456。
通过对文件的操作进行数据保存和读取;用户注册,注册信息写入文件保存;用户登录首先输入卡号和密码,通过读取文件用户信息验证,验证通过显示操作界面,然后选择存或取及余额查询转账,系统会自动进行各种计算,最后将信息保存到文件中。存款及取款要有输入验证,输入金额不能为负数或字母,验证通过写入文件;查询余额从文件中读取数据;修改密码需要判断新密码是否与原密码相同,与输入的确认密码是否一致,验证通过则更新当前用户信息,返回登录界面重新登录。
二、界面展示
图1 主界面:
图2 注册界面:
图3 忘记密码界面:
图4 操作界面:
图5 存款界面:
图6 取款界面:
图7 查询记录界面:
图8 修改密码界面:
三、代码实现
登录注册界面
代码如下(示例):
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*; public class Login implements ActionListener{//实现监听器的接口 JFrame frame; JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3,jpanel_4,p0,p1; JTextField cardhao,username,idcard; JPasswordField passWord,passwordCheck; JButton login,register,reset; Reader fw; Boolean flag=true;//控制是否能注册的变量 public Login() { frame=new JFrame("登录"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口的点击右上角的x的处理方式,这里设置的是退出程序 jpanel_0=new JPanel(); JLabel jlb1=new JLabel("模拟银行业务系统");jlb1.setFont(new java.awt.Font("Dialog", 1, 30));jlb1.setForeground(Color.blue);jpanel_0.add(jlb1);jpanel_1=new JPanel(); jpanel_1.add(new JLabel("\t账户名:")); username=new JTextField(20); jpanel_1.add(username); jpanel_2=new JPanel(); jpanel_2.add(new JLabel("\t卡号:")); cardhao=new JTextField(20); jpanel_2.add(cardhao); p1=new JPanel(); p1.add(new JLabel("\t身份证号:")); idcard=new JTextField(20); p1.add(idcard); jpanel_3=new JPanel(); jpanel_3.add(new JLabel("\t密码:")); passWord=new JPasswordField(20); jpanel_3.add(passWord); jpanel_4=new JPanel(); login=new JButton(" 登录 "); register=new JButton(" 注册 "); reset=new JButton(" 忘记密码 ");jpanel_4.add(login); jpanel_4.add(register); jpanel_4.add(reset); p0=new JPanel(); p0.add(new JLabel("确认密码:")); passwordCheck=new JPasswordField(20); p0.add(passwordCheck); frame.add(jpanel_0); frame.add(jpanel_1);frame.add(p1);//输入身份证号码frame.add(jpanel_2);frame.add(jpanel_3); frame.add(p0);//确认密码框 frame.add(jpanel_4); frame.pack(); frame.setVisible(true); p0.setVisible(false); p1.setVisible(false);jpanel_1.setVisible(false);frame.setBounds(500,500,350,350);//设置大小 frame.setLayout(new FlowLayout());//设置流式布局 frame.setLocationRelativeTo(null);//居中 login.addActionListener(this);//添加监视器 register.addActionListener(this); reset.addActionListener(this); /*****************************Login****************************/ } public void clear() {username.setText("");cardhao.setText("");idcard.setText("");passWord.setText("");passwordCheck.setText("");}@Override public void actionPerformed(ActionEvent e) { if(e.getSource()==reset){ frame.setVisible(false);//隐藏窗口new ForgetPassword();//跳转到忘记密码界面 return;}if(e.getActionCommand().equals(" 注册 ")) {//注册,如果监听器获得的按钮文本是这个,也就是点击的按钮文本是这个的话,执行下面的语句 if(p0.isVisible()==false&&p1.isVisible()==false&&jpanel_1.isVisible()==false) { p0.setVisible(true);//检查密码输入栏 p1.setVisible(true);jpanel_1.setVisible(true);login.setText(" 取消 ");flag=true; return; } String content1=cardhao.getText();String content4=username.getText();String content5=idcard.getText();if(flag==true) { if (content4.equals(""))//如果账户名的文本是空 { JOptionPane.showMessageDialog(frame, "账户名不能为空");//弹窗 return; } }if(flag==true) { if (content5.equals(""))//如果身份证号码的文本是空 { JOptionPane.showMessageDialog(frame, "身份证号不能为空");//弹窗 return; } }if(flag==true) { if (content1.equals(""))//如果卡号的文本是空 { JOptionPane.showMessageDialog(frame, "卡号不能为空");//弹窗 return; } for (int i = 0; i < Bank.usersList.size(); i++) { if (Bank.usersList.get(i).id.equals(content1)) { JOptionPane.showMessageDialog(frame, "该账户已被注册"); clear();return;//如果同名,结束方法,不在运行下面的语句 } } //如果执行到这里说明找到卡号 char[] a=passWord.getPassword();char[] b=passwordCheck.getPassword();String content2=new String(a);String content3=new String(b);if (content2.equals("")) { JOptionPane.showMessageDialog(frame, "密码不能为空,请重新输入"); return; } else { if (content3.equals(content2)) { Account registeraccount = new Account(content1,content2, "0",content4,content5);//实例化此账号 JOptionPane.showMessageDialog(frame, "注册成功,请登录"); Bank.usersList.add(registeraccount);//加入Bank类的静态用户list Bank.usersListUpdate();//更新用户文档 return; } else { JOptionPane.showMessageDialog(frame, "两次输入的密码不一致,请重新输入"); return; } } } } if(e.getActionCommand().equals(" 登录 ")){ if (cardhao.getText().equals(""))//如果卡号的文本是空 { JOptionPane.showMessageDialog(frame, "卡号不能为空");//弹窗 return; } if(new String(passWord.getPassword()).equals("")) { JOptionPane.showMessageDialog(frame, "密码不能为空");//弹窗 return;}for (int i = 0; i < Bank.usersList.size(); i++) {if (Bank.usersList.get(i).id.equals(cardhao.getText())) { if(new String(passWord.getPassword()).equals(Bank.usersList.get(i).password)) { JOptionPane.showMessageDialog(frame, "登录成功");Bank.currentAccount=Bank.usersList.get(i);//将list中符合登陆输入的账户密码的类设为当前Bank类中的静态的“当前类”,以便后面各种操作;Bank.file=new File(Bank.currentAccount+".txt");Bank.recordString=new StringBuilder();//清空,避免将上一个用户的记录写进新登录的用户中//Bank.recordString.append("");//避免recordString空指针frame.setVisible(false);//隐藏登陆窗口 JOptionPane.showMessageDialog(null, "欢迎你"+","+Bank.currentAccount.userName);Menu menu=new Menu();//实例化菜单窗口Bank.menu=menu;/************************创建记录文件**********************/File records = new File(Bank.currentAccount.id+".txt");//以账户id命名if(!records.exists()){try {records.createNewFile();}catch (Exception e1){JOptionPane.showMessageDialog(null, "创建该用户的记录失败");}}Bank.file=records;/*****************读取记录文件************/try {fw = new FileReader(Bank.file);//字符流}catch (Exception e1){JOptionPane.showMessageDialog(null, "读取记录失败");}BufferedReader bfr=new BufferedReader(fw);String temp="";try {while ((temp = bfr.readLine()) != null) {//不知为何读取出的字符串中最前面会出现Null,但不影响使用Bank.recordString .append(temp);//读取原先该账户的记录的每一行并拼接到Bank.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(" 取消 ")) { p0.setVisible(false); p1.setVisible(false); jpanel_1.setVisible(false); login.setText(" 登录 "); flag=false;//不可注册 } }}
忘记密码
输入卡号和身份证号,对用户的卡号,身份证号进行验证(你也可以再添加一个账户名的验证)
代码如下(示例):
import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;
public class ForgetPassword implements ActionListener{
JTextField cardhao, IDcard;
JFrame frame;
JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3;
JButton button_enter,button_cancel;
public ForgetPassword() {frame=new JFrame("忘记密码");frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jpanel_0=new JPanel(); JLabel jlb1=new JLabel("忘记密码");jlb1.setFont(new java.awt.Font("Dialog", 1, 30));jlb1.setForeground(Color.blue);jpanel_0.add(jlb1);jpanel_1=new JPanel();jpanel_1.add(new JLabel("卡号:"));cardhao=new JTextField(20);jpanel_1.add(cardhao);jpanel_2=new JPanel();jpanel_2.add(new JLabel("身份证号:"));IDcard=new JTextField(20);jpanel_2.add(IDcard);jpanel_3=new JPanel();button_enter=new JButton("确定");jpanel_3.add(button_enter); button_cancel=new JButton("返回");jpanel_3.add(button_cancel); frame.add(jpanel_0);frame.add(jpanel_1);frame.add(jpanel_2); frame.add(jpanel_3);frame.pack();frame.setLayout(new FlowLayout());frame.setVisible(true);frame.setBounds(500,500,350,300);frame.setLocationRelativeTo(null);button_enter.addActionListener(this);button_cancel.addActionListener(this);
}
public void clear() { cardhao.setText(""); IDcard.setText("");
}
public void actionPerformed(ActionEvent e) {if(e.getSource()==button_cancel){//按返回按钮frame.setVisible(false);//隐藏窗口new Login();//跳转到操作界面}if(e.getSource()==button_enter){if (cardhao.getText().equals(""))//如果卡号的文本是空 { JOptionPane.showMessageDialog(frame, "卡号不能为空");//弹窗 return; }if (IDcard.getText().equals(""))//如果身份证号的文本是空 { JOptionPane.showMessageDialog(frame, "身份证号不能为空");//弹窗 return; }for (int i = 0; i < Bank.usersList.size(); i++) {if (Bank.usersList.get(i).id.equals(cardhao.getText())) { if(Bank.usersList.get(i).idcard.equals(IDcard.getText())) { JOptionPane.showMessageDialog(frame, "验证身份成功");Bank.currentAccount=Bank.usersList.get(i);//将list中符合登陆输入的账户密码的类设为当前Bank类中的静态的“当前类”,以便后面各种操作;Bank.file=new File(Bank.currentAccount+".txt");Bank.recordString=new StringBuilder();//清空,避免将上一个用户的记录写进新登录的用户中frame.setVisible(false);//隐藏窗口 new Method();//跳转到重新设置新密码 /************************创建记录文件**********************/File records = new File(Bank.currentAccount.id+".txt");//以账户id命名if(!records.exists()){try {records.createNewFile();}catch (Exception e1){JOptionPane.showMessageDialog(null, "创建该用户的记录失败");}}Bank.file=records;/*****************读取记录文件************/try {fw = new FileReader(Bank.file);//字符流}catch (Exception e1){JOptionPane.showMessageDialog(null, "读取记录失败");}BufferedReader bfr=new BufferedReader(fw);String temp="";try {while ((temp = bfr.readLine()) != null) {Bank.recordString .append(temp);}//将记录读取并合并为一个字符串fw.close();}catch (Exception e1){System.out.println("读取记录过程中出现错误");}return;}else{JOptionPane.showMessageDialog(frame, "身份证号错误");IDcard.setText("");return;}}}JOptionPane.showMessageDialog(frame, "该用户不存在"); }} }
----------------------------分割线-------------------------------
跳转到重新设置新密码界面
代码如下(示例):
import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Method implements ActionListener{
public JTextField newPassword,checkPassword;
public JFrame frame;
public JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3;
public JButton button_enter,button_cancel;
public Method() {frame=new JFrame("忘记密码");frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jpanel_0=new JPanel(); JLabel jlb1=new JLabel("忘记密码");jlb1.setFont(new java.awt.Font("Dialog", 1, 30));jlb1.setForeground(Color.blue);jpanel_0.add(jlb1);jpanel_1=new JPanel();jpanel_1.add(new JLabel("新密码:"));newPassword=new JTextField(20); jpanel_1.add(newPassword);jpanel_2=new JPanel();jpanel_2.add(new JLabel("确认密码:"));checkPassword=new JTextField(20); jpanel_2.add(checkPassword);jpanel_3=new JPanel();button_enter=new JButton("确定");jpanel_3.add(button_enter);button_cancel=new JButton("返回");jpanel_3.add(button_cancel);frame.add(jpanel_0);frame.add(jpanel_1);frame.add(jpanel_2);frame.add(jpanel_3);frame.add(button_enter);frame.add(button_cancel);frame.setLayout(new FlowLayout());frame.setVisible(true);frame.setBounds(500,500,350,300);frame.setLocationRelativeTo(null);button_enter.addActionListener(this);button_cancel.addActionListener(this);}public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定")) { if(newPassword.getText().equals("")) { JOptionPane.showMessageDialog(null,"新密码不能为空");return;} if(checkPassword.getText().equals("")) { JOptionPane.showMessageDialog(null,"确认密码不能为空"); return;}try { if(newPassword.getText().equals(checkPassword.getText())) { Bank.currentAccount.method(newPassword.getText()); JOptionPane.showMessageDialog(null, "请妥善保管好你的新密码"); frame.setVisible(false); new Login(); } else { JOptionPane.showMessageDialog(null, "两次输入的密码不一致"); } } catch (Exception e1) {//捕获账户类中更改密码函数的异常并弹窗显示 JOptionPane.showMessageDialog(null, e1.getMessage()); } } else//如果点击 button_cancel { frame.setVisible(false); new Login();//跳转到操作界面} }
}
Account类(用户信息)
代码如下(示例):
import java.io.*;import java.text.SimpleDateFormat;import java.util.*;public class Account {int money;String userName;//账户名String id;//卡号String idcard;//身份证号String password; //卡号密码 Date now=new Date(); Reader fr;public Account(String id, String password, String money,String userName,String idcard) {//构造方法 this.userName=userName;this.id = id; this.password = password; this.idcard =idcard;this.money=Integer.parseInt(money);//parseInt(String s)方法是类Integer的静态方法,它的作用就是将形参 s 转化为整数,比如: Interger.parseInt("1")=1;} public void drawMoney(int money) throws Exception {//抛出异常,由相关的界面类弹窗处理异常,下面几个方法同理 //如在取钱界面取钱,则会调用此函数,进行try/catch处理,获得这个函数的异常,弹窗说明异常 if (money > this.money) { throw new Exception("余额不足"); }if(money<0) { throw new Exception("不能取出负数"); } SimpleDateFormat formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//时间格式 Date currentTime = new Date();//当前时间 String date = formatter.format(currentTime);//处理当前时间格式 Writer fw = new FileWriter(Bank.file); fw.write(Bank.recordString.append(date + "\t" + Bank.currentAccount.id + "\t取出" + money + "元\r\n").toString());//将这次的取钱行为添加到记录文件中 fw.flush();//写进文件 fw.close(); this.money -= money; Bank.usersListUpdate();//更新用户文档(信息) } public void saveMoney(int money)throws Exception { if(money<0) {throw new Exception("不能存入负数");}else{ try { Writer fw = new FileWriter(Bank.file);SimpleDateFormat formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); Date currentTime=new Date(); String date=formatter.format(currentTime); fw.write(Bank.recordString.append(date + "\t" + Bank.currentAccount.id + "\t存入" + money + "元\r\n").toString()); fw.flush();//写进文件 fw.close(); this.money+=money; Bank.usersListUpdate();//更新当前用户信息 } catch (Exception e1) { throw new Exception("写入记录失败"); } } }public void transfer(int money,String id)throws Exception//转账{if(id.equals(Bank.currentAccount.id)){throw new Exception("不能转给自己");}if(money>this.money){throw new Exception("余额不足");}if(money<0) {throw new Exception("不能转入负数");} for(int i=0;i<Bank.usersList.size();i++){if(Bank.usersList.get(i).id.equals(id))//找到要转帐的用户{Bank.usersList.get(i).money+=money;//转入this.money-=money;//扣钱FileWriter fw=new FileWriter(Bank.file);SimpleDateFormat formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//声明时间格式Date currentTime=new Date();//获取当前时间String date=formatter.format(currentTime);//转换时间格式fw.write(Bank.recordString.append(date+"\t向"+id+"\t转出"+money+"元\r\n").toString());//Bank类中的静态字符串拼接上这个字符串覆盖写入当前用户文档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")+date+"\t由"+Bank.currentAccount.id+"\t转进"+money+"元\r\n";System.out.println(temp);fw=new FileWriter(id+".txt");fw.write(temp);fw.close();Bank.usersListUpdate();//更新用户文档return;}}throw new Exception("目标用户不存在");}public void method(String newPassword)throws Exception { password=newPassword; Bank.usersListUpdate(); } public void ChangePassword(String newPassword)throws Exception { if(newPassword.equals(this.password)) { throw new Exception("原密码和新密码不能一样"); } password=newPassword; Bank.usersListUpdate(); }
}
Bank类(对用户信息读取和更新)
代码如下(示例):
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;public class Bank{
public static List<Account> usersList;
public static Account currentAccount;//登录的用户
public static File file;//当前用户的记录文件
public static StringBuilder recordString=new StringBuilder();
public static Menu menu;
public static File usersFile;
public static StringBuilder usersString=new StringBuilder();
public static Reader fw;
public static void main(String[] args)throws Exception {usersList = new ArrayList<Account>();File users = new File("users.txt");if (!users.exists()) {try {users.createNewFile();FileWriter fw = new FileWriter("users.txt");fw.write("123456 123456 0 张三 123456");fw.flush();fw.close();} catch (Exception e1) {JOptionPane.showMessageDialog(null, "创建用户文档失败");}}usersFile = users;//创建用户文档,存储用户账户,密码,余额信息;usersListRead();usersListUpdate();/*****************************Login****************************/new Login();}public static void usersListRead()
{/**********************按照用户文档读取用户列表并创建所有用户**********************/ try {fw = new FileReader("users.txt");//字符流} catch (Exception e) {System.out.println("字符流创建失败");}BufferedReader buf = new BufferedReader(fw);// 提高FileWriter的写数据效率与拓展FileWriter的功能。try {String line="";System.out.println("欢迎你!");while ((line = buf.readLine())!= null) {String[] a= new String[5];a = line.split("\\s+");//分割空格Account b = new Account(a[0], a[1], a[2],a[3],a[4]);usersList.add(b);System.out.println("读取到"+b.userName+",实例化用户" + b.userName);System.out.println("余额:" + a[2]);}buf.close();fw.close();} catch (Exception e) {System.out.println("读取用户文档失败");}
}public static void usersListUpdate()
{try {FileWriter fw = new FileWriter("users.txt");StringBuilder c = new StringBuilder();for (int i = 0; i < usersList.size(); i++) { c.append(usersList.get(i).id + " " + usersList.get(i).password + " " + usersList.get(i).money + " " + usersList.get(i).userName+ " " + usersList.get(i).idcard + "\r\n");}fw.write(c.toString());fw.flush();fw.close();
}
catch (Exception e)
{e.printStackTrace();System.out.println("更新用户失败");}}}
Menu类(操作界面)
操作类型包括六种(存款:1 取款:2 查询余额:3 退出:0 转账:4 修改密码:5)
代码如下(示例):
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Menu implements ActionListener{//操作界面JFrame mframe; JPanel jpanel_0,jpanel_1,jpanel_2;JButton button_enter,button_cancel;JTextField number;
public Menu()
{ mframe=new JFrame("操作界面"); mframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jpanel_0=new JPanel(); JLabel jlb1=new JLabel("银行业务选择");jlb1.setFont(new java.awt.Font("Dialog", 1, 30));jlb1.setForeground(Color.blue);jpanel_0.add(jlb1); jpanel_1=new JPanel();jpanel_1.add(new JLabel("请输入操作数字:"));number=new JTextField (10);jpanel_1.add(number);jpanel_2=new JPanel();button_enter=new JButton("确定");jpanel_2.add(button_enter);button_cancel=new JButton("返回");jpanel_2.add(button_cancel);mframe.add(jpanel_0); mframe.add(jpanel_1); mframe.add(jpanel_2);mframe.pack(); mframe.setVisible(true); mframe.setLayout(new FlowLayout()); mframe.setBounds(500,500,350,300); mframe.setLocationRelativeTo(null);button_enter.addActionListener(this);button_cancel.addActionListener(this);} @Override
public void actionPerformed(ActionEvent e) { String m=number.getText();if(e.getSource()==button_cancel){mframe.setVisible(false);new Login();}else if(e.getSource()==button_enter){if(m.equals("0")){ mframe.setVisible(false);//隐藏 new Login(); JOptionPane.showMessageDialog(null,"请记得取走你的银行卡"); }else if(m.equals("1")) { mframe.setVisible(false);new SaveMoney();} else if(m.equals("2")) { mframe.setVisible(false);new DrawMoney();} else if(m.equals("3")) { mframe.setVisible(false);new Inqury(); } else if(m.equals("4")){ mframe.setVisible(false);new Transfer();}else if(m.equals("5")){ mframe.setVisible(false);new ChangePassword();}else if(m.equals("")){ JOptionPane.showMessageDialog(null,"输入操作数字不得为空");}else {JOptionPane.showMessageDialog(null,"输入错误,请重新输入数字!");} } } }
SaveMoney类(存款)
输入操作数字1,进入存款界面。
进入存款界面,输入存款金额。按确定按钮,则消息框会显示:“存款成功”。存款成功后会自动清空存款金额(仍留在存款界面),读取存款金额,将信息写入文本文件并更新当前用户信息 。若想继续存款,则可进一步输入存款金额;若按返回按钮,则隐藏存款窗口,返回操作界面。
代码如下(示例):
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;public class SaveMoney implements ActionListener{JTextField money; JFrame frame; JPanel jpanel_1,jpanel_2,jpanel_3,jpanel_4; JButton button_enter,button_cancel; JLabel yue; public SaveMoney () { frame=new JFrame("存款");jpanel_1=new JPanel();jpanel_1.add(new JLabel("账户卡号:"+Bank.currentAccount.id));jpanel_2=new JPanel();yue=new JLabel("账户余额:"+Bank.currentAccount.money);jpanel_2.add(yue);jpanel_3=new JPanel();jpanel_3.add(new JLabel("存款金额:"));money=new JTextField(20);jpanel_3.add(money);jpanel_4=new JPanel();button_enter=new JButton("确定");jpanel_4.add(button_enter);button_cancel=new JButton("返回");jpanel_4.add(button_cancel);frame.add(jpanel_1);frame.add(jpanel_2);frame.add(jpanel_3);frame.add(jpanel_4);frame.setLayout(new FlowLayout());frame.setVisible(true);frame.setBounds(500,500,350,300);frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示) button_enter.addActionListener(this);button_cancel.addActionListener(this);} @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定"))//按下确定按钮{try {if(!money.getText().equals("")){int m= Integer.parseInt(money.getText()); Bank.currentAccount.saveMoney(m);//调用当前登陆账户的存钱函数 JOptionPane.showMessageDialog(null, "存款成功");//弹窗yue.setText("账户余额:"+Bank.currentAccount.money);money.setText("");//把存款金额清空}else{JOptionPane.showMessageDialog(null, "输入的存款金额不得为空");}} catch (NumberFormatException e1){JOptionPane.showMessageDialog(null, "输入数据类型错误,请输入整数");money.setText("");//把存款金额清空}catch (Exception e1){JOptionPane.showMessageDialog(null, e1.getMessage());money.setText("");//把存款金额清空}}else//按返回按钮{frame.setVisible(false);//隐藏窗口new Menu();//跳转到操作界面}} }
DrawMoney类(取款)
输入操作数字2,进入取款界面。
按确定按钮,则消息框会显示:“取款成功”。取款成功后会自动清空取款金额(仍留在取款界面),读取取款金额,将信息写入文本文件并更新当前用户信息 。若想继续取款,则可进一步输入取款金额;若按返回按钮,则隐藏取款窗口,返回操作界面。
代码如下(示例):
import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class DrawMoney implements ActionListener{
JTextField money;
JFrame frame;
JPanel jpanel_1,jpanel_2,jpanel_3,jpanel_4;
JButton button_enter,button_cancel;
JLabel yue;//余额
public DrawMoney() {frame=new JFrame("取款");jpanel_1=new JPanel();jpanel_1.add(new JLabel("账户卡号:"+Bank.currentAccount.id));jpanel_2=new JPanel();yue=new JLabel("账户余额:"+Bank.currentAccount.money);jpanel_2.add(yue);jpanel_3=new JPanel();jpanel_3.add(new JLabel("取款金额:"));money=new JTextField(20);jpanel_3.add(money);jpanel_4=new JPanel();button_enter=new JButton("确定");jpanel_4.add(button_enter);button_cancel=new JButton("返回");jpanel_4.add(button_cancel);frame.add(jpanel_1);frame.add(jpanel_2);frame.add(jpanel_3);frame.add(jpanel_4);frame.setLayout(new FlowLayout());frame.setVisible(true);frame.setBounds(500,500,350,300);frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示) button_enter.addActionListener(this);button_cancel.addActionListener(this);}@Override
public void actionPerformed(ActionEvent e) {if(e.getActionCommand().equals("确定"))//按下确定按钮{try {if(!money.getText().equals("")){int m= Integer.parseInt(money.getText()); Bank.currentAccount.drawMoney(m);//调用当前登陆账户的取钱函数 JOptionPane.showMessageDialog(null, "取款成功");//弹窗yue.setText("账户余额:"+Bank.currentAccount.money);money.setText("");//把取款金额清空}else{JOptionPane.showMessageDialog(null, "输入的取款金额不得为空");}} catch (NumberFormatException e1){JOptionPane.showMessageDialog(null, "输入数据类型错误,请输入整数");money.setText("");//把取款金额清空}catch (Exception e1){JOptionPane.showMessageDialog(null, e1.getMessage());money.setText("");//把取款金额清空}}else//按返回按钮{frame.setVisible(false);//隐藏窗口new Menu();//跳转到操作界面} }
}
Inqury类(查询余额)
输入操作数字3,进入查询界面。
若按查询记录按钮,则查询当前账户的金额(仍留在查询界面);若按返回按钮,则隐藏查询窗口,返回操作界面。
代码如下(示例):
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class Inqury implements ActionListener{JFrame frame; JPanel jpanel_1,jpanel_2,jpanel_3,jpanel_4;JTextArea inquryresult; JButton button_enter,button_cancel; JLabel yue; public Inqury() { frame=new JFrame("查询"); jpanel_1=new JPanel();jpanel_1.add(new JLabel("账户卡号:"+Bank.currentAccount.id));jpanel_2=new JPanel();yue=new JLabel("账户余额:"+Bank.currentAccount.money);jpanel_2.add(yue);jpanel_3=new JPanel(); inquryresult=new JTextArea(10,30); jpanel_3.add(inquryresult); jpanel_4=new JPanel();button_enter=new JButton("查询记录");jpanel_4.add(button_enter);button_cancel=new JButton("返回");jpanel_4.add(button_cancel);frame.add(jpanel_1);frame.add(jpanel_2);frame.add(jpanel_3);frame.add(button_enter);frame.add(button_cancel);frame.setLayout(new FlowLayout()); frame.setVisible(true);frame.setBounds(500,500,400,350);frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示) button_enter.addActionListener(this);button_cancel.addActionListener(this);} @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==button_cancel){//按返回按钮frame.setVisible(false);//隐藏窗口new Menu();//跳转到操作界面} if(e.getSource()==button_enter); { inquryresult.setText(Bank.recordString.toString().replace("元","元\n").replace("null",""));yue.setText("账户余额:"+Bank.currentAccount.money);//更新显示余额 inquryresult.setEditable(false);} }
}
Transfer类(转账)
输入操作数字4,进入转账界面。
按确定按钮,则消息框会显示:“转账成功”。转账成功后会自动清空转账账户卡号和转账金额(仍留在转账界面),读取转账账户卡号和转账金额,将信息写入文本文件并更新当前用户信息 。若想继续转账,则可进一步输入转账账户卡号和转账金额;若按返回按钮,则隐藏转账窗口,返回操作界面。
代码如下(示例):
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Transfer implements ActionListener{JTextField money,other;JFrame frame;JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3,jpanel_4;JButton button_enter,button_cancel;JLabel yue;Transfer() {frame=new JFrame("转账");jpanel_0=new JPanel();jpanel_0.add(new JLabel("账户卡号:"+Bank.currentAccount.id));jpanel_1=new JPanel();yue=new JLabel("账户余额:"+Bank.currentAccount.money);jpanel_1.add(yue);jpanel_2=new JPanel();jpanel_2.add(new JLabel("转账账户卡号:"));other=new JTextField(10);jpanel_2.add(other);jpanel_3=new JPanel();jpanel_3.add(new JLabel("转账金额:"));money=new JTextField(10);jpanel_3.add(money);jpanel_4=new JPanel();button_enter=new JButton("确定");jpanel_4.add(button_enter);button_cancel=new JButton("返回");jpanel_4.add(button_cancel);frame.add(jpanel_0);frame.add(jpanel_1);frame.add(jpanel_2);frame.add(jpanel_3);frame.add(jpanel_4);frame.setLayout(new FlowLayout());frame.setVisible(true);frame.setBounds(500,500,350,300);frame.setLocationRelativeTo(null);button_enter.addActionListener(this);button_cancel.addActionListener(this);}@Override
public void actionPerformed(ActionEvent e) {if(e.getActionCommand().equals("确定")){try {if(!money.getText().equals("")&&!other.getText().equals("")){Bank.currentAccount.transfer(Integer.parseInt(money.getText()),other.getText());JOptionPane.showMessageDialog(null,"转账成功");yue.setText("账户余额:"+Bank.currentAccount.money);//更新面板上的余额other.setText("");money.setText("");}else{JOptionPane.showMessageDialog(null, "输入的转账金额和转账账号卡号不得为空");}}catch (NumberFormatException e1){JOptionPane.showMessageDialog(null, "输入数据类型错误,请正确输入转账金额");money.setText("");}catch (Exception e1){JOptionPane.showMessageDialog(null, e1.getMessage());other.setText("");money.setText("");}}else//按下返回按钮{frame.setVisible(false);//隐藏窗口new Menu();//跳转到操作界面} }
}
ChangePassword类(修改密码)
输入操作数字5,进入修改密码界面。
若按确认按钮,则则消息框会显示:“修改密码成功”。修改密码成功后会更新当前用户信息,返回登录界面重新登录;若按返回按钮,则隐藏查询窗口,返回操作界面。
代码如下(示例):
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ChangePassword implements ActionListener{JTextField oldPassword,newPassword,checkPassword; JFrame frame; JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3; JButton button_enter,button_cancel;
public ChangePassword() { frame=new JFrame("更改密码"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jpanel_0=new JPanel(); jpanel_0.add(new JLabel("原密码:")); oldPassword=new JTextField(20); jpanel_0.add(oldPassword); jpanel_1=new JPanel(); jpanel_1.add(new JLabel("新密码:")); newPassword=new JTextField(20); jpanel_1.add(newPassword); jpanel_2=new JPanel(); jpanel_2.add(new JLabel("确认密码:")); checkPassword=new JTextField(20); jpanel_2.add(checkPassword); jpanel_3=new JPanel(); button_enter=new JButton("确定"); jpanel_3.add(button_enter); button_cancel=new JButton("返回"); jpanel_3.add(button_cancel); frame.add(jpanel_0); frame.add(jpanel_1); frame.add(jpanel_2); frame.add(jpanel_3); frame.setLayout(new FlowLayout()); frame.setVisible(true); frame.setTitle("修改密码");//窗体标签 frame.setBounds(500,500,350,300);frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示) button_enter.addActionListener(this); button_cancel.addActionListener(this); }
public void clean() {newPassword.setText("");oldPassword.setText("");checkPassword.setText("");
}@Override
public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定")) { if(oldPassword.getText().equals("")) { JOptionPane.showMessageDialog(null,"原密码不能为空");return;}if(newPassword.getText().equals("")) { JOptionPane.showMessageDialog(null,"新密码不能为空");return;} if(checkPassword.getText().equals("")) { JOptionPane.showMessageDialog(null,"确认密码不能为空"); return;}if (Bank.currentAccount.password.equals(oldPassword.getText())) { try { if(newPassword.getText().equals(checkPassword.getText())) { Bank.currentAccount.ChangePassword(newPassword.getText()); JOptionPane.showMessageDialog(null, "修改密码成功"); frame.setVisible(false); Bank.menu.mframe.setVisible(false);//关闭菜单界面 new Login(); } else { JOptionPane.showMessageDialog(null, "两次输入的密码不一致"); clean();} } catch (Exception e1) {//捕获账户类中更改密码函数的异常并弹窗显示 JOptionPane.showMessageDialog(null, e1.getMessage()); clean();} } else { JOptionPane.showMessageDialog(null, "原密码错误"); clean();} } else//如果点击cancel { frame.setVisible(false); new Menu();//跳转到操作界面} }
}
有什么问题欢迎在评论区评论
java期末课程设计----模拟银行业务(带界面)相关推荐
- linux课程设计QQ聊天带界面,仿QQ聊天系统课程设计解析.doc
仿QQ聊天系统课程设计解析 目录 绪论1 一.需求分析1 1.1软件功能需求分析2 1.2 安全需求分析2 二.总体设计3 2.1 软件结构图3 2.2 功能描述3 2.2.1注册功能概要4 2.2. ...
- Java基础课程设计-模拟ATM银行管理系统《控制台版本》
博主介绍:✌公司项目主程.全网粉丝20W+,csdn特邀作者.博客专家.CSDN新星计划导师.java领域优质创作者,CSDN博客之星TOP100.掘金/华为云/阿里云/InfoQ等平台优质作者.专 ...
- 前端大作业-期末课程设计-手机端外卖界面制作(粥品香坊手机界面+HTML5+CSS+JS)
仿照手机端饿了吗外卖界面制作的前端项目,主要使用了HTML5.CSS和JS 其中JS部分只实现了左侧热销榜.单人特色套餐和特色粥品的部分,其他部分未实现 HTML5共计100多行代码,CSS共计400 ...
- java web期末课程设计 学生成绩管理系统(mysql,jstl+el,Javabean)+增删改查,session域+servlet(基础易理解)
学生成绩管理系统 一.实验目的 为了更好的学习理解JavaWeb,创建了此系统.此系统可以帮助学习Java web基础,特别是javaweb入门,此系统使用大部分Java web基础知识.Java w ...
- java计算器如何实现运算_用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢...
用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢 2020 - 9 - 16 TAG : view sourceprint?import java.awt.BorderLayout; im ...
- java科学计算器报告心得,Java计算器课程设计报告---模拟科学计算器
Java计算器课程设计报告---模拟科学计算器 高级编程技术课程设计高级编程技术课程设计 模拟科学计算器模拟科学计算器 一一.概述概述 1.程序程序具备的功能具备的功能 (1)使用图形用户界面一个文本 ...
- Java web课程设计-购物系统
题目:网上购物系统 网上购物商店的分析与实现 一.实验目的 Java web课程设计是为了是计算机学院的学子深入学习java web应用开发设置的一门实验性的动手性的实践课程.是计算机科学与技术. 网 ...
- java记事本课程设计,java记事本课程设计
java记事本课程设计 一. 设计内容和要求1. 设计一个具有 GUI 界面的记事本 含有简单的文字编辑功能 如 剪切.复制.粘贴.删除 还能实现保存.另存为.设置字体和颜色等功能.2. 本程 ...
- 课程设计-毕业设计-JAVA画板课程设计---总之岁月漫长,然而值得等待。
在校大学生的一份辛苦劳动成果写了一个小画板程序. 任务书... 1 1.1设计内容... 1 1.2设计任务及具体要求... 1 1.3软件开发运行环境.. 1 2 本组课题... 1 2.1课题. ...
最新文章
- Spring security防止跨站请求伪造(CSRF防护)
- 大多数人对AI的理解,都是错的
- python具体有什么用-python是什么意思?python有什么用?
- AAAI 2020 开源论文 | 一种针对图嵌入模型的受限黑盒对抗攻击框架
- Linux 命令之 id -- 显示用户ID和组ID
- 施一公:培养本科生比培养博士生要难
- JavaScript中带有示例的Math.abs()方法
- 如何使用AOP改进.NET应用程序
- c# 常用 Common
- 用c语言求定积分实验报告,C语言用六种方法求定积分.doc
- firewalld系列一:自定义zone与ipset
- B - Mountainous landscape Gym - 100543B(线段树+计算几何)
- Flappy Bird游戏 C语言实现
- clickhouse分布式集群遇到的一些错误处理
- 正在解析主机/打开网页慢,有可能是你的虚拟机网卡的问题
- Golang开发入门
- VLDB‘22 HiEngine极致RTO论文解读
- 6s测试信号软件,主流智能机信号强度测试 iPhone6s表现差
- 各大厂商对Google收购摩托罗拉的表态
- 【Substance】Substance Painter基本制作流程