<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Java實現ATM機作業系統的具體程式碼,供大家參考,具體內容如下
用IO流操作txt檔案作為資料庫模擬實現一個ATM業務作業系統---->網上銀行,實現登入,查詢餘額,存款,取款,轉賬,開戶,銷戶等業務功能
看程式碼
1.使用者類----->User:
package atm; import java.io.Serializable; public class User implements Serializable{ //建議除了私有屬性 無引數有引數構造方法 屬性對應的get、set方法 //建議類實現一個序列化介面 新增一個序列化版本號 private static final long serialVersionUID = 1L; //只是為了記錄資料庫中的一行資訊 賬號 密碼 餘額 private String aName; private String aPassword; private Float aSalary; public User() {} public User(String aName,String aPassword,Float aSalary) { this.aName = aName; this.aPassword = aPassword; this.aSalary = aSalary; } public String getaName() { return this.aName; } public void setaName(String newName) { this.aName = newName; } public String getaPassword() { return this.aPassword; } public void setaPassword(String newPassword) { this.aPassword = newPassword; } public Float getSalary() { return this.aSalary; } public void setSalary(Float newSalary) { this.aSalary = newSalary; } }
2.操作IO的類------>FileLoadAndCommit:
package atm; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; //操作檔案 public class FileLoadAndCommit { //檔案路徑 private String pathName = null; public FileLoadAndCommit(String pathName) { this.pathName = pathName; } //讀取檔案裝入集合 public HashMap<String,User> loadFile(){ //臨時的儲存空間,將檔案中讀取的資料儲存以便於修改 HashMap<String,User> userBox = new HashMap<String,User>(); //IO流讀取 FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(new File(pathName)); br = new BufferedReader(fr); String code = br.readLine();//讀取一行 //迴圈遍歷所有行 按"-"拆分一行的資料,作為User存入集合 while(code != null) { String[] value = code.split("-"); User user = new User(value[0],value[1],Float.parseFloat(value[2])); userBox.put(user.getaName(),user); code = br.readLine(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { //如果流管道存在,才關閉 if(fr != null) { fr.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(br != null) { br.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return userBox; } //將集合更新入檔案 public void commit(HashMap<String,User> userBox) { //IO流寫入 FileWriter fw = null; BufferedWriter bw = null; try { fw = new FileWriter(new File(pathName)); bw = new BufferedWriter(fw); //迭代集合內所有賬戶名 按賬戶名找到對應的User物件 Iterator<String> names = userBox.keySet().iterator(); while(names.hasNext()) { String name = names.next(); User user = userBox.get(name); //用StringBuilder拼接字串 StringBuilder sBuilder = new StringBuilder(); sBuilder.append(user.getaName()); sBuilder.append("-"); sBuilder.append(user.getaPassword()); sBuilder.append("-"); sBuilder.append(user.getSalary()); bw.write(sBuilder.toString());//將拼好的一行資料寫入檔案 bw.flush();//重新整理 bw.newLine();//換行 } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //必須先關閉BufferedWriter再關閉FileWrite,否賊會拋異常java.io.IOException: Stream closed try { if(bw != null) { bw.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(fw != null) { fw.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
3.負責讀寫的類----->AtmDao:
package atm; import java.util.HashMap; //持久化,負責讀寫資料,快取 public class AtmDao { private FileLoadAndCommit flac = new FileLoadAndCommit("D:\test\ATM\testATM.txt"); HashMap<String,User> userBox = flac.loadFile(); //獲取一個User物件 public User selectOne(String aName) { return userBox.get(aName); } //更新檔案資料 public void update(User user) { userBox.put(user.getaName(),user); flac.commit(userBox); } //刪除檔案資料 public void delete(User user) { userBox.remove(user.getaName(),user); flac.commit(userBox); } }
4.負責業務邏輯的類------>ATMService:
package atm; import java.util.HashMap; //負責業務邏輯 判斷 比較 計算 public class ATMService { //登入 private AtmDao dao = new AtmDao(); public String login(String aName,String aPassword) { User user = dao.selectOne(aName); if(user!=null) { if(aPassword.equals(user.getaPassword())) { return "登入成功"; } } return "使用者名稱或密碼錯誤"; } //查詢餘額 public Float inquiry(String aName) { User user = dao.selectOne(aName); return user.getSalary(); } //存款 public void addMoney(String aName,Float addMoney) { User user = dao.selectOne(aName);//獲取該使用者物件 user.setSalary(user.getSalary()+addMoney);//用User的set方法修改使用者金額 dao.update(user);//更新檔案資料 System.out.println("存款成功n"); } //取款 public void getMoney(String aName,Float getMoney) { User user = dao.selectOne(aName);//獲取該使用者物件 if(getMoney <= user.getSalary()) {//如果要取出的錢大於餘額就不能取了 user.setSalary(user.getSalary()-getMoney); dao.update(user); System.out.println("取款成功n"); }else { System.out.println("對不起,您的餘額不足n"); } } //轉賬 public void transferMoney(String outName,String inName,Float transferMoney) { User outUser = dao.selectOne(outName);//轉出使用者 User inUser = dao.selectOne(inName);//轉入使用者 if(inUser!=null) {//轉入使用者存在 if(outUser!=inUser) {//轉出和轉入使用者不能是同一個使用者 if(transferMoney <= outUser.getSalary()) {//轉出金額大於餘額就不能轉了 outUser.setSalary(outUser.getSalary()-transferMoney);//修改轉出使用者餘額 inUser.setSalary(inUser.getSalary()+transferMoney);//修改轉入使用者餘額 //更新檔案資料 dao.update(outUser); dao.update(inUser); System.out.println("轉賬成功n"); }else { System.out.println("對不起"+outName+",您的餘額不足n"); } }else { System.out.println("對不起,不能給自己轉賬,您可以試試使用存款業務n"); } }else { System.out.println("對不起,您輸入的使用者不存在n"); } } //開戶 public User creatUser(String aName,String aPassword,Float aSalary) { User user = new User(aName,aPassword,aSalary); dao.update(user);//更新檔案資料 System.out.println("使用者"+aName+",建立成功"); return user; } //銷戶 public void deleteUser(String aName) { User user = dao.selectOne(aName);//獲取名為aName的使用者 if(user != null) {//判斷該使用者是否在檔案資料記憶體在 dao.delete(user); System.out.println("使用者"+aName+",刪除成功"); }else { System.out.println("要銷燬的賬戶不存在"); } } }
5.測試類----->TestMain:
package atm; import java.util.Scanner; public class TestMain { public static void main(String[] args) { ATMService atmService = new ATMService();//獲取執行業務的方法 Scanner input = new Scanner(System.in); System.out.println("歡迎進入ATM機系統"); System.out.println("請選擇要操作的業務:n1.使用者登入n2.開戶n3.按任意鍵退出"); String choice = input.next(); if(choice.equals("1")) { System.out.println("請輸入賬戶名"); String name = input.next(); System.out.println("請輸入密碼"); String password = input.next(); String afterLogin = atmService.login(name,password);//判斷輸入的賬戶名密碼是否正確 if(afterLogin.equals("登入成功")) {//if正確則登入成功 System.out.println("登入成功!n"); //使用while迴圈反覆進行switch執行操作業務 while(true) { System.out.println("請選擇服務專案:"); System.out.println("1.查詢n2.存款n3.取款n4.轉賬n5.銷戶n(按q退出系統)"); String option = input.next(); switch (option) { case "1": //查詢 Float money = atmService.inquiry(name); System.out.println("尊敬的客戶,您的餘額為"+money+"元n"); break; case "2": //存款 System.out.println("請輸入存款金額"); Float addMoney = input.nextFloat(); atmService.addMoney(name,addMoney); break; case "3": //取款 System.out.println("請輸入取款金額"); Float getMoney = input.nextFloat(); atmService.getMoney(name,getMoney); break; case "4": //轉賬 System.out.println("請輸入轉賬使用者ID:"); String id = input.next(); System.out.println("請輸入轉賬金額:"); Float transferMoney = input.nextFloat(); atmService.transferMoney(name,id,transferMoney); break; case"5": //銷戶 System.out.println("您確定要銷燬當前賬戶嗎?賬戶內所有餘額都會消失nYes/Non"); String decision = input.next(); if(decision.equalsIgnoreCase("yes")) { atmService.deleteUser(name);//刪除當前user資料 }else if(decision.equalsIgnoreCase("no")){ break; } break; case "q": System.out.println("已退出ATM機系統,感謝您的使用!!!"); System.exit(0);//退出程式 break; default: System.out.println("請輸入正確的指令n"); break; } } }else { System.out.println(afterLogin); } }else if(choice.equals("2")){ //開戶 System.out.println("請設定您的使用者名稱"); String newUserName = input.next(); System.out.println("請設定您的密碼"); String newPassword = input.next(); User newUser = atmService.creatUser(newUserName, newPassword, 0.0F); System.out.println("n初始餘額為"+newUser.getSalary()+"元"); }else { System.out.println("已退出ATM機系統,感謝您的使用!!!"); } } }
部分執行結果:
1.賬戶登入
2.查詢
3.存款
4.退出
作為資料庫的txt檔案:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45