模拟银行自助终端系统
模拟银行自助终端系统
一. 本系统模拟银行用户使用ATM机开户、查询、存款、取款功能,要求使用java语言编程实现。
说明:
1. 对于数据输入异常,可使用java异常处理机制进行处理。
2. 评分将以功能实现与代码规范性相结合的方式进行考核。
3. 如果对项目需求有疑问,可以随时以QQ留言方式联系我进行咨询。
4. 国庆放假期间,每天都有老师在公司值班,10月4日是我在公司值班,10月7日正常上班,欢迎大家到公司来做项目。
二. 项目功能要求:
项目开始运行显示主菜单为:
银行自助终端系统
****************************
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机的功能。
以下功能选做:
以单态模式实现工商银行,在测试类中默认添加多张银行卡,在农行的ATM机上实现跨行查询和存取款功能。
package com.bank.unionpay; public interface Card { //抽象方法 public double Balance() ; public void Cunkuan() ; public void Qukuan() ; }
package com.bank.unionpay; public abstract class ATM { //成员属性 public Card account ; // 抽象方法 public abstract void getAccount() ; }
package com.bank.unionpay; public enum FourYH { // 首行放置 ABC("农行") , ICBC("工行") , CCB("建行") , BOC("中行"); private String name ; public String getName() { return name; } FourYH(String name) { this.name = name ; } }
package com.bank.abc; import java.util.ArrayList; import java.util.List; import com.bank.unionpay.Card; import com.bank.unionpay.FourYH; //单例模式 public class ABCBank { //属性 final FourYH bank = FourYH.ABC ; private String yhName ; public List<CXcard> card= new ArrayList<>( ) ; //私有构造方法,防止该类被实例化 private ABCBank() { } //创建Bank的一个对象 private static ABCBank bk = new ABCBank() ; //获取唯一可用对象 public static ABCBank getBk() { return bk ; } public FourYH getBank() { return bank; } public String getYhName() { return yhName; } public List<CXcard> getCard() { return card; } //private Map<String ,CXcard> =new HashMap<>() ; }
package com.bank.abc; import java.util.Random; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.bank.unionpay.ATM; import com.bank.unionpay.FourYH; public class ATM1 extends ATM { // 属性 final FourYH bank = FourYH.ABC; Random shu = new Random() ; String sg = "" ; CXcard cd = new CXcard() ; // 获取唯一可用对象 ABCBank bk = ABCBank.getBk(); Random a = new Random(); String str = ""; @Override public void getAccount() { for(int i =0; i>-1 ;i++) { //分支语句,判断用户输入,提供相关功能 System.out.println("************************************"); System.out.println("您选择的为开户功能!"); System.out.println("请输入您的姓名:"); //提供输入,供用户注册名字 for(int j1 =1 ; j1>0 ;j1++) { Scanner can = new Scanner(System.in); String ss = can.nextLine(); String regEx = "[\u4e00-\u9fa5]"; Pattern p = Pattern.compile(regEx); int num = 0; //汉字长度 for(int s=0;s<ss.length();s++) { if(p.matches(regEx, ss.substring(s, s + 1))) { num++; } } //判断名字是否合法 if(num<2) { System.out.println("您输入的名字不合法!"); } else { System.out.println("您输入的名字是:"+ss); //判断身份证号码是否合法 for(int j2=1;j2>0;j2++) { System.out.println("请输入您的身份证号:"); Scanner sf = new Scanner(System.in) ; String sfNum = sf.nextLine(); //定义判别用户身份证号的正则表达式(18位,最后一位可以为字母) Pattern idNumPattern = Pattern.compile("(\\d{17}[0-9a-zA-Z])"); //通过Pattern获得Matcher Matcher idNumMatcher = idNumPattern.matcher(sfNum); //判断用户输入是否为身份证号 if(idNumMatcher.matches()) { System.out.println("您的身份证号是:"+sfNum); //判断密码是否合法 for(int j=1;j>0;j++) { System.out.println("请输入您的密码:"); Scanner mm = new Scanner(System.in) ; String mmNum = mm.nextLine(); //定义判别用户密码的正则表达式(6位纯数字) Pattern idNumPattern1 = Pattern.compile("(\\d{5}[0-9])"); //通过Pattern获得Matcher Matcher idNumMatcher1 = idNumPattern.matcher(mmNum); //判断用户输入的密码格式是否正确 if(idNumMatcher.matches()) { while(true) { System.out.println("您的密码是:"+mmNum); System.out.println("请再次输入您的密码,进行确认:"); Scanner mm1 = new Scanner(System.in) ; String mmNum1 = mm.nextLine(); if(mmNum1.equals(mmNum)==true) { System.out.println("开户成功,谢谢使用!"); System.out.println("银行自助终端系统"); for(int j3 = 0 ;j3<6;j3++) { int b = a.nextInt(9) ; str =str+""+b ; } System.out.print("您的卡号为:"); System.out.println(str); cd.setName(ss); cd.setMima(mmNum); cd.setKahao(str); cd.setShenfen(sfNum); ABCBank.getBk().card.add(cd) ; System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); break ; } else { System.out.println("您两次输入密码不一样,请重新设置密码!"); } } break ; } else { //如果不是,输出信息提示用户 System.out.println("您输入的密码必须为六位数字!"); } } break ; } else { //如果不是,输出信息提示用户 System.out.println("请输入合法的身份证号!"); } break ; } break ; } } break ; } // } } public String getStr() { return str; } }
package com.bank.abc; import java.util.Scanner; import com.bank.unionpay.Card; public class CXcard implements Card { private double balance ; private double cunkuan ; private double qukuan ; private String name ; private String shenfen ; private String kahao ; private String mima; public String getMima() { return mima; } public void setMima(String mima) { this.mima = mima; } public CXcard(String name, String shenfen , String kahao ,String mima) { this.name = name; this.kahao =kahao ; this.shenfen =shenfen; this.mima = mima ; } public CXcard() { super(); } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public double getCunkuan() { return cunkuan; } public void setCunkuan(double cunkuan) { this.cunkuan = cunkuan; } public double getQukuan() { return qukuan; } public void setQukuan(double qukuan) { this.qukuan = qukuan; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getShenfen() { return shenfen; } public void setShenfen(String shenfen) { this.shenfen = shenfen; } public String getKahao() { return kahao; } public void setKahao(String kahao) { this.kahao = kahao; } public double Balance() { // TODO 自动生成的方法存根 return balance; } public void Cunkuan() { System.out.println("************************************"); System.out.println("您选择的为存款功能!"); while(true) { System.out.println("请输入您的卡号:"); Scanner id = new Scanner(System.in) ; String idNum = id.nextLine(); //判断用户输入卡号是否存在 for(CXcard s :ABCBank.getBk().card) { if(idNum.equals(s.getKahao())) { for(int j =0 ;j<3;j++) { //提供用户输入渠道 System.out.println("请输入您的密码:"); Scanner password = new Scanner(System.in) ; String pd = password.nextLine(); if(pd.equals(s.getMima())) { System.out.println("您查询的账号信息为:"); System.out.println("卡号:"+s.kahao); System.out.println("姓名:"+s.name); System.out.println("身份证号:"+s.shenfen); System.out.println("余额:"+s.balance); System.out.println("请输入您的存款金额:"); Scanner cunqian = new Scanner(System.in) ; double cq =cunqian.nextDouble( ) ; if(cq>0) { balance += cq ; System.out.println("您的存款金额为:"+cq); ABCBank.getBk().card.get(0).setBalance(balance); System.out.println("卡号:"+s.kahao); System.out.println("姓名:"+s.name); System.out.println("身份证号:"+s.shenfen); System.out.println("余额:"+s.balance); System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); break ; } else { System.out.println("您输入的存款金额有误,系统即将退出,谢谢使用!"); } break ; } else { System.out.println("密码不对!"); } } break ; } else { System.out.println("卡号不存在,请重新输入:"); } } break ; } } public void Qukuan() { System.out.println("************************************"); System.out.println("您选择的为取款功能!"); while(true) { System.out.println("请输入您的卡号:"); Scanner id = new Scanner(System.in) ; String idNum = id.nextLine(); //判断用户输入卡号是否存在 for(CXcard s :ABCBank.getBk().card) { if(idNum.equals(s.getKahao())) { for(int j =0 ;j<3;j++) { //提供用户输入渠道 System.out.println("请输入您的密码:"); Scanner password = new Scanner(System.in) ; String pd = password.nextLine(); if(pd.equals(s.getMima())) { System.out.println("您查询的账号信息为:"); System.out.println("卡号:"+s.kahao); System.out.println("姓名:"+s.name); System.out.println("身份证号:"+s.shenfen); System.out.println("余额:"+s.balance); System.out.println("请输入您的取款金额:"); Scanner cunqian = new Scanner(System.in) ; double cq =cunqian.nextDouble( ) ; if(cq>0&&cq<=s.balance) { s.balance -= cq ; System.out.println("您的取款金额为:"+cq); ABCBank.getBk().card.get(0).setBalance(s.balance); System.out.println("卡号:"+s.kahao); System.out.println("姓名:"+s.name); System.out.println("身份证号:"+s.shenfen); System.out.println("余额:"+s.balance); System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); break ; } else { System.out.println("您输入的取款金额有误,系统即将退出,谢谢使用!"); } break ; } else { System.out.println("密码不对!"); } } break ; } else { System.out.println("卡号不存在,请重新输入:"); } } break ; } } public void chaxun() { System.out.println("************************************"); System.out.println("您选择的为查询功能!"); //提供用户输入渠道 while(true) { System.out.println("请输入您的卡号:"); Scanner id = new Scanner(System.in) ; String idNum = id.nextLine(); //判断用户输入卡号是否存在 for(CXcard s :ABCBank.getBk().card) { if(idNum.equals(s.getKahao())) { for(int j =0 ;j<3;j++) { //提供用户输入渠道 System.out.println("请输入您的密码:"); Scanner password = new Scanner(System.in) ; String pd = password.nextLine(); if(pd.equals(s.getMima())) { System.out.println("您查询的账号信息为:"); System.out.println("卡号:"+s.kahao); System.out.println("姓名:"+s.name); System.out.println("身份证号:"+s.shenfen); System.out.println("余额:"+s.balance); System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); break ; } else { System.out.println("密码不对!"); } } break ; } else { System.out.println("卡号不存在,请重新输入:"); } } break ; } } @Override public String toString() { return "CXcard [name=" + name + ", shenfen=" + shenfen + ", kahao=" + kahao + ", mima=" + mima + "]"; } }
package com.bank.abc; public class XY extends CXcard { //成员属性 private double touzhi ; public double Qukuan(double qukuan) { // TODO 自动生成的方法存根 if( qukuan>=0 ) { //还要修改 return qukuan ; } else { return -1 ;//测试类判断 } } }
package com.bank.test; import java.util.Scanner; import com.bank.abc.ATM1; import com.bank.abc.CXcard; public class SSSS { public static void main(String[] args) throws Exception { System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); while(true) { //提供输入 Scanner sc = new Scanner(System.in) ; int it = sc.nextInt( ) ; try { if(it==0) { ATM1 a = new ATM1() ; a.getAccount(); } if(it==1) { CXcard cd= new CXcard(); cd.chaxun(); } if(it==2) { CXcard cd= new CXcard(); cd.Cunkuan(); } if(it==3) { CXcard cd= new CXcard(); cd.Qukuan(); } if(it==4) { System.out.println("系统即将退出!"); break ; } } catch(Exception e) { System.out.println("输入有误!"); System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); } } } }