Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)
本文實(shí)例為大家分享了Java實(shí)現(xiàn)ATM系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
這應(yīng)該算最基礎(chǔ)的Javase項(xiàng)目了,但其中邏輯還是得想想的。
功能還算完善,只是對(duì)輸入數(shù)據(jù)的校驗(yàn)沒做全,之后做web時(shí)再加上。
沒有數(shù)據(jù)庫(kù)。
完整代碼在最后。
流程圖
登錄
想模擬提款機(jī)插卡登錄的,因此沒做注冊(cè)賬號(hào)的功能,手動(dòng)先塞了三個(gè)賬號(hào)。
有三次輸入密碼機(jī)會(huì)。
查詢
取款
存款
轉(zhuǎn)賬
修改密碼
退出
代碼
文件結(jié)構(gòu)
下面兩個(gè)類復(fù)制過去放到ATM文件夾下就能運(yùn)行。
package ATM; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Account { ? ? private String cardID; ? ? private String username; ? ? private String password; ? ? private double balance; ? ? private boolean status;//卡 鎖定狀態(tài) ? ? public Account() { ? ? } ? ? public Account(String cardID, String username, String password, double balance, boolean status) { ? ? ? ? this.cardID = cardID; ? ? ? ? this.username = username; ? ? ? ? this.password = password; ? ? ? ? this.balance = balance; ? ? ? ? this.status = status; ? ? } ? ? public Account(String cardID, String username, String password, double balance) { ? ? ? ? this.cardID = cardID; ? ? ? ? this.username = username; ? ? ? ? this.password = password; ? ? ? ? this.balance = balance; ? ? } ? ? public String getCardID() { ? ? ? ? return cardID; ? ? } ? ? public void setCardID(String cardID) { ? ? ? ? this.cardID = cardID; ? ? } ? ? 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 boolean isStatus() { ? ? ? ? return status; ? ? } ? ? public void setStatus(boolean status) { ? ? ? ? this.status = status; ? ? } ? ? @Override ? ? public String toString(){ ? ? ? ? System.currentTimeMillis(); ? ? ? ? Date date = new Date(); ? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ? ? ? ? String formatDate = sdf.format(date); ? ? ? ? return "銀行:新航路銀行\(zhòng)n" + ? ? ? ? ? ? ? ? "銀行賬號(hào):"+cardID+"\n" ? ? ? ? ? ? ? ? +"用戶名:"+username+"\n" ? ? ? ? ? ? ? ? +"余額:"+balance+"\n" ? ? ? ? ? ? ? ? +formatDate; ? ? } }
package ATM; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Scanner; public class ATM { ? ? static Scanner sc = new Scanner(System.in); ? ? static ArrayList<Account> accounts; ? ? public static void main(String[] args) { ? ? ? ? //模仿插卡ATM,因此沒做注冊(cè)用戶功能,這里自己添加了幾個(gè)用戶做測(cè)試。 ? ? ? ? accounts = new ArrayList<>(); ? ? ? ? accounts.add(new Account("10001", "路飛", "ONEPIECE", 100,true)); ? ? ? ? accounts.add(new Account("10002", "索隆", "123456", 10000,false)); ? ? ? ? accounts.add(new Account("10003", "娜美", "123456", 1000000d,true)); ? ? ? ? //登錄 ? ? ? ? loginVerify(); ? ? } ? ? //登錄驗(yàn)證 ? ? public static void loginVerify() { ? ? ? ? System.out.println("提示:有這些賬戶"); ? ? ? ? for (Account account : accounts) { ? ? ? ? ? ? System.out.println("卡號(hào):"+account.getCardID() +" ?用戶名:" + account.getUsername()+" ?密碼:"+account.getPassword()+" ?余額:"+account.getBalance()); ? ? ? ? } ? ? ? ? System.out.println("---------------------------------------------"); ? ? ? ? //模擬插卡,手動(dòng)輸入銀行卡號(hào) ? ? ? ? System.out.print("輸入銀行卡號(hào):"); ? ? ? ? String cardID = sc.next(); ? ? ? ? //根據(jù)卡號(hào),判斷此賬號(hào)是否存在 ? ? ? ? for (int i = 0; i < accounts.size(); i++) { ? ? ? ? ? ? Account account = accounts.get(i); ? ? ? ? ? ? if (cardID.equals(account.getCardID())) { //判斷卡號(hào)是否存在 ? ? ? ? ? ? ? ? if(account.isStatus()) { //看該卡是否被鎖 ? ? ? ? ? ? ? ? ? ? //賬號(hào)存在,輸入密碼 ? ? ? ? ? ? ? ? ? ? System.out.print("請(qǐng)輸入密碼:"); ? ? ? ? ? ? ? ? ? ? int count = 3;//可輸入3次密碼 ? ? ? ? ? ? ? ? ? ? while (count > 0) { ? ? ? ? ? ? ? ? ? ? ? ? sc.useDelimiter("\n"); ? ? ? ? ? ? ? ? ? ? ? ? String pwd = sc.next(); ? ? ? ? ? ? ? ? ? ? ? ? if (pwd.equals(accounts.get(i).getPassword())) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? //登錄成功,轉(zhuǎn)到主界面 ? ? ? ? ? ? ? ? ? ? ? ? ? ? mainInterface(accounts.get(i)); ? ? ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(--count == 0){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("此卡已鎖,請(qǐng)到人工處咨詢辦理。"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? accounts.get(i).setStatus(false); ? ? ? ? ? ? ? ? ? ? ? ? ? ? }else { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("還有" + count + "次輸入機(jī)會(huì)"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? ? ? System.out.println("此卡已鎖,請(qǐng)到人工處咨詢辦理。"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? ? ? if(i == accounts.size()-1){ ? ? ? ? ? ? ? ? System.out.println("此卡號(hào)不存在!!"); ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? public static void mainInterface(Account account) { ? ? ? ? System.out.println("====================================="); ? ? ? ? System.out.println("|| 1.查詢余額 ? ? ? ? ? ? ? 5.修改密碼||"); ? ? ? ? System.out.println("|| 2.取款 ? ? ? ? ? ? ? ? ?6.退卡 ? ?||"); ? ? ? ? System.out.println("|| 3.存款 ? ? ? ? ? ? ? ? ? ? ? ? ? ||"); ? ? ? ? System.out.println("|| 4.轉(zhuǎn)賬 ? ? ? ? ? ? ? ? ? ? ? ? ? ||"); ? ? ? ? System.out.println("====================================="); ? ? ? ? System.out.print("請(qǐng)輸入要操作的號(hào)碼:"); ? ? ? ? int i = sc.nextInt(); ? ? ? ? switch (i) { ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? queryBalance(account); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? withdrawal(account); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? deposit(account); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? transfer(account); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 5: ? ? ? ? ? ? ? ? updatePassword(account); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 6: ? ? ? ? ? ? ? ? exitSystem(); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? System.out.println("輸入號(hào)碼不對(duì)!"); ? ? ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? //查詢余額 ? ? public static void queryBalance(Account account) { ? ? ? ? System.out.println("====================================="); ? ? ? ? System.out.println("|| "+account.getUsername() + "的余額: " + account.getBalance()); ? ? ? ? System.out.println("====================================="); ? ? ? ? mainInterface(account); ? ? } ? ? //取款 ? ? public static void withdrawal(Account account) { ? ? ? ? System.out.print("請(qǐng)輸入取款金額:"); ? ? ? ? double money = sc.nextInt(); ? ? ? ? if (money <= account.getBalance()) { ? ? ? ? ? ? account.setBalance(account.getBalance() - money); ? ? ? ? ? ? System.out.println("取款成功!!"); ? ? ? ? ? ? System.out.println("====================================="); ? ? ? ? ? ? System.out.println("|| 1.返回主界面 ? ? ? ? ? ? 2.打印發(fā)票||"); ? ? ? ? ? ? System.out.println("====================================="); ? ? ? ? ? ? int i = sc.nextInt(); ? ? ? ? ? ? switch (i) { ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? mainInterface(account); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? Date date = new Date(); ? ? ? ? ? ? ? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ? ? ? ? ? ? ? ? ? ? String formatDate = sdf.format(date); ? ? ? ? ? ? ? ? ? ? System.out.println("銀行:新航路銀行\(zhòng)n"+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? "銀行卡:"+account.getCardID()+"\n"+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? "用戶名:"+account.getUsername()+"\n"+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? "本次取款:"+money+"\n"+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? formatDate); ? ? ? ? ? ? ? ? ? ? mainInterface(account); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } else { ? ? ? ? ? ? System.out.println("oh,我可憐的孩子!余額不足捏。"); ? ? ? ? ? ? System.out.println("====================================="); ? ? ? ? ? ? System.out.println("|| 1.返回 enter ? ? ? ? ? ? ? ? ? ? ? ||"); ? ? ? ? ? ? System.out.println("====================================="); ? ? ? ? ? ? sc.next(); ? ? ? ? ? ? mainInterface(account); ? ? ? ? } ? ? } ? ? //存款 ? ? public static void deposit(Account account) { ? ? ? ? System.out.print("請(qǐng)輸入要存款金額:"); ? ? ? ? double tempMoney = sc.nextDouble(); ? ? ? ? account.setBalance(account.getBalance() + tempMoney); ? ? ? ? System.out.println("嗶~嗶~嗶 ?點(diǎn)鈔中..."); ? ? ? ? System.out.println("存款成功"); ? ? ? ? mainInterface(account); ? ? } ? ? //轉(zhuǎn)賬 ? ? public static void transfer(Account account) { ? ? ? ? System.out.println("請(qǐng)輸入對(duì)方卡號(hào)(提示賬號(hào)有:10001 /10002 /10003)"); ? ? ? ? String cardID = sc.next(); ? ? ? ? //根據(jù)卡號(hào),判斷此賬號(hào)是否存在 ? ? ? ? for (int i = 0; i < accounts.size(); i++) { ? ? ? ? ? ? if (cardID.equals(accounts.get(i).getCardID())) { ? ? ? ? ? ? ? ? System.out.print("請(qǐng)輸入對(duì)象用戶名驗(yàn)證:"); ? ? ? ? ? ? ? ? sc.nextLine(); ? ? ? ? ? ? ? ? String next = sc.nextLine(); ? ? ? ? ? ? ? ? if(next.equals(accounts.get(i).getUsername())) { ? ? ? ? ? ? ? ? ? ? System.out.print("請(qǐng)輸入要轉(zhuǎn)的金額:"); ? ? ? ? ? ? ? ? ? ? double m = sc.nextDouble(); ? ? ? ? ? ? ? ? ? ? if (m > account.getBalance()) { ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("你沒這么多錢,轉(zhuǎn)賬失??!"); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? account.setBalance(account.getBalance() - m); ? ? ? ? ? ? ? ? ? ? ? ? accounts.get(i).setBalance(m + accounts.get(i).getBalance()); ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("轉(zhuǎn)賬成功"); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? ? ? System.out.println("賬號(hào)與用戶名不匹配,轉(zhuǎn)賬失敗"); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ?if(i == accounts.size()-1) { ? ? ? ? ? ? ? ?System.out.println("此卡號(hào)不存在!!"); ? ? ? ? ? ?} ? ? ? ? } ? ? ? ? mainInterface(account); ? ? } ? ? //5. 修改密碼 ? ? public static void updatePassword(Account account){ ? ? ? ? System.out.print("請(qǐng)輸入新密碼:"); ? ? ? ? String s1 = sc.next(); ? ? ? ? System.out.print("請(qǐng)?jiān)俅屋斎胄旅艽a:"); ? ? ? ? String s2 = sc.next(); ? ? ? ? if(s1.equals(s2)){ ? ? ? ? ? ? account.setPassword(s1); ? ? ? ? ? ? System.out.println("密碼修改成功,請(qǐng)重新登錄!"); ? ? ? ? ? ? loginVerify(); ? ? ? ? }else{ ? ? ? ? ? ? System.out.println("兩次密碼不一致"); ? ? ? ? ? ? mainInterface(account); ? ? ? ? } ? ? } ? ? //6. 退出 ? ? public static void exitSystem() { ? ? ? ? System.exit(0); ? ? ? ? //loginVerify(); ? ? } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)版ATM系統(tǒng)
- Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
- Java簡(jiǎn)單實(shí)現(xiàn)銀行ATM系統(tǒng)
- java實(shí)現(xiàn)簡(jiǎn)單銀行ATM系統(tǒng)
- Java實(shí)現(xiàn)ATM系統(tǒng)超全面步驟解讀建議收藏
- Java實(shí)現(xiàn)銀行ATM系統(tǒng)
- java模擬實(shí)現(xiàn)銀行ATM機(jī)操作
- 用Java實(shí)現(xiàn)簡(jiǎn)單ATM機(jī)功能
- java方法實(shí)現(xiàn)簡(jiǎn)易ATM功能
- 基于Java開發(fā)實(shí)現(xiàn)ATM系統(tǒng)
相關(guān)文章
Java Volatile應(yīng)用單例模式實(shí)現(xiàn)過程解析
這篇文章主要介紹了Java Volatile應(yīng)用單例模式實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11mybatis 多表關(guān)聯(lián)mapper文件寫法操作
這篇文章主要介紹了mybatis 多表關(guān)聯(lián)mapper文件寫法操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-12-12Spring?Boot?Admin?添加報(bào)警提醒和登錄驗(yàn)證功能的具體實(shí)現(xiàn)
報(bào)警提醒功能是基于郵箱實(shí)現(xiàn)的,當(dāng)然也可以使用其他的提醒功能,如釘釘或飛書機(jī)器人提醒也是可以的,但郵箱報(bào)警功能的實(shí)現(xiàn)成本最低,所以本文我們就來(lái)看郵箱的報(bào)警提醒功能的具體實(shí)現(xiàn)2022-01-01Java算法實(shí)戰(zhàn)之排一億個(gè)隨機(jī)數(shù)
我們?cè)谏钪薪?jīng)常遇見一些這樣的需求,隨機(jī)點(diǎn)名、公司年會(huì)抽獎(jiǎng)、微信拼手氣紅包等,還有一些游戲比如打地鼠小游戲、俄羅斯方塊等,這些場(chǎng)景中都會(huì)用到一種算法:隨機(jī),這篇文章主要給大家介紹了關(guān)于Java算法實(shí)戰(zhàn)之排一億個(gè)隨機(jī)數(shù)的相關(guān)資料,需要的朋友可以參考下2021-11-11Java 數(shù)據(jù)結(jié)構(gòu)中二叉樹前中后序遍歷非遞歸的具體實(shí)現(xiàn)詳解
樹是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹中稱為結(jié)點(diǎn))按分支關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹那樣。樹結(jié)構(gòu)在客觀世界中廣泛存在,如人類社會(huì)的族譜和各種社會(huì)組織機(jī)構(gòu)都可用樹形象表示2021-11-11