[C++] Fehlerhaftes Programm :(



  • Hab, rein aus Testzwecken, n Azubiverwaltungsprogramm geschrieben.

    Wundert euch nich ... Programm is etwas unübersichtlich da die Entwicklung noch in einem frühen Stadium ist. D.h. keine Funktionen ... nicht alle funktionen bisher programmiert ... keine Modularisierung ... keine Zeiger ... wollte es erstmal so zum laufen bringen und mich dann an die Modifikation machen ...

    Ich hab folgendes Problem ...

    Das Programm hat ein Hauptmenü ... über das Menü kann ich eine Programminfo anzeigen lassen ... mein Azubiverwaltungs-modul starten ... und das Programm beenden ...

    entscheidung erfolgt über switch -> case ... wenn ich nun ins Modul Menü gehe ... meinen Azubi einlese ... und dann wieder zurück möchte ... bzw. eine andere taste als 1 und 6 drücke ... bringt er mir die Abfrage aus dem Hauptmenü ob er das Programm beenden soll ... ich find den fehler nich ...

    need help 😉

    thX für die Posts

    // Bibliotheken--------------------------------------------------------------
    
    #include <iostream.h>             // Ein- und Ausgabe
    #include <conio.h>                // CLRSCR-Befehl
    #include <string.h>               // String / Zeichenkette
    
    // Globale Variablen---------------------------------------------------------
    
       struct T_Verwaltung
       {
    
              string strName;         // Name
              string strNachname;     // Nachname
              string strStrasse;      // Strasse
              string strWohnort;      // Wohnort
    
              int iPLZ;               // Postleihzahl
              int iTelefon;           // Telefonnummer
              int iAlter;             // Alter
    
              int aiAWP  [ 5 ];       // 4 AWP   Noten ( Index 4 = Durchschnitt )
              int aiBWP  [ 5 ];       // 4 BWP   Noten ( Index 4 = Durchschnitt )
              int aiITS  [ 5 ];       // 4 ITS   Noten ( Index 4 = Durchschnitt )
              int aiENG  [ 5 ];       // 4 ENG   Noten ( Index 4 = Durchschnitt )
              int aiPluA [ 5 ];       // 4 PLU_A Noten ( Index 4 = Durchschnitt )
    
              bool bFuehrerschein;     // Führerschein ( JA / NEIN )
    
       };
    
    // Hauptprogramm-------------------------------------------------------------
    
    int main()
    {
    
        // Lokale Variablen - - - - - - - - - - - - - -
    
           T_Verwaltung Azubi [ 20 ];           // Feld mit 20 Azubi's
    
           int iMenue;                          // Menüauswahl
           int i = 0;                           // Zählvariable  / Laufvariable
    
           bool bEnde = 0;                      // Programmlaufzeit (Bedingung)
    
        // Endlosschleife - - - - - - - - - - - - - - -
    
           do
           {
    
             clrscr();        // Bildschirm wird gelöscht
    
             bEnde = 0;
    
             /*
    
               !Fixed!
    
               [ bEnde = 0 ] : weil das Programm ansonsten ggf. gleich
                               beendet wird, da [ bEnde ] den Wert "1"
                               annimmt wenn im Menü "Screen (Modul)"
                               der Punkt "< 5 > Modul beenden"
                               ausgewählt wird.
    
                               Somit kann man NUR im "Screen ( Hauptmenü )"
                               das Programm beenden.
    
             */
    
        // Screen ( Hauptmenü ) - - - - - - - - - - - -
    
           cout << "::.                                              .::" << endl;
           cout << "|                                                  |" << endl;
           cout << "|                                                  |" << endl;
           cout << "|                     Hauptmenue                   |" << endl;
           cout << "|                                                  |" << endl;
           cout << "|                                                  |" << endl;
           cout << "::.                                              .::" << endl;
    
           cout << "\n\n\n";
    
           cout << "\t< 1 > Programm-Info" << endl;
           cout << "\t< 2 > Programm starten" << endl;
    
           cout << "\n";
    
           cout << "\t< 3 > Programm beenden" << endl;
    
           cout << "\n\n\n\n";
           cout << "\tIhre Auswahl: ";
           cin  >> iMenue;
    
        // Menüauswahl-Check - - - - - - - - - - - - -
    
           switch ( iMenue )
           {
    
                  case 1:
    
                  clrscr();
    
                  cout << "::.                                              .::" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "|                   Programm-Info                  |" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "::.                                              .::" << endl;
    
                  cout << "\n\n\n";
    
                  cout << "\  Autor:\t\tSascha Katzenberger";
                  cout << "\n\n  Projektstatus:\tnoch nicht veroeffentlicht";
                  cout << "\n\n  Support:\t\tsupport@f4k3-corp.com";
                  cout << "\n\n  Letzte Aenderung:\t02.07.07";
    
                  cout << "\n\n\n\n\n\n\t ('ENTER', zurueck zum Menue)";
    
                  getchar();
    
                  break;
    
         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
                  case 2:
    
                  do
                  {
    
                  bEnde = 1;
    
                  clrscr();
    
                  cout << "::.                                              .::" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "|                    Modul Menue                   |" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "|                                                  |" << endl;
                  cout << "::.                                              .::" << endl;
    
                  cout << "\n\n\n";
    
                  cout << "\t< 1 > Azubi einlesen" << endl;
                  cout << "\t< 2 > Liste ausgeben" << endl;
                  cout << "\t< 3 > Azubi aus Liste entfernen (Einzel)" << endl;
                  cout << "\t< 4 > Azubi aus Liste entfernen (Gesamt)" << endl;
                  cout << "\t< 5 > Help" << endl;
    
                  cout << "\n";
                  cout << "\t< 6 > Modul beenden" << endl;
    
                  cout << "\n\n\n\n\tIhre Auswahl: ";
                  cin  >> iMenue;
    
                  switch ( iMenue )
                  {
                       //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
                         case 1:
                         do
                         {
    
                         clrscr();
    
                         i++;                   // i um 1 erhöht für Anzeige
    
                         cout << "::.                                              .::" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                 " << i <<  ". Azubi einlesen                |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "::.                                              .::" << endl;
    
                         i--;                   // i um 1 verringert damit Feldindex korrekt
    
                         cout << "\n\nVorname:\t";
                         cin  >> Azubi[i].strName;
    
                         i++;                   // i um 1 erhöht damit nächster Feldindex bearbeitet werden kann
    
                         clrscr();
    
                         cout << "::.                                              .::" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                 Nochmal eingeben?                |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "::.                                              .::" << endl;
    
                         cout << "\n\n";
    
                         cout << "\t< 0 > Nein";
                         cout << "\n\t< 1 > Ja";
    
                         cout << "\n\n\n\tIhre Auwahl: ";
                         cin  >> bEnde;
    
                         if ( bEnde == 0 )
                         {
    
                         clrscr();
    
                         cout << "::.                                              .::" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                Zurueck zum Menue                 |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "::.                                              .::" << endl;
    
                         cout << "\n\n\n\n\n\n\n\n";
                         cout << "\n\n\n\n\n\n\t      ('ENTER', Menue)";
    
                         getchar();
    
                         }
    
                         } while ( bEnde != 0 );
    
                         break;
    
                      // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
                         case 6:
    
                         clrscr();
    
                         cout << "::.                                              .::" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|             Modul wirklich beenden?              |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "::.                                              .::" << endl;
    
                         cout << "\n\n";
    
                         cout << "\t< 0 > Nein";
                         cout << "\n\t< 1 > Ja";
    
                         cout << "\n\n\n\tIhre Auswahl: ";
                         cin  >> bEnde;
    
                         if ( bEnde == 0 )
                         {
    
                         clrscr();
    
                         cout << "::.                                              .::" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|              Zurueck zum Hauptmenue              |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "|                                                  |" << endl;
                         cout << "::.                                              .::" << endl;
    
                         cout << "\n\n\n\n\n\n\n\n";
                         cout << "\n\n\n\n\n\n\t      ('ENTER', Hauptmenue)";
    
                         getchar();
    
                         }  // If-Anweisung (geschlossen)
    
                         break;
                     }
    
                  } while ( bEnde != 1 );
    
         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
            case 3:
    
             clrscr();
    
             cout << "::.                                              .::" << endl;
             cout << "|                                                  |" << endl;
             cout << "|                                                  |" << endl;
             cout << "|                  Programm beenden?               |" << endl;
             cout << "|                                                  |" << endl;
             cout << "|                                                  |" << endl;
             cout << "::.                                              .::" << endl;
    
             cout << "\n\n";
    
             cout << "\t< 0 > Nein";
             cout << "\n\t< 1 > Ja";
    
             cout << "\n\n\n\tIhre Auwahl: ";
             cin  >> bEnde;
    
             if ( bEnde == 1 )
             {
    
             clrscr();
    
             cout << "::.                                              .::" << endl;
             cout << "|                                                  |" << endl;
             cout << "|                                                  |" << endl;
             cout << "|              System is shutting down             |" << endl;
             cout << "|                                                  |" << endl;
             cout << "|                                                  |" << endl;
             cout << "::.                                              .::" << endl;
    
             cout << "\n\n\n\n\n\n\n\n";
             cout << "\n\n\n\n\n\n\t      ('ENTER', Programm offline)";
    
             getchar();
    
             }  // If-Anweisung (geschlossen)
    
            }  // Switch-Anweisung - Programm (geschlossen)
    
           } while ( bEnde != 1 );
    
           /*
    
             [ while ( bEnde != 1 ); ]
    
             Das Programm wird solange ausgeführt, bis im
             "Screen ( Hauptmenü )" der Punkt
             "< 3 > Programm beenden" ausgewählt wird.
    
           */
        return 0;
    }
    
    /*
    -----------------------------------------------------------------------------
    --------- !Programmende! ------------------------------ !Programmende! ------
    -----------------------------   !Programmende! ------------------------------
    -----------------------------------------------------------------------------
    --------- !Programmende! ------------------------------ !Programmende! ------
    */
    


  • Wäre es vielleicht zu viel verlangt, das Programm etwas übersichtlicher aufzubauen? Ansonsten fällt schon auf, daß du in allen Menü-Ebenen mit den selben Hilfsvariablen (iMenu und bEnde) arbeitest - wenn du in der innersten Schleife bEnde setzt, werden alle verschachtelten Schleifen damit beendet.



  • mir fällt auch auf, dass du immer sehr viel Platz damit verschwendest, dass du immer mit einem riesigem cout konstrukt anfängst, dass aber immer gleich aufgebaut ist. Hier wäre es bespielsweise Sinnvoll eine Funktion zu schreiben, mit der man sich per eingabe des Titels als Parameter so einen tollen kopf basteln kann. Aber so viel, wenn erstmal alles klappt.

    Dann noch, lern mit einem Debugger umzugehen, oder benutz eine IDE (Netbeans zum Beispiel), die einen eingebaut hat.

    Und noch ganz wichtig, wenn du nochmal was Posten solltes, wozu du Hilfe haben möchtest, dann möglichst wenig Quellcode, versuche das Problem absolut auf das Äußerste zu beschränken, das ist zwar ein wenig Arbeit, aber so wird mal dir wahrscheinlich viel eher helfen.

    noch weitere kleine verbesserungsvorwchläge:
    du kannst dein strukt T_Verwaltung auch in Azubie umbenennen, dess es enthält ja die Eigenschaften eines Azubies (Das hilft beim Verständnis der Klassen später). Ja und das Array kannst du azubies nennen. Es hat sich übrigens als Standard durchgesetzt, dass Variabelnamen klein geschrieben werden



  • Krux schrieb:

    Es hat sich übrigens als Standard durchgesetzt, dass Variabelnamen klein geschrieben werden

    nö, hat es nicht. Nur weil es viele leute so machen, heisst das noch lange nicht, dass es ein standard ist.



  • Noch ein paar Anmerkungen:

    wir sind hier im ISO C++ Forum, dementsprechend sollte auch der Quellcode aussehen
    - <iostream.h> gibt es nicht ➡ <iostream>
    - <conio.h> gehört nicht zum Standard, kann daher zu Problemen auf unterschiedlichen Plattformen führen
    - <string.h> ist der C Kompatibilitätsheader und nicht empfohlen ➡ <cstring>

    Achte auf deine Einrückung, die ist sehr "seltsam" bzw. manchmal praktisch nicht vorhanden.

    Kommentiere nur dort, wo es auch sinnvoll ist. Sowas macht zB keinen Sinn:

    string strName;         // Name
    

    Auch wenn es kein MUSS ist und vielmehr ein gut gemeinter Rat, gewöhne dir die Ungarische Notation ab. Verwende einfache und aussagekräftige Variablennamen.


Anmelden zum Antworten