首頁 > Java > java教程 > 主體

Java實作ATM模擬系統的步驟及程式碼範例

王林
發布: 2023-04-24 18:19:08
轉載
1712 人瀏覽過

一、概述​​

(1)選題分析

(2) 開發環境

開發環境,選擇IDEA此Java開發軟體,基於JDK1.8版本,在本機window上開發本ATM模擬程式。

二、程式概要設計

(1) 功能模組設計

經過題目的分析,把本ATM模擬程式分成管理員端與使用者模式兩大模組。其中,管理員具有查詢所有帳戶、匯出所有帳戶資訊到文件、登出功能。使用者模組具有查詢餘額、ATM轉帳、ATM存款、ATM提款、修改密碼、查詢交易記錄、匯出記錄、退卡等功能。

系統的總功能模組圖如下:

Java實作ATM模擬系統的步驟及程式碼範例

(2)流程圖

系統的總流程為:使用者透過主介面選擇管理員登入或使用者模式登錄,然後輸入系統設定的帳號密碼登入。登入成功後,進入對應的主功能頁面進行相關操作。

管理員登入後台時,判斷密碼和帳號是否正確,正確則進行登錄,否則提示失敗。登入進入背景,可以操作查看所有使用者功能,然後系統將查詢所有設定的使用者資訊並進行輸出到控制檯面板。點選匯出記錄功能,將把所有帳戶資訊輸出到目前jar程式同級目錄下的txt檔案。

使用者登入時,判斷帳號密碼是否正確,不正確,則帳號錯誤次數 1,當次數達到3時,該帳號將會被鎖定,無法登入。輸入的帳密正確時,判斷帳戶是否被鎖定,沒有鎖定則進行登錄,跳轉用戶主介面,並進行相關操作功能。

管理員模組流程圖如下:

Java實作ATM模擬系統的步驟及程式碼範例

使用者模組總流程圖如下:

Java實作ATM模擬系統的步驟及程式碼範例

# (3) 文件結構和類別的設計

本ATM模擬程式使用idea編輯軟體開發。項目分為admin(管理員)、customer(使用者)、data(ATM資料)三個套件。

其中admin套件下編寫了AdminManage類,負責初始化管理員介面,同時實作管理員的所有功能。 Customer套件下的customer類別實現了使用者模組的介面,定義了相關操作按鈕,以及實現了各自監聽的功能,為了減少介面的設計,在使用者介面中間使用了輸出資訊面板,如此功能結果在面板中列印出來,模擬了atm機的介面資訊。

Data套件下分別有ATMData類別、Card類別和CustomerAccount類別。 Card類別是使用者的銀行卡的程式碼體現,把銀行卡的相關資訊封裝成一個基本Java對象,符合Java物件導向的特性。其中customerAccount是card類的子類,在card的基礎上,增加了許多使用者行為,比如說存款、提款、查詢餘額等。 ATMData類是本程式十分重要的類,它封裝了本程式的所有初始帳戶訊息,還有轉帳、取得所有帳戶、登入等操作。這樣設計,可以把資料處理和介面的設計分離來,避免使用者介面的程式碼過多過長。

檔案結構如下圖,其中resource資料夾下存放了本程式所需的圖片資訊:

Java實作ATM模擬系統的步驟及程式碼範例

#三、程式詳細設計

本系統功能模組不在此一一詳寫,列舉了幾個主要的功能進行描述:

(1) 取款功能

取款功能的程式碼設計在customerAccount類別中,傳入參數為取款的金額。先判斷金額是否為100的倍數,然後判斷是否大於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) 存款功能

此方法參數為存入的金額,首先判斷金額是否為100的倍數,驗證通過則重新計算目前帳戶的餘額,然後將交易記錄在目前的帳戶上。

核心程式碼邏輯如下:

 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) 使用者登入功能

使用者登入方法的入參為帳號與密碼,首先判斷帳號是否存在,將入參與系統設定好的所有帳戶進行匹配,如果沒有,則失敗。如果有則判斷該帳戶是否被鎖定,被鎖定不能登錄,沒被鎖定則判斷密碼是否正確,不正確則使當前的帳戶的錯誤次數 1(如果帳戶錯誤次數=3,則鎖定帳戶)。密碼正確則登入成功跳轉主介面。

核心程式碼如下:

//是否存在帳號

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)) {
    //重置错误次数
    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。其中後兩個為錯誤數據。單次提款不能超5000元,後面當餘額3000時取款5000,測試取款不能透支功能。

測試結果:

Java實作ATM模擬系統的步驟及程式碼範例

Java實作ATM模擬系統的步驟及程式碼範例

Java實作ATM模擬系統的步驟及程式碼範例

Java實作ATM模擬系統的步驟及程式碼範例

#由此可知,此功能正常,輸入合法以及不合法的資料測試的結果均與預期相符合。

(2) ATM轉帳

轉帳測試,目標帳戶必須存在,同時餘額大於要轉帳的金額,不能透支。測試資料為輸入一個不存在的帳戶、以及大於當前餘額的轉帳金額。

輸入不存在帳戶測試結果如下:

Java實作ATM模擬系統的步驟及程式碼範例

輸入正常帳戶和金額測試結果如下,此時登入目標帳戶,查詢交易記錄可知轉帳已經成功到達目標帳戶。

Java實作ATM模擬系統的步驟及程式碼範例

Java實作ATM模擬系統的步驟及程式碼範例

輸入大於目前餘額的錯誤數據,測試結果如下,可知轉帳功能測試正常。

Java實作ATM模擬系統的步驟及程式碼範例

(3) 修改密碼

修改密碼必須輸入原始密碼,相同才能修改。新密碼必須大於6位,同時6位不能完全相同。第三次輸入的密碼為確認新密碼,需與第二次輸入的密碼相同。

原始密碼都是123456,輸入錯誤資料111111,測試如下:

Java實作ATM模擬系統的步驟及程式碼範例

Java實作ATM模擬系統的步驟及程式碼範例

輸入小於6位元的數據,以及正確輸入正常資料的測試結果分別如下:

Java實作ATM模擬系統的步驟及程式碼範例

Java實作ATM模擬系統的步驟及程式碼範例

#

以上是Java實作ATM模擬系統的步驟及程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!