Java詳解實現(xiàn)ATM機模擬系統(tǒng)
一、概述
(1)選題分析
(2) 開發(fā)環(huán)境
開發(fā)環(huán)境,選擇IDEA這一Java開發(fā)軟件,基于JDK1.8版本,在本機window上開發(fā)本ATM模擬程序。
二、程序概要設(shè)計
(1) 功能模塊設(shè)計
經(jīng)過對題目的分析,把本ATM模擬程序分為管理員端和用戶模式兩大模塊。其中,管理員具有查詢所有賬戶、導出所有賬戶信息到文件、注銷功能。用戶模塊具有查詢余額、ATM轉(zhuǎn)賬、ATM存款、ATM取款、修改密碼、查詢交易記錄、導出記錄、退卡等功能。
系統(tǒng)的總功能模塊圖如下:
(2) 流程圖
系統(tǒng)的總流程為:用戶通過主界面選擇管理員登錄或者用戶模式登錄,然后輸入系統(tǒng)設(shè)定的賬號密碼進行登錄。登錄成功后,進入到相應(yīng)的主功能頁面進行相關(guān)操作。
管理員登錄后臺時,判斷密碼和賬號是否正確,正確則進行登錄,否則提示失敗。登錄進入后臺,可以操作查看所有用戶功能,然后系統(tǒng)將查詢所有設(shè)定的用戶信息并進行輸出到控制臺面板。點擊導出記錄功能,將把所有賬戶信息輸出到當前jar程序同級目錄下的txt文件。
用戶登錄時,判斷賬戶密碼是否正確,不正確,則賬戶錯誤次數(shù)+1,當次數(shù)達到3時,該賬戶將被鎖定,不能登錄。輸入的賬密正確時,判斷賬戶是否被鎖定,沒有鎖定則進行登錄,跳轉(zhuǎn)用戶主界面,并進行相關(guān)操作功能。
管理員模塊流程圖如下:
用戶模塊總流程圖如下:
(3) 文件結(jié)構(gòu)和類的設(shè)計
本ATM模擬程序使用idea編輯軟件開發(fā)。項目分為admin(管理員)、customer(用戶)、data(ATM數(shù)據(jù))三個包。
其中admin包下編寫了AdminManage類,負責初始化管理員界面,同時實現(xiàn)管理員的所有功能。Customer包下的customer類實現(xiàn)了用戶模塊的界面,定義了相關(guān)操作按鈕,以及實現(xiàn)了各自監(jiān)聽的功能,為了減少界面的設(shè)計,在用戶界面中間使用了輸出信息面板,如此功能結(jié)果在面板中打印出來,模擬了atm機的界面信息。
Data包下分別有ATMData類、Card類和CustomerAccount類。Card類是用戶的銀行卡的代碼體現(xiàn),把銀行卡的相關(guān)信息封裝成一個基本Java對象,符合Java面向?qū)ο蟮奶匦?。其中customerAccount是card類的子類,在card的基礎(chǔ)上,添加了許多用戶行為,比如說存款、取款、查詢余額等。ATMData類是本程序十分重要的類,它封裝了本程序的所有初始賬戶信息,還有轉(zhuǎn)賬、獲取所有賬戶、登錄等操作。這樣設(shè)計,可以把數(shù)據(jù)處理和界面的設(shè)計分離來,避免用戶界面的代碼過多過長。
文件結(jié)構(gòu)如下圖,其中resource文件夾下存放了本程序需要的圖片信息:
三、程序詳細設(shè)計
本系統(tǒng)功能模塊不在此一一詳寫,列舉了幾個主要的功能進行描述:
(1) 取款功能
取款功能的代碼設(shè)計在customerAccount類中,傳入?yún)?shù)為取款的金額。先判斷金額是否為100的倍數(shù),然后判斷是否大于5000(題目要求單次取款不得大于5000),再判斷當前賬戶的余額是否大于等于被取得金額。這些條件都滿足后,重新計算當前賬戶的金額,并添加取款記錄到當前賬戶的交易記錄里。
核心代碼邏輯如下:
if (money % 100 != 0) { return false; } if (money > 5000) { return false; } int currentMoney = getMoney(); if (currentMoney < money) { return false; } //取款 int result = currentMoney - money; setMoney(result); //添加交易記錄 List<String> operationRecod = getOperationRecod(); operationRecod.add("【" + LocalDateTime.now().format(dateTimeFormatter) + "】 ATM 取款 [" + money + "]元,當前余額[" + result + "]元");
(2) 存款功能
該方法參數(shù)為存入的金額,首先判斷金額是否為100的倍數(shù),驗證通過則重新計算當前賬戶的余額,然后添加交易記錄在當前的賬戶上。
核心代碼邏輯如下:
if (money % 100 != 0) { return false; } //余額 int countMoney = getMoney() + money; setMoney(countMoney); //記錄交易記錄 List<String> operationRecod = getOperationRecod(); operationRecod.add("【" + LocalDateTime.now().format(dateTimeFormatter) + "】 ATM 存款 [" + money + "]元,當前余額[" + countMoney + "]元"); return true;
(3) 用戶登錄功能
用戶登錄方法的入?yún)橘~戶和密碼,首先判斷賬戶是否存在,將入?yún)⑴c系統(tǒng)設(shè)定好的所有賬戶進行匹配,如果沒有,則失敗。如果有則判斷該賬戶是否被鎖定,被鎖定不能登錄,沒被鎖定則判斷密碼是否正確,不正確則使當前的賬戶的錯誤次數(shù)+1(如果賬戶錯誤次數(shù)=3,則鎖定賬戶)。密碼正確則登錄成功跳轉(zhuǎn)主界面。
核心代碼如下:
//是否存在賬號
if (allAccount.containsKey(number)) { CustomerAccount account = allAccount.get(number); //判斷賬號是否被鎖定 if (account.getErrorCount() >= 3) { JOptionPane.showMessageDialog(null, "登錄失??!該賬號疑似已被鎖定", "提示消息", JOptionPane.WARNING_MESSAGE); return null; //密碼是否一致 } else if (account.getPassword().equals(pwd)) { //重置錯誤次數(shù) account.setErrorCount(0); return account; } account.setErrorCount(account.getErrorCount() + 1); if (account.getErrorCount() >= 3) { //鎖定賬戶 account.setStatus(1); } } else { //提示錯誤消息 JOptionPane.showMessageDialog(null, "登錄失??!卡號或密碼錯誤", "提示消息", JOptionPane.WARNING_MESSAGE); }
四、程序演示
功能居多,不一一在此記錄。這里只記錄針對幾個主要功能的測試。
(1) ATM取款
測試取款功能如下圖所示。初始金額為10000元。分別取款3000、6000、5000。其中后兩個為錯誤數(shù)據(jù)。單次取款不能超5000元,后面當余額3000時取款5000,測試取款不能透支功能。
測試結(jié)果:
由此可知,該功能正常,輸入合法以及不合法的數(shù)據(jù)測試的結(jié)果均與預期相符合。
(2) ATM轉(zhuǎn)賬
轉(zhuǎn)賬測試,目標賬戶必須存在,同時余額要大于要轉(zhuǎn)賬的金額,不能透支。測試數(shù)據(jù)為輸入一個不存在的賬戶、以及大于當前余額的轉(zhuǎn)賬金額。
輸入不存在賬戶測試結(jié)果如下:
輸入正常賬戶和金額測試結(jié)果如下,此時登錄目標賬戶,查詢交易記錄可知轉(zhuǎn)賬已經(jīng)成功到達目標賬戶。
輸入大于當前余額的錯誤數(shù)據(jù),測試結(jié)果如下,可知轉(zhuǎn)賬功能測試正常。
(3) 修改密碼
修改密碼必須輸入原始密碼,相同才能修改。新密碼必須大于6位,同時6位不能完全相同。第三次輸入的密碼為確認新密碼,需和第二次輸入的密碼相同。
原始密碼都是123456,輸入錯誤數(shù)據(jù)111111,測試如下:
輸入小于6位的數(shù)據(jù),以及正確輸入正常數(shù)據(jù)的測試結(jié)果分別如下:
到此這篇關(guān)于Java詳解實現(xiàn)ATM機模擬系統(tǒng)的文章就介紹到這了,更多相關(guān)Java ATM機模擬內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用RestTemplate訪問https實現(xiàn)SSL請求操作
這篇文章主要介紹了使用RestTemplate訪問https實現(xiàn)SSL請求操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10java根據(jù)開始時間結(jié)束時間計算中間間隔日期的實例代碼
這篇文章主要介紹了java根據(jù)開始時間結(jié)束時間計算中間間隔日期的實例代碼,需要的朋友可以參考下2019-05-05SpringBoot實現(xiàn)權(quán)限驗證的示例步驟
權(quán)限驗證是一種用于控制對系統(tǒng)資源和操作的訪問的機制。它允許開發(fā)人員定義誰可以執(zhí)行特定操作或訪問特定資源,并確保只有經(jīng)過授權(quán)的用戶才能執(zhí)行這些操作,這篇文章主要介紹了SpringBoot實現(xiàn)權(quán)限驗證,需要的朋友可以參考下2023-08-08SpringBoot中如何對actuator進行關(guān)閉
這篇文章主要介紹了SpringBoot中如何對actuator進行關(guān)閉問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問題
本文給大家分享基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問題,需要了解權(quán)限如何加載,權(quán)限匹配規(guī)則和登錄的實現(xiàn)代碼,對Spring Security權(quán)限控制系統(tǒng)相關(guān)知識感興趣的朋友一起看看吧2021-06-06intellij idea如何配置網(wǎng)絡(luò)代理
intellij idea所在的這臺電腦本身上不了網(wǎng),要通過代理上網(wǎng),那么intellij idea怎么設(shè)置代理上網(wǎng)呢?今天通過本文給大家分享intellij idea如何配置網(wǎng)絡(luò)代理,感興趣的朋友一起看看吧2023-10-10