drink machine

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.