首页 > 代码库 > 模拟银行自助终端系统

模拟银行自助终端系统

一. 项目功能要求: 

项目开始运行显示主菜单为:  

银行自助终端系统 

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

0.------开户

1.------查询  

2.------存款  

3.------取款  

4.------退出 

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

请选择你要执行的功能: 

此时,用户可以通过键盘输入选择自己要实现的功能,如果输入不是0,1,2,3,4,则系统提示: 

你选择的菜单不存在!

请重新选择: 

要求用户重新输入数据进行菜单选择!  

 

当用户输入0时,则进入开户功能:系统提示: 

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

你选择的为开户功能 

请输入你的姓名: 

此时用户需要输入姓名,输入完毕后系统提示:

请输入你的身份证号: 

此时用户需要输入18位身份证号,输入完毕如果验证未通过要求继续输入,直到验证通过后系统提示:

请输入你的密码: 

此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入,验证通过后系统提示:

开户成功,谢谢使用! 

 

银行自助终端系统 

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

0.------开户

1.------查询  

2.------存款  

3.------取款  

4.------退出 

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

请选择你要执行的功能: 

 

当用户输入1时,则进入查询功能:系统提示: 

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

你选择的为查询功能 

请输入你要查询的卡号: 

此时用户需要输入查询的卡号,系统对卡号进行检测,如果卡号不存在,则提示: 你输入的卡号不存在,请重新输入: 

请输入你要查询的卡号:

要求重新输入卡号,当用户输入正确卡号后,则提示:

请输入你的密码: 

此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入(最多3次),验证通过后系统将显示当前用户账号信息并进入主菜单:

你查询的账号信息为: 

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

姓名  身份证号    卡号   金额 

张三丰 420106198410112062 111111   12800.0  

 

银行自助终端系统 

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

0.------开户

1.------查询  

2.------存款  

3.------取款  

4.------退出 

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

请选择你要执行的功能: 

 

当用户输入2时,则进入存款功能:系统提示: 

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

你选择的为存款功能 

请输入你要存款的卡号: 

此时用户需要输入存款的卡号,系统对卡号进行检测,如果卡号不存在,则提示: 

你输入的卡号不存在,请重新输入: 

请输入你要存款的卡号: 

要求重新输入卡号,当用户输入正确卡号后,则提示:

请输入你的密码: 

此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入(最多3次),验证通过后系统将显示当前用户账号信息并进入主菜单: 

你要存款的账号信息为: 

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

姓名  身份证号     卡号  金额 

张三丰 420106198410112062 111111  12800.0 

请输入你要存入的金额: 

此时要求用户输入存款金额,系统对金额进行判断,如果输入的数据小于等于0,则提示: 

你输入的数据无效,系统将自动退出!谢谢使用  

 

银行自助终端系统 

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

0.------开户

1.------查询  

2.------存款  

3.------取款  

4.------退出 

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

请选择你要执行的功能: 

如果用户输入数据合法,系统提示存款成功,并回到主菜单: 

存款成功,谢谢使用!  

 

银行自助终端系统 

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

0.------开户

1.------查询  

2.------存款 

3.------取款  

4.------退出 

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

请选择你要执行的功能: 

数据将存入用户账号,如果用户再次进行数据查询,则能看到已经改变后的账户金额。 (说明:本系统使用文件进行数据存储,因此如果用户重新启动程序,数据将从文件中读取重新初始化到内存!此功能选做,可参考对象的序列化和反序列化或JSON) 

 

当用户输入3时,则进入取款功能:系统提示: 

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

你选择的为取款功能 请输入你要取款的卡号: 

此时用户需要输入取款的卡号,系统对卡号进行检测,如果卡号不存在,则提示: 

你输入的卡号不存在,请重新输入: 

请输入你要取款的卡号: 

要求重新输入卡号,当用户输入正确卡号后,则提示:

请输入你的密码: 

此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入(最多3次),验证通过后系统将显示当前用户账号信息并进入主菜单: 

你要取款的账号信息为: 

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

姓名  身份证号     卡号  金额 

张三丰 420106198410112062 111111  12800.0 

请输入你要取款的金额: 

此时要求用户输入取款金额,系统对金额进行判断,如果输入的数据小于0或大于账号总金额,则提示: 

你输入的数据无效,系统将自动退出!谢谢使用  

 

银行自助终端系统 

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

0.------开户

1.------查询  

2.------存款  

3.------取款  

4.------退出 

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

请选择你要执行的功能: 

如果用户输入数据合法,系统提示取款成功,并回到主菜单: 

取款成功,谢谢使用!  

 

银行自助终端系统 

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

0.------开户

1.------查询  

2.------存款  

3.------取款  

4.------退出 

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

请选择你要执行的功能: 

数据将从用户账号扣出,如果用户再次进行数据查询,则能看到已经改变后的账户金额。

 

当用户输入4时,系统将退出。

 

二.设计要求

(一)包一:com.bank.unionpay 表示银联,在该包下添加:

  1. 表示银行卡的接口,包含查询余额,存款,取款等抽象方法。
  2. 表示ATM机的抽象类,使用银行卡类型的对象作为参数,实现查询余额,存款,取款等实例方法,添加开户为抽象方法。
  3. 表示四大银行的枚举类型:包含ABC,ICBC,CCB,BOC;分别代表农行,工行,建行,中行。

(二)包二:com.bank.abc 表示农行,在该包下添加:

  1. 以单例模式定义银行类,包含属性:银行类型(枚举类型,常量=ABC),银行名称(String),银行卡列表(集合)等。
  2. 定义银行卡的实现类-储蓄卡,包含属性:银行类型(枚举类型=ABC),姓名,身份证号,卡号,密码,余额;实现查询余额,存款,取款等方法。
  3. 定义ATM机的子类,包含属性:银行类型(枚举类型,常量=ABC),实现开户方法,其中:只能开办储蓄卡,卡号为6位随机数字,自动产生。新开户的银行卡添加到银行的银行卡列表中。
  4. 定义储蓄卡的子类-信用卡,增加属性:透支额度,重写取款方法,控制最大取款金额不能大于余额+透支额度的和。

(三)包三:com.bank.test 表示测试,在该包下添加带main方法的测试类,实现项目要求的模拟ATM机的功能。

程序代码:包一com.bank.unionpay

 1 package com.bank.unionpay; 2 /** 3  *  4  * @author Administrator 5  *银联接口 6  */ 7 public interface Yinlian { 8     void Chaxun(Yinlian yinl);             //查询余额 9     void Cunkuan(Yinlian yinl);           //存款10     void Qukuan(Yinlian yinl);            //取款11 }
 1 package com.bank.unionpay; 2  3 import java.util.Scanner; 4  5 /** 6  *  7  * @author Administrator 8  *ATM机抽象类 9  */10 public abstract class ATM {11     private int yue;                  //变量余额12     public abstract void Kaihu();     //抽象方法——开户13     public int getYue() {             //get余额方法14         return yue;15     }16     public void setYue(int yue) {     //set余额方法17         this.yue = yue;18     }19     public void Chaxun(Yinlian yinl) {              //查询余额20         System.out.println("您的账户余额为:"+yue);21     }22     public void Cunkuan(Yinlian yinl) {             //存款23         while(true){24             System.out.println("请输入存款金额:");25             Scanner sc=new Scanner(System.in);26             int jine=sc.nextInt();                      //输入存款金额27             if(jine<0){28                 System.out.println("输入有误!");       //负数提示29                 continue;30             }else{31                 yue+=jine;                              //重新计算余额32                 break;33             }34         }35     }36     public void Qukuan(Yinlian yinl) {                  //取款37         while(true){38             System.out.println("请输入取款金额:");39             Scanner sc=new Scanner(System.in);40             int jine=sc.nextInt();                      //输入取款金额41             if(jine<=yue){42                 yue-=jine;                              //重新计算余额43                 break;44             }else if(jine>yue){45                 System.out.println("余额不足,无法取款!");      //余额不足提示46                 continue;47             }else{48                 System.out.println("输入有误!");               //负数提示49                 continue;50             }51         }        52     }53 }
package com.bank.unionpay;/** *  * @author Administrator *四大银行——枚举 */public enum Bank {    ABC("农行"),ICBC("工行"),CCB("建行"),BOC("中行");     //枚举类型    枚举列表    private final String name;             //常量银行名    public String getName(){               //getter方法返回银行名        return this.name;    }    private Bank(String name){             //私有构造方法        this.name=name;    }}

包二com.bank.abc

 1 package com.bank.abc; 2 import java.util.ArrayList; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6  7 import com.bank.unionpay.Bank; 8 /** 9  * 10  * @author Administrator11  *银行类——单例模式12  */13 public class Bankclass {14     private Bankclass(){                 //禁止外部访问构造方法15         16     }17     private static Bankclass bank=new Bankclass();      //内部产生唯一实例18     public static Bankclass getBankclass()              //开放一个方法给调用者返回这个实例19     {    20         return bank;21     }22     private final Bank ABC=Bank.ABC;                    //银行类型(枚举类型=ABC)23     private String bankname;                                //银行名称24     public List<Long> card=new ArrayList();                //银行卡列表——集合25     public Map<Long,Bankchuxu> Account=new HashMap<>();       //账号储蓄卡集合26 }
package com.bank.abc;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import java.util.Scanner;import com.bank.unionpay.ATM;import com.bank.unionpay.Bank;/** *  * @author Administrator *ATM机的子类 */public class ATMzi extends ATM{    private final Bank ABC=Bank.ABC;                    //银行类型(枚举类型=ABC)                           @Override    public void Kaihu() {                               //开户功能        Bankchuxu bk=new Bankchuxu();         System.out.println("请输入您的姓名:");        while(true){                                    //输入姓名            try{                                        //异常处理                Scanner sc=new Scanner(System.in);                bk.setName(sc.nextLine());                break;            }catch(Exception e){                System.out.println("输入有误!");                System.out.println("请重新输入:");                continue;            }        }        while(true){                                         //输入身份证号            try{                System.out.println("请输入您的身份证号:");                Scanner sc=new Scanner(System.in);                String a=sc.nextLine();                String regex="\\d{15}|\\d{17}[\\dxX]";                  //正则表达式控制身份证号                if(a.matches(regex)){                    bk.setIDcard(a);                    break;                }else{                    System.out.println("身份证号格式输入有误!");                    continue;                }            }catch(Exception e){                System.out.println("输入有误!");                System.out.println("请重新输入:");                continue;            }        }        while(true){                                    //输入密码            try{                System.out.println("请输入6位纯数字密码:");                Scanner sc=new Scanner(System.in);                String a=sc.nextLine();                String regex="\\d{6}";                        //正则表达式控制密码                if(a.matches(regex)){                    bk.setPassword(a);                    break;                }                else{                    System.out.println("输入密码格式有误!");                    continue;                }            }catch(Exception e){                System.out.println("输入有误!");                System.out.println("请重新输入:");                continue;            }        }                while(true){                Random a=new Random();            Long c=a.nextLong();                //生成储蓄卡号            String regex="\\d{19}";            if(c>0&&c.toString().matches(regex)){                bk.setCard(c);           //将生成的储蓄卡号赋给储蓄卡卡号属性                Bankclass.getBankclass().card.add(bk.getCard());          //将生成的储蓄卡号存到银行的银行卡列表中                Bankclass.getBankclass().Account.put(bk.getCard(), bk);   //卡号+储蓄卡对象                System.out.println("您的账号为:"+bk.getCard());                break;                }else{                    continue;                }        }        try {            FileOutputStream out =new FileOutputStream("d:/账号.txt",true);   //打印卡号到文本中            StringBuilder shuju=new StringBuilder();            shuju.append(bk.toString()+"\r\n");            byte[] by=shuju.toString().getBytes();            out.write(by);            out.close();        } catch (Exception e) {            e.printStackTrace();        }    }}
  1 package com.bank.abc;  2   3 import java.io.BufferedReader;  4 import java.io.FileOutputStream;  5 import java.io.FileReader;  6 import java.util.Scanner;  7   8 import com.bank.test.Jiemian;  9 import com.bank.unionpay.Bank; 10 import com.bank.unionpay.Yinlian; 11  12 /** 13  *  14  * @author Administrator 15  *储蓄卡类 16  */ 17 public class Bankchuxu implements Yinlian{ 18     protected final Bank ABC=Bank.ABC;                    //银行类型(枚举类型=ABC) 19     private String name;                                //姓名 20     private String IDcard;                                //身份证号 21     protected long card;                                //银行卡号 22     private String password;                               //密码 23     protected int yue;                              //余额 24     //储蓄卡号get、set方法 25     public long getCard() {  26         return card; 27     } 28     public void setCard(long card) { 29         this.card = card; 30     } 31     //姓名get、set方法 32     public String getName() { 33         return name; 34     } 35     public void setName(String name) { 36         this.name = name; 37     } 38     //身份证号get、set方法 39     public String getIDcard() { 40         return IDcard; 41     } 42     public void setIDcard(String iDcard) { 43         IDcard = iDcard; 44     } 45     //密码get、set方法 46     public String getPassword() { 47         return password; 48     } 49     public void setPassword(String password) { 50         this.password = password; 51     } 52     //余额get、set方法 53     public int getYue() { 54         return yue; 55     } 56     public void setYue(int yue) { 57         this.yue = yue; 58     } 59  60     @Override 61     public void Chaxun(Yinlian yinl) {              //查询功能 62         try {             63             FileReader fr = new FileReader("d:/账号.txt");          //读取文件中的账号 64             BufferedReader br=new BufferedReader(fr); 65             String str=null; 66             while((str=br.readLine())!= null){ 67                 Bankchuxu bk=new Bankchuxu(); 68                 String[] newstr=str.split(" ");                    //字符串分割放到字符串数组中 69                 for(int i=0;i<newstr.length;i++){                  //遍历数组将信息传给对象 70                     if(i==0)bk.setName(newstr[0]); 71                     if(i==1)bk.setIDcard(newstr[1]); 72                     if(i==2)bk.setCard(Long.parseLong(newstr[2])); 73                     if(i==3)bk.setPassword(newstr[3]); 74                     if(i==4)bk.setYue(Integer.parseInt(newstr[4])); 75                 } 76                 Bankclass.getBankclass().Account.put(bk.getCard(), bk);   //将卡号+储蓄卡对象放到集合中 77             } 78         } catch (Exception e1) { 79             // TODO 自动生成的 catch 块 80             e1.printStackTrace(); 81         } 82         System.out.println("请输入您要查的账号:");                  //输入账号 83         while(true){ 84             try{ 85                 Scanner sc=new Scanner(System.in); 86                 long a=sc.nextLong(); 87                 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 88                     if(a==temp){ 89                         card=a;                //取卡号 90                     } 91                 } 92                 if(a==card){          //验证卡号 93                     System.out.println("请输入您的密码:");            //输入密码 94                     int i=0; 95                     while(true){ 96                         Scanner s=new Scanner(System.in); 97                         String pw=s.nextLine(); 98                         if(pw.equals(Bankclass.getBankclass().Account.get(a).getPassword())){                           //验证密码 99                             System.out.println("你查询的账号信息为:");100                             System.out.println("******************************");101                             System.out.println("姓名     身份证号                                     卡号                                       金额");102                             System.out.println(Bankclass.getBankclass().Account.get(a).out());103                             break;104                         }else{105                             i++;106                             if(i==3){                                               //控制输入次数最多3次107                                 System.out.println("密码输错超过3次,无法继续输入!");108                                 break;109                             }else{110                                 System.out.println("密码输入错误!请重新输入:");111                                 continue;112                             }113                         }114                     }115                     break;116                 }else{117                     System.out.println("您输入的卡号不存在,请重新输入:");118                     continue;119                 }120             }catch(Exception e){121                 System.out.println("您输入的账号格式有误!");122                 System.out.println("请重新输入:");123                 continue;124             }125         }126     }127 128     @Override129     public void Cunkuan(Yinlian yinl) {             //存款130         try {131             FileReader fr = new FileReader("d:/账号.txt");132             BufferedReader br=new BufferedReader(fr);133             String str=null;134             while((str=br.readLine())!= null){135                 Bankchuxu bk=new Bankchuxu();136                 String[] newstr=str.split(" ");137                 for(int i=0;i<newstr.length;i++){138                     if(i==0)bk.setName(newstr[0]);139                     if(i==1)bk.setIDcard(newstr[1]);140                     if(i==2)bk.setCard(Long.parseLong(newstr[2]));141                     if(i==3)bk.setPassword(newstr[3]);142                     if(i==4)bk.setYue(Integer.parseInt(newstr[4]));143                 }144                 Bankclass.getBankclass().Account.put(bk.getCard(), bk);   //id+储蓄卡对象145             }146         } catch (Exception e1) {147             // TODO 自动生成的 catch 块148             e1.printStackTrace();149         }150         System.out.println("请输入您要存款的账号:");151         while(true){152             try{153                 Scanner sc=new Scanner(System.in);154                 long a=sc.nextLong();155                 for(Long temp:Bankclass.getBankclass().Account.keySet()){156                     if(a==temp){157                         card=a;                //取卡号158                     }159                 }160                 if(a==card){                              //验证卡号                          161                         System.out.println("请输入您的密码:");            //输入密码162                         int i=0;163                         while(true){164                             Scanner s=new Scanner(System.in);165                             String pw=s.nextLine();166                             if(pw.equals(Bankclass.getBankclass().Account.get(card).getPassword())){  //验证密码167                                 System.out.println("您要存款的账号信息为:");168                                 System.out.println("******************************");169                                 System.out.println("姓名     身份证号                                     卡号                                       金额");170                                 System.out.println(Bankclass.getBankclass().Account.get(card).out());171                                 while(true){172                                     try{173                                         System.out.println("请输入存款金额:");174                                         Scanner cun=new Scanner(System.in);175                                         int jine=cun.nextInt();                      //输入存款金额176                                         if(jine<0){177                                             System.out.println("您输入的数据无效,系统将自动退出!谢谢使用");       //负数提示178                                             break;179                                             }else{180                                                 yue=Bankclass.getBankclass().Account.get(card).getYue();181                                                 yue+=jine;                              //重新计算余额182                                                 try {183                                                     FileOutputStream out =new FileOutputStream("d:/账号.txt");184                                                     for(Long temp:Bankclass.getBankclass().Account.keySet()){185                                                         if(a==temp){186                                                             Bankclass.getBankclass().Account.get(a).setYue(yue);//存储取款后余额187                                                         }188                                                         String shuju=new String();189                                                         shuju=(Bankclass.getBankclass().Account.get(temp).toString()+"\r\n");190                                                         byte[] by=shuju.toString().getBytes();191                                                         out.write(by);192                                                     }193                                                     out.close();194                                                 } catch (Exception e) {195                                                     e.printStackTrace();196                                                 }197                                                 System.out.println("存款成功,谢谢使用!");198                                                 break;199                                             }200                                         }catch(Exception e){201                                             System.out.println("您输入的存款金额格式有误!");202                                             System.out.println("请重新输入:");203                                             continue;204                                         }205                                 }206                                 break;207                             }else{208                                 i++;209                                 if(i==3){                                               //控制输入次数最多3次210                                     System.out.println("密码输错超过3次,无法继续输入!");211                                     break;212                                 }else{213                                     System.out.println("密码输入错误!请重新输入:");214                                     continue;215                                 }216                             }217                         }218                         break;219                     }else{220                         System.out.println("您输入的卡号不存在,请重新输入:");221                         continue;222                         }223                 }catch(Exception e){224                 System.out.println("您输入的账号格式有误!");225                 System.out.println("请重新输入:");226                 continue;227             }228         }    229 }230 231     @Override232     public void Qukuan(Yinlian yinl) { // 取款233         try {234             FileReader fr = new FileReader("d:/账号.txt");235             BufferedReader br=new BufferedReader(fr);236             String str=null;237             while((str=br.readLine())!= null){238                 String[] newstr=str.split(" ");239                 Bankchuxu bk=new Bankchuxu();240                 for(int i=0;i<newstr.length;i++){241                     if(i==0)bk.setName(newstr[0]);242                     if(i==1)bk.setIDcard(newstr[1]);243                     if(i==2)bk.setCard(Long.parseLong(newstr[2]));244                     if(i==3)bk.setPassword(newstr[3]);245                     if(i==4)bk.setYue(Integer.parseInt(newstr[4]));246                 }247                 Bankclass.getBankclass().Account.put(bk.getCard(), bk);   //id+储蓄卡对象248             }249             250         } catch (Exception e1) {251             // TODO 自动生成的 catch 块252             e1.printStackTrace();253         }254         System.out.println("请输入您要取款的账号:");255         while(true){256             try{257                 Scanner qushu=new Scanner(System.in);258                 long b=qushu.nextLong();259                 for(Long temp:Bankclass.getBankclass().Account.keySet()){260                     if(b==temp){261                         card=b;                //取卡号262                     }263                 }264                 if(b==card){          //验证卡号265                     System.out.println("请输入您的密码:");            //输入密码266                     int i=0;267                     while(true){268                         Scanner qumi=new Scanner(System.in);269                         String pw=qumi.nextLine();270                         if(pw.equals(Bankclass.getBankclass().Account.get(b).getPassword())){  //验证密码271                             System.out.println("您要取款的账号信息为:");272                             System.out.println("******************************");273                             System.out.println("姓名     身份证号                   卡号                             金额");274                             System.out.println(Bankclass.getBankclass().Account.get(card).out());275                             while(true){276                                 try{277                                     System.out.println("请输入取款金额:");278                                     Scanner quj=new Scanner(System.in);279                                     int jine=quj.nextInt();                      //输入存款金额280                                     if(jine>Bankclass.getBankclass().Account.get(b).getYue()||jine<0){281                                         System.out.println("您输入的数据无效,系统将自动退出!谢谢使用");       //负数提示282                                         break;283                                     }else{284                                         yue=Bankclass.getBankclass().Account.get(b).getYue();285                                         yue-=jine;                              //重新计算余额286                                         try {287                                             FileOutputStream out =new FileOutputStream("d:/账号.txt");288                                             for(Long temp:Bankclass.getBankclass().Account.keySet()){289                                                 if(b==temp){290                                                     Bankclass.getBankclass().Account.get(b).setYue(yue);291                                                              //存储取款后余额292                                                 }293                                                 String shuju=new String();294                                                 shuju=(Bankclass.getBankclass().Account.get(temp).toString()+"\r\n");295                                                 byte[] by=shuju.toString().getBytes();296                                                 out.write(by);297                                             }298                                             out.close();299                                         } catch (Exception e) {300                                             e.printStackTrace();301                                         }302                                         System.out.println("取款成功,谢谢使用!");303                                         break;304                                     }305                                 }catch(Exception e){306                                     System.out.println("您输入的存款金额格式有误!");307                                     System.out.println("请重新输入:");308                                     continue;309                                 }310                             }311                             break;312                         }else{313                             i++;314                             if(i==3){                                               //控制输入次数最多3次315                                 System.out.println("密码输错超过3次,无法继续输入!");316                                 break;317                             }else{318                                 System.out.println("密码输入错误,请重新输入:");319                                 continue;320                             }321                         }322                     }323                     break;324                 }else{325                     System.out.println("您输入的卡号不存在,请重新输入:");326                     continue;327                 }328             }catch(Exception e){329                 System.out.println("您输入的账号格式有误!");330                 System.out.println("请重新输入:");331                 continue;332             }333         }    334     }335     @Override336     public String toString() {337         return getName()+ " " +getIDcard()+ " " +getCard()+ " " +getPassword()+" "+getYue()+" "+ABC;338     }339     public String out(){340         return getName()+" "+getIDcard()+" "+getCard()+ " "+getYue();341     }342 }
  1 package com.bank.abc;  2 /**  3  * 信用卡类  4  */  5 import java.io.BufferedReader;  6 import java.io.FileOutputStream;  7 import java.io.FileReader;  8 import java.util.Scanner;  9  10 import com.bank.test.Jiemian; 11 import com.bank.unionpay.Yinlian; 12  13 /** 14  *  15  * @author Administrator 16  *信用卡——储蓄卡子类 17  */ 18 public class Xincard extends Bankchuxu{ 19     private int touzhi=2000; 20     public void Qukuan(Yinlian yinl) {                  //取款 21         try { 22             FileReader fr = new FileReader("d:/信用账号.txt"); 23             BufferedReader br=new BufferedReader(fr); 24             String str=null; 25             while((str=br.readLine())!= null){ 26                 String[] newstr=str.split(" "); 27                 Bankchuxu bk=new Bankchuxu(); 28                 for(int i=0;i<newstr.length;i++){ 29                     if(i==0)bk.setName(newstr[0]); 30                     if(i==1)bk.setIDcard(newstr[1]); 31                     if(i==2)bk.setCard(Long.parseLong(newstr[2])); 32                     if(i==3)bk.setPassword(newstr[3]); 33                     if(i==4)bk.setYue(Integer.parseInt(newstr[4])); 34                 } 35                 Bankclass.getBankclass().Account.put(bk.getCard(), bk);   //id+储蓄卡对象 36             } 37         } catch (Exception e1) { 38             // TODO 自动生成的 catch 块 39             e1.printStackTrace(); 40         } 41         System.out.println("请输入您要取款的账号:"); 42         while(true){ 43             try{ 44                 Scanner qushu=new Scanner(System.in); 45                 long b=qushu.nextLong(); 46                 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 47                     if(b==temp){ 48                         card=b;                //取卡号 49                     } 50                 } 51                 if(b==card){          //验证卡号 52                     System.out.println("请输入您的密码:");            //输入密码 53                     int i=0; 54                     while(true){ 55                         Scanner qumi=new Scanner(System.in); 56                         String pw=qumi.nextLine(); 57                         if(pw.equals(Bankclass.getBankclass().Account.get(b).getPassword())){  //验证密码 58                             System.out.println("您要取款的账号信息为:"); 59                             System.out.println("******************************"); 60                             System.out.println("姓名     身份证号                                     卡号                                       可透支金额"); 61                             System.out.println(Bankclass.getBankclass().Account.get(card).out()); 62                             while(true){ 63                                 try{ 64                                     System.out.println("请输入取款金额:"); 65                                     Scanner quj=new Scanner(System.in); 66                                     int jine=quj.nextInt();                      //输入取款金额 67                                     if(jine<0){ 68                                         System.out.println("您输入的数据无效,系统将自动退出!谢谢使用");       //负数提示 69                                         Jiemian.jiemian(); 70                                         break; 71                                     }else{ 72                                         yue=Bankclass.getBankclass().Account.get(b).getYue(); 73                                          if(jine>(yue+touzhi)){ 74                                              System.out.println("取款超出透支额度,请按期还款"); 75                                          }else{ 76                                              yue=yue-jine;                 //重新计算余额 77                                          }                             78                                         try { 79                                             FileOutputStream out =new FileOutputStream("d:/信用账号.txt"); 80                                             for(Long temp:Bankclass.getBankclass().Account.keySet()){ 81                                                 if(b==temp){ 82                                                     Bankclass.getBankclass().Account.get(b).setYue(yue); 83                                                              //存储取款后余额 84                                                 } 85                                                 String shuju=new String(); 86                                                 shuju=(Bankclass.getBankclass().Account.get(temp).toString()+"\r\n"); 87                                                 byte[] by=shuju.toString().getBytes(); 88                                                 out.write(by); 89                                             } 90                                             out.close(); 91                                         } catch (Exception e) { 92                                             e.printStackTrace(); 93                                         } 94                                         System.out.println("取款成功,谢谢使用!"); 95                                         break; 96                                     } 97                                 }catch(Exception e){ 98                                     System.out.println("您输入的存款金额格式有误!"); 99                                     System.out.println("请重新输入:");100                                     continue;101                                 }102                             }103                             break;104                         }else{105                             i++;106                             if(i==3){                                               //控制输入次数最多3次107                                 System.out.println("密码输错超过3次,无法继续输入!");108                                 break;109                             }else{110                                 System.out.println("密码输入错误,请重新输入:");111                                 continue;112                             }113                         }114                     }115                     break;116                 }else{117                     System.out.println("您输入的卡号不存在,请重新输入:");118                     continue;119                 }120             }catch(Exception e){121                 System.out.println("您输入的账号格式有误!");122                 System.out.println("请重新输入:");123                 continue;124             }125         }    126     }127 }

包三:com.bank.test

 1 package com.bank.test; 2 /** 3  *  4  * @author Administrator 5  *界面类 6  */ 7 public class Jiemian { 8     public static void jiemian() { 9         System.out.println("银行自助终端系统");10         System.out.println("****************************");11         System.out.println("0.------开户");12         System.out.println("1.------查询");13         System.out.println("2.------存款");14         System.out.println("3.------取款");15         System.out.println("4.------退出");16         System.out.println("5.------信用卡取款");17         System.out.println("****************************");18         System.out.println("请选择你要执行的功能:");19     }20 }
package com.bank.test;import java.util.Scanner;import com.bank.abc.ATMzi;import com.bank.abc.Bankchuxu;import com.bank.abc.Bankclass;import com.bank.abc.Xincard;import com.bank.unionpay.Yinlian;/** *  * @author Administrator *测试类 */public class Test {    public static void main(String[] args) {        Jiemian.jiemian();                                       //调界面        Yinlian yinl=new Bankchuxu();        while(true){                                             //死循环实现输入错误返回            Scanner sc=new Scanner(System.in);            try{                                                 //输入异常                int shuru=sc.nextInt();                switch(shuru){                case 0:                    System.out.println("****************************");                    System.out.println("您选择的为开户功能");                    ATMzi a=new ATMzi();                    a.Kaihu();                                     //调用开户                    System.out.println("开户成功!");                    Jiemian.jiemian();                    break;                case 1:                    System.out.println("****************************");                    System.out.println("您选择的为查询功能");                    yinl.Chaxun(yinl);                    Jiemian.jiemian();                    break;                case 2:                    System.out.println("****************************");                    System.out.println("您选择的为存款功能");                    yinl.Cunkuan(yinl);                    Jiemian.jiemian();                    break;                case 3:                    System.out.println("****************************");                    System.out.println("您选择的为取款功能");                    yinl.Qukuan(yinl);                    Jiemian.jiemian();                    break;                case 4:                    System.out.println("谢谢使用!");                    break;                case 5:                    System.out.println("****************************");                    System.out.println("您选择的为信用卡取款功能");                    Xincard x=new Xincard();                    x.Qukuan(x);                    Jiemian.jiemian();                    break;                default:                    System.out.println("您选择的菜单不存在!");                    System.out.println("请重新选择:");                    continue;                }                if(shuru==4)break;            }catch(Exception e){                System.out.println("输入有误!");                System.out.println("请重新选择:");            }        }    }}

运行结果:

技术分享

技术分享

技术分享

技术分享

技术分享

 

模拟银行自助终端系统