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期末课程设计----模拟银行业务(带界面)相关推荐

  1. 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. ...

  2. Java基础课程设计-模拟ATM银行管理系统《控制台版本》

     博主介绍:✌公司项目主程.全网粉丝20W+,csdn特邀作者.博客专家.CSDN新星计划导师.java领域优质创作者,CSDN博客之星TOP100.掘金/华为云/阿里云/InfoQ等平台优质作者.专 ...

  3. 前端大作业-期末课程设计-手机端外卖界面制作(粥品香坊手机界面+HTML5+CSS+JS)

    仿照手机端饿了吗外卖界面制作的前端项目,主要使用了HTML5.CSS和JS 其中JS部分只实现了左侧热销榜.单人特色套餐和特色粥品的部分,其他部分未实现 HTML5共计100多行代码,CSS共计400 ...

  4. java web期末课程设计 学生成绩管理系统(mysql,jstl+el,Javabean)+增删改查,session域+servlet(基础易理解)

    学生成绩管理系统 一.实验目的 为了更好的学习理解JavaWeb,创建了此系统.此系统可以帮助学习Java web基础,特别是javaweb入门,此系统使用大部分Java web基础知识.Java w ...

  5. java计算器如何实现运算_用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢...

    用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢 2020 - 9 - 16 TAG : view sourceprint?import java.awt.BorderLayout; im ...

  6. java科学计算器报告心得,Java计算器课程设计报告---模拟科学计算器

    Java计算器课程设计报告---模拟科学计算器 高级编程技术课程设计高级编程技术课程设计 模拟科学计算器模拟科学计算器 一一.概述概述 1.程序程序具备的功能具备的功能 (1)使用图形用户界面一个文本 ...

  7. Java web课程设计-购物系统

    题目:网上购物系统 网上购物商店的分析与实现 一.实验目的 Java web课程设计是为了是计算机学院的学子深入学习java web应用开发设置的一门实验性的动手性的实践课程.是计算机科学与技术. 网 ...

  8. java记事本课程设计,java记事本课程设计

    java记事本课程设计 一. 设计内容和要求1. 设计一个具有 GUI 界面的记事本 含有简单的文字编辑功能 如 剪切.复制.粘贴.删除 还能实现保存.另存为.设置字体和颜色等功能.2. 本程 ...

  9. 课程设计-毕业设计-JAVA画板课程设计---总之岁月漫长,然而值得等待。

    在校大学生的一份辛苦劳动成果写了一个小画板程序. 任务书... 1 1.1设计内容... 1 1.2设计任务及具体要求... 1 1.3软件开发运行环境.. 1 2  本组课题... 1 2.1课题. ...

最新文章

  1. Spring security防止跨站请求伪造(CSRF防护)
  2. 大多数人对AI的理解,都是错的
  3. python具体有什么用-python是什么意思?python有什么用?
  4. AAAI 2020 开源论文 | 一种针对图嵌入模型的受限黑盒对抗攻击框架
  5. Linux 命令之 id -- 显示用户ID和组ID
  6. 施一公:培养本科生比培养博士生要难
  7. JavaScript中带有示例的Math.abs()方法
  8. 如何使用AOP改进.NET应用程序
  9. c# 常用 Common
  10. 用c语言求定积分实验报告,C语言用六种方法求定积分.doc
  11. firewalld系列一:自定义zone与ipset
  12. B - Mountainous landscape Gym - 100543B(线段树+计算几何)
  13. Flappy Bird游戏 C语言实现
  14. clickhouse分布式集群遇到的一些错误处理
  15. 正在解析主机/打开网页慢,有可能是你的虚拟机网卡的问题
  16. Golang开发入门
  17. VLDB‘22 HiEngine极致RTO论文解读
  18. 6s测试信号软件,主流智能机信号强度测试 iPhone6s表现差
  19. 各大厂商对Google收购摩托罗拉的表态
  20. 【Substance】Substance Painter基本制作流程

热门文章

  1. linux jq 数组,Shell 数组
  2. 【按文分图工具】可以根据图片中的文字来批量自动分类的软件
  3. ESP32用Arduino硬件IIC读取SHT30温湿度计的数据
  4. 用selenium实现用谷歌浏览器打开指定网址
  5. 毛星云opencv入门第一章小结
  6. 树莓派安装wiringPi库
  7. Dubbo如何实现基于http的jsonrpc调用
  8. JavaScript语法检查与构建工具——JSLint和NodeJS的使用
  9. 激光电视和液晶电视哪个好 2022
  10. 监控摄像头通过OBS取流变身电脑摄像头(超详细保姆级教学)