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

#define MAX_LINE 500
#define RECORDS 1000

struct osoba
{
   char imie[MAX_LINE];
   char nazwisko[MAX_LINE];
   int wiek;
};

typedef struct osoba OSOBA;

/* 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 liczbe calkowita wydobyta z linii tekstu podenego na standardowym wejsciu */
int czytaj_liczbe()
{
   char linia[MAX_LINE];
   fgets(linia, MAX_LINE, stdin);
   return atoi(linia);
}

void wypisz(OSOBA o)
{
   printf("%s ", o.imie);
   printf("%s ", o.nazwisko);
   printf("%d", o.wiek);
}

void wczytaj(OSOBA *o)
{
   printf("Imie: ");
   czytaj_linie(o->imie, MAX_LINE);
   printf("Nazwisko: ");
   czytaj_linie(o->nazwisko, MAX_LINE);
   printf("Wiek: ");
   o->wiek = czytaj_liczbe();
}

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 czytaj_liczbe();
}

int main()
{
   OSOBA baza[RECORDS];
   int opt=0, n=0, i, k;
   
   do
   { 
      opt = menu();    
      if( opt == 1 )
      {  
         /* Wypisz baze danych */
         printf("\nIlosc rekordow: %d\n", n);
         for(i=0; i<n; i++)
         {
            printf("[%d] ", i);
            wypisz(baza[i]);
            printf("\n");
         }
      }
      if( opt == 2 )
      {
         /* Dodaj rekord */
         if( n < RECORDS )        
         {
            printf("Nowy rekord nr %d:\n", n);
            wczytaj(baza + n);
            n = n + 1;
         }else printf("Uwaga: nie moge dodac nowego rekordu\n");
      }
      if( opt == 3 )
      {
         /* Usun rekord */
         printf("Podaj numer rekordu do usuniecia (od 0 do %d): ", n-1);
         k = czytaj_liczbe();
         if ( k>= 0 && k<n )
         {
            for(i=k; i<n-1; i++) baza[i]=baza[i+1];
            n--;
         }
         else
            printf("Uwaga: nie moge usunac rekordu nr %d\n", k);     
      }
      if( opt == 4 )
      {
         /* Edycja rekordu */
         printf("Podaj numer rekordu do edycji (od 0 do %d): ", n-1);
         k = czytaj_liczbe();
         if ( k>= 0 && k< n )
         {
            printf("Aktualny rekord nr %d\n", k);
            printf("[%d] ", k);
            wypisz(baza[k]);
            printf("\nWprowadz nowe dane:\n");
            wczytaj(baza+k);
         }
         else printf("Uwaga: podana zla wartosc %d\n", n);
      }
   }while( opt !=5 );

   printf("Do widzenia\n");
   
   return 0;
}
