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