/* 3. Gegeben seien die Strukturen
struct adress_typ { char plz[5], ort[20], str[30]; }; und
struct satz_typ { char name[30]; adresstyp anschrift; }.
Realisieren Sie folgendes Menü und schreiben Sie dazu geeignete Funktionen:
- 0 - Ende
- 1 - Eingeben (Anhängen eines Datensatzes)
- 2 - Ausgeben (aller Daten)
- 3 - Lesen eines bestimmten Datensatzes.
-----------------------------------------------------------------------------*/
#include <stdlib.h>
#include <stdio.h>
struct adress_typ { char plz[6]; char ort[20]; char str[30];};
struct satz_typ   { char name[25]; struct adress_typ adr; };
void eingeben( char dname[] )
{ struct satz_typ p;
  FILE * f;
  f= fopen( dname, "a" ); /* a= append= anhängen */
  if( f==NULL) printf("\n Datei konnte nicht geoeffnet werden\n ");
  else{ printf("\n Name: "); scanf("%s", &p.name);
        printf(" PLZ: ");    scanf("%s", p.adr.plz);
        fprintf( f, "%s %s ", p.name, p.adr.plz);
        fclose( f);
      }
}
void anzeigen( char dname[])
{  struct satz_typ p;
   FILE *d;
   d= fopen( dname, "r" );  /* r= read */
   if( d==NULL)printf("\n Datei konnte nicht geoeffnet werden\n ");
   else{ while( fscanf( d, "%s %s ", &p.name, &p.adr.plz)==2 )
         { printf("\n %s, %s ", p.name, p.adr.plz);
         }
         printf("\n");
         fclose( d );
       }
}
void suchen( char dname[] )
{ struct satz_typ p; char x[25]; int gefunden=0;
  FILE * datei;
  datei= fopen( dname, "r");
  if( datei==NULL)printf("\n Datei konnte nicht geoeffnet werden\n ");
  else
  {  printf("\n zu suchender Name: ");
     scanf("%s", &x);
     while( fscanf( datei, "%s %s ", p.name, p.adr.plz) == 2 )
     {  if(strcmp( x, p.name)==0){ printf("\n %s, PLZ: %s\n", p.name,p.adr.plz);
                                   gefunden++;
                                 }
     }if( gefunden==0)printf("\n Name nicht gefunden!\n");
     fclose( datei);
  }
}
int main()
{ char dateiname[]="s:\\adr2.dat";
  int menue;
  do{ printf("\n - 0 - Ende\n - 1 - Eingeben (Anhaengen eines Datensatzes)"
      "\n - 2 - Ausgeben (aller Daten)\n - 3 - Lesen eines bestimmten "
      "Datensatzes       :");
       scanf("%i", &menue);
      switch( menue)
      { case 1: eingeben( dateiname); break;
        case 2: anzeigen( dateiname); break;
        case 3: suchen( dateiname);   break;
      }


  }while( menue!=0); return 0;
}
