/*Ha a program valahol egy kicsit bugzik vagy nehol egy kisse nyakatekerten van vmi megoldva
bocsi, de a jelenlegi tudasommal ennyire futotta. Azert, ha nagyon elcsesztem vmit azt 
jelezzetek levlistan. Azert remelem van olyan akin segit valamennyit!*/


#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>

#define MINSZ 0
#define MAXSZ 100
#define MAXK 128


#define HSZ sizeof(int)/sizeof(short)*5

int egesze(char s[])
{
  int i=0;
  int kezd;

  /* feher karakterek atlepese */
  while (s[i]==' ' || s[i]=='\n' || s[i]=='\t')
    i++;
  if (s[i]=='+' || s[i]=='-')
    i++;
  kezd=i;

  while (s[i]>='0' && s[i]<='9' && i-kezd<HSZ)
    ++i;

  if (s[i]!=0 && s[i]!='\n' && s[i]!='\t' && s[i]!=' ')
    return 0;
  else
    return 1;
}

int getline(char s[], int lim) {
    int i;
    char c;
    for(i=0;i<lim && (c=getchar())!='\n' && c!=EOF;++i)s[i]=c;
    s[i]='\0';
    while(c!='\n'&& c!=EOF)c=getchar();
    return i;
}

void alakit(char nev[])
{
	int i=0;
	
	for(i=0;i<strlen(nev);i++)
	{
		nev[0]=toupper(nev[0]);
		
		if(nev[i]=='_')
		{
			nev[i]=' ';
			nev[i+1]=toupper(nev[i+1]);
		}
		else if(nev[i]=='-')
			nev[i+1]=toupper(nev[i+1]);	
	}	
}

int jokarlanc(char s[])
{
	int i=0, x=0;
	
	for(i=0;i<strlen(s);i++)
	{
		if((s[i]>='a' && s[i]<='z') || (s[i]=='-') || (s[i]=='_'))
		{
			x++;
		}	
	}
	
	if(strlen(s)==x)
		return 1;

	else
		return 0;
}


void main(void)
{
	int i=0, j=0, z=0, ok, x=0, log, osszeg=0, korok[MAXK], legindex, legkor=0;
	char tmp[MAXK+1], legnev[MAXK], aktnev[MAXK], utonev[MAXK], elonev[MAXK];
	float atlag;


	printf("A program bekeri egy szinesz nevet es eletkorat! A nev csak az angol ABC\n"
		"kisbetuit es kotojelet tartalmazhat, a szokoz helyett alulvonast hasznaljon!\n"
		"A kor csak egesz szam lehet %d es %d kozott! A program ures sorra befejezi\n"
		"a bekerest!\n", MINSZ, MAXSZ);

	for(j=0;j<80;j++)/*Disz*/
		printf("-");
		
	/*Legnev tomb kinullazasa*/
	for(j=0;j<MAXK;j++)
		legnev[j]=0;

	ok=0;
	log=0;
	while(!log)
	{
		/*Aktnev tomb kinullazasa*/
		for(i=0;i<=MAXK;i++)
			aktnev[i]=0;

		while(!ok && !log)
		{
			printf("Kerem adja meg a szinesz nevet: ");

			if(!getline(tmp,MAXK))
			{
				printf("Ures sort adott meg! Vege a beolvasanak!\n\n");
				log=1;
			}

			else
			{
				if(jokarlanc(tmp))
				{
					alakit(tmp);
					ok=1;

					for(j=0;j<strlen(tmp);j++)
						aktnev[j]=tmp[j];
						
						
					/*+1*/

						/*Legutolso space helyenek meghatarozasa*/
						for(j=0;j<strlen(aktnev);j++)
						{
							if(aktnev[j]==' ')
							{
								legindex=j;
							}
						}
						/*Az utonev tomb kinullazasa*/
						for(j=0;j<MAXK;j++)
							utonev[j]=0;

						/*Az utonev meghatarozasa*/
						i=0;
						for(j=legindex;j<strlen(aktnev);j++)
						{
							utonev[i]=aktnev[j];
							i++;
						}

						/*Az elonev tomb kinullazasa*/
						for(j=0;j<MAXK;j++)
							elonev[j]=0;

						/*Az elonev meghatarozasa*/
						i=0;
						for(j=0;j<legindex;j++)
						{
							elonev[i]=aktnev[j];
							i++;
						}		
				}

				else
					printf("A nev csak az angol ABC lisbetuit es kotojelet tartalmazhat!\n");
			}
		}

		ok=0;
		while(!ok && !log)
		{
			printf("Kerem adja meg a szinesz korat: ");

			if(!getline(tmp,MAXK))
			{
				printf("Ures sort adott meg! Vege a beolvasanak!\n\n");
				log=1;
			}

			else
			{
				if(egesze(tmp))
				{
					x=atoi(tmp);

					if(x>=MINSZ && x<=MAXSZ)
					{
						korok[z]=x;
						z++;
						ok=1;

						for(j=0;j<80;j++)/*Disz*/
							printf("-");
						
						/*Az atalakitott nev kiirasa*/
						printf("Atalakitva: %s\n", aktnev);

						for(j=0;j<80;j++)/*Disz*/
							printf("-");

						printf("A szinesz varialt neve: %s, %s\n", utonev, elonev);


						for(j=0;j<80;j++)/*Disz*/
							printf("-");

						/*A legidosebb szinesz neve es kora*/
						if(legkor<x)
						{
							/*Legnev tomb kinullazasa*/
							for(j=0;j<MAXK;j++)
								legnev[j]=0;
							
							legkor=x;

							for(j=0;j<strlen(aktnev);j++)
								legnev[j]=aktnev[j];

						}


					}

					else
						printf("Csak %d es %d kozotti szamokat adhat meg!\n\n", MINSZ, MAXSZ);
				}

				else
					printf("Csak egesz szamot adhat meg!\n\n");
			}
		}

		ok=0;

	}


	/*A szineszek atlag eletkoranak meghatarozasa*/
	for(j=0;j<z;j++)
		osszeg+=korok[j];

	atlag=(float)osszeg/z;

	for(j=0;j<80;j++)/*Disz*/
		printf("-");

	printf("A szineszek atlag eletkora: %5.2f ev\n", atlag);
	printf("A legidosebb szinesz neve, kora: %s, %d eves\n\n", legnev, legkor);


	getchar();


}


