0

0

Java如何实现ATM机操作系统

王林

王林

发布时间:2023-05-14 10:04:12

|

1745人浏览过

|

来源于亿速云

转载

用io流操作txt文件作为数据库模拟实现一个atm业务操作系统---->网上银行,实现登录,查询余额,存款,取款,转账,开户,销户等业务功能

1.用户类----->User:

package atm;

import java.io.Serializable;

public class User implements Serializable{
    
    //建议除了私有属性  无参数有参数构造方法  属性对应的get、set方法
    //建议类实现一个序列化接口 添加一个序列化版本号
    private static final long serialVersionUID = 1L;
    
    //只是为了记录数据库中的一行信息   账号 密码 余额
    private String aName;
    private String aPassword;
    private Float aSalary;
    public User() {}
    public User(String aName,String aPassword,Float aSalary) {
        this.aName = aName;
        this.aPassword = aPassword;
        this.aSalary = aSalary;
    }
    public String getaName() {
        return this.aName;
    }
    public void setaName(String newName) {
        this.aName = newName;
    }
    public String getaPassword() {
        return this.aPassword;
    }
    public void setaPassword(String newPassword) {
        this.aPassword = newPassword;
    }
    public Float getSalary() {
        return this.aSalary;
    }
    public void setSalary(Float newSalary) {
        this.aSalary = newSalary;
    }
}

2.操作IO的类------>FileLoadAndCommit:

package atm;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

//操作文件
public class FileLoadAndCommit {
    
    //文件路径
    private String pathName = null; 
    public FileLoadAndCommit(String pathName) {
        this.pathName = pathName;
    }
    
    //读取文件装入集合
    public HashMap loadFile(){
        //临时的存储空间,将文件中读取的数据存储以便于修改
        HashMap userBox = new HashMap();
        //IO流读取
        FileReader fr = null;
        BufferedReader br = null;
        try {
            fr = new FileReader(new File(pathName));
            br = new BufferedReader(fr);
            String code = br.readLine();//读取一行
            //循环遍历所有行   按"-"拆分一行的数据,作为User存入集合  
            while(code != null) {
                String[] value = code.split("-");
                User user = new User(value[0],value[1],Float.parseFloat(value[2]));
                userBox.put(user.getaName(),user);
                code = br.readLine();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                //如果流管道存在,才关闭
                if(fr != null) {
                    fr.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if(br != null) {
                    br.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return userBox;
    }
    
    //将集合更新入文件
    public void commit(HashMap userBox) {
        //IO流写入
        FileWriter fw = null;
        BufferedWriter bw = null;
        try {
            fw = new FileWriter(new File(pathName));
            bw = new BufferedWriter(fw);
            
            //迭代集合内所有账户名    按账户名找到对应的User对象
            Iterator names = userBox.keySet().iterator();
            while(names.hasNext()) {
                String name = names.next();
                User user = userBox.get(name);
                
                //用StringBuilder拼接字符串
                StringBuilder sBuilder = new StringBuilder();
                sBuilder.append(user.getaName());
                sBuilder.append("-");
                sBuilder.append(user.getaPassword());
                sBuilder.append("-");
                sBuilder.append(user.getSalary());
                bw.write(sBuilder.toString());//将拼好的一行数据写入文件
                bw.flush();//刷新
                bw.newLine();//换行
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //必须先关闭BufferedWriter再关闭FileWrite,否贼会抛异常java.io.IOException: Stream closed
            try {
                if(bw != null) {
                    bw.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if(fw != null) {
                    fw.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

3.负责读写的类----->AtmDao:

package atm;

import java.util.HashMap;

//持久化,负责读写数据,缓存
public class AtmDao {
    private FileLoadAndCommit flac = new FileLoadAndCommit("D:\\test\\ATM\\testATM.txt");
    HashMap userBox = flac.loadFile();
    //获取一个User对象
    public User selectOne(String aName) {
        return userBox.get(aName);
    }
    //更新文件数据
    public void update(User user) {
        userBox.put(user.getaName(),user);
        flac.commit(userBox);
    }
    //删除文件数据
    public void delete(User user) {
        userBox.remove(user.getaName(),user);
        flac.commit(userBox);
    }
}

4.负责业务逻辑的类------>ATMService:

立即学习Java免费学习笔记(深入)”;

package atm;

import java.util.HashMap;

//负责业务逻辑    判断 比较 计算
public class ATMService {
    //登录
    private AtmDao dao = new AtmDao();
    public String login(String aName,String aPassword) {
        User user = dao.selectOne(aName);
        if(user!=null) {
            if(aPassword.equals(user.getaPassword())) {
                return "登录成功"; 
            }
        }
        return "用户名或密码错误";
    }
    //查询余额
    public Float inquiry(String aName) {
        User user = dao.selectOne(aName);
        return user.getSalary();
    }
    //存款
    public void addMoney(String aName,Float addMoney) {
        User user = dao.selectOne(aName);//获取该用户对象
        user.setSalary(user.getSalary()+addMoney);//用User的set方法修改用户金额
        dao.update(user);//更新文件数据
        System.out.println("存款成功\n");
    }
    //取款
    public void getMoney(String aName,Float getMoney) {
        User user  = dao.selectOne(aName);//获取该用户对象
        if(getMoney <= user.getSalary()) {//如果要取出的钱大于余额就不能取了
            user.setSalary(user.getSalary()-getMoney);
            dao.update(user);
            System.out.println("取款成功\n");
        }else {
            System.out.println("对不起,您的余额不足\n");
        }
    }
    //转账
    public void transferMoney(String outName,String inName,Float transferMoney) {
        User outUser = dao.selectOne(outName);//转出用户
        User inUser = dao.selectOne(inName);//转入用户
        if(inUser!=null) {//转入用户存在
            if(outUser!=inUser) {//转出和转入用户不能是同一个用户
                if(transferMoney <= outUser.getSalary()) {//转出金额大于余额就不能转了
                    outUser.setSalary(outUser.getSalary()-transferMoney);//修改转出用户余额
                    inUser.setSalary(inUser.getSalary()+transferMoney);//修改转入用户余额
                    //更新文件数据
                    dao.update(outUser);
                    dao.update(inUser);
                    System.out.println("转账成功\n");
                }else {
                    System.out.println("对不起"+outName+",您的余额不足\n");
                }
            }else {
                System.out.println("对不起,不能给自己转账,您可以试试使用存款业务\n");
            }
        }else {
            System.out.println("对不起,您输入的用户不存在\n");
        }
    }
    //开户
    public User creatUser(String aName,String aPassword,Float aSalary) {
        User user = new User(aName,aPassword,aSalary);
        dao.update(user);//更新文件数据
        System.out.println("用户"+aName+",创建成功");
        return user;
    }
    //销户
    public void deleteUser(String aName) {
        User user = dao.selectOne(aName);//获取名为aName的用户
        if(user != null) {//判断该用户是否在文件数据内存在
            dao.delete(user);
            System.out.println("用户"+aName+",删除成功");
        }else {
            System.out.println("要销毁的账户不存在");
        }
    }
}

5.测试类----->TestMain:

package atm;

import java.util.Scanner;

public class TestMain {
    public static void main(String[] args) {
        ATMService atmService = new ATMService();//获取执行业务的方法
        Scanner input = new Scanner(System.in);
        System.out.println("欢迎进入ATM机系统");
        System.out.println("请选择要操作的业务:\n1.用户登录\n2.开户\n3.按任意键退出");
        String choice = input.next();
        if(choice.equals("1")) {
            System.out.println("请输入账户名");
            String name = input.next();
            System.out.println("请输入密码");
            String password = input.next();
            String afterLogin = atmService.login(name,password);//判断输入的账户名密码是否正确
            if(afterLogin.equals("登录成功")) {//if正确则登录成功
                System.out.println("登录成功!\n");
                //使用while循环反复进行switch执行操作业务
                while(true) {
                    System.out.println("请选择服务项目:");
                    System.out.println("1.查询\n2.存款\n3.取款\n4.转账\n5.销户\n(按q退出系统)");
                    String option = input.next();
                    switch (option) {
                    case "1":
                        //查询
                        Float money = atmService.inquiry(name);
                        System.out.println("尊敬的客户,您的余额为"+money+"元\n");
                        break;
                    case "2":
                        //存款
                        System.out.println("请输入存款金额");
                        Float addMoney = input.nextFloat();
                        atmService.addMoney(name,addMoney);
                        break;
                    case "3":
                        //取款
                        System.out.println("请输入取款金额");
                        Float getMoney = input.nextFloat();
                        atmService.getMoney(name,getMoney);
                        break;
                    case "4":
                        //转账
                        System.out.println("请输入转账用户ID:");
                        String id = input.next();
                        System.out.println("请输入转账金额:");
                        Float transferMoney = input.nextFloat();
                        atmService.transferMoney(name,id,transferMoney);
                        break;
                    case"5":
                        //销户
                        System.out.println("您确定要销毁当前账户吗?账户内所有余额都会消失\nYes/No\n");
                        String decision = input.next();
                        if(decision.equalsIgnoreCase("yes")) {
                            atmService.deleteUser(name);//删除当前user数据
                        }else if(decision.equalsIgnoreCase("no")){
                             break;
                        }
                        break;
                    case "q":
                        System.out.println("已退出ATM机系统,感谢您的使用!!!");
                        System.exit(0);//退出程序
                        break;
                    default:
                        System.out.println("请输入正确的指令\n");
                        break;
                    }
                }
            }else {
                System.out.println(afterLogin);
            }
        }else if(choice.equals("2")){
            //开户
            System.out.println("请设置您的用户名");
            String newUserName = input.next();
            System.out.println("请设置您的密码");
            String newPassword = input.next();
            User newUser = atmService.creatUser(newUserName, newPassword, 0.0F);
            System.out.println("\n初始余额为"+newUser.getSalary()+"元");
        }else {
            System.out.println("已退出ATM机系统,感谢您的使用!!!");
        }
    }
}

部分运行结果:

1.账户登录

Java如何实现ATM机操作系统

HiShop网店代理分销系统
HiShop网店代理分销系统

Hishop.5.2.BETA2版主要更新: [修改] 进一步优化了首页打开速度 [修改] 美化了默认模板 [修改] 优化系统架构,程序标签及SQL查询效率,访问系统页面的速度大大提高 [修改] 采用了HTML模板机制,实现了前台模板可视化编辑,降低模板制作与修改的难度. [修改] 全新更换前后台AJAX技术框架,提升了用户操作体验. 店铺管理 [新增] 整合TQ在线客服 [修改] 后台广告位增加

下载

2.查询

Java如何实现ATM机操作系统

3.存款

Java如何实现ATM机操作系统

4.退出

Java如何实现ATM机操作系统

作为数据库的txt文件:

Java如何实现ATM机操作系统

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

99

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

132

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

15

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.8万人学习

C# 教程
C# 教程

共94课时 | 7.4万人学习

Java 教程
Java 教程

共578课时 | 50.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号