předchozí návrat do menu uložit zdrojový kód

Cvičení 25

Vytvořte program, který bude zaznamenávat výsledky běžeckého závodu. Využijte datového typu záznam (record), který bude obsahovat čas, jaký sportovec zaběhl, jeho jméno a příjmení. Jednotlivé záznamy se budou ukládat do souboru (file). Jméno souboru bude zadávat uživatel při spuštění programu, případně bude moci soubor, se kterým chce pracovat změnit později. Program rozdělte na jednotlivé procedury, které budou zpracovávat výpis záznamů ze souboru, přidání záznamů, hledání a výmaz záznamů. Výpis bude mít formu výsledkové listiny - závodníci budou seřazeni podle dosaženého času.

Rada: Výmaz zvoleného záznamu vyřešte tak, že ostatní záznamy přeneste do pomocného souboru, ze kterého je pak přepíšete zpět a tím se zbavíte nežádoucího záznamu. Pomocný soubor potom můžete smazat.


program ukol25;
uses crt;
type
    zavodnik=record
     jmeno:string[15];
     prijmeni:string[15];
     cas:real;
    end;

var
   bezec:zavodnik;
   f,g:file of zavodnik;
   i,vel:integer;
   odpoved:char;
   zadani:string[15];
   soubor:string;
   trideno:boolean;

procedure inicializace;
 begin
  clrscr;
  write('Zadejte jmeno souboru: '); {vyber souboru}
  readln(soubor);
  assign(f,soubor);
  {$I-}
  reset(f);             {testuje jestli soubor existuje}
  {$I+}
  if ioresult<>0 then rewrite(f); {kdyz ne tak ho vytvori}
  close(f);
 end;

procedure trid;     {tridi metodou BUBLE SORT}
  var a,b,p:zavodnik;
      prohoz:boolean;
  begin
   reset(f);
   vel:=filesize(f);
   close(f);
   repeat
    prohoz:=false;
    for i:=0 to (vel-2) do begin
     reset(f);
     seek(f,i);
     read(f,a);
     read(f,b);
     close(f);
     if a.cas>b.cas then begin
       p:=b;
       b:=a;
       a:=p;
       prohoz:=true;
     end;
     reset(f);
     seek(f,i);
     write(f,a);
     write(f,b);
     close(f);
    end;
   until prohoz=false;
   trideno:=true;
 end;

procedure vypis; {vypis obsahu souboru}
  begin
   clrscr;
   if not trideno then trid; {pokud jeste nebylo trideno tak utridi}
   reset(f);
   for i:=1 to filesize(f) do begin {vypis zaznamu ze souboru}
    read(f,bezec);
    with bezec do begin
     write(cas:8:2);
     write(jmeno:15);
     writeln(prijmeni:15);
    end;
   end;
   close(f);
   repeat until keypressed;
  end;

procedure pridat;  {prida zaznam do souboru}
  begin
   reset(f);
   seek(f,filesize(f));  {nastaveni ukazatele na konec souboru}

   repeat
    clrscr;
    with bezec do begin         {nacteni dat }
      write('Zadejte cas bezce: ');
      readln(cas);
      write('Zadejte jmeno bezce: ');
      readln(jmeno);
      write('Zadejte prijmeni bezce: ');
      readln(prijmeni);
    end;
    write(f,bezec);  {zapis do souboru}
    writeln;
    writeln('Dalsi zaznam? A/N');
   until upcase(readkey)<>'A';

   close(f);
   trideno:=false;
  end;

procedure vyhledat;   {vyhleda podle prijmeni zaznam}
  begin
    clrscr;
    reset(f);
    write('Zadejte prijmeni hledaneho: ');
    readln(zadani);
    writeln;
    writeln('Vysledek hledani: ');

    for i:=1 to filesize(f) do begin
     read(f,bezec);
     if zadani=bezec.prijmeni then
       with bezec do begin
         write(prijmeni:15);
         write(jmeno:15);
         writeln(cas:8:2);
       end;
    end;

    close(f);
    repeat until keypressed;
  end;

procedure odstranit;  {odstrani zaznam ze souboru}
  begin
    clrscr;
    assign(g,'tmp.tmp');        {pomocny soubor}
    write('Zadejte prijmeni: ');
    readln(zadani);
    writeln;
    reset(f);
    rewrite(g);

    for i:=1 to filesize(f) do begin { do pomocneho souboru se prenesou }
     read(f,bezec);                  { vsechny zaznamy, krome toho      }
     if bezec.prijmeni=zadani then   { zadaneho }
      writeln('Bezec ',bezec.prijmeni,' byl odstranen za zaznamu')
     else write(g,bezec);
    end;

    close(f);
    close(g);
    rewrite(f);
    reset(g);

    for i:=1 to filesize(g) do begin
     read(g,bezec);       { zaznamy se prenesou zpet do hlavniho souboru }
     write(f,bezec);
    end;

    close(f);
    close(g);
    erase(g);           { pomocny soubor se vymaze }
    repeat until keypressed;
  end;

begin           {hlavni program - menu}
   inicializace;
   trideno:=false;
   repeat
    clrscr;
    writeln('Soubor: ',soubor);
    writeln('---------------------');
    writeln('Vypsat vysledky ... V');
    writeln('Jiny soubor  ...... J');
    writeln('---------------------');
    writeln('Pridat zaznam ..... P');
    writeln('Hledat zaznam ..... H');
    writeln('Odstranit zaznam .. O');
    writeln('---------------------');
    writeln('Konec ........... Esc');

    odpoved:=upcase(readkey);

    case odpoved of
     'V':vypis;
     'J':inicializace;
     'P':pridat;
     'H':vyhledat;
     'O':odstranit;
    end;
   until odpoved=chr(27);
end.

Zpět na: Lekce 10


předchozí návrat do menu uložit zdrojový kód
Klíčová slova v Pascal