开学测试感想

9.22

题目:

数据结构测试要求:(8分)

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、…………………………………………………………

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

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

 

代码:

package moniATM;

import java.io.UnsupportedEncodingException;
import java.io.UnsupportedEncondingException;
import java.nio.charset.Charset;
import java.util.scanner;
public class Account
{
  private String accountID;
  private String accountname;
  private String operatedate;
  private int operatetype;
  private String accountpassword;
  private int accountbalance;
  private int amount;
  public Account() {
    }

    public Account(String IDcard, String Name, String Adress, String password,
            int balance) {
        this.accountID = accountID;
        this.accountname = accountname;
        this.operatedate = operatedate;
        this.operatetype=operatetype;
        this.accountpassword = accountpassword;
        this.accountbalance = accountbalance;
    }

    public void setaccountname(String acccountname) {
        this.accountname = accountname;
    }

    public void setsetaccountID() {
        this.accountID = accountID;
    }

    public void setoperatedate(String operatedate) {
        this.operatedate = operatedate;
    }

    public void setoperatetype(int operatetype) {
        this.operatetype =operatetype;
    }

    public void setaccountpassword(String accountpassword) {
        this.accountpassword = accountpassword;
    }

    public void setaccountbalance(int accountbalance) {
        this.accountbalance = accountbalance;
    }

    public void setamount(int amount) {
        this.amount = amount;
    }

    public String getaccountID() {
        return accountID;
    }

    public String getaccountname() {
        return accountname;
    }

    public String getoperatedate() {
        return operatedate;
    }

    public int getoperatetype() {
        return operatetype;
    }

    public String getaccountpassword() {
        return accountpassword;
    }

    public int getaccountbalance() {
        return accountbalance;
    }

    public int getamount() {
        return amount;
    }

    public void setAccount() {
        // TODO Auto-generated method stub
        
    }
}

 

package moniATM;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.UnsupportedEncondingException;
import java.util.Scanner;

import com.sun.codemodel.internal.writer.FileCodeWriter;


public class AccountManager
{
    public Object accountID;
    public Object accountpassword;

    public class Main
    {
        private static final String NULL = null;
        private Object system;
        public void main(String[] args) throws UnsupportedEncodingException {
            char choise;
            int i = 0;        
            boolean flag;//判断标识
            Scanner sc = new Scanner(System.in);
            Account[] array = new Account[100];
            public void setList(int i,ArrayList<Account> ac)
            {
                try
                {
                    Account a=ac.get(i);
                
                }
                catch(Exception e)
                {
                    System.out.println("文件写入失败");
                }
            }
            for (int n = 0; n < 100; n++) {
                array[n] = new Account("asd", "asd", "asd", "asd", 1);
            }
            do {            
                System.out.println("|**********************************************|");
                System.out.println("|                  欢迎使用中国工商银                                                         |");
                System.out.println("|**********************************************|");
                System.out.println("|                    请输入您的账号                                                           |");
                System.out.println("|**********************************************|");
                System.out.println("");
                boolean isNULL;
                if(isNULL)
                {
                    System.out.println("|**********************************************|");
                    System.out.println("|                该卡不是工商卡                                                                        |");
                    System.out.println("|**********************************************|");
                }
                else {
                System.out.println("********************************************");
                System.out.println("              欢迎使用中国工商银行自助柜员系统                                ");
                System.out.println("********************************************");
                System.out.println("                   请输入您的密码                                                        ");
                System.out.println("********************************************");
                }
                public void setInformation(ArrayList<Account> ac)//写入信息
                {
                    try
                    {
                        int i=0;
                        FileWriter fw=new FileWriter("AccountInformation");
                        PrintWriter pw=new PrintWriter(fw);
                        for(i=0;i<ac.size();i++)
                        {
                        
                            pw.println(((Object) ac.get(i)).getAccountID()+" "+((Object) ac.get(i)).getAccontpassword()+" "+ ac.get(i).getAccountname()+" "+ac.get(i).getAccountbalance());
                        }
                        pw.flush();
                        pw.close();
                        fw.close();
                    }
            
                {
                    System.out.println("|**********************************************|");
                    System.out.println("|               密码输入错误,请重新输入                                                      |");
                    System.out.println("|**********************************************|");
                    counter++;
                }while(counter<3);
                Lock_Sys();
                
                
                
                
                if(isRight(accountID,accountpassword))
                {
                    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("|**********************************************|");
                }
                
    
                switch (choise) {
                case '1':
                     System.out.println("|**********************************************|");
                     System.out.println("|             欢迎使用中国工商银行自助柜员系统                                            |");
                     System.out.println("|                   请输入存款金额                                                               |");
                     System.out.println("|**********************************************|");
                     if(isNULL)
                     { 
                     System.out.println("|**********************************************|");
                     System.out.println("|             输入金额有误,返回取款页面                                                         |");
                     }
                     else
                     {
                         System.out.println("|**********************************************|");
                         System.out.println("|             欢迎使用中国工商银行自助柜员系统                                            |");
                         System.out.println("|**********************************************|");
                         System.out.println("|                     存款成功 现金额为                                                   |");
                     };
                        
                    
                    
                case '2':{
                    int amount;
                
                    System.out.println("|**********************************************|");
                    System.out.println("|               欢迎使用中国工商银行自助柜员系统                                    |");
                    System.out.println("|**********************************************|");
                    System.out.println("|                 当前账户每日可支取2万元                                                |");
                    System.out.println("|                 1.100元                                                                               |");
                    System.out.println("|                 2.200元                                                                               |");
                    System.out.println("|                 3.500元                                                                               |");
                    System.out.println("|                 4.1000元                                                                            |");
                    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("|**********************************************|");
                    int t;
                    t = sc.nextInt();
                        switch (t) {
                        case 1:amount = 100;break;
                        case 2:amount = 200;break;
                        case 3:amount = 500;break;
                        case 4:amount = 1000;break;
                        case 5:amount = 2000;break;
                        case 6:amount = 5000;break;
                        
                        }
                        if(amount>array[0].getaccountbalance())
                            System.out.println("余额不足");
                    
                }
                       
                case '3':
                    System.out.println("|**********************************************|");
                    System.out.println("|               欢迎使用中国工商银行自助柜员系统                                    |");
                    System.out.println("|**********************************************|");
                    System.out.println("|                    请输入转账金额                                                            |");
                    System.out.println("|**********************************************|");
                    array[0].setamount(sc.nextInt());
                    Account a=new Account();
                    Account b=new Account();
                    Scanner input=new Scanner(System.in);
                    String z="",x="";
                    int t=0,m=0,f1=0;
                    while(f1==0)
                    {
                        face(i,6,ac);
                        z=input.next();
                        if((t=id(z,ac))>=0)//判断
                        {
                            try
                            {
                                face(i,7,ac);
                                m=input.nextInt();
                                if(m<=0)throw new Exception();
                            }
                            catch(Exception e)
                            {
                                face(i,13,ac);
                                f1=1;
                                continue;
                            }
                            
                            if(f1==0)//输入正确 开始转账
                            {
                                a=ac.get(i);
                                b=ac.get(t);
                                a.setAmount(-m);
                                b.setAmount(m);
                                ac.set(i, a);
                                face(i,t,1,ac);
                                x=input.next();
                                if(x.equals("Y")==true)
                                {
                                    a.setOperatedate();
                                    a.setOperatetype(3);
                                    b.setOperatedate();
                                    b.setOperatetype(3);
                                    if(ac.get(i).getAccountbalance()>=m)
                                    {
                                    a.setAccountbalance(a.getAccountbalance()-m);
                                    ac.set(i, a);
                                    setList(i, ac);
                                    b.setAccountbalance(b.getAccountbalance()+m);
                                    ac.set(t, b);
                                    setList(t, ac);
                                    setInformation(ac);
                                    face(i,t,2,ac);
                                    break;
                                    }
                                    else
                                    {
                                        face(i,19,ac);
                                        break;
                                    }
                                    
                                }
                                else if(x.equals("N")==true)
                                {
                                    break;
                                }
                                else
                                {
                                    face(i,20,ac);
                                }

                            }
                        }
                    }
                }
            
                    
                    
                case '4':
                    System.out.println("|**********************************************|");
                    System.out.println("|               欢迎使用中国工商银行自助柜员系统                                    |");
                    System.out.println("|**********************************************|");
                    System.out.println("|                    请输入当前密码                                                            |");
                    System.out.println("|                    请输入修改密码                                                           |");
                    System.out.println("|                    请输入确认密码                                                            |");
                    public int id(String accountID,ArrayList<Account> ac)
                    {
                        int i=0,t=0;
                        if(accountID.length()!=8)
                        {
                            return -2;
                        }
                        for(t=0;t<accountID.length();t++)
                        {
                            if(accountID.charAt(t)<'0'||accountID.charAt(t)>'9')
                            {
                                return -2;
                            }
                        }
                        for(i=0;i<ac.size();i++)
                        {  
                            if(ac.get(i).getAccountID().equals(accountID)==true)
                            {
                                return i;
                            }
                        }
                        return -1;
                    }
                
                    
                case '5':
                    System.out.println("|**********************************************|");
                    System.out.println("|               欢迎使用中国工商银行自助柜员系统                                    |");
                    System.out.println("|**********************************************|");
                    System.out.println("|                    当前账户余额为: "+array[0].getaccountbalance()+"  元                                                |");
                    System.out.println("|                    账户清单信息为                                                           |");
                    System.out.println("|  1.操作日期                            操作类型                    操作金额                                            |");
                    
                    public int login(int i,String accountpassword,ArrayList<Account> ac)
                    {
                        int t=0;
                        if(accountpassword.length()!=6)
                        {
                            return -1;
                        }
                        for(t=0;t<accountpassword.length();t++)
                        {
                            if(accountpassword.charAt(t)<'0'||accountpassword.charAt(t)>'9')
                            {
                                return -1;
                            }
                        }
                        if(ac.get(i).getAccontpassword().equals(accountpassword)==true)
                        {
                            return 1;
                        }
                        else
                        {
                            return -1;
                        }
                
                    
                }
                    
                    
                
            
                

开学之初,java课程迎来了第一次考试。Java开学测试,测验的是在暑期期间,同学们自学java的结果。考试试题由课程老师,独自出题,难度系数约为完成了java基础课程的水平。

考试题目是实现ATM机的基本功能。考试要求为:ATM机的账户记录Account有账户的唯一性标识(8个数字的组合),用户的姓名,操作日期(Date),操作类型,账户密码(六位的数字,可以用0开头),当前的余额(可以为0)。该程序模拟ATM的功能设计,当用户插卡后显示,输入密码界面,用户输入正确密码(用户输入错误密码,则提示该卡已被锁定,无法操作),则弹出选择界面:存款、取款、转账汇款、修改密码、查询余额。

考试开始前,应老师要求,在编程前十五分钟,我对老师发的文本要求,详细的捋顺了自己的思路。说真的,本来没什么感觉,因为以前的程序,嗯,还是称之为代码吧,之前的代码十分短小,编写起来可边写边看,边看边想,可是,程序量一旦大起来,便出现了,边玩一部分后,不得不回头修改之前代码缺漏的地方,往往很长的时间都用在了对之前代码的修改上,而当我将整体的思路捋顺后,在类中的函数便可以一次性编好,无需进行太大的修改,这是一个我需要养成的习惯。

说真的,对于java,在暑期我所花费的时间并不长,仅仅只是掌握了最最基础的类与函数。不得不说,学校要求学生先学习c与c++是有依据的。在学习java时,我会不由得将java与c++语言相通的地方进行比较,哪怕语言不同,但是语言的结构,函数的作用,类的封装还是大同小异的。循环函数,if语句,数组声明,switch语句仅仅经过一次的阅读,依照之前语言的经验,很快便上手了。

但是,和之前一样的是,我又一次卡在了对于文件的读取上。而且不像之前的c++有老师的指教,这一次的自学让我苦不堪言,文本的读取输出到屏幕上倒是十分简单,难就难在读取后要按照字符串的形式接受。在经过了长时间的自学后,我也只能取巧来完成相同的功能。利用readline函数,读取一行的字符接收到字符串上,来完成对字符的读取。

很惭愧,自己只能利用取巧的方式,怪也怪自己没有在暑期认真的学习,怨不得别人。

很难说出那种自学的快感和纠结的痛苦,静下心来阅读别人的程序,去领会他人的想法。了解他人程序后,又要去验证自己的一些小想法,去小改程序。都说天下文章一大抄,就看会抄不会抄。程序又何尝不是,站在巨人的肩膀上,确实要看的更远。

这一次开学测试,就像老师说的那样,认清自己,明白自己的不足,被打击后,坚强的站起来,不在倒下时放弃,就在倒下处雄起。很幸运自己遇到了这样的老师,他不是逼迫你,而是让你自己逼迫自己。

posted @ 2020-09-22 23:14  不会编程的肉蛋葱鸡  阅读(133)  评论(1编辑  收藏  举报