Bankautomat für Anfänger



  • Aufgabe:

    Entwickeln Sie eine C++-Anwendung zur Simulation eines Bankautomaten. Der Anwender soll einen Benutzernamen (der die EC-Karte repräsentiert) und eine dazugehörige PIN eingeben, um Zugriff auf sein Konto zu erhalten. Insgesamt soll die Beispiel-Anwendung drei Konten mit unterschiedlichen Benutzernamen und PINs unterstützen. Ist das Einloggen erfolgreich, kann der Anwender zwischen Kontostandanzeige und Auszahlung eines Betrags wählen. Das Programm soll in einer Endlosschleife laufen, um mehrmaliges Einloggen in den Bankautomaten zu ermöglichen. Setzen Sie die drei Konten auf beliebige Werte, um das Programm zu testen, und loggen Sie sich mehrmals mit jedem Benutzer ein, um den Kontostand anzuzeigen und Geld abzuheben.

    Mein Quellcode:

    #include <iostream>
    #include <string>
    using namespace std;
    
    struct Member
    {
    	string pwtest;
    	int kontostand;
    	int abbuchen;
    	int wahl;
    };
    
    int Peter(Member &peter)
    {
    	string const PW = "auto";
    	cout << "Nennen sie ihr Passwort:\n";
    	cin >> peter.pwtest;
    	if (peter.pwtest != PW)
    	{
    		cout << "Falsches Passwort!\n";
    		return 0;
    	}
    	while (0 < 1)
    	{
    	cout << "Was wollen sie machen?\n Kontostand abrufen (Druecke 1)\n Abheben (Druecke2)\n Verlassen(Druecke 3)\n";
    	cin >> peter.wahl;
    	if (peter.wahl == 1)
    	{
    		cout << "Ihr Kontostand beträgt " << peter.kontostand << " Euro.\n";
    	}
    	if (peter.wahl == 2)
    	{
    		cout << "Wieviel wollen sie abheben?\n";
    		cin >> peter.abbuchen;
    		if (peter.abbuchen > peter.kontostand)
            {
    			cout << "Sie wollen mehr abheben als auf dem Konto vorhanden ist!\n";
    		}
    		else
    		{
    			peter.kontostand = peter.kontostand - peter.abbuchen;
    		}
    	}
    	if (peter.wahl == 3)
    	{
    		return 0;
    	}
    }
    }
    
    int Gustav(Member &gustav)
    {
    
    	string const PW = "haus";
    	cout << "Nennen sie ihr Passwort:\n";
    	cin >> gustav.pwtest;
    	if (gustav.pwtest != PW)
    	{
    		cout << "Falsches Passwort!\n";
    		return 0;
    	}
    	while (0 < 1)
    	{
    	cout << "Was wollen sie machen?\n Kontostand abrufen (Druecke 1)\n Abheben (Druecke2)\n Verlassen(Druecke 3)\n";
    	cin >> gustav.wahl;
    	if (gustav.wahl == 1)
    	{
    		cout << "Ihr Kontostand beträgt " << gustav.kontostand << " Euro.\n";
    	}
    	if (gustav.wahl == 2)
    	{
    		cout << "Wieviel wollen sie abheben?\n";
    		cin >> gustav.abbuchen;
    		if (gustav.abbuchen > gustav.kontostand)
            {
    			cout << "Sie wollen mehr abheben als auf dem Konto vorhanden ist!\n";
    		}
    		else
    		{
    			gustav.kontostand = gustav.kontostand - gustav.abbuchen;
    		}
    	}
    	if (gustav.wahl == 3)
    	{
    		return 0;
    	}
    }
    }
    int Bill(Member &bill)
    {
    
    	string const PW = "baum";
    	cout << "Nennen sie ihr Passwort:\n";
    	cin >> bill.pwtest;
    	if (bill.pwtest != PW)
    	{
    		cout << "Falsches Passwort!\n";
    		return 0;
    	}
    	while (0 < 1)
    	{
    	cout << "Was wollen sie machen?\n Kontostand abrufen (Druecke 1)\n Abheben (Druecke2)\n Verlassen(Druecke 3)\n";
    	cin >> bill.wahl;
    	if (bill.wahl == 1)
    	{
    		cout << "Ihr Kontostand beträgt " << bill.kontostand << " Euro.\n";
    	}
    	if (bill.wahl == 2)
    	{
    		cout << "Wieviel wollen sie abheben?\n";
    		cin >> bill.abbuchen;
    		if (bill.abbuchen > bill.kontostand)
            {
    			cout << "Sie wollen mehr abheben als auf dem Konto vorhanden ist!\n";
    		}
    		else
    		{
    			bill.kontostand = bill.kontostand - bill.abbuchen;
    		}
    	}
    	if (bill.wahl == 3)
    	{
    		return 0;
    	}
    }
    }
    
    int main()
    {
    	string name;
    	Member peter;
    	peter.kontostand = 373;
    	Member gustav;
    	gustav.kontostand = 574;
    	Member bill;
    	bill.kontostand = 8177;
    	while (0 < 1)
    	{
    		cout << "Nennen sie ihren Benutzernamen (0 um zu beenden):\n";
    		cin >> name;
    		if (name == "0")
    		{
    			return 0;
    		}
    		if (name == "Peter")
    	    {
    		    Peter(peter);
    	    }
    		if (name == "Gustav")
    	    {
    		    Gustav(gustav);
    	    }
    	    if (name == "Bill")
    	    {
    		    Bill(bill);
    	    }
    	}
    }
    

    Funktioniert bei mir alles, habe (meiner Meinung nach), auch die Aufgabenstellung erfüllt.
    Ich würde aber gerne die 3 Funktionen (int Peter, Gustav, Bill), zu einer zusammenfassen. Habe aber keine genauere Idee wie ich das machen soll. :|



  • Also ich glaube, dein Weg ist einzigartig ( weiss nicht ob er funktioniert, da ich sehr grob drübergeflogen bin ).

    also ich kenne keinen der das problem so gelöst hätte

    hmm da du wahrscheinlich noch nicht klassen kennst, musste es so lösen ( ausser du arbeitest dich noch schnell in klassen rein 😉

    Du musst im klaren sein, was gegeben und was gefordert ist.

    du konnest es so machen

    1. definieren einer struct, darin speicherst du ab:

    name, pw, kontostand

    2. dann brauchst du einen container um dies zu verwalten. im normalen geschäftsleben nimmt man datenbanken :), bei dir würde ein array reichen. du könnest auch minimal googlen und nach "vector c++" suchen und statt arrays vectoren benutzen, aber klar arrays gehen auch

    3. eine Funktionen schreiben die dir den zugriff auf deine struct und deinen array bieten ( quasi hast du ja EIN array mit 3 STRUCTS darin )

    dein array hat die grösse 3 ( aufgabenstellung )

    also die Fkt wären, ob es ein gültier user ist,

    bool IsValidUser( std::string &name, std::string &pw); // ob er sich einloggen darf und das programm weiter geht

    Du musst quasi dein array durchgehen und nach dem namen suchen, wenn gefunden dann ob das PW richtig ist.

    bool GetMoney( std::string &name, int betrag); // Geld abziehen

    int ShowMoney(... // --> Kontostandanzeige

    natürlich könntest auch hilfsfkt schreiben die plausibilität überprüfen ect. ect.

    aber ich glaube dein Bsp soll eh einfach gehalten werden 🙂

    also codest du die namen am anfang gleich hart rein, sonst müsstest du Fkt schreiben

    bool AddUser(....

    Du könntest dein User-Interface auslagern, da du keine schicke GUI haben wirst, ist, musst du das Menu Konsolenlässtig halten

    5. Das Hauptprogramm

    Darin verwendest du die elemente sinnvoll 🙂

    Das Hauptprogramm verbinest du ja wahrscheinlich fest mit der "gui"

    Ich würd mir auf ein Blatt ein Zustandsdiagramm zeichnen. Quasi mit pfeilen wie der Programmablaub im Menu ist.

    so ich hoffe, ich habe dir etwas auf die Sprünge geholfen 🙂



  • die original lösung ist doch schon ok. es ist nur überflüssig, die drei funktionen aufzuteilen.

    im grunde passiert ja in jeder dasselbe.

    mach daraus eine funktion und änder sie in:

    int bankautomat(Member &member)
    ...
    

    in der funktion änderst du alle vorkommnisse der namen in member.

    dann erweiterst du dein struct Member um das passwort des benutzers, nenn es z.b. passwort. die überprüfung auf korrektheit des passworts ist dann einfach

    if (member.pwtest != member.passwort)
    

    so hast du aus deinen drei funktionen genau eine gemacht, die auch problemlos beliebig viele kunden abarbeiten kann.



  • Vielen Dank, werde mal schauen, was ich so alles noch verändern kann. 🙂


Anmelden zum Antworten