java實(shí)現(xiàn)ATM機(jī)系統(tǒng)(2.0版)
java實(shí)現(xiàn)銀行ATM自助取款機(jī),實(shí)現(xiàn)功能:用戶登錄、余額查詢、存錢、取錢、轉(zhuǎn)賬、修改密碼、退出系統(tǒng)。
用java實(shí)現(xiàn)一個(gè)ATM機(jī)系統(tǒng)(2.0版)
設(shè)計(jì)思路
設(shè)計(jì)五個(gè)類包括測(cè)試類:
1、ATM類也是主要的類,負(fù)責(zé)實(shí)現(xiàn)用戶一系列的操作;
2、Data類,作為ATM類的一個(gè)屬性,主要實(shí)現(xiàn)從java文件user中獲取用戶全部信息,并返回要找的用戶,再將修改完之后的用戶信息寫入文件中。
這個(gè)類是ATM機(jī)與文件之間的橋梁;
3、Bank類,有ATM機(jī)(has-a),歡迎用戶來使用ATM機(jī);
4、User類,使用ATM機(jī)(use-a);
5、Demo類,測(cè)試類,創(chuàng)建一個(gè)環(huán)境,讓類產(chǎn)生關(guān)系。
源碼
需要注意java文件user的位置,Data類要進(jìn)行操作它。
package newBank; import java.util.Scanner; //ATM類 public class ATM { //有一個(gè)類操作數(shù)據(jù)的類 private Data data = new Data(); //ATM機(jī)里的數(shù)據(jù) private String userName;//用戶賬號(hào)且唯一 private String userPassword;//用戶密碼 private double userMoney;//用戶賬戶里的錢 private double money;//變量,存,取,轉(zhuǎn)賬的錢 private String user;//使用該臺(tái)ATM機(jī)的用戶全部信息 //ATM界面 public void show(){ System.out.println("歡迎使用ATM機(jī)"); //使用登錄方法,輸入賬號(hào)和密碼 int number = login(); //如果登錄成功 if(number == 4) working();//ATM機(jī)辦理業(yè)務(wù) } //登錄方法 private int login(){ int number = 3;//用戶輸入次數(shù) while(number > 0) { Scanner input = new Scanner(System.in); System.out.println("請(qǐng)輸入賬號(hào):"); //輸入賬號(hào) String inUserName = input.nextLine(); //輸入密碼 System.out.println("請(qǐng)輸入密碼:"); String inUserPassword = input.nextLine(); String x = data.backUser(inUserName); //判斷賬戶是否存在 if(!x.equals("null")){ user = x;//獲取用戶所有信息 String[] str = user.split("\\*");//將用戶信息分割 userName = str[0];//用戶名 userPassword = str[1];//用戶密碼 userMoney = Double.parseDouble(str[2]);//用戶余額 //密碼正確 if(userPassword.equals(inUserPassword)){ System.out.println("登錄成功"); number = 4;//次數(shù)變?yōu)? break; } } number --;//次數(shù)減一 System.out.println("賬號(hào)或密碼輸入錯(cuò)誤。。。"); System.out.println("您還有" + number + "次機(jī)會(huì)"); } return number;//是否登錄成功 } //功能界面 private void functionShow(){ System.out.println("**********************"); System.out.println("\t歡迎使用ATM"); System.out.println("1,賬戶余額查詢\n2,存錢\n3,取錢\n4,轉(zhuǎn)賬\n5,修改用戶密碼\n6,退出系統(tǒng)\n"); System.out.println("**********************"); } //用戶要進(jìn)行的操作 private void working(){ String index;//業(yè)務(wù)序號(hào) do{ functionShow();//調(diào)用功能界面 System.out.println("請(qǐng)輸入要辦理的業(yè)務(wù)序號(hào):"); Scanner input = new Scanner(System.in); index = input.nextLine(); switch(index){ case "1": look(); break; case "2": saveMoney(); break; case "3": getMoney(); break; case "4": giveMoney(); break; case "5": changePassword(); break; case "6": System.out.println("歡迎下次光臨!"); user = changeUser(userName,userPassword,userMoney); data.saveData(user,true);//用戶退出后保存用戶信息 break; default: System.out.println("您輸入有誤,請(qǐng)重新輸入。。。。"); } }while(!index.equals("6")); } //是否繼續(xù)某項(xiàng)操作 private boolean isContinue(){ System.out.println("繼續(xù)辦理該項(xiàng)業(yè)務(wù):請(qǐng)輸入Y/y"); System.out.println("返回上一級(jí):請(qǐng)輸入N/n"); Scanner input = new Scanner(System.in); String str = input.nextLine(); if(str.equalsIgnoreCase("Y")) return true; else return false; } //存錢,取錢,轉(zhuǎn)賬共用 private void howMuch(String str){ System.out.println("歡迎辦理"+ str +"業(yè)務(wù)。。。。。。"); System.out.println("請(qǐng)輸入金額(只能是整數(shù)且是100的倍數(shù),最多為10000):"); Scanner input = new Scanner(System.in); Double money = input.nextDouble(); if(money%10 != 0) { System.out.println("您輸入有誤!"); this.money = 0; } else this.money = money; } //查詢實(shí)現(xiàn) private void look(){ System.out.println("用戶余額為:" + userMoney); try{ Thread.sleep(2000); }catch(Exception e){ e.printStackTrace(); } } //存錢實(shí)現(xiàn) private void saveMoney(){ howMuch("存錢"); if(money != 0) {//如果存的錢正確 userMoney = userMoney + money;//存上 System.out.println("已存入"); look();//顯示余額 } if(isContinue()) saveMoney(); } //判斷余額是否充足 private boolean isEnough(){ if(money <= userMoney){ userMoney = userMoney - money; return true; } else{ System.out.println("您的余額不足!"); return false; } } //取錢實(shí)現(xiàn) private void getMoney(){ howMuch("取錢"); //如果取的錢正確且如果轉(zhuǎn)賬賬戶余額夠 if(money != 0 && isEnough()){ look(); System.out.println("請(qǐng)收好您的錢"); } if(isContinue()) getMoney(); } //轉(zhuǎn)賬實(shí)現(xiàn) private void giveMoney(){ //只判斷用戶賬戶是否存在 Scanner input = new Scanner(System.in); System.out.println("請(qǐng)輸入要轉(zhuǎn)賬賬號(hào):"); //輸入賬號(hào) String inUserName = input.nextLine(); String str = data.backUser(inUserName); //如果該賬戶存在 if(!str.equals("null")) { String antherUser = str;//獲取被轉(zhuǎn)賬賬戶所有信息 String[] str1 = antherUser.split("\\*");//分割 Double x = Double.parseDouble(str1[2]);//獲取被轉(zhuǎn)賬賬戶余額 howMuch("轉(zhuǎn)賬"); //如果轉(zhuǎn)的錢正確且如果轉(zhuǎn)賬賬戶余額夠 if (money != 0 && isEnough()) { x = x + money; antherUser = changeUser(str1[0], str1[1], x);//改變被轉(zhuǎn)賬賬戶信息 data.saveData(antherUser,false);//將用戶信息傳給Data類保存被轉(zhuǎn)賬賬戶信息 System.out.println("轉(zhuǎn)賬成功"); look(); } } else System.out.println("被轉(zhuǎn)賬賬戶不存在。。。"); if(isContinue()) giveMoney(); } //修改密碼實(shí)現(xiàn) private void changePassword(){ System.out.println("請(qǐng)輸入新密碼:"); Scanner input = new Scanner(System.in); userPassword = input.nextLine(); System.out.println("密碼修改成功!"); } //辦完業(yè)務(wù)后修改用戶信息 private String changeUser(String n,String w,Double d){ String str = n + "*" + w + "*" + d; return str; } }
package newBank; import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Set; //數(shù)據(jù)類是文件和ATM機(jī)之間操作用戶信息的橋梁 public class Data { //Map儲(chǔ)存數(shù)據(jù)庫里所有用戶的全部信息 Map<String,String> userData = new HashMap(); //返回用戶的信息 private String user; //創(chuàng)建數(shù)據(jù)類加載所有用戶信息 public Data(){ getUsers(); } private void getUsers(){ String str; String[] string; File file = new File("src\\newBank\\user"); FileReader fileReader = null; BufferedReader bufferedReader = null; try{ fileReader = new FileReader(file); bufferedReader = new BufferedReader(fileReader); while((str = bufferedReader.readLine())!=null){ string = str.split("\\*",2); userData.put(string[0],string[1]); } }catch(Exception e){ e.printStackTrace(); if((fileReader!=null)&&(bufferedReader!=null)){ try { bufferedReader.close(); fileReader.close(); } catch (IOException e1) { e1.printStackTrace(); } } } } //告訴用戶名,如果找到返回該用戶所有信息,沒找到返回null public String backUser(String userName){ String str = "null"; if(userData.containsKey(userName)) str = userName + "*" + userData.get(userName); user = str; return user; } //修改用戶數(shù)據(jù)并儲(chǔ)存在userData圖里 public void saveData(String user,boolean aBoolean){ String[] string = user.split("\\*",2); userData.remove(string[0]); userData.put(string[0],string[1]); if(aBoolean)//判斷用戶是否操作結(jié)束 changeUser(); } //用戶操作完,將userData里所有的用戶再寫入文件里 private void changeUser(){ String str,string=""; Set<String> keys = userData.keySet(); for(String key : keys){ str = key + "*" + userData.get(key); string = string + str + "\n"; } File file = new File("src\\newBank\\user"); FileWriter out = null; try { out = new FileWriter(file); out.write(string); out.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
package newBank; //銀行類 public class Bank { //銀行有ATM機(jī)供給用戶使用 private ATM atm = new ATM(); //歡迎用戶使用 public void welcome(User user){ System.out.println("歡迎用戶來我行使用ATM機(jī)"); user.useATM(atm); } }
package newBank; //用戶類 public class User { //用戶使用ATM機(jī)辦理業(yè)務(wù) public void useATM(ATM atm){ atm.show(); } }
//java文件當(dāng)數(shù)據(jù)庫 李四*123*1000.0 張三*456*10000.0 王五*789*100000.0
package newBank; //測(cè)試類 public class Demo { public static void main(String[] args){ //創(chuàng)建一個(gè)銀行 Bank bank = new Bank(); //創(chuàng)建一個(gè)用戶 User user = new User(); //銀行歡迎用戶 bank.welcome(user); } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java實(shí)現(xiàn)銀行ATM管理系統(tǒng)
- Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
- Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)
- Java簡單實(shí)現(xiàn)銀行ATM系統(tǒng)
- 用Java實(shí)現(xiàn)簡單ATM機(jī)功能
- java GUI實(shí)現(xiàn)ATM機(jī)系統(tǒng)(3.0版)
- Java模擬實(shí)現(xiàn)ATM機(jī)
- Java項(xiàng)目實(shí)現(xiàn)模擬ATM機(jī)
- Java使用嵌套循環(huán)模擬ATM機(jī)取款業(yè)務(wù)操作示例
- Java實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)
相關(guān)文章
SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改
本文主要介紹了SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐
在 Web 開發(fā)中, 我們經(jīng)常會(huì)需要處理各種異常,這篇文章主要介紹了詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01spring整合redis實(shí)現(xiàn)數(shù)據(jù)緩存的實(shí)例代碼
這篇文章主要介紹了spring整合redis實(shí)現(xiàn)數(shù)據(jù)緩存,需要的朋友可以參考下2018-09-09Spring 開發(fā)之組件賦值的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring 開發(fā)之組件賦值的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09