Java 模擬銀行自助終端系統(tǒng)
一. 本系統(tǒng)模擬銀行用戶使用ATM機開戶、查詢、存款、取款功能,要求使用java語言編程實現(xiàn)。
說明:
1. 對于數(shù)據(jù)輸入異常,可使用java異常處理機制進行處理。
2. 評分將以功能實現(xiàn)與代碼規(guī)范性相結合的方式進行考核。
3. 如果對項目需求有疑問,可以隨時以QQ留言方式聯(lián)系我進行咨詢。
4. 國慶放假期間,每天都有老師在公司值班,10月4日是我在公司值班,10月7日正常上班,歡迎大家到公司來做項目。
二. 項目功能要求:
項目開始運行顯示主菜單為:
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
此時,用戶可以通過鍵盤輸入選擇自己要實現(xiàn)的功能,如果輸入不是0,1,2,3,4,則系統(tǒng)提示:
你選擇的菜單不存在!
請重新選擇:
要求用戶重新輸入數(shù)據(jù)進行菜單選擇!
當用戶輸入0時,則進入查詢功能:系統(tǒng)提示:
****************************
你選擇的為開戶功能
請輸入你的姓名:
此時用戶需要輸入姓名,輸入完畢后系統(tǒng)提示:
請輸入你的身份證號:
此時用戶需要輸入18位身份證號,輸入完畢如果驗證未通過要求繼續(xù)輸入,直到驗證通過后系統(tǒng)提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗證未通過要求繼續(xù)輸入,驗證通過后系統(tǒng)提示:
開戶成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
當用戶輸入1時,則進入查詢功能:系統(tǒng)提示:
****************************
你選擇的為查詢功能
請輸入你要查詢的卡號:
此時用戶需要輸入查詢的卡號,系統(tǒng)對卡號進行檢測,如果卡號不存在,則提示: 你輸入的卡號不存在,請重新輸入:
請輸入你要查詢的卡號:
要求重新輸入卡號,當用戶輸入正確卡號后,則提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗證未通過要求繼續(xù)輸入(最多3次),驗證通過后系統(tǒng)將顯示當前用戶賬號信息并進入主菜單:
你查詢的賬號信息為:
******************************
姓名 身份證號 卡號 金額
張三豐 420106198410112062 111111 12800.0
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
當用戶輸入2時,則進入存款功能:系統(tǒng)提示:
****************************
你選擇的為存款功能
請輸入你要存款的卡號:
此時用戶需要輸入存款的卡號,系統(tǒng)對卡號進行檢測,如果卡號不存在,則提示:
你輸入的卡號不存在,請重新輸入:
請輸入你要存款的卡號:
要求重新輸入卡號,當用戶輸入正確卡號后,則提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗證未通過要求繼續(xù)輸入(最多3次),驗證通過后系統(tǒng)將顯示當前用戶賬號信息并進入主菜單:
你要存款的賬號信息為:
******************************
姓名 身份證號 卡號 金額
張三豐 420106198410112062 111111 12800.0
請輸入你要存入的金額:
此時要求用戶輸入存款金額,系統(tǒng)對金額進行判斷,如果輸入的數(shù)據(jù)小于等于0,則提示:
你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
如果用戶輸入數(shù)據(jù)合法,系統(tǒng)提示存款成功,并回到主菜單:
存款成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
數(shù)據(jù)將存入用戶賬號,如果用戶再次進行數(shù)據(jù)查詢,則能看到已經(jīng)改變后的賬戶金額。 (說明:本系統(tǒng)使用文件進行數(shù)據(jù)存儲,因此如果用戶重新啟動程序,數(shù)據(jù)將從文件中讀取重新初始化到內存!此功能選做,可參考對象的序列化和反序列化或JSON)
當用戶輸入3時,則進入取款功能:系統(tǒng)提示:
****************************
你選擇的為取款功能 請輸入你要取款的卡號:
此時用戶需要輸入取款的卡號,系統(tǒng)對卡號進行檢測,如果卡號不存在,則提示:
你輸入的卡號不存在,請重新輸入:
請輸入你要取款的卡號:
要求重新輸入卡號,當用戶輸入正確卡號后,則提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗證未通過要求繼續(xù)輸入(最多3次),驗證通過后系統(tǒng)將顯示當前用戶賬號信息并進入主菜單:
你要取款的賬號信息為:
******************************
姓名 身份證號 卡號 金額
張三豐 420106198410112062 111111 12800.0
請輸入你要取款的金額:
此時要求用戶輸入取款金額,系統(tǒng)對金額進行判斷,如果輸入的數(shù)據(jù)小于0或大于賬號總金額,則提示:
你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
如果用戶輸入數(shù)據(jù)合法,系統(tǒng)提示取款成功,并回到主菜單:
取款成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
數(shù)據(jù)將從用戶賬號扣出,如果用戶再次進行數(shù)據(jù)查詢,則能看到已經(jīng)改變后的賬戶金額。
當用戶輸入4時,系統(tǒng)將退出。
三.設計要求
(一)包一:com.bank.unionpay 表示銀聯(lián),在該包下添加:
表示銀行卡的接口,包含查詢余額,存款,取款等抽象方法。
表示ATM機的抽象類,使用銀行卡類型的對象作為屬性或參數(shù),實現(xiàn)查詢余額,存款,取款等實例方法,添加開戶為抽象方法。
表示四大銀行的枚舉類型:包含ABC,ICBC,CCB,BOC;分別代表農(nóng)行,工行,建行,中行。
(二)包二:com.bank.abc 表示農(nóng)行,在該包下添加:
以單例模式定義銀行類,包含屬性:銀行類型(枚舉類型,常量=ABC),銀行名稱(String),銀行卡列表(集合)等。
定義銀行卡的實現(xiàn)類-儲蓄卡,包含屬性:銀行類型(枚舉類型=ABC),姓名,身份證號,卡號,密碼,余額;實現(xiàn)查詢余額,存款,取款等方法。
定義ATM機的子類,包含屬性:銀行類型(枚舉類型,常量=ABC),實現(xiàn)開戶方法,其中:只能開辦儲蓄卡,卡號為6位隨機數(shù)字,自動產(chǎn)生。新開戶的銀行卡添加到銀行的銀行卡列表中。
定義儲蓄卡的子類-信用卡,增加屬性:透支額度,重寫取款方法,控制最大取款金額不能大于余額+透支額度的和。
(三)包三:com.bank.test 表示測試,在該包下添加帶main方法的測試類,實現(xiàn)項目要求的模擬ATM機的功能。
以下功能選做:
以單態(tài)模式實現(xiàn)工商銀行,在測試類中默認添加多張銀行卡,在農(nóng)行的ATM機上實現(xiàn)跨行查詢和存取款功能。
包一:com.bank.unionpay
1,銀行卡抽象類
package com.bank.unionpay; public interface Yinhangka { public void cun(); public void qu(); public void getyu(); }
2,枚舉銀行類型
package com.bank.unionpay; public enum Yinhang { ABC("農(nóng)行"),ICBC("工商"),CCB("建行"),BOC("中行"); private final String yinhang; //私有化構造方法 private Yinhang(String yinhang) { this.yinhang=yinhang; } public String getname() { return this.yinhang; } }
3,ATM類
package com.bank.unionpay; import com.bank.abc.Yinhanglei; public abstract class ATM { private Yinhanglei yhl; //銀行類屬性 private double yue; //變量yue public double getYue() { return yue; } public void setYue(double yue) { this.yue = yue; } //查詢方法 public void yue() { System.out.println("卡上余額為:" +this.yue); } //存款方法 public void cun(double cun) { if(cun<0) { System.out.println("輸入有誤"); } else { this.yue+=cun; System.out.println("卡上余額為:"+this.yue); } } //取款方法 public void qu(double qu) { if(qu>this.yue) { System.out.println("余額不足"); } else { this.yue-=qu; System.out.println("卡上余額為:"+this.yue); } } //定義開戶抽象方法 public abstract void kaihu(); }
4,主界面類
package com.bank.unionpay; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Zujiemian { public void zhujiemian() { System.out.println("銀行自助終端系統(tǒng) "); System.out.println(); System.out.println("****************************"); System.out.println(); List<String> li=new ArrayList<String>(); li.add("開戶"); li.add("查詢"); li.add("存款"); li.add("取款"); li.add("退出"); for(int i=0;i<5;i++) { System.out.println(i+"-----"+li.get(i)); } System.out.println(); System.out.println("****************************"); System.out.println(); System.out.println("請選擇你要執(zhí)行的功能: "); } }
包二:com.bank.abc
1,ATM2開戶類
package com.bank.abc; import java.util.Random; import java.util.Scanner; import com.bank.unionpay.ATM; import com.bank.unionpay.Yinhang; public class ATM2 extends ATM{ private Yinhang yhl=Yinhang.ABC; @Override public void kaihu() { // 開戶方法 //輸入姓名 Cuxuka cxk=new Cuxuka(); try{ Scanner sc1=new Scanner(System.in); System.out.println("請輸入你的姓名:"); String st=sc1.nextLine(); cxk.setName(st); //輸入身份證 System.out.println("請輸入你的身份證號:"); for(int ig=0;ig>=0;ig++) { Scanner sc2=new Scanner(System.in); String str=sc2.nextLine(); String st1="\\d{15}|\\d{17}[\\dxX]"; if(str.matches(st1)) { cxk.setShenfen(str); break; } else { System.out.println("輸入的身份證號不是18位身份號"); } } //設置賬戶密碼 System.out.println("請輸入你的密碼:"); for(int ig=0;ig>=0;ig++) { Scanner sc3=new Scanner(System.in); String pass=sc3.nextLine(); String mm="\\d{6}"; if(pass.matches(mm)) { cxk.setPassword(pass); break; } else { System.out.println("請輸入正確的6位數(shù)密碼"); } } //生成6位數(shù)儲蓄卡號 Random a=new Random(); int[] ch=new int[6]; StringBuilder str=new StringBuilder(); String s; for(int i=0;i<6;i++) { ch[i]=a.nextInt(9); } for(Integer c:ch) { str.append(c); } s=str.toString(); cxk.setCard(s); //將生成的數(shù)據(jù)導入銀行卡list列表中 Yinhanglei.getYinhangLei().list.add(cxk.getCard()); //將生成的數(shù)據(jù)導入銀行卡Map列表中 Yinhanglei.getYinhangLei().map.put(cxk.getCard(), cxk); System.out.println("您的新卡號為:"+cxk.getCard()); System.out.println("開戶成功,謝謝使用"); }catch (Exception e) { System.out.println("輸入有誤"); } } }
2,儲蓄卡類
package com.bank.abc; import java.util.Scanner; import com.bank.unionpay.Yinhang; import com.bank.unionpay.Yinhangka; public class Cuxuka implements Yinhangka { //儲蓄卡屬性 private Yinhang yinhang; private String name; private String shenfen; private String card; private String password; private double balance; //生成toString (); @Override public String toString() { return "姓名=" + name + "\t\n"+ "身份證=" + shenfen + "\t\n"+"卡號=" +card + "\t\n"+" 賬戶金額=" + balance ; } //對屬性進行get set設置 public Yinhang getYinhang() { return yinhang=Yinhang.ABC; } 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 getCard() { return card; } public void setCard(String card) { this.card = card; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } //存款方法 @Override public void cun() { Cuxuka cu1=new Cuxuka(); cu1.chaxun(); Scanner sc2=new Scanner(System.in); System.out.println("請輸入你要存入的金額:"); double cun=sc2.nextDouble(); // 實現(xiàn)存款方法 if(cun<0) { System.out.println("你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用"); } else { this.balance+=cun; Yinhanglei.getYinhangLei().map.get(cu1.card).setBalance(balance); System.out.println("存款成功,剩余金額"+Yinhanglei.getYinhangLei().map.get(cu1.card).getBalance()); } } //查詢方法 public void chaxun(){ while(true){ try{ Scanner sc=new Scanner(System.in); System.out.println("請輸入你要查詢的卡號:"); String s=sc.nextLine(); //遍歷Yinhanglei 的Map集合 for(String temp:Yinhanglei.getYinhangLei().map.keySet()) { if(s.equals(temp)) { this.card=s; } } if(s.equals(card)) //驗證卡號 { int i=0; System.out.println("請輸入你的密碼:"); while(true){ Scanner sc1=new Scanner(System.in); String st1=sc1.nextLine(); if(st1.equals(Yinhanglei.getYinhangLei().map.get(s).getPassword())) { System.out.println("你查詢的賬號信息為:"); System.out.println(); System.out.println("******************************"); System.out.println(); System.out.println("姓名 身份證號 卡號 金額"); System.out.println(); System.out.println(Yinhanglei.getYinhangLei().map.get(s)); break; } else { i++; if(i==3) { System.out.println("密碼輸入錯誤超過3次"); break; } else { System.out.println("密碼輸入有誤"); } } } } else { System.out.println("卡號輸入有誤請確認"); } }catch (Exception e) { System.out.println("輸入有誤"); } break; } } //取款方法運算 @Override public void qu() { Cuxuka cu=new Cuxuka(); cu.chaxun(); Scanner sc1=new Scanner(System.in); System.out.println("請輸入你要取款的金額:"); double qu=sc1.nextDouble(); // 實現(xiàn)取款方法 if(qu<balance) { this.balance-=qu; Yinhanglei.getYinhangLei().map.get(cu.card).setBalance(balance); System.out.println("取款成功,剩余金額:"+ Yinhanglei.getYinhangLei().map.get(cu.card).getBalance()); } else if(qu<0) { System.out.println("你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用");; } else { System.out.println("余額不足"); } } @Override public void getyu() { // 余額計算 Cuxuka cu=new Cuxuka(); System.out.println("剩余金額"+cu.getBalance()); } }
3,單例模式銀行類
package com.bank.abc; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.bank.unionpay.Yinhang; public class Yinhanglei { //銀行類屬性 private Yinhang yinhang=Yinhang.ABC; private String name; public List<String> list=new ArrayList<>(); public Map<String, Cuxuka> map=new HashMap<>(); //私有化構造方法 private Yinhanglei() { super(); } private static Yinhanglei bank=new Yinhanglei(); public static Yinhanglei getYinhangLei() { return bank; } }
4,信用卡類
package com.bank.abc; public class Xinyongka extends Cuxuka { //構造自己的屬性 private double touzhi; public double getTouzhi() { return touzhi; } public void setTouzhi(double touzhi) { this.touzhi = touzhi; } //重寫取款方法 public void qu(double qu) { // 實現(xiàn)取款方法 if((touzhi+getBalance())>=qu) { System.out.println("透支金額"+(qu-getBalance()));; } else { System.out.println("無法取款超過最大透支額度");; } } }
包三:com.bank.test
1,測試類
package com.bank.test; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import com.bank.abc.ATM2; import com.bank.abc.Cuxuka; import com.bank.unionpay.ATM; import com.bank.unionpay.Zujiemian; public class Test1 { public static void main(String[] args) { //主界面的制作 Cuxuka cxk=new Cuxuka(); //實例化主界面 Zujiemian zjm=new Zujiemian(); //拋出異常 try{ //創(chuàng)建死循環(huán) for(int i=0;i>=0;i++) { zjm.zhujiemian(); Scanner sc=new Scanner(System.in); int in=sc.nextInt(); //判斷輸入數(shù)字是否符合界面數(shù)字 if(in==0||in==1||in==2||in==3||in==4) { //開戶功能 if(in==0) { ATM2 atm2=new ATM2(); atm2.kaihu(); System.out.println("****************************"); System.out.println("你選擇的為開戶功能"); System.out.println(); continue; } //查詢功能 if(in==1) { System.out.println("****************************"); System.out.println("你選擇的為查詢功能"); cxk.chaxun(); continue; } //存款功能 if(in==2) { System.out.println("****************************"); System.out.println("你選擇的為存款功能"); cxk.cun(); continue; } //取款功能 if(in==3) { System.out.println("****************************"); System.out.println("你選擇的為取款功能"); cxk.qu(); continue; } //退出功能 if(in==4) { System.out.println("謝謝使用!"); break; } } //不符合菜單內容打印 else { System.out.println("你選擇的菜單不存在!"); } } //異常拋出打印 }catch (Exception e) { System.out.println("輸入有誤"); } } }
結果:
以上所述是小編給大家介紹的Java 模擬銀行自助終端系統(tǒng),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
解決SpringMvc中普通類注入Service為null的問題
這篇文章主要介紹了解決SpringMvc中普通類注入Service為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Springboot基于BCrypt非對稱加密字符串的實現(xiàn)
本文主要介紹了Springboot基于BCrypt非對稱加密字符串的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04Spring Boot 簡單使用EhCache緩存框架的方法
本篇文章主要介紹了Spring Boot 簡單使用EhCache緩存框架的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07SpringBoot整合Security安全框架實現(xiàn)控制權限
本文主要介紹了SpringBoot整合Security安全框架實現(xiàn)控制權限,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01