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