zoukankan      html  css  js  c++  java
  • (转载)模拟银行自助终端系统

    一. 项目功能要求: 

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

    银行自助终端系统 

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

    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 Administrator
    11  *银行类——单例模式
    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()+"
    ");
                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     @Override
    129     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()+"
    ");
    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     @Override
    232     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()+"
    ");
    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     @Override
    336     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()+"
    ");
     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("请重新选择:");
                }
            }
        }
    
    }
    复制代码

    运行结果:

  • 相关阅读:
    read-uncommited 下脏读的实现
    MySQL 加锁处理分析【重点】
    Next-key locking是如何解决幻读(当前读)问题的
    spring ioc
    讨论 update A set number=number+ ? where id=?的原子性 (含数据库原理)
    PESSIMISTIC_READ & PESSIMISTIC_WRITE 与 共享锁 & 排它锁
    innodb当前读 与 快照读 and rr级别是否真正避免了幻读
    java finalize及实践
    uva 539 The Settlers of Catan
    zoj 1016 Parencodings
  • 原文地址:https://www.cnblogs.com/accumulater/p/6177928.html
Copyright © 2011-2022 走看看