实验题目
在银行项目中创建 Account 的两个子类:SavingsAccount 和 CheckingAccount
实验目的
继承、多态、方法的重写。
提 示
创建 Account 类的两个子类:SavingsAccount 和 CheckingAccount 子类。
- 修改 Account 类;将 balance 属性的访问方式改为 protected。
- 创建 SavingsAccount 类,该类继承 Account 类。
- 该类必须包含一个类型为 double 的 interestRate 属性。
- 该类必须包括带有两个参数(balance 和 interest_rate)的公有构造器。该 构 造器必须通过调用 super(balance)将 balance 参数传递给父类构造器。
实现 CheckingAccount 类。
- CheckingAccount 类必须扩展 Account 类。
- 该类必须包含一个类型为 double 的 overdraftProtection 属性。
- 该类必须包含一个带有参数(balance)的共有构造器。该构造器必须通过调 用 super(balance)将 balance 参数传递给父类构造器。
- 给类必须包括另一个带有两个参数(balance 和 protect)的公有构造器。该 构造器必须通过调用 super(balance)并设置 overdragtProtection 属性, 将 balance 参数传递给父类构造器。
- CheckingAccount 类必须覆盖 withdraw 方法。此方法必须执行下列检 查。如 果当前余额足够弥补取款 amount,则正常进行。如果不够弥补但是 存在透支 保护,则尝试用 overdraftProtection 得值来弥补该差值 (balance-amount). 如果弥补该透支所需要的金额大于当前的保护级别。 则整个交易失败,但余 额未受影响。
- 在主 exercise1 目录中,编译并执行 TestBanking 程序。输出应为:
CreatingthecustomerJaneSmith. CreatingherSavingsAccountwitha500.00balanceand3%interest. CreatingthecustomerOwenBryant. CreatinghisCheckingAccountwitha500.00balanceandnooverdraftprotection. CreatingthecustomerTimSoley. CreatinghisCheckingAccountwitha500.00balanceand500.00inoverdraftprotection. CreatingthecustomerMariaSoley. MariasharesherCheckingAccountwithherhusbandTim. RetrievingthecustomerJaneSmithwithhersavingsaccount. Withdraw150.00: trueDeposit22.50: trueWithdraw47.62: trueWithdraw400.00: falseCustomer [Simms, Jane] hasabalanceof324.88RetrievingthecustomerOwenBryantwithhischeckingaccountwithnooverdraftprotection. Withdraw150.00: trueDeposit22.50: trueWithdraw47.62: trueWithdraw400.00: falseCustomer [Bryant, Owen] hasabalanceof324.88RetrievingthecustomerTimSoleywithhischeckingaccountthathasoverdraftprotection. Withdraw150.00: trueDeposit22.50: trueWithdraw47.62: trueWithdraw400.00: trueCustomer [Soley, Tim] hasabalanceof0.0RetrievingthecustomerMariaSoleywithherjointcheckingaccountwithhusbandTim. Deposit150.00: trueWithdraw750.00: falseCustomer [Soley, Maria] hasabalanceof150.0
代码
【Account.java】类
packagebanking; publicclassAccount { protecteddoublebalance; //银行帐户的当前(或即时)余额//公有构造器 ,这个参数为 balance 属性赋值publicAccount(doubleinit_balance) { this.balance=init_balance; } //用于获取经常余额publicdoublegetBalance() { returnbalance; } /*** 向当前余额增加金额* @param amt 增加金额* @return 返回 true(意味所有存款是成功的)*/publicbooleandeposit(doubleamt){ balance+=amt; returntrue; } /*** 从当前余额中减去金额* @param amt 提款数目* @return 如果 amt小于 balance, 则从余额中扣除提款数目并返回 true,否则余额不变返回 false。*/publicbooleanwithdraw(doubleamt){ if (amt<balance){ balance-=amt; returntrue; }else{ returnfalse; } } }
【Customer.java】类
packagebanking; publicclassCustomer { privateStringfirstName; privateStringlastName; privateAccountaccount; publicCustomer(Stringf, Stringl) { this.firstName=f; this.lastName=l; } publicStringgetFirstName() { returnfirstName; } publicStringgetLastName() { returnlastName; } publicAccountgetAccount() { returnaccount; } publicvoidsetAccount(Accountacct) { this.account=acct; } }
【Bank.java】类
packagebanking; /*** 银行类*/publicclassBank { privateCustomer[] customers; //Customer对象的数组privateintnumberOfCustomer; //整数,跟踪下一个 customers 数组索引/*** 公有构造器,以合适的最大尺寸(至少大于 5)初始化 customers 数组。*/publicBank() { customers=newCustomer[10]; } /*** 该方法必须依照参数(姓,名)构造一个新的 Customer 对象然后把它放到 customer 数组中。还必须把 numberOfCustomers 属性的值加 1。* @param f 姓* @param l 名*/publicvoidaddCustomer(Stringf,Stringl){ customers[numberOfCustomer++]=newCustomer(f,l); } /*** 通过下标索引获取 customer* @param index 下标索引* @return customer*/publicCustomergetCustomer(intindex) { returncustomers[index]; } publicintgetNumOfCustomers() { returnnumberOfCustomer; } }
【CheckingAccount.java】类
packagebanking; publicclassCheckingAccountextendsAccount{ privatedoubleoverdraftProtection; publicCheckingAccount(doublebalance) { super(balance); } publicCheckingAccount(doublebalance, doubleprotect) { super(balance); this.overdraftProtection=protect; } /*** 此方法必须执行下列检查。如 果当前余额足够弥补取款 amount,则正常进行。* 如果不够弥补但是存在透支保护,则尝试用 overdraftProtection 得值来弥补该差值(balance-amount).* 如果弥补该透支所需要的金额大于当前的保护级别。则整个交易失败,但余额未受影响。* @param amt 提款数目* @return 返回true代表交易成功,否则交易失败*/publicbooleanwithdraw(doubleamt){ if (balance<amt){ if (amt-balance>overdraftProtection) { returnfalse; }else { overdraftProtection-=amt-balance; balance=0; returntrue; } }else { balance-=amt; returntrue; } } }
【SavingsAccount.java】类
packagebanking; publicclassSavingsAccountextendsAccount{ privatedoubleinterestRate; publicSavingsAccount(doublebalance, doubleinterest_Rate) { super(balance); this.interestRate=interest_Rate; } }
【TestBanking.java】类
packagebanking;/** This class creates the program to test the banking classes.* It creates a new Bank, sets the Customer (with an initial balance),* and performs a series of transactions with the Account object.*/importbanking.*; publicclassTestBanking { publicstaticvoidmain(String[] args) { Bankbank=newBank(); Customercustomer; Accountaccount; //// Create bank customers and their accounts//System.out.println("Creating the customer Jane Smith."); bank.addCustomer("Jane", "Simms"); //codeSystem.out.println("Creating her Savings Account with a 500.00 balance and 3% interest."); //codebank.getCustomer(0).setAccount(newSavingsAccount(500.00,0.03)); System.out.println("Creating the customer Owen Bryant."); //codebank.addCustomer("Owen", "Bryant"); customer=bank.getCustomer(1); System.out.println("Creating his Checking Account with a 500.00 balance and no overdraft protection."); //codecustomer.setAccount(newCheckingAccount(500.00,0)); System.out.println("Creating the customer Tim Soley."); bank.addCustomer("Tim", "Soley"); customer=bank.getCustomer(2); System.out.println("Creating his Checking Account with a 500.00 balance and 500.00 in overdraft protection."); //codecustomer.setAccount(newCheckingAccount(500.00,500.00)); System.out.println("Creating the customer Maria Soley."); //codebank.addCustomer("Maria", "Soley"); customer=bank.getCustomer(3); System.out.println("Maria shares her Checking Account with her husband Tim."); customer.setAccount(bank.getCustomer(2).getAccount()); System.out.println(); //// Demonstrate behavior of various account types//// Test a standard Savings AccountSystem.out.println("Retrieving the customer Jane Smith with her savings account."); customer=bank.getCustomer(0); account=customer.getAccount(); // Perform some account transactionsSystem.out.println("Withdraw 150.00: "+account.withdraw(150.00)); System.out.println("Deposit 22.50: "+account.deposit(22.50)); System.out.println("Withdraw 47.62: "+account.withdraw(47.62)); System.out.println("Withdraw 400.00: "+account.withdraw(400.00)); // Print out the final account balanceSystem.out.println("Customer ["+customer.getLastName() +", "+customer.getFirstName() +"] has a balance of "+account.getBalance()); System.out.println(); // Test a Checking Account w/o overdraft protectionSystem.out.println("Retrieving the customer Owen Bryant with his checking account with no overdraft protection."); customer=bank.getCustomer(1); account=customer.getAccount(); // Perform some account transactionsSystem.out.println("Withdraw 150.00: "+account.withdraw(150.00)); System.out.println("Deposit 22.50: "+account.deposit(22.50)); System.out.println("Withdraw 47.62: "+account.withdraw(47.62)); System.out.println("Withdraw 400.00: "+account.withdraw(400.00)); // Print out the final account balanceSystem.out.println("Customer ["+customer.getLastName() +", "+customer.getFirstName() +"] has a balance of "+account.getBalance()); System.out.println(); // Test a Checking Account with overdraft protectionSystem.out.println("Retrieving the customer Tim Soley with his checking account that has overdraft protection."); customer=bank.getCustomer(2); account=customer.getAccount(); // Perform some account transactionsSystem.out.println("Withdraw 150.00: "+account.withdraw(150.00)); System.out.println("Deposit 22.50: "+account.deposit(22.50)); System.out.println("Withdraw 47.62: "+account.withdraw(47.62)); System.out.println("Withdraw 400.00: "+account.withdraw(400.00)); // Print out the final account balanceSystem.out.println("Customer ["+customer.getLastName() +", "+customer.getFirstName() +"] has a balance of "+account.getBalance()); System.out.println(); // Test a Checking Account with overdraft protectionSystem.out.println("Retrieving the customer Maria Soley with her joint checking account with husband Tim."); customer=bank.getCustomer(3); account=customer.getAccount(); // Perform some account transactionsSystem.out.println("Deposit 150.00: "+account.deposit(150.00)); System.out.println("Withdraw 750.00: "+account.withdraw(750.00)); // Print out the final account balanceSystem.out.println("Customer ["+customer.getLastName() +", "+customer.getFirstName() +"] has a balance of "+account.getBalance()); } }