1   // joi/7/bank/FeeAccount.java                         
2   //                                                            
3   //                                                            
4   // Copyright 2003 Bill Campbell and Ethan Bolker                         
5                                                               
6   /**
7    * A FeeAccount is a BankAccount with one new feature:
8    * the user is charged for each transaction.
9    *
10   * @see BankAccount
11   *
12   * @version 7
13   */ 
14  
15  public class FeeAccount extends BankAccount 
16  {
17      /**
18       * Constructor, accepting an initial balance and issuing Bank.  
19       *
20       * @param initialBalance the opening balance.
21       * @param issuingBank the bank that issued this account.
22       *
23       * @exception InsufficientFundsException when appropriate.
24       */
25  
26      public FeeAccount( int initialBalance, Bank issuingBank ) 
27          throws InsufficientFundsException
28      {
29          super( initialBalance, issuingBank);
30      }
31  
32      /**
33       * The Bank's transaction fee.
34       *
35       * @return the fee.
36       */
37  
38      protected int getTransactionFee()
39      {
40          return getIssuingBank().getTransactionFee();
41      }
42  
43      /**
44       * The way a transaction is counted for a FeeAccount: it levies
45       * a transaction fee as well as counting the transaction.
46       *
47       * @exception InsufficientFundsException when appropriate.
48       */
49  
50      public void countTransaction() 
51          throws InsufficientFundsException
52      {
53          incrementBalance( - getTransactionFee() );
54          super.countTransaction();
55      }
56  
57      /**
58       * A FeeAccount incurs a monthly charge.
59       *
60       * @exception InsufficientFundsException when appropriate.
61       */
62  
63      public void newMonth()
64           throws InsufficientFundsException
65      {
66          incrementBalance( - getIssuingBank().getMonthlyCharge());
67      }
68  }
69