1  /**
  2     A bank account has a balance that can be changed by 
  3     deposits and withdrawals.
  4  */
  5  public class BankAccount
  6  {  
  7     private double balance;
  8     private int accountNumber;
  9     private static int lastAssignedNumber = 1000;
 10  
 11     public static final double OVERDRAFT_FEE = 29.95;
 12  
 13     /**
 14        Constructs a bank account with a zero balance.
 15     */
 16     public BankAccount()
 17     {   
 18        lastAssignedNumber++;
 19        accountNumber = lastAssignedNumber;
 20        balance = 0;
 21     }
 22  
 23     /**
 24        Constructs a bank account with a given balance.
 25        @param initialBalance the initial balance
 26     */
 27     public BankAccount(double initialBalance)
 28     {   
 29        balance = initialBalance;
 30     }
 31  
 32     /**
 33        Deposits money into this account.
 34        @param amount the amount to deposit
 35     */
 36     public void deposit(double amount)
 37     {  
 38        balance = balance + amount;
 39     }
 40  
 41     /**
 42        Makes a withdrawal from this account, or charges a penalty if
 43        sufficient funds are not available.
 44        @param amount the amount of the withdrawal
 45     */
 46     public void withdraw(double amount)
 47     {   
 48        if (amount > balance)
 49        {
 50           balance = balance - OVERDRAFT_FEE;
 51        }
 52        else
 53        {
 54           balance = balance - amount;
 55        }
 56     }
 57  
 58     /**
 59        Adds interest to this account.
 60        @param rate the interest rate in percent
 61     */
 62     public void addInterest(double rate)
 63     {   
 64        balance = balance + Financial.percentOf(rate, balance);
 65     }
 66  
 67     /**
 68        Gets the current balance of this account.
 69        @return the current balance
 70     */
 71     public double getBalance()
 72     {   
 73        return balance;
 74     }
 75  }