模拟银行自助终端系统
Posted 特立独行的猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟银行自助终端系统相关的知识,希望对你有一定的参考价值。
一. 项目功能要求:
项目开始运行显示主菜单为:
银行自助终端系统
****************************
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 表示银联,在该包下添加:
- 表示银行卡的接口,包含查询余额,存款,取款等抽象方法。
- 表示ATM机的抽象类,使用银行卡类型的对象作为参数,实现查询余额,存款,取款等实例方法,添加开户为抽象方法。
- 表示四大银行的枚举类型:包含ABC,ICBC,CCB,BOC;分别代表农行,工行,建行,中行。
(二)包二:com.bank.abc 表示农行,在该包下添加:
- 以单例模式定义银行类,包含属性:银行类型(枚举类型,常量=ABC),银行名称(String),银行卡列表(集合)等。
- 定义银行卡的实现类-储蓄卡,包含属性:银行类型(枚举类型=ABC),姓名,身份证号,卡号,密码,余额;实现查询余额,存款,取款等方法。
- 定义ATM机的子类,包含属性:银行类型(枚举类型,常量=ABC),实现开户方法,其中:只能开办储蓄卡,卡号为6位随机数字,自动产生。新开户的银行卡添加到银行的银行卡列表中。
- 定义储蓄卡的子类-信用卡,增加属性:透支额度,重写取款方法,控制最大取款金额不能大于余额+透支额度的和。
(三)包三: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()+"\\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 @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 以上是关于模拟银行自助终端系统的主要内容,如果未能解决你的问题,请参考以下文章