一. 本系统模拟银行用户使用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机上实现跨行查询和存取款功能。
包一: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( "农行" ),ICBC( "工商" ),CCB( "建行" ),BOC( "中行" );
private final String yinhang;
//私有化构造方法
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( "银行自助终端系统 " );
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( "请选择你要执行的功能: " );
}
}
|
包二: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( "请输入你的身份证号:" );
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位数密码" );
}
}
//生成6位数储蓄卡号
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);
//将生成的数据导入银行卡list列表中
Yinhanglei.getYinhangLei().list.add(cxk.getCard());
//将生成的数据导入银行卡Map列表中
Yinhanglei.getYinhangLei().map.put(cxk.getCard(), cxk);
System.out.println( "您的新卡号为:" +cxk.getCard());
System.out.println( "开户成功,谢谢使用" );
} catch (Exception e) {
System.out.println( "输入有误" );
}
}
}
|
2,储蓄卡类
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 {
//储蓄卡属性
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();
// 实现存款方法
if (cun< 0 )
{
System.out.println( "你输入的数据无效,系统将自动退出!谢谢使用" );
}
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();
// 实现取款方法
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( "你输入的数据无效,系统将自动退出!谢谢使用" );;
}
else
{
System.out.println( "余额不足" );
}
}
@Override
public void getyu() {
// 余额计算
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<>();
//私有化构造方法
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 {
//构造自己的属性
private double touzhi;
public double getTouzhi() {
return touzhi;
}
public void setTouzhi( double touzhi) {
this .touzhi = touzhi;
}
//重写取款方法
public void qu( double qu) {
// 实现取款方法
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();
//实例化主界面
Zujiemian zjm= new Zujiemian();
//抛出异常
try {
//创建死循环
for ( int i= 0 ;i>= 0 ;i++)
{
zjm.zhujiemian();
Scanner sc= new Scanner(System.in);
int in=sc.nextInt();
//判断输入数字是否符合界面数字
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 模拟银行自助终端系统,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/tfl-511/p/5948357.html