STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE TŘÍDNÍ KNIHA ROZVRH A ABSENCE JAN PŘÍVARA ZÁVĚREČNÁ MATURITNÍ PRÁCE BRNO 2011
Prohlašuji, že jsem maturitní pr{ci vypracoval samostatně a použil jsem přitom pouze uvedené prameny a literatury. V Brně dne 1. 4. 2011 Jan Přívara ii
Obsah Obsah... 1 Předmluva... 2 Anotace... 2 1 Koncepce... 3 2 Analýza problému a princip jeho řešení... 3 2.1 Princip řešení... 3 2.1.1 Struktura databáze... 3 2.1.2 Programový kód... 3 2.3 Možná omezení... 4 3 Návrh a popis vlastního řešení... 4 3.1 Návrh databáze... 4 3.2 Návrh a tvorba webové části... 6 3.2.1 Design a rozvržení aplikace... 6 3.2.2 Rozlišení uživatelů aplikace... 6 3.2.3 Zdrojový kód... 7 3.3 Popis vybraných částí programového kódu... 8 3.4 Testování... 9 3.4.1 Průběžné testování... 9 3.4.2 Závěrečné testování... 9 4 Závěr... 10 5 Seznam zdrojů a použité literatury... 10 6 Seznam ilustrací... 10 7 Seznam příloh... 10 1
Předmluva V dnešní moderní době je digitalizace velmi často používané slovo. Toto téma se týk{ takřka všech možných odvětví, školství nevyjímaje. Na většině moderních škol je studentský průkaz, do kterého byly studentovi v průběhu jeho studia zapisov{ny zn{mky, již minulostí. Dnes mají studenti přehled svých dosažených výsledků na internetu. Dalším krokem může být třeba zavedení elektronické třídní knihy. Výhody elektronické podoby jsou nepopiratelné. Pokud je informační systém kvalitní, může oproti papírové verzi nabídnout větší komfort a bezpečnost. Tato pr{ce se zabýv{ tím, jak by takov{ elektronick{ třídní kniha mohla vypadat. Anotace Aplikace m{ umožnit vést evidenci o doch{zce a absenci studentů. Aplikace bude pracovat s datab{zí, ve které budou uloženy informace o rozvrhu třídy, studentech ve třídě a jejich doch{zce. Bude vytvořeno několik skupin uživatelů s odlišnými možnostmi pr{ce s aplikací, souč{stí bude autentizace a autorizace. 2
1 Koncepce Snahou je tedy vytvořit systém, který by umožňoval učitelům jednoduše a pohodlně zad{vat studentům absenci. Nejlepším řešením je pravděpodobně internetov{ aplikace spolupracující s datab{zí, ve které by byly uloženy všechny potřebné informace. Po přihl{šení by učitel mohl studentům, které m{ podle rozvrhu v danou hodinu učit, zad{vat absence. 2 Analýza problému a princip jeho řešení 2.1 Princip řešení 2.1.1 Struktura datab{ze Navržen{ datab{ze by měla být co možn{ nejefektivnější. To mimo jiné znamen{ vhodné použití dědičnosti mezi jednotlivými tabulkami a navržení datab{ze takovým způsobem, aby stejn{ data nebyla uložena v datab{zi vícekr{t. Dědičnost také zlepšuje přehlednost celkové struktury datab{ze. Rozvrh tříd a jejich specializací bylo možné vyřešit dvěma způsoby. Prvním způsobem je do datab{ze ukl{dat všechny kombinace jednotlivých podtříd dané třídy. Každý student by potom měl přiřazenu jednu takovou kombinaci, čímž by byl určen jeho kompletní rozvrh. Tento způsob je jednodušší na realizaci, ale není příliš kvalitní. Druhou variantou je uložit do datab{ze pouze rozvrh kmenové třídy a jednotlivých podtříd, přičemž celkový rozvrh by se sestavoval pomyslným složením těchto rozvrhů. Je použito spojovací tabulky, kter{ určuje ve kterých tříd{ch je student přiřazen. Tento způsob je daleko výhodnější z hlediska kvality n{vrhu i paměťové n{ročnosti na datab{zi, ale jeho realizace je složitější. Vyvst{v{ zde také větší nebezpečí kolize. 2.1.2 Programový kód Programový kód by měl být členěn tak, aby poskytoval program{torovi v pozdějších f{zích vývoje určitý komfort. K tomu jsou vhodné programové třídy, jejichž použív{ní velmi usnadňuje pr{ci. Programové třídy zapouzdřují metody a vlastnosti týkajících určitého problému. Zvl{ště efektivní je toto řešení v případech, kdy využív{me třídu na více místech a opakovaně. 3
V této aplikaci je vhodné do programové třídy umístit funkce, které pracují s datab{zí a datab{zovými objekty. Příkladem takové funkce může být funkce, kter{ vytv{ří v datab{zi novou osobu podle zadaných parametrů, jakými jsou jméno, příjmení, email atd. Použitím tříd také minimalizujeme výskyt možných chyb, protože všechen kód, který souvisí s prací v datab{zi, je umístěn na jednom místě. 2.3 Možn{ omezení Aplikace musí průběžně kontrolovat, zda by uživatelem zadanými hodnotami nevznikla ve vnitřní struktuře systému tzv. kolize. Jedn{ se o logické chyby, jako například přiřazení stejné emailové adresy dvěma různým uživatelům. Tato problematika se týk{ především rozvrhu hodin. Je nutné předejít tomu, aby student nebo učitel měl v jednu vyučovací hodinu podle rozvrhu přiřazen více vyučovacích hodin. Rozvrh hodin podtříd se nesmí překrývat s rozvrhem jejich kmenové třídy. Rozvrhy hodin jednotlivých podtříd se překrývat mohou (typickým příkladem jsou specializace), ale nesmí existovat student, který by byl členem dvou takových tříd. 3 N{vrh a popis vlastního řešení 3.1 N{vrh datab{ze Podle zadaných požadavků byla navrhnuta n{sledující struktura datab{ze: 4
Ilustrace 1: Struktura databáze Celkový rozvrh uživatele je získ{n složením jednotlivých rozvrhů podtříd a kmenové třídy. Výhody a nevýhody tohoto způsobu řešení byly pops{ny v kapitole 2.1.1. 5
V této aplikaci byla dědičnost použita pouze ve vztahu osoba-student a osoba-učitel. Student i učitel jsou totiž osoby, a měly by tedy mít společné z{kladní vlastnosti, jako je např. jméno a telefon. Jedinou tabulkou, kter{ nem{ ž{dné propojení se zbytkem datab{ze, je tabulka zvoneni. Tato tabulka obsahuje čas zač{tku a konce zvonění pro všechny hodiny v týdnu. 3.2 N{vrh a tvorba webové č{sti 3.2.1 Design a rozvržení aplikace Grafick{ podoba aplikace byla již od poč{tku pl{nov{na tak, aby byla co nejjednodušší a bez nadbytečných prvků. Rozhodl jsem se pro rozvržení do tří sloupců, přičemž každý sloupec je určen pro jinou funkci. Levý sloupec zobrazuje volby, které jsou přístupné pro všechny uživatele aplikace, bez ohledu na to, zda jsou přihl{šeni či nikoliv. Prostřední sloupec zobrazuje obsah podle požadavků uživatele, například výpis svého vlastního rozvrhu. Pravý sloupec zobrazuje možnosti, které jsou dostupné pro pr{vě přihl{šeného uživatele. Pokud není uživatel přihl{šen, je zobrazen pouze formul{ř pro přihl{šení. Ilustrace 2: Design a grafické rozvržení aplikace 3.2.2 Rozlišení uživatelů aplikace 3.2.2.1 Nepřihl{šený uživatel Nepřihl{šený uživatel m{ pouze možnost zobrazit si seznam tříd a jejich rozvrh hodin. 3.2.2.2 Uživatel Administr{tor Administr{tor je nejvýše postaveným uživatelem aplikace. M{ na starosti spr{vu všech uživatelů a tříd. 6
Administr{tor může vykon{vat tyto činnosti: Přid{vat, editovat a odstraňovat učitele, studenty a třídy Zařazovat studenty do tříd Editovat předměty a rozvrhy jednotlivých tříd 3.2.2.3 Uživatel Učitel Učitel m{ v aplikaci úlohu zad{v{ní absence studentům. Absenci ale může zadat jen studentům třídy, které učí, a to navíc jen v době, ve které m{ mít podle rozvrhu hodinu. Pokud je učitel třídním učitelem, může zobrazit a omlouvat absenci studentům jeho třídy. M{ také možnost zobrazit si vlastní rozvrh hodin v týdnu. Učitel může vykon{vat tyto činnosti: Zobrazit absence studentů jeho třídy podle zadaných kritérií (časový interval, omluveno/neomluveno) Omlouvat absence studentům jeho třídy Zad{vat absence studentům třídy, kterou m{ podle rozvrhu v danou dobu učit Zobrazit si vlastní rozvrh hodin v týdnu 3.2.2.4 Uživatel Student Student nem{ možnost jakkoliv zasahovat do datab{ze. Disponuje pouze možností zobrazit si své vlastní absence a svůj rozvrh hodin. Student může vykon{vat tyto činnosti: Zobrazit si vlastní absence podle zadaných kritérii (časový interval, omluveno/neomluveno) Zobrazit si vlastní rozvrh hodin v týdnu 3.2.3 Zdrojový kód Zdrojový kód aplikace je členěn do několika souborů. Pro vytvoření potřebných tabulek v datab{zi slouží soubor src/create_tables.php. Po jeho spuštění jsou vyps{ny informace, zda byly tabulky úspěšně vytvořeny. Pro funkčnost tohoto souboru je nutné zadat do souboru src/files/config.php platné přihlašovací údaje k datab{zi. O pr{ci s datab{zí a o data třídní knihy se star{ přev{žně programov{ třída Engine, kter{ je umístěna v souboru src/files/engine.php. V této třídě jsou metody (funkce třídy) pro spr{vu všech objektů aplikace. Při vytvoření instance této třídy dojde také k automatickému připojení do datab{ze, je ale nutné uvést přihlašovací údaje k datab{zi v souboru src/config.php. Tato třída, potažmo její metody jsou poté vol{ny podle požadavků uživatele. Soubor src/index.php je spuštěn na zač{tku aplikace. Představuje šablonu, ve které jsou spojeny jednotlivé soubory. Na zač{tku tohoto souboru je vytvořena instance třídy Engine. D{le jsou vloženy soubory, které zobrazují odlišné č{sti str{nky podle zadaných požadavků. Jedn{ se o soubory src/files/body.php a src/files/right.php. 7
Zobrazovaný obsah je určen pomocí odkazů, které vkl{dají do URL adresy proměnné. Soubory, které se starají o funkcionalitu jednotlivých uživatelů, jsou uloženy v adres{ři src/files/x, kde X představuje n{zev uživatele (admin/student/teacher). Soubory, které mohou být využív{ny více typy uživatelů, jsou umístěny v adres{ři src/files. Při vkl{d{ní těchto souborů je kontrolov{no, zda m{ uživatel potřebné opr{vnění. 3.3 Popis vybraných č{stí programového kódu 01: // pri uspesnem prihlaseni vraci id osoby, v pripade neuspechu 0 02: public function prihlasituzivatele($nickname, $password) 03: { 04: // prihlaseny uzivatel se nemuze znovu prihlasit 05: if (isset($_session['prihlasen']) AND $_SESSION['prihlasen'] == true) 06: { 07: return 0; 08: } 09: 10: $ret=0; 11: $sql_dotaz = sprintf("select id_osoba, username, admin FROM osoba 12: WHERE username = '%s' AND password = '%s';", 13: $nickname, sha1($password)); 14: if ($vysledek = $this->mysql_spojeni->query($sql_dotaz)) 15: { 16: if ($vysledek->num_rows == 1) 17: { 18: if ($radek = $vysledek->fetch_object()) 19: { 20: $ret = $radek->id_osoba; 21: $_SESSION['prihlasen'] = true; 22: $_SESSION['id_osoba'] = $radek->id_osoba; 23: $_SESSION['username'] = $radek->username; 24: $_SESSION['admin'] = $radek->admin; 25: } 26: } 27: $vysledek->close(); 28: } 29: return $ret; 30: } Příloha 1: Ukázka programového kódu Tato metoda slouží pro ověření jména a hesla, které zad{ uživatel. Pro lepší orientaci jsou jednotlivé ř{dky očíslov{ny. N{vratovou hodnotou této metody je v případě úspěšného přihl{šení identifikační číslo, které odpovíd{ konkrétní osobě v datab{zi. Podle tohoto identifikačního čísla můžeme později rozlišit, který uživatel se pr{vě přihl{sil do systému. Pokud uživatel zad{ neplatné přihlašovací údaje, nebo během vykon{v{ní nastane chyba, metoda vr{tí jako n{vratovou hodnotu nulu. Identifikační číslo s hodnotou nula nemůže mít přiřazeno ž{dný uživatel (s číslov{ním se začín{ od jedničky). 8
Na ř{dku č. 2 je deklarace metody. Ta určuje mimo jiné její vstupní parametry, kterými jsou v tomto případě přihlašovací jméno ($nickname) a heslo ($password). Ze zač{tku metody probíh{ kontrola, zda již uživatel není přihl{šen. Pokud uživatel přihl{šen je, metoda vr{tí nulu. Na ř{dcích č. 11, 12 a 13 se sestavuje dotaz pro datab{zi. Tento dotaz m{ ověřit, zda se v datab{zi vyskytuje osoba, kter{ m{ přiřazeny zadané přihlašovací údaje. Jelikož je přihlašovací jméno vždy unik{tní, nemůže se st{t, že by zadané přihlašovací údaje byly stejné u více osob. Podmínka, kter{ zjišťuje, zda takov{ osoba existuje, je na ř{dku č. 18. Za ní n{sleduje blok příkazů, který se provede v případě shody zadaných údajů s některým z{znamem v datab{zi. V tomto bloku si aplikace poznamen{, který uživatel se přihl{sil. Také se zapíše, jestli m{ administr{torské opr{vnění (ř{dek č. 24). Posledními operacemi je uvolnění objektu obsahujícího odpověď datab{ze (ř{dek č. 27) a vr{cení n{vratové hodnoty (ř{dek č. 29). 3.4 Testov{ní 3.4.1 Průběžné testov{ní Během vývoje bylo několikr{t provedeno průběžné testov{ní. Vždy po dokončení určitého logického celku, jako je např. spr{va studentů, byla ověřena spr{vn{ funkčnost. Nejvíce času zabraly testy, které n{sledovaly po provedení úpravy, kter{ zpětně ovlivňovala již vytvořené funkce. Typickým příkladem bylo rozšíření některé z tabulek datab{ze. 3.4.2 Z{věrečné testov{ní Po dokončení aplikace bylo provedeno z{věrečné testov{ní, které spočívalo v kompletním ověření celé funkčnosti. Byla vytvořena nov{ datab{ze pomocí souboru src/create_tables.php. Přes webové rozhraní byli potom administr{torem vytvořeni noví učitelé, nové třídy a podtřídy, předměty tříd, rozvrhy tříd a studenti. U všech těchto objektů byla také otestov{na jejich editace a odebír{ní. Studentům pak byla v průběhu týdne jejich učiteli vytvořena absence, kterou poté omluvili jejich třídní učitelé. Během tohoto testov{ní nebyla objevena ž{dn{ chyba. 9
4 Z{věr Podařilo se vytvořit aplikaci reprezentující elektronickou třídní knihu. Přestože by jistě bylo možné přidat další funkcionalitu, myslím si, že i tak se jedn{ o poměrně rozs{hlou aplikaci (zdrojový kód se skl{d{ z více než 4200 ř{dků). Nejsložitější č{stí bylo bezpochyby naprogramov{ní rozvrhu, protože zde bylo nutné kontrolovat velké množství podmínek. V konečné podobě aplikace umožňuje jednoduchou a pohodlnou spr{vu rozvrhů tříd a absencí studentů. 5 Seznam použitých zdrojů a literatury 1. Dokumentace PHP (http://www.php.net/docs.php) 6 Seznam ilustrací Ilustrace 1: Struktura datab{ze 5 Ilustrace 2: Design a grafické rozvržení aplikace.. 6 7 Seznam příloh Příloha 1: Uk{zka programového kódu. 8 10