c++ Getraenkeautomat



  • Hallo,

    würde mich freuen wenn Ihr mir hierbei auf die Sprünge helfen würdet. Ich sitze seit Tagen vor einer Aufgabe und ich komm nicht weiter. Es geht hier um ein Getränkeautomat der so verändert werden soll, dass vor der Berechnung des Gesamtpreises geprüft wird, ob noch genügend Flaschen des gewünschten Getränks vorhanden sind. Wenn nicht genügen Flaschen vorhanden sind, muss der Gesamtpreis aus der noch maximal verfügbaren Anzahl Flaschen berechnet werden.

    Nun geh ich mal nicht davon aus, dass Ihr meine Aufgabe einfach so löst. Das erwarte ich auch gar nicht 😉 . Bitte gebt mir ein Anahltspunkt wie und wo ich ansetzen soll um die Aufgabe zu lösen.

    Hier ist der Getränkeautomat:

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    //die Klasse getraenke
    class getraenke
    {
        public:
        //die Attribute
        string getraenk[3];
        int anzahlFlaschen[3];
        int preisProFlasche;
    
        //die Methoden
        //der Konstruktor
        getraenke(int anzahl1, int anzahl2, int anzahl3);
        //der Destruktor
        ~getraenke();
    };
    
    getraenke::getraenke(int anzahl1, int anzahl2, int anzahl3)
    {
        //die Getraenke eintragen
        getraenk[0]="Limonade";
        getraenk[1]="Wasser";
        getraenk[2]="Bier";
        //die Anzahl festlegen
        anzahlFlaschen[0]=anzahl1;
        anzahlFlaschen[1]=anzahl2;
        anzahlFlaschen[2]=anzahl3;
    }
    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;
        //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 * 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 <= 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(10,20,30);
        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;
    }
    


  • Möglicherweise hilft dir jemand, wenn du eine Frage stellst.



  • Sind die Klassengerüste so fest vorgegeben oder darf das alles verändert werden?



  • daddy_felix schrieb:

    Sind die Klassengerüste so fest vorgegeben oder darf das alles verändert werden?

    Tob dich aus!



  • manni66 schrieb:

    Möglicherweise hilft dir jemand, wenn du eine Frage stellst.

    Also meine Frage ist wo der Ansatz ist um die Aufgabe zu lösen. Wahrscheinlich gibt es viele. Aber ich steh auf nem riesen Schlauch von dem ich nicht runter komm!



  • hagbartceline9383 schrieb:

    manni66 schrieb:

    Möglicherweise hilft dir jemand, wenn du eine Frage stellst.

    Also meine Frage ist wo der Ansatz ist um die Aufgabe zu lösen. Wahrscheinlich gibt es viele. Aber ich steh auf nem riesen Schlauch von dem ich nicht runter komm!

    Was für einen Ansatz soll es denn da noch geben? Den Satz kann man direkt von Deutsch in C++ übersetzen.



  • hagbartceline9383 schrieb:

    manni66 schrieb:

    Möglicherweise hilft dir jemand, wenn du eine Frage stellst.

    Also meine Frage ist wo der Ansatz ist um die Aufgabe zu lösen. Wahrscheinlich gibt es viele. Aber ich steh auf nem riesen Schlauch von dem ich nicht runter komm!

    Ich schaue mir ab und an Informatikvorlesungen an und dort wurde so etwas mit endlichen Automaten sehr elegant gelöst. Schau dir einfach mal so ein paar Vorlesungen zu Algorithmen an. Das ist wie Video2Brain und meist total einfach. Manchmal sind auch Übungsblätter mit dabei, die dann kurz in der nächsten Vorlesung besprochen werden. Alles echt easy zu verstehen, auch ohne ein Abi zu haben. Früher habe ich mir das Wissen allein durch Fachbücher rein geprügelt, aber dank Online-Vorlesung bekommt man echt alles schön vorgekaut. Hat was von IT für Dummies.



  • Wo siehst du dir die Vorlesungen an? Kostet das was?


  • Mod

    where schrieb:

    Wo siehst du dir die Vorlesungen an? Kostet das was?

    Entfuehr nicht das Thema! Die offensichtliche Antwort ist doch Youtube oder andere per Google findbare Seiten (die guten sind natuerlich auf Englisch!). Ob das was kostet ist fast eine philosophische Frage. Wenn ein Gut scheinbar nichts kostet, dann ist die gehandelte Ware in Wirklichkeit oft man selbst.



  • where schrieb:

    Wo siehst du dir die Vorlesungen an? Kostet das was?

    Ne, kostet nichts, außer Interesse an Wissen. Du wirst das aufsaugen wie ein trockener Schwamm. Es ist alles total einfach erklärt, wirklich für den letzten Menschen.

    http://www-lehre.inf.uos.de/~ainf/2013/index.html



  • Danke für die Hilfestellung. Habe die Aufgabe gerade gelöst. Viele Grüße



  • IDEFinder schrieb:

    where schrieb:

    Wo siehst du dir die Vorlesungen an? Kostet das was?

    Ne, kostet nichts, außer Interesse an Wissen. Du wirst das aufsaugen wie ein trockener Schwamm. Es ist alles total einfach erklärt, wirklich für den letzten Menschen.

    http://www-lehre.inf.uos.de/~ainf/2013/index.html

    Vielen Dank für den Link IDEFinder.
    Hast du auch Vorlesungsaufnahmen über C++ parat? 😉


Anmelden zum Antworten