您好,登錄后才能下訂單哦!
這篇“Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)”文章吧。
用IO流操作txt文件作為數(shù)據(jù)庫(kù)模擬實(shí)現(xiàn)一個(gè)ATM業(yè)務(wù)操作系統(tǒng)---->網(wǎng)上銀行,實(shí)現(xiàn)登錄,查詢余額,存款,取款,轉(zhuǎn)賬,開戶,銷戶等業(yè)務(wù)功能
1.用戶類----->User:
package atm; import java.io.Serializable; public class User implements Serializable{ //建議除了私有屬性 無(wú)參數(shù)有參數(shù)構(gòu)造方法 屬性對(duì)應(yīng)的get、set方法 //建議類實(shí)現(xiàn)一個(gè)序列化接口 添加一個(gè)序列化版本號(hào) private static final long serialVersionUID = 1L; //只是為了記錄數(shù)據(jù)庫(kù)中的一行信息 賬號(hào) 密碼 余額 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(){ //臨時(shí)的存儲(chǔ)空間,將文件中讀取的數(shù)據(jù)存儲(chǔ)以便于修改 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();//讀取一行 //循環(huán)遍歷所有行 按"-"拆分一行的數(shù)據(jù),作為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 { //如果流管道存在,才關(guān)閉 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); //迭代集合內(nèi)所有賬戶名 按賬戶名找到對(duì)應(yīng)的User對(duì)象 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());//將拼好的一行數(shù)據(jù)寫入文件 bw.flush();//刷新 bw.newLine();//換行 } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //必須先關(guān)閉BufferedWriter再關(guān)閉FileWrite,否賊會(huì)拋異常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.負(fù)責(zé)讀寫的類----->AtmDao:
package atm; import java.util.HashMap; //持久化,負(fù)責(zé)讀寫數(shù)據(jù),緩存 public class AtmDao { private FileLoadAndCommit flac = new FileLoadAndCommit("D:\\test\\ATM\\testATM.txt"); HashMap<String,User> userBox = flac.loadFile(); //獲取一個(gè)User對(duì)象 public User selectOne(String aName) { return userBox.get(aName); } //更新文件數(shù)據(jù) public void update(User user) { userBox.put(user.getaName(),user); flac.commit(userBox); } //刪除文件數(shù)據(jù) public void delete(User user) { userBox.remove(user.getaName(),user); flac.commit(userBox); } }
4.負(fù)責(zé)業(yè)務(wù)邏輯的類------>ATMService:
package atm; import java.util.HashMap; //負(fù)責(zé)業(yè)務(wù)邏輯 判斷 比較 計(jì)算 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 "用戶名或密碼錯(cuò)誤"; } //查詢余額 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);//獲取該用戶對(duì)象 user.setSalary(user.getSalary()+addMoney);//用User的set方法修改用戶金額 dao.update(user);//更新文件數(shù)據(jù) System.out.println("存款成功\n"); } //取款 public void getMoney(String aName,Float getMoney) { User user = dao.selectOne(aName);//獲取該用戶對(duì)象 if(getMoney <= user.getSalary()) {//如果要取出的錢大于余額就不能取了 user.setSalary(user.getSalary()-getMoney); dao.update(user); System.out.println("取款成功\n"); }else { System.out.println("對(duì)不起,您的余額不足\n"); } } //轉(zhuǎn)賬 public void transferMoney(String outName,String inName,Float transferMoney) { User outUser = dao.selectOne(outName);//轉(zhuǎn)出用戶 User inUser = dao.selectOne(inName);//轉(zhuǎn)入用戶 if(inUser!=null) {//轉(zhuǎn)入用戶存在 if(outUser!=inUser) {//轉(zhuǎn)出和轉(zhuǎn)入用戶不能是同一個(gè)用戶 if(transferMoney <= outUser.getSalary()) {//轉(zhuǎn)出金額大于余額就不能轉(zhuǎn)了 outUser.setSalary(outUser.getSalary()-transferMoney);//修改轉(zhuǎn)出用戶余額 inUser.setSalary(inUser.getSalary()+transferMoney);//修改轉(zhuǎn)入用戶余額 //更新文件數(shù)據(jù) dao.update(outUser); dao.update(inUser); System.out.println("轉(zhuǎn)賬成功\n"); }else { System.out.println("對(duì)不起"+outName+",您的余額不足\n"); } }else { System.out.println("對(duì)不起,不能給自己轉(zhuǎn)賬,您可以試試使用存款業(yè)務(wù)\n"); } }else { System.out.println("對(duì)不起,您輸入的用戶不存在\n"); } } //開戶 public User creatUser(String aName,String aPassword,Float aSalary) { User user = new User(aName,aPassword,aSalary); dao.update(user);//更新文件數(shù)據(jù) System.out.println("用戶"+aName+",創(chuàng)建成功"); return user; } //銷戶 public void deleteUser(String aName) { User user = dao.selectOne(aName);//獲取名為aName的用戶 if(user != null) {//判斷該用戶是否在文件數(shù)據(jù)內(nèi)存在 dao.delete(user); System.out.println("用戶"+aName+",刪除成功"); }else { System.out.println("要銷毀的賬戶不存在"); } } }
5.測(cè)試類----->TestMain:
package atm; import java.util.Scanner; public class TestMain { public static void main(String[] args) { ATMService atmService = new ATMService();//獲取執(zhí)行業(yè)務(wù)的方法 Scanner input = new Scanner(System.in); System.out.println("歡迎進(jìn)入ATM機(jī)系統(tǒng)"); System.out.println("請(qǐng)選擇要操作的業(yè)務(wù):\n1.用戶登錄\n2.開戶\n3.按任意鍵退出"); String choice = input.next(); if(choice.equals("1")) { System.out.println("請(qǐng)輸入賬戶名"); String name = input.next(); System.out.println("請(qǐng)輸入密碼"); String password = input.next(); String afterLogin = atmService.login(name,password);//判斷輸入的賬戶名密碼是否正確 if(afterLogin.equals("登錄成功")) {//if正確則登錄成功 System.out.println("登錄成功!\n"); //使用while循環(huán)反復(fù)進(jìn)行switch執(zhí)行操作業(yè)務(wù) while(true) { System.out.println("請(qǐng)選擇服務(wù)項(xiàng)目:"); System.out.println("1.查詢\n2.存款\n3.取款\n4.轉(zhuǎn)賬\n5.銷戶\n(按q退出系統(tǒng))"); String option = input.next(); switch (option) { case "1": //查詢 Float money = atmService.inquiry(name); System.out.println("尊敬的客戶,您的余額為"+money+"元\n"); break; case "2": //存款 System.out.println("請(qǐng)輸入存款金額"); Float addMoney = input.nextFloat(); atmService.addMoney(name,addMoney); break; case "3": //取款 System.out.println("請(qǐng)輸入取款金額"); Float getMoney = input.nextFloat(); atmService.getMoney(name,getMoney); break; case "4": //轉(zhuǎn)賬 System.out.println("請(qǐng)輸入轉(zhuǎn)賬用戶ID:"); String id = input.next(); System.out.println("請(qǐng)輸入轉(zhuǎn)賬金額:"); Float transferMoney = input.nextFloat(); atmService.transferMoney(name,id,transferMoney); break; case"5": //銷戶 System.out.println("您確定要銷毀當(dāng)前賬戶嗎?賬戶內(nèi)所有余額都會(huì)消失\nYes/No\n"); String decision = input.next(); if(decision.equalsIgnoreCase("yes")) { atmService.deleteUser(name);//刪除當(dāng)前user數(shù)據(jù) }else if(decision.equalsIgnoreCase("no")){ break; } break; case "q": System.out.println("已退出ATM機(jī)系統(tǒng),感謝您的使用!!!"); System.exit(0);//退出程序 break; default: System.out.println("請(qǐng)輸入正確的指令\n"); break; } } }else { System.out.println(afterLogin); } }else if(choice.equals("2")){ //開戶 System.out.println("請(qǐng)?jiān)O(shè)置您的用戶名"); String newUserName = input.next(); System.out.println("請(qǐng)?jiān)O(shè)置您的密碼"); String newPassword = input.next(); User newUser = atmService.creatUser(newUserName, newPassword, 0.0F); System.out.println("\n初始余額為"+newUser.getSalary()+"元"); }else { System.out.println("已退出ATM機(jī)系統(tǒng),感謝您的使用!!!"); } } }
部分運(yùn)行結(jié)果:
1.賬戶登錄
2.查詢
3.存款
4.退出
作為數(shù)據(jù)庫(kù)的txt文件:
以上就是關(guān)于“Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。