/**
 * The GRQ2 class implements an application that invokes the
 * BankAcc2 class to manage some simple banking transactions
 * in a snazzier way than the previous version.
 */

-----------------------------------------------------------

public class GRQ2  // save as GRQ2.java
  {
    public static void main(String [] args) throws Exception
      {
        BankAcc2.getNumAccs();
        BankAcc2 owen = new BankAcc2();
        owen.deposit(5000.75);
        owen.getBalance();
        BankAcc2.getNumAccs();
        System.out.println("Your account number is " + owen.getAccNo());

        BankAcc2 feit = new BankAcc2(5000.75);
        System.out.println("Your account number is " + feit.getAccNo());        
        feit.spend(3000.50);
        feit.getBalance();
        BankAcc2.getNumAccs();
      }
  } // end of class GRQ2


-----------------------------------------------------------


public class BankAcc2  // save as BankAcc2.java
  {
    // ------------- class constants ------------------------------
    private final static int SAVINGS_NO = 5000;
    private final static int CHQKING_NO = 0;
    private final static int MAX_ACCOUNTS = 10000;

    // ------------- instance data fields -------------------------
    private double balance;
    private int accountNumber;

    // ------------- static data fields ---------------------------
    private static int numAccs = 0;
    private static int [] accNos = new int[MAX_ACCOUNTS];

    // ------------- static operations ----------------------------
    static 
      { for (int i = 0; i<accNos.length; i++)
          accNos[i] = CHQKING_NO + 1 + i;
      }

    // ------------- instance methods -----------------------------
    public double getBalance() 
      { return balance; }
    public void setBalance( double amt )
      { balance = amt; }
    public int getAccNo()
      { return accountNumber; }

    public void spend( double amt )
      { balance -= amt; 
        System.out.println("you spent " + amt);
      }
    public void deposit( double amt )
      { balance += amt; 
        System.out.println("you deposited " + amt);}

    // ------------- static class methods -------------------------
    public static void getNumAccs()
      { System.out.println(numAccs + " accounts have been created"); }

    // ------------- class constructors --------------------------- 
    public BankAcc2( double amt )
      { setBalance(amt); 
        numAccs++;
        accountNumber = SAVINGS_NO + numAccs;
      }
    public BankAcc2()
      { this(0.0); }  
  } // end of class BankAcc2