Kaffeeautomat - Bitte anschauen
-
Hallo
Hab mal nen Kaffeeautomat programmiert, soweit geht er auch bis auf eine Sache die noch nicht geht und etwas das mich stört.
// kaffeautomat.cpp - Ein Programm zum Kaffee kaufen. #include <iostream> #include <string> using namespace std; void gruss() // Die Begrüssung des Kunden. { cout << endl; cout << "Willkommen beim Kaffeeautomat Version 1.0" << endl; cout << endl; } class automatenaufbau { private: int geld; // Gibt an wieviel Geld der Kunde hat. int einwurf; // Gibt an wieviel Geld in den Automaten eingeworfen wurde. int auswahl; // Speichert das ausgewählte Produkt. public: void geldvorhanden() { cout << "Wieviel Geld haben Sie bei sich? (bitte in cent angeben)" << endl; cin >> geld; cout << endl; cout << "Sie haben " << geld << " cent bei sich." << endl; } void produktanzeige() // Gibt die Produkte aus die es gibt (auch Speicher ist hier drinne). { string produktname[5] = {"Kaffee", "Heisse Schokolade", "Pfefferminztee", "Cappuchino", "Kaffe Latte"}; // Name der Produkte. int produktkosten[5] = {50, 60, 45, 90, 110}; // Kosten der Produkte. cout << endl; cout << "Unsere Produkte: " << endl; cout << endl; cout << "1. " << produktname[0] << ": " << produktkosten[0] << " cent" << endl; cout << "2. " << produktname[1] << ": " << produktkosten[1] << " cent" << endl; cout << "3. " << produktname[2] << ": " << produktkosten[2] << " cent" << endl; cout << "4. " << produktname[3] << ": " << produktkosten[3] << " cent" << endl; cout << "5. " << produktname[4] << ": " << produktkosten[4] << " cent" << endl; cout << endl; } void produktauswahl() // Auwahl der Produkte. { string produktname[5] = {"Kaffee", "Heisse Schokolade", "Pfefferminztee", "Cappuchino", "Kaffe Latte"}; // Name der Produkte. int produktkosten[5] = {50, 60, 45, 90, 110}; // Kosten der Produkte. cout << "Wählen Sie ein Produkt: (1 - 5): "; cin >> auswahl; while (auswahl <= 0 || auswahl >= 6) // Schutz vor Produkten die es nicht gibt. { cout << "Dieses Produkt gibt es nicht!" << endl; cout << "Wählen Sie ein Produkt: (1 - 5): "; cin >> auswahl; } if (auswahl >= 1 || auswahl <= 5) // Zeigt das Produkt an das ausgewählt wurde. { cout << endl; cout << "Ihr gewähltes Produkt: " << produktname[auswahl - 1] << endl; cout << endl; } if (geld <= produktkosten[auswahl - 1]) // Überprüft ober der Kunde genug Geld dabei hat. { cout << "Sie haben nicht genug Geld dabei!" << endl; cout << "Das Programm wird beendet!" << endl; cout << endl; } } void geldeinwurf() // Hier wird das Geld eingeworfen und angezeigt wieviel man einwerfen muss. { string produktname[5] = {"Kaffee", "Heisse Schokolade", "Pfefferminztee", "Cappuchino", "Kaffe Latte"}; // Name der Produkte. int produktkosten[5] = {50, 60, 45, 90, 110}; // Kosten der Produkte. cout << "Bitte werfen Sie " << produktkosten[auswahl - 1] << " cent passend in den Automaten ein" << endl; cout << "Ihr Einwurf: "; cin >> einwurf; cout << endl; while (einwurf != produktkosten[auswahl - 1]) { cout << "Ihr Geld wird wieder ausgezahlt." << endl; cout << endl; cout << "Bitte erneut " << produktkosten[auswahl - 1] << " cent einwerfen." << endl; cout << "Ihr Einwurf: "; cin >> einwurf; cout << endl; } } void produktausgabe() // Hier kommt das Produkt aus dem Automaten, und das Restgeld wird angezeigt. { string produktname[5] = {"Kaffee", "Heisse Schokolade", "Pfefferminztee", "Cappuchino", "Kaffe Latte"}; // Name der Produkte. int produktkosten[5] = {50, 60, 45, 90, 110}; // Kosten der Produkte. cout << "Ihr(e) " << produktname[auswahl - 1] << " wird aus dem Automaten gelassen." << endl; cout << endl; cout << "Bitte entnehmen Sie das Produkt aus dem Automaten" << endl; cout << endl; cout << "Sie haben noch " << geld - produktkosten[auswahl - 1] << " cent." << endl; cout << endl; cout << "Danke das Sie beim Kaffeeautomat Version 1.0 eingekauft haben" << endl; cout << endl; } }; int main() { automatenaufbau automat; gruss(); automat.geldvorhanden(); automat.produktanzeige(); automat.produktauswahl(); automat.geldeinwurf(); automat.produktausgabe(); return 0; }
Wie man sehen kann, kommt:
string produktname[5] = {"Kaffee", "Heisse Schokolade", "Pfefferminztee", "Cappuchino", "Kaffe Latte"}; // Name der Produkte. int produktkosten[5] = {50, 60, 45, 90, 110}; // Kosten der Produkte.
mehrmals vor, da es anders irgendwie nicht gehen will
Und was nicht geht ist das:
if (geld <= produktkosten[auswahl - 1]) // Überprüft ober der Kunde genug Geld dabei hat. { cout << "Sie haben nicht genug Geld dabei!" << endl; cout << "Das Programm wird beendet!" << endl; cout << endl; }
Ok es geht schon, aber das Programm wird nicht beendet, da ich den Befehl nicht weiss und auch nichts gefunden hab. Hat jemand Tipps?
Danke
-
benutz lieber eine map
class bla-bla public: std::map<string,int> products;
und im Constructor
products["Kaffee"]=50; products["Schokolade"]=60;
usw.
-
Maddy schrieb:
Ok es geht schon, aber das Programm wird nicht beendet, da ich den Befehl nicht weiss und auch nichts gefunden hab. Hat jemand Tipps?
Dankeabort() oder exit(hier ruckgabecode)
-
kitov schrieb:
Maddy schrieb:
Ok es geht schon, aber das Programm wird nicht beendet, da ich den Befehl nicht weiss und auch nichts gefunden hab. Hat jemand Tipps?
Dankeabort() oder exit(hier ruckgabecode)
Vermutlich reicht schon ein einfaches 'return' aus.
(btw, eine lesbare Code-Formatierung hat noch niemandem geschadet)
-
Ich habe das ganze folgendermaßen gelöst:
// kaffeautomat.cpp - Ein Programm zum Kaffee kaufen. #include <iostream> #include <string> #include <cstdlib> using namespace std; class automatenaufbau { private: int geld; // Gibt an wieviel Geld der Kunde hat. int einwurf; // Gibt an wieviel Geld in den Automaten eingeworfen wurde. int auswahl; // Speichert das ausgewählte Produkt. const static string produktname[5]; const static int produktkosten[5]; public: void gruss() // Die Begrüssung des Kunden. { cout << endl; cout << "Willkommen beim Kaffeeautomat Version 1.0" << endl; cout << endl; } void geldvorhanden() { cout << "Wieviel Geld haben Sie bei sich? (bitte in cent angeben)" << endl; cin >> geld; cout << endl; cout << "Sie haben " << geld << " cent bei sich." << endl; } void produktanzeige() // Gibt die Produkte aus die es gibt (auch Speicher ist hier drinne). { cout << endl; cout << "Unsere Produkte: " << endl; cout << endl; cout << "1. " << produktname[0] << ": " << produktkosten[0] << " cent" << endl; cout << "2. " << produktname[1] << ": " << produktkosten[1] << " cent" << endl; cout << "3. " << produktname[2] << ": " << produktkosten[2] << " cent" << endl; cout << "4. " << produktname[3] << ": " << produktkosten[3] << " cent" << endl; cout << "5. " << produktname[4] << ": " << produktkosten[4] << " cent" << endl; cout << endl; } void produktauswahl() // Auwahl der Produkte. { cout << "Wählen Sie ein Produkt: (1 - 5): "; cin >> auswahl; while (auswahl <= 0 || auswahl >= 6) // Schutz vor Produkten die es nicht gibt. { cout << "Dieses Produkt gibt es nicht!" << endl; cout << "Wählen Sie ein Produkt: (1 - 5): "; cin >> auswahl; } if (auswahl >= 1 || auswahl <= 5) // Zeigt das Produkt an das ausgewählt wurde. { cout << endl; cout << "Ihr gewähltes Produkt: " << produktname[auswahl - 1] << endl; cout << endl; } if (geld <= produktkosten[auswahl - 1]) // Überprüft ober der Kunde genug Geld dabei hat. { cout << "Sie haben nicht genug Geld dabei!" << endl; cout << "Das Programm wird beendet!" << endl; cout << endl; exit(0); } } void geldeinwurf() // Hier wird das Geld eingeworfen und angezeigt wieviel man einwerfen muss. { cout << "Bitte werfen Sie " << produktkosten[auswahl - 1] << " cent passend in den Automaten ein" << endl; cout << "Ihr Einwurf: "; cin >> einwurf; cout << endl; while (einwurf != produktkosten[auswahl - 1]) { cout << "Ihr Geld wird wieder ausgezahlt." << endl; cout << endl; cout << "Bitte erneut " << produktkosten[auswahl - 1] << " cent einwerfen." << endl; cout << "Ihr Einwurf: "; cin >> einwurf; cout << endl; } } void produktausgabe() // Hier kommt das Produkt aus dem Automaten, und das Restgeld wird angezeigt. { cout << "Ihr(e) " << produktname[auswahl - 1] << " wird aus dem Automaten gelassen." << endl; cout << endl; cout << "Bitte entnehmen Sie das Produkt aus dem Automaten" << endl; cout << endl; cout << "Sie haben noch " << geld - produktkosten[auswahl - 1] << " cent." << endl; cout << endl; cout << "Danke das Sie beim Kaffeeautomat Version 1.0 eingekauft haben" << endl; cout << endl; } }; const string automatenaufbau::produktname[5] = {"Kaffee", "Heisse Schokolade", "Pfefferminztee", "Cappuchino", "Kaffe Latte"}; // Name der Produkte. const int automatenaufbau::produktkosten[5] = {50, 60, 45, 90, 110}; // Kosten der Produkte. int main() { automatenaufbau automat; automat.gruss(); automat.geldvorhanden(); automat.produktanzeige(); automat.produktauswahl(); automat.geldeinwurf(); automat.produktausgabe(); return 0; }
Anmerkungen: exit ist eine dennoch ein wenig unangemessene Funktion. In der Praxis würde ich hier stattdessen einen return-Code zurückgeben oder eine Exception schmeissen.
-
Danke für die Tipps
Hab die Lösung von wolfgke genommen, da diese weniger Schreibarbeit hat und doch recht übersichtlich ist
Gruß
-
// kaffeautomat.cpp - Ein Programm zum Kaffee kaufen. #include <iostream> #include <string> #include <map> using namespace std; void gruss() // Die Begrüssung des Kunden. { cout << endl; cout << "Willkommen beim Kaffeeautomat Version 1.0" << endl; cout << endl; } class automatenaufbau { private: int geld; // Gibt an wieviel Geld der Kunde hat. int einwurf; // Gibt an wieviel Geld in den Automaten eingeworfen wurde. string auswahl; // Speichert das ausgewählte Produkt. int rueckgeld; // Falls zuviel eingeworfen wurde. map<string, int> produkte; map<string, int>::iterator iter; public: automatenaufbau() { produkte.insert(pair<string, int>("kaffee", 50)); produkte.insert(pair<string, int>("Heisse Schokolade", 60)); produkte.insert(pair<string, int>("Tee", 45)); produkte.insert(pair<string, int>("Cappuchino", 90)); produkte.insert(pair<string, int>("Kaffe Latte", 110)); } void geldvorhanden() { cout << "Wieviel Geld haben Sie bei sich? (bitte in cent angeben)" << endl; cin >> geld; cout << endl; cout << "Sie haben " << geld << " cent bei sich." << endl; } void produktanzeige() // Gibt die Produkte aus die es gibt (auch Speicher ist hier drinne). { //string produktname[5] = {"Kaffee", "Heisse Schokolade", "Pfefferminztee", "Cappuchino", "Kaffe Latte"}; // Name der Produkte. //int produktkosten[5] = {50, 60, 45, 90, 110}; // Kosten der Produkte. cout << endl; cout << "Unsere Produkte: " << endl; cout << endl; iter = produkte.begin(); while(iter != produkte.end()) { cout << iter->first << ": " << iter->second << endl; iter++; } } void produktauswahl() // Auwahl der Produkte. { do { cout << "Wählen Sie ein Produkt: (z.B. " << produkte.begin()->first << "): "; getline(cin, auswahl); iter = produkte.find(auswahl); if (iter != produkte.end()) // Zeigt das Produkt an das ausgewählt wurde. { cout << endl; cout << "Ihr gewähltes Produkt: " << auswahl << endl; cout << endl; } } while(iter == produkte.end()); if (geld <= iter->second) // Überprüft ober der Kunde genug Geld dabei hat. { cout << "Sie haben nicht genug Geld dabei!" << endl; cout << "Das Programm wird beendet!" << endl; cout << endl; } } void geldeinwurf() // Hier wird das Geld eingeworfen und angezeigt wieviel man einwerfen muss. { cout << "Bitte werfen Sie " << produkte[auswahl] << " cent passend in den Automaten ein" << endl; cout << "Ihr Einwurf: "; do { cin >> einwurf; cout << endl; cout << "Ihr Geld wird wieder ausgezahlt." << endl; cout << endl; cout << "Bitte erneut " << produkte[auswahl] << " cent einwerfen." << endl; cout << "Ihr Einwurf: "; } while (einwurf != produkte[auswahl]); } void produktausgabe() // Hier kommt das Produkt aus dem Automaten, und das Restgeld wird angezeigt. { cout << "Ihr(e) " << auswahl << " wird aus dem Automaten gelassen." << endl; cout << endl; cout << "Bitte entnehmen Sie das Produkt aus dem Automaten" << endl; cout << endl; geld -= produkte[auswahl]; cout << "Sie haben noch " << geld << " cent." << endl; cout << endl; cout << "Danke das Sie beim Kaffeeautomat Version 1.0 eingekauft haben" << endl; cout << endl; } }; int main() { automatenaufbau automat; gruss(); automat.geldvorhanden(); automat.produktanzeige(); automat.produktauswahl(); automat.geldeinwurf(); automat.produktausgabe(); return 0; }
Mit ner Produkt Map
zeigerzeiger