文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java实现ATM机系统(2.0版)

2024-04-02 19:55

关注

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储存数据库里所有用户的全部信息
 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();
    }
   }
  }
 }
}

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);

 }
}

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯