欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

扩展练习、实现更为复杂的透支保护机制

程序员文章站 2022-06-28 16:57:01
使用客户储蓄账户完成透支保护。实训目的:继承、多态、方法的重写。说明:修改SavingAccount类1.仿照练习1“Account类的两个子类”一节实现SavingsAccount类。2.SavingAccount类必须扩展Account类。3.该类必须包含一个类型为double的interestRate属性4.该类必须包括一个带有两个参数(balance和interest_rate)的公有构造器。该构造器必须通过调用super(balance)来将balance参数传递给父类构造器修...

使用客户储蓄账户完成透支保护。
扩展练习、实现更为复杂的透支保护机制

实训目的:
继承、多态、方法的重写。
说明:
修改SavingAccount类
1.仿照练习1“Account类的两个子类”一节实现SavingsAccount类。
2.SavingAccount类必须扩展Account类。
3.该类必须包含一个类型为double的interestRate属性
4.该类必须包括一个带有两个参数(balance和interest_rate)的公有构造器。该构造器必须通过调用super(balance)来将balance参数传递给父类构造器
修改CheckingAccount类
1.仿照练习1“Account类的两个子类”一节实现CheckingAccount类。
2.CheckingAccount类必须扩展Account类
3.该类必须包括一个关联属性,称作protectedBy,表示透支保护。该属性的类型为SavingAccount,缺省值必须是null。除此之外该类没有其他的数据属性。
4.该类必须包括一个带有参数(balance)的公有构造器,该构造器必须通过调用super(balance)将balance参数传递到父类构造器。
5.修改构造器为CheckingAccount(double balance,SavingAccount protect)构造器。该构造器必须通过调用super(balance)将balance参数传递给父类构造器。
6. CheckingAccount类必须覆盖withdraw方法。该类必须执行下面的检查:如果当前余额足够弥补取款amount,则正常进行。如果不够弥补但是存在透支保护则尝试用储蓄账户来弥补这个差值(balance-amount)。如果后一个交易失败,则整个交易一定失败,但余额未受影响。
扩展练习、实现更为复杂的透支保护机制

修改Customer类,使其拥有两个账户:一个储蓄账户和一个支票账户:两个都是可选的。
在模块四的基础上修改,原来的Customer类包含一个称作account的关联属性,可用该属性控制一个Account对象。重写这个类,使其包含两个关联属性:
savingAccount和checkingAccount,这两个属性的缺省值是null
2.包含两个访问方法:getSaving和getChecking,这两个方法分别返回储蓄和支票总数。
7. 包含两个相反的方法:SetSaving和setChecking,这两个方法分别为savingAccount和checkingAccount这两个关联属性赋值。
8.
完成TestBanking5_2程序并运行

CheckingAccount 类:

package banking;

public class CheckingAccount extends Account{

	
	// 关联属性,表示透支保护
	private SavingAccount protectedBy = null;
	
	public CheckingAccount(double balance) {
		super(balance);
	}
	public CheckingAccount(double balance,SavingAccount protect) {
		super(balance);
		this.protectedBy = protect;
	}
	@Override
	public boolean withdraw(double amt) {
		// 如果当前余额足够弥补取款amount,则正常进行
		if (super.getBalance() >= amt) {
			this.balance-=amt;
			return true;
		}else if (protectedBy !=null) {  // 如果不够弥补但是存在透支保护,
			// 则尝试用储蓄账户来弥补这个差值(balance-amount)
			if (super.getBalance()+protectedBy.getBalance() >= amt){
				amt -=this.balance;
				double savingAccountMoney = protectedBy.getBalance();
				 savingAccountMoney-=amt;
				 protectedBy.balance=savingAccountMoney;
				 //System.out.println(protectedBy.getBalance());
				// 对balance设置值为0
				this.balance = 0.0;
				//System.out.println(super.getBalance());
				return true;
			}
		}
		return false;
	}
}

Customer 类:

package banking;

public class Customer {

	private String firstName;
	private String lastName;
	private Account[] accounts;
	private Bank bank;
	
	private SavingAccount savingAccount;
	private CheckingAccount checkingAccount;
	// 记录账户个数
	private int numberOfAccounts;
	// 构造方法
	public Customer(String firstName,String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
		accounts = new Account[5];
		numberOfAccounts = 0;
	}
	
	public SavingAccount SetSaving(double balance,double interestRate) {
		return this.savingAccount = new SavingAccount(balance, interestRate);
	}
	// 返回储蓄总数
	public double getSaving() {
		return savingAccount.getBalance();
	}
	// 不存在透支保护的账户
	public CheckingAccount setChecking(double balance) {
		return this.checkingAccount = new CheckingAccount(balance);
	}
	// 存在透支保护的账户
	public CheckingAccount setChecking(double balance,SavingAccount savingAccount) {
		return this.checkingAccount = new CheckingAccount(balance,savingAccount);
	}
	// 返回支票总数
	public double getChecking() {
		return checkingAccount.getBalance();
	}
	public void addAccount(Account account) {
		accounts[numberOfAccounts] = account;
		numberOfAccounts++;
	}
	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}

	// 返回指定账户
	public Account getAccount(int index) {
		return accounts[index];
	}
	// 返回账户个数
	public int getNumOfAccounts() {
		return numberOfAccounts;
	}
}

TestBanking5_2 类:

package banking;

public class TestBanking5_2 {

	public static void main(String[] args) {
		
		// 创建一个银行对象
		Bank bank = new Bank();
		Customer customer;
		CheckingAccount checkingAccount;
		SavingAccount savingAccount;
		// 用于保存每次操作的结果
		boolean result = false;
		
		// 1 在银行对象里增加客户,Customer会创建一个对象
		bank.addCustomer("Simms", "Jane");
		// 2 获取刚创建的客户对象
		customer = bank.getCustomer(0);
		// 3 为客户创建一个储蓄账户
		savingAccount = customer.SetSaving(500.0, 0);
		// 4 为客户创建一个支票账户,并将客户的储蓄账户作为其可透支的对象
		checkingAccount = customer.setChecking(200.0,savingAccount);
		// 5 将创建的账户绑定给客户
		customer.addAccount(checkingAccount);
        // 通过1-5步,将Bank,Customer,Account和Account两个子类联系在一起。
		System.out.println("Customer [Simms, Jane] has a checking balance of 200.0 "
				+ "and a savings balance of 500.0");
		result = checkingAccount.withdraw(150.0);
		System.out.println("Checking Acct [Jane Simms] : withdraw 150.00 succeeds?"+result);
		result = checkingAccount.deposit(22.50);
		System.out.println("Checking Acct [Jane Simms] : deposit 22.50 succeeds?"+result);
		result = checkingAccount.withdraw(147.62);
		System.out.println("Checking Acct [Jane Simms] : withdraw 147.62 succeeds?"+result);
		
		System.out.println("Customer ["+customer.getFirstName()+","+customer.getLastName()+"] has a checking balance of " +customer.getChecking() + " and a savings balance of "+customer.getSaving());
		
		
		bank.addCustomer("Bryant", "Owen");
		customer = bank.getCustomer(1);
		checkingAccount = customer.setChecking(200.0);
		result = checkingAccount.withdraw(100.0);
		System.out.println("Checking Acct [Owen Bryant] : withdraw 100.00 succeeds? "+result);
		result = checkingAccount.deposit(25.00);
		System.out.println("Checking Acct [Owen Bryant] : deposit 25.00 succeeds? "+result);
		result = checkingAccount.withdraw(175.00);
		System.out.println("Checking Acct [Owen Bryant] : withdraw 175.00 succeeds? "+result);
		System.out.println("Customer ["+customer.getFirstName()+","+customer.getLastName()
		+"] has a checking balance of "+checkingAccount.getBalance());
		
	}

}

在上一个拓展项目的基础上仅仅修改了CheckingAccount和Customer类,其余类均为变动。
扩展练习、实现更为复杂的透支保护机制

本文地址:https://blog.csdn.net/qq_44781756/article/details/110207374

相关标签: Java # 作业