Java 银行账户系统:透支异常处理和测试
Java 银行账户系统:透支异常处理和测试
本代码示例展示了如何使用 Java 实现一个简单的银行账户系统,包括账户类、储蓄账户类、支票账户类,以及如何处理透支异常。代码包含完整的测试案例,可以方便地进行测试和学习。
代码示例
Account 类
package step2;
import step1.OverdraftException;
public class Account {
protected double balance;
public Account(double balance) {
this.balance = balance;
}
public Account() {
this(1000);
}
// 存钱
public void deposit(double amount) {
balance += amount;
}
// 修改 withdraw() 方法
public void withdraw(double amount) throws OverdraftException {
if (balance < amount) {
throw new OverdraftException('Transaction Fails!', amount - balance);
} else {
balance -= amount;
}
}
public double getBalance() {
return balance;
}
}
CheckingAccount 类
package step2;
import step1.OverdraftException;
public class CheckingAccount extends Account {
private double overdraftAmount;// 代表允许透支的额度
public CheckingAccount(double initBalance, double overdraftAmount) {
super(initBalance);
this.overdraftAmount = overdraftAmount;
}
public CheckingAccount(double initBalance) {
this(initBalance, 0.0);
}
public double getOverdraftAmount() {
return overdraftAmount;
}
@Override
// 修改 withdraw() 方法
public void withdraw(double amount) throws OverdraftException {
if (balance < amount) {
double overdraftNeeded = amount - balance; // 计算还差多少钱
if (overdraftAmount < overdraftNeeded) {
double deficit = overdraftNeeded - overdraftAmount;
throw new OverdraftException('Transaction Fails!', deficit);
} else {
// 允许透支的额度足够支付
balance = 0.0;
// 计算下一次允许透支的额度
overdraftAmount -= overdraftNeeded;
}
} else {
// 卡内余额足够支付要取的额度
balance -= amount;
}
}
}
TestBanking 类
package step2;
import step1.OverdraftException;
import java.util.Scanner;
public class TestBanking {
public static void main(String[] args) {
// 数据的输入
Scanner sc = new Scanner(System.in);
double wamount = sc.nextDouble();
// 数据的初始化:客户+账户
Bank.addCustomer('Zhang', 'san');
Customer cus1 = Bank.getCustomer(0);
cus1.addAccount(new SavingsAccount(5000, 0.017));
cus1.addAccount(new CheckingAccount(3000, 2000));
Bank.addCustomer('Li', 'si');
Customer cus2 = Bank.getCustomer(1);
cus2.addAccount(new CheckingAccount(2000, 5000));
for (int i = 0; i < Bank.getNumberOfCustomers(); i++) {
Customer cus = Bank.getCustomer(i);
System.out.println(cus);
for (int j = 0; j < cus.getNumberOfAccounts(); j++) {
Account acc = cus.getAccount(j);
// 请使用 try-catch 捕获 OverdraftException
System.out.printf('%d: 初始余额是->%.2f
', (j + 1), acc.getBalance());
if (acc instanceof SavingsAccount) {
SavingsAccount sa = (SavingsAccount) acc;
sa.accumulateInterestRate();
System.out.printf('计算利息后的余额是->%.2f
', sa.getBalance());
} else if (acc instanceof CheckingAccount) {
CheckingAccount ca = (CheckingAccount) acc;
try {
System.out.printf('允许透支的额度是->%.2f
', ca.getOverdraftAmount());
ca.withdraw(wamount);
System.out.printf('取款后的余额是->%.2f
', ca.getBalance());
System.out.printf('下一次允许透支的额度是->%.2f
', ca.getOverdraftAmount());
} catch (OverdraftException e) {
System.out.println(e.getMessage());
System.out.printf('赤字是->%.2f
', e.getDeficit());
}
} else {
try {
acc.withdraw(wamount);
System.out.printf('取款后的余额是->%.2f
', acc.getBalance());
} catch (OverdraftException e) {
System.out.println(e.getMessage());
System.out.println(e.getDeficit());
}
}
}
}
sc.close();
}
}
测试说明
平台将包含 Customer 类、Bank 类、SavingsAccount 类,并自动编译补全后的代码,生成若干组测试数据,接着根据程序的输出判断程序是否正确。
测试输入
6000
预期输出
[Zhang, san]
1: 初始余额是->5000.00
计算利息后的余额是->5085.00
2: 初始余额是->3000.00
允许透支的额度是->2000.00
Transaction Fails!
赤字是->1000.00
[Li, si]
1: 初始余额是->2000.00
允许透支的额度是->5000.00
取款后的余额是->0.00
下一次允许透支的额度是->1000.00
代码说明
- Account 类:
- withdraw() 方法:在余额不足时抛出 OverdraftException 异常,并指明异常原因和赤字的额度。
- deposit() 方法:返回值修改为 void。
- CheckingAccount 类:
- withdraw() 方法:当允许透支的额度不足以弥补赤字时,会抛出 OverdraftException 异常,抛出异常时需要指明异常原因和赤字的额度。
- TestBanking 类:
- 通过 try-catch 捕获 OverdraftException 异常。
- 正常流程:输出取款后的余额和下一次允许透支的额度。
- 异常流程:输出异常发生的原因和赤字额度。
总结
本代码示例展示了如何使用 Java 实现一个简单的银行账户系统,并处理透支异常。通过测试案例,可以更好地理解代码的逻辑和功能。
原文地址: https://www.cveoy.top/t/topic/nQht 著作权归作者所有。请勿转载和采集!