uses crt;
const maxZaznamu=100;
type tDatum=record
         den:1..31;
         mesic:1..12;
         rok:1930..2050;
     end;

     tPohlavi=(muz,zena);

     tZamestnanec=record
         jmeno:string[20];
         prijmeni:string[30];
         datumZamestnani:tDatum;
         pohlavi:tPohlavi;
         plat:real;
     end;

     tEvidenceZamestnancu=array[1..maxZaznamu] of tZamestnanec;

var z:char;
    pocetZaznamu,odkud:integer;
    EvidenceZamestnancu:tEvidenceZamestnancu;

procedure kolikZaznamu(var pocet:integer);
begin
     write('Zadej pocet zaznamu, ktere budeme zadavat: ');
     readln(pocet);
end;

procedure nactiUdajeZamestnancu(pocetZaznamu:integer; var odkud:integer; var Evid:tEvidenceZamestnancu);
var i:integer;
    pohl:string;
begin
     writeln('Zadavani uzivatelu:');
     for i:=odkud+1 to pocetZaznamu do
         begin
         with Evid[i] do
            begin
              write('  Zadej jmeno: ');
              readln(jmeno);
              write('  Zadej prijmeni: ');
              readln(prijmeni);
              write('    Zadej den zamestnani: ');
              readln(datumZamestnani.den);
              write('    Zadej mesic zamestnani: ');
              readln(datumZamestnani.mesic);
              write('    Zadej rok zamestnani: ');
              readln(datumZamestnani.rok);
              write('  Zadej pohlavi: ');
              readln(pohl);
              if (pohl='muz') OR (pohl='Muz') then pohlavi:=muz
                 else pohlavi:=zena;
              write('  Zadej plat: ');
              readln(plat);
            end;
         writeln;
         end;
      odkud:=odkud+pocetZaznamu;
end;

procedure vypisUdajeZamestnancu(pocetZaznamu,odkud:integer; Evid:tEvidenceZamestnancu);
var i:integer;
begin
     writeln('Vypis uzivatelu: ');
     for i:=odkud to pocetZaznamu+odkud-1 do
         begin
         with Evid[i] do
            begin
              writeln('  Jmeno: ',jmeno);
              writeln('  Prijmeni: ',prijmeni);
              writeln('    Den zamestnani: ',datumZamestnani.den);
              writeln('    Mesic zamestnani: ',datumZamestnani.mesic);
              writeln('    Rok zamestnani: ',datumZamestnani.rok);
              write('  Pohlavi: ');
              if pohlavi=muz then writeln('Muz')
                else writeln('Zena');
              writeln('  Plat: ',plat:0:2);
            end;
         writeln;
         end;

end;

procedure navysPlat(pocetZaznamu,odkud:integer; var Evid:tEvidenceZamestnancu);
var i,spodni,horni:integer;
    okolik:real;
begin
     writeln('Zmena platu:');
     write('  Zadej od kolika menit: ');
     readln(spodni);
     write('  Zadej do kolika menit: ');
     readln(horni);
     write('  Zadej o kolik menit (v %): ');
     readln(okolik);
     for i:=odkud to pocetZaznamu+odkud-1 do
         begin
              if (Evid[i].plat>spodni) AND (Evid[i].plat<horni) then
              Evid[i].plat:=Evid[i].plat+okolik/100*(Evid[i].plat);
         end;
end;

procedure seradPodlePlatu(pocetZaznamu,odkud:integer; var Evid:tEvidenceZamestnancu);
var i:integer;
    plati:boolean;
    docasne:tZamestnanec;
begin
     writeln('Serazeni podle platu:');
     repeat
           plati:=true;
           for i:=odkud to pocetZaznamu+odkud-2 do
               begin
                    if Evid[i].plat>Evid[i+1].plat then
                       begin
                            docasne:=Evid[i];
                            Evid[i]:=Evid[i+1];
                            Evid[i+1]:=docasne;
                            plati:=false;
                       end;
                    end;
     until plati=true;
end;

begin
repeat
clrscr;
writeln('Trtkal 2008 - http://fei.trtkal.net');
writeln('-----------------------------------');
begin
     kolikZaznamu(pocetZaznamu);
     writeln('-----------------------------------');
     nactiUdajeZamestnancu(pocetZaznamu,odkud,EvidenceZamestnancu);
     vypisUdajeZamestnancu(pocetZaznamu,1,EvidenceZamestnancu);
     writeln('-----------------------------------');
     navysPlat(pocetZaznamu,1,EvidenceZamestnancu);
     vypisUdajeZamestnancu(pocetZaznamu,1,EvidenceZamestnancu);
     writeln('-----------------------------------');
     seradPodlePlatu(pocetZaznamu,1,EvidenceZamestnancu);
     vypisUdajeZamestnancu(pocetZaznamu,1,EvidenceZamestnancu);
end;
writeln('-----------------------------------');
write('Opakovat a/n: ');readln(z);
until (z='n');
end.
