Hallo ihr Lieben,
ich erlene momentan die C+±Programmiersprache, komme allerdings bei einer Aufgabe nicht weiter und benötige Hilfe den folgenden Code zu bearbeiten.
Hab in den letzten 4 Wochen schon alles mir erdenkliche Versucht, doch leider immer ohne Erfolg.
Entweder stürtzt das Programm immer komplett ab oder es wird nicht alles korrekt ausgegeben.
Ich bin nun langsam am Verzweifeln.
Bitte daher um eure Hilfe.
Danke im Voraus!!!
Aufgabe lautet:
Ändern Sie den Getränkeautomaten so, dass vor der Berechnung des Gesamtpreises
geprüft wird, ob noch genügend Flaschen des gewünschten Getränks vorhanden
sind. Wenn nicht, muss der Gesamtpreis aus der noch maximal verfügbaren
Anzahl Flaschen berechnet werden.
Hier der vorgegebene Code:
/* ##################################
Der Getränkeautomat Version 6
Mit Konstruktoren und Destruktoren
###################################*/
#include <iostream>
#include <cmath>
using namespace std;
//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
string getraenk[3];
int anzahlFlaschen[3];
bool kuehlung;
//jetzt ist die Münzeinheit Teil des Getränkeautomaten
muenzeinheit *zahlomat;
public:
//die Methoden
//der Konstruktor
//übergeben werden drei int-Typen für die Anzahl und ein Zeiger auf die Klasse muenzeinheit
getraenkeautomat(int anzahl1, int anzahl2, int anzahl3, muenzeinheit *tempZahlomat);
//der Destruktor
~getraenkeautomat();
int getraenkeWaehlen();
void getraenkAusgeben(int anzahl, int getraenkeIndex);
void kuehlen(bool anaus);
};
getraenkeautomat::getraenkeautomat(int anzahl1, int anzahl2, int anzahl3, muenzeinheit *tempZahlomat)
{
//die Getränke eintragen
getraenk[0] = "Limonade";
getraenk[1] = "Wasser";
getraenk[2] = "Bier";
//die Anzahl der Flaschen
//Sie werden jetzt durch die Argumente gesetzt
anzahlFlaschen[0] = anzahl1;
anzahlFlaschen[1] = anzahl2;
anzahlFlaschen[2] = anzahl3;
//die Kühlung ist aus
kuehlung = false;
//die Instanz der Münzeinheit wird zugewiesen
zahlomat = tempZahlomat;
}
getraenkeautomat::~getraenkeautomat()
{
cout << "Eine Instanz der Klasse getraenkeautomat wurde zerstoert." << endl;
}
int getraenkeautomat::getraenkeWaehlen()
{
int auswahl, anzahl;
//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 << " - " << getraenk[index] << endl;
cout << "Geben Sie die gewuenschte Nummer ein: ";
cin >> auswahl;
//gibt es noch Flaschen vom gewählten Getränk?
if (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 * 10 << " Cent bezahlen." << endl;
zahlomat->setBetrag(anzahl * 10);
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 <= anzahlFlaschen[getraenkeIndex])
{
cout << "Sie erhalten " << anzahl << " Flasche(n) " << getraenk[getraenkeIndex] << endl;
anzahlFlaschen[getraenkeIndex] = anzahlFlaschen[getraenkeIndex] - anzahl;
}
else
{
cout << "Es sind nur noch " << anzahlFlaschen[getraenkeIndex] << " Flasche(n) " << getraenk[getraenkeIndex] << " vorhanden. ";
cout << "Sie erhalten den Rest." << endl;
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
muenzeinheit *einheit = new muenzeinheit();
//die Münzeinheit wird jetzt übergeben
automat = new getraenkeautomat(10, 20, 30, einheit);
//ein Getränk auswählen
do {
auswahl = automat->getraenkeWaehlen();
} while (auswahl == -1);
//die Instanzen freigeben
delete(automat);
delete (einheit);
return 0;
}