{ Toto je ukazkovy program pro praci s typovymi soubory. Napiste vlastni program: . vytvorte vlastni datovy typ (napriklad pro ulozeni informaci o jednom aute, zvireti, rostline, kusu nabytku, pocitaci, zbozi na sklade, knize, ... . z klavesnice nacitejte promenne tohoto datoveho typu, postupne je ukladejte do typoveho souboru vami vytvoreneho datoveho typu . soubor uzavrete a znovu otevrete . v cyklu (repeat): * zeptejte se, ktery zaznam chce uzivatel vypsat (cislo zaznamu) * pokud je zadano cislo 0, konec cyklu * jinak se presunte na zadany zaznam (pozor - prvni zaznam ma cislo 0) * nactete zaznam do promenne a vypiste ho na obrazovku. } program osoby; uses crt; type TOsoba = record jmeno, prijmeni: string[10]; os_cislo: word; kancelar: word; pocet_aut: byte; end; var o: TOsoba; f: file of TOsoba; pom: word; procedure Done; { Uklidime obrazovku. } begin window(1,1,80,25); textbackground(black); textcolor(lightgray); clrscr; end; procedure Init; { V teto procedure muzeme vhodne upravit obrazovku (nemusime si s tim hrat), ale predevsim otevreme soubor pro zapis a pokud to nepujde, vypiseme chybove hlaseni a ukoncime program. } var s: string; begin textbackground(blue); textcolor(yellow); clrscr; writeln; write(' Zadejte nazev souboru pro ulozeni tabulky osob: '); readln(s); assign(f,s); {$I-} rewrite(f); {$I+} if IOResult <> 0 then begin writeln; write(' Soubor '+s+' se nepodarilo otevrit.'); readln; Done; halt; end; end; function NactiOsobu(var os: TOsoba): boolean; { Z klavesnice nacteme udaje o jedne osobe, predtim smazeme obrazovku. Jestlize je jako jmeno nebo prijmeni zadan prazdny retezec, funkce vrati hodnotu FALSE, jinak TRUE. } begin clrscr; writeln; with os do begin write(' Jmeno: '); readln(jmeno); write(' Prijmeni: '); readln(prijmeni); if (jmeno = '') or (prijmeni = '') then begin NactiOsobu := FALSE; exit; end; write(' Osobni cislo: '); readln(os_cislo); write(' Cislo kancelare: '); readln(kancelar); write(' Pocet sluzebnich aut: '); readln(pocet_aut); end; NactiOsobu := TRUE; end; procedure VypisHlavicku; { Smazeme obrazovku a vypiseme hlavicku tabulky. } begin clrscr; writeln('Jmeno Prijmeni Osobni cislo Kancelar PocetAut'); writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'); end; procedure VypisOsobu(os: TOsoba); { Na jeden radek (tabulky) vypiseme udaje o zadane osobe, pouzijeme writeln. } begin with os do writeln(jmeno:10, ' ', prijmeni:10, ' ', os_cislo:5, ' ', kancelar:5, ' ', pocet_aut:7); end; begin { hlavni program } Init; { V cyklu nacitame jednotlive osoby a hned je ukladame do otevreneho souboru. Pouzivame pri tom funkci NactiOsobu. Nacitame tak dlouho, dokud funkce vraci hodnotu TRUE, tedy pokud vrati FALSE, koncime nacitani. } while NactiOsobu(o) do begin write(f,o); writeln; write('Pozice v souboru (=pocet zapsanych zaznamu): ', FilePos(f)); readln; end; close(f); reset(f); VypisHlavicku; { V cyklu nacitame do promenne o jednotlive osoby ze souboru, vypisujeme je pomoci procedury VypisOsobu na obrazovku. } while not eof(f) do begin read(f,o); VypisOsobu(o); end; { Pod tabulku napiseme, jak je soubor velky, a to * kolik ma polozek, * kolik ma Bytu. } writeln; pom := FileSize(f); writeln(' Pocet polozek souboru: ', pom); write (' Velikost souboru: ', pom * sizeof(TOsoba), ' Bytu'); close(f); readln; Done; end.