我們可以做一個簡易銀行賬戶類,支持存款、取款、查看交易記錄等。
示例:BankAccount 類
java
復制
編輯
public class BankAccount {
private String accountNumber; // 賬號
private String ownerName; // 開戶人姓名
private double balance; // 余額
private String[] transactions; // 交易記錄
private int transactionCount; // 已記錄交易數量
// 構造方法
public BankAccount(String accountNumber, String ownerName, double initialBalance, int maxTransactions) {this.accountNumber = accountNumber;this.ownerName = ownerName;this.balance = initialBalance;this.transactions = new String[maxTransactions];this.transactionCount = 0;addTransaction("開戶,初始余額: " + initialBalance);
}// 獲取余額
public double getBalance() {return balance;
}// 存款
public void deposit(double amount) {if (amount > 0) {balance += amount;addTransaction("存款: +" + amount);} else {System.out.println("存款金額必須大于 0");}
}// 取款
public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;addTransaction("取款: -" + amount);} else {System.out.println("取款失敗,金額無效或余額不足");}
}// 添加交易記錄
private void addTransaction(String record) {if (transactionCount < transactions.length) {transactions[transactionCount] = record;transactionCount++;} else {System.out.println("交易記錄已滿,無法記錄更多交易");}
}// 打印交易記錄
public void printTransactions() {System.out.println("賬戶 [" + accountNumber + "] 的交易記錄:");for (int i = 0; i < transactionCount; i++) {System.out.println((i + 1) + ". " + transactions[i]);}
}
}
使用示例
java
復制
編輯
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount(“1001”, “Alice”, 1000.0, 10);
account.deposit(500.0);account.withdraw(300.0);account.withdraw(1500.0); // 測試余額不足System.out.println("當前余額: " + account.getBalance());account.printTransactions();
}
}
你可以用它練習的業務場景
多賬戶管理
創建多個 BankAccount 對象,存款、取款,最后統計所有賬戶總余額。
賬戶轉賬功能
編寫一個方法 transfer(BankAccount target, double amount) 實現賬戶之間轉賬。
交易明細查詢
根據交易記錄查找某一天的交易(可以用字符串包含日期判斷)。
存取款限額系統
限制每天的存款或取款次數,測試業務規則。
您說:
麻煩幫我實現一個賬戶轉賬功能
ChatGPT 說:
好的 👍
我們就在剛才的 BankAccount 類里加一個 transfer() 方法,實現賬戶之間的轉賬功能,并且讓交易記錄兩邊都能保存。
更新版 BankAccount 類(帶轉賬功能)
java
復制
編輯
public class BankAccount {
private String accountNumber; // 賬號
private String ownerName; // 開戶人姓名
private double balance; // 余額
private String[] transactions; // 交易記錄
private int transactionCount; // 已記錄交易數量
// 構造方法
public BankAccount(String accountNumber, String ownerName, double initialBalance, int maxTransactions) {this.accountNumber = accountNumber;this.ownerName = ownerName;this.balance = initialBalance;this.transactions = new String[maxTransactions];this.transactionCount = 0;addTransaction("開戶,初始余額: " + initialBalance);
}// 獲取余額
public double getBalance() {return balance;
}// 存款
public void deposit(double amount) {if (amount > 0) {balance += amount;addTransaction("存款: +" + amount);} else {System.out.println("存款金額必須大于 0");}
}// 取款
public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;addTransaction("取款: -" + amount);} else {System.out.println("取款失敗,金額無效或余額不足");}
}// 轉賬
public void transfer(BankAccount target, double amount) {if (target == null) {System.out.println("轉賬失敗:目標賬戶不存在");return;}if (amount <= 0) {System.out.println("轉賬金額必須大于 0");return;}if (amount > this.balance) {System.out.println("轉賬失敗:余額不足");return;}// 扣款this.balance -= amount;addTransaction("向賬戶[" + target.accountNumber + "] 轉賬: -" + amount);// 對方賬戶增加余額target.balance += amount;target.addTransaction("來自賬戶[" + this.accountNumber + "] 的轉賬: +" + amount);System.out.println("轉賬成功:" + this.accountNumber + " → " + target.accountNumber + " 金額: " + amount);
}// 添加交易記錄
private void addTransaction(String record) {if (transactionCount < transactions.length) {transactions[transactionCount] = record;transactionCount++;} else {System.out.println("交易記錄已滿,無法記錄更多交易");}
}// 打印交易記錄
public void printTransactions() {System.out.println("賬戶 [" + accountNumber + "] 的交易記錄:");for (int i = 0; i < transactionCount; i++) {System.out.println((i + 1) + ". " + transactions[i]);}
}
}
測試代碼
java
復制
編輯
public class Main {
public static void main(String[] args) {
BankAccount acc1 = new BankAccount(“1001”, “Alice”, 1000.0, 10);
BankAccount acc2 = new BankAccount(“1002”, “Bob”, 500.0, 10);
acc1.transfer(acc2, 300.0); // 成功acc1.transfer(acc2, 2000.0); // 余額不足acc1.transfer(acc2, -50); // 金額非法System.out.println("\n---賬戶余額---");System.out.println(acc1.getBalance());System.out.println(acc2.getBalance());System.out.println("\n---交易記錄---");acc1.printTransactions();acc2.printTransactions();
}
}
運行示例輸出
markdown
復制
編輯
轉賬成功:1001 → 1002 金額: 300.0
轉賬失敗:余額不足
轉賬金額必須大于 0
—賬戶余額—
700.0
800.0
—交易記錄—
賬戶 [1001] 的交易記錄:
- 開戶,初始余額: 1000.0
- 向賬戶[1002] 轉賬: -300.0
賬戶 [1002] 的交易記錄: - 開戶,初始余額: 500.0
- 來自賬戶[1001] 的轉賬: +300.0
我這里還可以幫你加一個轉賬限額功能,比如每天最多轉 3 次、每次不超過 1000 元,這樣更接近真實銀行業務邏輯。
你要我幫你加這個限制版本嗎?這樣就能練習更多業務規則的判斷。
您說:
幫我加這個限制版本吧
ChatGPT 說:
好,那我們就在 BankAccount 里加上每天最多轉 3 次,每次不超過 1000 元的轉賬限制,
這里我用簡單的計數器來模擬每天的限制,不涉及真實日期(方便初學者練習)。
更新版 BankAccount(帶轉賬次數 & 金額限制)
java
復制
編輯
public class BankAccount {
private String accountNumber; // 賬號
private String ownerName; // 開戶人姓名
private double balance; // 余額
private String[] transactions; // 交易記錄
private int transactionCount; // 已記錄交易數量
// 轉賬限制
private int transferCountToday; // 今日已轉賬次數
private static final int MAX_TRANSFER_PER_DAY = 3; // 每天最多轉 3 次
private static final double MAX_TRANSFER_AMOUNT = 1000.0; // 每次最多 1000 元public BankAccount(String accountNumber, String ownerName, double initialBalance, int maxTransactions) {this.accountNumber = accountNumber;this.ownerName = ownerName;this.balance = initialBalance;this.transactions = new String[maxTransactions];this.transactionCount = 0;this.transferCountToday = 0;addTransaction("開戶,初始余額: " + initialBalance);
}public double getBalance() {return balance;
}public void deposit(double amount) {if (amount > 0) {balance += amount;addTransaction("存款: +" + amount);} else {System.out.println("存款金額必須大于 0");}
}public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;addTransaction("取款: -" + amount);} else {System.out.println("取款失敗,金額無效或余額不足");}
}// 轉賬方法(帶限制)
public void transfer(BankAccount target, double amount) {if (target == null) {System.out.println("轉賬失敗:目標賬戶不存在");return;}if (amount <= 0) {System.out.println("轉賬金額必須大于 0");return;}if (amount > this.balance) {System.out.println("轉賬失敗:余額不足");return;}if (amount > MAX_TRANSFER_AMOUNT) {System.out.println("轉賬失敗:單筆轉賬金額不能超過 " + MAX_TRANSFER_AMOUNT + " 元");return;}if (transferCountToday >= MAX_TRANSFER_PER_DAY) {System.out.println("轉賬失敗:今天的轉賬次數已達上限(" + MAX_TRANSFER_PER_DAY + " 次)");return;}// 執行轉賬this.balance -= amount;target.balance += amount;transferCountToday++;addTransaction("向賬戶[" + target.accountNumber + "] 轉賬: -" + amount);target.addTransaction("來自賬戶[" + this.accountNumber + "] 的轉賬: +" + amount);System.out.println("轉賬成功:" + this.accountNumber + " → " + target.accountNumber + " 金額: " + amount);
}private void addTransaction(String record) {if (transactionCount < transactions.length) {transactions[transactionCount] = record;transactionCount++;} else {System.out.println("交易記錄已滿,無法記錄更多交易");}
}public void printTransactions() {System.out.println("賬戶 [" + accountNumber + "] 的交易記錄:");for (int i = 0; i < transactionCount; i++) {System.out.println((i + 1) + ". " + transactions[i]);}
}// 模擬新的一天(重置計數)
public void resetDailyTransferLimit() {transferCountToday = 0;System.out.println("已重置今日轉賬次數");
}
}
測試代碼
java
復制
編輯
public class Main {
public static void main(String[] args) {
BankAccount acc1 = new BankAccount(“1001”, “Alice”, 5000.0, 20);
BankAccount acc2 = new BankAccount(“1002”, “Bob”, 2000.0, 20);
acc1.transfer(acc2, 500); // 成功acc1.transfer(acc2, 200); // 成功acc1.transfer(acc2, 1500); // 超過單筆限額acc1.transfer(acc2, 300); // 成功acc1.transfer(acc2, 100); // 超過每日限額System.out.println("\n---賬戶余額---");System.out.println("Alice: " + acc1.getBalance());System.out.println("Bob: " + acc2.getBalance());System.out.println("\n---交易記錄---");acc1.printTransactions();acc2.printTransactions();// 模擬第二天acc1.resetDailyTransferLimit();acc1.transfer(acc2, 800); // 新的一天又可以轉了
}
}
運行示例輸出
yaml
復制
編輯
轉賬成功:1001 → 1002 金額: 500.0
轉賬成功:1001 → 1002 金額: 200.0
轉賬失敗:單筆轉賬金額不能超過 1000.0 元
轉賬成功:1001 → 1002 金額: 300.0
轉賬失敗:今天的轉賬次數已達上限(3 次)
—賬戶余額—
Alice: 4000.0
Bob: 3000.0
—交易記錄—
賬戶 [1001] 的交易記錄:
- 開戶,初始余額: 5000.0
- 向賬戶[1002] 轉賬: -500.0
- 向賬戶[1002] 轉賬: -200.0
- 向賬戶[1002] 轉賬: -300.0
賬戶 [1002] 的交易記錄: - 開戶,初始余額: 2000.0
- 來自賬戶[1001] 的轉賬: +500.0
- 來自賬戶[1001] 的轉賬: +200.0
- 來自賬戶[1001] 的轉賬: +300.0
已重置今日轉賬次數
轉賬成功:1001 → 1002 金額: 800.0
這樣你就能練習:
成員變量與靜態常量的結合使用
方法參數對象的交互(transfer() 里兩個賬戶對象互相修改)
狀態限制與業務規則(轉賬次數、金額限制)
模擬一天重置操作(resetDailyTransferLimit())
如果你想,我還可以幫你把這個轉賬限制改成真正基于日期判斷,這樣就不需要手動調用 resetDailyTransferLimit() 了,更貼近真實銀行邏輯。