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();
}

}

Java 编程练习:银行账户系统 (OverdraftException 异常处理)

原文地址: https://www.cveoy.top/t/topic/nQhn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录