0

I am working on a project for class and I have pretty much completed all my code I just have one issue (THE CODE IS IN C++). I'm not too great at using boolean functions especially in the case for this program. If you guys could help me write or push me in the right direction for this code I'd appreciate it. This program is supposed to be a Soda Machine program made of structs. My question is how do I pass the array to the boolean function in order to check if there are any drinks left for the one that the customer wants to purchase. If there are no drinks left, the program will print out "Sorry we are sold out. Please make another selection." If there are still drinks available then just do nothing and continue with the program. It will pretty much validate the amount of drinks left. I attempted to write the function but I'm not sure if it is correct, I will post it for you guys to take a look at it. If you guys need any other info please let me know. Thanks for the help before guys.

#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>

using namespace std; 

struct Machine
{
   string name;

   double cost;

   int drinks;
};

int displayMenu(int choice);

double inputValidation(double);

bool drinksRemaining(); // this is the function that will check if there are any drinks of the choice left 

int displayMenu(int choice)
{

   cout << "SOFT DRINK MACHINE\n";

   cout << "------------------\n";

   cout << "1) Cola ($0.65)\n";

   cout << "2) Root Beer ($0.70)\n";

   cout << "3) Lemon-Lime ($0.75)\n";

   cout << "4) Grape Soda ($0.85)\n";

   cout << "5) Water ($0.90)\n";

   cout << "6) Quit Program\n";

   cout << endl;

   cout << "Please make a selection: ";

   cin >> choice;

   return choice; 

}

double inputValidation(double amount)
{

   while (amount < 0.00 || amount > 1.00)
   {
      cout << "Please enter an amount between $0.00 and $1.00.\n";

      cout << "It should also be equal to or greater than the drink price : \n";

      cin >> amount;
   }

   return amount;

}

bool drinksRemaining() // this is the function that I am having trouble with
{
   if (drinks <= 0)
   {
      cout << "Sorry we are out of this drink. Please choose another one.";

      cin >> drinkChoice;

      return true;
   }

   else
   {
      return false; 
   }
}


int main()
{
   const int DRINK_NUMS = 5;

   int selection = 0;

   double amountInserted = 0.00;

   double changeReturned = 0.00;

   double profit = 0.00;

   Machine drink[DRINK_NUMS] = { { "Cola", .65, 20 }, { "Root Beer", .70, 20 }, { "Lemon-Lime", .75, 20 }, { "Grape Soda", .85, 20 }, { "Water", .90, 20 } };

   do
   {
      profit += amountInserted - changeReturned;

      selection = displayMenu(selection);

      if (selection == 1)
      {
         cout << "Please enter the amount you want to insert:\n";

         cin >> amountInserted;

         inputValidation(amountInserted);

         changeReturned = amountInserted - drink[0].cost;

         cout << setprecision(2) << fixed << "CHANGE : $" << changeReturned << endl;

         drink[0].drinks--;

      }

      else if (selection == 2)
      {
         cout << "Please enter the amount you want to insert:\n";

         cin >> amountInserted;

         inputValidation(amountInserted);

         changeReturned = amountInserted - drink[1].cost;

         cout << setprecision(2) << fixed << "CHANGE : $" << changeReturned << endl;

         drink[1].drinks--;

      }

      else if (selection == 3)
      {
         cout << "Please enter the amount you want to insert.\n";

         cin >> amountInserted;

         changeReturned = amountInserted - drink[2].cost;

         cout << setprecision(2) << fixed << "CHANGE : $" << changeReturned << endl;

         drink[2].drinks--;


      }

      else if (selection == 4)
      {
         cout << "Please enter the amount you want to insert.\n";

         cin >> amountInserted;

         changeReturned = amountInserted - drink[3].cost;

         cout << setprecision(2) << fixed << "CHANGE : $" << changeReturned << endl;

         drink[3].drinks--;

      }

      else if (selection == 5)
      {
         cout << "Please enter the amount you want to insert.\n";

         cin >> amountInserted;

         changeReturned = amountInserted - drink[4].cost;

         cout << setprecision(2) << fixed << "CHANGE : $" << changeReturned << endl;

         drink[4].drinks--;

      }

      else if (selection == 6)
      {
         cout << endl;

         cout << "SOFT DRINK MACHINE REPORT\n";

         cout << "--------------------------\n";

         cout << "Total amount earned: $" << profit << endl;

         cout << endl;
      }

      else
      {
         cout << "Invalid selection. Please try again.";

         displayMenu(selection);
      }

   }while (selection != 6);

   system("PAUSE");

   return 0; 
}
2
  • can you use a std::array instead of a c-style array? Commented May 21, 2015 at 18:34
  • The function will look something like bool drinksRemaining(std::array<Machine, TOTAL_NUMBER_MACHINE_PRODUCTS> current_machine) and in there you refer to current_machine[whatever_the_product_number_is]. You can improve this further with a typedef or using a different data structure, but that's an exercise for the reader ;) Commented May 21, 2015 at 18:34

1 Answer 1

2

The function needs an object or a reference to an object of type Machine.

bool drinksRemaining(Machine const& m);

and can be implemented very simply:

bool drinksRemaining(Machine const& m)
{
   return (m.drinks > 0);
}

You can use it as:

  if (selection == 1)
  {
     if ( drinksRemaining(drink[0]) )
     {
        cout << "Please enter the amount you want to insert:\n";

        cin >> amountInserted;

        inputValidation(amountInserted);

        changeReturned = amountInserted - drink[0].cost;

        cout << setprecision(2) << fixed << "CHANGE : $" << changeReturned << endl;

        drink[0].drinks--;
     }
     else
     {
        cout << "Sorry we are out of this drink. Please choose another one.";
     }
  }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.