Suchfunktion in Adressverwaltung einfügen

Moleman

Erfahrenes Mitglied
Hi,
ich hatte etwas langeweile, und hab mal eben ein Programm in C++ geschrieben, mit welchem man
1. Adressen eintragen kann (werden abgespeichert in eine txt datei)
2. Alle Adressen auslesen lassen kann.

jetzt wollte ich gerne, dass man auch jederzeit die txt Datei nach einer bestimmten Adresse durchsuchen lassen kann, welche dann angezeigt wird...
Ich poste einfach mal meinen Quellcode...
Ich weiss es ist etwas umständlich geschrieben und geht auch kürzer, aber darum kümmer ich mich wenn ich fertig bin...
Also hier der Quellcode
Code:
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;


int main()
{
	ofstream dataus;
	int anf;
	cout << "Adressbuch, bitte geben sie an welche Funktion sie wuenschen:"
		 <<endl<< "[1]Adresse hinzufuegen" 
		 << endl <<"[2]Adresse suchen"<<endl;
	cin >> anf;
	if (anf==2)
	{
		goto suchen;
	}
anfang:
	cout << endl << "Bitte geben Sie die Daten des Kontaktes ein:"<<endl;
	
	int i;
	char vorname, nachname, strasse, hausnr, plz, ort, tel;
	int um;
	cin.get ();
	dataus.open("C:\\c++\\test1\\verzeichnis.txt", ios_base::app);
	for (i = 1; i<80; i++)
	{
		dataus << "-";
		
	}
	dataus << endl;
	cout << "Vorname:";
	um=0;
	dataus << "Vorname:";
		do
		{
			um++;
				vorname=cin.get();
			dataus.put(vorname);
			if (um % 40 == 0)
				dataus << endl;
		}while (vorname != '\n');


		cout << "Nachname:";
		dataus << "Nachname:";
		do
		{
			um++;
			nachname=cin.get();
			dataus.put(nachname);
			if (um % 40 == 0)
				dataus <<endl;
		}while (nachname != '\n');


		cout << "Strasse:";
		dataus << "Strasse:";
		do
		{
			um++;
			strasse=cin.get();
			dataus.put(strasse);
			if (um % 40 == 0)
				dataus <<endl;
		}while (strasse != '\n');


		cout << "Hausnr:";
		dataus << "Hausnr:";
		do
		{
			um++;
			hausnr=cin.get();
			dataus.put(hausnr);
			if (um % 40 == 0)
				dataus <<endl;
		}while (hausnr != '\n');


		cout << "Postleitzahl:";
		dataus << "Postleitzahl:";
		do
		{
			um++;
			plz=cin.get();
			dataus.put(plz);
			if (um % 40 == 0)
				dataus <<endl;
		}while (plz != '\n');


		cout << "Ort:";
		dataus << "Ort:";
		do
		{
			um++;
			ort=cin.get();
			dataus.put(ort);
			if (um % 50 == 0)
				dataus <<endl;
		}while (ort != '\n');


		cout << "Tel.Nr.:";
		dataus << "Tel.Nr.:";
		do
		{
			um++;
			tel=cin.get();
			dataus.put(tel);
			if (um % 40 == 0)
				dataus <<endl;
		}while (tel != '\n');
		dataus.close();
		int ans2;
		cout << "Und jetzt?" <<endl << "[1]Noch einen Kontakt eintragen" <<endl << "[2]Kontakt suchen"
			 <<endl<< "[3]Programm beenden"<<endl;
		cin >> ans2;
		if (ans2==1)
			goto anfang;
		if (ans2==2)
			goto suchen;
		if (ans2==3)
			return 0;
	
suchen:

		ifstream datein;
		char zeichen;
		datein.open("C:\\c++\\test1\\verzeichnis.txt");
		if (datein == false)
		{
			cerr << "Datei konnte nicht ge\x94"
				<< "ffnet werden, bitte überprüfen sie das verzeichnis!" <<endl;
			return 0;
		}
		while (datein.eof() !=true)
		{
			zeichen = datein.get();
			cout << zeichen;
		}
		datein.close();
		cout << "Und jetzt?" <<endl << "[1]Noch einen Kontakt eintragen" <<endl << "[2]Kontakt suchen"
			 <<endl<< "[3]Programm beenden"<<endl;
		cin >> ans2;
		if (ans2==1)
			goto anfang;
		if (ans2==2)
			goto suchen;
		if (ans2==3)
			return 0;
		

	return 0;
}

Ich bedanke mich im Vorraus...

MfG
Moleman
 
Zuletzt bearbeitet:
1. NIEMALS GOTO VERWENDEN! DAS IST PFUI!
Schreibe Funktionen dafür.
2. Du solltest eine Klasse 'Adresse' schreiben, die die Adressdaten enthält. Dazu schreibst Du die Operatoren >> und <<, die dir das Schreiben und Lesen einer ganzen Adresse erledigen, sowie einen Vergleichsoperator == mit dem Du gelesene Adressen mit dem Muster vergleichen kannst. Ich würde das allerdings so machen, daß nicht die ganze Adresse verglichen wird, sondern nur der Name. Dann kannst Du alle ausgeben, die den gleichen Namen haben.
P.S.: Kann sein, daß Du die Operatoren >> und << in einer von istream bzw ostream abgeleiteten stream-Klasse definieren mußt. In der STL kenne ich mich leider nicht so gut aus, da ich meistens MFC programmiere (Wer mir ein gutes Buch zur STL empfehlen kann, nur her damit :-)).
 
Zurück