java_000.JAVA语言课堂测试试卷01

在暑假各种自学,来学校发现还要考文件,又补文件,至于数据库,卡在了插入数据,可以打印所有的数据但就是插入老师出错。(当然今天下午这一问题已经解决了)。在上周四,迎来了Java考试,原定1个半小时,由于试卷更改,改为2个半,又延长到3个小时。我就感觉我顺着自己的思路往下写,写一段验证一下,也没出现什么bug,但写着写着时间就到了,最终只写出来框架和账户登陆,存款,取款,修改密码,文件完全没写到。老师说他花了两个小时写完,还觉得自己很慢了。

题目就是ATM取款机,要求有字符打印的界面,输入账户密码来登陆,然后选择:存款、取款、转账、修改密码、查询余额(并输入流水记录),每一个都有不同的界面,执行完后可以返回输入账号界面;要有两个文件,一个记录账户信息一个记录流水。

说说自己的思路吧。先写好框架,所有的输入界面统一由face()函数负责,对于输入账户这个最初的界面进行循环,再对与是否输入存在的账号在套一层循环,输入存在的账号则跳出,进入下一个循环——输入密码,循环超过3次,禁止继续。然后加主界面的循环,switch选择1到5,调用5个不同的函数,每个函数调用情况有的会有返回值,正确的大于零,错误的小于零,不同的值对应不同的情况。定义四个函数来执行两个文件的写入和读取,在最开始调用读取信息来获得所有账户的信息,每执行一个存款等操作,将变更的值写进数组,再写入文件,并在流水文件中新加一行流水。也就是最后再在程序中相应的位置增加文件函数的调用。

结构如下:

mian()

{

 最外层循环——循环执行所有程序 

  循环--调用face()--输入账号-函数

  循环--调用face()--输入密码-函数

  循环--调用face()--主界面-如果在下面输入错误则跳回主界面,如果输入'q'则跳出此循环

  {

    switch

    {

      存款--函数--调用face()

      取款--函数--调用face()

      转账--函数--调用face()

      修改密码--函数-调用face()

      查询余额--函数-调用face()

    }

  } 

}

虽然要求写上1000字,但我没什么好写的了啊。就是读一读题,在脑子里面大致画一个框架,然后一点点补全而已。就这样吧。

 1 package Accunt;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Date;
 5 
 6 public class Account
 7 {
 8     private String accountID,accountname,operatedate,accontpassword;
 9     private int operatetype,accountbalance,amount;//“1”表示存款,“2”表示取款,“3”表示转账汇款,“4”表示修改账户密码,“5”表示查询余额。
10     public Account() {}
11     public Account(String accountID,String accountname,String accontpassword,int accountbalance)
12     {
13         this.accountID = accountID;
14         this.accountname = accountname;
15         this.accontpassword = accontpassword;
16         this.accountbalance = accountbalance;
17     }
18     public int getAccountbalance()
19     {
20         return accountbalance;
21     }
22     public void setAccountbalance(int accountbalance)
23     {
24         this.accountbalance = accountbalance;
25     }
26     public String getAccountID()
27     {
28         return accountID;
29     }
30     public void setAccountID(String accountID)
31     {
32         this.accountID = accountID;
33     }
34     public String getAccountname()
35     {
36         return accountname;
37     }
38     public void setAccountname(String accountname)
39     {
40         this.accountname = accountname;
41     }
42     public String getOperatedate()
43     {
44         return operatedate;
45     }
46     public void setOperatedate()
47     {
48         Date now = new Date( );
49         SimpleDateFormat ft = new SimpleDateFormat ("yyyy.MM.dd");
50         this.operatedate = ft.format(now);
51     }
52     public String getAccontpassword()
53     {
54         return accontpassword;
55     }
56     public void setAccontpassword(String accontpassword)
57     {
58         this.accontpassword = accontpassword;
59     }
60     public int getOperatetype()
61     {
62         return operatetype;
63     }
64     public void setOperatetype(int operatetype)
65     {
66         this.operatetype = operatetype;
67     }
68     public int getAmount()
69     {
70         return amount;
71     }
72     public void setAmount(int amount)
73     {
74         this.amount = amount;
75     }
76     
77 }
  1 package Accunt;
  2 import java.io.*;
  3 import java.util.ArrayList;
  4 import java.util.Scanner;
  5 public class AccountManager
  6 {
  7     
  8     public static void main(String[] args)
  9     {
 10         Scanner input=new Scanner(System.in);
 11         ArrayList<Account> ac=new ArrayList<Account>();
 12         int select1=1,flag1=0,flag2=0,flagq=0,flag4=0,k;
 13         String q="q";
 14         getInformation(ac);
 15         for(;;)
 16         {
 17         
 18             do
 19             {
 20             face(1);//账户对比
 21             flag1=id(input.next(),ac);
 22             if(flag1==-2) {face(0,12,ac);}
 23             if(flag1==-1) {face(0,13,ac);}
 24             }while(flag1<0);
 25             
 26             for(k=0;k<3;k++)
 27             {
 28                 
 29                 face(2);//密码对比
 30                 flag2=login(flag1,input.next(),ac);
 31                 if(flag2<0) {face(flag1,14,ac);}
 32                 if(flag2>0) {break;}
 33             }
 34             if(flag2>0&&k<3)
 35             {
 36                 do
 37                 {
 38                     face(flag1,3,ac);//主界面
 39                 try
 40                     {
 41                     select1=input.nextInt();
 42                     if(select1<=0) throw new Exception ();
 43                     }
 44                     catch(Exception e)
 45                     {
 46                         face(flag1,15,ac);
 47                     }
 48                     switch(select1)
 49                     {
 50                     case 1://存款
 51                         {
 52                             cunkuan(flag1,ac);
 53                             if(q.equals(input.next()))
 54                             {
 55                                 q="";
 56                                 flagq=1;
 57                             }
 58                         }break;
 59                     case 2://取款
 60                         {
 61                             flag4=qukuan(flag1,ac);
 62                             if(flag4==2)continue;
 63                             if(flag4==1)flagq=1;
 64                         }break;
 65                     case 3://转账
 66                         {
 67                             zhuanzhang(flag1,ac);
 68                             if(q.equals(input.next()))
 69                             {
 70                                 q="";
 71                                 flagq=1;
 72                             }
 73                         }break;
 74                     case 4://修改密码
 75                         {
 76                             resetpassward(flag1, ac);
 77                             if(q.equals(input.next()))
 78                             {
 79                                 q="";
 80                                 flagq=1;
 81                             }
 82                         }break;
 83                     case 5://查看
 84                         {
 85                             face(flag1,10,ac);
 86                             if(q.equals(input.next()))
 87                             {
 88                                 q="";
 89                                 flagq=1;
 90                             }
 91                         }break;
 92                     }
 93                 }while(flagq!=1);
 94             }
 95             else
 96             {
 97                 face(flag1,11,ac);
 98             }
 99             
100         }
101     }
102     public static void getInformation(ArrayList<Account> ac)//获得信息
103     {
104         
105         try
106         {
107         FileReader fr=new FileReader("AccountInformation");
108         Scanner r=new Scanner(fr);
109         while(r.hasNext())
110         {
111             Account a=new Account();
112             a.setAccountID(r.next());
113             a.setAccontpassword(r.next());
114             a.setAccountname(r.next());
115             a.setAccountbalance(r.nextInt());
116             ac.add(a);
117         }
118         fr.close();
119         r.close();
120         }
121         catch(Exception e)
122         {
123             System.out.println("文件写入失败");
124         }
125     }
126     public static void setInformation(ArrayList<Account> ac)//写入信息
127     {
128         try
129         {
130             int i=0;
131             FileWriter fw=new FileWriter("AccountInformation");
132             PrintWriter pw=new PrintWriter(fw);
133             for(i=0;i<ac.size();i++)
134             {
135             
136                 pw.println(ac.get(i).getAccountID()+" "+ac.get(i).getAccontpassword()+" "+ ac.get(i).getAccountname()+" "+ac.get(i).getAccountbalance());
137             }
138             pw.flush();
139             pw.close();
140             fw.close();
141         }
142         catch(Exception e)
143         {
144             System.out.println("文件写入失败");
145         }
146     }
147     public static String getList(int i,ArrayList<Account> ac)//读取流水
148     {
149         try
150         {
151             FileReader fr=new FileReader("AccountList");
152             Scanner in=new Scanner(fr);
153             String iid=ac.get(i).getAccountID();
154             String id=new String();
155             String s=new String();
156             String sum="";
157             int z=1;
158             while(in.hasNextLine())
159             {
160                 id=in.next();
161                 if(iid.equals(id))
162                 {
163                     s=id+" "+in.nextLine()+"
";
164                     sum=sum+"( "+z+" )	"+s;
165                     z++;
166                 }
167             }
168             fr.close();
169             in.close();
170             return sum;
171         }
172         catch(Exception e)
173         {
174             System.out.println("文件读取失败");
175             return "";
176         }
177     }
178     public static void setList(int i,ArrayList<Account> ac)//写入流水
179     {
180         try
181         {
182             Account a=ac.get(i);
183             FileWriter fw=new FileWriter("AccountList",true);
184             PrintWriter pw=new PrintWriter(fw);
185             pw.println(a.getAccountID()+" "+a.getAccountname()+" "+ a.getOperatedate()+" "+a.getOperatetype()+" "+a.getAmount());
186             pw.flush();
187             pw.close();
188             fw.close();
189         }
190         catch(Exception e)
191         {
192             System.out.println("文件写入失败");
193         }
194     }
195     public static void zhuanzhang(int i,ArrayList<Account> ac)
196     {
197         Account a=new Account();
198         Account b=new Account();
199         Scanner input=new Scanner(System.in);
200         String z="",x="";
201         int t=0,m=0,f1=0;
202         while(f1==0)
203         {
204             face(i,6,ac);
205             z=input.next();
206             if((t=id(z,ac))>=0)//判断
207             {
208                 try
209                 {
210                     face(i,7,ac);
211                     m=input.nextInt();
212                     if(m<=0)throw new Exception();
213                 }
214                 catch(Exception e)
215                 {
216                     face(i,13,ac);
217                     f1=1;
218                     continue;
219                 }
220                 
221                 if(f1==0)//输入正确 开始转账
222                 {
223                     a=ac.get(i);
224                     b=ac.get(t);
225                     a.setAmount(-m);
226                     b.setAmount(m);
227                     ac.set(i, a);
228                     face(i,t,1,ac);
229                     x=input.next();
230                     if(x.equals("Y")==true)
231                     {
232                         a.setOperatedate();
233                         a.setOperatetype(3);
234                         b.setOperatedate();
235                         b.setOperatetype(3);
236                         if(ac.get(i).getAccountbalance()>=m)
237                         {
238                         a.setAccountbalance(a.getAccountbalance()-m);//取款
239                         ac.set(i, a);
240                         setList(i, ac);
241                         b.setAccountbalance(b.getAccountbalance()+m);//存款
242                         ac.set(t, b);
243                         setList(t, ac);
244                         setInformation(ac);
245                         face(i,t,2,ac);
246                         break;
247                         }
248                         else
249                         {
250                             face(i,19,ac);
251                             break;
252                         }
253                         
254                     }
255                     else if(x.equals("N")==true)
256                     {
257                         break;
258                     }
259                     else
260                     {
261                         face(i,20,ac);
262                     }
263 
264                 }
265             }
266         }
267     }
268     public static void resetpassward(int i,ArrayList<Account> ac)
269     {
270         Account a=new Account();
271         Scanner input=new Scanner(System.in);
272         String s1="",s2="",s3="";
273         int f1=0,f2=0,t=0;
274         face(i,8,ac);
275         s1=input.next();
276         f1=login(i,s1,ac);//密码正确
277         if(f1==1)
278         {
279             s2=input.next();
280             s3=input.next();
281             if(s2.equals(s3))//相等
282             {
283                 if(s2.length()!=6)//格式
284                 {
285                     f2= -1;
286                     face(i,16,ac);
287                 }
288                 for(t=0;t<s2.length();t++)//格式
289                 {
290                     if(s2.charAt(t)<'0'||s2.charAt(t)>'9')
291                     {
292                         f2= -1;
293                         face(i,16,ac);
294                     }
295                 }
296                 if(f2==0)
297                 {
298                     a=ac.get(i);
299                     a.setAmount(0);
300                     a.setOperatetype(4);
301                     a.setOperatedate();
302                     a.setAccontpassword(s2);
303                     ac.set(i, a);
304                     setList(i, ac);
305                     setInformation(ac);
306                     face(i,9,ac);
307                 }
308             }
309             else
310             {
311                 face(i,17,ac);
312             }
313         }
314         else
315         {
316             face(i,18,ac);
317         }
318     }
319     public static int qukuan(int i,ArrayList<Account> ac)
320     {
321         Account a=new Account();
322         Scanner input=new Scanner(System.in);
323         int f=0,m=0;
324         face(i,5,ac);
325         do
326         {
327             try
328             {
329                 f=input.nextInt();
330                 if(f<=0)throw new Exception();
331             }
332             catch(Exception e)
333             {
334                 face(i,15,ac);
335                 continue;
336             }
337             switch(f)
338             {
339             case 1:m=100;break;
340             case 2:m=500;break;
341             case 3:m=1000;break;
342             case 4:m=1500;break;
343             case 5:m=2000;break;
344             case 6:m=5000;break;
345             case 7:
346             {
347                 try
348                 {
349                     m=input.nextInt();
350                     if(m<=0)throw new Exception();
351                 }
352                 catch(Exception e)
353                 {
354                     face(i,15,ac);
355                     continue;
356                 }
357             };break;
358             case 8:return 1;
359             case 9:return 2;
360             }
361         }while(f>8);
362         if(ac.get(i).getAccountbalance()>=m)
363         {
364         a=ac.get(i);
365         a.setAccountbalance(a.getAccountbalance()-m);
366         a.setAmount(m*-1);
367         a.setOperatetype(2);
368         a.setOperatedate();
369         ac.set(i, a);
370         setList(i, ac);
371         setInformation(ac);
372         face(i,22,ac);
373         }
374         else
375         {
376             face(i,19,ac);
377         }
378         return 0;
379     }
380     //@SuppressWarnings("resource")
381     public static void cunkuan(int i,ArrayList<Account> ac)
382     {
383         Account a=new Account();
384         Scanner input=new Scanner(System.in);
385         int m=0,f=0;
386         face(i,4,ac);
387         try
388         {
389             m=input.nextInt();
390             if(m<=0) throw new Exception();
391             
392         }
393         catch(Exception e)
394         {
395             face(i,15,ac);
396             f= -1;
397         }
398         a=ac.get(i);
399         a.setAccountbalance(a.getAccountbalance()+m);
400         a.setAmount(m);
401         a.setOperatetype(1);
402         a.setOperatedate();
403         ac.set(i, a);
404         setList(i, ac);
405         setInformation(ac);
406         if(f==0)
407         {
408             face(i,21,ac);
409         }
410     }
411     public static int id(String accountID,ArrayList<Account> ac)
412     {
413         int i=0,t=0;
414         if(accountID.length()!=8)//格式
415         {
416             return -2;
417         }
418         for(t=0;t<accountID.length();t++)//格式
419         {
420             if(accountID.charAt(t)<'0'||accountID.charAt(t)>'9')
421             {
422                 return -2;
423             }
424         }
425         for(i=0;i<ac.size();i++)//查找 i 为账户序号
426         {
427             if(ac.get(i).getAccountID().equals(accountID)==true)
428             {
429                 return i;
430             }
431         }
432         return -1;
433     }
434     
435     public static int login(int i,String accountpassword,ArrayList<Account> ac)
436     {
437         int t=0;
438         if(accountpassword.length()!=6)//格式
439         {
440             return -1;
441         }
442         for(t=0;t<accountpassword.length();t++)//格式
443         {
444             if(accountpassword.charAt(t)<'0'||accountpassword.charAt(t)>'9')
445             {
446                 return -1;
447             }
448         }
449         if(ac.get(i).getAccontpassword().equals(accountpassword)==true)//正误
450         {
451             return 1;
452         }
453         else
454         {
455             return -1;
456         }
457     }
458     public static void face(int select)
459     {
460         System.out.println("**********************************************");
461         System.out.println("	欢迎使用中国工商银行自助柜台系统");
462         System.out.println("**********************************************");
463         switch(select)
464         {
465         case 1://输入账号
466         {
467             System.out.println("		请输入你的账号");
468         }break;
469         case 2://输入密码
470         {
471             System.out.println("		请输入你的密码");
472             
473         }break;
474         }
475     }
476     public static void face(int i,int select,ArrayList<Account> ac)
477     {
478         System.out.println("**********************************************");
479         System.out.println("        欢迎"+ac.get(i).getAccountname()+"使用中国工商银行自助柜台系统");
480         System.out.println("**********************************************");
481         switch(select)
482         {
483 
484         case 3://主界面
485         {
486             System.out.println("		1、  存款");
487             System.out.println("		2、  取款");
488             System.out.println("		3、  转账汇款");
489             System.out.println("		4、  修改密码");
490             System.out.println("		5、  查询余额");
491         }break;
492         case 4://存款
493         {
494             System.out.println("		请输入存款金额");
495         }break;
496         case 5://取款
497         {
498             System.out.println("	"+ac.get(i).getAccountname()+"账户当前账户每日可以支取2万元。");
499             System.out.println("		1、100元");
500             System.out.println("		2、500元");
501             System.out.println("		3、1000元");
502             System.out.println("		4、1500元");
503             System.out.println("		5、2000元");
504             System.out.println("		6、5000元");
505             System.out.println("		7、其他金额");
506             System.out.println("		8、退卡");
507             System.out.println("		9、返回");
508         }break;
509         case 6://输入转账账户
510         {
511             System.out.println("		请输入转账账户:");
512         }break;
513         case 7://输入转账金额
514         {
515             System.out.println("		请输入转账金额:");
516         }break;
517         case 8://修改密码
518         {
519             System.out.println("		请输入当前密码:");
520             System.out.println("		请输入修改密码:");
521             System.out.println("		请输入确认密码:");
522         }break;
523         case 9://修改密码成功
524         {
525             System.out.println("		当前账户修改密码成功");
526         }break;
527         case 10://显示余额和操作流程
528         {
529             System.out.println("		当前账户余额为  "+ac.get(i).getAccountbalance()+"  元。");
530             System.out.println("		当前账户清单信息为:");
531             System.out.print(getList(i, ac));
532             Account a=ac.get(i);
533             a.setAmount(0);
534             a.setOperatetype(5);
535             a.setOperatedate();
536             setList(i, ac);
537         }break;
538         case 11:
539         {
540             System.out.println("	该账号三次录入密码错误,该卡已被系统没收,请与工商银行及时联系。");
541         }break;
542         case 12:
543         {
544             System.out.println("		该卡不是工商卡");
545         }break;
546         case 13:
547         {
548             System.out.println("		该账号不存在");
549         }break;
550         case 14:
551         {
552             System.out.println("		密码录入错误");
553         }break;
554         case 15:
555         {
556             System.out.println("		请输入正整数");
557         }break;
558         case 16:
559         {
560             System.out.println("		密码格式错误");
561         }break;
562         case 17:
563         {
564             System.out.println("	修改密码与确认密码不一致");
565         }break;
566         case 18:
567         {
568             System.out.println("		当前密码录入错误");
569         }break;
570         case 19:
571         {
572             System.out.println("		账户余额不足");
573         }break;
574         case 20:
575         {
576             System.out.println("		请输入"Y"或"N"");
577         }break;
578         case 21:
579         {
580             System.out.println("	当前账户存款款"+ac.get(i).getAmount()+"成功。");
581             System.out.println("	当前账户余额为  "+ac.get(i).getAccountbalance()+"  元。");
582         }break;
583         case 22:
584         {
585             System.out.println("	当前账户取款"+ac.get(i).getAmount()+"成功。");
586             System.out.println("	当前账户余额为  "+ac.get(i).getAccountbalance()+"  元。");
587         }break;
588         }
589     }
590     public static void face(int i,int t,int select,ArrayList<Account> ac)
591     {
592         String s=ac.get(t).getAccountname();
593         String star=s.substring(1);
594         star="*"+star;
595         System.out.println("*********************************************");
596         System.out.println("        欢迎"+ac.get(i).getAccountname()+"使用中国工商银行自助柜台系统");
597         System.out.println("**********************************************");
598         switch(select)
599         {
600         case 1://确认
601         {
602             System.out.println("	请确认是否向"+star+"转账"+ac.get(i).getAmount()*-1+"元");
603         }break;
604         case 2:
605         {
606             System.out.println("	当前账户成功向"+star+"转账"+ac.get(i).getAmount()*-1+"元");
607             System.out.println("	当前账户余额为  "+ac.get(i).getAccountbalance()+"  元。");
608         }break;
609         }
610     }
611     
612 }