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

2023-05-16 0 1,793

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 = \"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);
    }

    //只在初始化时时调用一次
/*    public void initFile(){
        User user1 = new User(\"张三\",\"123\",800.0);
        User user2 = new User(\"李四\",\"666\",70.0);
        User user3 = new User(\"王五\",\"888\",555.0);
        userMsg.put(user1.getUsername(),user1);
        userMsg.put(user2.getUsername(),user2);
        userMsg.put(user3.getUsername(),user3);
        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();
        /*HashMap<String, User> userMsg = dao.getUserMsg();
        Iterator<String> iterator = userMsg.keySet().iterator();
        while (iterator.hasNext()){
            String username = iterator.next();
            User user = userMsg.get(username);
            System.out.println(user);
        }*/
    }
}

部分测试截图

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

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

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

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

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

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Java基于对象流实现银行系统 http://www.20zxx.cn/705555/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务