Java - 银行系统练习优化 August 2,2019

//创建的User类型
public class User {
    private String ausername; //用户名
    private String apassword;//密码
    private Float abalance;//余额

    public User(){}
    public User(String ausername,String apassword,Float abalance){
        this.abalance = abalance;
        this.apassword = apassword;
        this.ausername = ausername;
    }

    public String getUsername() {
        return ausername;
    }
    public void setUsername(String aname) {
        this.ausername = aname;
    }
    public String getApassword() {
        return apassword;
    }
    public void setApassword(String apassword) {
        this.apassword = apassword;
    }
    public Float getAbalance() {
        return abalance;
    }
    public void setAbalance(Float abalance) {
        this.abalance = abalance;
    }
}

import java.io.*;
import java.util.HashMap;
import java.util.Iterator;

//这个类是用来文件与集合 数据交换的
public class UserSystem {
    //文件路径
    private String pathname =null;
    //数据导入到集合中操作
    public UserSystem(String pathname){
        this.pathname = pathname;
    }

    //创建一个集合 临时存储文件内容信息
    public HashMap<String,User> loadFile (){
        HashMap<String,User> userBox = new HashMap<String, User>();
        File file = null;
        FileReader fr = null;
        BufferedReader br= null;
        try {
            //创建一个输入流,读取文件内容到集合中
              file = new File(pathname);
             fr = new FileReader(file);
             br = new BufferedReader(fr);
            String value = br.readLine(); //按行获取用户文件的信息
            while (value!=null){
                String [] valueUser = value.split("-");
                //拆分 后存入集合中
                User user = new User(valueUser[0],valueUser[1],Float.parseFloat(valueUser[2]));
                userBox.put(user.getUsername(),user);
                value = br.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(fr != null){
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(br != null){
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return userBox;
    }

    //将操作完的集合存入文件中
    public void commit(HashMap<String,User> userBox){
        File file = null;
        FileWriter fw = null;
        BufferedWriter bw= null;
        try {
            file = new File(pathname);
            fw = new FileWriter(file);
            bw = new BufferedWriter(fw);
            Iterator <String> iterator = userBox.keySet().iterator();
            while (iterator.hasNext()){
                String name = iterator.next();//获取名字
                User user = userBox.get(name);
                //使用StringBuilder拼接,存入文件
                StringBuilder stringBuilder = new StringBuilder(user.getUsername());
                stringBuilder.append("-");
                stringBuilder.append(user.getApassword());
                stringBuilder.append("-");
                stringBuilder.append(user.getAbalance());
                bw.write(stringBuilder.toString());//将其转为string类型
                bw.newLine();//换行
                bw.flush();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(fw!=null){
                    fw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(bw!=null){
                    bw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


import java.util.HashMap;

public class AtmDao {
    //DAO作为一个层次---持久层   操作数据  读写数据
    private UserSystem userSystem = new UserSystem("src\\bank_exercise\\UserData.txt");
    private HashMap<String,User> userBox = userSystem.loadFile();
    //更新文件内容---把集合内容存入文件中
    //提供一个创建User对象的方法,更好的体现面向对象思想
    public User objectModel(String username){
        return userBox.get(username);
    }

    public void update(User user){
        userBox.put(user.getUsername(),user);
        userSystem.commit(userBox);
    }
}


//这个类用来存放业务逻辑
public class AtmService {

    private AtmDao atmDao = new AtmDao();
    //登录
    public String login(String username,String password){
        User user = atmDao.objectModel(username);//获取用户名与密码
        //如果为空,则证明 用户不存在
        if(user!=null && user.getApassword().equals(password)){
            return "登录成功";
        }
        return "登录失败";
    }

    //查看余额
    public Float lookOver(String username){
        User user = atmDao.objectModel(username);
        return user.getAbalance();
    }
    //存入 deposit
    public void deposit(String username,Float money){
        User user = atmDao.objectModel(username);
        user.setAbalance(user.getAbalance()+money);
        atmDao.update(user);
        System.out.println("存入成功");
    }
    //取出 takeOut
    public void takeOut(String username,Float money){
        User user = atmDao.objectModel(username);
        if(user.getAbalance()>money){
            user.setAbalance(user.getAbalance()-money);
            atmDao.update(user);
            System.out.println("已取款");
        }else{
            System.out.println("余额不足!");
        }
    }
    //转账
    public void transfer(String username,String username2,Float money) {
        User user = atmDao.objectModel(username);
        User newUser = atmDao.objectModel(username2);
        if (user.getAbalance() > money) {
            if (newUser != null) {
                user.setAbalance(user.getAbalance() - money);
                atmDao.update(user);
                newUser.setAbalance(user.getAbalance() + money);
                atmDao.update(newUser);
                System.out.println("已向"+username2+"转账"+money+"元");
            } else {
                System.out.println("您输入的账户不存在");
            }
        } else {
            System.out.println("余额不足");
        }
    }
}

import java.util.Scanner;
//可以参考以前的计算器代码,使其循环
public class Test {
    public static void main(String[] args){
        AtmService atmService = new AtmService();
        Scanner input = new Scanner(System.in);
        System.out.println("欢迎进入银行系统!");
        System.out.println("请输入账号:");
        String username = input.nextLine();
        System.out.println("请输入密码:");
        String password = input.nextLine();
        String value = atmService.login(username,password);
        if(value.equals("登录成功")){
            System.out.println("登录成功");
            System.out.println("请输入要执行的操作:\n1.存钱\n2.取钱\n3.转账\n4.查看余额\n5.退出");
            String xuanxiang = input.nextLine();
            switch (xuanxiang){
                case "1":
                    System.out.println("请输入存款金额:");
                    Float money = input.nextFloat();
                    atmService.deposit(username,money);

                    break;
                case "2":
                    System.out.println("请输入取款金额:");
                    Float money1 = input.nextFloat();
                    atmService.takeOut(username,money1);
                    break;
                case"3":
                    System.out.println("请输入您需要转款的账户:");
                    String username2 = input.nextLine();
                    System.out.println("请输入转账金额:");
                    Float money2 = input.nextFloat();
                    atmService.transfer(username,username2,money2);
                    break;
                case "4":
                    System.out.println("您的余额为:"+atmService.lookOver(username));
                    break;
                    default:
                        System.out.println("正在退出,请收好您的物件.");
                        break;
            }
        }else {
            System.out.println("登录失败");
        }

    }
}

 

posted @ 2019-08-02 11:26  亿贫如洗杨道长  阅读(21)  评论(0编辑  收藏  举报