notorious.madeye Geschrieben 27. September 2004 Geschrieben 27. September 2004 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 Zitieren
Klotzkopp Geschrieben 27. September 2004 Geschrieben 27. September 2004 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). Zitieren
notorious.madeye Geschrieben 28. September 2004 Autor Geschrieben 28. September 2004 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.......... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.