课前测试总结

今日下午进行了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.这也是老师常提到的一个问题,我们写程序没有框架,框架搭建好了,程序就容易写了。

今后将注重以上问题,先读清题目,在搭好框架,然后写完一个功能测试一个,争取在下一次课堂测试中取得一个好成绩。

原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/13717574.html