uživatelská příručka

programátorská příručka

zdrojový kód

spustitelná verze

Projekt do předmětu: Teorie zpracování dat

Název projektu: Tabulka zaměstnanců

Autor: Martin Kot

Studijní číslo: L97041

Uživatelská příručka

Program slouží jako jednoduchá tabulka zaměstnanců. Záznam každého zaměstnance obsahuje identifikační číslo (jednoznačné v rámci celé tabulky), jméno zaměstnance, datum narození, měsíční mzdu a údaj o dětech. Podrobnější popis:

ID – přirozené číslo v rozmezí 0 – 9999. Každý zaměstnanec musí mít jiné.

JMÉNO – jméno a příjmení zaměstnance, maximálně však 40 znaků.

DĚTI – údaj, zda má zaměstnanec děti nebo ne.

NAROZENÍ – datum narození zaměstnance. Rok je omezen na rozmezí 1800 – 4094.

PLAT – měsíční mzda zaměstnance v rozsahu 0 – 999999. Plat je zobrazován na dvě desetinná místa.

Po spuštění programu je zobrazeno menu. Zde lze pomocí kláves nebo jejich kombinací provádět tyto operace:

<ALT + I> - přidat záznam – Postupně je nutno zadat všechny atributy nového záznamu. Tento záznam je následně automaticky uložen do tabulky.

<ALT + E> - editace záznamu – Nejprve je nutno zadat ID zaměstnance, jehož záznam má být změněn. Poté je zobrazena nabídka atributů. Po vybrání jednoho z nich je nutné zadat jeho novou hodnotu. Toto lze provést jen s několika nebo i se všemi atributy. Následně po stisku <K> jsou změny provedeny a výsledek je oznámen hláškou.

<DELETE> - zrušit záznam - Nejprve je nutno zadat ID zaměstnance, jehož záznam má být zrušen. Pokud takový záznam existuje, je automaticky smazán. Výsledek je oznámen hláškou.

<ALT + S> - sekvenční výpis – Je zobrazeno prvních maximálně 20 řádků tabulky. Je-li v tabulce řádků více lze zobrazit dalších dvacet po stisku <ENTER> Jsou-li již všechny řádky zobrazeny, je po stisku <ENTER> zobrazeno opět menu. Záznamy jsou zobrazovány v pořadí, ve kterém byly do tabulky vloženy.

<ALT + D> - výpis setříděný podle identifikačních čísel - Je zobrazeno prvních maximálně 20 řádků tabulky. Je-li v tabulce řádků více lze zobrazit dalších dvacet po stisku <ENTER>. Jsou-li již všechny řádky zobrazeny, je po stisku <ENTER> zobrazeno opět menu. Záznamy jsou zobrazeny setříděné podle identifikačních čísel zaměstnanců.

<ALT + V> - vyhledat záznam – Nejprve je nutno vybrat jeden atribut. Potom je zadána jeho hodnota. Následně jsou zobrazeny všechny záznamy, které mají zadanou hodnotu v daném atributu.

<ALT + N> - nápověda – Je zobrazena základní nápověda k používání programu.

<ALT + K> - konec – Ukončení programu.

 

Programátorská příručka

Stručný popis použitých funkcí

int nacteniId() – funkce sloužící k načítání id od uživatele. Je zobrazena žádost o zadání, poté načten vstup z klávesnice a pokud vyhovuje určeným podmínkám na id a jde o přirozené číslo, je hodnota tohoto čísla návratovou hodnotou. V opačném případě je zobrazena chybová hláška a návratová hodnota –1.

float nacteniPlatu() – funkce sloužící k načítání platu. Je zobrazena žádost o zadání, poté načten vstup z klávesnice a pokud vyhovuje určeným podmínkám na plat a jde o realné číslo, je hodnota tohoto čísla návratovou hodnotou. V opačném případě je zobrazena chybová hláška a návratová hodnota –1.

void nacteniJmena(char *ret,int znaku) – funkce sloužící k načítání jména. Je zobrazena žádost o zadání, poté načten vstup z klávesnice. Z tohoto vstupu je do pole, které je parametrem funkce, zkopírováno tolik znaků, kolik udává druhý parametr.

int nacteniDeti() – funkce sloužící k načítání atributu děti. Je zobrazena nabídka. Poté je umožněn jen stisk určených kláves a na jejich základě určena návratová hodnota.

int kontrolaDatumu(unsigned int d, unsigned int m, unsigned int r) – funkce sloužící ke kontrole, zda je dané datum správně zadáno. Je kontrolován rozsah dne(s přihlédnutím k přestupnému roku), měsíce i roku.

int nacteniDatumu(date *nove) – funkce sloužící k načítání atributu datum narození. Je zobrazena žádost o zadání, poté načten vstup z klávesnice. V tomto vstupu jsou nahrazeny tečky mezerou , pro snadnější načtení. Poté je proveden pokus o načtení všech tří složek datumu. Následně jsou tyto položky zkontrolovány funkcí kontrolaDatumu. Je-li datum správné, je návratová hodnota TRUE. V případě chyby je zobrazena chybová hláška a návratová hodnota FALSE.

int kontrolaId(char *index_soubor, int id) – funkce, která prohledá indexový soubor a pokud je v něm dané id uloženo vrací hodnotu FALSE, jinak hodnotu TRUE.

zaznam nacistPolozku(char *index_soubor) – funkce sloužící k postupnému načtení všech atributů záznamu pomocí dříve popsaných funkcí. Tento záznam je také návratovou hodnotou.

void aktualizaceIndexSoub(char *nazev,index polozka) – tato funkce přidá do indexového souboru další dvojici id-adresa (struktura index). Postupně jsou všechny záznamy indexového souboru kopírovány do pomocného. Je-li id přidávaného záznamu menší , než právě kopírovaná struktura, je uložen nový záznam a následně jsou ostatní struktury kopírovány bez kontrol. Není-li nový záznam uložen ani po zkopírování celého souboru, je uložen na konec. Po ukončení kopírování je starý soubor smazán a pomocný přejmenován na jeho název.

void novyZaznam(char *jmeno_souboru,char *indexovy_soubor) – funkce nacte pomoci nacistPoloyku nový záznam, uloží ho do souboru a funkcí aktualizaceIndexSoub upraví i indexový soubor.

void tiskPolozky(zaznam vytisknout) – funkce zobrazí daný řádek tabulky

int sekvVypis(char *jmeno_souboru) – funkce zobrazí sekvenčně řádky tabulky. Postupně je načítán soubor a řádky zobrazovány. Je-li řádků více než určená hodnota je zobrazeno ovládání a s dalším výpisem se čeká na stisk <ENTER>. Je-li čtení již na konci souboru, je stiskem <ENTER> ukončena funkce.

int vyberAtributu() – funkce slouží k výběru jednoho z atributů uživatelem. Je zobrazena nabídka atributů a podle stisknuté klávesy vrácena hodnota přiřazená danému atributu.

int vyhledavaniId(char *jmeno_souboru,char *index_soubor,int id) – funkce slouží k vyhledání záznamu s daným ID. K vyhledávání je použit algoritmus binárního vyhledávání. Nejprve je za prohledávanou oblast zvolen celý soubor. Hledané ID porovnáme s ID indexové položky načtené z poloviny prohledávané oblasti. Je-li shodné, je načten příslušný řádek sekvenčního souboru a zobrazen. Nejsou-li ID shodná je podle nerovnosti zmenšena prohledávaná oblast na jednu ze dvou polovin. Opět je načten index ze středu nové oblasti a porovnáván. Toto probíhá, dokud není nalezeno hledané ID a dokud není délka prohledávané oblasti nulová. Není-li položka nalezena, je zobrazena chybová hláška.

zaznam nacteniZmen(int *atributy, char *index_soubor) – dokud není funkce ukončena, jsou uživatelem vybírány atributy a zadávány jejich hodnoty. Parametr atributy je pole, do kterého je ukládaná hodnota TRUE na pozici změněných atributů. Návratovou hodnotou je záznam (řádek tabulky), ve kterém jsou hodnoty měněných atributů.

int editace(char *jmeno_souboru,char *index_soubor) – funkce nejprve načte ID měněného záznamu. Pak jsou funkcí načtení změn načteny nové hodnoty atributů. Následně je v indexovém souboru nalezena položka s odpovídajícím ID. Pokud existuje, je podle hodnoty adresy načtena položka ze sekvenčního souboru, změněna a znovu uložena. Pokud bylo změněno ID, je překopírován indexový soubor tak, že je vypuštěna původní položka a na správné místo přidána nová položka.

int vyhledavaniJmeno(char *jmeno_souboru, char *jmeno) funkce slouží k vzhledání záznamu s daným jménem. Je procházen sekvenční soubor a shoduje-li se načtené jméno s hledaným je položka zobrazena a hledání pokračuje dokud není zaplněna celá obrazovka nebo není konec souboru. Pokračování je stejné jako u sekvenčního výpisu (jen položky jsou vybírány).Není-li položka nalezena, je zobrazena chybová hláška.

int porovnaniDatumu(date dat1,date dat2) – funkce porovnává dva datumy a vrací hodnotu 0, jsou-li stejné. V ostatních případech je návratová hodnota nenulová.

int vyhledavaniDatum(char *jmeno_souboru, date hledane) – funkce slouží k vzhledání záznamu s daným datumem. Je procházen sekvenční soubor a shoduje-li se načtené datum s hledaným je položka zobrazena a hledání pokračuje dokud není zaplněna celá obrazovka nebo není konec souboru. Pokračování je stejné jako u sekvenčního výpisu (jen položky jsou vybírány). Není-li položka nalezena, je zobrazena chybová hláška.

int vyhledavaniPlat(char *jmeno_souboru, float hledany) – funkce slouží k vzhledání záznamu s daným platem. Je procházen sekvenční soubor a shoduje-li se načtený plat s hledaným je položka zobrazena a hledání pokračuje dokud není zaplněna celá obrazovka nebo není konec souboru. Pokračování je stejné jako u sekvenčního výpisu (jen položky jsou vybírány). Není-li položka nalezena, je zobrazena chybová hláška.

int vyhledavaniDeti(char *jmeno_souboru, int deti) – funkce slouží k vzhledání záznamu s danou hodnotou argumentu děti. Je procházen sekvenční soubor a shoduje-li načtená hodnota s hledanou je položka zobrazena a hledání pokračuje dokud není zaplněna celá obrazovka nebo není konec souboru. Pokračování je stejné jako u sekvenčního výpisu (jen položky jsou vybírány). Není-li položka nalezena, je zobrazena chybová hláška.

void vyhledavani(char *jmeno_souboru, char *index_soubor) – funkce načte atribut, podle kterého má být výběr proveden a následně volá příslušnou funkci na vyhledávání.

int indexVypis(char *jmeno_souboru, char *index_soubor) – funkce zobrazí sekvenčně řádky tabulky. Postupně je načítán indexový soubor a podle adresy je načten řádek ze sekvenčního souboru a zobrazen. Je-li řádků více než určená hodnota je zobrazeno ovládání a s dalším výpisem se čeká na stisk <ENTER>. Je-li čtení již na konci indexového souboru, je stiskem <ENTER> ukončena funkce.

int napoveda() – funkce zobrazí stručnou nápovědu k programu (ovládání a popis atributů)

void menu(char *jmeno_souboru,char *indexovy_soubor) – funkce, která je spuštěna ihned po spuštění programu. Je zobrazena nabídka a podle stisknuté kombinace kláves je spuštěna příslušná funkce.