zoukankan      html  css  js  c++  java
  • java_ATM_GUI

    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+"
    ");
                }
                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("	用 户 名:"));
            userName = new JTextField(20);
            p1.add(userName);
            
            p2 = new JPanel();
            p2.add(new JLabel("	 密    码:"));
            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

  • 相关阅读:
    vmware centos 共赏目录不显示
    小程序上拉刷新
    chrome json接口数据 插件
    滚动条滚动事件
    smarty循环item命名规范
    css实现梯形样式(含有border)
    设置行高并不能垂直居中
    图片翻转交互效果
    smarty文章字符截取
    css动画 transition
  • 原文地址:https://www.cnblogs.com/Vera-y/p/9971315.html
Copyright © 2011-2022 走看看