Indizierung
-
Schön guten Tag,
ich hoffe ihr könnt mir helfen, ich habe ein Problem bzgl. eines C++ Programms, welches sich um Leasingverträge handelt. Die aufgabe lautete ich sollte diverse Daten in einer Struktur abspeichern/anzeigen/ändern.
Das Abspeichern und Anzeigen funktioniert soweit, nur das aendern noch nicht so wie es soll, Ich poste diesen Teil des Codes mal:
void aendern() { int i=0; int s=0; clrscr(); Datei=fopen("p:\\Datei.dat","r+"); //fread(&LV[i],sizeof(LV[i]), 1,Datei); do { fread(&LV[i],sizeof(LV[i]), 1,Datei); cout<<"Bitte gesuchte Kundennummer eingeben: "; cin>>suche; if(suche==LV[i].Kundennummer); { cout<<"Leasingvertragsnummer: "<<LV[i].Leasingvertragsnummer<<endl; cout<<"Leasingobjektnummer: "<<LV[i].Leasingobjektnummer<<endl; cout<<"Leasingobjektbezeichnung: "<<LV[i].Leasingobjektbezeichnung<<endl; cout<<"Kundennummer: "<<LV[i].Kundennummer<<endl; cout<<"Kundennamen: "<<LV[i].Kundenname<<endl; cout<<"Strasse: "<<LV[i].Strasse<<endl; cout<<"PLZ: "<<LV[i].PLZ<<endl; cout<<"Ort: "<<LV[i].Ort<<endl; cout<<"Leasingbeginn(Tag): "<<LV[i].Leasingbeginn_Tag<<endl; cout<<"Leasingbeginn(Monat): "<<LV[i].Leasingbeginn_Monat<<endl; cout<<"Leasingbeginn(Jahr): "<<LV[i].Leasingbeginn_Jahr<<endl; cout<<"Leassingende(Tag): "<<LV[i].Leasingende_Tag<<endl; cout<<"Leassingende(Monat): "<<LV[i].Leasingende_Monat<<endl; cout<<"Leassingende(Jahr): "<<LV[i].Leasingende_Jahr<<endl; cout<<"Rechnungsbetrag: "<<LV[i].Rechnungsbetrag<<endl; cout<<"Alter Rechnungsbetrag: "<<LV[i].Rechnungsbetrag<<endl; cout<<"Neuer Rechnungsbetrag: "; cin>>LV[i].Rechnungsbetrag; fseek(Datei,(s-0)*sizeof(struct Leasingvertrag),SEEK_SET); fwrite(&LV[i],sizeof(LV[i]), 1,Datei); } s++; cout<<"Wollen Sie weiter suchen? Ja/Nein: "; cin>>x; } while(x!='n'); fclose(Datei); cout<<"\nWeiter mit beliebiger Taste..."; getch(); clrscr(); menue(); }
Wenn ich mehrere einträge drin hab und einen ändere, wird dieser immer an die letze stelle der datei gebracht???
Irgendwas stimmt dorrt mit der indizierung nicht ...
-
Hallo,
wenn fread zurueckkommst, dann ist der Dateizeiger um 'gelesene Bytes' weiter
positioniert, sprich, er zeigt _hinter_ den aktuellen Datensatz.Les doch die Datei komplett ein, mach deine Aenderungen und schreib sie wieder
zurueck.mfg
v R
-
virtuell Realisticer schrieb:
Les doch die Datei komplett ein, mach deine Aenderungen und schreib sie wieder
zurueck.genau das will ich machen .. bloss ich weis nicht wie ich die datei komp. einlesen soll?
-
Hallo,
kommts mir nur so vor oder häufen sich die Fragen zu dieser Leasing aufgabe ?
Du liesst Datensatz für Datensatz in dein Array.
//---- snip ----- while(!feof(indat) && i<=arraysize){ fread(&LV[i++],sizeof(struktur),1,indat); } //---- snap -----
Nun ist dein Arry voll mit den Datensätzen und du kannst die Operationen im Speicher durchführen.
-
Hallo, danke erstmal für dein post aber ich versteh das noch nicht!?!?
Bitte um Aufklärung!
Mfg
Boretzkid
-
Hallo,
Du hast doch in deinem Program ein globales Array deiner Struktur.
Um jetzt zunächst alle Daten in das Array zu lesen, wird Datansatz für Datensatz aus der Datei gelesen; und zwar so lange bis entweder das Ender der Datei erreicht ist oder Die Maximale größe des Arrays erreicht ist.Nachdem die Daten sich nun im Speicher (in deinem Array) befinden, kannst du deine Operationen (ändern,löschen,suchen usw.) daran ausführen. Bevor das Program beendet wird musst du nur die Daten aus dem Array wieder in die Datei schreiben.