一. 本系統(tǒng)模擬銀行用戶使用ATM機(jī)開戶、查詢、存款、取款功能,要求使用java語言編程實(shí)現(xiàn)。
說明:
1. 對于數(shù)據(jù)輸入異常,可使用java異常處理機(jī)制進(jìn)行處理。
2. 評分將以功能實(shí)現(xiàn)與代碼規(guī)范性相結(jié)合的方式進(jìn)行考核。
3. 如果對項(xiàng)目需求有疑問,可以隨時(shí)以QQ留言方式聯(lián)系我進(jìn)行咨詢。
4. 國慶放假期間,每天都有老師在公司值班,10月4日是我在公司值班,10月7日正常上班,歡迎大家到公司來做項(xiàng)目。
二. 項(xiàng)目功能要求:
項(xiàng)目開始運(yùn)行顯示主菜單為:
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
此時(shí),用戶可以通過鍵盤輸入選擇自己要實(shí)現(xiàn)的功能,如果輸入不是0,1,2,3,4,則系統(tǒng)提示:
你選擇的菜單不存在!
請重新選擇:
要求用戶重新輸入數(shù)據(jù)進(jìn)行菜單選擇!
當(dāng)用戶輸入0時(shí),則進(jìn)入查詢功能:系統(tǒng)提示:
****************************
你選擇的為開戶功能
請輸入你的姓名:
此時(shí)用戶需要輸入姓名,輸入完畢后系統(tǒng)提示:
請輸入你的身份證號(hào):
此時(shí)用戶需要輸入18位身份證號(hào),輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入,直到驗(yàn)證通過后系統(tǒng)提示:
請輸入你的密碼:
此時(shí)用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入,驗(yàn)證通過后系統(tǒng)提示:
開戶成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
當(dāng)用戶輸入1時(shí),則進(jìn)入查詢功能:系統(tǒng)提示:
****************************
你選擇的為查詢功能
請輸入你要查詢的卡號(hào):
此時(shí)用戶需要輸入查詢的卡號(hào),系統(tǒng)對卡號(hào)進(jìn)行檢測,如果卡號(hào)不存在,則提示: 你輸入的卡號(hào)不存在,請重新輸入:
請輸入你要查詢的卡號(hào):
要求重新輸入卡號(hào),當(dāng)用戶輸入正確卡號(hào)后,則提示:
請輸入你的密碼:
此時(shí)用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入(最多3次),驗(yàn)證通過后系統(tǒng)將顯示當(dāng)前用戶賬號(hào)信息并進(jìn)入主菜單:
你查詢的賬號(hào)信息為:
******************************
姓名 身份證號(hào) 卡號(hào) 金額
張三豐 420106198410112062 111111 12800.0
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
當(dāng)用戶輸入2時(shí),則進(jìn)入存款功能:系統(tǒng)提示:
****************************
你選擇的為存款功能
請輸入你要存款的卡號(hào):
此時(shí)用戶需要輸入存款的卡號(hào),系統(tǒng)對卡號(hào)進(jìn)行檢測,如果卡號(hào)不存在,則提示:
你輸入的卡號(hào)不存在,請重新輸入:
請輸入你要存款的卡號(hào):
要求重新輸入卡號(hào),當(dāng)用戶輸入正確卡號(hào)后,則提示:
請輸入你的密碼:
此時(shí)用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入(最多3次),驗(yàn)證通過后系統(tǒng)將顯示當(dāng)前用戶賬號(hào)信息并進(jìn)入主菜單:
你要存款的賬號(hào)信息為:
******************************
姓名 身份證號(hào) 卡號(hào) 金額
張三豐 420106198410112062 111111 12800.0
請輸入你要存入的金額:
此時(shí)要求用戶輸入存款金額,系統(tǒng)對金額進(jìn)行判斷,如果輸入的數(shù)據(jù)小于等于0,則提示:
你輸入的數(shù)據(jù)無效,系統(tǒng)將自動(dòng)退出!謝謝使用
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
如果用戶輸入數(shù)據(jù)合法,系統(tǒng)提示存款成功,并回到主菜單:
存款成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
數(shù)據(jù)將存入用戶賬號(hào),如果用戶再次進(jìn)行數(shù)據(jù)查詢,則能看到已經(jīng)改變后的賬戶金額。 (說明:本系統(tǒng)使用文件進(jìn)行數(shù)據(jù)存儲(chǔ),因此如果用戶重新啟動(dòng)程序,數(shù)據(jù)將從文件中讀取重新初始化到內(nèi)存!此功能選做,可參考對象的序列化和反序列化或JSON)
當(dāng)用戶輸入3時(shí),則進(jìn)入取款功能:系統(tǒng)提示:
****************************
你選擇的為取款功能 請輸入你要取款的卡號(hào):
此時(shí)用戶需要輸入取款的卡號(hào),系統(tǒng)對卡號(hào)進(jìn)行檢測,如果卡號(hào)不存在,則提示:
你輸入的卡號(hào)不存在,請重新輸入:
請輸入你要取款的卡號(hào):
要求重新輸入卡號(hào),當(dāng)用戶輸入正確卡號(hào)后,則提示:
請輸入你的密碼:
此時(shí)用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入(最多3次),驗(yàn)證通過后系統(tǒng)將顯示當(dāng)前用戶賬號(hào)信息并進(jìn)入主菜單:
你要取款的賬號(hào)信息為:
******************************
姓名 身份證號(hào) 卡號(hào) 金額
張三豐 420106198410112062 111111 12800.0
請輸入你要取款的金額:
此時(shí)要求用戶輸入取款金額,系統(tǒng)對金額進(jìn)行判斷,如果輸入的數(shù)據(jù)小于0或大于賬號(hào)總金額,則提示:
你輸入的數(shù)據(jù)無效,系統(tǒng)將自動(dòng)退出!謝謝使用
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
如果用戶輸入數(shù)據(jù)合法,系統(tǒng)提示取款成功,并回到主菜單:
取款成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
數(shù)據(jù)將從用戶賬號(hào)扣出,如果用戶再次進(jìn)行數(shù)據(jù)查詢,則能看到已經(jīng)改變后的賬戶金額。
當(dāng)用戶輸入4時(shí),系統(tǒng)將退出。
三.設(shè)計(jì)要求
(一)包一:com.bank.unionpay 表示銀聯(lián),在該包下添加:
表示銀行卡的接口,包含查詢余額,存款,取款等抽象方法。
表示ATM機(jī)的抽象類,使用銀行卡類型的對象作為屬性或參數(shù),實(shí)現(xiàn)查詢余額,存款,取款等實(shí)例方法,添加開戶為抽象方法。
表示四大銀行的枚舉類型:包含ABC,ICBC,CCB,BOC;分別代表農(nóng)行,工行,建行,中行。
(二)包二:com.bank.abc 表示農(nóng)行,在該包下添加:
以單例模式定義銀行類,包含屬性:銀行類型(枚舉類型,常量=ABC),銀行名稱(String),銀行卡列表(集合)等。
定義銀行卡的實(shí)現(xiàn)類-儲(chǔ)蓄卡,包含屬性:銀行類型(枚舉類型=ABC),姓名,身份證號(hào),卡號(hào),密碼,余額;實(shí)現(xiàn)查詢余額,存款,取款等方法。
定義ATM機(jī)的子類,包含屬性:銀行類型(枚舉類型,常量=ABC),實(shí)現(xiàn)開戶方法,其中:只能開辦儲(chǔ)蓄卡,卡號(hào)為6位隨機(jī)數(shù)字,自動(dòng)產(chǎn)生。新開戶的銀行卡添加到銀行的銀行卡列表中。
定義儲(chǔ)蓄卡的子類-信用卡,增加屬性:透支額度,重寫取款方法,控制最大取款金額不能大于余額+透支額度的和。
(三)包三:com.bank.test 表示測試,在該包下添加帶main方法的測試類,實(shí)現(xiàn)項(xiàng)目要求的模擬ATM機(jī)的功能。
以下功能選做:
以單態(tài)模式實(shí)現(xiàn)工商銀行,在測試類中默認(rèn)添加多張銀行卡,在農(nóng)行的ATM機(jī)上實(shí)現(xiàn)跨行查詢和存取款功能。
包一:com.bank.unionpay
1,銀行卡抽象類
1
2
3
4
5
6
|
package com.bank.unionpay; public interface Yinhangka { public void cun(); public void qu(); public void getyu(); } |
2,枚舉銀行類型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.bank.unionpay; public enum Yinhang { ABC( "農(nóng)行" ),ICBC( "工商" ),CCB( "建行" ),BOC( "中行" ); private final String yinhang; //私有化構(gòu)造方法 private Yinhang(String yinhang) { this .yinhang=yinhang; } public String getname() { return this .yinhang; } } |
3,ATM類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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,主界面類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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開戶類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
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( "請輸入你的身份證號(hào):" ); 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( "輸入的身份證號(hào)不是18位身份號(hào)" ); } } //設(shè)置賬戶密碼 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ù)儲(chǔ)蓄卡號(hào) 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ù)導(dǎo)入銀行卡list列表中 Yinhanglei.getYinhangLei().list.add(cxk.getCard()); //將生成的數(shù)據(jù)導(dǎo)入銀行卡Map列表中 Yinhanglei.getYinhangLei().map.put(cxk.getCard(), cxk); System.out.println( "您的新卡號(hào)為:" +cxk.getCard()); System.out.println( "開戶成功,謝謝使用" ); } catch (Exception e) { System.out.println( "輸入有誤" ); } } } |
2,儲(chǔ)蓄卡類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
package com.bank.abc; import java.util.Scanner; import com.bank.unionpay.Yinhang; import com.bank.unionpay.Yinhangka; public class Cuxuka implements Yinhangka { //儲(chǔ)蓄卡屬性 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" + "卡號(hào)=" +card + "\t\n" + " 賬戶金額=" + balance ; } //對屬性進(jìn)行g(shù)et set設(shè)置 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(); // 實(shí)現(xiàn)存款方法 if (cun< 0 ) { System.out.println( "你輸入的數(shù)據(jù)無效,系統(tǒng)將自動(dò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( "請輸入你要查詢的卡號(hào):" ); String s=sc.nextLine(); //遍歷Yinhanglei 的Map集合 for (String temp:Yinhanglei.getYinhangLei().map.keySet()) { if (s.equals(temp)) { this .card=s; } } if (s.equals(card)) //驗(yàn)證卡號(hào) { 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( "你查詢的賬號(hào)信息為:" ); System.out.println(); System.out.println( "******************************" ); System.out.println(); System.out.println( "姓名 身份證號(hào) 卡號(hào) 金額" ); System.out.println(); System.out.println(Yinhanglei.getYinhangLei().map.get(s)); break ; } else { i++; if (i== 3 ) { System.out.println( "密碼輸入錯(cuò)誤超過3次" ); break ; } else { System.out.println( "密碼輸入有誤" ); } } } } else { System.out.println( "卡號(hào)輸入有誤請確認(rèn)" ); } } catch (Exception e) { System.out.println( "輸入有誤" ); } break ; } } //取款方法運(yùn)算 @Override public void qu() { Cuxuka cu= new Cuxuka(); cu.chaxun(); Scanner sc1= new Scanner(System.in); System.out.println( "請輸入你要取款的金額:" ); double qu=sc1.nextDouble(); // 實(shí)現(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)將自動(dòng)退出!謝謝使用" );; } else { System.out.println( "余額不足" ); } } @Override public void getyu() { // 余額計(jì)算 Cuxuka cu= new Cuxuka(); System.out.println( "剩余金額" +cu.getBalance()); } } |
3,單例模式銀行類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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<>(); //私有化構(gòu)造方法 private Yinhanglei() { super (); } private static Yinhanglei bank= new Yinhanglei(); public static Yinhanglei getYinhangLei() { return bank; } } |
4,信用卡類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.bank.abc; public class Xinyongka extends Cuxuka { //構(gòu)造自己的屬性 private double touzhi; public double getTouzhi() { return touzhi; } public void setTouzhi( double touzhi) { this .touzhi = touzhi; } //重寫取款方法 public void qu( double qu) { // 實(shí)現(xiàn)取款方法 if ((touzhi+getBalance())>=qu) { System.out.println( "透支金額" +(qu-getBalance()));; } else { System.out.println( "無法取款超過最大透支額度" );; } } } |
包三:com.bank.test
1,測試類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
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(); //實(shí)例化主界面 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 ; } } //不符合菜單內(nèi)容打印 else { System.out.println( "你選擇的菜單不存在!" ); } } //異常拋出打印 } catch (Exception e) { System.out.println( "輸入有誤" ); } } } |
結(jié)果:
以上所述是小編給大家介紹的Java 模擬銀行自助終端系統(tǒng),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!
原文鏈接:http://www.cnblogs.com/tfl-511/p/5948357.html