博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转载)模拟银行自助终端系统
阅读量:6900 次
发布时间:2019-06-27

本文共 22366 字,大约阅读时间需要 74 分钟。

一. 项目功能要求: 

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

银行自助终端系统 

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

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
card=new ArrayList(); //银行卡列表——集合25 public Map
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
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
(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("请重新选择:");            }        }    }}

运行结果:

转载于:https://www.cnblogs.com/accumulater/p/6177928.html

你可能感兴趣的文章
SCCM OSD部署排错
查看>>
十道非常好的shell脚本试题
查看>>
app项目案例一手机浏览器
查看>>
linuxmint安装配置
查看>>
java 中 isEmpty和isBlank区别
查看>>
申请SSL证书怎样验证域名所有权
查看>>
麒麟开源堡垒机集中管控平台软件简介
查看>>
第十一单元练习
查看>>
从零开始的linux 第十六章
查看>>
EOS内存RAM是如何买卖的
查看>>
如何制作一个自适应手机、电脑、ipad的网页方法总结大全
查看>>
systemC的同步时序建模
查看>>
微服务架构中zuul的两种隔离机制实验
查看>>
电子合同将取代纸质合同吗?
查看>>
官宣丨“创客集结号”成功接入“广东省教育资源公共服务平台”!
查看>>
【更新】Essential Studio for ASP.NET Web Forms 2018 v4
查看>>
Java多线程——锁概念与锁优化
查看>>
C++萌新到大牛,要看哪些书?
查看>>
ssh非交互式密码输入
查看>>
typemonkey怎么安装?typemonkey怎么用?ae脚本typemonkey教程
查看>>