今日下午进行了java课前测试,时间2:30到5:30,共三小时,完成模拟ATM用户登录,存款,取款,转账,密码修改,
操作记录与用户信息的存储以及用户信息的修改等操作。
要实现登录界面,密码输入界面,系统界面之间的相互跳转。
三小时中我并没有完成任务,只是勉强将各功能的函数写出来,并没有完全实现界面的跳转,对于界面的跳转没有好的实现方法,
想用flag记录函数的返回值来判断跳转的界面,但效果并不理想。
package ATMtest; public class Account { private String accountID; private String accountname; private String operatedate; private int operateype; private String accountpassword; private int accountbalance; private int amount; 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 getOperatedate() { return operatedate; } public void setOperatedate(String operatedate) { this.operatedate = operatedate; } public int getOperateype() { return operateype; } public void setOperateype(int operateype) { this.operateype = operateype; } 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; } }
基本的类的定义,为了数据安全,成员变量定义为私有类型。利用set,get函数实现对于数据成员的相关操作。
为了节约时间可以用eclipse的自动生成函数功能。
//信1905-1班20194073李楠石家庄铁道大学 package ATMtest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class AccountManager { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub Account[] acc=new Account[30]; int x=0; File file=new File("accountinformation.txt"); BufferedReader br=new BufferedReader(new FileReader(file)); String str; while((str=br.readLine())!=null) { acc[x]=new Account(); String[] Str=str.split(" "); acc[x].setAccountID(Str[0]); acc[x].setAccountname(Str[1]); acc[x].setAccountpassword(Str[2]); acc[x].setAccountbalance(Integer.parseInt(Str[3])); x++; } br.close(); int X=x; x=0; String[] Jilu=new String[100]; int[] i=new int[2]; int j=0; Account Acc=new Account(); Account Acc2=new Account(); int flag1=0,flag2=0,flag3=0; for(;flag1!=1;) { flag1=firstJM(Acc); } int I; if(flag1==1) { for(I=0;flag2==0&&I<=3;I++) { flag2=mimaInput(Acc); } } else { System.out.println("该账号三次录入密码错误,该卡已被系统没收,请与工行及时联系处理"); } if(flag2==1) { for(;;) { flag3=zhujieMian(Acc); int Flag3=0; switch(flag3) { case 1: Flag3=cunKuan(Acc,i,Jilu);break; case 2: Flag3=quKuan(Acc,Jilu,i);break; case 3: Flag3=zhuanZhang(Acc,Acc2,i,Jilu);break; case 4: Flag3=xiuMima(Acc);break; case 5: chaYue(Acc);break; case 6: break; } if(flag3==6||Flag3==8) { for(int l=0;l<30;l++) { if(acc[l].getAccountID().equals(Acc.getAccountID())) { acc[l].setAccountID(Acc.getAccountID()); acc[l].setAccountname(Acc.getAccountname()); acc[l].setAccountpassword(Acc.getAccountpassword()); acc[l].setAccountbalance(Acc.getAccountbalance()); break; } } x=0; for(int L=0;L<100;L++) { if(Acc2.getAccountID()!=null) { if(acc[L].getAccountID().equals(Acc2.getAccountID())) { acc[L].setAccountID(Acc2.getAccountID()); acc[L].setAccountname(Acc2.getAccountname()); acc[L].setAccountpassword(Acc2.getAccountpassword()); acc[L].setAccountbalance(Acc2.getAccountbalance()); break; } } } File file2=new File("accountlist.txt"); BufferedWriter bw1=new BufferedWriter(new FileWriter(file)); BufferedWriter bw2=new BufferedWriter(new FileWriter(file2,true)); for(int Y=0;Y<X;Y++) { String str1=acc[Y].getAccountbalance()+""; String Str1=acc[Y].getAccountID()+" "+acc[Y].getAccountname()+" "+ acc[Y].getAccountpassword()+" "+str1; bw1.write(Str1); bw1.newLine(); bw1.flush(); } bw1.close(); for(int Y=0;Jilu[Y]!=null;Y++) { bw2.write(Jilu[Y]); bw2.newLine(); bw2.flush(); } bw2.close(); break; } } } } public static void jiemian() { System.out.println("\n********************" + "*************************"); System.out.println(" " + "欢迎使用中国工商银行自动柜员系统"); System.out.println("********************" + "*************************"); } public static int firstJM(Account Acc) throws IOException { jiemian(); System.out.println(" "+ "请输入您的账号:"); String accountID; Scanner sc=new Scanner(System.in); accountID=sc.nextLine(); if(accountID.length()!=8) { System.out.println("该卡不是工行卡"); return 0; } else { File file=new File("accountinformation.txt"); BufferedReader br=new BufferedReader(new FileReader(file)); String str; int flag=0; while((str=br.readLine())!=null) { String[] Str=str.split(" "); if(Str[0].equals(accountID)) { flag=1; Acc.setAccountID(accountID); Acc.setAccountname(Str[1]); Acc.setAccountpassword(Str[2]); Acc.setAccountbalance(Integer.parseInt(Str[3])); } } br.close(); if(flag==1) { return 1; } else { System.out.println("该账号不存在"); return 0; } } } public static int mimaInput(Account Acc) { Scanner sc=new Scanner(System.in); jiemian(); System.out.println("请输入您的密码:"); String str; str=sc.nextLine(); if(str.equals(Acc.getAccountpassword())) { System.out.println("密码输入成功,系统跳转到主界面。"); return 1; } else { System.out.println("密码错误!"); return 0; } } public static int zhujieMian(Account Acc) { jiemian(); System.out.println("1.存款"); System.out.println("2.取款"); System.out.println("3.转账汇款"); System.out.println("4.修改密码"); System.out.println("5.查询余额"); System.out.println("6.退卡"); int n=0; Scanner sc=new Scanner(System.in); n=sc.nextInt(); return n; } public static int cunKuan(Account Acc,int[] i,String[] jilu) { jiemian(); System.out.println("请输入存款金额;"); int n; Scanner sc=new Scanner(System.in); n=sc.nextInt(); if(n<=0) { System.out.println("输入金额有误,返回系统界面;输入字母“q”"); String str; str=sc.next(); if(str.equals("q")) { return 0; } else { return -1; } } else { jiemian(); System.out.println("当前账户存款操作成功。"); Acc.setAccountbalance(Acc.getAccountbalance()+n); System.out.println("当前账户余额为:"+Acc.getAccountbalance()+"元"); String str2=n+""; jilu[i[0]]=Acc.getAccountname()+" "+"+"+" "+str2; i[0]++; return 1; } } public static int quKuan(Account Acc,String[] jilu,int[] i) { jiemian(); System.out.println("当前账户每日可以支取"+Acc.getAccountbalance()+"万元"); System.out.println("1.100元\n"+"2.500元\n"+"3.1000元\n"+"4.1500元\n"+ "5.2000元\n"+"6.5000元\n"+"7.其他金额\n"+"8.退卡\n"+"9.返回"); int n; Scanner sc=new Scanner(System.in); n=sc.nextInt(); int flag=0; if(n>=1&&n<=6) { switch(n) { case 1: if(Acc.getAccountbalance()>=100) flag=100;break; case 2: if(Acc.getAccountbalance()>=500) flag=500;break; case 3: if(Acc.getAccountbalance()>=1000) flag=1000;break; case 4: if(Acc.getAccountbalance()>=1500) flag=1500;break; case 5: if(Acc.getAccountbalance()>=2000) flag=2000;break; case 6: if(Acc.getAccountbalance()>=5000) flag=5000;break; } if(flag==0) { System.out.println("余额不足,请输入9返回"); int N; N=sc.nextInt(); return 9; } else { jiemian(); System.out.println("当前账户取款操作"+flag+"元成功"); Acc.setAccountbalance(Acc.getAccountbalance()-flag); System.out.println("当前账户余额为:"+Acc.getAccountbalance()+"元"); String str2=flag+""; jilu[i[0]]=Acc.getAccountname()+" "+"-"+" "+str2; i[0]++;return 1; } } else { if(n==7) { jiemian(); System.out.println("请输入取款金额:"); int N; N=sc.nextInt(); if(Acc.getAccountbalance()>=N) { jiemian(); System.out.println("当前账户取款操作"+N+"元成功"); Acc.setAccountbalance(Acc.getAccountbalance()-N); System.out.println("当前账户余额为:"+Acc.getAccountbalance()+"元"); String str2=N+""; jilu[i[0]]=Acc.getAccountname()+" "+"-"+" "+str2; i[0]++;return 1; } else { System.out.println("余额不足,已返回系统主页面"); return 9; } } else { if(n==8) { return 8; } else { return 9; } } } } public static int zhuanZhang(Account Acc,Account Acc2,int[] i,String[] jilu) throws IOException { Scanner sc=new Scanner(System.in); jiemian(); System.out.println("请输入转账账户:"); String accountID; accountID=sc.nextLine(); File file=new File("accountinformation.txt"); BufferedReader br=new BufferedReader(new FileReader(file)); String str; int flag=0; while((str=br.readLine())!=null) { String[] Str=str.split(" "); if(Str[0].equals(accountID)) { flag=1; Acc2.setAccountID(accountID); Acc2.setAccountname(Str[1]); Acc2.setAccountpassword(Str[2]); Acc2.setAccountbalance(Integer.parseInt(Str[3])); } } br.close(); if(flag==1) { jiemian(); System.out.println("请输入转账金额:"); int n; n=sc.nextInt(); if(Acc.getAccountbalance()>=n) { jiemian(); System.out.println("请确认是否向"+Acc2.getAccountname()+"转账"+n+"元。"); String str2; str2=sc.next(); if(str2.equals("N")) { return 0; } else { String Str1=n+""; jilu[i[0]]=Acc.getAccountname()+" "+"-"+" "+Str1; i[0]++; jilu[i[0]]=Acc2.getAccountname()+" "+"+"+" "+Str1; i[0]++; jiemian(); Acc.setAccountbalance(Acc.getAccountbalance()-n); Acc2.setAccountbalance(Acc2.getAccountbalance()+n); System.out.println("当前账户向"+Acc2.getAccountname()+"成功转账"+n+"元。"); System.out.println("当前账户余额为:"+Acc.getAccountbalance()+"元"); return 1; } } else { System.out.println("余额不足"); return 0; } } else { System.out.println("该账户不存在"); return 0; } } public static int xiuMima(Account Acc) { jiemian(); System.out.println("请输入当前密码:"); String str1; Scanner sc=new Scanner(System.in); str1=sc.nextLine(); if(str1.equals(Acc.getAccountpassword())) { System.out.println("请输入修改密码:"); String str2; str2=sc.nextLine(); System.out.println("请输入确定密码:"); String str3; str3=sc.nextLine(); if(str3.equals(str2)) { System.out.println("密码修改成功"); return 1; } else { return 0; } } else { return 0; } } public static void chaYue(Account Acc) throws IOException { jiemian(); System.out.println("当前账户余额为:"+Acc.getAccountbalance()+"元"); File file3=new File("accountlist.txt"); BufferedReader br=new BufferedReader(new FileReader(file3)); String str; while((str=br.readLine())!=null) { String[] Str=str.split(" "); if(Str[0].equals(Acc.getAccountname())) { System.out.println(str); } } br.close(); } }
对于页面的跳转,我将每个函数的返回值设置为Int,根据返回的不同数值,跳转不同的页面,1,0则表示成功,失败(存款,取款,转账等),
利用flagj记录函数的返回值以进行跳转。
对于系统的主界面则采用for循环来实现,同样是检测函数返回的数值判断是否结束循环,在结束循环时,将用户信息的变动,与操作记录等
储存进相应的文件。
存储格式是各信息之间用空格隔开,以便读取时,用String类的spli函数将各个信息分开,方便操作。
各个功能的函数编写时,思路不是很清晰,对于题目的意思理解不清,代码混乱,冗长。虽然功能基本实现,但要修改时,已记不清编写时候的
思路,修改困难。
以下是运行结果截图
课前测试中遇到了许多问题,1.首先拿到问题后,我就开始编程序,没有将试题通读一遍,导致遇到后面的功能现实时
常常要改之前已经写完的功能,浪费了很多时间。
2.没读清问题,没有静下心来理解题意,再加之考试有些紧张,一个功能的描述读好几遍也没明白,这里又浪费了时间。
3.正如老师说的,我们最大的问题就是拿到问题就开始写,写完后在调试,结果不知道到底是哪里出错,要查好半天,
应当写完一个功能就测试一个,然后再将功能连接到主函数中。
4.这也是老师常提到的一个问题,我们写程序没有框架,框架搭建好了,程序就容易写了。
今后将注重以上问题,先读清题目,在搭好框架,然后写完一个功能测试一个,争取在下一次课堂测试中取得一个好成绩。