Zum Inhalt springen

Probleme mit Dateien


notorious.madeye

Empfohlene Beiträge

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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..........

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...