Code Management and Modularity
Ch12_CandyMachine_VersionII/cashRegister.h
//cashRegister Header File class cashRegister { public: int getCurrentBalance() const; //Function to show the current amount in the cash //register. //Postcondition: The value of cashOnHand is returned. void acceptAmount(int amountIn); //Function to receive the amount deposited by //the customer and update the amount in the register. //Postcondition: cashOnHand = cashOnHand + amountIn; cashRegister(int cashIn = 500); //Constructor //Sets the cash in the register to a specific amount. //Postcondition: cashOnHand = cashIn; // If no value is specified when the // object is declared, the default value // assigned to cashOnHand is 500. private: int cashOnHand; //variable to store the cash //in the register };
Ch12_CandyMachine_VersionII/cashRegisterImp.cpp
Ch12_CandyMachine_VersionII/cashRegisterImp.cpp
//Implementation file cashRegisterImp.cpp
//This file contains the definitions of the functions to
//implement the operations of the class cashRegister
#include
<
iostream
>
#include
"cashRegister.h"
using
namespace
std
;
int
cashRegister
::
getCurrentBalance
()
const
{
return
cashOnHand
;
}
void
cashRegister
::
acceptAmount
(
int
amountIn
)
{
cashOnHand
=
cashOnHand
+
amountIn
;
}
cashRegister
::
cashRegister
(
int
cashIn
)
{
if
(
cashIn
>=
0
)
cashOnHand
=
cashIn
;
else
cashOnHand
=
500
;
}
Ch12_CandyMachine_VersionII/dispenserType.h
//dispenserType Header File class dispenserType { public: int getNoOfItems() const; //Function to show the number of items in the machine. //Postcondition: The value of numberOfItems is returned. int getCost() const; //Function to show the cost of the item. //Postcondition: The value of cost is returned. void makeSale(); //Function to reduce the number of items by 1. //Postcondition: numberOfItems--; dispenserType(int setNoOfItems = 50, int setCost = 50); //Constructor //Sets the cost and number of items in the dispenser //to the values specified by the user. //Postcondition: numberOfItems = setNoOfItems; // cost = setCost; // If no value is specified for a // parameter, then its default value is // assigned to the corresponding member // variable. private: int numberOfItems; //variable to store the number of //items in the dispenser int cost; //variable to store the cost of an item };
Ch12_CandyMachine_VersionII/dispenserTypeImp.cpp
Ch12_CandyMachine_VersionII/dispenserTypeImp.cpp
//Implementation file dispenserType.cpp
//This file contains the definitions of the functions to
//implement the operations of the class dispenserType
#include
<
iostream
>
#include
"dispenserType.h"
using
namespace
std
;
int
dispenserType
::
getNoOfItems
()
const
{
return
numberOfItems
;
}
int
dispenserType
::
getCost
()
const
{
return
cost
;
}
void
dispenserType
::
makeSale
()
{
numberOfItems
--
;
}
dispenserType
::
dispenserType
(
int
setNoOfItems
,
int
setCost
)
{
if
(
setNoOfItems
>=
0
)
numberOfItems
=
setNoOfItems
;
else
numberOfItems
=
50
;
if
(
setCost
>=
0
)
cost
=
setCost
;
else
cost
=
50
;
}
Ch12_CandyMachine_VersionII/mainProgCandyMachine.cpp
Ch12_CandyMachine_VersionII/mainProgCandyMachine.cpp
// Main Program
#include
<
iostream
>
#include
"cashRegister.h"
#include
"dispenserType.h"
using
namespace
std
;
void
showSelection
();
void
sellProduct
(
dispenserType
&
product
,
cashRegister
&
pCounter
);
int
main
()
{
cashRegister counter
;
dispenserType candy
(
100
,
50
);
dispenserType chips
(
100
,
65
);
dispenserType gum
(
75
,
45
);
dispenserType cookies
(
100
,
85
);
int
choice
;
//variable to hold the selection
showSelection
();
cin
>>
choice
;
while
(
choice
!=
9
)
{
switch
(
choice
)
{
case
1
:
sellProduct
(
candy
,
counter
);
break
;
case
2
:
sellProduct
(
chips
,
counter
);
break
;
case
3
:
sellProduct
(
gum
,
counter
);
break
;
case
4
:
sellProduct
(
cookies
,
counter
);
break
;
default
:
cout
<<
"Invalid selection."
<<
endl
;
}
//end switch
showSelection
();
cin
>>
choice
;
}
//end while
return
0
;
}
//end main
void
showSelection
()
{
cout
<<
"*** Welcome to Shelly's Candy Shop ***"
<<
endl
;
cout
<<
"To select an item, enter "
<<
endl
;
cout
<<
"1 for Candy"
<<
endl
;
cout
<<
"2 for Chips"
<<
endl
;
cout
<<
"3 for Gum"
<<
endl
;
cout
<<
"4 for Cookies"
<<
endl
;
cout
<<
"9 to exit"
<<
endl
;
}
//end showSelection
void
sellProduct
(
dispenserType
&
product
,
cashRegister
&
pCounter
)
{
int
amount
;
//variable to hold the amount entered
int
amount2
;
//variable to hold the extra amount needed
if
(
product
.
getNoOfItems
()
>
0
)
//if the dispenser is not
//empty
{
cout
<<
"Please deposit "
<<
product
.
getCost
()
<<
" cents"
<<
endl
;
cin
>>
amount
;
if
(
amount
<
product
.
getCost
())
{
cout
<<
"Please deposit another "
<<
product
.
getCost
()
-
amount
<<
" cents"
<<
endl
;
cin
>>
amount2
;
amount
=
amount
+
amount2
;
}
if
(
amount
>=
product
.
getCost
())
{
pCounter
.
acceptAmount
(
amount
);
product
.
makeSale
();
cout
<<
"Collect your item at the bottom and "
<<
"enjoy."
<<
endl
;
}
else
cout
<<
"The amount is not enough. "
<<
"Collect what you deposited."
<<
endl
;
cout
<<
"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"
<<
endl
<<
endl
;
}
else
cout
<<
"Sorry, this item is sold out."
<<
endl
;
}
//end sellProduct