drink machine
Dec 12, 2013 at 8:18pm UTC
Hey Guys!
I!d like to create a drink machine in C++ which can do the following things.
It has 3 options for drinks to choose.
you can recieve max. 10 bottles at once.
it has got cooling, I mean if you select a drink to buy the cooling is auto-enabled.
it gives money back.
so the whole program is alrdy done, I just dont really know how I could change it , so it could check wether there are enough bottles avaliable in the machine BEFORE the total price is calculated.
for example. you select 12 bottles of limo to buy, although the machine has got only 10 bottles. in this version it charges you 120 cent to pay. It should charge 100 cent for a maximal of 10 bottles.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
#include <iostream>
using namespace std;
class currency
{
//die Attribute
int sum;
int topay;
int cashback;
//die Methoden
public :
void init();
void takecoins(int wert);
int givecashback();
//zum Setzen des Betrags
void setsum(int preis);
//zum Abfragen des noch zu zahlenden Betrags
int gettopay();
};
void currency::init()
{
sum = 0;
topay = 0;
cashback = 0;
}
void currency::takecoins(int wert)
{
//den eingeworfenen Betrag abziehen
topay = topay - wert;
}
int currency::givecashback()
{
//den absoluten Betrag von nochZuZahlen als Rückgeld liefern
cashback = abs(topay);
return cashback;
}
void currency::setsum(int preis)
{
sum = preis;
topay = sum;
}
int currency::gettopay()
{
return topay;
}
//die Vereinbarung der Klasse getraenkeautomat
class dautomat
{
//die Attribute
string drink[3];
int numberofbottles[3];
bool cooling;
//jetzt ist die Münzeinheit Teil des Getränkeautomaten
currency *zahlomat;
public :
//die Methoden
void init();
int drinkselect();
void drinktogiveout(int anzahl, int getraenkeIndex);
void cool(bool anaus);
};
void dautomat::init()
{
//die Getränke eintragen
drink[0] = "Limo" ;
drink[1] = "Water" ;
drink[2] = "Beer" ;
//die Anzahl der Flaschen
numberofbottles[0] = 10;
numberofbottles[1] = 10;
numberofbottles[2] = 10;
//die Kühlung ist aus
cooling = false ;
//eine Instanz der Münzeinheit erzeugen
zahlomat = new currency();
//die Instanz initialisieren
zahlomat->init();
}
int dautomat::drinkselect()
{
int auswahl, anzahl;
//die Auswahl
cout << "Select your drink " << endl;
cout << "The following drinks can be chosen " << endl;
for (int index = 0; index < 3; index++)
cout << index+1 << " - " << drink[index] << endl;
cout << "Give me the number: " ;
cin >> auswahl;
//gibt es noch Flaschen vom gewählten Getränk?
if (numberofbottles[auswahl-1] != 0)
{
//das Getränk ausgeben
cout << "How many bottles would you like to have? " ;
cin >> anzahl;
//erst muss bezahlt werden
//der Preis 10 ist fest vorgegeben
cout << "You have to " << anzahl * 10 << " Cent to pay." << endl;
zahlomat->setsum(anzahl * 10);
do {
cout << "Missing " << zahlomat->gettopay() << " Cent." << endl;
zahlomat->takecoins(3);
} while (zahlomat->gettopay() >0);
//das Getränk ausgeben
auswahl = auswahl - 1;
drinktogiveout(anzahl, auswahl);
}
else
{
cout << "The drink you have chosen is not avaliable" << endl;
auswahl = -1;
}
return auswahl;
}
void dautomat::drinktogiveout(int anzahl, int getraenkeIndex)
{
//gibt es noch genügend Flaschen?
if (anzahl <= numberofbottles[getraenkeIndex])
{
cout << "You get " << anzahl << " Bottles " << drink[getraenkeIndex] << endl;
numberofbottles[getraenkeIndex] = numberofbottles[getraenkeIndex] - anzahl;
}
else
{
cout << "There!s" << numberofbottles[getraenkeIndex] << " Bottles " << drink[getraenkeIndex] << " avaliable " ;
cout << "you get the rest" << endl;
numberofbottles[getraenkeIndex] = 0;
}
//Geld zurückgeben
cout << "you get " << zahlomat->givecashback() << " Cent back" << endl;
}
void dautomat::cool(bool anaus)
{
if (anaus == true )
{
cooling = true ;
cout << "Cooling is on." << endl;
}
else
{
cooling = false ;
cout << "Cooling is off." << endl;
}
}
int main()
{
int auswahl;
//Instanz erzeugen
//der Zeiger auf die Klasse
dautomat *automat;
automat = new dautomat();
//Instanz initialisieren
automat->init();
//ein Getränk auswählen
do {
auswahl = automat->drinkselect();
} while (auswahl == -1);
//die Instanzen freigeben
delete (automat);
return 0;
}
sorry the comments are german :ehh: but I rewrote the main part in english.
Topic archived. No new replies allowed.