模拟银行自助终端系统
一.?項目功能要求:?
項目開始運行顯示主菜單為:??
銀行自助終端系統?
****************************??
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?表示銀聯,在該包下添加:
(二)包二:com.bank.abc 表示農行,在該包下添加:
(三)包三: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) @Overridepublic 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 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()+"\r\n"); 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()+"\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 @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()+"\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/jingzhenhua/p/5937340.html
總結
以上是生活随笔為你收集整理的模拟银行自助终端系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SFB 项目经验-02-共存迁移-Ly
- 下一篇: windows server如何加强云服