Java Advance Project #6 - Unit Testing Bank Simulation

profilejvlieti4440
BankSimSkeleton.zip

banking/Account.java

banking/Account.java

package  banking ;

import  java . time . * ;
import  java . util . * ;
import  java . util . stream . Collectors ;

/**
 *
 *  @author  wpollock
 */
public   abstract   class   Account   implements   Comparable < Account >   {
     private   static   int  nextId  =   1 ;

     protected   final   Customer  customer ;
     protected   final   String  accountId ;
     protected   String  description ;
     protected   final   LocalDateTime  creationDate ;
     // protected StatementCycle statementCycle; // An enum representing any
     //                                          // possible statement cycle
     protected   double  balance ;
     protected   List < Transaction >  transactions  =   new   ArrayList <> ();

     /**
     *  @param  cust Customer owning this account
     *  @param  initialBalance Current balance
     *  @param  accountDescription A description
     */
     public   Account   ( Customer  cust ,   double  initialBalance ,
             String  accountDescription )   {
         this . customer  =  cust ;
         this . creationDate  =   LocalDateTime . now ();
         this . accountId  =   "" ;
         // Stub
     }

     /**
     *  @param  amount The amount to deposit
     */
     public   abstract   void  deposit  ( double  amount );

     /**
     * If the account doesn't have sufficient funds for the specified
     * amount, an insufficient funds fee (penalty) is charged on the
     * account.
     *  @param  amount The amount to withdraw
     */
     public   abstract   void  withdraw  ( double  amount );

     /** Transfer funds between two accounts of a single customer.
     *
     *  @param  fromAccount The source of the funds
     *  @param  toAccount The account in which the funds will be deposited
     *  @param  amount The amount to transfer
     */
     public   static   void  transfer  ( Account  fromAccount ,   Account  toAccount ,
             double  amount )   {
         // Stub
     }

     /**
     *  @return  The description for this account
     */
     public   String  getAccountDescription  ()   {
         return   null ;    // Stub
     }

     /**
     *  @param  accountDescription The replacement description of this account
     */
     public   void  setAccountDescription  ( String  accountDescription )   {
         // Stub
     }

     /**
     *  @return  The current account balance
     */
     public   double  getBalance  ()   {
         return   0.00 ;    // Stub
     }

     /**
     *  @return  read-only view of the account's transaction list
     */
     public   List < Transaction >  getTransactions  ()   {
         return   null ;    // Stub
     }

     /**
     *  @param  transactionId  The id of the transaction to search for
     *  @return  the matching transaction
     *  @throws  IllegalArgumentException when no such transaction exists
     */
     public   Transaction  getTransaction  ( int  transactionId )   {
         return   null ;    // Stub
     }

     /**
     *  @return  Account's ID
     */
     public   String  getAccountId  ()   {
         return   null ;    // Stub
     }

     /**
     *  @return  the customer who owns this account
     */
     public   String  getCustomerId  ()   {
         return   null ;    // Stub
     }

     /**
     *  @return  The date and time the account was created.
     */
     public   LocalDateTime  getAccountCreationDate  ()   {
         return   null ;    // Stub
     }

    @ Override
     public   int  hashCode  ()   {
         return   0 ;    // Stub
     }

    @ Override
     public   boolean  equals  ( Object  obj )   {
         return   false ;    // Stub
     }

    @ Override
     public   int  compareTo  ( Account  other )   {
         return   1 ;    // Stub
     }

    @ Override
     public   String  toString  ()   {
         return   null ;    // Stub
     }
}

banking/Bank.java

banking/Bank.java

package  banking ;

import  java . util . * ;
import  java . util . stream . Collectors ;

/**
 *  @author  wpollock
 *
 */
public   class   Bank   {
     private   final   String  NAME ;
     private   final   Map < String ,   Customer >  customers  =   new   HashMap <> ();
     private   double  insufficientFundsPenalty  =   10.00 ;    // Default, in dollars

     /** Creates a new Bank object with the given name.
     *
     *  @param  name Name of the bank
     */
     public   Bank   ( String  name )   {
         this . NAME  =   "" ;    // Stub
     }

     /** Starts up the Bank simulator
     *  @param  args command line arguments - ignored
     */
     public   static   void  main  ( String []  args )   {
         System . out . println ( "Hello from Bank" );    // Stub
     }

     /**
     *  @return  the insufficientFundsPenalty
     */
     public    double  getInsufficientFundsPenalty  ()   {
         return  insufficientFundsPenalty ;
     }

     /**
     *  @param  insufficientFundsPenalty the insufficientFundsPenalty to set
     */
     public   void  setInsufficientFundsPenalty  ( double  insufficientFundsPenalty )   {
         // Stub
     }

     /**
     *  @return  the name
     */
     public   String  getNAME  ()   {
         return  NAME ;
     }

     /** Adds a new bank account
     *
     */
     public   void  addAccountWizard  ()   {
         // Stub
     }

     /** Generates a report of all current accounts, in account ID order
     *  @return  A list of all accounts of all customers of this bank, sorted
     * by ID.
     *
     */
     public   SortedSet < Account >  getAllAccounts  ()   {
         // for each customer, get accounts and add to sorted set.
         return   null ;    //Stub
     }

     /** Add a new customer to the bank, using a GUI form
     *
     */
     public   void  addCustomerWizard  ()   {
     }

     /** Add a new customer to the bank.
     *  @param  lastName Customer's last (sur- or family) name
     *  @param  firstName Customer's first (or given) name
     *  @return  the customer's ID
     */
     public   String  addCustomer  ( String  lastName ,   String  firstName )   {
         return   null ;    // Stub
     }

     /** Deletes a customer from the bank.
     * (In reality, just marks the customer as non-current.)
     *  @param  customerId the ID of the customer to remove
     */
     public   void  removeCustomer  ( String  customerId )   {
         // Stub
     }

     /** Generates a report of all current customers, in customer ID order
     *  @return  SortedSet of all customers at this bank.
     */
     public   SortedSet < Customer >  getAllCustomers  ()   {
         return   null ;    // Stub
     }

     /** Get a Customer object, given a customer's ID
     *
     *  @param  customerId The ID of the customer
     *  @return  That customer's Account, or null
     */
     public   Customer  getCustomer  ( String  customerId )   {
         return   null ;    // Stub
     }

     /** Get a List of Customer objects, given a customer's last and
     * first names
     *
     *  @param  lastName The customer's last name
     *  @param  firstName The customer's first name
     *  @return  a List of Customers with that first and last name,
     * or null if no such customer exists
     */
     public   List < Customer >  getCustomer  ( String  lastName ,   String  firstName )   {
         return   null ;    // Stub
     }

     /** Return a List of a given customer's accounts (if any)
     *
     *  @param  customerId The Customer ID who's account list is desired.
     *  @return  a List of the accounts of that customer, if any.
     */
     public   List < Account >  getCustomersAccounts  ( String  customerId )   {
         return   null ;    // Stub
     }
}

banking/Customer.java

banking/Customer.java

package  banking ;

import  java . util . * ;

/**
 *  @author  wpollock
 *
 */
public   class   Customer   implements   Comparable < Customer >   {
     private   static   int  nextId  =   1 ;

     private   final   Bank  bank ;
     private   final   String  customerId ;
     private   final   String  lastName ;
     private   final   String  firstName ;
     private   final   SortedSet < Account >  customerAccounts  =   new   TreeSet <> ();

     /** Creates a new Customer object from a name.
     * Note for this project, we assume bank names are unique.
     *  @param  bank The bank owning this account
     *  @param  lastName The last name of the account owner.
     *  @param  firstName The first name of the account owner.
     */
     public   Customer   ( Bank  bank ,   String  lastName ,   String  firstName )   {
         this . bank  =   null ;
         this . customerId  =   "" ;
         this . lastName  =   "" ;
         this . firstName  =   "" ;
         // Stub
     }

     /**
     *  @return  the bank
     */
     public   Bank  getBank  ()   {
         return   null ;    // Stub
     }

     /** Getter for customer's ID
     *  @return  The customer's ID
     */
     public   String  getCustomerId  ()   {
         return   null ;    // Stub
     }

     /** Getter for the customer's last name
     *  @return  The customer's last name
     */
     public   String  getLastName  ()   {
         return   null ;    // Stub
     }

     /** Getter for the customer's first name
     *  @return  The customer's first name
     */

     public   String  getFirstName  ()   {
         return   null ;    // Stub
     }

     /** Returns a read-only SortedSet of the customer's active
     *  accounts (if any)
     *
     *  @return  an immutable SortedSet of accounts (check for
     *  immutability of accounts; use a List?)
     */
     public   SortedSet < Account >  getCustomerAccounts  ()   {
         return   null ;    // Stub
     }

     /** Returns the total fees (including penalties) paid by this customer
     *  for year-to-date
     *
     *  @return  YTD fees paid
     */
     public   double  ytdFees  ()   {
         return   0.0 ;    // Stub
     }

     /** Returns the total interest paid to this customer for year-to-date
     *  @return  YTD interest payed
     */
     public   double  ytdInterest  ()   {
         return   0.0 ;    // Stub
     }

     /** Adds a new bank account
     *  @param  initBal Initial balance
     *  @param  desc A description for the account, chosen by the customer
     *  @return  the newly added account object
     */
     public   SavingsAccount  addSavingsAccount  ( double  initBal ,    String  desc )   {
         return   null ;    // Stub
     }

     /** Deletes a given account (in the real world, just marks it as defunct
     *  or something)
     *  @param  accountId the ID of the account to remove
     */
     public   void  removeAccount  ( String  accountId )   {
         // Stub
     }

     /** Find an account given an account ID
     *
     *  @param  accountId The ID of the desired account
     *  @return  The Account object, or null if no such account
     */
     public   Account  getAccount  ( String  accountId )   {
         return   null ;    // Stub
     }

    @ Override
     public   String  toString  ()   {
         return   "" ;    // Stub
     }

    @ Override
     public   int  hashCode  ()   {
         return   0 ;    // Stub
     }

    @ Override
     public   boolean  equals  ( Object  obj )   {
         return   false ;    // Stub
     }

    @ Override
     public   int  compareTo  ( Customer  other )   {
         return   1 ;    // Stub
     }
}

banking/SavingsAccount.java

banking/SavingsAccount.java

package  banking ;

import   static  banking . TransactionType . * ;

/**
 *  @author  wpollock
 *
 */
public   class   SavingsAccount   extends   Account   {
     // Default monthly interest rate, applied on last day of statement cycle:
     private   static   double  DEFAULT_INTEREST_RATE  =   2.0 ;    // a percent

     /**  SavingsAccount constructor, using default interest rate.
     *  @param  cust The customer that owns this account
     *  @param  initialBalance The initial account balance
     *  @param  description An account description provided by the owner
     */
     public   SavingsAccount   ( Customer  cust ,   double  initialBalance ,
             String  description )   {
         super ( cust ,  initialBalance ,  description );
     }

     /** SavingsAccount constructor, using a custom interest rate.
     *  @param  cust The customer that owns this account
     *  @param  initialBalance The initial account balance
     *  @param  description An account description provided by the owner
     *  @param  interestRate  Account's default monthly interest rate
     */
     public   SavingsAccount   ( Customer  cust ,   double  initialBalance ,
             String  description ,   double  interestRate )   {
         super ( cust ,  initialBalance ,  description );
         // Stub
     }

    @ Override
     public   void  deposit  ( double  amount )   {
         // Stub
     }

    @ Override
     public   void  withdraw  ( double  amount )   {
         // Stub
     }

     /** Adds a transaction "INTEREST PAYMENT" based on this account's
     * monthly interest rate.
     *  @param  rate Interest rate to apply, as a percentage (e.g. 2.1".
     */
     public   void  addInterestTransaction  ( double  rate )   {
         // Stub
     }

     /**
     *  @return  the interestRate
     */
     public   static   double  getDefaultInterestRate  ()   {
         return   0.00 ;    // Stub
     }

     /**
     *  @param  interestRate the interestRate to set
     */
     public   static   void  setDefaultInterestRate  ( double  interestRate )   {
         // Stub
     }
}

banking/Transaction.java

banking/Transaction.java

package  banking ;

import  java . time . * ;

/**
 *  @author  wpollock
 *
 */
public   class   Transaction   implements   Comparable < Transaction >   {
     private   static   int  nextID  =   1 ;

     private   final   int  id ;
     private   final   LocalDateTime  timestamp ;
     private   final   TransactionType  type ;
     private   final   double  amount ;
     private   final   String  description ;
     /**
     *  @param  type The type of this transaction
     *  @param  amount The amount of the transaction
     *  @param  description The description of the transaction.
     *        This may include check numbers, memo, payee, etc.
     */
     public   Transaction   ( TransactionType  type ,   double  amount ,
             String  description )   {
         this . id  =   1 ;
         this . type  =   null ;
         this . amount  =   0.00 ;
         this . description  =   "" ;
         this . timestamp  =   LocalDateTime . now ();
         // Stub
     }

     /**
     *  @return  the id
     */
     public   int  getId  ()   {
         return   0 ;    // Stub
     }

     /**
     *  @return  the timestamp for this transaction
     */
     public   LocalDateTime  getTimestamp  ()   {
         return   null ;    // Stub
     }

     /**
     *  @return  the transaction type
     */
     public   TransactionType  getType  ()   {
         return   null ;    // Stub
     }

     /**
     *  @return  the amount of this transaction.
     * Transaction amounts are always positive.
     */
     public   double  getAmount  ()   {
         return   0.00 ;    // Stub
     }

     /**
     *  @return  the description
     */
     public   String  getDescription  ()   {
         return   null ;    // Stub
     }

    @ Override
     public   String  toString  ()   {
         return   "" ;    // Stub
     }

    @ Override
     public   int  hashCode  ()   {
         return   1 ;    // Stub
     }

    @ Override
     public   boolean  equals  ( Object  obj )   {
         return   false ;    // Stub
     }

    @ Override
     public   int  compareTo  ( Transaction  other )   {
         return   0 ;    // Stub
     }

}

banking/TransactionType.java

banking/TransactionType.java

package  banking ;

/** A list of the possible types of transactions in the banking simulation.
 *  @author  wpollock
 *
 */
public  enum  TransactionType   {
    DEPOSIT ,  WITHDRAWAL ,  INTEREST ,  CHECK ,  FEE ,  PENALTY ,  ADJUSTMENT ;
}