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实现ATM机系统(2.0版)的详细内容...