Klasse erzeugen



  • Hi Leute ich habe ein Problem (Informatikanfänger),ich muß eine Klasse (getraenk)in ein bestehendes Programm einbringen .Ich habe schon mehere ansätze Probiert aber anscheinend verstehe ich es nicht bei mir läuft der Getränkeautomat auch ohne class Getraenk wenn mir einer helfen könnte wäre echt toll

    /* ##################################
    Der Getränkeautomat
    ###################################*/

    #include <iostream>
    #include <cmath>
    using namespace std;
    // klasse getraenk
    class Getraenk {

    string name;
    int preis;
    int anzahlFlaschen;

    public:
    //Methoden:
    void setName(string a_name) {name = a_name;}
    void setPreis(int a_preis) {preis = a_preis;}
    void setAnzahl(int a_anzahl) {anzahlFlaschen = a_anzahl;}

    string getName() { return name;}
    int getPreis() { return preis;}
    int getAnzahl() { return anzahlFlaschen; }

    // Konstruktor

    Getraenk( string a_name, int a_preis, int a_anzahlFlaschen )
    : name(a_name), preis(a_preis), anzahlFlaschen(a_anzahlFlaschen) {}
    };

    //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(10);
    } 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;
    cout << "Sie erhalten " << zahlomat->rueckgeldGeben() << "Cent zurueck." << endl;
    }
    else
    {
    cout << "Es sind nur noch " << anzahlFlaschen[getraenkeIndex] << " Flasche(n) " << getraenk[getraenkeIndex] << " vorhanden. ";
    cout << "Sie erhalten den Rest." << endl;

    //Geld zurückgeben
    cout << "Sie erhalten " << zahlomat->rueckgeldGeben() + (anzahl - anzahlFlaschen[getraenkeIndex]) * 10 << " Cent zurueck." << endl;
    anzahlFlaschen[getraenkeIndex] = 0;
    }
    }

    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ähle
    do
    {
    automat->kuehlen(true);

    auswahl = automat->getraenkeWaehlen();
    }
    while (auswahl == -1);

    automat->kuehlen(false);

    //die Instanzen freigeben
    delete (einheit);
    delete (automat);

    return 0;
    }



  • Den Code bitte in Tags.
    Hier stehts wie es geht: http://www.c-plusplus.net/forum/304133


  • Mod

    pietro d76 schrieb:

    Probiert aber anscheinend verstehe ich es nicht bei mir läuft der Getränkeautomat auch ohne class Getraenk

    Weil er einen string für Getränke benutzt. Deine Getränkeklasse wird nirgendwo angepackt.

    wenn mir einer helfen könnte wäre echt toll

    Was ist deine Frage? Du willst sicher mehr, als dass dich jemand darauf aufmerksam macht, dass der Automat einen string benutzt.



  • pietro d76 schrieb:

    Ich habe schon mehere ansätze Probiert

    welche



  • Tschuldigung bin neu hier ich wollte euch nur zeigen das ich auch dran arbeite und es nicht nur von euch lösen lassen will.Zu genauerer Verständnis des problems
    die Attribute für Getränke durch Instanzen der Klasse Getränk.
    die klasse getraenk habe ich schon erstellt
    class Getraenk {

    string name;
    int preis;
    int anzahlFlaschen;

    public:
    //Methoden:
    void setName(string a_name) {name = a_name;}
    void setPreis(int a_preis) {preis = a_preis;}
    void setAnzahl(int a_anzahl) {anzahlFlaschen = a_anzahl;}

    string getName() { return name;}
    int getPreis() { return preis;}
    int getAnzahl() { return anzahlFlaschen; }

    // Konstruktor

    Getraenk( string a_name, int a_preis, int a_anzahlFlaschen )
    : name(a_name), preis(a_preis), anzahlFlaschen(a_anzahlFlaschen) {}
    };



  • #include <iostream> 
    #include <cmath> 
    using namespace std; 
    
    class Getraenk { 
    	string name; 
    	int preis; 
    	int anzahlFlaschen; 
    
    public: 
    	void setName(string a_name) {name = a_name;} 
    	void setPreis(int a_preis) {preis = a_preis;} 
    	void setAnzahl(int a_anzahl) {anzahlFlaschen = a_anzahl;} 
    
    	string getName() { return name;} 
    	int getPreis() { return preis;} 
    	int getAnzahl() { return anzahlFlaschen; } 
    
    	Getraenk(){}
    	Getraenk( string a_name, int a_preis, int a_anzahlFlaschen ) 
    		: name(a_name), preis(a_preis), anzahlFlaschen(a_anzahlFlaschen) {} 
    }; 
    
    class muenzeinheit 
    { 
    	int betrag; 
    	int nochZuZahlen; 
    	int rueckgeld; 
    
    public: 
    	muenzeinheit() :
    		betrag(0), nochZuZahlen(0), rueckgeld(0){}
    	~muenzeinheit(); 
    	void muenzenAnnehmen(int wert); 
    	int rueckgeldGeben(); 
    	void setBetrag(int preis); 
    	int getnochZuZahlen(); 
    }; 
    
    muenzeinheit::~muenzeinheit() { 
    	cout << "Eine Instanz der Klasse muenzeinheit wurde zerstoert." << endl; 
    } 
    
    void muenzeinheit::muenzenAnnehmen(int wert) { 
    	nochZuZahlen = nochZuZahlen - wert; 
    } 
    
    int muenzeinheit::rueckgeldGeben() { 
    	rueckgeld = abs(nochZuZahlen); 
    	return rueckgeld; 
    } 
    
    void muenzeinheit::setBetrag(int preis) { 
    	betrag = preis; 
    	nochZuZahlen = betrag; 
    } 
    
    int muenzeinheit::getnochZuZahlen() { 
    	return nochZuZahlen; 
    } 
    
    class getraenkeautomat 
    { 
    	Getraenk getraenke[3];
    	bool kuehlung; 
    
    	muenzeinheit *zahlomat; 
    
    public: 
    	getraenkeautomat(int anzahl1, int anzahl2, int anzahl3, muenzeinheit *tempZahlomat); 
    	~getraenkeautomat(); 
    	int getraenkeWaehlen(); 
    	void getraenkAusgeben(int anzahl, int getraenkeIndex); 
    	void kuehlen(bool anaus); 
    }; 
    
    getraenkeautomat::getraenkeautomat(int anzahl1, int anzahl2, int anzahl3, muenzeinheit *tempZahlomat) 
    { 
    	getraenke[0].setName("Limonade");
    	getraenke[1].setName("Wasser");
    	getraenke[2].setName("Bier");
    
    	getraenke[0].setAnzahl(anzahl1); 
    	getraenke[1].setAnzahl(anzahl2); 
    	getraenke[2].setAnzahl(anzahl3); 
    
    	kuehlung = false; 
    	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 << " - " << getraenke[index].getName() << endl; 
    	cout << "Geben Sie die gewuenschte Nummer ein: "; 
    	cin >> auswahl; 
    
    	if (getraenke[auswahl-1].getAnzahl() > 0) 
    	{ 
    
    	cout << "Wie viele Flaschen moechten Sie? "; 
    	cin >> anzahl; 
    
    	cout << "Sie muessen " << anzahl * 10 << " Cent bezahlen." << endl; 
    	zahlomat->setBetrag(anzahl * 10); 
    
    	do { 
    	cout << "Es fehlen noch " << zahlomat->getnochZuZahlen() << " Cent." << endl; 
    	zahlomat->muenzenAnnehmen(10); 
    	} 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 <= getraenke[getraenkeIndex].getAnzahl()) 
    	{ 
    	cout << "Sie erhalten " << anzahl << " Flasche(n) " << getraenke[getraenkeIndex].getName() << endl; 
    	getraenke[getraenkeIndex].setAnzahl(getraenke[getraenkeIndex].getAnzahl() - anzahl); 
    	cout << "Sie erhalten " << zahlomat->rueckgeldGeben() << "Cent zurueck." << endl; 
    	} 
    	else 
    	{ 
    	cout << "Es sind nur noch " << getraenke[getraenkeIndex].getAnzahl() << " Flasche(n) " << getraenke[getraenkeIndex].getName() << " vorhanden. "; 
    	cout << "Sie erhalten den Rest." << endl; 
    
    	//Geld zurückgeben 
    	cout << "Sie erhalten " << zahlomat->rueckgeldGeben() + (anzahl - getraenke[getraenkeIndex].getAnzahl()) * 10 << " Cent zurueck." << endl; 
    	getraenke[getraenkeIndex].setAnzahl(0);
    	} 
    } 
    
    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ähle 
    	do 
    	{ 
    	automat->kuehlen(true); 
    
    	auswahl = automat->getraenkeWaehlen(); 
    	} 
    	while (auswahl == -1); 
    
    	automat->kuehlen(false); 
    
    	//die Instanzen freigeben 
    	delete (einheit); 
    	delete (automat); 
    
    return 0; 
    }
    

    Damit der Code so aussieht verwende Code Tags.
    Ich habe die String Array "getraenk" und die Array "anzahlFlaschen" durch eine Array von der Klasse "Getraenk" ersetzt. Anschließend den Restlichen Code drauf angepasst.
    Warum verwendest du manchmal die Initialisierungsliste bei den Konstruktor und manchmal nicht?
    Der veränderte Code von mir kann Fehler enthalten.



  • Bashar schrieb:

    pietro d76 schrieb:

    Ich habe schon mehere ansätze Probiert

    welche

    Ich habe z.b. versucht einen Zeiger auf die Klasse Getränk zu erzeugen (getraenk *getraenk) im klasse Getränkeautomat aber wenn ich das mache erscheind immer der fehler muenzeinheit nicht declared.



  • Danke Pringles,ich werde deine ansätze ausprobieren wenns klappt melde ich mich!



  • pietro d76 schrieb:

    Ich habe z.b. versucht einen Zeiger auf die Klasse Getränk zu erzeugen (getraenk *getraenk) im klasse Getränkeautomat aber wenn ich das mache erscheind immer der fehler muenzeinheit nicht declared.

    Der Fehler kann mit dem Getraenk nichts zu tun haben.



  • Bashar schrieb:

    pietro d76 schrieb:

    Ich habe z.b. versucht einen Zeiger auf die Klasse Getränk zu erzeugen (getraenk *getraenk) im klasse Getränkeautomat aber wenn ich das mache erscheind immer der fehler muenzeinheit nicht declared.

    Der Fehler kann mit dem Getraenk nichts zu tun haben.

    Ja der meinung bin ich auch aber wenn ich den Zeiger wider entferne läuft es ja wieder.



  • Danke Pringles musste es zwar leicht überarbeiten ; weil der den grössten teil des Programm vorgegeben ist aber es klappt wunderbar nochmals Danke.


Log in to reply