java实现简单的ATM项目

本文实例为大家分享了java实现简单的ATM项目的具体代码,供大家参考,具体内容如下

首先要了解的是,这个ATM项目本身是一个轻量级的项目,只为了完成一些ATM具备的一些方法,并非是真正完成一个ATM的全部功能和需求

那么在这个轻量级的ATM项目中,我将完成添加储蓄账号,添加信用账户,提款,取款等基本功能。

适合新手查看,需要掌握java的继承,多态,封装等基本技术能力
那么,首先创建如下的对象类:Account(账户类),Bank(银行类),CreditAccount(信用账户),SavingAccount(储蓄账户类);

大家首先应该搞清楚,这些类文件中之间的关系,每个类之间需要用到什么样的方法;

那么我们先填写Account类

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
package com.atm.entity;
  
/**
 * 银行账户类
 */
public abstract class Account {
 /**
 * 账户帐号
 */
 private String accountId;
 /**
 * 账户姓名
 */
 private String accountName;
 /**
 * 账户密码
 */
 private String accountPwd;
 /**
 * 账户余额
 */
 private double accountBalance;
 /**
 * 账户身份证号
 */
 private String accountPersonId;
 /**
 * 账户邮箱
 */
 private String accountEmail;
 /**
 * 账户联系电话
 */
 private long accountTelno;
  
 public Account() {
 }
  
 public Account(String accountName, String accountPwd, String accountPersonId, long accountTelno,
 String accountEmail) {
 this.accountName = accountName;
 this.accountPwd = accountPwd;
 this.accountPersonId = accountPersonId;
 this.accountTelno = accountTelno;
 this.accountEmail = accountEmail;
  
 }
  
 public String getAccountId() {
 return accountId;
 }
  
 public void setAccountId(String accountId) {
 this.accountId = accountId;
 }
  
 public String getAccountName() {
 return accountName;
 }
  
 public void setAccountName(String accountName) {
 this.accountName = accountName;
 }
  
 public String getAccountPwd() {
 return accountPwd;
 }
  
 public void setAccountPwd(String accountPwd) {
 this.accountPwd = accountPwd;
 }
  
 public double getAccountBalance() {
 return accountBalance;
 }
  
 public void setAccountBalance(double accountBalance) {
 this.accountBalance = accountBalance;
 }
  
 public String getAccountPersonId() {
 return accountPersonId;
 }
  
 public void setAccountPersonId(String accountPersonId) {
 this.accountPersonId = accountPersonId;
 }
  
 public String getAccountEmail() {
 return accountEmail;
 }
  
 public void setAccountEmail(String accountEmail) {
 this.accountEmail = accountEmail;
 }
  
 public long getAccountTelno() {
 return accountTelno;
 }
  
 public void setAccountTelno(long accountTelno) {
 this.accountTelno = accountTelno;
 }
  
 /**
 * 存款
 * 
 * @param money
 *   存款金额
 * @return 返回账户余额
 */
 public double depoist(double money) {// money 形式参数
 if (money > 0)
 this.accountBalance += money;
 return this.accountBalance;
 }
  
 /**
 * 取款
 * 
 * @param money
 *   取款金额
 * @return 返回账户余额
 */
 public abstract double withdraw(double money);
  
 /**
 * 转账
 * 
 * @param anotherAccount
 *   转账的对方账户
 * @param money
 *   转账金额
 * @return 返回当前账户的余额
 */
 public double tranferAccount(Account anotherAccount, double money) {// 形参
 anotherAccount.accountBalance += money;
 this.accountBalance -= money;
  
 return this.accountBalance;
 }
  
}
之后填写信用账户类CreditAccount;我们应该明白,他是继承Account类的,但是,他又需要拥有自身独立的属性,我们可以添加一个最高透支额度的属性
这样来实现代码

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
/**
 * 信用账户
 * 
 *
 */
public class CreditAccount extends Account {
 //成员变量
 private double maxOverdraw;//最高透支额度
  
 //构造函数
 public CreditAccount(String accountName,String accountPwd,String accountPersonId,long accountTelno,String accountEmail,double maxOverdraw){
 super( accountName, accountPwd, accountPersonId, accountTelno, accountEmail);
 this.maxOverdraw = maxOverdraw;
 }
  
  
 //set,get
 public void setMaxOverdraw(double maxOverdraw ){
 this.maxOverdraw = maxOverdraw;
 }
  
 public double getMaxOverdraw(){
 return this.maxOverdraw;
 }
  
  
 @Override
 public double withdraw(double money) {
 // TODO Auto-generated method stub
 return 0;
 }
  
  
  
}
同理  填写储蓄账户(SavingAccount)类文件

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.atm.entity;
/**
 * 储蓄账户
 * 
 *
 */
public class SavingAccount extends Account {
  
 public SavingAccount(String accountName,String accountPwd,String accountPersonId,long accountTelno,String accountEmail){
 super( accountName, accountPwd, accountPersonId, accountTelno, accountEmail);
 }
  
 @Override
 public double withdraw(double money) {
 // TODO Auto-generated method stub
 if(money <= getAccountBalance()){
  
 }
  
 else
 System.out.println("账户余额不足");
 return getAccountBalance();
  
 }
  
  
}
最重要的是填写Bank类的内容,在这个类中,我们要完成注册,产生银行账户,统计所有信用账户的最高透支额度的总和,统计所有账户的总余额, 查询出所有信用账户中透支额度最高的账户, 查询出所有储蓄账户中余额最高的账户等功能
我们这样填写      

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
package com.atm.entity;
  
import java.text.SimpleDateFormat;
import java.util.Date;
  
/**
 * 银行类
 * 
 * @author qianghj
 * 
 *   银行开户 ----> 银行账户 Account account = bank.开户(...)
 *
 */
public class Bank {
 public Account[] accArray = new Account[2000];
  
 public int count = 0;// 表示银行账户的个数
  
 /**
 * 银行账户开户
 * 
 * @param accName
 *   用户名称
 * @param accPwd
 *   用户密码
 * @param accPersonId
 *   用户身份证
 * @param accTelno
 *   用户手机号码
 * @param accEmail
 *   用户邮箱
 * @param accountType
 *   账户类型 0: 储蓄账户 1 : 信用账户
 * @param maxOverdraw
 *   信用账户的最高透支额度
 * @return 返回有效的银行账户
 */
 public Account registAccount(String accName, String accPwd, String accPersonId, long accTelno, String accEmail,
 int accountType, double maxOverdraw) {
 Account account = null;
 if (accountType == 0)
 account = new SavingAccount(accName, accPwd, accPersonId, accTelno, accEmail);
 else
 account = new CreditAccount(accName, accPwd, accPersonId, accTelno, accEmail, maxOverdraw);
  
 account.setAccountId(generateNextAccountId());
 accArray[count++] = account;
 return account;
 }
 /**
 * 产生银行账户帐号
 * 
 * @return 返回下一个账户的帐号 1,2,3,,4
 */
 public String generateNextAccountId() {
  
 return "62223421" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
  
 }
  
 // 统计所有信用账户的最高透支额度的总和 (1050 ) 2000 , 1050
 public double statisticsCreditAccountMaxoverdrawSum() {
 double sum = 0;
 for (int i = 0; i < count; i++) {
 // 判断账户 是不是 CreditAccount类型
 if (accArray[i] instanceof CreditAccount) {
 CreditAccount creditAcc = (CreditAccount) accArray[i];
 sum += creditAcc.getMaxOverdraw();
 }
 }
  
 return sum;
 }
  
 // 统计所有账户的总余额
 public double aggregateAamount() {
 double sum = 0;
 for (int i = 0; i < count; i++) {
 if (accArray[i] instanceof SavingAccount) {
 SavingAccount savingAccount = (SavingAccount) accArray[i];
 sum += savingAccount.getAccountBalance();
  
 }
 }
 return sum;
  
 }
  
 // 查询出所有信用账户中透支额度最高的账户
 public double maxLimit() {
  
 double tem = 0;
 for (int i = 0; i < count; i++) {
 if (accArray[i] instanceof CreditAccount) {
 CreditAccount creditAccount = (CreditAccount) accArray[i];
  
 if (creditAccount.getMaxOverdraw() > tem) {
  tem = creditAccount.getMaxOverdraw();
 }
  
 }
 }
 return tem;
  
 }
  
 // 查询出所有储蓄账户中余额最高的账户
 public double maxBalance() {
  
 double tem = 0;
 for (int i = 0; i < count; i++) {
 if (accArray[i] instanceof SavingAccount) {
 SavingAccount savingAccount = (SavingAccount) accArray[i];
  
 if (savingAccount.getAccountBalance() > tem) {
  tem = savingAccount.getAccountBalance();
 }
  
 }
 }
 return tem;
  
 }
  
}
最后测试类
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
package test;
  
import org.junit.Test;
  
import com.atm.entity.Account;
import com.atm.entity.Bank;
import com.atm.entity.CreditAccount;
  
public class TestAccount {
  
 @Test
 public void testRegist() {
 Bank bank = new Bank();
  
 for (int i = 0; i < 1000; i++) {
 // 0: 储蓄账户 1 : 信用账户
 Account acc = bank.registAccount("tom" + i, "abc123", "2729382932", 183923302L, "tom" + i + "@163.com",
  i % 2, (i % 2 == 0) ? 0 : 3000);
 if (i % 2 != 0) {
 CreditAccount creditAcc = (CreditAccount) acc;
 System.out.println("所有信用账户的名字:" + creditAcc.getAccountName() + "和透支额度:" + creditAcc.getMaxOverdraw());
 }
  
 }
  
 // 1000个银行账户开户,500是信用账户,最高透支额度随机数赋值,再测试
 // double sum = bank.统计所有信用账户的最高透支额度的总和 ();
 double sum = bank.statisticsCreditAccountMaxoverdrawSum();
 System.out.println("所有信用账户的最高透支额度的总和 :" + sum);
 double sum1 = bank.aggregateAamount();
 System.out.println("总余额为" + sum1);
 }
  
}

测试类的内容不多写,大家有兴趣可以自行测试。这样,我们就完成了一个比较简单的ATM项目。希望对新学者有所帮助。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页