Simulation eines Fahrkartenautomat in C++



  • Also die Quellcodes die du da geschrieben hast können gar nicht funktionieren. Nur ein Beispiel. Wenn ihr using namespace std; nicht nutzt müsst ihr vor cout oder cin immer std:: schreiben. Using namespace std; macht das ganze nur etwas kürzer weil der Namensraum für die gesamte Datei genutzt wird und der Compiler deshalb cout und cin zuordnen kann. Und das man in ner Header Datei die selbe Headerdatei inkludiert kann gar nicht funktionieren.



  • @Jaschi: Es war einmal vor über 7 Jahren, da war der C++ Standard noch nicht fertig. Damals hat man noch <iostream.h> verwendet, und alles war im globalen namespace definiert.

    @chaos: Wenn von deinem Lehrer verlangt wird, Funktionen in eine oder mehrere Header-Datei zu schreiben, solltest du ihm diesen Gefallen tun. Ansonsten gibt es in dem Quelltext nur sehr wenig neues. Ich glaube du kannst es locker schaffen, das zu verstehen und deinem Lehrer mit eigenen Worten zu erklären.
    Welchen Compiler benutzt eigentlich dein Lehrer bzw. du? Hat der Compiler nie eine Warnung von wegen deprecated (veraltet) ausgegeben? Du solltest gegebenenfalls deinen Lehrer mal darum bitten, sich an den über 7 Jahre alten C++ Standard zu halten.



  • @Spezi L: Ich benutze Microsoft Visual C++ 6.0 und bisher kam so eine Fehlermeldung nicht. Außerdem liegt bei mir nicht das Problem am erklären... Wenn ich etwas verstanden habe, kann ich es auch erklären.

    @Rest: Habe mich an Funktionen versucht. Zwar nicht so aufwendig wie das Programm von result, doch es läuft einigermaßen. Nur habe ich jetzt noch ein Problem in der einen do-while-Schleife. Das Programm soll mir ja ausgegeben, wieviel der Benutzer zahlen muss. Tut es auch und der Benutzer kann sogar eine Münze einwerfen. Doch dann soll ausgegeben werden, wieviel er noch bezahlen muss. Mein Programm gibt aber wieder den gleichen Text aus. Außerdem gibt mein Programm auch aus "Es muss noch -.... bezahlt werden.". Kann mir da noch mal jemand helfen? Weiß immerhin schon, dass es in der int einzahlen ist und wie ich es nicht machen kann. 🙄

    #include <iostream.h>
    #include <stdio.h>
    
    // \xBA senkrechte Linie
    // \xCD waagerechte Linie
    // \xC9, \xC8, \xBB & \xBC Ecken
    
    void menue()
    {
    	cout << "\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD*****Menue*****\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB" << endl; 
        cout << "\xBA                                        \xBA" << endl;
    	cout << "\xBA FAHRKARTENAUTOMAT                      \xBA" << endl; 
        cout << "\xBA                                        \xBA" << endl; 
        cout << "\xBA                                        \xBA" << endl; 
        cout << "\xBA Preisstufe       Betrag       Taste    \xBA" << endl; 
        cout << "\xBA --------------------------             \xBA" << endl; 
        cout << "\xBA Kurzstrecke      1.60 Euro    k        \xBA" << endl; 
        cout << "\xBA                                        \xBA" << endl; 
        cout << "\xBA 1 Tarifzone      2.50 Euro    1        \xBA" << endl; 
        cout << "\xBA 2 Tarifzonen     4.80 Euro    2        \xBA" << endl; 
        cout << "\xBA 3 Tarifzonen     7.20 Euro    3        \xBA" << endl; 
        cout << "\xBA 4 Tarifzonen     9.00 Euro    4        \xBA" << endl; 
        cout << "\xBA                                        \xBA" << endl; 
        cout << "\xBA                                        \xBA" << endl; 
        cout << "\xBA Unterbrechung                 x        \xBA" << endl; 
        cout << "\xBA --------------------------             \xBA" << endl; 
        cout << "\xBA                                        \xBA" << endl; 
        cout << "\xBA Ihre Auswahl ===============>          \xBA" << endl; 
        cout << "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC" << endl; 
    }
    
    int einzahlen(int kohle)
    {
    	double kommabetrag, muenze;
    	int halter;
    
    	do
    	{
    		halter=0;
    		kommabetrag=kohle;
    
    		cout << endl << "Bitte den Betrag von " << kommabetrag/100 << " Euro einwerfen."<<endl;
    		cout << "Nur mit Muenzen!" << endl;
    		cout << "Erlaubt sind nur 2.00, 1.00, 0.50, 0.20 und 0.10 Euro-Muenzen." << endl;
    		cin >> muenze;
    
    		do
    		{
    			if ((muenze==2.00) || (muenze==1.00) || (muenze==0.50) || (muenze==0.20) || (muenze==0.10))
    			{
    				halter=1;	
    			}
    			else
    			{
    				cout<<endl << "Falsche Eingabe, es gibt keine " << muenze << " Muenze." << endl;
    			}
    			if (kommabetrag>muenze)
    			{
    				cout << "Es muss noch " << ((kommabetrag-muenze*100)/100) << " Euro bezahlt werden." << endl;
    			}
    		}
    		while(halter!=1);
    		kohle=kohle-(muenze*100);
    		cout << endl;
    	}
    	while(kohle>0);
    	kohle=kohle*(-1);
    	kommabetrag=kohle;
    	cout << "Sie bekommen " << kommabetrag/100 << " EURO zurueck" << endl;
    	return kohle;
    }
    
    void rueckgabe(int kohle)
    {
    	char entnehm;
    	int zwei=0,eins=0,fuenfzig=0,zwanzig=0,zehn=0;
    	while (kohle>=200)
    	{
    		kohle=kohle-200;
    		zwei++;
    	}
    	while (kohle>=100){
    		kohle=kohle-100;
    		eins++;
    	}
    	while (kohle>=50){
    		kohle=kohle-50;
    		fuenfzig++;
    	}
    	while (kohle>=20){
    		kohle=kohle-20;
    		zwanzig++;
    	}
    	while (kohle>=10){
    		kohle=kohle-10;
    		zehn++;
    	}
    	cout << "Rueckgabe in folgenden Muenzen:" << endl;
    	cout << " " << zwei << " x 2.00 EURO"<<endl;
    	cout << " " << eins << " x 1.00 EURO"<<endl;
    	cout << " " << fuenfzig <<" x 0.50 EURO"<<endl;
    	cout << " " << zwanzig<<" x 0.20 EURO"<<endl;
    	cout << " " << zehn<<" x 0.10 EURO"<<endl;
    	cout << endl << endl << "Fahrkarte entnehmen.";
    
        while(entnehm != 'j' && entnehm != 'J') 
        { 
            cout << endl << "Haben Sie die Fahrkarte entnommen? j/J=Ja "; 
            cin >> entnehm; 
        } 
    }
    
    void main()
    {
    	char tarif;
    	int betrag;
    	do
    	{
    		menue();
    		cout << endl << "Eingabe: ";
    		cin >> tarif;
    
    		switch(tarif)
    		{
    		case 'k':
    			{
    				rueckgabe(betrag=einzahlen(160));
    				break;
    			}
    		case '1':
    			{
    				rueckgabe(betrag=einzahlen(250));
    				break;
    			}
    		case '2':
    			{
    				rueckgabe(betrag=einzahlen(480));
    				break;
    			}
    		case '3':
    			{
    				rueckgabe(betrag=einzahlen(720));
    				break;
    			}
    		case '4':
    			{
    				rueckgabe(betrag=einzahlen(900));
    				break;
    			}
    		}
    
    	}
    	while (tarif!='x');
    }
    

    Gruß chaos



  • Wozu hast du überhaupt die Variable "kommabetrag" in einzahlen() definiert, wenn du dann doch direkt mit dem Parameter "kohle" rechnest?
    oder anders: ersetze die letzte if() in der Schleife durch

    if (kohle>muenze)
    {
      cout << "Es muss noch " << ((kohle-muenze*100)/100) << " Euro bezahlt werden." << endl;
    }
    

    (in "kommabetrag" hast du nur den Startwert angegeben, in "kohle" wird der aktuelle Restbetrag mitgezählt)



  • Vielen Dank für die Hilfe, CStoll. Habe mein Programm jetzt lauffähig bekommen, indem ich die ganze if-Schleife rausgenommen habe. Also Danke! 🙂

    Gruß chaos


Anmelden zum Antworten