测试: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);
        }
    }


}

 

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

posted @ 2020-09-22 21:37  Gazikel  阅读(169)  评论(0编辑  收藏  举报