Java 编程练习:银行账户系统 (OverdraftException 异常处理)
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()方法
/********** Begin *********/
public void withdraw(double amount) throws OverdraftException {
if (balance < amount) {
throw new OverdraftException('Transaction Fails!', amount - balance);
} else {
balance -= amount;
}
}
/********** End *********/
public double getBalance() {
return balance;
}
} 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()方法
/********** Begin *********/
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; } } } 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
/********** Begin *********/
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()); } }
/********** End *********/
}
}
sc.close();
}
}
原文地址: https://www.cveoy.top/t/topic/nQhn 著作权归作者所有。请勿转载和采集!