Getrankeautomat



  • Hallo Leute!_!

    Ich möchte einen Getrankeautomat in C++ machen, der die folgende Eingenschaften hat.

    Man kann aus 3 Getraenke waehlen.
    Der Automat gibt max. 10 flasche pro Getraenk aus.
    hat Kühlung.
    Er gibt Rückgeld zurück.

    Ich möchte den so aendern dass vor der Berechnung des Gesamtpreises geprüft wird ob noch genügend Flaschen des gewünschten Getraenks vorhanden sin. Wenn nicht muss der Gesamtpreis aus der noch maximal verfügbaren Anzahl Flashen berechnet werden.

    #include <iostream>
    using namespace std;
    
    //die Vereinbarung der Klasse muenzeinheit
    class muenzeinheit
    {
        //die Attribute
        int betrag;
        int nochZuZahlen;
        int rueckgeld;
    
        //die Methoden
        public:
        void init();
        void muenzenAnnehmen(int wert);
        int rueckgeldGeben();
        //zum Setzen des Betrags
        void setBetrag(int preis);
        //zum Abfragen des noch zu zahlenden Betrags
        int getnochZuZahlen();
    };
    
    void muenzeinheit::init()
    {
        betrag = 0;
        nochZuZahlen = 0;
        rueckgeld = 0;
    }
    
    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
        void init();
        int getraenkeWaehlen();
        void getraenkAusgeben(int anzahl, int getraenkeIndex);
        void kuehlen(bool anaus);
    };
    
    void getraenkeautomat::init()
    {
        //die Getränke eintragen
        getraenk[0] = "Limonade";
        getraenk[1] = "Wasser";
        getraenk[2] = "Bier";
    
        //die Anzahl der Flaschen
        anzahlFlaschen[0] = 10;
        anzahlFlaschen[1] = 10;
        anzahlFlaschen[2] = 10;
    
        //die Kühlung ist aus
        kuehlung = false;
    
        //eine Instanz der Münzeinheit erzeugen
        zahlomat = new muenzeinheit();
        //die Instanz initialisieren
        zahlomat->init();
    }
    
    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;
        automat = new getraenkeautomat();
    
        //Instanz initialisieren
        automat->init();
        //ein Getränk auswählen
        do {
            auswahl = automat->getraenkeWaehlen();
        } while (auswahl == -1);
    
        //die Instanzen freigeben
        delete(automat);
    
        return 0;
    }
    


  • Interessantes Thema.

    Kenne mich auch ein wenig mit C++ aus und kenne auch Codes für so einen Automaten.

    Wie er allerdings vor Berechnung des gesamtpreises prüft ob noch genügend Flaschen des gewünschten Getränks vorhanden sind weiß ich auch nicht... Sorry!

    Aber ich wäre echt mal gespannt zu sehen wie man das Realisiert. Hoffe du bekommst noch eine Antwort bzw. einen Tipp.



  • Ist das überhaupt C++/Cli? Schaut wie richtiges C++ aus.

    Was mir schon mal ins Auge springt (eigentlich vieles, aber ich will jetzt nicht auf alles eingehen), sind deine init Methoden. Dafür werden in C++ Konstruktoren verwendet. Eine init Methode ohne Parameter schaut schon mal sehr verdächtig aus.

    Was genau ist dein Problem? Du hast in deinem Getränkeautomaten doch "anzahlFlaschen". Damit machst du im Code auch was. Was genau ist dann das Problem? Bitte nicht einfach Code hinknallen und andere nach dem Fehler suchen lassen, das will keiner. Beschreib genau, was nicht so funktioniert, wie du es erwartest, oder was du nicht verstehst.



  • Hast du hier schon eine Lösung gefunden?



  • Definitiv falsches Forum, besser wäre C++.


Anmelden zum Antworten