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

代码说明

  1. Account 类:
    • withdraw() 方法:在余额不足时抛出 OverdraftException 异常,并指明异常原因和赤字的额度。
    • deposit() 方法:返回值修改为 void。
  2. CheckingAccount 类:
    • withdraw() 方法:当允许透支的额度不足以弥补赤字时,会抛出 OverdraftException 异常,抛出异常时需要指明异常原因和赤字的额度。
  3. TestBanking 类:
    • 通过 try-catch 捕获 OverdraftException 异常。
    • 正常流程:输出取款后的余额和下一次允许透支的额度。
    • 异常流程:输出异常发生的原因和赤字额度。

总结

本代码示例展示了如何使用 Java 实现一个简单的银行账户系统,并处理透支异常。通过测试案例,可以更好地理解代码的逻辑和功能。

Java 银行账户系统:透支异常处理和测试

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

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