www.gibmonks.com

Main Page




Previous Page
Next Page

[Page 1295 (continued)]

G.5. Class CashDispenser

Class CashDispenser (Figs. G.7G.8) represents the cash dispenser of the ATM. The class definition (Fig. G.7) contains the function prototype for a default constructor (line 9). Class CashDispenser declares two additional public member functionsdispenseCash (line 12) and isSufficientCashAvailable (line 15). The class trusts that a client (i.e., Withdrawal) calls dispenseCash only after establishing that sufficient cash is available by calling isSufficientCashAvailable. Thus, dispenseCash simply simulates dispensing the requested amount without checking whether sufficient cash is available. Line 17 declares private constant INITIAL_COUNT, which indicates the initial count of bills in the cash dispenser when the ATM starts (i.e., 500). Line 18 implements attribute count (modeled in Fig. 13.29), which keeps track of the number of bills remaining in the CashDispenser at any time.

Figure G.7. CashDispenser class definition.
(This item is displayed on page 1296 in the print version)

 1  // CashDispenser.h
 2  // CashDispenser class definition. Represents the ATM's cash dispenser.
 3  #ifndef CASH_DISPENSER_H
 4  #define CASH_DISPENSER_H
 5
 6  class CashDispenser
 7  {
 8  public:
 9     CashDispenser(); // constructor initializes bill count to 500
10
11     // simulates dispensing of specified amount of cash
12     void dispenseCash( int );
13
14     // indicates whether cash dispenser can dispense desired amount
15     bool isSufficientCashAvailable( int ) const;
16  private:
17     const static int INITIAL_COUNT = 500;
18     int count; // number of $20 bills remaining
19  }; // end class CashDispenser
20
21  #endif // CASH_DISPENSER_H

Figure G.8. CashDispenser class member-function definitions.
(This item is displayed on page 1296 in the print version)

 1  // CashDispenser.cpp
 2  // Member-function definitions for class CashDispenser.
 3  #include "CashDispenser.h" // CashDispenser class definition
 4
 5  // CashDispenser default constructor initializes count to default
 6  CashDispenser::CashDispenser()
 7  {
 8     count = INITIAL_COUNT; // set count attribute to default
 9  } // end CashDispenser default constructor
10
11  // simulates dispensing of specified amount of cash; assumes enough cash
12  // is available (previous call to isSufficientCashAvailable returned true)
13  void CashDispenser::dispenseCash( int amount )
14  {
15     int billsRequired = amount / 20; // number of $20 bills required
16     count -= billsRequired; // update the count of bills
17  } // end function dispenseCash
18
19  // indicates whether cash dispenser can dispense desired amount
20  bool CashDispenser::isSufficientCashAvailable( int amount ) const
21  {
22     int billsRequired = amount / 20; // number of $20 bills required
23
24     if ( count >= billsRequired )
25        return true; // enough bills are available
26     else
27        return false; // not enough bills are available
28  } // end function isSufficientCashAvailable

CashDispenser Class Member-Function Definitions

Figure G.8 contains the definitions of class CashDispenser's member functions. The constructor (lines 69) sets count to the initial count (i.e., 500). Member function dispenseCash (lines 1317) simulates cash dispensing. If our system were hooked up to a real hardware cash dispenser, this member function would interact with the hardware device to physically dispense cash. Our simulated version of the member function simply decreases the count of bills remaining by the number required to dispense the specified amount (line 16). Note that line 15 calculates the number of $20 bills required to dispense the specified amount. The ATM allows the user to choose only withdrawal amounts that are multiples of $20, so we divide amount by 20 to obtain the number of billsRequired. Also note that it is the responsibility of the client of the class (i.e., Withdrawal) to inform the user that cash has been dispensedCashDispenser cannot interact directly with Screen.


[Page 1297]

Member function isSufficientCashAvailable (lines 2028) has a parameter amount that specifies the amount of cash in question. Lines 2427 return TRue if the CashDispenser's count is greater than or equal to billsRequired (i.e., enough bills are available) and false otherwise (i.e., not enough bills). For example, if a user wishes to withdraw $80 (i.e., billsRequired is 4), but only three bills remain (i.e., count is 3), the member function returns false.


Previous Page
Next Page