Java第一次考试有感
上周四我们进行了本学期第一次Java考试,之前的学生信息管理系统使用数组进行信息的存储,之前都在都在学习如何使用数组对学生管理系统进行增删改查等功能的实现。但当老师通知改为用txt文件对信息进行存储,当时就傻了眼,在突击学习几天之后也只是学会了如何创建文件,没有学会如何将文件与软件链接,这也是我只得11分的原因。
通过这次考试,针对自身的问题,我总结如下:
- 视频学习片面没有重点,没有针对性,而且枯燥乏味,往往学习一章的内容时上一章的内容早已抛到脑后,毫无效率,所以以后的学习过程先将基本知识掌握之后独立编程,哪个地方有问题再去观看视频资料,有针对性的学习会提高学习效率。
- 书籍学习也一样,先将书通读一次,之后哪里有问题再去查阅章节内容,有针对性的学习。
- 之前编写代码习惯先去网上查找类似代码然后进行修改,本次考试给我当头一棒,原创试题没有类似代码怎么办?只能自己写,所以以后有代码题目先抛开一切先自己独立编写,无论做到什么程度,都力求做到自己的极限,然后再去查阅资料,或者查找类似问题的解决方法。
- 遇到问题,先不要着急上手,先将题目多读几次,即使不画流程图也应该在脑子里有大体的执行步骤。
- 编码时,如果是复杂问题,那就将复杂问题分为若干小步骤,将程序模块化,一个步骤一个模块的去实现,切忌不可将整个问题都完成以后再去运行程序检查错误,每完成一个小步骤就去运行一次,查找问题,避免整个问题都完成以后再去运行!
- 牢记建民老师的口头禅“复杂问题简单化,简单问题用心做!”
考试结束改进后代码:
//信1705-3 20173547 符满迪
public class Account
{
private String accountID,accountname,operatedate,accontpassword;
private int operatetype,accountbalance,amount;//“1”账户存款,“2”账户取款,“3”账户转账汇款,“4”修改账户密码,“5”查询账户余额。
public Account() {}
public Account(String accountID,String accountname,String accontpassword,int accountbalance)
{
this.accountID = accountID;
this.accountname = accountname;
this.accontpassword = accontpassword;
this.accountbalance = accountbalance;
}
public int getAccountbalance()
{
return accountbalance;
}
public void setAccountbalance(int accountbalance)
{
this.accountbalance = accountbalance;
}
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()
{
Date now = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy.MM.dd");
this.operatedate = ft.format(now);
}
public String getAccontpassword()
{
return accontpassword;
}
public void setAccontpassword(String accontpassword)
{
this.accontpassword = accontpassword;
}
public int getOperatetype()
{
return operatetype;
}
public void setOperatetype(int operatetype)
{
this.operatetype = operatetype;
}
public int getAmount()
{
return amount;
}
public void setAmount(int amount)
{
this.amount = amount;
}
}
package Text1;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class AccountManager
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
ArrayList<Account> ac=new ArrayList<Account>();
int select1=1,flag1=0,flag2=0,flagq=0,flag4=0,k;
String q="q";
getInformation(ac);
for(;;)
{
do
{
face(1);//判断账户是否重复
flag1=id(input.next(),ac);
if(flag1==-2) {face(0,12,ac);}
if(flag1==-1) {face(0,13,ac);}
}while(flag1<0);
for(k=0;k<3;k++)
{
face(2);//判断密码是否正确
flag2=login(flag1,input.next(),ac);
if(flag2<0) {face(flag1,14,ac);}
if(flag2>0) {break;}
}
if(flag2>0&&k<3)
{
do
{
face(flag1,3,ac);//ATM机主界面
try
{
select1=input.nextInt();
if(select1<=0) throw new Exception ();
}
catch(Exception e)
{
face(flag1,15,ac);
}
switch(select1)
{
case 1://账户存款
{
cunkuan(flag1,ac);
if(q.equals(input.next()))
{
q="";
flagq=1;
}
}break;
case 2://账户取款
{
flag4=qukuan(flag1,ac);
if(flag4==2)continue;
if(flag4==1)flagq=1;
}break;
case 3://转账
{
zhuanzhang(flag1,ac);
if(q.equals(input.next()))
{
q="";
flagq=1;
}
}break;
case 4://修改密码
{
resetpassward(flag1, ac);
if(q.equals(input.next()))
{
q="";
flagq=1;
}
}break;
case 5://查看账户信息
{
face(flag1,10,ac);
if(q.equals(input.next()))
{
q="";
flagq=1;
}
}break;
}
}while(flagq!=1);
}
else
{
face(flag1,11,ac);
}
}
}
public static void getInformation(ArrayList<Account> ac)//获得信息
{
try
{
FileReader fr=new FileReader("AccountInformation");
Scanner r=new Scanner(fr);
while(r.hasNext())
{
Account a=new Account();
a.setAccountID(r.next());
a.setAccontpassword(r.next());
a.setAccountname(r.next());
a.setAccountbalance(r.nextInt());
ac.add(a);
}
fr.close();
r.close();
}
catch(Exception e)
{
System.out.println("文件写入失败");
}
}
public static 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(ac.get(i).getAccountID()+" "+ac.get(i).getAccontpassword()+" "+ ac.get(i).getAccountname()+" "+ac.get(i).getAccountbalance());
}
pw.flush();
pw.close();
fw.close();
}
catch(Exception e)
{
System.out.println("文件写入失败");
}
}
public static String getList(int i,ArrayList<Account> ac)//读取流水
{
try
{
FileReader fr=new FileReader("AccountList");
Scanner in=new Scanner(fr);
String iid=ac.get(i).getAccountID();
String id=new String();
String s=new String();
String sum="";
int z=1;
while(in.hasNextLine())
{
id=in.next();
if(iid.equals(id))
{
s=id+" "+in.nextLine()+"\n";
sum=sum+"( "+z+" )\t"+s;
z++;
}
}
fr.close();
in.close();
return sum;
}
catch(Exception e)
{
System.out.println("文件读取失败");
return "";
}
}
public static void setList(int i,ArrayList<Account> ac)//写入流水
{
try
{
Account a=ac.get(i);
FileWriter fw=new FileWriter("AccountList",true);
PrintWriter pw=new PrintWriter(fw);
pw.println(a.getAccountID()+" "+a.getAccountname()+" "+ a.getOperatedate()+" "+a.getOperatetype()+" "+a.getAmount());
pw.flush();
pw.close();
fw.close();
}
catch(Exception e)
{
System.out.println("文件写入失败");
}
}
public static void zhuanzhang(int i,ArrayList<Account> ac)
{
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);
}
}
}
}
}
public static void resetpassward(int i,ArrayList<Account> ac)
{
Account a=new Account();
Scanner input=new Scanner(System.in);
String s1="",s2="",s3="";
int f1=0,f2=0,t=0;
face(i,8,ac);
s1=input.next();
f1=login(i,s1,ac);//密码正确
if(f1==1)
{
s2=input.next();
s3=input.next();
if(s2.equals(s3))//相等
{
if(s2.length()!=6)//格式
{
f2= -1;
face(i,16,ac);
}
for(t=0;t<s2.length();t++)//格式
{
if(s2.charAt(t)<'0'||s2.charAt(t)>'9')
{
f2= -1;
face(i,16,ac);
}
}
if(f2==0)
{
a=ac.get(i);
a.setAmount(0);
a.setOperatetype(4);
a.setOperatedate();
a.setAccontpassword(s2);
ac.set(i, a);
setList(i, ac);
setInformation(ac);
face(i,9,ac);
}
}
else
{
face(i,17,ac);
}
}
else
{
face(i,18,ac);
}
}
public static int qukuan(int i,ArrayList<Account> ac)
{
Account a=new Account();
Scanner input=new Scanner(System.in);
int f=0,m=0;
face(i,5,ac);
do
{
try
{
f=input.nextInt();
if(f<=0)throw new Exception();
}
catch(Exception e)
{
face(i,15,ac);
continue;
}
switch(f)
{
case 1:m=100;break;
case 2:m=500;break;
case 3:m=1000;break;
case 4:m=1500;break;
case 5:m=2000;break;
case 6:m=5000;break;
case 7:
{
try
{
m=input.nextInt();
if(m<=0)throw new Exception();
}
catch(Exception e)
{
face(i,15,ac);
continue;
}
};break;
case 8:return 1;
case 9:return 2;
}
}while(f>8);
if(ac.get(i).getAccountbalance()>=m)
{
a=ac.get(i);
a.setAccountbalance(a.getAccountbalance()-m);
a.setAmount(m*-1);
a.setOperatetype(2);
a.setOperatedate();
ac.set(i, a);
setList(i, ac);
setInformation(ac);
face(i,22,ac);
}
else
{
face(i,19,ac);
}
return 0;
}
//@SuppressWarnings("resource")
public static void cunkuan(int i,ArrayList<Account> ac)
{
Account a=new Account();
Scanner input=new Scanner(System.in);
int m=0,f=0;
face(i,4,ac);
try
{
m=input.nextInt();
if(m<=0) throw new Exception();
}
catch(Exception e)
{
face(i,15,ac);
f= -1;
}
a=ac.get(i);
a.setAccountbalance(a.getAccountbalance()+m);
a.setAmount(m);
a.setOperatetype(1);
a.setOperatedate();
ac.set(i, a);
setList(i, ac);
setInformation(ac);
if(f==0)
{
face(i,21,ac);
}
}
public static 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++)//查找 i 为账户序号
{
if(ac.get(i).getAccountID().equals(accountID)==true)
{
return i;
}
}
return -1;
}
public static 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;
}
}
public static void face(int select)
{
System.out.println("**********************************************");
System.out.println("\t欢迎使用中国工商银行自助柜台系统");
System.out.println("**********************************************");
switch(select)
{
case 1://输入账号
{
System.out.println("\t\t请输入你的账号");
}break;
case 2://输入密码
{
System.out.println("\t\t请输入你的密码");
}break;
}
}
public static void face(int i,int select,ArrayList<Account> ac)
{
System.out.println("**********************************************");
System.out.println(" 欢迎"+ac.get(i).getAccountname()+"使用中国工商银行自助柜台系统");
System.out.println("**********************************************");
switch(select)
{
case 3://主界面
{
System.out.println("\t\t1、 存款");
System.out.println("\t\t2、 取款");
System.out.println("\t\t3、 转账汇款");
System.out.println("\t\t4、 修改密码");
System.out.println("\t\t5、 查询余额");
}break;
case 4://存款
{
System.out.println("\t\t请输入存款金额");
}break;
case 5://取款
{
System.out.println("\t"+ac.get(i).getAccountname()+"账户当前账户每日可以支取2万元。");
System.out.println("\t\t1、100元");
System.out.println("\t\t2、500元");
System.out.println("\t\t3、1000元");
System.out.println("\t\t4、1500元");
System.out.println("\t\t5、2000元");
System.out.println("\t\t6、5000元");
System.out.println("\t\t7、其他金额");
System.out.println("\t\t8、退卡");
System.out.println("\t\t9、返回");
}break;
case 6://输入转账账户
{
System.out.println("\t\t请输入转账账户:");
}break;
case 7://输入转账金额
{
System.out.println("\t\t请输入转账金额:");
}break;
case 8://修改密码
{
System.out.println("\t\t请输入当前密码:");
System.out.println("\t\t请输入修改密码:");
System.out.println("\t\t请输入确认密码:");
}break;
case 9://修改密码成功
{
System.out.println("\t\t当前账户修改密码成功");
}break;
case 10://显示余额和操作流程
{
System.out.println("\t\t当前账户余额为 "+ac.get(i).getAccountbalance()+" 元。");
System.out.println("\t\t当前账户清单信息为:");
System.out.print(getList(i, ac));
Account a=ac.get(i);
a.setAmount(0);
a.setOperatetype(5);
a.setOperatedate();
setList(i, ac);
}break;
case 11:
{
System.out.println("\t该账号三次录入密码错误,该卡已被系统没收,请与工商银行及时联系。");
}break;
case 12:
{
System.out.println("\t\t该卡不是工商卡");
}break;
case 13:
{
System.out.println("\t\t该账号不存在");
}break;
case 14:
{
System.out.println("\t\t密码录入错误");
}break;
case 15:
{
System.out.println("\t\t请输入正整数");
}break;
case 16:
{
System.out.println("\t\t密码格式错误");
}break;
case 17:
{
System.out.println("\t修改密码与确认密码不一致");
}break;
case 18:
{
System.out.println("\t\t当前密码录入错误");
}break;
case 19:
{
System.out.println("\t\t账户余额不足");
}break;
case 20:
{
System.out.println("\t\t请输入\"Y\"或\"N\"");
}break;
case 21:
{
System.out.println("\t当前账户存款款"+ac.get(i).getAmount()+"成功。");
System.out.println("\t当前账户余额为 "+ac.get(i).getAccountbalance()+" 元。");
}break;
case 22:
{
System.out.println("\t当前账户取款"+ac.get(i).getAmount()+"成功。");
System.out.println("\t当前账户余额为 "+ac.get(i).getAccountbalance()+" 元。");
}break;
}
}
public static void face(int i,int t,int select,ArrayList<Account> ac)
{
String s=ac.get(t).getAccountname();
String star=s.substring(1);
star="*"+star;
System.out.println("*********************************************");
System.out.println(" 欢迎"+ac.get(i).getAccountname()+"使用中国工商银行自助柜台系统");
System.out.println("**********************************************");
switch(select)
{
case 1://确认
{
System.out.println("\t请确认是否向"+star+"转账"+ac.get(i).getAmount()*-1+"元");
}break;
case 2:
{
System.out.println("\t当前账户成功向"+star+"转账"+ac.get(i).getAmount()*-1+"元");
System.out.println("\t当前账户余额为 "+ac.get(i).getAccountbalance()+" 元。");
}break;
}
}
}