Kleines Problem mit dem Getränkeautomaten
-
Hi,
Ich hab folgendes Problem ich hab eine Klasse hinzugefügt (getraenke) die preise namen und die anzahl der noch vorhandenen Flaschen speichert. Das funktioniert soweit auch alles es lässt sich ausführen und es kommen keine Fehler oder Warnmeldungen. Aber anstatt das er den kompletten Preis dann anzeigt zählt er von einer ewig hochen Zahl runter. Ich finde aber den Fehler nicht bin noch nicht so gut in C++ wäre Super wenn mir jemand einen Tipp geben könnte wo ich was vergessen habe zu ändern.hier mal der Quelltext:
#include <iostream> #include <cmath> using namespace std; //die Klasse getraenke class getraenke { public: //die Attribute string getraenk[3]; int anzahlFlaschen[3]; int preisProFlasche[3]; //die Methoden //der Konstruktor getraenke(int anzahl1, int anzahl2, int anzahl3, int preis1, int preis2, int preis3); //der Destruktor ~getraenke(); }; getraenke::getraenke(int anzahl1, int anzahl2, int anzahl3, int preis1, int preis2, int preis3) { //die Getraenke eintragen getraenk[0]="Limonade"; getraenk[1]="Wasser"; getraenk[2]="Bier"; //die Anzahl festlegen anzahlFlaschen[0]=anzahl1; anzahlFlaschen[1]=anzahl2; anzahlFlaschen[2]=anzahl3; preisProFlasche[0]=preis1; preisProFlasche[1]=preis2; preisProFlasche[2]=preis3; } getraenke::~getraenke() { cout<<"Eine Instanz der Klasse Getraenke wurde zerstört."<<endl; } //die Vereinbarung der Klasse muenzeinheit class muenzeinheit { //die Attribute int betrag; int nochZuZahlen; int rueckgeld; //die Methoden public: //der Konstruktor muenzeinheit(); //der Destruktor ~muenzeinheit(); void muenzenAnnehmen(int wert); int rueckgeldGeben(); //zum Setzen des Betrags void setBetrag(int preis); //zum Abfragen des noch zu zahlenden Betrags int getnochZuZahlen(); }; muenzeinheit::muenzeinheit() { betrag = 0; nochZuZahlen = 0; rueckgeld = 0; } muenzeinheit::~muenzeinheit() { cout << "Eine Instanz der Klasse muenzeinheit wurde zerstoert." << endl; } void muenzeinheit::muenzenAnnehmen(int wert) { //den eingeworfenen Betrag abziehen nochZuZahlen = nochZuZahlen - wert; } int muenzeinheit::rueckgeldGeben() { //den absoluten Betrag von nochZuZahlen als Rückgeld liefern rueckgeld = abs(nochZuZahlen); return rueckgeld; } void muenzeinheit::setBetrag(int preis) { betrag = preis; nochZuZahlen = betrag; } int muenzeinheit::getnochZuZahlen() { return nochZuZahlen; } //die Vereinbarung der Klasse getraenkeautomat class getraenkeautomat { //die Attribute bool kuehlung; //jetzt ist die Münzeinheit Teil des Getränkeautomaten muenzeinheit *zahlomat; getraenke* getraenkomat; public: //die Methoden //der Konstruktor //übergeben werden drei int-Typen für die Anzahl und ein Zeiger auf die Klasse muenzeinheit getraenkeautomat(muenzeinheit *tempZahlomat,getraenke *tempgetraenkomat); //der Destruktor ~getraenkeautomat(); int getraenkeWaehlen(); void getraenkAusgeben(int anzahl, int getraenkeIndex); void kuehlen(bool anaus); }; getraenkeautomat::getraenkeautomat(muenzeinheit *tempZahlomat,getraenke *tempgetraenkomat) { //die Kühlung ist aus kuehlung = false; //die Instanz der Münzeinheit wird zugewiesen zahlomat = tempZahlomat; getraenkomat = tempgetraenkomat; } getraenkeautomat::~getraenkeautomat() { cout << "Eine Instanz der Klasse getraenkeautomat wurde zerstoert." << endl; } int getraenkeautomat::getraenkeWaehlen() { int auswahl, anzahl, preisProFlasche; //die Auswahl cout << "Bitte waehlen Sie ein Getraenk: " << endl; cout << "Es gibt folgende Auswahl: " << endl; for (int index = 0; index < 3; index++) cout << index+1 << " - " << getraenkomat->getraenk[index] << endl; // es wird geprüft ob die Eingabe richtig ist do{ cout << "Bitte waehlen Sie Ihr Getraenk (Nr 1-3): "; cin >> auswahl; }while(auswahl>3); //gibt es noch Flaschen vom gewählten Getränk? if (getraenkomat->anzahlFlaschen[auswahl-1] != 0) { //das Getränk ausgeben cout << "Wie viele Flaschen moechten Sie? "; cin >> anzahl; //erst muss bezahlt werden //der Preis 10 ist fest vorgegeben cout << "Sie muessen " << anzahl * preisProFlasche << " Cent bezahlen." << endl; zahlomat->setBetrag(anzahl * preisProFlasche); do { cout << "Es fehlen noch " << zahlomat->getnochZuZahlen() << " Cent." << endl; zahlomat->muenzenAnnehmen(3); } while (zahlomat->getnochZuZahlen() >0); //das Getränk ausgeben auswahl = auswahl - 1; getraenkAusgeben(anzahl, auswahl); } else { cout << "Das gewaehlte Getraenk ist leider nicht mehr vorhanden." << endl; auswahl = -1; } return auswahl; } void getraenkeautomat::getraenkAusgeben(int anzahl, int getraenkeIndex) { //gibt es noch genügend Flaschen? if (anzahl <= getraenkomat->anzahlFlaschen[getraenkeIndex]) { cout << "Sie erhalten " << anzahl << " Flasche(n) " << getraenkomat->getraenk[getraenkeIndex] << endl; getraenkomat->anzahlFlaschen[getraenkeIndex] = getraenkomat->anzahlFlaschen[getraenkeIndex] - anzahl; } else { cout << "Es sind nur noch " << getraenkomat->anzahlFlaschen[getraenkeIndex] << " Flasche(n) " << getraenkomat->getraenk[getraenkeIndex] << " vorhanden. "; cout << "Sie erhalten den Rest." << endl; getraenkomat->anzahlFlaschen[getraenkeIndex] = 0; } //Geld zurückgeben cout << "Sie erhalten " << zahlomat->rueckgeldGeben() << " Cent zurueck." << endl; } void getraenkeautomat::kuehlen(bool anaus) { if (anaus == true) { kuehlung = true; cout << "Die Kuehlung ist eingeschaltet. " << endl; } else { kuehlung = false; cout << "Die Kuehlung ist ausgeschaltet. " << endl; } } int main() { int auswahl; //Instanz erzeugen //der Zeiger auf die Klasse getraenkeautomat *automat; //die Münzeinheit erzeugen getraenke *getraenkomat1 = new getraenke(2,6,9,10,8,6); muenzeinheit *einheit = new muenzeinheit(); //die Münzeinheit wird jetzt übergeben automat = new getraenkeautomat(einheit,getraenkomat1); //ein Getränk auswählen do { auswahl = automat->getraenkeWaehlen(); } while (auswahl == -1); //die Instanzen freigeben delete(automat); return 0; }
So erstes erledigt ok ich schau mal wo ich das finde zum einstellen
Danke schon mal im vorraus.Ryo
-
Editier mal Deinen Beitrag und füg die Code Tags hinzu.
Code markieren. Dann C++ Knopf unter dem Smiley drücken.Und stell mal das Warnlevel Deines Compilers höher. Meiner warnt mich nämlich, wenn ich Deinen Code kompiliere.
-
Wahrscheinlich eine nicht initialisierte Variable. Schau mal deinen Code durch, ob du sowas findest.
Aber so auf den ersten Blick gefällt mir der Code überhaupt nicht. Und viele Kommentare sind völlig nutzlos.