iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
佛心分享-SideProject30

從0開始—初階程式語言學習者的必經之路系列 第 17

DAY17銀行系統延伸—如何使用Java處理多個帳戶

  • 分享至 

  • xImage
  •  

測試程序:

1. 創建多個帳戶,進行各種操作並檢查結果是否符合預期:

  1. 創建帳戶並進行存款、取款操作

    • 創建兩個帳戶,帳戶號分別為 "123456""654321",持有人分別為 "張三""李四"
    • 對帳戶 "123456" 進行存款操作,存入 1000 元,然後取款 300 元,檢查餘額是否為 700 元。
    • 對帳戶 "654321" 進行存款操作,存入 2000 元,然後取款 500 元,檢查餘額是否為 1500 元。
    • 檢查每個帳戶的交易記錄,確認交易類型、金額和日期是否正確記錄。

    預期結果

    • 帳戶 "123456" 的最終餘額應為 700 元,交易記錄應顯示一次存款和一次取款。
    • 帳戶 "654321" 的最終餘額應為 1500 元,交易記錄應顯示一次存款和一次取款。
  2. 查詢餘額

    • 分別查詢兩個帳戶的餘額。
    • 檢查結果是否與前面操作後的預期餘額一致。

    預期結果

    • 帳戶 "123456" 的餘額應顯示 700 元。
    • 帳戶 "654321" 的餘額應顯示 1500 元。

2. 測試在各種異常情況下程序的表現:

  1. 測試餘額不足的情況

    • 對帳戶 "123456" 進行取款操作,取出 800 元(超過現有餘額 700 元)。

    預期結果

    • 程序應該提示「餘額不足」,並且餘額不應改變,仍保持 700 元。
    • 該次取款操作不應記錄在交易記錄中。
  2. 測試無效帳戶號的情況

    • 嘗試查詢一個不存在的帳戶(如 "000000"),或者進行存款/取款操作。

    預期結果

    • 程序應該提示「無效帳戶號」,並且不應對不存在的帳戶進行任何操作。
  3. 測試無效操作的情況

    • 嘗試輸入無效的操作符號(如 #)或其他不相關的操作。

    預期結果

    • 程序應該提示「無效操作」或要求重新輸入有效選項。

程式如下⬇️
import java.util.ArrayList;
import java.util.Date;

class Transaction {
private String type;
private double amount;
private Date date;

public Transaction(String type, double amount) {
    this.type = type;
    this.amount = amount;
    this.date = new Date();  // 記錄交易的當前時間
}

public String toString() {
    return date.toString() + ": " + type + " " + amount;
}

}

class Account {
private String accountNumber;
private String ownerName;
private double balance;
private ArrayList transactions;

public Account(String accountNumber, String ownerName) {
    this.accountNumber = accountNumber;
    this.ownerName = ownerName;
    this.balance = 0.0;
    this.transactions = new ArrayList<>();
}

public void deposit(double amount) {
    if (amount > 0) {
        balance += amount;
        transactions.add(new Transaction("Deposit", amount));
        System.out.println("成功存入 " + amount + " 元。");
    } else {
        System.out.println("存款金額無效!");
    }
}

public void withdraw(double amount) {
    if (amount > 0 && balance >= amount) {
        balance -= amount;
        transactions.add(new Transaction("Withdraw", amount));
        System.out.println("成功取出 " + amount + " 元。");
    } else if (amount > balance) {
        System.out.println("餘額不足!");
    } else {
        System.out.println("取款金額無效!");
    }
}

public double getBalance() {
    return balance;
}

public void printTransactions() {
    System.out.println("帳戶 " + accountNumber + " 的交易記錄:");
    for (Transaction t : transactions) {
        System.out.println(t);
    }
}

}

public class BankTest {
public static void main(String[] args) {
// 創建兩個帳戶
Account account1 = new Account("123456", "張三");
Account account2 = new Account("654321", "李四");

    // 進行存款和取款操作
    account1.deposit(1000);
    account1.withdraw(300);
    account2.deposit(2000);
    account2.withdraw(500);

    // 查詢餘額並檢查結果
    System.out.println("帳戶 " + account1.getBalance() + " 的餘額為 " + account1.getBalance() + " 元。");
    System.out.println("帳戶 " + account2.getBalance() + " 的餘額為 " + account2.getBalance() + " 元。");

    // 打印交易記錄
    account1.printTransactions();
    account2.printTransactions();

    // 測試異常情況
    account1.withdraw(800);  // 餘額不足
    Account invalidAccount = null;
    if (invalidAccount == null) {
        System.out.println("無效帳戶號!");
    }

    char invalidOperation = '#';
    if (invalidOperation != 'D' && invalidOperation != 'W') {
        System.out.println("無效操作!");
    }
}

}

###語法說明:

1.	類的定義:
•	使用 class 關鍵字定義了三個類:Transaction、Account 和 BankTest。每個類分別封裝了交易記錄、帳戶操作和測試邏輯。
2.	構造函數:
•	Transaction 和 Account 類中使用了構造函數(例如 public Transaction(String type, double amount))來初始化對象的屬性。
3.	屬性和方法:
•	在 Account 類中,屬性 balance 是私有的(private),只能通過公共方法 deposit() 和 withdraw() 來修改,這是面向對象編程中的封裝概念。
4.	控制流:
•	使用 if-else 語句來處理條件判斷,如驗證存款和取款金額的有效性,以及處理餘額不足和無效操作的情況。
5.	集合類型:
•	使用 ArrayList<Transaction> 來存儲多個交易記錄。ArrayList 是 Java 中的集合類,用於動態存儲數據。
6.	日期處理:
•	使用 new Date() 來記錄交易的發生時間,並將其保存在 Transaction 對象中。
7.	打印輸出:
•	使用 System.out.println() 來輸出信息,方便在控制台檢查程序運行結果。

上一篇
DAY16 熟悉 Java 中的面向對象編程概念—簡易銀行系統模擬
下一篇
DAY18別依賴Google表單~製作屬於自己的表單吧
系列文
從0開始—初階程式語言學習者的必經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言