ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA APLIKOVANÝCH VĚD
KATEDRA
INFORMATIKY A VÝPOČETNÍ TECHNIKY
SEMESTRÁLNÍ
PRÁCE Z PŘEDMĚTU
PROGRAMOVÁNÍ DATABÁZE (VLASTNÍ
20.12.2005 FAV – INIB/INF
V JAZYCE
C
KNIH
ZADÁNÍ)
PETR THÜR A04236
[email protected]
1)ZADÁNÍ Databáze knih (vlastní zadání) – vytvořte software pro evidenci knih (každá kniha má v databázi svůj název, příjmení a jméno autora, nakladatelství, žánr a poznámku). Program pracuje s datovým souborem, ze kterého načítá a do něhož ukládá data při startu / ukončení. Umožňuje jednoduchou práci s jednotlivými položkami (přidání nové položky, vymazání položky, vymazání celé databáze), dále nabízí možnost seřadit položky dle libovolného kritéria, fulltextové prohledávání celé databáze či export databáze do HTML souboru. Program je určen pro evidování knih např. V nějakém menším podniku či škole.
2)ANALÝZA PROBLÉMU Úlohu jsem řešil pomocí dynamického obousměrného spojového seznamu, který obsahuje mnou nadefinovanou datové struktury – položky. Každá položka pak obsahuje informaci o názvu knihy, jménu a příjmení autora, nakladatelství, poznámku a odkaz na předchozí a následující položku seznamu. Samozřejmě bylo možné použít nějakou složitější datovou strukturu, ale vzhledem k tomu, že u programu neočekávám práci s nijak obrovským množstvím položek, bylo by to zbytečně komplikované a nepřineslo by to žádný výraznější efekt. Původně jsem plánoval projekt rozdělit do více souborů, ale nakonec jsem usoudil, že takto drobný projekt obsahující celkem 15 funkcí je zbytečné nějak více rozdrobit, a proto jsem jej ponechal v jediném souboru. Taktéž jsem uvažoval o celkovém „počeštění“ programu, ale jelikož to způsobovalo některé problémy, nakonec jsem od tohoto záměru upustil. Pokud není program spuštěn, jsou data uchovávána v datovém souboru. Nabízely se nejrůznější formáty souborů, ale nakonec jsem zvolit obyčejný textový soubor – knihy.dat. Každá informace je zde uložena na jednom řádků, každá položka má tedy vyhrazeno 6 řádků.
3)NÁVRH PROGRAMU Jak již jsem zmínil v analýze problému, program sestává z 15 funkcí, jejichž vzájemné volání znázorňuje tento diagram:
Jak je patrné z obrázku, funkce main() tedy volá postupně funkce nactiDatabazi(), menu() a ulozDatabazi(), z nichž první a poslední jsou použity pouze při startu / ukončení programu. Funkce menu() pak fakticky zajišťuje běh programu jako takového – vždy vypíše textové menu, zvolení konkreétní volby v menu dojde k volání jedné z funkcí vypisDatabazi(), seradPolozky(), vyhledejFulltext(), pridejPolozku(), samzPolozku(), SmazDatabazi(), exportHtml() či info(). Program dále obsahuje funkce prohodPolozky(), hledejRetezec() a pridejPolozkuSeznamu(), které jsou používány pouze jako pomocné funkcemi, jenž jsou volány z menu. V analýze programu jsem také zmínil, že datovou strukturou je dynamický obousměrný spojový seznam, který obsahuje položky typu Polozka, které pak nesou veškeré informace o knize. Názorně datovou strukturu vyjadřuje tento diagram:
4)POPIS PROGRAMU (PROGRAMOVÁ DOKUMENTACE) Program je napsán v jazyce C, který i přes absenci některých důležitých funkcí (objekty, klasický string, boolean, …) je stále velmi oblíben a hojně používán. Rozhodl jsem se použít větší množství menších funkcí v jediné třídě (souboru), což s sebou sice přináší obtížnější ladění, ale lépe se mi s nimi celkově pracuje. Celý program se tedy skládá pouze ze souboru knihy.c (resp. knihy.o, knihy.exe), jenž obsahuje vlastní algoritmus. Dále využívá soubor knihy.dat pro načtení dat po spuštění programu a uložení dat při ukončení programu. Posledním použitým souborem je export.html, do nějž se ukládají data exportovaná do formátu HTML. Program jsem vytvářel a ladil na počítači s konfigurací Pentium Celeron 1.7 Ghz, 1 GB RAM, Windows XP SP2.00 ve vývojovém prostředí DevC++ s kompilátorem Gcc. Nakonec jsem program odladil i v doporučovaném prostředí Open Watcom C/C++. POPIS FUNKCÍ MODULU KNIHY.C: – int main() - hlavní funkce, jenž volá funkce pro uložení / načtení dat a menu() – void nactiDatabazi() - slouží pouze k načtení dat z datového souboru knihy.dat do spojového seznamu po spuštění programu – void ulozDatabazi() - slouží pouze k uložení dat ze spojového seznamu do datového souboru knihy.dat před ukončením programu – int menu() - funkce, která zobrazuje jednoduché textové menu a zajišťuje volání jednotlivých funkcí na základě volby uživatele – void prohodPolozky(Polozka *p, Polozka *k) - pomocná funkce pro funkci seradPolozky(), slouží k záměně všech dat mezi 2 položkami – int hledejRetezec(char *retezec, char *retezec2) - pomocná funkce pro funkci vyhledejFulltext(), snaží se vyhledat řetězec (*retezec2) v jiném řetězci (*retezec) – void pridejPolozkuSeznamu(Polozka *p0, char *nazev, char *prijmeni, char *jmeno, char *nakladatelstvi, char *zanr, char *poznamka) - pomocná funkce pro funkce nactiDatabazi() a pridejPolozku(), zajišťuje vložení kompletní položky do seznamu – void vypisDatabazi() - provede kompletní výpis databáze na obrazovku, funkce je volána stisknutím 1 z hlavního menu – void seradPolozky() - seřadí položky seznamu sestupně / vzestupně dle zvoleného sloupce, funkce je volána stisknutím 2 z hlavního menu – void vyhledejFulltext() - vypíše všechny položky, jenž obsahují hledaný výraz, funkce je volána stisknutím 3 z hlavního menu
–
–
– –
–
void pridejPolozku() - přidá novou položku do spojového seznamu, funkce je volána stisknutím 4 z hlavního menu int smazPolozku() - smaže položku ze spojového seznamu, funkce je volána stisknutím 5 z hlavního menu int smazDatabazi() - smaže celou databázi, funkce je volána stisknutím 6 z hlavního menu void exportHtml() - vyexportuje celou databázi v aktuálním pořadí ve formátu HTML do souboru export.html, funkce je volána stisknutím 7 z hlavního menu int info() - vypíše na obrazovku informace o programu, funkce je volána stisknutím 8 z hlavního menu
5)POPIS OBSLUHY PROGRAMU (UŽIVATELSKÁ DOKUM.) Program se spouští souborem knihy.exe, po spuštění dojde k načtení dat ze souboru knihy.dat a zobrazí se hlavní menu. Snažil jsem se program vytvořit tak, aby jeho ovládání bylo jednoduché a intuitivní i přesto, že jsem do programu nezahrnul žádné „okýnkové“ rozhraní. Celé menu je tedy textové, struktura hlavního menu vypadá takto: 1 – kompletní výpis databáze 2 – seřazení databáze knih dle zvoleného kritéria 3 – fulltextové vyhledávání v databázi 4 – přidání nové položky do databáze 5 – smazání nějaké položky databáze 6 – smazání celé databáze 7 – export databáze do formátu HTML 8 – informace o programu 9 – konec programu V průběhu celého programu se jakákoliv volba provádí stisknutím (resp. Stisknutím + potvrzením) příslušné alfanumerické klávesy. Veškeré vstupy jsou náležitě ošetřeny. Činnost jednotlivých položek je zjevná z menu, po dokončení dané funkce dojde vždy k návratu do menu, pouze v případě některých chyb při běhu programu dojde k vypsání chybové hlášky a následnému ukončení programu. Po zvolení položky „9 – konec programu“ se program ihned neukončí, nejprve dojde k zapsání změn do datového souboru knihy.dat až poté k samotnému ukončení programu.
NĚKOLIK UKÁZEK (SCREENSHOTŮ) PROGRAMU:
6)ROZBOR VÝSLEDKŮ, ZHODNOCENÍ PRÁCE Konečným produktem mé práce je program, který by měl splňovat všechna kritéria zadání. Jako každý software má jistě své nedostatky, ale jde spíše o nepodstatné detaily. S přenositelností programu by neměly být žádné problémy, snažil jsem se psát celý kód v ANSI C. Program jsem tvořil s ohledem na jednoduchost a intuitivnost ovládání, neobsahuje tedy žádná rozsáhlá ani složitá menu, uživatel je programem sám naváděn tam, kam je potřeba. Datové struktury jsou voleny s ohledem na to, že nejde o nijak rozsáhlý projekt, tak, aby umožnily dostatečně rychlý běh aplikace a zároveň zbytečně nejsou nijak těžkopádné. Některé části určitě mohly být napsány efektivněji (např. řazení databáze, kde je použit BubbleSort, ačkoliv existují i řazení s lepší časovou složitostí, atd.), ale pro tento projekt je mé řešení zcela dostačující. V programu nejsou použity žádné složité algoritmy, ale velmi dobře jsem si procvičil programování v jazyce C. Za velkou nevýhodu programu považuji možnost práce pouze v textovém režimu se vstupy z klávesnice, grafické menu a ovládání pomocí myši by uživatelům dokázalo práci jistě zpříjemnit, nebylo to však v mých silách.
7)ZÁVĚR Zadání bylo splněno ve všech směrech, ale program skýtá obrovské množství možností na vylepšení. Obávám se však, že k jeho dalšímu vylepšování nikdy nedojde, protože programovací jazyk C se mi nejeví jako moc ideální pro řešení tohoto problému. Z mého pohledu by bylo možné snadněji naprogramovat mnohem lepší aplikaci např. v Javě, popřípadě ještě lépe její webovou podobu v PHP s využitím databáze MySQL pro ukládání dat, nemluvě o mnohem větší uživatelské přívětivosti, kterou nabízí webové rozhraní oproti textovému režimu mého programu napsaného v ANSI C. OBSAH SLOŽKY (ARCHIVU) THPEA04236: – knihy.c – knihy.exe
–
knihy.dat export.html
–
dokumentace.pdf (tento soubor)
–