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 0struct 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 sichtbargotoxy(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 wiederholenreturn 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 sichtbardo //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 sichtbargotoxy(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 abspielenchar 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 Laufschriftdo
{
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 Laufschriftgotoxy(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 reinzuziehenDanke Danke!
Das war der Fehler!