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

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

服务器之家 - 编程语言 - Java教程 - java实现ATM机系统(2.0版)

java实现ATM机系统(2.0版)

2021-08-27 10:44点丶错了。。 Java教程

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

java实现银行ATM自助取款机,实现功能:用户登录、余额查询、存钱、取钱、转账、修改密码、退出系统。

用java实现一个ATM机系统(2.0版)

设计思路

设计五个类包括测试类:

1、ATM类也是主要的类,负责实现用户一系列的操作;
2、Data类,作为ATM类的一个属性,主要实现从java文件user中获取用户全部信息,并返回要找的用户,再将修改完之后的用户信息写入文件中。

这个类是ATM机与文件之间的桥梁;

3、Bank类,有ATM机(has-a),欢迎用户来使用ATM机;
4、User类,使用ATM机(use-a);
5、Demo类,测试类,创建一个环境,让类产生关系。

源码

需要注意java文件user的位置,Data类要进行操作它。

?
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
package newBank;
 
import java.util.Scanner;
 
//ATM类
public class ATM {
 //有一个类操作数据的类
 private Data data = new Data();
 //ATM机里的数据
 private String userName;//用户账号且唯一
 private String userPassword;//用户密码
 private double userMoney;//用户账户里的钱
 private double money;//变量,存,取,转账的钱
 private String user;//使用该台ATM机的用户全部信息
 
 //ATM界面
 public void show(){
  System.out.println("欢迎使用ATM机");
  //使用登录方法,输入账号和密码
  int number = login();
  //如果登录成功
  if(number == 4)
   working();//ATM机办理业务
 
 }
 //登录方法
 private int login(){
  int number = 3;//用户输入次数
  while(number > 0) {
   Scanner input = new Scanner(System.in);
   System.out.println("请输入账号:");
   //输入账号
   String inUserName = input.nextLine();
   //输入密码
   System.out.println("请输入密码:");
   String inUserPassword = input.nextLine();
   String x = data.backUser(inUserName);
   //判断账户是否存在
   if(!x.equals("null")){
    user = x;//获取用户所有信息
    String[] str = user.split("\\*");//将用户信息分割
    userName = str[0];//用户名
    userPassword = str[1];//用户密码
    userMoney = Double.parseDouble(str[2]);//用户余额
    //密码正确
    if(userPassword.equals(inUserPassword)){
     System.out.println("登录成功");
     number = 4;//次数变为4
     break;
    }
   }
   number --;//次数减一
   System.out.println("账号或密码输入错误。。。");
   System.out.println("您还有" + number + "次机会");
  }
  return number;//是否登录成功
 }
 
 //功能界面
 private void functionShow(){
  System.out.println("**********************");
  System.out.println("\t欢迎使用ATM");
  System.out.println("1,账户余额查询\n2,存钱\n3,取钱\n4,转账\n5,修改用户密码\n6,退出系统\n");
  System.out.println("**********************");
 }
 
 //用户要进行的操作
 private void working(){
  String index;//业务序号
  do{
   functionShow();//调用功能界面
   System.out.println("请输入要办理的业务序号:");
   Scanner input = new Scanner(System.in);
   index = input.nextLine();
   switch(index){
    case "1":
     look();
     break;
    case "2":
     saveMoney();
     break;
    case "3":
     getMoney();
     break;
    case "4":
     giveMoney();
     break;
    case "5":
     changePassword();
     break;
    case "6":
     System.out.println("欢迎下次光临!");
     user = changeUser(userName,userPassword,userMoney);
     data.saveData(user,true);//用户退出后保存用户信息
     break;
    default:
     System.out.println("您输入有误,请重新输入。。。。");
   }
  }while(!index.equals("6"));
 }
 
 //是否继续某项操作
 private boolean isContinue(){
  System.out.println("继续办理该项业务:请输入Y/y");
  System.out.println("返回上一级:请输入N/n");
  Scanner input = new Scanner(System.in);
  String str = input.nextLine();
  if(str.equalsIgnoreCase("Y"))
   return true;
  else
   return false;
 }
 
 //存钱,取钱,转账共用
 private void howMuch(String str){
  System.out.println("欢迎办理"+ str +"业务。。。。。。");
  System.out.println("请输入金额(只能是整数且是100的倍数,最多为10000):");
  Scanner input = new Scanner(System.in);
  Double money = input.nextDouble();
  if(money%10 != 0) {
   System.out.println("您输入有误!");
   this.money = 0;
  }
  else
   this.money = money;
 }
 
 //查询实现
 private void look(){
  System.out.println("用户余额为:" + userMoney);
  try{
   Thread.sleep(2000);
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 
 //存钱实现
 private void saveMoney(){
  howMuch("存钱");
  if(money != 0) {//如果存的钱正确
   userMoney = userMoney + money;//存上
   System.out.println("已存入");
   look();//显示余额
  }
  if(isContinue())
   saveMoney();
 }
 
 //判断余额是否充足
 private boolean isEnough(){
  if(money <= userMoney){
   userMoney = userMoney - money;
   return true;
  }
  else{
   System.out.println("您的余额不足!");
   return false;
  }
 }
 
 //取钱实现
 private void getMoney(){
  howMuch("取钱");
  //如果取的钱正确且如果转账账户余额够
  if(money != 0 && isEnough()){
   look();
   System.out.println("请收好您的钱");
  }
  if(isContinue())
   getMoney();
 }
 
 //转账实现
 private void giveMoney(){
  //只判断用户账户是否存在
  Scanner input = new Scanner(System.in);
  System.out.println("请输入要转账账号:");
  //输入账号
  String inUserName = input.nextLine();
  String str = data.backUser(inUserName);
  //如果该账户存在
  if(!str.equals("null")) {
   String antherUser = str;//获取被转账账户所有信息
   String[] str1 = antherUser.split("\\*");//分割
   Double x = Double.parseDouble(str1[2]);//获取被转账账户余额
   howMuch("转账");
   //如果转的钱正确且如果转账账户余额够
   if (money != 0 && isEnough()) {
    x = x + money;
    antherUser = changeUser(str1[0], str1[1], x);//改变被转账账户信息
    data.saveData(antherUser,false);//将用户信息传给Data类保存被转账账户信息
    System.out.println("转账成功");
    look();
   }
  }
  else
   System.out.println("被转账账户不存在。。。");
  if(isContinue())
   giveMoney();
 }
 
 //修改密码实现
 private void changePassword(){
  System.out.println("请输入新密码:");
  Scanner input = new Scanner(System.in);
  userPassword = input.nextLine();
  System.out.println("密码修改成功!");
 }
 
 //办完业务后修改用户信息
 private String changeUser(String n,String w,Double d){
  String str = n + "*" + w + "*" + d;
  return str;
 }
}
?
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
package newBank;
 
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
//数据类是文件和ATM机之间操作用户信息的桥梁
public class Data {
 //Map储存数据库里所有用户的全部信息
 Map<String,String> userData = new HashMap();
 //返回用户的信息
 private String user;
 
 //创建数据类加载所有用户信息
 public Data(){
  getUsers();
 }
 
 private void getUsers(){
  String str;
  String[] string;
  File file = new File("src\\newBank\\user");
  FileReader fileReader = null;
  BufferedReader bufferedReader = null;
  try{
   fileReader = new FileReader(file);
   bufferedReader = new BufferedReader(fileReader);
   while((str = bufferedReader.readLine())!=null){
    string = str.split("\\*",2);
    userData.put(string[0],string[1]);
   }
  }catch(Exception e){
   e.printStackTrace();
   if((fileReader!=null)&&(bufferedReader!=null)){
    try {
     bufferedReader.close();
     fileReader.close();
    } catch (IOException e1) {
     e1.printStackTrace();
    }
   }
  }
 }
 
 //告诉用户名,如果找到返回该用户所有信息,没找到返回null
 public String backUser(String userName){
  String str = "null";
  if(userData.containsKey(userName))
   str = userName + "*" + userData.get(userName);
  user = str;
  return user;
 }
 //修改用户数据并储存在userData图里
 public void saveData(String user,boolean aBoolean){
  String[] string = user.split("\\*",2);
  userData.remove(string[0]);
  userData.put(string[0],string[1]);
  if(aBoolean)//判断用户是否操作结束
   changeUser();
 }
 
 //用户操作完,将userData里所有的用户再写入文件里
 private void changeUser(){
  String str,string="";
  Set<String> keys = userData.keySet();
  for(String key : keys){
   str = key + "*" + userData.get(key);
   string = string + str + "\n";
  }
  File file = new File("src\\newBank\\user");
  FileWriter out = null;
  try {
   out = new FileWriter(file);
   out.write(string);
   out.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(out != null){
    try {
     out.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
package newBank;
 
//银行类
public class Bank {
 //银行有ATM机供给用户使用
 private ATM atm = new ATM();
 //欢迎用户使用
 public void welcome(User user){
  System.out.println("欢迎用户来我行使用ATM机");
  user.useATM(atm);
 }
 
}
?
1
2
3
4
5
6
7
8
9
package newBank;
 
//用户类
public class User {
 //用户使用ATM机办理业务
 public void useATM(ATM atm){
  atm.show();
 }
}
?
1
2
3
4
//java文件当数据库
李四*123*1000.0
张三*456*10000.0
王五*789*100000.0
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package newBank;
 
//测试类
public class Demo {
 
 public static void main(String[] args){
  //创建一个银行
  Bank bank = new Bank();
  //创建一个用户
  User user = new User();
  //银行欢迎用户
  bank.welcome(user);
 
 }
}

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

原文链接:https://blog.csdn.net/weixin_46085748/article/details/112095767

延伸 · 阅读

精彩推荐
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7472021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16