#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX_LINE 200
#define MAX_RECORDS 1000

struct osoba
{
	char nazwisko[MAX_LINE];
	char imie[MAX_LINE];
	int wiek;
	float wzrost;
};

typedef struct osoba OSOBA;

void wyswietl(OSOBA x)
{
	printf("Nazwisko: %s\n", x.nazwisko);
	printf("Imie: %s\n", x.imie);
	printf("Wiek: %d\n", x.wiek);
	printf("Wzrost: %f\n", x.wzrost);
}

/* Funkcja wczytuje linie tekstu do tablicy znakowej. */
char* czytaj_linie(char* napis, int n)
{
	fgets(napis, n, stdin);
	napis[strlen(napis) - 1] = '\0';
	return napis;
}

/* Funkcja zwraca liczbę float podaną przez użytkownika w treminalu */
float czytaj_liczbe()
{
	char linia[MAX_LINE];
	czytaj_linie(linia, MAX_LINE);
	return atof(linia);
}

OSOBA wczytaj()
{
	OSOBA x;
	printf("Nazwisko: ");
	czytaj_linie(x.nazwisko, MAX_LINE);
	printf("Imie: ");
	czytaj_linie(x.imie, MAX_LINE);
	printf("Wiek: ");
	x.wiek = (int)czytaj_liczbe();
	printf("Wzrost: ");
	x.wzrost = czytaj_liczbe();
	return x;
}

/* Funkcja wypisuje menu oraz zwraca wartosc wybrana przez uzytkownika */
int menu()
{
   printf("\n1. Wyswietl baze danych\n");
   printf("2. Dodaj rekord\n");
   printf("3. Usun rekord\n");
   printf("4. Edytuj rekord\n");
   printf("5. Zakoncz program\n");

	printf("Co wybrac? ");
	return (int)czytaj_liczbe();
}

int main()
{
	OSOBA baza[MAX_RECORDS];
	int wybor = 0;
	int n = 0;
	int i = 0;
	int k = 0;

	do
	{
		wybor = menu();
		switch (wybor)
		{
			case 1:
				/* Wypianie calej bazy danych */
		 	    printf("\nIlosc rekordow: %d\n", n);
				for ( i = 0; i < n; i++)
				{
					printf("\nRekord nr %d\n", i);
					wyswietl(baza[i]);
				}
				break;
			
			case 2:
			    /* Dodaj rekord */
				if (n < MAX_RECORDS - 1)
				{
					baza[n] = wczytaj();
					n++;
				}
				else printf("Brak miejsca w bazie\n");
				break;
			
			case 3:
				    /* Usun rekord */
         		printf("Podaj numer rekordu do usuniecia (od 0 do %d): ", n-1);
     			k = (int)czytaj_liczbe();
				if (k >= 0 && k< n)
				{
					for (i = k; i < n-1; i++)
					{
						baza[i] = baza[i+1];
					}
					n--;
				}
				else printf("Nie ma takiego rekordu\n");
				break;

			case 4:
				 /* Edycja rekordu */
         		printf("Podaj numer rekordu do edycji (od 0 do %d): ", n-1);
         		k = (int)czytaj_liczbe();
         		if ( k>= 0 && k< n )
         		{
            		printf("Aktualny rekord nr %d\n", k);
            		wyswietl(baza[k]);
            		printf("\nWprowadz nowe dane:\n");
            		baza[k] = wczytaj();
         		}
         		else printf("Nie ma takiego rekordu\n");
      
				break;
			default:
				printf("Nie wiem o co ci chodzi\n");
		}
	} while ( wybor != 5);
	printf("Do widzenia\n");
}