PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Adressbuch in C


Anfaenga
2005-01-24, 13:55:36
Ich muss ein Adressbuch für die Schule programmieren, wir haben aber noch nicht gelernt wie man eine Suchfunktion macht die muss aber dabei sein.
Bis jetzt hab ich das:

#include<iostream.h>
#include<stdio.h>
#include <string.h>

int main()
{
struct person
{
char suchname[20]; // Vergleichswert
char name[20];
char vorname[20];
int alter;
char tel[20];
char str[20];
int nr;
}mensch;

char wahl;
FILE *f;
for(int i=0;i<21;i++)
{
mensch.suchname[i]=' ';
mensch.name[i]=' ';
mensch.vorname[i]=' ';
mensch.tel[i]=' ';
mensch.str[i]=' ';
}
mensch.alter=0;
mensch.nr=0;

do
{
printf("\n* 1 -> Adressdaten eingeben *\n");
printf("* 2 -> Suchen (Nachname) *\n");
printf("* 3 -> Ins Adressbuch speichern *\n");
printf("* 4 -> Einlesen des Adressbuchs *\n");
printf("* 0 -> Beenden *\n\n");
scanf("%s" ,&wahl);



switch(wahl)
{
case '1': {
printf("\n* Hier bitte den Vornamen,Nachnamen,das Alter *\n");
printf("* die Telefonnummer,Strasse und die Hausnummer eingeben *\n\n");
printf("Vorname : ");
scanf("%s" ,&mensch.vorname);
printf("Name : ");
scanf("%s" ,&mensch.name);
printf("Alter : ");
scanf("%d" ,&mensch.alter);
printf("Telefonnummer : ");
scanf("%s" ,&mensch.tel);
printf("Strasse : ");
scanf("%s" ,&mensch.str);
printf("Hausnummer : ");
scanf("%d" ,&mensch.nr);
break;}
case '2': {printf("Suche eingeben (Nachname): ");
scanf("%s" ,&mensch.suchname);
if( strcmp( mensch.suchname, mensch.name ) == 0 )
{printf("Vorname: %s\n",mensch.vorname);
printf("Name: %s\n",mensch.name);
printf("Alter: %d\n",mensch.alter);
printf("Telefon: %s\n",mensch.tel);
printf("Strasse: %s\n",mensch.str);
printf("Hausnummer: %d\n",mensch.nr);
}

break;}
case '3': {printf("\nTabelle wird gespeichert!\n");
f=fopen("adressbuch.txt","a+");
fwrite(&mensch,sizeof(mensch),1,f);
fclose(f);
break;}
case '4': {printf("\nTabelle wird geladen!\n");
f=fopen("adressbuch.txt","r");
fread(&mensch,sizeof(mensch),3,f);
printf("Ihre angaben:\n\n");
printf("Vorname: %s\n",mensch.vorname);
printf("Name: %s\n",mensch.name);
printf("Alter: %d\n",mensch.alter);
printf("Telefon: %s\n",mensch.tel);
printf("Strasse: %s\n",mensch.str);
printf("Hausnummer: %d\n",mensch.nr);
fclose(f);
break;}
case '0': {printf("Programmende!\n");
break;}
}
}
while(wahl!='0');
return 0;
}

Das Problem ist dass ich nur ein-und denselben Eintrag suchen kann obwohl das programm anscheinend mehrer Adressen in die txt datei schreiben kann.

Anfaenga
2005-01-24, 15:14:49
kann mir denn keiner helfen?
Hallo? keiner da??

Xero
2005-01-24, 15:26:41
wie wärs mit [code] tag ?

Anfaenga
2005-01-24, 15:34:27
wie wärs mit [code] tag ?
was ist das?
wie mach ich das?

Umal
2005-01-24, 15:47:51
Er meint, dass du das Codetag verwenden sollst, wenn du deinen Source hier postest. So, wie du das schreibst, kann das ja niemand lesen.

Du schreibst:
break;}
case '3': {printf("\nTabelle wird gespeichert!\n");
f=fopen("adressbuch.txt","a+");
fwrite(&mensch,sizeof(mensch),1,f);
fclose(f);

Mit Codetag sieht das so aus:

break;
}
case '3':
{
printf("\nTabelle wird gespeichert!\n");
f=fopen("adressbuch.txt","a+");
fwrite(&mensch,sizeof(mensch),1,f);
fclose(f);
}
}

usw.

Wie du das Codetag verwendest, schreib ich im nächsten Post.

Umal
2005-01-24, 15:50:57
http://www.forum-3dcenter.org/vbulletin/misc.php?do=bbcode#code

Das Wort "code" in eckigen Klammern ist der Codetag. ;)

Anfaenga
2005-01-24, 15:53:29
#include<iostream.h>
#include<stdio.h>
#include <string.h>

int main()
{
struct person
{
char suchname[20]; // Vergleichswert
char name[20];
char vorname[20];
int alter;
char tel[20];
char str[20];
int nr;
}mensch;

char wahl;
FILE *f;
for(int i=0;i<21;i++)
{
mensch.suchname[i]=' ';
mensch.name[i]=' ';
mensch.vorname[i]=' ';
mensch.tel[i]=' ';
mensch.str[i]=' ';
}
mensch.alter=0;
mensch.nr=0;

do
{
printf("\n* 1 -> Adressdaten eingeben *\n");
printf("* 2 -> Suchen (Nachname) *\n");
printf("* 3 -> Ins Adressbuch speichern *\n");
printf("* 4 -> Einlesen des Adressbuchs *\n");
printf("* 0 -> Beenden *\n\n");
scanf("%s" ,&wahl);



switch(wahl)
{
case '1': {
printf("\n* Hier bitte den Vornamen,Nachnamen,das Alter *\n");
printf("* die Telefonnummer,Strasse und die Hausnummer eingeben *\n\n");
printf("Vorname : ");
scanf("%s" ,&mensch.vorname);
printf("Name : ");
scanf("%s" ,&mensch.name);
printf("Alter : ");
scanf("%d" ,&mensch.alter);
printf("Telefonnummer : ");
scanf("%s" ,&mensch.tel);
printf("Strasse : ");
scanf("%s" ,&mensch.str);
printf("Hausnummer : ");
scanf("%d" ,&mensch.nr);
break;}
case '2': {printf("Suche eingeben (Nachname): ");
scanf("%s" ,&mensch.suchname);
if( strcmp( mensch.suchname, mensch.name ) == 0 )
{printf("Vorname: %s\n",mensch.vorname);
printf("Name: %s\n",mensch.name);
printf("Alter: %d\n",mensch.alter);
printf("Telefon: %s\n",mensch.tel);
printf("Strasse: %s\n",mensch.str);
printf("Hausnummer: %d\n",mensch.nr);
}

break;}
case '3': {printf("\nTabelle wird gespeichert!\n");
f=fopen("adressbuch.txt","a+");
fwrite(&mensch,sizeof(mensch),1,f);
fclose(f);
break;}
case '4': {printf("\nTabelle wird geladen!\n");
f=fopen("adressbuch.txt","r");
fread(&mensch,sizeof(mensch),3,f);
printf("Ihre angaben:\n\n");
printf("Vorname: %s\n",mensch.vorname);
printf("Name: %s\n",mensch.name);
printf("Alter: %d\n",mensch.alter);
printf("Telefon: %s\n",mensch.tel);
printf("Strasse: %s\n",mensch.str);
printf("Hausnummer: %d\n",mensch.nr);
fclose(f);
break;}
case '0': {printf("Programmende!\n");
break;}
}
}
while(wahl!='0');
return 0;
}

noid
2005-01-24, 16:09:37
du liest aus der datei auch immer nur einen menschen ein, dann kannst du auch nur einen finden. außerdem geht deine suche nur über die variable mensch, da diese kein array bzw keine liste ist bekommst du auch nur angezeigt ob in mensch aktuell der name der person steht die du suchst.