Java语言开发之用java实现一个ATM机系统
小职 2021-01-04 来源 :https://blog.csdn.net/weixin_46085748/article/deta 阅读 606 评论 0

摘要:本文主要向大家介绍了Java语言开发之用Java实现一个ATM机系统,通过具体的内容向大家展现,希望对大家学习Java语言有所帮助。

本文主要向大家介绍了Java语言开发之用Java实现一个ATM机系统,通过具体的内容向大家展现,希望对大家学习Java语言有所帮助。

Java语言开发之用java实现一个ATM机系统


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


    }

}



关注“职坐标在线”(Zhizuobiao_Online)公众号,免费获取学习视频资料、技术就业咨询

Java语言开发之用java实现一个ATM机系统

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程