Java银行系统
发光吖 人气:0Java基于对象流实现银行系统的具体代码,供大家参考,具体内容如下
系统特点:
- 数据持久化到文件中,系统启动后,加载文件中数据到集合中,相当于做了一个缓存。
- 文件读写使用的是对象流(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); }*/ } }
部分测试截图
加载全部内容