本人学校在大二时有Java课程设计,本打算在网上找一个简单的银行管理系统借鉴一下,后来得知老师要求要实现可视化,在网上多次查找没有理想的可视化银行管理系统,无奈花费一星期自学了GUI方面的代码,课上老师也没有教过。经过一个多星期的奋战,解决了很多问题,最终完成此系统。闲来无事就想把代码分享出来,供学弟学妹们借鉴,如果觉得有帮助,希望可以点赞,如果经济富裕可以打赏,感激不尽。
(图片为部分运行结果)
代码初期想分为多个类,后来发现跳转界面时会出现很多问题,就把所有可视化代码放在一个类中,数据类单独写出来,应该还是比较精简易懂。其中可视化部分纯手工打造,数据类有所借鉴。运行代码之前需要在eclipse上下载swing插件。
此银行管理系统分为人工服务和ATM服务,功能划分可能不太合理,不过功能应该是很齐全。人工服务可以创建银行卡和登录银行卡。ATM服务可以登录和修改密码。具体功能包括取钱、存钱、查询操作记录。查询操作记录是根据本机时间生成记录。创建银行卡会生成txt文件,信息保存在txt文件中,如果正常使用肯定是不安全的,等以后再完善。
首先是用户信息类
Account.java
package data;
//import com.sun.deploy.util.SyncFileAccess;
import com.sun.org.apache.regexp.internal.RE;
import GUI.demo1;
import javax.swing.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class Account {
public int money;
public String id;//账号名
public String Name;//姓名
public String PhoneNumber;//手机号
public String IdCard;//身份证
public 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(demo1.file);
fw.write(demo1.recordString.append(dateString + "\t" + demo1.currentAccount.id + "\t取出" + money + "元\r\n").toString());//将这次的取钱行为添加到记录文件中
fw.flush();//写进文件
fw.close();
this.money -= money;
demo1.usersListUpdate();//更新用户文档(信息)
}
public void inMoney(int money)throws Exception
{
try {
Writer fw = new FileWriter(demo1.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(demo1.recordString.append(dateString+"\t"+demo1.currentAccount.id+"\t存入" + money + "元\r\n").toString());
fw.flush();//写进文件
fw.close();
this.money+=money;
demo1.usersListUpdate();//更新当前用户信息
}
catch (Exception e1)
{
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;
demo1.usersListUpdate();
}
}
然后就是最主要的可视化部分代码,可能有些长,但是都有注释,各个功能模块都有分开写,如果有看不懂可以私聊我.
demo1.java
package GUI;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Font;
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.FileWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import data.Account;
public class demo1 {
public static List<Account> usersList;
public static Account currentAccount;//登录的用户
public static File file;//当前用户的记录文件
public static StringBuilder recordString=new StringBuilder();//登录后读取文本中的记录,然后和recordString拼接
public static File usersFile;
public static StringBuilder usersString=new StringBuilder();
Boolean regirsterable=true;//控制是否能注册的变量
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();
Writer fw = new FileWriter("users.txt");
fw.write("6000 12345 8888");
fw.flush();
fw.close();
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "创建用户文档失败");
}
}
usersFile = users;//创建用户文档,存储用户账户,密码,余额信息;
usersListRead();
usersListUpdate();
// TODO Auto-generated method stub
SwingUtilities.invokeLater(() -> zhujiemian());
}
public static void usersListRead()
{
/**********************按照用户文档读取用户列表并创建所有用户**********************/
/**********************并写入list**********************/
try {
fw = new FileReader("users.txt");//字符流
} catch (Exception e) {
Sys