Ein Denk-Fehler im Quellcode



  • Hallo,
    ich habe die Aufgabe eine KFZ-Datenbank zu schreiben.
    Leider gibt es noch einen Fehler:
    Wenn man den Menüpunkt "KFZ-Liste anzeigen" anwählt und wieder verlassen hat, und dann auf "KFZ neu Anlegen" geht steht der Cursor direkt auf "Baujahr" und nicht bei "KFZ-Typ".
    Dieser Fehler tritt immer dann auf wenn man vorher einmal das Menü "KFZ-Liste anzeigen" gewählt hat.

    Ich finde den Fehler nicht. Vielleicht kann mir jemand helfen!

    /////// Quellcode/////////////////////////////////////////////////////////////
    #include <stdio.h>
    #include <conio.h>
    #include <time.h>
    #include <string.h>
    #include <fstream.h> // für den Drucker
    #include <iomanip.h>
    #include <windows.h>
    #include <iostream.h>

    //------------- allgemeiner Deklarationteil (Für alle Funktionen) ------------

    int Version = 29; // aktuelle Versionnummer

    int MENUEmaske();
    int KFZmaske();
    int Veraendern();
    int Suchen();
    int Eingabe();
    int Ausgabe();
    int Drucken();
    int Info();
    int nr=0; // Setzte Datenzahl auf 0

    struct kfzdaten // Struct für Kfz-Daten
    {
    char KTyp [40];
    char BJ [40];
    char Hub [40];
    char Lstg [40];
    char kmSt [40];
    char Farb [40];
    char Extr [40];
    char HUAS [40];
    char Unf [40];
    char Verkp [40];
    };

    struct kfzdaten kfz_alle[200];

    //--------------------- Hauptprogramm ----------------------------------------

    int main(void)
    {
    textmode(C4350); // farbig, 80 Spalten, 50 Zeilen
    textbackground(BLACK);textcolor(WHITE); // Bildschirmfarben definiere
    MENUEmaske();
    }

    //--------------------- MENUE Maske Funktion ---------------------------------

    int MENUEmaske()
    {
    int highlight=1; // Cursorhelligkeit
    int exit=0;
    char c;

    do // diese Schleife garantiert,
    { // dass man immer im Menue bleibt,
    clrscr();
    textcolor(WHITE);
    gotoxy(25,4);cprintf ("K F Z - V E R W A L T U N G");
    gotoxy(19,6);cprintf ("( Anzahl der KFZ in der Datenbank: ");

    textcolor(YELLOW);cprintf (" %d ",nr);textcolor(WHITE);cprintf(")");

    gotoxy(6,13); cprintf ("KFZ neu Anlegen ");
    gotoxy(6,15); cprintf ("Eintrag Korrigieren");
    gotoxy(6,17); cprintf ("KFZ Suchen ");
    gotoxy(6,19); cprintf ("KFZ-Liste anzeigen ");
    gotoxy(6,21); cprintf ("Drucken ");
    gotoxy(6,23); cprintf ("Beenden ");
    gotoxy(6,40); cprintf ("Auswahl mit [\x18][\x19] Best\x84tigen mit [RETURN] Info [F1]");

    //..................... CURSOR Steuerung .....................................

    _setcursortype(_NOCURSOR); // Cursor nicht sichtbar

    switch(highlight) // Hervorheben des entsprechenden Menüs
    {
    case 1: gotoxy(4,13);textcolor(YELLOW);cprintf ("\x10");break;
    case 2: gotoxy(4,15);textcolor(YELLOW);cprintf ("\x10");break;
    case 3: gotoxy(4,17);textcolor(YELLOW);cprintf ("\x10");break;
    case 4: gotoxy(4,19);textcolor(YELLOW);cprintf ("\x10");break;
    case 5: gotoxy(4,21);textcolor(YELLOW);cprintf ("\x10");break;
    case 6: gotoxy(4,23);textcolor(YELLOW);cprintf ("\x10");break;
    }

    textcolor(WHITE);

    switch(getch()) // Verzweigung in die Funktionen
    {
    case 0:c=getch();
    switch(c) // Verzweigung je nach Tastendruck
    {
    case 'H': // Taste hoch
    {
    highlight--;
    if(highlight>6) highlight=6; // Cursorposition nicht über 6 zählen lassen
    if(highlight<1) highlight=1; // Cursorposition nicht unter 1 zählen lassen
    break;
    }
    case 'P': // Taste runter
    {
    highlight++;
    if(highlight>6) highlight=6; // Cursorposition nicht über 6 zählen lassen
    if(highlight<1) highlight=1; // Cursorposition nicht unter 1 zählen lassen
    break;
    }
    case ';': Info(); // Taste F1 Info Menü
    break;
    }
    break;

    case 13: // Bei Taste Return
    switch(highlight) // auf Cursorstand gucken um das entspr. Unterprogramm laden
    {
    case 1: Eingabe();break;
    case 2: Veraendern(); break;
    case 3: Suchen();break;
    case 4: Ausgabe();break;
    case 5:
    {
    clrscr();
    gotoxy(33,6);cprintf ("Drucken");
    Ausgabe();
    Drucken();
    break;
    }
    case 6: exit=1; break;
    }
    break;
    }
    }
    while (!exit); //Schleife beenden bei exit=1
    }

    //..............................................................................

    //--------------------- KFZ Maske Funktion -----------------------------------

    int KFZmaske() // Reine Bildschirmausgabe
    {
    gotoxy(25,4); cprintf ("K F Z - V E R W A L T U N G");
    gotoxy(6,13); cprintf ("DATENSATZ ");
    gotoxy(6,15); cprintf ("KFZ-Typ ..................:");
    gotoxy(6,17); cprintf ("Baujahr ..................:");
    gotoxy(6,19); cprintf ("Hubraum .... in ccm ......:");
    gotoxy(6,21); cprintf ("Leistung ... in kW .......:");
    gotoxy(6,23); cprintf ("km Stand .................:");
    gotoxy(6,25); cprintf ("Farbe ....................:");
    gotoxy(6,27); cprintf ("Extras ...................:");
    gotoxy(6,29); cprintf ("HU/ASU ... restl. Monate..:");
    gotoxy(6,31); cprintf ("Unfallfrei ......[j/n]....:");
    gotoxy(6,33); cprintf ("Verkaufspreis in Euro....:");
    gotoxy(6,40); cprintf ("Eingaben Best\x84tigen mit [RETURN]");
    }

    //--------------------- EINGABE Maske Funktion -------------------------------

    int Eingabe()
    {
    char taste_eingabe;

    do
    {
    clrscr();
    nr++;
    KFZmaske(); // Maske aufrufen
    gotoxy(27,06) ;cprintf ("Neuen Datensatz anlegen");_setcursortype(_NORMALCURSOR);//Cursor sichtbar machen
    gotoxy(17,13);textcolor(YELLOW);cprintf ("%d",nr);textcolor(WHITE);
    gotoxy(38,15);gets (kfz_alle[nr].KTyp);
    gotoxy(38,17);gets (kfz_alle[nr].BJ);
    gotoxy(38,19);gets (kfz_alle[nr].Hub);
    gotoxy(38,21);gets (kfz_alle[nr].Lstg);
    gotoxy(38,23);gets (kfz_alle[nr].kmSt);
    gotoxy(38,25);gets (kfz_alle[nr].Farb);
    gotoxy(38,27);gets (kfz_alle[nr].Extr);
    gotoxy(38,29);gets (kfz_alle[nr].HUAS);
    gotoxy(38,31);gets (kfz_alle[nr].Unf);
    gotoxy(38,33);gets (kfz_alle[nr].Verkp);
    _setcursortype(_NOCURSOR); // Cursor nicht sichtbar

    gotoxy(6,40);cprintf ("Weiteren Datensatz mit [RETURN] anlegen [ESC] zur\x81\x63k zum Hauptmen\x81");

    do
    {
    taste_eingabe = getch(); // 13=ENTER 27=ESC
    } // Eingabeprüfung: nur ENTER & ESC akzeptieren
    while ((taste_eingabe != 27)&&(taste_eingabe!=13)); // sonst Eingabe wiederholen

    }
    while (taste_eingabe == 13); // Bei 13 Eingabe wiederholen

    return 0;
    }

    //--------------------- AUSGABE Maske Funktion -------------------------------

    int Ausgabe()
    {
    int nr1; // lokale Variable, da für andere Funktionen unintressant
    char taste_eingabe;
    do
    {
    clrscr();
    KFZmaske(); // Maske aufrufen
    gotoxy(30,6);cprintf ("Datensatz anzeigen");
    _setcursortype(_NORMALCURSOR); // Cursor sichtbar

    do //Schleife damit kein größerer Datensatz als vorhanden eingegeben wird
    {
    gotoxy(6,13);cprintf ("Datensatz von");gotoxy(25,13);textcolor(YELLOW);cprintf(" %d",nr);textcolor(WHITE);gotoxy(16,13);cin>>nr1;
    gotoxy(16,13);cprintf(" ");
    }
    while((nr1>nr)&&(nr1<1));

    gotoxy(35,15);cout<<kfz_alle[nr1].KTyp;
    gotoxy(35,17);cout<<kfz_alle[nr1].BJ;
    gotoxy(35,19);cout<<kfz_alle[nr1].Hub;
    gotoxy(35,21);cout<<kfz_alle[nr1].Lstg;
    gotoxy(35,23);cout<<kfz_alle[nr1].kmSt;
    gotoxy(35,25);cout<<kfz_alle[nr1].Farb;
    gotoxy(35,27);cout<<kfz_alle[nr1].Extr;
    gotoxy(35,29);cout<<kfz_alle[nr1].HUAS;
    gotoxy(35,31);cout<<kfz_alle[nr1].Unf;
    gotoxy(35,33);cout<<kfz_alle[nr1].Verkp;
    _setcursortype(_NOCURSOR); // Cursor nicht sichtbar

    gotoxy(6,40);cprintf ("Weiteren Datensatz mit [RETURN] [ESC] zur\x81\x63k zum Hauptmen\x81");

    do
    {
    taste_eingabe = getch(); //13=ENTER 27=ESC
    } //Eingabeprüfung: nur ENTER & ESC akzeptieren
    while ((taste_eingabe != 27)&&(taste_eingabe!=13)); //sonst Eingabe wiederholen

    }
    while (taste_eingabe == 13); //Bei 13 Eingabe wiederholen
    return 0;
    }

    //******************************************************************************
    //***************** Dient nur zu Testzwecken *************************
    //******************************************************************************

    //--------------------- VERÄNDERN Modus Funktion -----------------------------

    int Veraendern()
    {
    int i; //lokale Variable, da für andere Funktionen unintressant
    clrscr();

    gotoxy(20,5);printf ("%c",201);

    for (i=1; i<=35; i++)
    printf ("%c",205);
    printf("%c",187);
    gotoxy(20,6); printf ("%c",186); gotoxy(56,6);printf ("%c",186);
    gotoxy(20,7); printf ("%c",186); gotoxy(56,7);printf ("%c",186);
    gotoxy(20,8); printf ("%c",186); gotoxy(56,8);printf ("%c",186);
    gotoxy(20,9); printf ("%c",186); gotoxy(56,9);printf ("%c",186);
    gotoxy(20,10);printf ("%c",186); gotoxy(56,10);printf ("%c",186);
    gotoxy(20,11);printf ("%c",200);

    for (i=1; i<=35; i++)
    printf ("%c",205);
    printf("%c",188);
    gotoxy(30,8);textcolor(LIGHTRED);cprintf("under contruction !");
    getch();

    return 0;
    }

    //--------------------- SUCHEN Modus Funktion --------------------------------

    int Suchen()
    {
    int i; // lokale Variable, da für andere Funktionen unintressant
    clrscr();

    gotoxy(20,5);printf ("%c",201);

    for (i=1; i<=35; i++)
    printf ("%c",205);
    printf("%c",187);
    gotoxy(20,6); printf ("%c",186); gotoxy(56,6);printf ("%c",186);
    gotoxy(20,7); printf ("%c",186); gotoxy(56,7);printf ("%c",186);
    gotoxy(20,8); printf ("%c",186); gotoxy(56,8);printf ("%c",186);
    gotoxy(20,9); printf ("%c",186); gotoxy(56,9);printf ("%c",186);
    gotoxy(20,10);printf ("%c",186); gotoxy(56,10);printf ("%c",186);
    gotoxy(20,11);printf ("%c",200);

    for (i=1; i<=35; i++)
    printf ("%c",205);
    printf("%c",188);
    gotoxy(30,8);textcolor(LIGHTRED);cprintf("under contruction !");
    getch();

    return 0;
    }

    //--------------------- DRUCKEN Modus Funktion -------------------------------

    int Drucken()
    {
    ofstream drucker;
    drucker.open("LPT1");

    drucker << "Schreib etwas hier\f"; // Testdruck

    drucker.close();
    return 0;
    }

    //--------------------- INFO Maske Funktion ----------------------------------

    BOOL play(char *name)
    {
    PlaySound(name, NULL, SND_FILENAME | SND_ASYNC);
    return 0;
    }

    int Info()
    {
    int position; // lokale Variable, da für andere Funktionen unintressant
    clrscr();
    play("rocky.wav"); // Sound abspielen

    char buffer[10]; // Datum
    _strdate(buffer);
    gotoxy (6,3);
    cout<<"Datum: "<<buffer<<endl;
    _strtime(buffer); // Uhrzeit
    gotoxy (6,4);
    cout<<"Uhrzeit: "<<buffer;

    gotoxy (60,3);textcolor(12);cprintf ("Version: %d",Version); // Versionnummer
    gotoxy (6,8); printf ("written by FSE01:");

    textcolor(WHITE); // Textfarbe Weiß
    position=52; // Setze Anfang der Laufschrift

    do
    {
    position--; // Ausgabe folgt in nächster Zeile
    gotoxy(position,8); clreol(); gotoxy(position,8);
    cprintf("Markus, Patrick, Wolfgang"); // Textausgabe
    gotoxy(position,9); clreol(); gotoxy(position,9);
    cprintf(" Kai, Alexander"); // Textausgabe
    time_t heute=time(NULL);
    while(time(NULL)< heute+0.02); // Verzögerung
    }
    while (position > 24); // Setze Ende der Laufschrift

    gotoxy(25,20);
    play("Applaus.wav"); // Sound abspielen
    printf("Taste zum Fortsetzen dr\x81\x63ken!"); // Textausgabe
    getch();

    return 0; // Zurück zum Hauptmenü
    }



  • Diesen Quellcode wird dir niemand ansehen. Syntaxcoloring andrehen, etwas mehr Erklärung in welchen Zeilen der Fehler auftritt, etc. wären schon nötig!

    MfG SideWinder



  • Hört sich ein bisschen danach an, als wenn der Buffer mal wieder gelöscht werden sollte. Ein Return ist vielleicht noch irgendwo, was da erst verarbeitet wird.
    Aber ich bin zu Faul, mir den Code hier reinzuziehen



  • NichtRegistriert schrieb:

    Hört sich ein bisschen danach an, als wenn der Buffer mal wieder gelöscht werden sollte. Ein Return ist vielleicht noch irgendwo, was da erst verarbeitet wird.
    Aber ich bin zu Faul, mir den Code hier reinzuziehen

    Danke Danke!

    Das war der Fehler!


Anmelden zum Antworten