• ATM


    ATM机的账户记录Account有账户的唯一性标识(8个数字的组合),用户的姓名,操作日期(Date),操作类型,账户密码(六位的数字,可以用0开头),当前的余额(可以为0)。

    1、定义Account类,其中包括七个私有变量(accountID,accountname,operatedate,operatetype,accountpassword, accountbalance,)。(3分)

    各成员的含义如下:

    变量accountID为字符串类型String,用于存储学生的用户账号(由八位数字组成)。

    变量accountname为字符串类型String,用于存储账户的名称。

    变量operatedate为字符串类型String,用于存储操作的时间,由十位字符组成,显示格式为“2018-09-20”。    

    变量operatetype为int类型,用于存储操作账户的类型,具体描述为“1”表示存款,“2”表示取款,“3”表示转账汇款,“4”表示修改账户密码,“5”表示查询余额。

    变量accountpassword为字符串类型String,用于用户密码,由六位数字组成。

    变量accountbalance为整数类型int,用于存储账户余额,缺省为0。

    变量amount为整数类型int,表示操作流水金额。

    2、对每个变量定义get()(读取变量信息)和set()(设置变量信息)的方法。(3分)

    3、定义accountinformation.txt作为账户基本信息库,基本信息包括accountID,accountname,accountpassword, accountbalance,要求事先实现至少存储五个账户的信息,定义accountlist.txt作为账户操作流水信息数据库,操作流水信息包括(accountID,accountname,operatedate,operatetype, amount)。(要求将学号作为帐号,将考生信息作为第一条记录)。(2分)

    三、功能要求:(12分)

    该程序模拟ATM的功能设计,当用户插卡后显示,输入密码界面,用户输入正确密码(用户输入错误密码,则提示该卡已被锁定,无法操作),则弹出选择界面:存款、取款、转账汇款、修改密码、查询余额。

    注意:对accountinformation.txt和accountlist.txt数据库中的信息进行读写操作时,必须调用get()和set()方法,否则,出现一处扣除0.5分,直至扣完为止。

    (1) 需要在程序开始的注释中注明班级、学号、姓名。(1分)

    (2) 定义AccountManager类实现下列要求

    (3)程序开始运行模拟用户插卡显示用户输入账号功能;(1分)

    ①界面设计:

    ***************************************************************

    欢迎使用中国工商银行自动柜员系统

    **************************************************************** 请输入您的账号:

                              

    ****************************************************************

    ②功能设计

    用户在该界面输入账号信息,如果输入账号位数有误,提示“该卡不是工行卡”,如果输入账号信息在accountinformation.txt不存在,则提示“该账号不存在”,账号输入不成功,系统提示错误信息后返回输入账号界面;输入账号成功后,系统跳转到输入密码界面。

    (4)用户输入密码功能;(1分)

    ①界面设计:

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    **************************************************************** 请输入您的密码:

                              

    ****************************************************************

    ②功能设计

    用户在该界面输入账号密码信息,如果密码录入错误(出现位数不对或与文件中该账号对应的密码不服),则提示“密码录入错误”,如果密码录入三次错误,则提示“该账号三次录入密码错误,该卡已被系统没收,请与工行及时联系处理”。单次密码输入不成功,系统提示错误信息,返回输入密码界面;三次密码输入不成功,系统提示错误信息,返回输入账号界面,密码输入成功,系统跳转到主界面。

    (5)系统主界面如下图所示,选择相应的数字执行相应的功能。(1分)

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    1、 存款;

    2、 取款;

    3、 转账汇款;

    4、 修改密码;

    5、 查询余额;

    ****************************************************************

    (6)存款功能:(2分)

    存款操作流程:

    ①系统进入存款界面:

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    请输入存款金额;

    ****************************************************************

    ②用户在该界面输入存款金额后,如果输入不是正整数,提示用户“输入金额有误,返回取款界面;输入字母“q”,则返回系统输入账号界面,表示退出柜员机操作;输入正整数,则跳转到下图存款成功界面。

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    当前账户存款操作成功。

    当前账户余额为:XXXX元

    ****************************************************************

    ③存款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。

    ④点击“q”键,退回系统录入账号界面

    (7)取款功能:则显示100元、500元、1000元、1500元、2000元、5000元、其他金额、退卡、返回操作供用户选择(3分)

    取款流程设计:

    ① 系统进入取款界面:

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************当前账户每日可以支取2万元。

    1、100元

    2、500元

    3、1000元

    4、1500元

    5、2000元

    6、5000元;

    7、其他金额

    8、退卡

    9、返回

    ****************************************************************

    ②用户选择1-6选项时,判断账户余额是否不小于录入金额,如果小于,则提示“账户余额不足”,如果大于,则跳转到下图取款成功界面。

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    当前账户取款操作XXXX元成功。

    当前账户余额为:XXXX元

    ****************************************************************

    用户选择7选项时,显示录入金额界面

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    请输入取款金额:

    ****************************************************************

    判断账户余额是否不小于录入金额,如果小于,则提示“账户余额不足”,如果大于,则跳转到下图取款成功界面。

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    当前账户取款操作XXXX元成功。

    当前账户余额为:XXXX元

    ****************************************************************

    ④取款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。

    ⑤用户选择“8”选项时,系统跳转到输入账户界面。

    ⑥用户选择“9”选项时,系统跳转到系统主界面。

    (8)转账汇款功能:(1分)

    系统流程如下所示:

    ①系统进入转账主界面

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    请输入转账账户;

           

    ****************************************************************

    ②用户在该界面输入判断该账户是否存在accountinformation.txt文件中,如果没有提示“该账户不存在”,如果有则跳转到转账金额界面。

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    请输入转账金额;

           

    ****************************************************************

    ③判断账户余额是否不小于录入金额,如果小于,则提示“账户余额不足”,如果大于,则跳转到下图转账确认成功界面。

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    请确认是否向*XX(将转账的用户名称第一个用*代替,其余正常显示)转账XXXX元。

    ****************************************************************

    ④单击“N”表示不确认转账,系统跳转到系统主界面;单击“Y”表示确认转账,系统跳转到转账成果界面,。

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    当前账户向*XX成功转账XXXX元。

    当前账户余额为:XXXX元

    ****************************************************************

    ⑤转账汇款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。

    ⑥点击“q”键,退回系统录入账号界面

    (9)修改密码功能:(1分)

    修改密码操作流程:

    ① 系统进入修改密码界面:

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    请输入当前密码:

    请输入修改密码:

    请输入确认密码:

    ****************************************************************

    ② 当前密码录入错误,提示“当前密码录入错误”,系统返回修改密码界面,清空数据重新录入;修改后密码与确认密码不一致,提示“修改密码与确认密码不一致”,系统返回修改密码界面,清空数据重新录入。

    ③ 密码修改成功,系统跳转到密码修改成功界面。

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    当前账户密码修改成功

    ****************************************************************

    ④ 密码修改成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户密码。

    ⑤ 点击“q”键,退回系统录入账号界面

    (10)查询功能:(1分)

    查询操作流程:

    ①系统显示当前用户余额和操作流水信息:

    ***************************************************************

    欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统

    ****************************************************************

    当前账户余额为:XXXX元

    账户清单信息为:

    1、操作日期    操作类型(不用显示数字) 操作金额

    2、操作日期    操作类型(不用显示数字) 操作金额

    3、…………………………………………………………

    ****************************************************************

    Account类

    public class Account {
        
        String accountID;       //存储学生的用户账号(由八位数字组成)
        String accountname;     //存储账户的名称
        String operatedate;     //存储操作的时间,由十位字符组成,显示格式为“2019-09-20”
        int operatetype;        // 存储操作账户的类型
        String accountpassword; //用户密码
        int accountbalance;     //存储账户余额
        int amount;             //操作流水金额
        
                     //用户账号的设置和读取
         
        
        public void setaccountID(String accountID) {
            this.accountID= accountID;
        }
        
        public String getaccountID() {
            return accountID;
        }
        
        
                      //存储账户名称的设置和读取
        
        
        public void setaccountname(String accountname) {
            this.accountname= accountname;
        }
        
        public String getaccountname() {
            return accountname;
        }
        
        
                      //存储操作时间的设置和读取
        
        
        public void setoperatedate(String operatedate) {
            this.operatedate=operatedate;
        }
        
        public String getoperatedate() {
            return operatedate;
        }
        
                    //存储账户类型的设置和读取
        
        
        public void setoperatetype(int operatetype) {
            this. operatetype= operatetype;
        }
        
        public int getoperatetype() {
            return  operatetype;
        }
         
                   //用户密码的设置和读取
        
        
        public void setaccountpassword(String accountpassword) {
            this.accountpassword=accountpassword;
        }
        
        public String getaccountpassword() {
            return accountpassword;
        }
        
        
                   //存储账户余额的设置和读取
        
        
        public void setaccountbalance(int accountbalance) {
            this.accountbalance=accountbalance;
        }
        
        public int getaccountbalance() {
            return accountbalance;
        }
    
                      //操作流水金额的设置和读取
        
        
        public void setamount(int amount) {
            this.amount=amount;
        }
        
        public int getamount() {
            return amount;
        }
        
                      //构造函数
        public Account(String accountID,String accountname,String accountpassword,int accountbalance) {
            this.accountID=accountID;
            this.accountname=accountname;
            this.accountpassword=accountpassword;
            this.accountbalance=accountbalance;
        }
        
        public Account() {
        }
    }

    AccountManager类

    
    
    //信1905-2 20194023 刘天雯
    package day01;
    
    import java.util.Scanner;
    
    public class AccountManager {
    
        static Account[] acc = new Account[5];
    
        static int n;
        
        static AccountManager z=new AccountManager();//用于调用方法
    
        public AccountManager() {
    
            for (int i = 0; i < n; i++) {
    
                acc[i] = new Account();
            }
            acc[0] = new Account("20194001", "哈密瓜", "20204001", 3000);
            acc[1] = new Account("20194002", "香蕉", "20204002", 10000);
            acc[2] = new Account("20194003", "苹果", "20204003", 250);
            acc[3] = new Account("20194004", "菠萝", "20204004", 8050);
            acc[4] = new Account("20194005", "火龙果", "20204005", 6008);
    
        }
    
        // 初始界面
    
        public static void first() {
    
            System.out.println("***********************************************************");
            System.out.println("            欢迎使用中国工商银行自动柜员系统                             ");
            System.out.println("**********************************************************");
            System.out.println("              请输入您的账号                                                      ");
            System.out.println("**********************************************************");
    
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
            String zhanghao = scan.next();
    
            int e = 5;
    
            for (int i = 0; i < 5; i++) {
    
                if (zhanghao.equals(acc[i].getaccountID())) {
                    e = i;
    
                }
            }
            if (e == 5) {
                System.out.println("不是本银行的卡,即将返回初始界面");
                first();
            }
    
            else {
                mima(e);
            }
    
        }
    
        // 密码界面
    
        public static void mima(int pass) {
    
            System.out.println("***************************************************************");
            System.out.println("   欢迎" + acc[pass].getaccountname() + "使用中国工商银行自助柜员系统");
            System.out.println("***************************************************************");
            System.out.println("                    请输入您的密码:");
    
            int time = 0; // 记录输入密码的次数
    
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
    
            while (time < 3) {
    
                String save = scan.nextLine();
    
                if (save.equals(acc[pass].getaccountpassword())) {
                    System.out.println("输入密码正确,成功跳转到主界面");
                    zhujiemian(pass);
                }
    
                else {
                    System.out.println("密码输入错误,请重新输入。");
                    time++;
                }
    
                if (time == 3) {
                    System.out.println("你已失去三次输入密码机会,即将返回初始界面。");
                    first();
                }
            }
        }
    
        // 一个返回界面方法
    
        public static void fanhui(int pass) {
            System.out.println("***************************************************************");
            System.out.println("如要仍要进行其他操作,请输入111,将返回主界面;");
            System.out.println("如不进行其他操作,请输入000,将结束程序");
            System.out.println("***************************************************************");
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
    
            int ch = scan.nextInt();
    
            if (ch == 111) {
                zhujiemian(pass);
            }
    
            if (ch == 000) {
                System.exit(0);
            }
        }
    
        // 主界面
    
        public static void zhujiemian(int pass) {
    
            System.out.println("***************************************************************");
            System.out.println("   欢迎" + acc[pass].getaccountname() + "使用中国工商银行自助柜员系统");
            System.out.println("****************************************************************");
            System.out.println("                    1、存款;");
            System.out.println("                    2、取款;");
            System.out.println("                    3、转账汇款;");
            System.out.println("                    4、修改密码;");
            System.out.println("                    5、查询金额;");
            System.out.println("****************************************************************");
            System.out.println("                      请输入:");
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
            int temp = scan.nextInt();
    
            switch (temp)
    
            {
    
            case 1: {
                acc[pass].setoperatetype(1);
                cunkuan(pass);
                fanhui(pass);
            }
                break;
    
            case 2: {
                acc[pass].setoperatetype(2);
                qukuan(pass);
                fanhui(pass);
            }
    
                break;
    
            case 3: {
                acc[pass].setoperatetype(3);
                zhuanzhanghuikuan(pass);
                fanhui(pass);
            }
                break;
    
            case 4: {
                acc[pass].setoperatetype(4);
                xiugaimima(pass);
                fanhui(pass);
            }
                break;
    
            case 5: {
                acc[pass].setoperatetype(5);
                chaxunyue(pass);
                fanhui(pass);
            }
                break;
    
            default: {
    
                System.out.println("您未进行正确操作,返回主界面");
    
                zhujiemian(pass);
            }
                break;
            }
        }
    
        // 存款界面
    
        public static void cunkuan(int pass) {
            System.out.println("***************************************************************");
            System.out.println("   欢迎" + acc[pass].getaccountname() + "存款");
            System.out.println("****************************************************************");
            System.out.println("                 请输入存款金额:");
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
            int cundeqian = scan.nextInt();
            if (cundeqian < 0) {
                System.out.println("输入的金额有误,返回主界面");
                first();
            } else {
                acc[pass].setamount(acc[pass].getamount() + cundeqian);
                acc[pass].setaccountbalance(acc[pass].getaccountbalance() + cundeqian);
                System.out.println("****************************************************************");
                System.out.println("                当前账户存款操作成功。");
                System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
            }
    
        }
    
        // 取款界面
        public static void qukuan(int pass) {
            System.out.println("***************************************************************");
            System.out.println("   欢迎" + acc[pass].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、5000元;");
            System.out.println("                         7、其他金额");
            System.out.println("                         8、退卡");
            System.out.println("                         9、返回");
            System.out.println("****************************************************************");
            System.out.println("                        #:请选择");
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
            int choice = scan.nextInt();
    
            switch (choice) {
            case 1: {
                
                if (acc[pass].getaccountbalance() < 100) {
                    System.out.println("账户余额不足,返回取款界面");
                    qukuan(pass);
                } else {
                    acc[pass].setamount(acc[pass].getamount() + 100);
                    acc[pass].setaccountbalance(acc[pass].getaccountbalance() - 100);
                    System.out.println("***************************************************************");
                    System.out.println("   欢迎" + acc[pass].getaccountname() + "进行  取款");
                    System.out.println("****************************************************************");
                    System.out.println("             当前账户取款操作100元成功。");
                    System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
                }
                break;
            }
    
            case 2: {
                
                if (acc[pass].getaccountbalance() < 500) {
                    System.out.println("账户余额不足,返回取款界面");
                    qukuan(pass);
                } else {
                    acc[pass].setamount(acc[pass].getamount() + 500);
                    acc[pass].setaccountbalance(acc[pass].getaccountbalance() - 500);
                    System.out.println("***************************************************************");
                    System.out.println("   欢迎" + acc[pass].getaccountname() + "进行  取款");
                    System.out.println("****************************************************************");
                    System.out.println("             当前账户取款操作500元成功。");
                    System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
                }
                break;
            }
    
            case 3: {
                
                if (acc[pass].getaccountbalance() < 1000) {
                    System.out.println("账户余额不足,返回取款界面");
                    qukuan(pass);
                } else {
                    acc[pass].setamount(acc[pass].getamount() + 1000);
                    acc[pass].setaccountbalance(acc[pass].getaccountbalance() - 1000);
                    System.out.println("***************************************************************");
                    System.out.println("   欢迎" + acc[pass].getaccountname() + "进行  取款");
                    System.out.println("****************************************************************");
                    System.out.println("             当前账户取款操作1000元成功。");
                    System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
                }
    
            }
                break;
                
            case 4: {
                
                if (acc[pass].getaccountbalance() < 1500) {
                    System.out.println("账户余额不足,返回取款界面");
                    qukuan(pass);
                } else {
                    acc[pass].setamount(acc[pass].getamount() + 1500);
                    acc[pass].setaccountbalance(acc[pass].getaccountbalance() - 1500);
                    System.out.println("***************************************************************");
                    System.out.println("   欢迎" + acc[pass].getaccountname() + "进行  取款");
                    System.out.println("****************************************************************");
                    System.out.println("             当前账户取款操作1500元成功。");
                    System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
                }
                break;
            }
    
            case 5: {
                
                if (acc[pass].getaccountbalance() < 2000) {
                    System.out.println("账户余额不足,返回取款界面");
                    qukuan(pass);
                } else {
                    acc[pass].setamount(acc[pass].getamount() + 2000);
                    acc[pass].setaccountbalance(acc[pass].getaccountbalance() - 2000);
                    System.out.println("***************************************************************");
                    System.out.println("   欢迎" + acc[pass].getaccountname() + "进行   取款 ");
                    System.out.println("****************************************************************");
                    System.out.println("             当前账户取款操作2000元成功。");
                    System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
                }
                break;
            }
    
            case 6: {
                
                if (acc[pass].getaccountbalance() < 5000) {
                    System.out.println("账户余额不足,返回取款界面");
                    qukuan(pass);
                } else {
                    acc[pass].setamount(acc[pass].getamount() + 5000);
                    acc[pass].setaccountbalance(acc[pass].getaccountbalance() - 5000);
                    System.out.println("***************************************************************");
                    System.out.println("   欢迎" + acc[pass].getaccountname() + "进行   取款 ");
                    System.out.println("****************************************************************");
                    System.out.println("             当前账户取款操作5000元成功。");
                    System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
                }
                break;
            }
    
            case 7: {
                
                System.out.println("请输入你要取款的金额:");
                int num = scan.nextInt();
    
                if (acc[pass].getaccountbalance() < num) {
                    System.out.println("账户余额不足,返回取款界面");
                    qukuan(pass);
                } else {
                    acc[pass].setamount(acc[pass].getamount() + num);
                    acc[pass].setaccountbalance(acc[pass].getaccountbalance() - num);
                    System.out.println("***************************************************************");
                    System.out.println("   欢迎" + acc[pass].getaccountname() + "进行  取款");
                    System.out.println("****************************************************************");
                    System.out.println("             当前账户取款操作" + num + "元成功。");
                    System.out.println("             当前账户余额为:" + acc[pass].getaccountbalance() + "元");
                }
                break;
            }
    
            case 8: {
                
                System.out.println("您执行了退卡操作,即将返回初始界面!");
                first();
                break;
            }
            case 9: {
                
                System.out.println("您执行了返回操作,即将返回主界面!");
                zhujiemian(pass);
                break;
            }
            default: {
    
                System.out.println("您没有输入正确的指令,即将重新返回取款界面!");
                qukuan(pass);
    
            }
                break;
            }
        }
    
        
    
    
    
    
        // 修改密码界面
    
        public static void xiugaimima(int pass) {
            
            System.out.println("请输入您想设置的新密码:");
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
            String xinmima = scan.next();
            System.out.println("新密码修改成功,新密码为:"+xinmima);
            acc[pass].setaccountpassword(xinmima);
            fanhui(pass);
        }
        
            
    
    
           // 转账汇款界面
    
        public static void zhuanzhanghuikuan(int pass) {
    
            @SuppressWarnings("resource")
            
            Scanner scan = new Scanner(System.in);
    
            System.out.println("您要转入的账号是?");
            
            String zhanghao1 = scan.next();
    
            int shuru = 0 ;
            int flag=0;
            for (int i = 0; i < 5; i++) {
    
                if (zhanghao1.equals(acc[i].getaccountID())) {
                    shuru=i;
                    break;
                }
                else {
                    flag++;
                }
        
            }
            if(flag==5) {
                System.out.println("您要转入的账号并不是本银行账号,即将返回主界面");
                zhujiemian(pass);
            }
                    System.out.println("您想转移的金额是?");
    
                    int zhuanzhang = scan.nextInt();
                    
                    if (acc[pass].getaccountbalance() - zhuanzhang <= 0) {
                        System.out.println("您的余额不足,转账失败!");
                    } else {
                        acc[pass].setaccountbalance(acc[pass].getaccountbalance() - zhuanzhang);
                        acc[pass].setamount(acc[pass].getamount() + zhuanzhang);
                        
                        acc[shuru].setaccountbalance(acc[shuru].getaccountbalance() + zhuanzhang);
                        acc[shuru].setamount(acc[shuru].getamount() + zhuanzhang);
                        
                        System.out.println("转账" + zhuanzhang + "元操作成功!");
                        System.out.println( zhanghao1 + "的余额为:" + acc[shuru].getaccountbalance());
                        System.out.println("您的账号余额为:" + acc[pass].getaccountbalance());
                    }
                }
    //查询余额界面
    public static void chaxunyue(int pass) { System.out.println("您的账户余额为:"+acc[pass].getaccountbalance()); fanhui(pass); } //主函数 public static void main(String[] args) { AccountManager.first(); } }

    欢迎界面:

    输入账号不是本银行账号时:

    输入密码界面:

    输入密码错误时:

    主界面:

     

     存款:

    取款界面:

    正常取款:

    余额不足时:

     (8)选项退卡:

    (9)选项返回:

    转账汇款:

     

    修改密码:

     查询金额:

    反思:

    今天进行了课前测试,测试题目为ATM自助取款机。之前没有进行过相关练习,只接触过简单的学生系统。测试刚开始的时候还比较顺利,和学生系统相似,完成了一些变量和方法的设置,写出了Account 类。然而在写AccountManager 类的时候遇到了很多问题。没有一个明确的思路,头脑不够清晰,不能快速理清各个界面之间的关系,也不能全面地考虑用户输入过程中可能出现的多种问题。目前为止仍然不能明确理解文件的处理,上述代码只能用数组完成。

    1、不会文件的读写

    要求:定义accountinformation.txt作为账户基本信息库,基本信息包括accountID,accountname,accountpassword, accountbalance,要求事先实现至少存储五个账户的信息,定义accountlist.txt作为账户操作流水信息数据库,操作流水信息包括(accountID,accountname,operatedate,operatetype, amount)。

    Java读写文件

    3、当在初始界面中输入账号时出现以下错误:

        通过网络查询错误:

    但是在之前的代码里我已经开辟了空间依然出现错误,不明白原因。在询问他人的建议后,我在代码中加入了一行,如下图所示,问题得以解决。

    我最初在主函数中使用 类名 . first( )来启动初始界面,(事先将该方法定义为了静态方法),然后出现错误。不理解为什么定义了一个对象 z 之后,我再用同样的 类名 . first ()的方法时,错误消失。

    上网查询资料得知,Java中主函数调用本类方法必须是静态的,因为main方法必须是静态方法,所以要调用对象方法,不能直接写方法,需要用对象调用。

    4、括号数量混乱

    当敲击回车后,系统自动生成收尾的回车,往往因为忽略了这一点导致程序发生错误。思路也不够清晰,以至于不能即时发现括号结构的错误。

    5、思路不清楚

     看见题目头脑空白,源于我的熟练程度不够。在之前学习C语言和c++的过程中,我并没有做到每个题目都认真彻底的理解完成,加之没有额外的大量的练习,导致我并没有养成良好的编程习惯以及编程思路,关于这一点,我将再接下来的学习生涯中加大练习,增强自己的熟练程度。

    6、不懂得分而治之

    尽管老师一再强调写完一部分的代码后要运行,避免在最后的时候出现问题而无从下手。在实际操作过程中,很多时候我仍然写了很多板块后才运行一次,解决错误的时候带来了很多不必要的麻烦。我认为造成这种结果的原因主要是因为,我并不能很好的理解板块与板块之间的关联。不明白一个程序要想成功运行需要哪些基本的东西,因为不懂,所以无从下手。

    在这道题目的若干功能中,最让我感到头疼的是转账汇款功能。我的循环和条件语句不能很好的结合,导致每次我输入转入账号时它都显示账号不是已有帐号,因此我在这个板块上花费了比较多的时间。还有就是,通过这道题目,我更加深刻地理解了为什么要多写方法,哪怕这个方法里只有一两行代码。分而治之的思想在程序中格外重要,不同界面之间的变换与连接,就是依托这种思维。

  • 相关阅读:
    Atcoder Tenka1 Programmer Contest 2019 D Three Colors
    Codeforces 1146E Hot is Cold
    ZOJ 3820 Building Fire Stations
    ZOJ 3822 Domination
    ZOJ 3949 Edge to the Root
    Codeforces 1144G Two Merged Sequences
    PTA 团体程序设计天梯赛 L3-020 至多删三个字符
    BZOJ 5102: [POI2018]Prawnicy
    BZOJ 1045: [HAOI2008] 糖果传递
    2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest
  • 原文地址:https://www.cnblogs.com/ltw222/p/13736135.html
Copyright © 2020-2023  润新知