HiveBrain v1.2.0
Get Started
← Back to all entries
patterncppMinor

C++ "Vending Machine" task

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
machinevendingtask

Problem

Task:


Write a program that presents the user w/ a choice of your 5 favorite
beverages (Coke, Water, Sprite, ... , Whatever). Then allow the user
to choose a beverage by entering a number 1-5. Output which beverage
they chose.


★ If you program uses if statements instead of a switch statement,
modify it to use a switch statement. If instead your program uses a
switch statement, modify it to use if/else-if statements.


★★ Modify the program so that if the user enters a choice other than
1-5 then it will output "Error. choice was not valid, here is your
money back."

#include 
using namespace std;

int main() {

int drink = 0;
string ifswitch;
string again = "y";

while( again == "y" || again == "Y")
{
    cout > ifswitch;
    cout > drink;
        cout > drink;
        cout > again;
    cout << endl;

}

    cout << "Ending...";

}

Solution

-
Do not use namespace std;

-
Put your code into functions if possible. For example the Question for the user should be a single function.

void printOptions() {
     std::cout << "Your choices of drinks are: " << "\n";
     std::cout << "1 - Coke" << "\n";
     std::cout << "2 - Sprite" << "\n";
     std::cout << "3 - Water" << "\n";
     std::cout << "4 - Orange Juice" << "\n";
     std::cout << "5 - Apple Juice" << "\n";
     std::cout << "What drink would you like (1/5): ";


}

Note that i use "\n" instead of std::endl as this doesnt flush the stream.

-
Use a dedicated input function

int chooseBeverage() {
    int beverage;
    std::cin >> beverage;
    return beverage;
}


-
Now define a function that takes the choice and give the beverage.

enum choice {
    NONE = 0;
    COKE,
    SPRITE,
    WATER,
    ORANGE_JUICE,
    APPLE_JUICE
};

void serveBeverageIf(choice beverage) {
     if(beverage == COKE)
        std::cout << "You chose Coke." << "\n";
     else if(beverage == SPRITE)
        std::cout << "You chose Sprite." << "\n";
     else if(beverage == WATER)
        std::cout << "You chose Water." << "\n";
     else if(beverage == ORANGE_JUICE)
        std::cout << "You chose Orange Juice." << "\n";
     else if(beverage == APPLE_JUICE)
        std::cout << "You chose Apple juice." << "\n";
     else
        std::cout << "Error. choice was not valid, here is your money back.";
 }

 void serveBeverageSwitch(choice beverage) {
     switch(beverage)
     case COKE:
        std::cout << "You chose Coke." << "\n";
        break;
     case SPRITE:
        std::cout << "You chose Sprite." << "\n";
        break;
     case WATER:                
        std::cout << "You chose Water." << "\n";
        break;
     case ORANGE_JUICE:                
        std::cout << "You chose Orange Juice." << "\n";
        break;
     case APPLE_JUICE:                
        std::cout << "You chose Apple juice." << "\n";
        break;
     default:
        std::cout << "Error. choice was not valid, here is your money back.";
        break;
     }
 }


-
What you could also do is use a third option utilizing a map.

void serveBeverageMap(choice beverage) {
map nameMap = {
    std::make_pair(COKE, "Coke"),
    std::make_pair(SPRITE, "Sprite"),
    std::make_pair(WATER, "Water"),
    std::make_pair(ORANGE_JUICE, "Orange juice"),
    std::make_pair(APPLE_JUICE, "Apple juice")            
};
if(nameMap.find(beverage) == nameMap.end()) {
   std::cout << "Error. choice was not valid, here is your money back.";
} else { 
    std::cout << You chose " << nameMap[beverage] << ".";
}
}

Code Snippets

void printOptions() {
     std::cout << "Your choices of drinks are: " << "\n";
     std::cout << "1 - Coke" << "\n";
     std::cout << "2 - Sprite" << "\n";
     std::cout << "3 - Water" << "\n";
     std::cout << "4 - Orange Juice" << "\n";
     std::cout << "5 - Apple Juice" << "\n";
     std::cout << "What drink would you like (1/5): ";
int chooseBeverage() {
    int beverage;
    std::cin >> beverage;
    return beverage;
}
enum choice {
    NONE = 0;
    COKE,
    SPRITE,
    WATER,
    ORANGE_JUICE,
    APPLE_JUICE
};

void serveBeverageIf(choice beverage) {
     if(beverage == COKE)
        std::cout << "You chose Coke." << "\n";
     else if(beverage == SPRITE)
        std::cout << "You chose Sprite." << "\n";
     else if(beverage == WATER)
        std::cout << "You chose Water." << "\n";
     else if(beverage == ORANGE_JUICE)
        std::cout << "You chose Orange Juice." << "\n";
     else if(beverage == APPLE_JUICE)
        std::cout << "You chose Apple juice." << "\n";
     else
        std::cout << "Error. choice was not valid, here is your money back.";
 }

 void serveBeverageSwitch(choice beverage) {
     switch(beverage)
     case COKE:
        std::cout << "You chose Coke." << "\n";
        break;
     case SPRITE:
        std::cout << "You chose Sprite." << "\n";
        break;
     case WATER:                
        std::cout << "You chose Water." << "\n";
        break;
     case ORANGE_JUICE:                
        std::cout << "You chose Orange Juice." << "\n";
        break;
     case APPLE_JUICE:                
        std::cout << "You chose Apple juice." << "\n";
        break;
     default:
        std::cout << "Error. choice was not valid, here is your money back.";
        break;
     }
 }
void serveBeverageMap(choice beverage) {
map<choice, std::string> nameMap = {
    std::make_pair(COKE, "Coke"),
    std::make_pair(SPRITE, "Sprite"),
    std::make_pair(WATER, "Water"),
    std::make_pair(ORANGE_JUICE, "Orange juice"),
    std::make_pair(APPLE_JUICE, "Apple juice")            
};
if(nameMap.find(beverage) == nameMap.end()) {
   std::cout << "Error. choice was not valid, here is your money back.";
} else { 
    std::cout << You chose " << nameMap[beverage] << ".";
}
}

Context

StackExchange Code Review Q#143528, answer score: 4

Revisions (0)

No revisions yet.