Aufgabe:Bankautomat Gelöst



  • Ja aber ich wollte sie eig. ohne Klassen lösen. Danke trotzdem.
    So mein Code sieht bis jetzt so aus.

    #include <iostream>
    #include <string>
    using namespace std;
    
    struct Konto
    {   string benutzername;
        string passwort;
        int kontostand;
    
    };
    
    int main()
    {    
         const int anzahl_konten = 3;
         Konto konten [anzahl_konten];
         konten[0].passwort ="Haus";
         konten[0].benutzername="Hans";
         konten[0].kontostand=1000;
         konten[1].passwort="Zug";
         konten[1].benutzername="Klaus";
         konten[1].kontostand=10000;
         konten[2].passwort="Auto";
         konten[2].benutzername="Gustav";
         konten[2].kontostand=500;
    
    }
    

    Nun geht's weiter. Den Ansatz verstehe ich nicht ganz. Würde es nicht gut funktionieren die "for"-schleife um die "while"-Schleife zu setzen und bei while in die Klammer ein "i" ?



  • silent12 schrieb:

    Nun geht's weiter. Den Ansatz verstehe ich nicht ganz. Würde es nicht gut funktionieren die "for"-schleife um die "while"-Schleife zu setzen und bei while in die Klammer ein "i" ?

    Ne. Die while-Schleife hat nur eine Funktion: Wenn das Programm am Ende ist wieder von Vorne anfangen. Wie in der Aufgabe gefordert, halt eine Endlosschleife.
    Hast du denn gar keine Idee, wozu die for-Schleife da steht? Sie soll dynamisch alle Einträge in konten[] durchsuchen und testen, ob irgendwo ein Konto mit dem eingegebenen Namen existiert. So klarer?



  • while (1)
      {
        string eingbenutzername;
        string eingpasswort;
    
        cout << "Bitte Benutzernamen eingeben:" << endl;
        cin >> eingbenutzername;
    
        cout <<"Bitte Passwort eingegebn:" <<endl;
        cin >> eingpasswort;
    
        for (int i = 0; i < anzahl_konten; ++i)
          {konten[i].passwort = eingpasswort;
           konten[i].benutzername = eingbenutzername;
                 }
                 }
    

    ok so jetzt müsste doch getestet werden ob das Passwort stimmt oder ?



  • Du machst da eine Zuweisung! Das ist aber nicht das, was du willst. Du möchtest einen Vergleich machen. (Zudem solltest du dir einen angenehmeren Einrückungsstil angewöhnen.)



  • Ach dann muss ich ein == verwenden oder ?



  • silent12 schrieb:

    Ach dann muss ich ein == verwenden oder ?

    Und ein if. Wenn dir das alles nicht schon klar ist, solltest du dir wirklich noch einmal die Grundlagen anschauen.



  • Ach jetzt :). Ohne if würde das Programm auch bei falscher eingabe einfach weiter laufen. Ok habe schon ein bisschen weiterprogrammiert, nur das if kriege ich irgendwie nicht rein 😞

    #include <iostream>
    #include <string>
    using namespace std;
    
    struct Konto
    {   string benutzername;
        string passwort;
        int kontostand;
    
    };
    
    int main()
    {    int abbuchbetrag;
         int Menueauswahl;
        int i;
    
         const int anzahl_konten = 3;
         Konto konten [anzahl_konten];
         konten[0].passwort ="Haus";
         konten[0].benutzername="Hans";
         konten[0].kontostand=1000;
         konten[1].passwort="Zug";
         konten[1].benutzername="Klaus";
         konten[1].kontostand=10000;
         konten[2].passwort="Auto";
         konten[2].benutzername="Gustav";
         konten[2].kontostand=500;
    
       while(1)
       {
        string eingbenutzername;
        string eingpasswort;
    
        cout << "Bitte Benutzernamen eingeben:" << endl;
        cin >> eingbenutzername;
    
        cout <<"Bitte Passwort eingegebn:" <<endl;
        cin >> eingpasswort;
    
        for (int i = 0; i < anzahl_konten; ++i)
          {konten[i].passwort == eingpasswort;
           konten[i].benutzername == eingbenutzername;)
           }
    
    cout <<"Kontostand anzeigen(Druecke1) Betrag abbuchen(Druecke2) Verlassen(Druecke3)" << endl;
    cin >>Menueauswahl;
    
    if(Menueauswahl=1)
    {cout <<"Kontostand:" << konten[i].kontostand << endl;
                      }
    
    if (Menueauswahl=2)
    { cout <<"Wieviel moechten sie abbuchen ?" << endl;
     cin >> abbuchbetrag;
     konten[i].kontostand = konten[i].kontostand - abbuchbetrag;
         }
    
    else
    {return 0;
        }
    
    }           
    
    system("Pause");         
    
      }
    


  • Du solltest dir dringend die Grundlagen noch mal angucken, insbesondere if/else, Schleifen, Arrays. Und dann einen vernünftigen Einrückungsstil angewöhnen, deine Klammern fliegen da irgendwo in der Gegend rum, der Ganze Code sieht aus wie Kraut und Rüben. Nicht böse gemeint, aber da kann man ja nicht mehr durchblicken, kein Wunder, dass du nicht weißt wie du weitermachen sollst.

    struct Konto
    {   string benutzername;
        string passwort;
        int kontostand;
        // string pwtest; <- weg
    };
    
    int main()
    {
      const int anzahl_konten = 3;
      Konto konten[anzahl_konten]; // ein Array mit 3(!) Konten. Der höchste Index ist also konten[2]
      // hier füllst du die konten mit Daten, könnte man auch gleich mit der Deklaration machen
    
      while (1)
      {
        string name;
        cout << "Bitte Namen eingeben: "
        cin >> name;
        for (int i = 0; i < anzahl_konten; ++i)
        {
           if (konten[i].benutzername == name)
           {
             cout << "Bitte Passwort eingeben: ";
             std::string passwort;
             cin >> passwort;
             if (konten[i].passwort == passwort)
             {
               // erfolgreich eingeloggt
             }
             else
             {
               cout << "Das Passwort " << passwort << " ist falsch.\n";
             }
             break; // wenn das richtige Konto bereits gefunden wurde, kann die for-Schleife abgebrochen werden.
           }
        }
      }
    }
    


  • So vom Einrückungsstil besser ?
    Ja habe ich gemerkt und jetzt gerade eben mal gemacht.
    So nun funktioniert alles, bis auf, dass ich noch einstellen muss, dass der Abbuchbetrag nicht größer als der Kontobetrag sein darf.

    #include <iostream>
    #include <string>
    using namespace std;
    
       struct Konto
       {   string benutzername;
           string passwort;
           int kontostand;
    
       };
    
    int main()
    {    int abbuchbetrag;
         int Menueauswahl;
        int i;   
    
         const int anzahl_konten = 3;
         Konto konten [anzahl_konten];
         konten[0].passwort ="Haus";
         konten[0].benutzername="Hans";
         konten[0].kontostand=1000;
         konten[1].passwort="Zug";
         konten[1].benutzername="Klaus";
         konten[1].kontostand=10000;
         konten[2].passwort="Auto";
         konten[2].benutzername="Gustav";
         konten[2].kontostand=500;
    
         while(1)
         {
           string eingbenutzername;
           string eingpasswort;
    
           cout << "Bitte Benutzernamen eingeben:" << endl;
           cin >> eingbenutzername;
    
              for (int i = 0; i < anzahl_konten; ++i)
              {
    
                       if(konten[i].benutzername == eingbenutzername)
                       { cout <<"Bitte Passwort eingegebn:" <<endl;
                       cin >> eingpasswort;
    
                              if (konten[i].passwort == eingpasswort)
                              { cout <<"Sie haben sich erfolgreich eingeloggt." << endl;
                              cout <<"Kontostand anzeigen(Druecke1) Betrag abbuchen(Druecke2) Verlassen(Druecke3)" << endl;
                              cin >>Menueauswahl;
    
                                  if(Menueauswahl=1)
                                  {cout <<"Kontostand:" << konten[i].kontostand << endl;
                                  }
    
                                  if (Menueauswahl=2)
                                  { cout <<"Wieviel moechten sie abbuchen ?" << endl;
                                  cin >> abbuchbetrag;
                                  konten[i].kontostand = konten[i].kontostand - abbuchbetrag; 
                                  }
    
                                  else
                                  {return 0;
                                  }
    
                             }
    
                             else
                             { cout <<"Falsches Passwort." << endl;
                             } 
                    break;
                   }         
              }
         }  
    system("Pause");         
      }
    


  • Ok habe nach cin>>abbuchbetrag; dies hier eingefügt

    if(abbuchbetrag>konten[i].kontostand)
    {cout <<"Sie koennen ihr Konto nicht ueberziehen!" << endl;
     break;
    }
    

    und damit funktioniert alles. Würdest du mir trotzdem noch mal empfehlen mir spezielle Grundlagen noch einmal anzuschauen ?



  • silent12 schrieb:

    So vom Einrückungsstil besser ?

    Besser, ja. Nicht unbedingt gut. Ein paar simple Grundregeln sollte man beachten.

    struct x // noch keine geschweifte Klammer geöffnet, also ganz am Rand.
    { // <- In dieser Zeile steht nur die Klammer!
      int y, z; // eingerückt
    }; // schließende Klammer auf gleicher höher mit der zugehörigen öffnenden Klammer
    
    int main() // wieder ganz am Rand, noch keine Klammer geöffnet.
    { // wieder leer
      for (int i = 0; i < 5; ++i) // eingerückt
      { // öffnende Klammer, wieder leere Zeile
        std::cout << i << "\n"; // zwei mal eingerückt.
      } // schließende Klammer auf gleicher höher mit der zugehörigen öffnenden Klammer
    } // schließende Klammer auf gleicher höher mit der zugehörigen öffnenden Klammer
    

    Man könnte es auch so machen:

    struct x {
      int y, z;
    };
    
    int main() {
      for (int i = 0; i < 5; ++i) {
        std::cout << i << std::endl;
      }
    }
    

    Das ist Geschmackssache. Das erste hat meiner Meinung nach mehr Vorteile.

    silent12 schrieb:

    Würdest du mir trotzdem noch mal empfehlen mir spezielle Grundlagen noch einmal anzuschauen ?

    Es schadet nicht. Diese Aufgabe wurde dir ja jetzt auf dem Silbertablett serviert. Dir sollten die Einsatzgebiete von if/else, Schleifen, Arrays, wie man auf sie zugreift etc. geläufig sein, sonst fällt es sehr schwer neue Dinge zu lernen, die darauf basieren.


Anmelden zum Antworten