// Bsp14.cpp : Definiert den Einsprungpunkt fr die Konsolenanwendung.
//
  
#include "stdafx.h"


int read_famil_relation(persn *psn, famil *fml);
int read_famil_adresse(famil *fml, adresse *a, int  i);
int read_person(persn *p, famil *fml, int i);
void frage_antwort(famil *fml);

extern char line[255], line2[255];

/*************************************************************************************
 * Diese Funtkion liest die Familienbeziehung in Form von
 * "familie <Zahl> <sohn | tochter> == familie <zahl> <mann | frau> == person <zahl>"
 * und erstellt die Verknuepfungen von Zeigern.
 *************************************************************************************/

int read_famil_relation(persn *psn, famil *fml)
{
	char Q1[20]={'\0'}, Q2[20]={'\0'};
	int d = -1 , d1 = -1 , d2 = -1;

	//fflush(stdin);
	//gets(line);
	if(sscanf(line, "familie %d %s == familie %d %s == person %d",&d, Q1, &d1, Q2, &d2) == 5)
	// Q1 und Q2 ist nicht NULL, d.h. Familienbeziehung ist gegeben.
	{
	  if (!strcmp(Q1, "sohn") &&				// der sohn der familie[d] ist gleich wie
		  !strcmp(Q2, "mann"))					// der mann der familie[d1] und heisst person[d2]
		fml[d].sohn = fml[d1].mann = &psn[d2];	// der sohn der familie[d] ist gleich person[d2]
	  else if (!strcmp(Q1, "tochter") &&		// die tochter der familie[d] ist gegeben
		       !strcmp(Q2, "frau"))				// die tochter der familie[d] ist gleich der frau der 
		fml[d].tochter = fml[d1].frau = &psn[d2];// familie[d1] ist gleich person[d2]
	}
    else if (sscanf(line, "familie %d %s == person %d",&d, Q1, &d1) == 3)
	{
		if (!strcmp("mann", Q1))
			fml[d].mann = &psn[d1];
		else if (!strcmp("frau", Q1))
			fml[d].frau = &psn[d1];
		else if (!strcmp("sohn", Q1))
			fml[d].sohn = &psn[d1];
		else if (!strcmp("tochter", Q1))
			fml[d].tochter = &psn[d1];
	}
	else if (sscanf(line, "person %d == familie %d", &d1, &d2) == 2)
	{
		psn[d1].fl = &fml[d2];
	}
	else if (!strncmp("Ende",line,4))
		return 1;
	else
	{
		printf("Falsche Eingabe");
		return 0;
	}
	return 0;

}



/***********************************************************************************************************
 * Diese Funktion liest die Adressen der Familien ein in der Form "Strasse Hausnummer Plz Ort".
 ***********************************************************************************************************/

int read_famil_adresse(famil *fml, adresse *a)
{
   int d0, d1, d2;
   char Q1[50], Q2[50], line3[150];

   
		if (sscanf(line3, "familie %d %s, %d, %d, %s", &d0, Q1, &d1, &d2, &Q2) == 5)
		
		strcpy(a->strasse, Q1);
		a->hausnummer = d1;
		a->plz = d2;
		strcpy(a->ort, Q2);
		
		return 0;
}


/***************************************************
 * Diese Funktion liest Person ein
 * in der Format "Name Vormname Alt"
 ***************************************************/

int read_person(persn *p, famil *fml, int i)
{
	int d, d1;
	char Q1[20], Q2[20];
	//fflush(stdin);
	//printf("Person[%d] Name, Vorname Alt familie<zahl>\n ", i);
	//fflush(stdout);

    if (sscanf(line2, "%s %s %d %d",Q1, Q2, &d, &d1) != 4 ||
		!strcmp(Q1, "Ende"))
		return 1;
	strcpy(p->name, Q1);
	strcpy(p->vname, Q2);
	p->alt = d;
	p[i].fl = &fml[d1];
	return 0;
}

/***********************************************************************************************************
 * Diese Funktion beantwortet Fragen der Art "Wie lautet der Name der Tochter des Sohnes der 
 * Familie 0?".
 ***********************************************************************************************************/

void frage_antwort(famil *fml)
{
	int d;
	struct famil *f;
	char Q1[20]={'\0'}, Q2[20]={'\0'}, Q3[20]={'\0'};
	struct persn *p;


	printf("\nFrage:\nFamilie Nr.");
	fflush(stdin);
	fflush(stdout);
	scanf("%d", &d);
	f = &(fml[d]);
	printf("Familien-Member:<sohn|tochter>\n");
	fflush(stdin);
	scanf("%s", Q1);
	p = !strcmp("sohn", Q1) ? f->sohn : !strcmp("tochter", Q1) ? f->tochter : NULL;
	printf("Familie[%d]->%s\n", d,Q1);
	if (p != NULL)
	{
		if (p->fl != NULL) 			// wenn sohn oder tochter seine(ihre) eigene Familie hat
		{
			f = p->fl;
			printf("Familien-Member:<sohn|tochter>\n");
			fflush(stdin);
			scanf("%s", Q2);
			p = !strcmp("sohn", Q2) ? f->sohn : !strcmp("tochter", Q2) ? f->tochter : NULL;
			printf("Familie[%d]->%s->%s\n",d,Q1, Q2);
		}
	}
	else
	{
		printf("Keine Angabe\n");
		return;
	}
	

	printf("Attribute:<Alter|Typ|Name|Vorname|Adresse>");
	fflush(stdin);
	scanf("%s", Q3);

	printf("Familie[%d]->%s->%s->%s\n", d,Q1,Q2,Q3);
	if (!strcmp("Alter", Q3))
		printf("%d", p->alt);
	else if (!strcmp("Name", Q3))
		printf("%s", p->name);
	else if (!strcmp("Vorname", Q3))
		printf("%s", p->vname);
	else if (!strcmp("Typ", Q3))
		printf("%s", p->Typ);
	else if (!strcmp("Adresse", Q3))
		printf("%s", f->ad->strasse);
	    printf("%d", f->ad->hausnummer);
		printf("%d", f->ad->plz);
		printf("%s", f->ad->ort);
}