/* File: person.c -- zu Kap. 3.3.3 Standard-E/A
   Fkt.: Komplexbeispiel zur Anwendung der Moeglichkeiten
	 der Standard-E/A (scanf/printf)
	 das Beispiel soll fuer Uebungszwecke modifiziert werden
	 und kann in seiner Funktionalitaet beliebig erweitert werden. */
#include <stdio.h>
#define NAMLEN 15
#define MAXPERS 20
struct person {
    char name[NAMLEN];
    char wohnort[NAMLEN];
    int alter;
    } pfeld[MAXPERS];
int input();
void namen();
void daten();
void hilfe();
main() {
   int i;
   char kom;
     for(;;){
      hilfe();
      fprintf(stderr, "Kommando:   ");
      if ((i=scanf("%1s",&kom))==EOF) {
   	fprintf(stderr, "\nProgrammende\n");
	exit(1);
      }
      while (getchar()!='\n') ;
      if (i!=1) {
	fprintf(stderr,"\nfehlerhafte Eingabe - Wiederholung\n");
	continue;
      }
      switch(kom){
      case 'q': fprintf(stderr, "\nProgrammende\n");
		exit(1);
      case 'i': input();break;
      case 'n': namen();break;
      case 'p': daten();break;
      case 'h':
      case '?': hilfe();break;
      default:fprintf(stderr, "ungueltiges Kommando !!!\n");continue;
}  }  }
int input()
{  int i;
   for(i=0;i<MAXPERS;i++)
   	if(pfeld[i].name[0]=='\0') break; /* suchen ersten freien Eintrag */
   printf("Name    : ");
   scanf("%s",pfeld[i].name);
   printf("Wohnort : ");
   scanf("%s",pfeld[i].wohnort);
   for(;;) {
      printf("Alter   : ");
      if (scanf("%d%*c",&pfeld[i].alter)==1) break;
}  }
void namen()
{  int i;
   putchar('\n');
   for(i=0;i<MAXPERS;i++)
      if(pfeld[i].name[0]!=0)
         printf("Name    : %s\n",pfeld[i].name);
   return;
}
void daten()
{  int i;
   char namen[NAMLEN];
   fprintf(stderr, "Geben Sie einen Namen ein : ");
   scanf("%s",namen);
   for(i=0;i<MAXPERS;i++){
      if(strcmp(pfeld[i].name,namen)==0){
         printf("Name   : %s\n",pfeld[i].name);
         printf("Wohnort: %s\n",pfeld[i].wohnort);
         printf("Alter  : %d\n",pfeld[i].alter);
      }
   }
   return;
}
void hilfe()
{
   fprintf(stderr, "Folgende Kommandos sind erlaubt:\n\
   q: Programmende\n\
   i: Eingabe einer Person\n\
   n: Anzeige aller Namen\n\
   p: Anzeige einer Person\n\
   h: dieser Text\n\
   ?: dieser Text\n");
}
