Wichtige frage für Suchfunktion...

1alex1

Grünschnabel
Hi, hab da ein Adressbuch versucht zu programmieren. (für die Schule)
Leider bekomm ich nicht gepeilt wi die Suchfunktion funktionieren soll.

mein Programm sieht folgendermaßen aus:

PHP:
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>

struct daten
{
	int id;
	char name[20];
	char nachname[20];
	char adr[40];
	char tel[20];
};

void eingabe (daten&, int);
int suchen (int);

void main ()
{
	daten per;
	char jn, auswahl;
	int anzahl, fertig, y, i, suchid;
	FILE *daten;

	do
	{
		clrscr();
		fertig = 1;
		textcolor(LIGHTGRAY);

		cout << "1.Projekt: Adressbuch\n";
		cout << "*********************\n";
		cout << "<E>...Eingabe\n";
		cout << "<S>...Suchen\n";
		cout << "  <A>...Andern\n";
		cout << "  <L>...L”schen\n";
		cout << "<F>...Fertig\n";
		cout << "*********************\n";
		cout << "Ihre Eingabe: ";

		auswahl = getche();
		auswahl = toupper(auswahl);

		switch (auswahl)
		{

			case 'E':
				gotoxy(15,3 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(LIGHTGRAY);
				gotoxy(1,9);
				clreol();

				cout << "ID:\t ";
				cin  >> per.id;
				cout << "Vorname:\t ";
				cin  >> per.name;
				cout << "Nachname:\t ";
				cin  >> per.nachname;
				cout << "Adresse:\t ";
				cin  >> per.adr;
				cout << "Tel:\t ";
				cin  >> per.tel;

				eingabe (per, per.id);

				fertig =0;
				break;

			case 'S':
				gotoxy(14,4 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(WHITE);
				gotoxy(1,9);
				clreol();

				cout << "\nGeben sie die ID der zu suchenden Person ein:\t";
				cin  >> per.id;

				fertig = 0;
				break;

			case 'A':
				gotoxy(16,5 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(WHITE);
				gotoxy(1,9);
				clreol();

				cout << "ID:\n";
				getch();

				fertig = 0;
				break;

			case 'L':
				gotoxy(17,6 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(WHITE);
				gotoxy(1,9);
				clreol();

				cout << "ID:\n";
				getch();

				fertig = 0;
				break;

			case 'F':
				fertig = 1;
				textcolor(LIGHTGRAY);
				break;

			default:
				fertig = 0;
				break;
		}
	} while (fertig == 0);
}

void eingabe(daten &per, int idu)
{
	FILE *idx, *bin;

	bin = fopen( "H:\\adress\\daten.bin" , "ab" );
	fwrite (&per, sizeof(per), 1, bin);
	fclose(bin);

	idx = fopen("H:\\adress\\index.idx" , "ab");
	fwrite (&idu, sizeof(idu), 1, idx);
	fclose(idx);
}

Also ich schreib die Daten folgendermaßen in die Datein (hab eine Indexdatei und eine in der ich alle anderen Daten reinschreib)
PHP:
void eingabe(daten &per, int idu)
{
	FILE *idx, *bin;

	bin = fopen( "H:\\adress\\daten.bin" , "ab" );
	fwrite (&per, sizeof(per), 1, bin);
	fclose(bin);

	idx = fopen("H:\\adress\\index.idx" , "ab");
	fwrite (&idu, sizeof(idu), 1, idx);
	fclose(idx);
}

Aber die Suchfunktion kann so wie ich es hab garnicht funktionieren also, wäre echt nett wenn mir einer von euch helfen könnte.
In die Datei wird es richtig geschrieben, and dem kann es nicht liegen.

P.S.: Programmiert wird das Ganze in Borland C++ (Standard Editor in der schule)
 
Zuletzt bearbeitet:
mal ne ganz blöde Frage:

Kann es sein, daß du nur in der falschen Datei suchst ?
Dein Pfad ist nämlich beim Lesen und Schreiben unterschiedlich,
einmal H:\\adress\\index.idx, und einmal H:\\index.idx

Ansonsten würd ich gern wissen, ob du nur nach dem Index
suchst oder ob du auch zum Beispiel zu einem Namen eine
bestimmte Tel.Nr. suchen willst...

Greets
BadMourning
 
habs bemekrt aber an dem liegt es nicht

ist nur schlampigkeitsmäßig
ich will nur wissen wie das gehen soll
den beim suchen lese ich später eine ganze zeile ein
und von wo soll das prog wissen was der Name, Vornae, Telefonnummer sein soll......
 
Falls es jemanden interessiert, ich hab es fertig (von der Funktion her).
Hier das funktionsfähige Programm:

PHP:
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>

struct daten
{
	int id;
	char name[20];
	char nachname[20];
	char adr[40];
	char tel[20];
};

void eingabe (daten&, int);
int suchen (int);
void ausgabe (daten&,int);
void aendern (daten&, int);
void loeschen (int);

void main ()
{
	daten per;
	char jn, auswahl;
	int anzahl, fertig, y, i, suchid;
	FILE *daten;

	do
	{
		clrscr();
		fertig = 1;
		textcolor(LIGHTGRAY);

		cout << "1.Projekt: Adressbuch\n";
		cout << "*********************\n";
		cout << "<E>...Eingabe\n";
		cout << "<S>...Suchen\n";
		cout << "  <A>...Andern\n";
		cout << "  <L>...L”schen\n";
		cout << "<F>...Fertig\n";
		cout << "*********************\n";
		cout << "Ihre Eingabe: ";

		auswahl = getche();
		auswahl = toupper(auswahl);

		switch (auswahl)
		{

			case 'E':
				gotoxy(15,3 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(LIGHTGRAY);
				gotoxy(1,9);
				clreol();

				cout << "ID:\t ";
				cin  >> per.id;
				cout << "Vorname:\t ";
				gets(per.name);
				cout << "Nachname:\t ";
				gets(per.nachname);
				cout << "Adresse:\t ";
				gets(per.adr);
				cout << "Tel:\t ";
				gets(per.tel);

				eingabe (per, per.id);

				fertig =0;
				break;

			case 'S':
				gotoxy(14,4 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(WHITE);
				gotoxy(1,9);
				clreol();

				cout << "\nGeben sie die ID der zu suchenden Person ein:\t";
				cin  >> per.id;

				suchid = suchen(per.id);

				if (suchid != 0)
				{
					cout << "Der Eintrag wurde an " << suchid << ". Stelle gefunden." << endl;
					ausgabe (per,suchid);
					cout << "Vorname:\t" << per.name << endl;
					cout << "Nachname:\t" << per.nachname << endl;
					cout << "Adress:\t\t" << per.adr << endl;
					cout << "Tel.Nr:\t\t" << per.tel << endl;
				}
				else
				{
					cout << "Der Eintrag wurde nicht gefunen";
				}

				getch();
				fertig = 0;
				break;

			case 'A':
				gotoxy(16,5 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(WHITE);
				gotoxy(1,9);
				clreol();

				cout << "Geben Sie die neuen Daten ein:" << endl << endl;
				cout << "Vorname:\t ";
				gets(per.name);
				cout << "Nachname:\t ";
				gets(per.nachname);
				cout << "Adresse:\t ";
				gets(per.adr);
				cout << "Tel:\t ";
				gets(per.tel);

				aendern (per, suchid);

				fertig = 0;
				break;

			case 'L':
				gotoxy(17,6 );
				textcolor(YELLOW+BLINK);
				cprintf("<--\r\n");
				textcolor(WHITE);
				gotoxy(1,9);
				clreol();

				loeschen(suchid);

				getch();
				fertig = 0;
				break;

			case 'F':
				fertig = 1;
				textcolor(LIGHTGRAY);
				break;

			default:
				fertig = 0;
				break;
		}
	} while (fertig == 0);
}

void eingabe(daten &per, int idu)
{
	FILE *idx, *bin;

	bin = fopen( "C:\\daten.bin" , "ab" );
	fwrite (&per, sizeof(per), 1, bin);
	fclose(bin);

	idx = fopen("C:\\index.idx" , "ab");
	fwrite (&idu, sizeof(idu), 1, idx);
	fclose(idx);
}

int suchen(int ideingabe)
{
	int nr, id;
	FILE *idx;
	nr = 1;

	idx = fopen("C:\\index.idx","rb");

	while (fread(&id, sizeof(int), 1, idx))
	{
		if(id==ideingabe)
			return nr;
		else
			nr++;
	}
}

void loeschen(int idu)
{
	FILE *idx;

	idx = fopen( "C:\\index.idx" , "rb+" );
	fseek(idx, ((idu-1) * sizeof(int)),SEEK_SET);
	idu = NULL;
	fwrite (&idu, sizeof(int), 1, idx);
	fclose(idx);

	cout << "Der Datensatz wurde erfolgreich geloescht!"<<endl;
}


void aendern (daten &per, int zeile)
{
	FILE *idx, *bin;

	bin = fopen( "C:\\daten.bin" , "rb+" );
	fseek(bin, (zeile - 1) * sizeof(daten), SEEK_SET);
	fwrite (&per, sizeof(daten), 1, bin);
	fclose(bin);

	cout << " Der Eintrag wurde erfolgreich geändert." << endl;
}

void ausgabe(daten &per, int zeile)
{
	FILE *bin;
	bin = fopen("C:\\daten.bin","rb");

	fseek(bin, ((zeile - 1) * sizeof(daten)) ,SEEK_SET);
		fread(&per, sizeof(daten), 1, bin);
	fclose(bin);
}
 
Zurück