我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java基于对象流实现银行系统

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java基于对象流实现银行系统

Java基于对象流实现银行系统的具体代码,供大家参考,具体内容如下

系统特点:

  • 数据持久化到文件中,系统启动后,加载文件中数据到集合中,相当于做了一个缓存。
  • 文件读写使用的是对象流(ObjectInputStream和ObjectOutputStream),用户是看不懂那些文件的,一定程度上保证了密码和余额的安全性。
  • 采用了MVC分层设计思想,虽然没有C控制层和V视图层,但是有完备的M模型层,数据处理Service,数据读写Dao,数据存储POJO(每一层只负责处理自己的事情,层次内部的改动不会影响其他层次)。
  • 虽然有些细节问题由于时间关系没有处理好,比如没有处理输入类型不匹配的异常,但是绝大多数功能都合理得实现了。

全部代码

pojo:

public class User implements Serializable {
    private static final long serialVersionUID = -7019656536540026883L;
    private String username;//用户名
    private String password;//密码
    private Double balance;//余额

    public User(String username, String password, Double balance) {
        this.username = username;
        this.password = password;
        this.balance = balance;
    }

    public User() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getBalance() {
        return balance;
    }

    public void setBalance(Double balance) {
        this.balance = balance;
    }
    public String toString(){
        StringBuilder builder = new StringBuilder("{");
        builder.append(this.username).append(",").append(this.password).append(",").append(this.balance).append("}");
        return builder.toString();
    }

dao层:

public class ATMDao {
    private String userFilePath = "class="lazy" data-src\\userMsg.txt";//相对路径
    private HashMap<String, User>  userMsg;
    {
        userMsg = this.loadFile();//读取文件信息
    }
    public HashMap<String, User> getUserMsg() {
        return userMsg;
    }
    //查询用户
    public User selectUser(String username){
        return userMsg.get(username);
    }
    //更新用户信息
    public void updateUser(User user){
        this.userMsg.replace(user.getUsername(),user);
        this.updateFile(userMsg);
    }
    //增加用户
    public void addUser(User user){
        this.userMsg.put(user.getUsername(),user);
        this.updateFile(userMsg);
    }
    //删除用户
    public void deleteUser(User user){
        this.userMsg.remove(user.getUsername());
        this.updateFile(userMsg);
    }

    //只在初始化时时调用一次

    private HashMap<String, User> loadFile(){
        File file = new File(userFilePath);
        FileInputStream fis = null;
        ObjectInputStream ois = null;
        HashMap<String, User> box = null;
        try {
            fis = new FileInputStream(file);
            ois = new ObjectInputStream(fis);
            try {
                box = (HashMap<String, User>)ois.readObject();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(fis!=null)
                    fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(ois!=null)
                    ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return box;
    }
    private void updateFile(HashMap<String,User> userMsg){
        File file = new File(userFilePath);
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try {
            fos = new FileOutputStream(file);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(userMsg);
            oos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(fos!=null)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(oos!=null)
                    oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

service层:

public class ATMService {
    ATMDao dao = new ATMDao();
    public boolean login(String username,String password){
        User user = dao.selectUser(username);
        if (user!=null && user.getPassword().equals(password))
            return true;
        else
            return false;
    }
    //查询余额
    public Double queryBalance(String name){
        User user = dao.selectUser(name);
        return user.getBalance();
    }
    //存款
    public void deposit(String name,Double account){
        User user = dao.selectUser(name);
        user.setBalance(user.getBalance()+account);
        dao.updateUser(user);
    }
    //取款
    public void withdrawal(String name,Double account){
        User user = dao.selectUser(name);
        if (user.getBalance()>=account) {
            user.setBalance(user.getBalance() - account);
            dao.updateUser(user);
        }else {
            System.err.println("对不起,"+user.getUsername()+",您的余额不足");
        }
    }
    //转账
    public void transfer(String oldName,String newName,Double account){
        User oldUser = dao.selectUser(oldName);
        User newUser = dao.selectUser(newName);
        if (newUser!=null){
            if (oldUser.getBalance()>=account){
                oldUser.setBalance(oldUser.getBalance()-account);
                newUser.setBalance(newUser.getBalance()+account);
                dao.updateUser(oldUser);
                dao.updateUser(newUser);
            }else {
                System.err.println("对不起,"+oldUser.getUsername()+",您的余额不足");
            }
        }else {
            System.err.println("对不起,您输入的账号不存在");
        }
    }
    //销户
    public void closeAccount(String name){
        User u = dao.selectUser(name);
        dao.deleteUser(u);
    }
    //注册
    public void register(String name,String password){
        User user = dao.selectUser(name);
        if (user!=null){
            System.err.println("对不起,您输入的账号已存在");
        }else {
            user = new User(name,password,0.0);
            dao.addUser(user);
        }
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        ATMService service = new ATMService();
        Scanner input = new Scanner(System.in);
        System.out.println("欢迎您使用银行自助服务系统\n请输入您的账号:");
        String username = input.nextLine();
        System.out.println("请输入您的密码:");
        String password = input.nextLine();
        if (service.login(username,password)){
            System.out.println("登录成功!");
            while(true) {
                System.out.println("请选择您的操作:\n0.注册\n1.查询余额\n2.存款\n3.取款\n4.转账\n5.销户\n6.退出");
                String option = input.nextLine();
                switch (option) {
                    case "0":
                        System.out.println("请输入您的用户名:");
                        String newname = input.nextLine();
                        System.out.println("请输入您的密码:");
                        String newPass = input.nextLine();
                        service.register(newname, newPass);
                        System.out.println("恭喜您,注册成功!,您的用户名为" + newname);
                        break;
                    case "1":
                        Double balance = service.queryBalance(username);
                        System.out.println("您的余额为" + balance);
                        break;
                    case "2":
                        System.out.println("请输入存款金额:");
                        double amount = input.nextDouble();
                        input.nextLine();
                        service.deposit(username, amount);
                        System.out.println("恭喜您,存款成功");
                        break;
                    case "3":
                        System.out.println("请输入取款金额:");
                        double d = input.nextDouble();
                        input.nextLine();
                        service.withdrawal(username, d);
                        System.out.println("恭喜您,取款成功");
                        break;
                    case "4":
                        System.out.println("请输入对方账户:");
                        String anothername = input.nextLine();
                        System.out.println("请输入转账金额:");
                        double t = input.nextDouble();
                        input.nextLine();
                        service.transfer(username, anothername, t);
                        System.out.println("恭喜您,转账成功");
                        break;
                    case "5":
                        service.closeAccount(username);
                        System.out.println("销户成功");
                        break;
                    case "6":
                        System.exit(0);
                }
            }
        }else {
            System.err.println("用户名或密码错误");
        }
        //dao.initFile();
        
    }
}

部分测试截图

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

免责声明:

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

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

Java基于对象流实现银行系统

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何基于python实现银行管理系统

这篇文章将为大家详细讲解有关如何基于python实现银行管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬
2023-06-14

java+mysql模拟实现银行系统

模拟电子银行,开户,存钱,取钱,查询用户信息,修改用户信息,查询余额,查询明细,注销,退出,等等 基本实现了相关功能。但是规定每次需要重新登录,还是很麻烦的。 另外用户注销时候,没有规定删除operator表中信息,此处会有问题。但想了半
2022-05-22

java如何实现简单银行ATM系统

这篇文章主要介绍了java如何实现简单银行ATM系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java如何实现简单银行ATM系统文章都会有所收获,下面我们一起来看看吧。#ATM系统##功能模拟银行ATM机系
2023-06-30

Java如何实现银行账户管理子系统

本文小编为大家详细介绍“Java如何实现银行账户管理子系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现银行账户管理子系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。所用到的知识点:面向对象基
2023-06-30

基于Java怎么实现简易的局域网对话系统

基于Java怎么实现简易的局域网对话系统,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。先说一下写的确实比较一般,别喷为什么呢,疫情原因,学校提前两周期末考试,时间也不太充足,将
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录