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 |