Test 界面:

import java.awt.Menu;
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.JOptionPane; // JOptionPane 类 方便的弹出要求用户提供值或向其发出消息通知的对话框 import javafx.scene.layout.Pane; // 支持用户界面布局,面板
import jdk.incubator.http.WebSocket.Builder; public class Test{ // 通过静态变量来调用全局
public static List<zhanghu> usersList; // 具体账户(所有) // userslist类型 zhanghu为参数(类) List<zhanghu> 一个容器类泛型
public static zhanghu d_zhanghu; // 登陆的账户
public static File file; // 当前用户的记录文件
public static StringBuilder r_string = new StringBuilder(); // 对缓冲区修改字符串,而不创建新的对象
public static ATM_she_ji.Menu menu; // 静态的菜单界面
public static File usersfile;
public static StringBuilder u_String = new StringBuilder(); static Reader fw; // 用于同步 fw 的操作 public static void main(String[] args){ // throws 不在本方法中进行异常处理
usersList = new ArrayList<zhanghu>(); // 账户表,用数组的形式 File users = new File("users.txt"); //用户文本 if(!users.exists()) { // 若文件存在则为true, isfile 文件存在为false
try {
users.createNewFile(); //创建新的文本
Writer fw = new FileWriter("users.txt"); // 文本写入
fw.write("vera 123456 88888"); // 默认账户
fw.flush(); // 清空缓冲区并完成文件写入操作
fw.close(); }catch(Exception e1) {
JOptionPane.showMessageDialog(null,"创建文档失败"); // 弹出消息对话框
}
}
usersfile = users; // 创建用户文档,存储用户账户,密码,余额信息
usersLRead(); // 读取文档
usersUpdate(); // 文本存储 deng_lu Deng_lu = new deng_lu(); // 账户登陆注册页面 } public static void usersLRead() { // 读取users文档
try {
fw = new FileReader("users.txt"); // 创建字符流
}catch(Exception e) {
System.out.print("字符流创建失败");
}
BufferedReader bfr = new BufferedReader(fw); // 缓冲字符输入流,继承于Reader String temp = "";
try {
//System.out.print("开始写入list");
while((temp = bfr.readLine())!= null) { // 如果取出字符不为null
String[] tmpstr = new String[5];
tmpstr = temp.split("\\s+"); // 分割空格
//System.out.print("余额:"+tmpstr[2]);
zhanghu a = new zhanghu(tmpstr[0],tmpstr[1],tmpstr[2]);
usersList.add(a);
// System.out.print("读取到"+a.id+",实例化用户"+a.id); }
bfr.close(); // 关闭字符输出流
fw.close(); // 关闭文本写入 }catch(Exception e) {
System.out.println("读取文档失败");
} } public static void usersUpdate() { // 用户信息存储
try {
Writer fw = new FileWriter("users.txt");
StringBuilder tmpstr = new StringBuilder();
for(int i = 0;i < usersList.size();i++) {
tmpstr.append(usersList.get(i).id + " "+usersList.get(i).mi_ma+" "+usersList.get(i).money+"\r\n");
}
fw.write(tmpstr.toString());
fw.flush();
fw.close();
}catch(Exception e) {
e.printStackTrace();
System.out.println("更新用户失败");
} } }

存钱:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField; public class cun_qian implements ActionListener{
public JTextField money;
public JFrame jfra;
public JPanel i0,i1,i2,i3;
public JButton que_ding,cancel,exit;
public JLabel yu_e;
public cun_qian() { jfra = new JFrame("存款");
i0 = new JPanel();
i0.add(new JLabel("账户id:"+Test.d_zhanghu.id)); i1 = new JPanel();
yu_e = new JLabel("账户余额"+Test.d_zhanghu.money);
i1.add(yu_e); i2 = new JPanel();
i2.add(new JLabel("存款金额:"));
money = new JTextField(20);
i2.add(money); i3 = new JPanel();
que_ding = new JButton("确定");
i3.add(que_ding);
cancel = new JButton("返回");
i3.add(cancel); jfra.add(i0);
jfra.add(i1);
jfra.add(i2);
jfra.add(i3); jfra.add(que_ding);
jfra.add(cancel);
jfra.setLayout(new FlowLayout()); // 流式布局
jfra.setVisible(true); // 窗口可见 jfra.setBounds(200,200,350,150); que_ding.addActionListener(this); // 绑定监听器 cancel.addActionListener(this); } @Override
public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("确定")) {
try {
if(Integer.parseInt(money.getText())% 100 == 0 && Integer.parseInt(money.getText())>=0 ) {
// 调用当前用户的存钱函数
Test.d_zhanghu.cun_qian(Integer.parseInt(money.getText()));
yu_e.setText("账户余额:"+Test.d_zhanghu.money);
JOptionPane.showMessageDialog(null, "存款成功"); // 弹窗
}else {
JOptionPane.showMessageDialog(null, "存款金额须为100的整数倍");
} }catch(ClassCastException e1) {
JOptionPane.showMessageDialog(null, "请输入数字整数"); // frame 窗口
}catch(Exception e1){
JOptionPane.showMessageDialog(null, "输入值必须为数字整数"); // e1.getMessage()获取异常详细消息字符串 }
money.setText(""); }else {
jfra.setVisible(false); // 隐藏窗口
}
} }

取钱:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField; public class qu_qian implements ActionListener{
public JTextField money;
public JFrame jfra;
public JPanel i0,i1,i2,i3;
public JButton que_ding,cancel,exit;
public JLabel yu_e; public qu_qian() { jfra = new JFrame("取款");
i0 = new JPanel();
i0.add(new JLabel("账户id:"+Test.d_zhanghu.id)); i1 = new JPanel();
yu_e = new JLabel("账户余额"+Test.d_zhanghu.money);
i1.add(yu_e); i2 = new JPanel();
i2.add(new JLabel("取款金额:"));
money = new JTextField(20);
i2.add(money); i3 = new JPanel();
que_ding = new JButton("确定");
i3.add(que_ding);
cancel = new JButton("返回");
i3.add(cancel); jfra.add(i0);
jfra.add(i1);
jfra.add(i2);
jfra.add(i3); jfra.add(que_ding);
jfra.add(cancel);
jfra.setLayout(new FlowLayout()); // 流式布局
jfra.setVisible(true); // 窗口可见 jfra.setBounds(200,200,350,150); que_ding.addActionListener(this); // 绑定监听器 cancel.addActionListener(this); } @Override
public void actionPerformed(ActionEvent e) { // 按下键后。。
String i = e.getActionCommand(); // i 赋值为点击的按键的值
if(e.getActionCommand().equals("确定")) {
try {
if(Integer.parseInt(money.getText())% 100 == 0 && Integer.parseInt(money.getText())>=0 ) {
if(Integer.parseInt(money.getText()) > Test.d_zhanghu.money) { JOptionPane.showMessageDialog(null, "余额不足"); }else {
// 调用当前用户的存钱函数
Test.d_zhanghu.qu_qian(Integer.parseInt(money.getText()));
yu_e.setText("账户余额:"+Test.d_zhanghu.money);
JOptionPane.showMessageDialog(null, "取款成功"); // 弹窗
}
}else{
JOptionPane.showMessageDialog(null, "取款金额须为100的正整数倍");
} }catch(ClassCastException e1) { // 捕获 数据类型错误
JOptionPane.showMessageDialog(null, "请输入数字整数"); // frame 窗口
}catch(Exception e1){
JOptionPane.showMessageDialog(null, "输入值必须为数字整数"); // e1.getMessage()获取异常详细消息字符串
// qu_qian 里抛出的
}
money.setText("");
}else {
jfra.setVisible(false); // 隐藏窗口
} } }

账户:

public class zhanghu {

    int money;
String id;
String mi_ma; public zhanghu(String id,String mi_ma, String money) { // 注册和读取用户时用
this.id = id;
this.mi_ma = mi_ma;
this.money = Integer.parseInt(money); // money 返回int值
} // 抛出异常由相关的界面类弹窗处理异常
// 取钱
public void qu_qian(int money){ this.money -=money;
Test.usersUpdate(); // 更新用户文档
} // 存钱
public void cun_qian(int money){ this.money += money; Test.usersUpdate(); // 更新用户信息 } }

菜单:

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;// 动作监听器 import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class Menu implements ActionListener{ public JFrame fra; // 窗口
private JPanel m; // 布局
private JTextField mi_ma,cha_mi_ma;
private JButton qu_qian; // 操作按键
private JButton cun_qian; public Menu() { fra = new JFrame("操作菜单");
fra.setResizable(false); // 设置不可放大
fra.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 静态常量,退出窗体
JButton cao_zuo = new JButton("请选择操作项目 ");
JButton cun_qian = new JButton("存 款");
JButton qu_qian = new JButton("取 款");
JButton exit = new JButton("退 卡");
//m = new JPanel();
//cao_zuo = new JLabel("操作项目:")
//m0.add(cao_zuo);
//fra.add(m0); m = new JPanel();
m.add(cao_zuo);
m.add(qu_qian);
m.add(cun_qian);
m.add(exit);
m.setLayout(new GridLayout(4,1,30,30)); // 网格布局管理器,组件的行列分布,20为组件间的横纵间距 fra.add(m);
fra.pack(); // 自动适应大小
fra.setVisible(true); // 图形界面可见
fra.setLayout(new FlowLayout()); // 布局管理器,流式布局
fra.setBounds(200,200,350,280);
qu_qian.addActionListener(this); // 增加监听(绑定监听器)
cun_qian.addActionListener(this);
exit.addActionListener(this); } @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String i = e.getActionCommand(); // i 赋值为点击的按键的值
if(i.equals("取 款")) {
qu_qian qu = new qu_qian();
}else if(i.equals("存 款")){
cun_qian cun = new cun_qian(); }else if(i.equals("退 卡")) {
fra.setVisible(false); // 隐藏页面 deng_lu Deng_lu = new deng_lu();
JOptionPane.showMessageDialog(null, "请记得取走您的银行卡");
}
}
}

登陆/ 注册:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
//import java.io.Reader; 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.JTextField;
import javax.swing.WindowConstants; public class deng_lu implements ActionListener{ private JFrame frame;
private JPanel p0,p1,p2,p3,p4; // 布局
private JTextField userName;
private JTextField mi_ma,cha_mi_ma;
private JButton deng;
private JButton zhu_ce;
// private Reader fw; //
Boolean Zhu_ce = true; // 控制是否注册的变量 public deng_lu() {
frame = new JFrame("登陆ATM");
frame.setResizable(false); // 设置为不能放大
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 密 码:"));
mi_ma = new JTextField(20);
//JPasswordField mi_ma = new JPasswordField(20) ;
//mi_ma.setEchoChar('*') ;// 设置回显
//String mi = String.valueOf(mi_ma.getPassword());
p2.add(mi_ma); p3 = new JPanel(); deng = new JButton(" 登陆 ");
zhu_ce = new JButton(" 注册 ");
p3.add(deng);
p3.add(zhu_ce); p4 = new JPanel();
p4.add(new JLabel("确认密码:"));
cha_mi_ma = new JTextField(20);
p4.add(cha_mi_ma); frame.add(p1);
frame.add(p2); frame.add(p4); // 确认密码框 ,放在注册键的前面
frame.add(p3); frame.pack();
frame.setVisible(true);
p4.setVisible(false); deng.addActionListener(this); // 添加监听
zhu_ce.addActionListener(this);
frame.setBounds(200,200,350,250); // 设置大小
frame.setLayout(new FlowLayout()); // 流式布局 } @Override
public void actionPerformed(ActionEvent e) { // 动作
// TODO Auto-generated method stub
if(e.getActionCommand().equals(" 注册 ")) { // 如果点击注册
if(p4.isVisible() == false) { // 判断部件是否可见
p4.setVisible(true);
deng.setText(" 取消 "); // 将登陆改为取消,同时触发取消监听器
Zhu_ce = true;
return;
}
if(Zhu_ce == true) {
if(userName.getText().equals("")) { // 如果userName文本为空
JOptionPane.showMessageDialog(frame, "用户名不能为空"); // 弹窗
return;
}else {
for (int i = 0;i<Test.usersList.size();i++) {
if(Test.usersList.get(i).id.equals(userName.getText())) {
JOptionPane.showMessageDialog(frame, "该用户已被注册");
userName.setText(""); // 清空输入框
mi_ma.setText("");
cha_mi_ma.setText("");
return; // 若用户名同名,结束方法
}
}
}
if(mi_ma.getText().length()!=6) { //&&mi_ma.getText().equals("")
JOptionPane.showMessageDialog(frame, "请输入六位密码"); // 弹窗
return;
}else {
if(cha_mi_ma.getText().equals(mi_ma.getText())) {
// 注册账户,账户实例化
zhanghu zhang_zhu_ce = new zhanghu(userName.getText(),mi_ma.getText(),"0");
JOptionPane.showMessageDialog(frame,"注册成功,请登陆");
Test.usersList.add(zhang_zhu_ce); // 加入Test类的静态用户list
Test.usersUpdate();
return; }else {
JOptionPane.showMessageDialog(frame, "两次输入的密码不一致,请重新输入");
return;
}
}
}
}
if(e.getActionCommand().equals(" 登陆 ")) {
for(int i = 0;i<Test.usersList.size();i++) {
if(Test.usersList.get(i).id.equals(userName.getText())) { if(mi_ma.getText().equals(Test.usersList.get(i).mi_ma)) {
JOptionPane.showMessageDialog(frame, "登陆成功");
Test.d_zhanghu = Test.usersList.get(i);
// 将list中符合登陆输入密码的账户类设为当前Test类中的静态的“当前类”
Test.file = new File(Test.d_zhanghu+".text"); // 在文件中添加新的txt Menu menu = new Menu(); // 实例化菜单窗口 Test.menu = menu;
frame.setVisible(false); // 隐藏登陆窗口
return; }else {
JOptionPane.showMessageDialog(frame, "密码错误");
cha_mi_ma.setText(""); // 清空
return;
}
}
}
JOptionPane.showMessageDialog(frame, "该用户不存在"); }
if(e.getActionCommand().equals(" 取消 ")) {
p4.setVisible(false); // 隐藏窗口
deng.setText(" 登陆 ");
Zhu_ce = false; // 不可注册
}
} }

参考于:https://blog.csdn.net/qq_37724011/article/details/78682028

java_ATM_GUI的更多相关文章

随机推荐

  1. Linux下C语言生成可执行文件的过程

    在当前目录下创建一个C源文件并打开: touch test.c gedit test.c直接编译: gcc test.c -o test 分步骤编译: 1) 预处理    gcc -E test.c  ...

  2. BZOJ2870 最长道路

    题意:给定树,有点权.求一条路径使得最小点权 * 总点数最大.只需输出这个最大值.5w. 解:树上路径问题,点分治. 考虑合并两个子树的时候,答案的形式是val1 * (d1 + d2),当1是新插入 ...

  3. 解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题

    https://blog.csdn.net/u012127798/article/details/34146143/ Oracle里的set零零碎碎的,这里整理归纳一下 SQL> set tim ...

  4. .pyc是个什么 python的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  5. 使用Eclipse创建动态的web工程

    使用Eclipse创建动态的web工程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.修改工作区的编码 1>.点击Window选择Preferences 2>.将默 ...

  6. 深入剖析Kubernetes学习笔记:开篇词(00)

    一.关于Kubernetes初学的疑惑 就在这场因"容器"而起的技术变革中,kubernetes项目已经成为容器技术的事实标准,重新定义了基础设置领域对应用编排与管理的种种可能 1 ...

  7. solr的域

    solrhom相当于存放数据的地方,里面一个个文件相当于数据库,每个数据库里面有两个文件夹,一个data,一个conf,conf下有一个schema.xml文件,配置域,相当于表的字段. solr中内 ...

  8. JavaScript数据类型 String字符串类型的属性和方法

    属性 字符串String类型的每个实例都有一个length属性,表示字符串中的字符个数.由于字符串是不可变的,所以字符串的长度也不可变 字符串的length属性不会在for/in循环中枚举,也不能通过 ...

  9. Kaldi nnet3的fastlstm与标准LSTM

    标准LSTM:             与标准LSTM相比,Kaldi的fastlstm对相同或类似的矩阵运算进行了合并.     # Component specific to 'projected ...

  10. openwrt 加入nand flash的支持

    参考链接 :   https://blog.csdn.net/wwx0715/article/details/77189456?locationNum=9&fps=1