The method sellProduct of the Juice Machine programming example gives the user o
ID: 3860102 • Letter: T
Question
The method sellProduct of the Juice Machine programming example gives the user only two chances to enter enough money to buy the product. Rewrite the definition of the method sellProduct so that it keeps prompting the user to enter more money as long as the user has not entered enough money to buy the product. Also, write a program to test your method. Also, move the showSelection and sellProduct functions from the main() program to be members of the cashRegister class and reside in cashRegister implementation file, and add another juice type named "grape". The instructions indicate the requirement for a test program, however, the main() program should be sufficient and an additional test program unnecessary
Explanation / Answer
//MainProgram.cpp
#include <iostream> //incldue input/output files;
#include "juiceMachine.cpp" //include juiceMachine.h file;
using namespace std; //use c++ name standards;
void showSelection(); //prototype for choosing selection of type of juice;
void sellProduct(dispenserType& product,
cashRegister& pCounter);
int main()
{
cashRegister counter;
dispenserType orange(100, 50);
dispenserType apple(100, 65);
dispenserType mango(75, 80);
dispenserType strawberryBanana(100, 85);
int choice; //variable to hold the selection
showSelection();
cin >> choice;
while (choice != 9)
{
switch (choice)
{
case 1:
sellProduct(orange, counter);
break;
case 2:
sellProduct(apple, counter);
break;
case 3:
sellProduct(mango, counter);
break;
case 4:
sellProduct(strawberryBanana, 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 Juice Shop ***" << endl;
cout << "To select an item, enter " << endl;
cout << "1 for orange juice (50 cents)" << endl;
cout << "2 for apple juice (65 cents)" << endl;
cout << "3 for mango juice (80 cents)" << endl;
cout << "4 for strawberry banana juice (85 cents)" << 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 dispenser is not empty
{
cout << "Please deposit " << product.getCost()
<< " cents" << endl;
cin >> amount;
while (amount < product.getCost())
{
cout << "Please deposit another "
<< product.getCost()- amount
<< " cents." << endl;
cin >> amount2;
amount = amount + amount2;
}
pCounter.acceptAmount(amount);
product.makeSale();
cout << "Collect your item at the bottom and enjoy." << endl;
}
else
cout << "Sorry, this item is sold out." << endl;
}//end sellProduct
///////////////////////////////////////////////////////////////////////////////////////////////
//juiceMachineImp.h
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
};
///////////////////////////////////////////////////////////////////////////////////////
//juiceMachine.h
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
};
/////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "juiceMachine.h"
#include "juiceMachineImp.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;
}
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;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.