服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java简单实现银行ATM系统

Java简单实现银行ATM系统

2022-12-27 20:20息壤爱学习 Java教程

这篇文章主要为大家详细介绍了Java简单实现银行ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现银行ATM系统的具体代码,供大家参考,具体内容如下

实现步骤:

定义账户类,用于后期创建账户对象封装用户的账户信息。

账户类中的信息至少需要包含(卡号、姓名、密码、余额、取现额度)

需要准备一个ArrayList的集合,用于存储系统用户的账户对象。

定义一个系统启动类ATMSystem需要展示欢迎页包含2个功能:开户功能、登录账户。

账户类 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
package test;
/*账户类*/
public class Account {
    private String cardId; //卡号
    private String userName; //客户名字
    private String password; //密码
    private double money; //余额
    private double quoteMoney; //当次限额
    public Account(){}
    public Account(String cardId,String userName,String password,double quoteMoney){
        this.cardId = cardId;
        this.userName =userName;
        this.password = password;
        this.quoteMoney = quoteMoney;
    }
 
    public String getCardId() {
        return cardId;
    }
 
    public void setCardId(String cardId) {
        this.cardId = cardId;
    }
 
    public double getMoney() {
        return money;
    }
 
    public void setMoney(double money) {
        this.money = money;
    }
 
    public double getQuoteMoney() {
        return quoteMoney;
    }
 
    public void setQuoteMoney(double quoteMoney) {
        this.quoteMoney = quoteMoney;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
}

AtmSystem 类

?
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
package test;
 
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
 
public class AtmSystem {
    public static void main(String[] args) {
        //用数组储存账户对象
        ArrayList<Account> accounts = new ArrayList<>();
        //首页:登录 开户
        showMain(accounts);
    }
    public static void showMain(ArrayList<Account> accounts){
        System.out.println("================欢迎进入首页界面===============");
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入您想要进行的操作:");
            System.out.println("1.登录");
            System.out.println("2.开户");
            System.out.println("您可以输入命令了:");
            int command = sc.nextInt();
            switch (command){
                case 1:
                    //登录
                    login(accounts,sc);
                    break;
                case 2:
                    //开户
                    register(accounts,sc);
                    break;
                default:
                    System.out.println("您的输入有误!");
            }
        }
    }
//            键盘录入姓名、密码、确认密码(需保证两次密码一致)
//
//            生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一)
//
//            创建Account账户类对象用于封装账户信息(姓名、密码、卡号)
//
//            把Account账户类对象存入到集合accounts中去。
    public static void register(ArrayList<Account> accounts,Scanner sc){
        System.out.println("===============用户开户================");
        System.out.println("请输入开户名称:");
        String name = sc.next();
        String password = "";
        while (true){
            System.out.println("请输入开户密码:");
            password = sc.next();
            System.out.println("请再次确认密码:");
            String okPassword = sc.next();
            //判断两次输入密码
            if (okPassword.equals(password)){
                break;
            }else{
                System.out.println("两次密码必须一致");
            }
        }
        System.out.println("请输入当次限额:");
        double quotaMoney = sc.nextDouble();
        String cardId = createCard(accounts);
        //封装账户
        Account account = new Account(cardId,name,password,quotaMoney);
        accounts.add(account);
        System.out.println("恭喜您,开户成功!你的卡号是:"+account.getCardId()+"请您妥善保管!");
    }
    public static String createCard(ArrayList<Account> accounts){
        while (true){
            //生成8位随机号码,且不重复
            String cardId = "";
            Random r = new Random();
            for (int i=0;i<8;i++){
                cardId += r.nextInt(10);
            }
            Account acc = getAccountByCardId(cardId, accounts);
            if (acc == null){
                return cardId;
            }
        }
    }
    public static Account getAccountByCardId(String cardId,ArrayList<Account> accounts){
        for (int i=0;i< accounts.size();i++){
            Account acc = accounts.get(i);
            if (acc.getCardId().equals(cardId)){
                return acc;
            }
        }
        return null;
    }
    //登录
//            让用户键盘录入卡号,根据卡号查询账户对象。
//
//            如果没有找到了账户对象,说明卡号不存在,提示继续输入卡号。
//
//            如果找到了账户对象,说明卡号存在,继续输入密码。
//
//            如果密码不正确,提示继续输入密码
//
//            如果密码正确,提示登陆成功!!
    public static void login(ArrayList<Account> accounts,Scanner sc){
        //判断系统中是否存在账户
        if (accounts.size()==0){
            System.out.println("当前系统查无此账户,请注册!");
            return;
        }
        while (true){
            System.out.println("请输入登录账号:");
            String cardId = sc.next();
            Account acc = getAccountByCardId(cardId,accounts);
            if (acc!=null){
                while (true){
                    //输入密码
                    System.out.println("请输入密码:");
                    String password = sc.next();
                    if (acc.getPassword().equals(password)){
                        System.out.println("恭喜您," + acc.getUserName() + "先生/女士成功登录!" + "您的账户:" + acc.getCardId());
                        //展示操作页面
                        showUserCommand(sc,acc,accounts);
                        return;
                    }else{
                        System.out.println("Sorry,该账户不存在!");
                    }
                }
            }
        }
    }
    private static void showUserCommand(Scanner sc, Account acc , ArrayList<Account> accounts) {
        while (true) {
            System.out.println("==================用户操作界面===================");
            System.out.println("1、查询账户");
            System.out.println("2、存款");
            System.out.println("3、取款");
            System.out.println("4、转账");
            System.out.println("5、修改密码");
            System.out.println("6、退出");
            System.out.println("7、注销账户");
            System.out.println("请您输入操作命令:");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    // 查询账户
                    showAccount(acc);
                    break;
                case 2:
                    // 存款
                    depositMoney(acc, sc);
                    break;
                case 3:
                    // 取款
                    drawMoney(acc,sc);
                    break;
                case 4:
                    // 转账
                    transferMoney(accounts, acc , sc);
                    break;
                case 5:
                    // 修改密码
                    updatePassWord(acc,sc);
                    return; // 结束当前操作的方法
                case 6:
                    // 退出
                    System.out.println("欢迎下次光临!!");
                    return; // 结束当前操作的方法!
                case 7:
                    // 注销账户
                    // 从当前集合中抹掉当前账户对象即可
                    accounts.remove(acc);
                    System.out.println("销户成功了!!");
                    return;// 结束当前操作的方法!
                default:
                    System.out.println("您的命令输入有误~~~");
            }
        }
    }
    private static void showAccount(Account acc) {
        System.out.println("==================当前账户详情===================");
        System.out.println("卡号:" + acc.getCardId());
        System.out.println("姓名:" + acc.getUserName());
        System.out.println("余额:" + acc.getMoney());
        System.out.println("当次限额:" + acc.getQuoteMoney());
    }
//            存款就是拿到当前账户对象。
//
//            然后让用户输入存款的金额。
//
//            调用账户对象的setMoney方法将账户余额修改成存钱后的余额。
//
//            存钱后需要查询一下账户信息,确认是否存钱成功了!
    private static void depositMoney(Account acc, Scanner sc) {
        System.out.println("==================存钱操作===================");
        System.out.println("请您输入存款的金额:");
        double money = sc.nextDouble();
 
        // 直接把金额修改到账户对象的money属性中去
        acc.setMoney(acc.getMoney() + money);
        System.out.println("存款完成!!");
        showAccount(acc);
    }
//            取款需要先判断账户是否有钱。
//
//            有钱则拿到自己账户对象。
//
//            然后让用户输入取款金额
//
//            判断取款金额是否超过了当次限额,以及余额是否足够
//
//            满足要求则调用账户对象的setMoney方法完成金额的修改。
    private static void drawMoney(Account acc, Scanner sc) {
        System.out.println("==================取款操作===================");
        // 1、判断它的账户是否足够100元
        if(acc.getMoney() >= 100){
            while (true) {
                System.out.println("请您输入取款的金额:");
                double money = sc.nextDouble();
                // 2、判断这个金额有没有超过当次限额
                if(money > acc.getQuoteMoney()){
                    System.out.println("您当次取款金额超过每次限额,不要取那么多,每次最多可以取:" + acc.getQuoteMoney());
                }else {
                    // 3、判断当前余额是否足够你取钱
                    if(acc.getMoney() >= money){
                        // 够钱,可以取钱了
                        acc.setMoney(acc.getMoney() - money);
                        System.out.println("恭喜您,取钱" + money + "成功了!当前账户还剩余:" + acc.getMoney());
                        return;// 取钱后干掉取钱方法
                    }else {
                        System.out.println("余额不足啊!");
                    }
                }
            }
        }else {
            System.out.println("您自己的金额没有超过100元,就别取了~~~");
        }
    }
//            转账功能需要判断系统中是否有2个账户对象及以上。
//
//            同时还要判断自己账户是否有钱。
//
//            接下来需要输入对方卡号,判断对方账户是否存在。
//
//            对方账户存在还需要认证对方户主的姓氏。
//
//            满足要求则可以把自己账户对象的金额修改到对方账户对象中去。
    private static void transferMoney(ArrayList<Account> accounts, Account acc, Scanner sc) {
        // 1、判断系统中是否有2个账户及以上
        if(accounts.size() < 2){
            System.out.println("对不起,系统中无其他账户,您不可以转账!");
            return;
        }
 
        // 2、判断自己的账户对象中是否有钱
        if(acc.getMoney() == 0){
            System.out.println("对不起,您自己都没钱,就别转了~~");
            return;
        }
 
        // 3、开始转账逻辑
        while (true) {
            System.out.println("请您输入对方账户的卡号:");
            String cardId = sc.next();
            Account account = getAccountByCardId(cardId , accounts);
            // 判断这个账户对象是否存在,存在说明对方卡号输入正确
            if(account != null){
                // 判断这个账户对象是否是当前登录的账户自己
                if(account.getCardId().equals(acc.getCardId())){
                    // 正在给自己转账
                    System.out.println("您不可以为自己转账!");
                }else {
                    // 确认对方的姓氏
                    String name = "*" + account.getUserName().substring(1);
                    System.out.print("请您确认【" + name + "】的姓氏:");
                    String preName = sc.next(); // 王
                    if(account.getUserName().startsWith(preName)){
                        // 真正开始转账了
                        System.out.println("请您输入转账的金额:");
                        double money = sc.nextDouble();
                        // 判断这个金额是否超过了自己的余额
                        if(money > acc.getMoney() ){
                            System.out.println("对不起,您要转账的金额太多,您最多可以转账多少:" + acc.getMoney());
                        }else {
                            // 真的可以转了
                            acc.setMoney(acc.getMoney() - money);
                            account.setMoney(account.getMoney() + money);
                            System.out.println("恭喜您,转账成功了,已经为" + account.getUserName() +"转账多少:" + money);
                            showAccount(acc);
                            return;
                        }
                    }else {
                        System.out.println("对不起,您认证的信息有误~~~");
                    }
                }
            }else {
                System.out.println("对不起,您输入的转账卡号有问题!");
            }
        }
    }
    private static void updatePassWord(Account acc, Scanner sc) {
        System.out.println("===========修改密码=======================");
        while (true) {
            System.out.println("请您输入正确的密码:");
            String okPassWord = sc.next();
            // 判断密码是否正确
            if(acc.getPassword().equals(okPassWord)){
                while (true) {
                    // 可以输入新密码
                    System.out.println("请您输入新的密码:");
                    String newPassWord = sc.next();
 
                    System.out.println("请您输入确认密码:");
                    String okNewPassWord = sc.next();
 
                    if(newPassWord.equals(okNewPassWord)) {
                        // 修改账户对象的密码为新密码
                        acc.setPassword(newPassWord);
                        return; // 直接结束掉!!
                    }else {
                        System.out.println("您两次输入的密码不一致~~");
                    }
                }
 
            }else {
                System.out.println("当前输入的密码不正确~~~");
            }
        }
 
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_50950116/article/details/123154471

延伸 · 阅读

精彩推荐