<
>

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

2022-09-16 10:41:24 来源:易采站长站 作者:

Java基于对象流实现银行系统的具体代码,供大家参考,具体内容如下系统特点:数据持久化到文件中,系统启动后,加载文件中数据到集合中,相当于做了一个缓存。文件读写使用的是对象流(ObjectInputS...

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

系统特点:

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

全部代码

pojo:

public class User implements Serializable {
 sNDfrZkMAV 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 setPandroidassword(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> usesNDfrZkMAVrMsg = dao.getUserMsg();
    Iterator<String> iterator = userMsg.keySet().iterator();
    while (iterator.hasNext()){
      String username = iterator.next();
      User user = userMsg.get(username);
      System.out.printandroidln(user);
    }*/
  }
}

部分测试截图

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

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

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

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

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

暂时禁止评论

微信扫一扫

易采站长站微信账号