java实现ATM机系统(2.0版)

时间:2022-08-30 13:03:23

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