Databáze osob
Pomocí makefile vytvořte spustitelný soubor "tzd". Jaké koliv operace v databázi se uskutečňují přes parametry.
tzd -f dbfile parametr
kde dbfile je název datového souboru, kde se budou ukládat data a parametr může být následující
| Parametr | Význam | Popis požadované akce programu |
| -l | listing | sekvenční výpis |
| -x název-položky | index | výpis dle hodnoty název-položky uvedené za parametrem |
| -i "jmeno;dat_nar;pohl;vek;plat" | insert | vložení záznamu s hodnotami položek v uvedeném pořadí |
| -s název-položky hodnota | search | vyhledání a výpis všech záznamů splňujících podmínku |
| -e název-položky hodnota stará nová | edit | modifikace všech položek s hodnotou stará na hodnotu nová |
| -d název-položky hodnota | delete | zrušení všech záznamů obsahujících položku s uvedenou hodnotou |
V případě neuvedení parametru -f a datového souboru, se bude pracovat se souborem, který byl naposledy použit.
Zde uvádím pár příkladů jak dané parametry použít.
| tzd -f data -l | sekvenční výpis všech položek v databázi |
| tzd -f data -x jmeno | indexový výpis podle indexového souboru jmen |
| tzd -f data -i "Marek;1950-12-01;0;50;4500.20" | vložení dané položky do databáze |
| tzd -f data -s jmeno Marek | najde a vypíše všechny položky kde jméno obsahuje řetězec Marek |
| tzd -f data -e jmeno Marek Milan | modifikuje všechny hodnoty Marek na hodnotu Milan |
| tzd -f data -d vek 20 | smaže všechny položky kde věk je roven 20 |
Zadání:
Vytvořte program v jazyce ANSI C, který bude umožňovat nad souborem dat v daném formátu provádět základní databázové operace. K definované tabulce budou vytvořeny indexové soubory, které budou zajišťovat přístup k záznamům přes zvolený index. Indexové soubory budou uloženy na disku (názvy těchto souborů budou ve tvaru název-položky.ind) a jejich aktualizace bude probíhat automaticky při změně dat v tabulce.
Struktura tabulky
Tabulka bude obsahovat 5 atributů. Atributy mají následující označení a délku
| Atribut | Typ atributu | Poznamka |
| jmeno | text(20) | Text v definovaném rozsahu |
| dat_nar | datum | Datumová položka, tvar 'yyyy-mm-dd' |
| pohl | boolean | 0/1 |
| vek | integer | Celočíselný typ |
| plat | real (8.2) | Číselný typ s desetinnou čárkou, dvě desetinná místa |
Program bude dále ovládán z příkazového řádku s odpovídajícím parametrem.
| Parametr | Význam | Popis požadované akce programu |
| -l | listing | sekvenční výpis |
| -x název-položky | index | výpis dle hodnoty název-položky uvedené za parametrem |
| -i jmeno;dat_nar;pohl;vek;plat | insert | vložení záznamu s hodnotami položek v uvedeném pořadí |
| -s název-položky hodnota | search | vyhledání a výpis všech záznamů splňujících podmínku |
| -e název-položky hodnota stará nová | edit | modifikace všech položek s hodnotou stará na hodnotu nová |
| -d název-položky hodnota | delete | zrušení všech záznamů obsahujících položku s uvedenou hodnotou |
Stručný popis algoritmu
Program nejdříve otestuje paramtery na příkazové řádce a na základě těchto parametrů pak provádí jednotlivé akce.
Při neuvedení parametru se vypíše chybová hláška.
Parametr "-l" je provedena funkce List(soubor), která načte a vypíše postupně všechny položky v souboru dat, které jsou v dané struktuře.
Parametr "-x položka" podle zvolené položky vypíše přes daný indexový soubor všechny hodnoty položky. Funkce listx(soubor,polozka).
Parametr "-i jmeno;dat_nar;pohl;vek;plat" funkceiInsert(soubor,polozka) najde označené neplatné položky a přepíšeje. Pokud takové nejsou, zapíše danou položku na konec.
Parametr "-s položka hodnota" funkce search(soubor,polozka,co) dle dané položky nalezne danou hodnotu obsahuje-li ji.
Paramter "-e položka stará nová" funkce modify(soubor,polozka,stara,nova) najde entitu dle staré hodnoty položky a změní ji na novou.
Parametr "-d položka hodnota" funkce delete_p(soubor,polozka,co) najde-li danou entitu, označí ji za neplatnou.
Během jednotlivých akcí se modifikují indexové soubory.
Popis jednotlivých funkcí
| Název funkce | Popis |
| void insert(char *soubor,char *polozka); | vložení nového záznamu |
| void list(char *soubor); | výpis položek |
| void search(char *soubor,char *polozka,char *co); | hledání položky |
| void vypis(char *Radek); | výpis jedné položky |
| void listx(char *soubor,char *polozka); | výpis dle indexových souborů |
| void modify(char *soubor,char *polozka,char *stara,char *nova); | editace položky |
| void delete_p(char *soubor,char *polozka,char *co); | vymazání položky |
| void insertx1(char *soub); | vytvoření indexového souboru |
| void insertx2(char *soub); | vytvoření indexového souboru |
| void insertx3(char *soub); | vytvoření indexového souboru |
| void insertx4(char *soub); | vytvoření indexového souboru |
| void insertx5(char *soub); | vytvoření indexového souboru |
| int trid( const void *a, const void *b); | setřídění |
| int main(int argc,char **argv) | hlavní program |
| void help(void); | výpis nápovědy |
| void chyba(int cislo); | oznameni chyb |
| void uloz_soubor(char *soubor); | uložení jména datového souboru nad kterým se pracuje |
| char *nacti_soubor(void); | načtení jména souboru nad kterým se bude pracovat |