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

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

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

设计思路

设计五个类包括测试类:
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);

    }
}

  • 20
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不不树

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值