Bankomat Programm Schule



  • Hallo erstmal,

    ich habe ein(eigentlich mehrere) Problem(e)

    Also wir sollten von der Schule aus ein Programm über die Ferien schreiben das wie folgt aufgebaut sein sollte:

    Übung:

    Bankomat

    1)Kontonummer, PIN-Code, Kontostand --> private
    2)Bei Kontomanipulation: PIN-Code und Kontonummer abfragen und auf Richtigkeit prüfen --> Bei Falscheingabe: Meldung und neuerlicher Versuch(Pin 3x falsch --> Programmabbruch)
    3) Menü: 1 Geld abheben
    2 Geld einzahlen
    4) Am Ende: Neuen Kontostand ausgeben

    Ich habe es soweit schon einmal gemacht und es funktioniert auch weitgehend, aber es gibt ein paar Probs: der Kontostand soll float sein, ist er auch, aber wenn ich geld behebe oder einzahle und nachher eben addiere oder subtrahiere und danach den neuen Kontostand ausgebe ist es immer eine gerade Zahl(int).

    Und noch etwas: wie funktioniert es dass ich zwei verschiedene Konten(als Klassenobjekt) deklariere und nachher im Programm zwischen Konto 1 und 2(od. x viele) auswählen muss/kann?!

    hier mein bisherige Code:(ach ja ich bin noch programmieranfänger, lese gerade ein buch(c++ in 21 tagen by jesse liberty(falls es jemand kennt)) und will es damit lernen):

    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    
    class bankomat
    {
    public:
    	int getKnr() {return Knr;};
    	void setKnr(int Knrs);
    	int getPin();
    	void setPin(int Pins);
    	float getKstand();
    	void setKstand(float Kstands);
    private:
    	int Knr;
    	int Pin;
    	float Kstand;
    };
    
    void bankomat::setKnr(int Knrs)
    {
    	Knr = Knrs;
    }
    
    int bankomat::getPin()
    {
    	return Pin;
    }
    
    void bankomat::setPin(int Pins)
    {
    	Pin = Pins;
    }
    
    float bankomat::getKstand()
    {
    	return Kstand;
    }
    
    void bankomat::setKstand(float Kstands)
    {
    	Kstand = Kstands;
    }
    
    int main()
    {int i, pinabfr, knrabfr, abfr, a;
    
    	bankomat konto0;
    
    	konto0.setKnr(12345);
    	konto0.setPin(1001);
    	konto0.setKstand(300.00);
    
    	printf("\n ************\n *          *\n * Bankomat *      programmed by hirs\n *          *\n ************\n");
    
    	printf("\n Bitte geben Sie Ihre Kontonummer ein: ");
    	scanf("%d", &knrabfr);
    	if(knrabfr != konto0.getKnr())
    	{
    		printf("\n KONTONUMMER NICHT VORHANDEN\n\n PROGRAMM WIRD NUN BEENDET");
    		getch();
    		cout << "\n";
    		return 0;
    	}
    
    	for(i=0;i<3;i++)
    	{
    
    		printf("\n Bitte Pin-Code eingeben: ");
    		fflush(stdin);
    		scanf("%d", &pinabfr);
    
    		if(pinabfr == konto0.getPin())
    		{
    			printf("\n Aktueller Kontostand: %.2f", konto0.getKstand());
    			printf(" Euro\n Was wollen Sie tun?\n (1)Geld abheben	(2)Geld einzahlen\n ");
    			break;
    		}
    
    		else
    		{
    			printf("\n PIN-CODE FALSCH EINGEGEBEN\n");
    			printf("\n Sie haben noch ");
    			printf("%d", 2-i);
    			printf(" Versuche\n ");
    		}
    
    		if(i==2)
    		{
    			printf("\n DAS PROGRAMM WIRD NUN BEENDET\n ");
    			return 0;
    		}
    	}
    
    	scanf("%d", &abfr);
    
    	if(abfr == 1)
    	{
    		printf("\n Bitte den abzuhebenden Betrag eingeben: ");
    		scanf("%d", &a);
    		konto0.setKstand(konto0.getKstand() - a);
    		printf("\n Neuer Kontostand: %.2f", konto0.getKstand());
    		printf(" Euro\n\n\n Auf Wiedersehen\n ");
    		getch();
    
    	}
    
    	else if(abfr == 2)
    	{
    		printf("\n Bitte den einzuzahlenden Betrag eingeben: ");
    		scanf("%d", &a);
    		konto0.setKstand(konto0.getKstand() + a);
    		printf("\n Neuer Kontostand: %.2f", konto0.getKstand());
    		printf(" Euro\n\n\n Auf Wiedersehen\n ");
    		getch();
    	}
    
    	else
    	{
    		printf("\n FALSCHE EINGABE\n\n PROGRAMM WIRD NUN BEENDET");
    
    		getch();
    	}
    	return 0;
    }
    

    Danke im voraus

    mfg hirs



  • hirs_cpp schrieb:

    ...Ich habe es soweit schon einmal gemacht und es funktioniert auch weitgehend...

    was heißt weitgehend ? 😉

    hirs_cpp schrieb:

    ...der Kontostand soll float sein, ist er auch, aber wenn ich geld behebe oder einzahle und nachher eben addiere oder subtrahiere und danach den neuen Kontostand ausgebe ist es immer eine gerade Zahl...

    (warum 'float' und nicht einfach 'double'?)

    ...
    float a;    // nicht 'int a;'
    ...		
    printf("\n Bitte den abzuhebenden Betrag eingeben: ");
    scanf("%lf", &a);
    konto0.setKstand(konto0.getKstand() - a);
    printf("\n Neuer Kontostand: %.2lf", konto0.getKstand());
    ...
    printf("\n Bitte den einzuzahlenden Betrag eingeben: ");
    scanf("%lf", &a);
    konto0.setKstand(konto0.getKstand() + a);
    printf("\n Neuer Kontostand: %.2lf", konto0.getKstand());
    printf(" Euro\n\n\n Auf Wiedersehen\n ");
    ...
    

    hirs_cpp schrieb:

    ...wie funktioniert es dass ich zwei verschiedene Konten(als Klassenobjekt) deklariere und nachher im Programm zwischen Konto 1 und 2(od. x viele) auswählen muss/kann?!...

    bankomat konto0, konto1, konto2; // etc.ppm wäre _eine_ möglichkeit
    

    hirs_cpp schrieb:

    ...lese gerade ein buch(c++ in 21 tagen by jesse liberty(falls es jemand kennt)) und will es damit lernen)

    und warum schreibst du dann nicht in c++ ? 🙄

    //edit: dies ist jeweils eine möglichkeit, gibt noch mehr...empfehle dir aber (wenn du wirklich 'c++' und nicht 'c' lernen willst) deinen code zu überarbeiten



  • Danke schon mal für deine rasche Antwort

    Also im Bezug auf C++ lernen: ich möchte es gerne lernen, ich schreibe ziemlich genau nach dem buch, dass einzige was ist, ist dass ich printf() und scanf() verwende(wegen meinem lehrer und den schulkollegen), der lehrer hat von Anfang an nur printff() und scanf() verwendet, in privaten Übungsprogrammen verwende ich auch cin >> und cout <<!

    Danke für deine Hilfe!!!!!!

    mfg hirs

    PS: Warum soll ich Kstand nicht als float sondern double deklarieren???



  • Double hat eine höhere Genauigkeit. Wobei sich natürlich die Frage stellt, ob du diese höhere Genauigkeit wirklich brauchst.

    float ist im Gegensatz zu double sowas wie short int im Gegensatz zu long (oder auf >= 32bit-Systemen) int.

    Caipi



  • Caipi schrieb:

    Double hat eine höhere Genauigkeit. Wobei sich natürlich die Frage stellt, ob du diese höhere Genauigkeit wirklich brauchst...

    fiel mir im endeffekt dann auch ein 😉 (ich sag nur gewohnheit)

    //edit: schreibfehler



  • Caipi schrieb:

    Double hat eine höhere Genauigkeit. Wobei sich natürlich die Frage stellt, ob du diese höhere Genauigkeit wirklich brauchst.

    vor allem haben die fliesskommadinger schöne rundungsfehler


Anmelden zum Antworten