Veröffentlicht 27. September 200420 j Hi, habe eine kleine Adressverwaltung geschrieben, nur hab ich leider noch 2 kleine Problemchen und hoffte auf eure Hilfe...... Das Programm soll mit 2 Dateien arbeiten, der kunden.txt und der kunden_b.txt. Die kunden.txt ist die Datei mit der gearbeitet wird, in der kunden_b.txt werden dann alle finalen Daten gespeichert und bei erneutem Programmaufruf gelesen. Das Programm erstellt aber keine Kopie in die kunden_b.txt, sobald ich sie auch zum einlesen benutze. Kommentier ich es aus, klappts wunderbar.... Das zweite Problemchen ist, dass er mir nich alle Felder der Struktur ausgibt in die kunden_b.txt........... Hier mal der Quellcode des Hauptprogramms: #include "stdafx.h" #include "fstream.h" #include "kunde2.h" #include "windows.h" int main() { int auswahl; while (true) { cout<<endl<<"*ACHTUNG: Vergessen Sie nicht Ihre Arbeit zu speichern.*"; cout<<endl<<"==========M=E=N=U=E============"; cout<<endl<<"Liste Laden...................1"; cout<<endl<<"Liste speichern...............2"; cout<<endl<<"Neue Liste....................3"; cout<<endl<<"Zu Liste hinzufuegen..........4"; cout<<endl<<"Kunden auflisten..............5"; cout<<endl<<"Kunden loeschen...............6"; cout<<endl<<"Programm beenden..............7"; cout<<endl<<"Ihre Wahl....................."; cin>>auswahl; switch(auswahl) { case 1: lesen(); break; case 2: schreiben(); break; case 3: eingabe(); break; case 4: hinzufuegen(); break; case 5: auflisten(); break; case 6: loeschen(); break; case 7: return 0; break; } } } void eingabe() //Neue Liste erstellen { ende=kopf; zwischen=new struct kunde; cout<<"Kundennummer:"<<MaxKdNr+1<<endl; zwischen->nkundennummer=MaxKdNr+1; MaxKdNr++; cout<<"Vorname:"; cin>>zwischen->cVorname; cout<<"Nachname:"; cin>>zwischen->cNachname; zwischen->weiter=NULL; if (kopf==NULL) { kopf=zwischen; return; } while (ende->weiter!=NULL) { ende=ende->weiter; } ende->weiter=zwischen; } void hinzufuegen() //Wenn alte Liste geladen, Einträge hinzufügen { ende=kopf; zwischen=new struct kunde; cout<<"Kundennummer:"<<MaxKdNr+aktuell->nkundennummer+1<<endl; zwischen->nkundennummer=MaxKdNr+aktuell->nkundennummer+1; MaxKdNr++; cout<<"Vorname:"; cin>>zwischen->cVorname; cout<<"Nachname:"; cin>>zwischen->cNachname; zwischen->weiter=NULL; if (kopf==NULL) { kopf=zwischen; return; } else if(kopf!=NULL) { while(ende->weiter!=NULL) { ende=ende->weiter; } ende->weiter=zwischen; } } void loeschen() //Einträge aus Liste die aktuell bearbeitet wird löschen { int KundenNr; cout<<endl<<"Geben Sie die Kundennummer ein:"; cin>>KundenNr; ende = zwischen = aktuell = kopf; if (aktuell) { if (kopf->nkundennummer == KundenNr) { if (zeigen(kopf)) { kopf = kopf->weiter; delete zwischen; } } else { if(kopf->weiter == NULL) { cout<<endl<<"Es gibt keinen Kunden mit dieser Nummer!"<<endl; return; } ende=ende->weiter; while(ende->nkundennummer != KundenNr) { if(ende->weiter == NULL) { cout<<endl<<"Es gibt keinen Kunden mit dieser Nummer!"<<endl; return; } zwischen=ende; ende=ende->weiter; } if(zeigen(ende)) { aktuell=ende; ende=ende->weiter; if(aktuell->weiter == NULL) { zwischen->weiter=NULL; } else { zwischen->weiter=ende; } delete aktuell; } } } } void auflisten() //Alle Einträge aus aktueller Liste anzeigen { aktuell=kopf; if(aktuell) { while(aktuell->weiter != NULL) { cout<<endl<<"Kundennummer:"<<aktuell->nkundennummer; cout<<endl<<"Vorname:"<<aktuell->cVorname; cout<<endl<<"Nachname:"<<aktuell->cNachname; aktuell=aktuell->weiter; } cout<<endl<<"Kundennummer:"<<aktuell->nkundennummer; cout<<endl<<"Vorname:"<<aktuell->cVorname; cout<<endl<<"Nachname:"<<aktuell->cNachname<<endl; } } void schreiben() //Aktuelle Liste speichern { entfernen(); fstream in_out("kunden.txt", ios::out); aktuell=kopf; if(aktuell) { while(aktuell->weiter != NULL) { in_out<<endl<<aktuell->nkundennummer<<" "; in_out<<aktuell->cVorname<<" "; in_out<<aktuell->cNachname; aktuell=aktuell->weiter; } in_out<<endl<<aktuell->nkundennummer<<" "; in_out<<aktuell->cVorname<<" "; in_out<<aktuell->cNachname; } DeleteFile("kunden_b.txt"); CopyFile("kunden.txt","kunden_b.txt",true); } void lesen() //Datei von Festplatte einlesen { do { do { zwischen=new struct kunde; while(zwischen->weiter) { ende=kopf; in>>zwischen->nkundennummer; in>>zwischen->cVorname; in>>zwischen->cNachname; zwischen->weiter=NULL; if(kopf==NULL) { kopf=zwischen; } else if(kopf!=NULL) { while(ende->weiter!=NULL) { ende=ende->weiter; } ende->weiter=zwischen; } } }while(!in.eof()); i++; }while(i==2); } bool zeigen(kunde *pkunde) //Anzeige für die Löschfunktion { char auswahl; cout<<endl<<"Kundennummer:"<<pkunde->nkundennummer; cout<<endl<<"Vorname:"<<pkunde->cVorname; cout<<endl<<"Nachname:"<<pkunde->cNachname; cout<<endl<<"Diesen Kunden loeschen? (J/N):"; cin>>auswahl; auswahl = toupper(auswahl); if (auswahl == 'J') { return true; } return false; } void entfernen() //Alte Dateien löschen, damit neue erstellt und gefüllt werden können { DeleteFile("kunden.txt"); DeleteFile("kunden_b.txt"); } Und hier der Code von der Header kunde2.h: #ifndef kunde #define _kunde int MaxKdNr = 0; int i; struct kunde { int nkundennummer; char cVorname[30]; char cNachname[30]; struct kunde *weiter; } *kopf, *aktuell, *zwischen, *ende; void eingabe(); void loeschen(); void auflisten(); void schreiben(); void lesen(); void hinzufuegen(); void entfernen(); bool zeigen(kunde *pkunde); fstream in_out("kunden.txt", ios::out); ifstream in("kunden_b.txt", ios::in|ios::nocreate); #endif Ich hoffe auf eure Hilfe und danke schon mal im Vorraus..... Viel Spaß damit
27. September 200420 j Du solltest unbedingt auf die globalen Dateiströme verzichten. Und wenn schon globale Variablen, dann nicht in einer Headerdatei. Außerdem sollte das Symbol für den #include-Wächter einheitlich sein, entweder kunde oder _kunde (wobei beide schlechte Namen für #include-Wächter-Symbole sind).
28. September 200420 j Autor Hi, hab das Problem gelöst und das Programm noch weiter umgeschrieben. Läuft jetzt mit nur einer Datei. Danke für den Tip mit den globalen Datenströmen@Klotzkopp.... Hier nun der Code des fertigen Proggz............. kunde2.cpp: #include "stdafx.h" #include "fstream.h" #include "kunde2.h" #include "windows.h" int main() { int auswahl; while (true) { cout<<endl<<"*ACHTUNG: Vergessen Sie nicht Ihre Arbeit zu speichern.*"; cout<<endl<<"==========M=E=N=U=E============"; cout<<endl<<"Liste Laden...................1"; cout<<endl<<"Liste speichern...............2"; cout<<endl<<"Neue Liste....................3"; cout<<endl<<"Zu Liste hinzufuegen..........4"; cout<<endl<<"Kunden auflisten..............5"; cout<<endl<<"Kunden loeschen...............6"; cout<<endl<<"Programm beenden..............7"; cout<<endl<<"Ihre Wahl....................."; cin>>auswahl; switch(auswahl) { case 1: lesen(); break; case 2: schreiben(); break; case 3: eingabe(); break; case 4: hinzufuegen(); break; case 5: auflisten(); break; case 6: loeschen(); break; case 7: return 0; break; } } } void eingabe() { ende=kopf; zwischen=new struct kunde; cout<<"Kundennummer:"<<MaxKdNr+1<<endl; zwischen->nkundennummer=MaxKdNr+1; MaxKdNr++; cout<<"Vorname:"; cin>>zwischen->cVorname; cout<<"Nachname:"; cin>>zwischen->cNachname; zwischen->weiter=NULL; if (kopf==NULL) { kopf=zwischen; return; } while (ende->weiter!=NULL) { ende=ende->weiter; } ende->weiter=zwischen; } void hinzufuegen() { ende=kopf; zwischen=new struct kunde; cout<<"Kundennummer:"<<MaxKdNr+aktuell->nkundennummer+1<<endl; zwischen->nkundennummer=MaxKdNr+aktuell->nkundennummer+1; MaxKdNr++; cout<<"Vorname:"; cin>>zwischen->cVorname; cout<<"Nachname:"; cin>>zwischen->cNachname; zwischen->weiter=NULL; if (kopf==NULL) { kopf=zwischen; return; } else if(kopf!=NULL) { while(ende->weiter!=NULL) { ende=ende->weiter; } ende->weiter=zwischen; } } void loeschen() { int KundenNr; cout<<endl<<"Geben Sie die Kundennummer ein:"; cin>>KundenNr; ende = zwischen = aktuell = kopf; if (aktuell) { if (kopf->nkundennummer == KundenNr) { if (zeigen(kopf)) { kopf = kopf->weiter; delete zwischen; } } else { if(kopf->weiter == NULL) { cout<<endl<<"Es gibt keinen Kunden mit dieser Nummer!"<<endl; return; } ende=ende->weiter; while(ende->nkundennummer != KundenNr) { if(ende->weiter == NULL) { cout<<endl<<"Es gibt keinen Kunden mit dieser Nummer!"<<endl; return; } zwischen=ende; ende=ende->weiter; } if(zeigen(ende)) { aktuell=ende; ende=ende->weiter; if(aktuell->weiter == NULL) { zwischen->weiter=NULL; } else { zwischen->weiter=ende; } delete aktuell; } } } } void auflisten() { aktuell=kopf; if(aktuell) { while(aktuell->weiter != NULL) { cout<<endl<<"Kundennummer:"<<aktuell->nkundennummer; cout<<endl<<"Vorname:"<<aktuell->cVorname; cout<<endl<<"Nachname:"<<aktuell->cNachname; aktuell=aktuell->weiter; } cout<<endl<<"Kundennummer:"<<aktuell->nkundennummer; cout<<endl<<"Vorname:"<<aktuell->cVorname; cout<<endl<<"Nachname:"<<aktuell->cNachname<<endl; } } void schreiben() { entfernen(); fstream in_out("kunden.txt", ios::out); aktuell=kopf; if(aktuell) { while(aktuell->weiter != NULL) { in_out<<endl<<aktuell->nkundennummer<<" "; in_out<<aktuell->cVorname<<" "; in_out<<aktuell->cNachname; aktuell=aktuell->weiter; } in_out<<endl<<aktuell->nkundennummer<<" "; in_out<<aktuell->cVorname<<" "; in_out<<aktuell->cNachname; } } void lesen() { fstream in_out("kunden.txt", ios::in|ios::nocreate); do { do { zwischen=new struct kunde; while(zwischen->weiter) { ende=kopf; in_out>>zwischen->nkundennummer; in_out>>zwischen->cVorname; in_out>>zwischen->cNachname; zwischen->weiter=NULL; if(kopf==NULL) { kopf=zwischen; } else if(kopf!=NULL) { while(ende->weiter!=NULL) { ende=ende->weiter; } ende->weiter=zwischen; } } }while(!in_out.eof()); i++; }while(i==2); } bool zeigen(kunde *pkunde) { char auswahl; cout<<endl<<"Kundennummer:"<<pkunde->nkundennummer; cout<<endl<<"Vorname:"<<pkunde->cVorname; cout<<endl<<"Nachname:"<<pkunde->cNachname; cout<<endl<<"Diesen Kunden loeschen? (J/N):"; cin>>auswahl; auswahl = toupper(auswahl); if (auswahl == 'J') { return true; } return false; } void entfernen() { DeleteFile("kunden.txt"); } kunde2.h: #ifndef kunde #define _kunde int MaxKdNr = 0; int i; struct kunde { int nkundennummer; char cVorname[30]; char cNachname[30]; struct kunde *weiter; } *kopf, *aktuell, *zwischen, *ende; void eingabe(); void loeschen(); void auflisten(); void schreiben(); void lesen(); void hinzufuegen(); void entfernen(); bool zeigen(kunde *pkunde); #endif Danke nochmals für die Hilfe..........
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.