EINFAH mall Vorebi schauen und HELFEN !!!
-
Sorry mein Fehler, Ich depp ! Ich hab denn Link umgeändert
hier ist er nochmall http://home.arcor.de/onkel_viktor/Aufgabe.cpp
Sorry nochmall
P.s Kansste mir auch sagen wie ich Drucke z.B wenn stellen mit 0 belegt sind, soll es Gedruckt werden?!?!
-
Sorry, jetzt versteh ich dein Prolem nicht genau. Was läuft denn jetzt schief bei der ändern-Funktion ?
btw. Hast du gesehen dass in deinem Code (der vom Link) die ändern-funktion immer noch falsch ist ? Du hast dort nur eine Schleife.
-
Ja dein COde war nur für eine Struktur belegt meiner muss für 100 Datensätze sein d.h das er in 100 Datensätze nach 100 Eingaben dursucht und findet denn Entsprechenden Kunden Nr.
Das Problemm ist wie soll ich ne 2 Schleiffe Rein Kriegen oder Bzw Warum findet er beim 2 Suchanlauf die Nr 1 und nicht gleich beim 1sten?!?!
Downloade dir die Datei unter http://home.arcor.de/onkel_viktor/ die Datei.txt und pack sie auf C:\ und dann Starte das Prog und versuche die Kundenr 1 Zu finden (Die findest du nicht) dann weiter suchen dann nochmall die Kunden Nr 1 (Dann findest du die) ich Frage mich warum findet er die beim 1 mall nicht?!?!?
-
Weil du garnicht suchst. Das ist das was ich dir die ganze Zeit sagen will.
Deine Schleife ist falsch.
Du musst die Datensätze durchlaufen.for(int i=0;i<100;i++) if(STRUCT[i].kn==gesucht) //tu was
Du fragst immer wieder nach der Nummer in deinem Code und gehst garnicht die Datensätze durch. Egal was man eingibt, man kommt immer zum nächst höheren.
-
HALLO
Stimmt ja ich DEPP
Aber jetzt ein ANderes Prob so Wie kann ich die Datensätze die mit NULL belegt sind DRUCKEN !?!?!? Das haben wir ind der schule nicht Behandelt und im Buch ist das Ünverständlich an eine BSP erklärt
P.s Daanke nochmalls für deine Mühe
AJA befpr ich ganz vergesse was heisst diese Befehl hier rewind(Datei); oder was bewirkt er ?!?!?
-
Fiktor schrieb:
HALLO
Stimmt ja ich DEPP
Aber jetzt ein ANderes Prob so Wie kann ich die Datensätze die mit NULL belegt sind DRUCKEN !?!?!? Das haben wir ind der schule nicht Behandelt und im Buch ist das Ünverständlich an eine BSP erklärt
P.s Daanke nochmalls für deine Mühe
Das geht nicht mit standart c++. C++ kennt keinen Bildschirm oder Drucker oder ähnliches; Es kennt nur Datenströme. Da du auf windows arbeitest musst du mal nach OS-spezifischen funktionen gucken. Ne umleitung an LPT1 per pipe oder sowas evtl.
Fiktor schrieb:
AJA befpr ich ganz vergesse was heisst diese Befehl hier rewind(Datei); oder was bewirkt er ?!?!?
rewind setzt den Filepointer an den Anfang der Datei und ist gleichbedeutent mit fseek(datei,0L,SEEK_SET)
-
HALLO
Ähm kannste mir auch sagen wie ich Datensätze Köschen kann ?!?!
Ich hab mir das so Überlegt ich suche erstamll KNR. dann Komlpeten datensatz Löschen!
Aber ich hab keine Idee wie ich das einstellen kann
-
Hallo,
das hab ich doch nun schon ein paar mal gesagt.
Dein Program läuft ja folgendermaßen:
1. Programstart
2. Daten aus Datei in Structarray lesen
3. Menu
4. Structarray zurück in Datei schreibenWenn du nun in einer Löschfunktion im entsprechenden Datensatz das gelöscht-falg setzt, wird dieser Datensatz am End nicht wieder in die Datei geschrieben, was einem Löschen entspricht.
-
HALLO
ICH KÖNNTE HEULEN
Beim Testen der Ändefunktion ist mir ein fehler unterlaufen und zwar, er findet jetzt denn 1 Eintrag aber denn 2 nicht mehr geschweige von 3ten
Hier ist de COde kannste mir BITTE Sagen was ich Falsch gemacht habe?
void aendern() { char x; int suche; clrscr(); Datei=fopen("C:\\Datei.txt","r+"); fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); do { Datei=fopen("C:\\Datei.txt","r+"); fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); cout<<"Bitte gesuchte Kundennummer eingeben: \t"; cin>>suche; for(int i=0;i<100;i++) { if(suche == STRUKT[i].knr) { cout<<"\n\nKundennummer:\t\t\t"<<STRUKT[i].knr<<"\n"; cout<<"Rechnungsbetrag:\t\t"<<STRUKT[i].rb<<"\n\n"; cout<<"Alter Rechnungsbetrag: "<<STRUKT[i].rb<<"\n"; cout<<"Neuer Rechnungsbetrag: \n"; cin>>STRUKT[i].rb; fseek(Datei,sizeof(STRUKT[i])*-1,SEEK_CUR); fwrite(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); fclose(Datei); } i++; } cout<<"Wollen Sie weiter suchen? Ja/Nein: "; cin>>x; } while(x!='n'); fclose(Datei); cout<<"\nWeiter mit beliebiger Taste..."; getch(); clrscr(); menu(); }
P.s SOrry für meine Dummheit da ich grad mit C++ angefangen habe kann ich nicht so richtig Programmieren
-
Hallo,
das hat nix mit C++ zu tun. Du hast noch einen Denkfehler.
Deine Schleife hast du jetzt angepasst, d.h. du gehst die Datensätze durch. In der selben Funktion fummelst du schon in der Datei rum. Warum ?
Es reicht zunächst die Daten im Speicher zu ändern und am Ende des Programs bzw. am Ende der Ändernfunktion (wenn alles was geändert werden sollte im speicher geändert ist) die alte Datei mit den neuen Daten zuüberschreiben. Das ist alles.
-
Ich hab den Fehler endekt
und zwar
void aendern() { char x; int suche,i=0; do { clrscr(); Datei=fopen("C:\\Datei.txt","r+"); fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); while(!feof(Datei))//<<<<<DARAN LAGS!!!!!!! { cout<<"Bitte gesuchte Kundennummer eingeben: "; cin>>suche; for(int s=0;s<100;s++) { if(suche == STRUKT[i].knr) { cout<<"Leasingvertragsnummer:\t\t"<<STRUKT[i].lvnr<<"\n"; cout<<"Leasingobjektnummer:\t\t"<<STRUKT[i].lonr<<"\n"; cout<<"Leasingobjektbezeichnung:\t"<<STRUKT[i].lob<<"\n"; cout<<"Kundennummer:\t\t\t"<<STRUKT[i].knr<<"\n"; cout<<"Kundennamen:\t\t\t"<<STRUKT[i].kn<<"\n"; cout<<"Strasse:\t\t\t"<<STRUKT[i].str<<"\n"; cout<<"PLZ:\t\t\t\t"<<STRUKT[i].plz<<"\n"; cout<<"Ort:\t\t\t\t"<<STRUKT[i].ort<<"\n"; cout<<"Leasingbeginn(Tag):\t\t"<<STRUKT[i].lbtag<<"\n"; cout<<"Leasingbeginn(Monat):\t\t"<<STRUKT[i].lbmonat<<"\n"; cout<<"Leasingbeginn(Jahr):\t\t"<<STRUKT[i].lbjahr<<"\n"; cout<<"Leassingende(Tag):\t\t"<<STRUKT[i].letag<<"\n"; cout<<"Leassingende(Monat):\t\t"<<STRUKT[i].lemonat<<"\n"; cout<<"Leassingende(Jahr):\t\t"<<STRUKT[i].lejahr<<"\n"; cout<<"Rechnungsbetrag:\t\t"<<STRUKT[i].rb<<"\n\n"; cout<<"Alter Rechnungsbetrag: "<<STRUKT[i].rb<<"\n"; cout<<"Neuer Rechnungsbetrag: "; cin>>STRUKT[i].rb; fseek(Datei,sizeof(STRUKT[i])*-1,SEEK_CUR); fwrite(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); fclose(Datei); fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); } i++; fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); } } } while(!feof(Datei)); cout<<"\nWeiter mit beliebiger Taste..."; getch(); clrscr(); return; }
so er findet alle einträge und gibt die alle aus! Dan kann ich alle einträge Verändern "HURA EIN WUNDER"
Ich hab denn COde etwas Umgeschrieben, Naja Guck es dir an und sag was besse zu machen wäre oder sag mir bescheid wenn du ein BUG endeckt hasst, ok ?Hier ist das Kommlete Prog.
-
Hallo,
Warum fummelst du denn immer noch in der Datei rum ?
Das kann man natürlich machen, aber bei 100 Datensätzen kannst du das doch locker im Speicher machen und erst zum Schluss zurück schreiben.
Also wenn ich deine obige version nur etwas änder erhält man.void aendern() { char x; int suche,i=0; FILE *Datei; Datei=fopen("C:\\Datei.txt","rb"); //einlesen aller Datensätze in das Array while(!feof(Datei)){ fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); i++; } fclose(Datei); //eingelesen //ändern schleife do{ clrscr(); cout<<"Bitte gesuchte Kundennummer eingeben: "; cin>>suche; for(int i=0;i<100;i++){ //hier stand vorher s=0 usw. s wurde nie definiert if(suche == STRUKT[i].knr) { cout<<"Leasingvertragsnummer:\t\t"<<STRUKT[i].lvnr<<"\n"; cout<<"Leasingobjektnummer:\t\t"<<STRUKT[i].lonr<<"\n"; cout<<"Leasingobjektbezeichnung:\t"<<STRUKT[i].lob<<"\n"; cout<<"Kundennummer:\t\t\t"<<STRUKT[i].knr<<"\n"; cout<<"Kundennamen:\t\t\t"<<STRUKT[i].kn<<"\n"; cout<<"Strasse:\t\t\t"<<STRUKT[i].str<<"\n"; cout<<"PLZ:\t\t\t\t"<<STRUKT[i].plz<<"\n"; cout<<"Ort:\t\t\t\t"<<STRUKT[i].ort<<"\n"; cout<<"Leasingbeginn(Tag):\t\t"<<STRUKT[i].lbtag<<"\n"; cout<<"Leasingbeginn(Monat):\t\t"<<STRUKT[i].lbmonat<<"\n"; cout<<"Leasingbeginn(Jahr):\t\t"<<STRUKT[i].lbjahr<<"\n"; cout<<"Leassingende(Tag):\t\t"<<STRUKT[i].letag<<"\n"; cout<<"Leassingende(Monat):\t\t"<<STRUKT[i].lemonat<<"\n"; cout<<"Leassingende(Jahr):\t\t"<<STRUKT[i].lejahr<<"\n"; cout<<"Rechnungsbetrag:\t\t"<<STRUKT[i].rb<<"\n\n"; cout<<"Alter Rechnungsbetrag: "<<STRUKT[i].rb<<"\n"; cout<<"Neuer Rechnungsbetrag: "; cin>>STRUKT[i].rb; break; //wir haben ja einen Eintrag gefunden }//end if }//end for //hier landest du nach nem break cout<<"Noch einen Datensatz aendern ?:"; cin>>x; }while(x!='n'); //es sollen keine Sätze mehr geändert werden //jetzt schreiben wir die geänderten Daten zurück //Datei im Schreibmodus öffnen (Daten werden gelöscht) Datei=fopen("C:\\Datei.txt","wb"); for(int i=0;i<100;i++) fwrite(&STRUCT[i],sizeof(Program),1,Datei); fclose(Datei); //Daten sind zurück geschrieben //Funktion verlassen return; }
Verstehst du was ich sagen will ? In deinem Code waren noch ein paar Sachen nicht so ganz toll.
-
Hallo ich hab die Änder funktion von dir Getestet und mir ist aufgefahlen
Nach demm Verändern des wertes, kommt Menu und wenn ich auf Ausgabe Kliche gibt er mir 100 Mall 0 Aus!
So ich versuche jetzt denn Fehler zu finden
Aja ich hab das Prog um 2.00 Nachts noch Geschrieben daswegen Hab ich Vergessen das man in der Datei nicht Rumfummeln soll
Danke Nochmalls !
Aja bevor ich ganz vergesse was mir aufgefahlen ist
void aendern() { //<-Hier Öffnest du die Void auf char x; int suche,i=0; FILE *Datei; Datei=fopen("C:\\Datei.txt","rb"); //einlesen aller Datensätze in das Array while(!feof(Datei)){ fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); i++; } //<----------Und Zwar das hier (Und Hier schleisst du die ) Muss das sein :confused: fclose(Datei);
-
Hallo,
Welche Ausgabe meinst du ? Ich hab doch garkeine Ausgabe geschrieben.
Bei der Ändern funktion wird nur der Datensatz ausgegeben bei dem die knr mit der eingegebenen übereinstimmt.Zu deinem andren Problem. Das ist ok weil ich nicht die Funktion schliesse:
void aendern() { //<-Hier Öffnest du die Void auf char x; int suche,i=0; FILE *Datei; Datei=fopen("C:\\Datei.txt","rb"); //einlesen aller Datensätze in das Array while(!feof(Datei)){ //<----------------- Hier mach ich eine Klammer für while auf ;) fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); i++; } //<----------Und Zwar das hier (Und Hier schleisst du die ) Muss das sein fclose(Datei);
-
Ne ich meinte die Änderfunktion - Wenn ich ein Wert verändere so und dann weiter ins menu Gehe dann Klicke ichs aufs Ausgabe dann gibt er mir 100 mall 0 Aus!Er verändert den wert Garrnicht.
Es Liegt an der Änder funktion denk ich mall das er 100 Datensätze mit 0 Belegt
Was noch seltsammer ist ist das wenn er 100 Mall 0 Ausgegeben hat und ich wieder ins Verändern menue Gehe und dann Nach nummer 2 Suche findet er die
und gibt denn wert aus denn ich Belegt habe so ich veränder den wert z.B auf 222 so dann (Ich will nicht weiter suchen ) gehe ins Menu und dann aufs Ausgabe und er Gibbt mir nochmall 100 Nullen aus!?!? soich geh nochmall ins Ändermenu und gebe Den datensatz mit KNr 2 und er findet ihn und gibt mir aus das der Betrag mit 222 Belegt ist.
Warum Zeigt er mir dann bei Ausgabe 100 Mall 0 und bei Veränderfinktion findet er den Entsprechenden Datensatz ?
-
Hallo,
Um herauszufinden warum das so ist müsste ich mal deine Ausgabe und Menufunktion sehen. Und was meinst du eigentlich die ganze Zeit mit: Er belegt die Datensätze mit 0 ???
-
Hallo,
Hier ist der Link zu Kompletten Prog mit deine Änderfunktion
http://home.arcor.de/onkel_viktor/Sieht besser aus.cpp
So Kopier das, Compeliere, gib 3 Daten sätze ein z.B Alles mit 1 dann mit 2 dann mit 3.
Und versuchs es dann zu Verändern nach demm du das veränadert hast gehe aufs Ausgeben und dann siehste was ich meinnte
MfG Viktor
-
Ok moment.
Vielleicht ist es einfacher wenn du mir mal deine E-mail addresse gibst. Dann blähen wir dat Forum nicht unnötig auf.
-
Ok.
Hier Meine Mail Onkel_Viktor@lycos.co.uk
Hier ist meine ICQ (Ich denke geht schneller) 261204225
P.s Fängt deine ICQ so an 143.....?!?!
-
Dabei zu beachten das Zwischen Onkel und Viktor ein Strich ist "So einer _ "
Wollte bloss auf nummer sicher gehen