首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 類別實戰:銀行帳戶系統的設計與測試

     編輯:Java 綜合教學

Java 類別實戰:銀行帳戶系統的設計與測試

本文透過設計一個 Account 類別,完整示範「封裝資料、提供業務行為、主程式測試」的 Java 物件導向開發流程。涵蓋存款、提款、餘額查詢核心功能,並處理提款餘額不足等業務邏輯。

類別設計

Account 類別

public class Account {
    private String accountNumber;  // 帳號
    private String ownerName;      // 戶名
    private double balance;        // 餘額

    // 建構子
    public Account(String accountNumber, String ownerName, double initialBalance) {
        this.accountNumber = accountNumber;
        this.ownerName = ownerName;
        this.balance = initialBalance;
    }

    // 存款
    public void deposit(double amount) {
        if (amount <= 0) throw new IllegalArgumentException("存款金額必須為正數");
        balance += amount;
        System.out.printf("%s 您的帳號 %s 存入 %.2f 元,現有餘額 %.2f 元%n",
                ownerName, accountNumber, amount, balance);
    }

    // 提款
    public void withdraw(double amount) {
        if (amount <= 0) throw new IllegalArgumentException("提款金額必須為正數");
        if (balance >= amount) {
            balance -= amount;
            System.out.printf("%s 您的帳號 %s 提出 %.2f 元,現有餘額 %.2f 元%n",
                    ownerName, accountNumber, amount, balance);
        } else {
            System.out.printf("%s 您的帳號 %s 餘額不足!目前餘額 %.2f 元%n",
                    ownerName, accountNumber, balance);
        }
    }

    // 餘額查詢
    public double getBalance() {
        return balance;
    }

    // Getter
    public String getAccountNumber() { return accountNumber; }
    public String getOwnerName() { return ownerName; }
}

主程式測試

public class BankTest {
    public static void main(String[] args) {
        // 建立兩個帳戶
        Account acc1 = new Account("622848123456789", "張三", 587.54);
        Account acc2 = new Account("622848987654321", "李四", 87.54);

        // 測試提款:餘額不足
        acc1.withdraw(600.0);  // 餘額不足
        System.out.println(acc1.getOwnerName() + " 餘額 = " + acc1.getBalance());

        // 測試存款
        acc1.deposit(1000);    // 存入 1000

        // 查詢兩個帳戶餘額
        System.out.println(acc1.getOwnerName() + " 的帳戶餘額:" + acc1.getBalance());
        System.out.println(acc2.getOwnerName() + " 的帳戶餘額:" + acc2.getBalance());
    }
}

執行結果

張三 您的帳號 622848123456789 餘額不足!目前餘額 587.54 元
張三 餘額 = 587.54
張三 您的帳號 622848123456789 存入 1000.00 元,現有餘額 1587.54 元
張三 的帳戶餘額:1587.54
李四 的帳戶餘額:87.54

設計亮點

  1. 資料封裝:核心欄位 private,防止外部任意修改餘額導致帳目錯亂。
  2. 業務邏輯內聚:提款時自動檢查餘額,存款驗證金額合法性,符合單一職責原則。
  3. 建構子確保有效初始狀態:避免帳號、戶名為 null 或餘額為負的無效物件。
  4. 例外處理雛形:對非法參數拋出 IllegalArgumentException,比單純印出錯誤訊息更利於上層捕捉處理。

進階擴充方向

  • 引入 Transaction 類別記錄每筆交易明細(時間、類型、金額、餘額)。
  • 使用 BigDecimal 替代 double 避免浮點精度問題。
  • 實作介面 BankService,支援多種帳戶實作(儲蓄、信用、投資)。
  • 加入並發控制(synchronized 或 ReentrantLock),確保多執行緒環境下帳目正確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved