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类要进行操作它。
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; } }
package newBank; import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Set; //数据类是文件和ATM机之间操作用户信息的桥梁 public class Data { //Map储存数据库里所有用户的全部信息 MapuserData = 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 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(); } } } } }
package newBank; //银行类 public class Bank { //银行有ATM机供给用户使用 private ATM atm = new ATM(); //欢迎用户使用 public void welcome(User user){ System.out.println("欢迎用户来我行使用ATM机"); user.useATM(atm); } }
package newBank; //用户类 public class User { //用户使用ATM机办理业务 public void useATM(ATM atm){ atm.show(); } }
//java文件当数据库 李四*123*1000.0 张三*456*10000.0 王五*789*100000.0
package newBank; //测试类 public class Demo { public static void main(String[] args){ //创建一个银行 Bank bank = new Bank(); //创建一个用户 User user = new User(); //银行欢迎用户 bank.welcome(user); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。