Java如何通过对象流技术构建银行系统架构?

2026-05-24 03:122阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1606个文字,预计阅读时间需要7分钟。

Java如何通过对象流技术构建银行系统架构?

Java对象流实现银行系统的整体代码,供大型参考,内容如下:

系统特点:- 数据持久化到文件中- 系统启动后,加载文件中的数据到集合中,做了一次缓存- 文件读写操作使用

javaimport java.io.*;import java.util.*;

public class BankSystem { private Map accounts;

public BankSystem() { accounts=new HashMap(); loadAccounts(); }

private void loadAccounts() { try (ObjectInputStream ois=new ObjectInputStream(new FileInputStream(accounts.dat))) { accounts=(Map) ois.readObject(); } catch (FileNotFoundException e) { System.out.println(Account file not found. Creating a new one.); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }

private void saveAccounts() { try (ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(accounts.dat))) { oos.writeObject(accounts); } catch (IOException e) { e.printStackTrace(); } }

public void addAccount(Account account) { accounts.put(account.getAccountId(), account); saveAccounts(); }

public void deleteAccount(String accountId) { accounts.remove(accountId); saveAccounts(); }

public Account getAccount(String accountId) { return accounts.get(accountId); }

public static void main(String[] args) { BankSystem bankSystem=new BankSystem(); // 示例:添加、删除和查询账户 Account account1=new Account(123, John Doe, 1000); bankSystem.addAccount(account1); Account account2=bankSystem.getAccount(123); System.out.println(Account: + account2); bankSystem.deleteAccount(123); account2=bankSystem.getAccount(123); if (account2==null) { System.out.println(Account not found.); } }}

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如何通过对象流技术构建银行系统架构?

本文共计1606个文字,预计阅读时间需要7分钟。

Java如何通过对象流技术构建银行系统架构?

Java对象流实现银行系统的整体代码,供大型参考,内容如下:

系统特点:- 数据持久化到文件中- 系统启动后,加载文件中的数据到集合中,做了一次缓存- 文件读写操作使用

javaimport java.io.*;import java.util.*;

public class BankSystem { private Map accounts;

public BankSystem() { accounts=new HashMap(); loadAccounts(); }

private void loadAccounts() { try (ObjectInputStream ois=new ObjectInputStream(new FileInputStream(accounts.dat))) { accounts=(Map) ois.readObject(); } catch (FileNotFoundException e) { System.out.println(Account file not found. Creating a new one.); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }

private void saveAccounts() { try (ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(accounts.dat))) { oos.writeObject(accounts); } catch (IOException e) { e.printStackTrace(); } }

public void addAccount(Account account) { accounts.put(account.getAccountId(), account); saveAccounts(); }

public void deleteAccount(String accountId) { accounts.remove(accountId); saveAccounts(); }

public Account getAccount(String accountId) { return accounts.get(accountId); }

public static void main(String[] args) { BankSystem bankSystem=new BankSystem(); // 示例:添加、删除和查询账户 Account account1=new Account(123, John Doe, 1000); bankSystem.addAccount(account1); Account account2=bankSystem.getAccount(123); System.out.println(Account: + account2); bankSystem.deleteAccount(123); account2=bankSystem.getAccount(123); if (account2==null) { System.out.println(Account not found.); } }}

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如何通过对象流技术构建银行系统架构?