zoukankan      html  css  js  c++  java
  • 测试:ATM

    2020年9月22日进行了Java测试——ATM机的模拟,大致内容如下:

    ATM机的账户记录Account有账户的唯一性标识,用户的姓名,操作日期,操作类型,账户密码和当前余额。当用户插卡后显示,输入密码界面,用户输入正确密码(用户输入三次错误密码后提示卡已被锁定,无法操作),弹出选择界面,可以实现存款、取款、转账汇款、修改密码、查询余额等功能。此外,还需要AccountInformation.txt文件作为账户基本信息库保存至少五位用户的信息和AccountList.txt文件作为操作的流水信息库。

    此次程序,功能很多、很杂。通过题目分析,可以知道该程序还有十分多的图形界面。所以我们可以首先构建出大体框架,把程序的主要内容先写出来,具体功能的实现可以稍后再写。只有把程序界面运行正确,可以正常进行到所需要的界面,再填充其中的功能。如果一个功能用户操作失败(密码输入错误等),调回到主界面,也需要思考一下怎样进行实现。另外,需要注意的是,写完一个功能的实现一定要进行调试。否则,如果全部写完再进行调试,很难去发现错误的地点,这也就很难去改正。

    功能方面,实现功能并不是很难。但重要的是需要通过文件来进行,这样难度一下子增加了不少。如何通过用户的ID来读取文件知道该用户的密码、怎样将操作流水信息记录到AccountList文件中、怎样将指定用户的信息进行修改并保存到文件中?文件操作真的是一大难点。困扰我的是,计算机怎么知道哪行是什么,比如第一行是用户1的ID,第二行是用户1的密码。如果要修改用户1的密码,怎样把文件中的用户1的密码进行删除并进行改正。在进行AccountList账户操作流水信息保存时需要用到Date类来读取系统时间,且显示格式为“xxxx-xx-xx”形式。这样的知识命名是学过的,但怎么也想不起来是怎么用的,太痛苦了吧!!这也再一次印证了Java写好的类中有很多方法,反正对我来说很难去记住,所以这也就需要多去看、多去用。

    通过这一次的测试,总结需要再次将文件的读写、Date类、Calendar类好好学习记忆,灵活运用至程序中。此外还学习到写程序时现将大体框架写完,不要拘泥于一个小的功能实现,如果一直卡在一个地方,很难去完成一个程序。先把框架写好,在去逐步完善所需要的功能,就像是盖房子一样,这才是程序的写法。

    Account类

    public class Account {
        private String accountID;
        private String accountName;
        private String operateData;
        private int operateType;
        private String accountPassword;
        private int accountBalance;
        private int amount;
        public static int num = 5;
    
        public String getAccountID() {
            return accountID;
        }
    
        public void setAccountID(String accountID) {
            this.accountID = accountID;
        }
    
        public String getAccountName() {
            return accountName;
        }
    
        public void setAccountName(String accountName) {
            this.accountName = accountName;
        }
    
        public String getOperateData() {
            return operateData;
        }
    
        public void setOperateData(String operateData) {
            this.operateData = operateData;
        }
    
        public int getOperateType() {
            return operateType;
        }
    
        public void setOperateType(int operateType) {
            this.operateType = operateType;
        }
    
        public String getAccountPassword() {
            return accountPassword;
        }
    
        public void setAccountPassword(String accountPassword) {
            this.accountPassword = accountPassword;
        }
    
        public int getAccountBalance() {
            return accountBalance;
        }
    
        public void setAccountBalance(int accountBalance) {
            this.accountBalance = accountBalance;
        }
    
        public int getAmount() {
            return amount;
        }
    
        public void setAmount(int amount) {
            this.amount = amount;
        }
    }

    AccountManager类

    import java.io.*;
    import java.util.Scanner;
    
    public class AccountManager extends Account{
        static String accountID1;
        static String accountPassword1;
        public static void main(String[] args) throws IOException {
            Account a = new Account();
            //a.setAccountName("Gazikel");
            //a.setAccountPassword("123456");
            //a.setAccountID("20194077");
            //a.setAccountBalance(10000000);
            Scanner sc = new Scanner(System.in);
            System.out.println("信1905-2   20194077  郭智昊");
    
            //Account[] arr = new Account[5];
            //arr[0].setAccountID("20194077");
           // arr[0].setAccountPassword("123456");
           // arr[0].setAccountBalance(1000);
            //arr[0].setAccountName("Gazikel");
            initialize();
            loginIn(a);
    
            password(a);
    
            function(a);
    
        }
    
        public static void initialize() throws IOException {
    
            Account[] arr = new Account[5];
            arr[0]=new Account();
            arr[0].setAccountID("20194077");
            arr[0].setAccountName("Gazikel");
            arr[0].setAccountPassword("550609");
            arr[0].setAccountBalance(10000);
    
            arr[1] = new Account();
            arr[1].setAccountID("20194078");
            arr[1].setAccountName("A");
            arr[1].setAccountPassword("248796");
            arr[1].setAccountBalance(200);
    
            arr[2] = new Account();
            arr[2].setAccountID("20194079");
            arr[2].setAccountName("B");
            arr[2].setAccountPassword("456541");
            arr[2].setAccountBalance(400);
    
            arr[3] = new Account();
            arr[3].setAccountID("20194080");
            arr[3].setAccountName("C");
            arr[3].setAccountPassword("351243");
            arr[3].setAccountBalance(300);
    
            arr[4] = new Account();
            arr[4].setAccountID("20194081");
            arr[4].setAccountName("D");
            arr[4].setAccountPassword("679541");
            arr[4].setAccountBalance(1000);
    
            FileWriter fw = new FileWriter("E:\\accountinformation.txt");
            for (int i = 0; i < 5; i++) {
                fw.write(arr[i].getAccountID()+'\n');
                fw.write(arr[i].getAccountName()+'\n');
                fw.write(arr[i].getAccountPassword()+'\n');
                fw.write(arr[i].getAccountBalance()+'\n');
            }
    
            fw.flush();
            fw.close();
        }
    
        public static void reader(Account arr[]) throws FileNotFoundException {
            int i = 0;
            int j = 0;
            String str;
            int money;
            Scanner sc = new Scanner(new File("E:\\accountinformation.txt"));
            while (sc.hasNextLine()) {
                switch (j) {
                    case 0:
                        arr[i] = new Account();
                        str = sc.nextLine();
                        arr[i].setAccountID(str);
                        j++;
                        break;
                    case 1:
                        arr[i] = new Account();
                        str = sc.nextLine();
                        arr[i].setAccountName(str);
                        j++;
                        break;
                    case 2:
                        arr[i] = new Account();
                        str = sc.nextLine();
                        arr[i].setAccountPassword(str);
                        j++;
                        break;
                    case 3:
                        arr[i] = new Account();
                        money = sc.nextLine();
                        arr[i].setAccountBalance(money);
                        j = 0;
                        i++;
                        break;
                }
            }
    
        }
        public static void loginIn(Account a) throws FileNotFoundException {
            Account[] arr = new Account[num];
            reader(arr);
            int flag = 0;
            String s;
            Scanner sc = new Scanner(System.in);
            System.out.println("***************************************************************");
            System.out.println("                欢迎使用中国工商银行自动柜员系统");
            System.out.println("****************************************************************");
            System.out.print("                        请输入您的账号:");
            s = sc.nextLine();
            a.setAccountID(s);
    
            try {
                int ID = Integer.parseInt(a.getAccountID());
                if (ID < 10000000 || ID > 99999999) {
                    System.out.println("该卡不是工行卡");
                }
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
    
    
            for (int i = 0; i < num; i++) {
                if (a.getAccountID() == arr[i].getAccountID()) {
                    flag = 1;
                }
            }
            if (flag == 0) {
                System.out.println("该账号不存在");
            }
        }
    
        public static void password(Account a) throws FileNotFoundException {
    
            char ch;;
            int flag = 0;
            Scanner sc1 = new Scanner(System.in);
            Scanner sc2 = new Scanner(new File("E:\\accountinformation.txt"));
            String password;
            System.out.println("***************************************************************");
            System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
            System.out.println("请输入您的密码:");
    
            for (int i = 0; i < 3; i++) {
                password = sc1.nextLine();
               if (password.equals(a.getAccountPassword())){
                   flag = 1;
                   break;
               } else
                   System.out.println("密码输入错误");
                if (flag == 0) {
                    System.out.println("该账号三次录入密码错误,该卡已被系统没收,请与工行及时联系处理。");
                }
            }
        }
    
        public static void function(Account a){
            System.out.println("***************************************************************");
            System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
            System.out.println("                    1、存款");
            System.out.println("                    2、取款");
            System.out.println("                    3、转账汇款");
            System.out.println("                    4、修改密码");
            System.out.println("                    5、查询余额");
    
            int s;
            Scanner sc = new Scanner(System.in);
            s = sc.nextInt();
            a.setOperateType(s);
            switch (a.getOperateType()) {
                case 1 :
                    deposit(a);
                    break;
                case 2:
                    withdrawl(a);
                    break;
                case 3:
                    huiKuan(a);
                    break;
                case 4:
                    xiuGai(a);
                    break;
                case 5:
                    search(a);
                    break;
    
            }
        }
    
        public static void deposit(Account a) {
            String str;
            Scanner sc = new Scanner(System.in);
            System.out.println("***************************************************************");
            System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
    
            while(true) {
                System.out.println("请输入存款金额:");
                int s = sc.nextInt();
                if (s % 2 != 0) {
                    System.out.println("输入金额有误");
                    continue;
                } else {
                    System.out.println("***************************************************************");
                    System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                    System.out.println("****************************************************************");
                    System.out.println("                    当前账户存款操作成功。");
                    System.out.println("                    当前账户余额为:"+s+"元");
                    //将该条记录作为操作流水信息记录到文件中,并修改账户余额
    
                    char ch;
                    ch = sc.next().charAt(0);
                    if (ch == 'q') {
                        function(a);
                    }
                }
            }
    
    
    
    
        }
    
        public static void withdrawl(Account a){
            System.out.println("***************************************************************");
            System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
            System.out.println("                           当前账户每日可以支取2万元。");
            System.out.println("                                1、100元");
            System.out.println("                                2、500元");
            System.out.println("                                3、1000元");
            System.out.println("                                4、1500元");
            System.out.println("                                5、2000元");
            System.out.println("                                6、2000元");
            System.out.println("                                7、其他金额");
            System.out.println("                                8、退卡");
            System.out.println("                                9、返回");
            System.out.println("****************************************************************");
            int s;
            Scanner sc = new Scanner(System.in);
            s = sc.nextInt();
    
            switch (s) {
                case 1:
                    if (a.getAccountBalance() >= 100) {
                        System.out.println("***************************************************************");
                        System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                        System.out.println("****************************************************************");
                        System.out.println("                    当前账户取款操作100元成功。");
                        System.out.println("                    当前账户余额为:"+(a.getAccountBalance()-100)+"元");
                        System.out.println("****************************************************************");
                    } else {
                        System.out.println("账户余额不足");
                    }
                    break;
                case 2:
                    if (a.getAccountBalance() >= 500) {
                        System.out.println("***************************************************************");
                        System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                        System.out.println("****************************************************************");
                        System.out.println("                    当前账户取款操作500元成功。");
                        System.out.println("                    当前账户余额为:"+(a.getAccountBalance()-500)+"元");
                        System.out.println("****************************************************************");
                    } else {
                        System.out.println("账户余额不足");
                    }
                    break;
                case 3:
                    if (a.getAccountBalance() >= 1000) {
                        System.out.println("***************************************************************");
                        System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                        System.out.println("****************************************************************");
                        System.out.println("                    当前账户取款操作1000元成功。");
                        System.out.println("                    当前账户余额为:"+(a.getAccountBalance()-1000)+"元");
                        System.out.println("****************************************************************");
                    } else {
                        System.out.println("账户余额不足");
                    }
                    break;
                case 4:
                    if (a.getAccountBalance() >= 1500) {
                        System.out.println("***************************************************************");
                        System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                        System.out.println("****************************************************************");
                        System.out.println("                    当前账户取款操作1500元成功。");
                        System.out.println("                    当前账户余额为:"+(a.getAccountBalance()-1500)+"元");
                        System.out.println("****************************************************************");
                    } else {
                        System.out.println("账户余额不足");
                    }
                    break;
                case 5:
                    if (a.getAccountBalance() >= 2000) {
                        System.out.println("***************************************************************");
                        System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                        System.out.println("****************************************************************");
                        System.out.println("                    当前账户取款操作2000元成功。");
                        System.out.println("                    当前账户余额为:"+(a.getAccountBalance()-2000)+"元");
                        System.out.println("****************************************************************");
                    } else {
                        System.out.println("账户余额不足");
                    }
                    break;
                case 6:
                    if (a.getAccountBalance() >= 5000) {
                        System.out.println("***************************************************************");
                        System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                        System.out.println("****************************************************************");
                        System.out.println("                    当前账户取款操作5000元成功。");
                        System.out.println("                    当前账户余额为:"+(a.getAccountBalance()-5000)+"元");
                        System.out.println("****************************************************************");
                    } else {
                        System.out.println("账户余额不足");
                    }
                    break;
                case 7:
                    int money;
                    System.out.println("***************************************************************");
                    System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                    System.out.println("****************************************************************");
                    System.out.print("                    请输入取款金额:");
                    money = sc.nextInt();
                    System.out.println("****************************************************************");
                    if (a.getAccountBalance() >= money) {
                        System.out.println("***************************************************************");
                        System.out.println("欢迎"+a.getAccountID()+"使用中国工商银行自助柜员系统");
                        System.out.println("****************************************************************");
                        System.out.println("                    当前账户取款操作"+money+"元成功。");
                        System.out.println("                    当前账户余额为:"+(a.getAccountBalance()-money)+"元");
                        System.out.println("****************************************************************");
                    } else {
                        System.out.println("账户余额不足");
                    }
                    break;
                case 8:
                    break;
                case 9:
                    break;
            }
    
            char ch = sc.next().charAt(0);
            if (ch == 'q') {
                function(a);
            }
        }
    
        public static void huiKuan(Account a){
            Account b = new Account();
            Scanner sc = new Scanner(System.in);
            System.out.println("***************************************************************");
            System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
            System.out.println("请输入转账账户:");
            String s = sc.nextLine();
    
    
            char ch = sc.next().charAt(0);
            if (ch == 'q') {
                function(a);
            }
        }
    
        public static void xiuGai(Account a) {
            String s1, s2, s3;
            Scanner sc = new Scanner(System.in);
            System.out.println("***************************************************************");
            System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
            System.out.print("                    请输入当前密码:");
            s1 = sc.nextLine();
            if (s1.equals(a.getAccountPassword())) {
    
            } else {
                System.out.println("当前密码录入错误");
            }
            System.out.print("                    请输入修改密码:");
            s2 = sc.nextLine();
            System.out.print("                    请输入确定密码:");
            s3 = sc.nextLine();
            if (s3.equals(s2)) {
                System.out.println("***************************************************************");
                System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
                System.out.println("***************************************************************");
                System.out.println("                    当前账户密码修改成功");
                System.out.println("***************************************************************");
    
            } else {
                System.out.println("修改密码与确认密码不一致");
            }
            char ch = sc.next().charAt(0);
            if (ch == 'q') {
                function(a);
            }
        }
    
        public static void search(Account a){
            Scanner sc1 = new Scanner(System.in);
            System.out.println("***************************************************************");
            System.out.println("欢迎"+a.getAccountName()+"使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
            System.out.println("                    当前账户余额为:"+a.getAccountBalance()+"元");
            System.out.println("                        账户清单信息为:");
    
            char ch = sc1.next().charAt(0);
            if (ch == 'q') {
                function(a);
            }
        }
    
    
    }

    其实代码可以更加简洁,代码中界面实现部分有很多相同的地方,可以通过写一个方法来进行输出界面。

  • 相关阅读:
    毕设2020.02.02
    架构师眼中的高并发架构
    云时代架构读后感二
    以《淘宝网》为例,描述质量属性六个常见场景
    《架构漫谈》读后感
    云时代架构读后感一
    暑假周总结报告08
    暑假周总结报告07
    暑假周总结报告06
    假期周总结报告05
  • 原文地址:https://www.cnblogs.com/Gazikel/p/13715066.html
Copyright © 2011-2022 走看看