C++ "menügesteuertes Hauptprogramm" *hilfe Anfängerin*

Dieses Thema C++ "menügesteuertes Hauptprogramm" *hilfe Anfängerin* im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von Anhalterin, 26. Juli 2006.

Thema: C++ "menügesteuertes Hauptprogramm" *hilfe Anfängerin* NABEND    :'( vorne weg, ich bin Anfänger in Sachen C++ :| und das funktioniert noch nicht so wie es soll. ich habe...

  1. NABEND    :'(

    vorne weg, ich bin Anfänger in Sachen C++ :| und das funktioniert noch nicht so wie es soll.
    ich habe mal wieder ein schier unlösbares Problem. für mich

    Ich muss ein CPP - Programm schreiben, Vorleistung für ne Info-Prüfung, hab aber irgendwie den vollkommen die Übersicht bei den Ding verloren.  Das Ding muss ich bis morgen Nachmittag abgegeben haben .
    Ich stell jetzt einfach mal den Aufagen Text hier rein.

    Entwerfen und implementieren Sie eine Klasse konto.
    Die Klasse soll folgende Attribute enthalten:
    ? Kontonummer , ? Inhaber , ? Dispolimit, ? Aktueller Saldo , ? (weitere Attribute nach Ihrer Wahl)

    Folgende Methoden sollen vorhanden sein:
    ? Konstruktor: Die Attribute sollen sinnvoll initialisiert werden.
    ? Eröffnung: Die Stammdaten werden vom Nutzer eingegeben. Ein wiederholtes
    Eröffnen desselben Kontos muss verhindert werden.
    ? Buchen: Beträge können positiv oder negativ sein. Ein Abbuchen über das
    Dispolimit hinaus wird verhindert.
    ? Anzeige: Alle Daten werden angezeigt
    ? Schließen: Das Konto wird geschlossen. Buchungen sind nicht mehr möglich.
    ? (weiter Methoden nach Ihrer Wahl)

    Schreiben Sie ein menügesteuertes Hauptprogramm, in dem der Benutzer die einzelnen Funktionen über jeweils eine Tasteneingabe aufrufen kann. Es soll lediglich ein einziges Konto verwaltet werden.
    Vorteilhaft wäre es, wenn sinnlose Funktionen (z.B. Buchen, bevor das Konto eröffnet ist) nicht ausgewählt werden könnten.


    Die Klasse mit den Attribute und den Methoden , ist kein Thema.
    Aber dann ein menügesteuertes Hauptprogramm,  da hängt es dann bei mir. Irgendwie will das nicht so wie ich. *betriebsblindheit* is das mittlerweile bei mir schon.  :| :|
    Also ich kann auch schon mal den Programmcode hier reinschreiben,
    Wenn sich irgendwer damit auskennt.  Das wäre nett 
    Zur not kann ich auch den Programm Code schon ma posten wenn es jemand brauch.

    Ich würd mich über Hilfe freuen :2funny:
     
  2. Da fehlen ein paar Infos ... Ich nehme an, dass es sich um ein Konsolenprogramm unter Windows handelt. Menügesteuert bedeutet ja - falls Du ohne Return auf Tasten reagieren oder den Bildschirm löschen willst - automatisch systemabhängig, also nicht im C- bzw. C++-Standard enthalten. Welche Bibliotheken verwendest Du denn (Microsoft, Borland, ...)?

    Du könntest eine Schleife schreiben, in der Du das Menü ausgibst und auf (gültige) Tastatureingaben reagierst, indem Du die Methoden Deines existierenden Konto-Objektes aufrufst, das Programm beendest etc.
     
  3. Bloodshed DEV C++, benutz ich unter Windows.
    Der Bildschirm sollte eigenltich jedes ma gelöscht werden

    Bibliotheken :
    <cstdlib>
    <iostream>
    <cmath>


    :| ich hatte eigentlcih vor das ganze mit einer do while schleife zumachen und dann Switch Case -Analyse

    hat sich noch nichts getan bei mir  :| :|
    Ich habs ja soweit eigentlich fertig, nur das läuft nich, un ich weiß nich wo der Fehler zu suchen is..
     
  4. Dann zeig' mal Deinen Code, vielleicht finden wir ja den Fehler.
     
  5. :| dann viel spass mit dem CODE  :|
    :tickedoff: Also ich muss dazu sagen, ich mache das NICHT hauptberuflich... :|


    #include <cstdlib>
    #include <iostream>
    #include <cmath>
    using namespace std;

    class konto
    {
    private:
    string nummer;
    string name;
    float dispo;
    float saldo;
    bool isteroeffnet;
    bool istgeschlossen;

    public:
    konto()
    {
    saldo = 0;
    isteroeffnet = false;
    istgeschlossen = false;
    }

    void eroeffnen()
    {
    if( ! isteroeffnet)
    {
    cout << Konto eroeffnen -------------------------- << endl;
    cout << Nummer: ;
    cin >> nummer;
    cout << Name:   ;
    cin >> name;
    cout << Dispo:  ;
    cin >> dispo;
    isteroeffnet = true;
    }
    else
    cout << Konto ist bereits eroeffnet. << endl;
    }

    void buchen()
    {
    if(isteroeffnet && !istgeschlossen)
    {
    float betrag;
    cout << Buchung vornehmen << endl;
    cout << Einzahlungen positiv, Auszahlungen negativ << endl;
    cout << Betrag: ;
    cin >> betrag;
    if(saldo + betrag >= -dispo)
    saldo += betrag;
    else
    cout << Dispo ueberschritten! << endl;

    anzeigen();
    }
    else
    cout << Konto nicht geoeffnet oder geschlossen. << endl;
    }

    void anzeigen()
    {
    cout << Aktuelle Daten << endl;
    cout << Nummer: << nummer <<   Name: << name <<   Saldo: << saldo << endl;
    if(! isteroeffnet)
    cout << Konto ist noch nicht eroeffnet. << endl;
    if(istgeschlossen)
    cout << Konto ist geschlossen. << endl;
    cout << ------------------------------------------ << endl;
    }

    void schliessen()
    {
    if(isteroeffnet && ! istgeschlossen)
    {
    cout << Konto schliessen<< endl;
    istgeschlossen = true;
    }
    else
    cout << Konto ist nicht eroeffnet oder bereits geschlossen. << endl;
    }
    };

    int main()
    {
    string c;
    konto k1;

    do
    {
    cout << endl << Kontfuehrung << endl;
    cout << A - Datenanzeige << endl;
    cout << E - Konto eroeffnen << endl;
    cout << B - Buchung << endl;
    cout << S - Konto schliessen << endl;
    cout << Q - Quit (Programm verlassen << endl;

    cin >> c;
    c = toupper(c);
    system (CLS);

    switch(c)
    {
    case->A';
    k1.anzeigen();
    break;
    case->E';
    k1.eroeffnen();
    break;
    case->B':
    k1.buchen();
    break;
    case->S':
    k1.schliessen();
    break;
    }
    }
    while (c !=->Q');

    return
    }
     
  6. Sorry, als Du geantwortet hast, war ich schon im Bett; so lange habe ich dann nicht mehr gewartet ;).

    Nur ein paar Kleinigkeiten: Ein paar Tippfehler korrigiert, die Eingabe etwas geändert (cin.getline - sonst klappt es bei Namen mit Leerzeichen nicht - und cin.ignore bei der Menüeingabe), die Menüfunktionalität ausgelagert, die Logik bei isteroeffnet/istgeschlossen leicht verändert, da sie nicht funktioniert hat (ich hätte da an Deiner Stelle aber einfach nur->isteroeffnet' verwendet und nicht unterschieden zwischen istgeschlossen (= war schon mal eröffnet) und isteroeffnet) sowie die Zuweisungen im Konstruktur in Initialisierungen umgewandelt.
    Falls eh nicht schon alles zu spät ist, solltest Du es nochmal ausprobieren.

    Code:
    #include <cstdlib>
    #include <iostream>
    #include <cmath>
    #include <string>
    
    using namespace std;
    
    class konto
    {
    private:
       string  nummer;
       string  name;
       double  dispo;
       double  saldo;
       bool    isteroeffnet;
       bool    istgeschlossen;
    
    public:
       konto() : saldo(0), dispo(0), isteroeffnet(false), istgeschlossen(false)
       { }
       
       void eroeffnen()
       {
          if(!isteroeffnet || istgeschlossen)
          {
             cout << Konto eroeffnen -------------------------- << endl;
             cout << Nummer: ;
             getline(cin >> ws, nummer);         
             cout << Name:   ;
             getline(cin >> ws, name);
             cout << Dispo:  ;
             cin >> dispo;
             isteroeffnet = true;
             istgeschlossen = false;
          }
          else
             cout << Konto ist bereits eroeffnet. << endl;
       }   
       
       void buchen()
       {
          if(isteroeffnet && !istgeschlossen)
          {
             double betrag;
             cout << Buchung vornehmen  << endl;
             cout << Einzahlungen positiv, Auszahlungen negativ << endl;
             cout << Betrag: ;
             cin >> betrag;
             if(saldo + betrag >= -dispo)
                saldo += betrag;
             else
                cout << Dispo ueberschritten! << endl;
                
             anzeigen();
          }
          else
             cout << Konto nicht geoeffnet oder geschlossen. << endl;
       }
       
       void anzeigen()
       {      
          if(istgeschlossen)
             cout << Konto ist geschlossen. << endl;
            else
              if(!isteroeffnet)
                cout << Konto ist noch nicht eroeffnet. << endl;
                 else {
                    cout << ------------------------------------------ << endl;
                    cout << Aktuelle Daten  << endl;
                    cout << Nummer:  << nummer <<   Name:  << name <<   Saldo:  << saldo << endl;
                 }
       }
       
       void schliessen()
       {
          if(isteroeffnet && ! istgeschlossen)
          {
             cout << Konto schliessen<< endl;
             istgeschlossen = true;
          }
          else
             cout << Konto ist nicht eroeffnet oder bereits geschlossen. << endl;
       }
    };
    
    char doMenu() {
    
      cout << endl << Kontfuehrung << endl;
      cout << A - Datenanzeige << endl;
      cout << E - Konto eroeffnen << endl;
      cout << B - Buchung << endl;
      cout << S - Konto schliessen << endl;
      cout << Q - Quit (Programm verlassen << endl;
    
      char c;  
      cin >> c;
      c = toupper(c);
      
      // Gegen Flackern des Menüs (gesamter Buffer wird sonst bei Eingabe einer Zeichenkette abgearbeitet)
      cin.ignore(1000,->\n');
     
      system (CLS);
      return c;
    }
    
    int main()
    {   
       konto k1;
       char c;
       
       do
       {  
          c = doMenu();
          
          switch(c)
          {
          case->A':
             k1.anzeigen();
             break;
          case->E':
             k1.eroeffnen();
             break;
          case->B':
             k1.buchen();
             break;
          case->S':
             k1.schliessen();
             break;
          }
       }
       while (c !=->Q');
    
       return 0;
    }
    
     
  7. hihi... :2funny: mir viel das erst so spät wieder ein den Code reinzusetzen

    :T Danke Danke

    Hmm danke ich werd mich dann gleich ma noch ransetzen. ;D nen bissel Zeit hab ich noch.