Eisautomat



  • sei doch nicht so böse bitte 🙂



  • Ich habe hier eine Quellcode vom eisautomat, er ist aber nich objektorientiert weil ich nicht genau weiß wie das funtioniert.
    kann mir bitte jemand helfen??

    /---------------------------------------------------------------------------
    #include <iostream>
    #include <string>
    using namespace std;

    //---------------------------------------------------------------------------

    int main()
    {
    int muenzen; //Anzahl eingeworfener Münzen
    int betrag=0; //Eingeworfener Geldbetrag
    int wechselgeld; //Betrag, der vom Automat insgesamt ausbezahlt werden muss
    int rest; // noch auszubezahlender Betrag
    int sorte; //Eissorte
    int nochmal; //Verkaufsautomat beenden?
    bool passend;
    float preise[]={99, 120, 543, 188, 64}; //Preise der Eissorten
    string produkte[]={"Magnum", "Magnum Deluxe", "Schokobaer", "Marzipaneis", "Eiskonfekt"};
    int wert[]={1,2,5,10,20,50,100,200}; //Muenzgeldwerte
    int schacht[]={2,2,2,2,2,2,2,2}; //Anzahl Muenzen pro Schacht
    string name[]={"1 Cent", "2 Cent", "5 Cent", "10 Cent", "20 Cent", "50 Cent", "1 Euro", "2 Euro"};
    do{
    int i=4;
    int einwurf[]={0,0,0,0,0,0,0,0}; //aktueller Münzeinwurf pro Verkaufsvorgang
    betrag=0;
    cout<<"Unser Eisangebot:\n";
    while (i>=0) { //Ausgabe der Eisssorten mit Preis
    cout<<produkte[i] <<": "<<preise[i]<<" Cent ("<<i<<")\n";
    i--;
    }

    cout<<"\nBitte werfen Sie Muenzen ein.\n";
    for (i=7; i>=0; i--) { //Münzeinwurf
    cout<<"Wieviele " <<name[i]<<"-Muenzen werfen Sie ein?";
    cin>>einwurf[i];
    schacht[i]=schacht[i]+einwurf[i];
    betrag=betrag + einwurf[i]*wert[i];
    }
    for (i=7; i>=0; i--) { //Ausgabe der Münzen pro Schacht
    cout<<"\nNoch "<<schacht[i]<< " " <<name[i]<<" Muenzen als Wechselgeld vorhanden";
    }

    cout<<"\n\nSie haben "<<betrag<<" Cent eingeworfen\n\n";
    getchar();
    cout<<"Waehlen sie ihr Produkt durch Eingabe der in Klammern stehenden Zahl: ";
    cin >>sorte;
    cout<<"Ihre Wahl: "<<produkte[sorte]<<endl;
    getchar();
    if (preise[sorte]<=betrag) { //eingeworfener Geldbetrag passt
    cout<<"\nEingeworfener Betrag in Ordnung";
    passend = 1;
    wechselgeld = betrag-preise[sorte];
    rest=wechselgeld;
    cout<<"\nIhr Produkt: "<<produkte[sorte] <<" kostet "<<preise[sorte]<<" Cent"<<endl;
    cout<<"Sie bekommen folgenden Wechselbetrag: "<<wechselgeld<<" Cent"<<endl;
    cout<<"Hier noch in Muenzen: "<<endl;
    for (i=7; i>=0; i--) { //Berechnung Wechselgeld
    muenzen=rest/wert[i];
    if (schacht[i]>= muenzen) {
    rest=rest%wert[i];
    schacht[i]-=muenzen;
    cout<<name[i]<<" : "<<muenzen<<endl;
    }
    }
    for (i=7; i>=0; i--) { //Ausgabe der Münzen pro Schacht
    cout<<"\nNoch "<<schacht[i]<< " " <<name[i]<<" Muenzen als Wechselgeld vorhanden";
    }
    if (rest != 0) { //zuwenig Wechselgeld
    cout<<endl<<""<<endl;
    cout<<"Wechselgeld nicht ausreichend! Betrag bitte passend eingeben!"<<endl;
    cout<<"
    "<<endl;
    passend = 0;
    }

    }
    else { //zuwenig Geld eingeworfen
    cout<<endl<<""<<endl;
    cout<<"Betrag nicht in Ordnung."<<endl<<"Es fehlen noch "<<preise[sorte]-betrag<<" Cent"<<endl;
    cout<<endl<<"
    "<<endl;
    passend = 0;
    }

    if (!passend) { //Rückagbe der eingeworfenenen Münzen, da Verkauf nciht erfolgreich
    cout <<"Sie erhalten nun ihr eingeworfenes Geld zurueck"<<endl;
    for (i=7;i>=0; i--) {
    schacht[i]-=einwurf[i];
    }
    }

    cout<<endl<<endl<<"Nochmal? Geben Sie die 1 ein:"; //Abfrage, ob nochmal verkauft werden soll
    cin>>nochmal;
    cout<<"\n";

    }while (nochmal==1);
    getchar();
    return 0;
    }
    //---------------------------------------------------------------------------



  • Bitte... ^^

    class Eisautomat{
    
    Eisautomat(){
    nt muenzen; //Anzahl eingeworfener Münzen 
    int betrag=0; //Eingeworfener Geldbetrag 
    int wechselgeld; //Betrag, der vom Automat insgesamt ausbezahlt werden muss 
    int rest; // noch auszubezahlender Betrag 
    int sorte; //Eissorte 
    int nochmal; //Verkaufsautomat beenden? 
    bool passend; 
    float preise[]={99, 120, 543, 188, 64}; //Preise der Eissorten 
    string produkte[]={"Magnum", "Magnum Deluxe", "Schokobaer", "Marzipaneis", "Eiskonfekt"}; 
    int wert[]={1,2,5,10,20,50,100,200}; //Muenzgeldwerte 
    int schacht[]={2,2,2,2,2,2,2,2}; //Anzahl Muenzen pro Schacht 
    string name[]={"1 Cent", "2 Cent", "5 Cent", "10 Cent", "20 Cent", "50 Cent", "1 Euro", "2 Euro"}; 
    do{ 
    int i=4; 
    int einwurf[]={0,0,0,0,0,0,0,0}; //aktueller Münzeinwurf pro Verkaufsvorgang 
    betrag=0; 
    cout<<"Unser Eisangebot:\n"; 
    while (i>=0) { //Ausgabe der Eisssorten mit Preis 
    cout<<produkte[i] <<": "<<preise[i]<<" Cent ("<<i<<")\n"; 
    i--; 
    } 
    
    cout<<"\nBitte werfen Sie Muenzen ein.\n"; 
    for (i=7; i>=0; i--) { //Münzeinwurf 
    cout<<"Wieviele " <<name[i]<<"-Muenzen werfen Sie ein?"; 
    cin>>einwurf[i]; 
    schacht[i]=schacht[i]+einwurf[i]; 
    betrag=betrag + einwurf[i]*wert[i]; 
    } 
    for (i=7; i>=0; i--) { //Ausgabe der Münzen pro Schacht 
    cout<<"\nNoch "<<schacht[i]<< " " <<name[i]<<" Muenzen als Wechselgeld vorhanden"; 
    } 
    
    cout<<"\n\nSie haben "<<betrag<<" Cent eingeworfen\n\n"; 
    getchar(); 
    cout<<"Waehlen sie ihr Produkt durch Eingabe der in Klammern stehenden Zahl: "; 
    cin >>sorte; 
    cout<<"Ihre Wahl: "<<produkte[sorte]<<endl; 
    getchar(); 
    if (preise[sorte]<=betrag) { //eingeworfener Geldbetrag passt 
    cout<<"\nEingeworfener Betrag in Ordnung"; 
    passend = 1; 
    wechselgeld = betrag-preise[sorte]; 
    rest=wechselgeld; 
    cout<<"\nIhr Produkt: "<<produkte[sorte] <<" kostet "<<preise[sorte]<<" Cent"<<endl; 
    cout<<"Sie bekommen folgenden Wechselbetrag: "<<wechselgeld<<" Cent"<<endl; 
    cout<<"Hier noch in Muenzen: "<<endl; 
    for (i=7; i>=0; i--) { //Berechnung Wechselgeld 
    muenzen=rest/wert[i]; 
    if (schacht[i]>= muenzen) { 
    rest=rest%wert[i]; 
    schacht[i]-=muenzen; 
    cout<<name[i]<<" : "<<muenzen<<endl; 
    } 
    } 
    for (i=7; i>=0; i--) { //Ausgabe der Münzen pro Schacht 
    cout<<"\nNoch "<<schacht[i]<< " " <<name[i]<<" Muenzen als Wechselgeld vorhanden"; 
    } 
    if (rest != 0) { //zuwenig Wechselgeld 
    cout<<endl<<"***********************************************************************"<<endl; 
    cout<<"Wechselgeld nicht ausreichend! Betrag bitte passend eingeben!"<<endl; 
    cout<<"***********************************************************************"<<endl; 
    passend = 0; 
    } 
    
    } 
    else { //zuwenig Geld eingeworfen 
    cout<<endl<<"***********************************************************************"<<endl; 
    cout<<"Betrag nicht in Ordnung."<<endl<<"Es fehlen noch "<<preise[sorte]-betrag<<" Cent"<<endl; 
    cout<<endl<<"***********************************************************************"<<endl; 
    passend = 0; 
    } 
    
    if (!passend) { //Rückagbe der eingeworfenenen Münzen, da Verkauf nciht erfolgreich 
    cout <<"Sie erhalten nun ihr eingeworfenes Geld zurueck"<<endl; 
    for (i=7;i>=0; i--) { 
    schacht[i]-=einwurf[i]; 
    } 
    } 
    
    cout<<endl<<endl<<"Nochmal? Geben Sie die 1 ein:"; //Abfrage, ob nochmal verkauft werden soll 
    cin>>nochmal; 
    cout<<"\n"; 
    
    }while (nochmal==1); 
    getchar(); 
    return 0; 
    } 
    }
    ~Eisautomat(){}
    
    };
    
    int main(void){
    
    Eisautomat o;
    
    return 0;
    }
    


  • Sehr Freundlich danke aber irgendwie funktioniert es nicht richtig 😕



  • das ist ein Problem, das du selbst zu lösen hast, wenn du probleme mit objektorientiertheit hat, dann kauf diern buch, oder lass dir den stoff von irgendeinem Lehrer oder Dozenten erklären. Aber das dir irgendwer hier deine Aufgaben macht, während du selbst überhaupt kein interesse daran Zeigst, das selbt hinzubekommen, kansst du vergessen.



  • @Krux: ➡ Absolut!



  • naja gut ok danke trotzdem



  • für 50Euro, kein Thema....



  • Wie Krux schon sagte, ist es wichtig, dass du dir selbst überlegst, welche Klassen praktisch wären und wie ihre Objekte zusammen arbeiten könnten.
    Hier ist dennoch ein kleiner Vorschlag für einen Anfang:

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <vector>
    using namespace std;
    
    class Eis
    {
        string m_sorte;
        double m_preis;
    
    public:
    
        Eis(const string &sorte, double preis)
            : m_sorte(sorte), m_preis(preis)
        {
        }
    
        string sorte() const
        {
            return m_sorte;
        }
    
        double preis() const
        {
            return m_preis;
        }
    };
    
    ostream &operator<<(ostream &ausgabestrom, const Eis &e)
    {
        return ausgabestrom << e.sorte() << ": " << setw(20 - e.sorte().size()) << setprecision(2) << setiosflags(ios::fixed) << e.preis() << " Euro\n";
    }
    
    class Eisautomat
    {
        vector<Eis*> m_eis;
    
    public:
    
    	Eisautomat()
    	{
    	    eisEinfuegen("Magnum", .99);
    	    eisEinfuegen("Magnum Deluxe", 1.2);
    	    eisEinfuegen("Schoko Baer", 5.43);
    	    eisEinfuegen("Marzipaneis", 1.88);
    	    eisEinfuegen("Eiskonfekt", .64);
    	}
    
    	~Eisautomat()
    	{
    	    //Eis Objekte entsorgen
    	    for(vector<Eis*>::iterator eis = m_eis.begin(); eis != m_eis.end(); ++eis)
                delete (*eis);
    	}
    
    	void eisEinfuegen(const string &sorte, double preis)
    	{
    	    m_eis.push_back(new Eis(sorte, preis));
    	}
    
    	void praesentiereAngebot() const
    	{
    	    cout << "========================================\n";
    	    cout << "Unser Eisangebot\n\n";
    	    for (vector<Eis*>::const_iterator eis = m_eis.begin(); eis != m_eis.end(); ++eis)
    	    	cout << (**eis);
            cout << "========================================";
    	}
    };
    
    int main()
    {
    	Eisautomat a;
    	a.eisEinfuegen("Flutschfinger", 1.5);
    	a.praesentiereAngebot();
    }
    


  • es soll ja offensichtlich objekt orientiert sein, also würd ich in der hinsicht noch mehr objektorientiertheit nutzen, polymorphie und so. auch wenns bisschen überflüssig erscheint, es soll ja was beibringen.

    enum Sorte {
     MAGNUM, FLUTSCHFINGER, ... ;
    };
    
    class Eis {
     int preis;
     Sorte sorte;
     std::string name;
    
     public:
     Sorte getSorte();
     virtual std::string getName() = 0;
    };
    
    class Magnum : public Eis {
    };
    
    ... // noch mehr sorten
    
    class Fach {
     std::vector<Eis*> inhalt;
    
     public:
     int getAnzahl();
     void removeEis();
    };
    
    class Eisautomat {
     std::vector<Fach> sorten;
    
     public:
     std::vector<Sorten> getSorten();
     void removeEis(Sorte sorte);
    };
    


  • Was fürn Quatsch für jede Sorte ne Klasse ...



  • oop schrieb:

    Was fürn Quatsch für jede Sorte ne Klasse ...

    troll?

    beispielprogramme sollen viele beispiele abgreifen. nen "eisautomat" ist nen 2 zeiler. aber halt nicht, wenns was beibringen soll.



  • das einzige was quatsch ist ist deine Aussage



  • Troll ?

    Und welchen Sinn macht es für jede Eissorte ne Klasse abzuleiten ?
    Beispiel hin und her ...



  • oop schrieb:

    Und welchen Sinn macht es für jede Eissorte ne Klasse abzuleiten ?

    Damit man in jedem Eis die passende Geschmacksrichtung implementieren kann.



  • Lol
    Hat nicht jedes Eis nen anderen Geschmack ... ??? 🙄



  • oop schrieb:

    Lol
    Hat nicht jedes Eis nen anderen Geschmack ... ??? 🙄

    Ein Eis hat ja nicht ein "Magnumgeschmack", sondern es gibt Krischgemack, Orange, usw. oder auch cremig, erfrischend... aber ist doch jetzt eh wurscht...


Anmelden zum Antworten