STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCI[LNÍ PÉČE JÍDELNÍČEK ŠKOLNÍ KUCHYNĚ RADEK PEK[REK Z[VĚREČN[ MATURITNÍ PR[CE BRNO 2011
Prohl{šení Prohlašuji, že tato z{věrečn{ maturitní pr{ce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracov{ní používal nebo z nich čerpal, v pr{ci ř{dně cituji s uvedením úplného odkazu na příslušný zdroj. Podpis Vedoucí pr{ce: RNDr. Lenka Hruškov{ Umístění: http://student.sspbrno.cz/~maturita10/ ii
Shrnutí Cílem této maturitní pr{ce bylo navržení a realizace webové aplikace, spojené s n{vrhem datab{ze. Webov{ aplikace pro svůj chod tuto datab{zi využív{. Přes aplikaci je možné datab{zi spravovat a upravovat z{znamy pro spr{vný chod aplikace. iii
Obsah Prohl{šení... ii Shrnutí iii Obsah...1 Anotace... 2 1 Koncepce.. 3 2 Přístup k aplikaci 4 2.1 Typy uživatelů 4 2.1.1 Uživatel typu: str{vník. 5 2.1.2 Uživatel typu: kuchař 5 2.1.3 Uživatel typu: administr{tor 6 2.1.4 UML diagram užití... 6 3 N{vrh datab{ze.. 7 3.1 Tabulka: jidelnicek. 8 3.1.1 Vytv{ření jídel 8 3.2 Tabulka: tyden 8 3.3 Tabulka: uzivatel 8 3.4 Tabulka: objednavka.. 8 3.5 Tabulka: sklad. 8 3.6 Tabulka: dny... 8 3.7 Tabulka: prehled 8 3.8 Tabulka: finance. 8 4 Tvorba.. 9 4.1 Obsluha 9 4.2 Specifické metody...9 4.2.1 Vytvoření nového receptu.9 4.2.2 Smaz{ní receptu... 9 4.2.3 Vytvoření týdenního jídelníčku... 9 4.2.4 Vytvoření objedn{vky.. 9 4.2.5 Dokoupení z{sob. 10 4.2.6 Smaz{ní uživatele 10 4.2.7 Uk{zka kódu 10 Z{věr. 13 Seznam použitých zkratek 14 Seznam ilustrací.. 15 Seznam použité literatury. 16 Seznam použitých obr{zků... 17 Seznam použitých n{hledů... 18 1
Anotace Aplikace m{ pomoci řídit provoz školní kuchyně nebo restaurace. V datab{zi bude možno uchov{vat informace o jídlech, pod{vaných v restauraci, a jídelníčku, souč{stí bude i objedn{ní určitého jídla na určitý den. 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 Webov{ aplikace se ovl{d{ přes webové str{nky, které jsou prim{rně zaměřeny na přehlednost a funkčnost. Ž{dný uživatel, ani zač{tečník, by neměl mít, po kr{tkém sezn{mení, problém s aplikací pracovat. obr. 1: uk{zka hlavní str{nky a designu Hlavní str{nka, umožňuje přístup k: informacím (cena obědů, dostupnost registračního klíče, otevírací doba, kontakt na spr{vce) přehledu všech možných jídel registraci, kter{ není plně přístupn{, o tom v dalším bodě 3
2 Přístup k aplikaci Webové str{nky jsou volně přístupné na internetu, ale pro další funkce je potřeba registrace. Uživatelé by prim{rně měli být studenti nebo pracovníci firmy, kter{ by tuto aplikaci využívala. Díky otevřené registraci se může zaregistrovat člověk i z vnějšku, pokud od spr{vce jídelny dostane registrační klíč. Registrace probíh{ pomocí formul{ře, viz: 2. ilustrace. obr. 2: výřez registračního formul{ře Text nad formul{řem radí uživateli, jak jej spr{vně vyplnit. Dokud nebudou data ve form{tu, který je požadov{n registrace neproběhne a uživatel bude vyzv{n k jejich úpravě. Spr{vný form{t je hlíd{n regul{rními výrazy. 2.1 Typy uživatelů Po přihl{šení aplikace rozlišuje tři typy uživatelů: str{vník d{le jen str{vník, kuchař d{le jen kuchař, administr{tor d{le jen administr{tor. Kuchař, respektive administr{tor od str{vníka získ{v{ několik možností, což z č{sti vede na dědičnost. Dědičnost ale použita není. 4
2.1.1 Uživatel typu str{vník Tento typ uživatele vznikne po úspěšné registraci a m{ nejmenší pravomoc pr{ce s aplikací, které k jeho účelům stačí. Nebo může vzniknout degradací z kuchaře nebo administr{tora. Do aplikace se hl{sí pomocí nicku a hesla, které si s{m vybral, aplikace je více user-friendly. Po přihl{šení, na rozdíl od nepřihl{šeného n{vštěvníka, získ{v{ další možnosti. Tyto možnosti, viz: obr. 3, se zobrazí v místě přihlašovacího formul{ře. Ten je patrný v obr. 1. obr. 3: uk{zka možností str{vníka Možnosti: Údaje změna osobních údajů, mimo nicku, kvůli možné n{sledné kontrole Heslo změna hesla Objedn{vky zobrazeni všech objedn{vek Přehled týdne zobrazí týdenní jídelníček a umožňuje objedn{ní obědů 2.1.2 Uživatel typu kuchař Tento typ uživatele může vzniknout povýšením ze str{vníka nebo snížením z administr{tora. Do aplikace se také hl{sí pomocí nicku a hesla, které si vybral ještě jako str{vník při první registraci. Oproti str{vníkovi přich{zí o možnost úpravy svých osobních dat, kvůli možné n{sledné kontrole. Nové možnosti se opět zobrazí na místě přihlašovacího formul{ře. Možnosti: Dny nastavení platnosti jídelníčku Přehled týdne viz: 2.1.1 Uživatel typu str{vník, možnosti Celkový přehled zkontroluje a zobrazí počet objednaných a uvařených jídel Objedn{vky zobrazení všech objedn{vek Hled{ní objedn{vek pro vyhled{ní objedn{vek u výdejny Přid{v{ní jídel přid{ní nového receptu Úprava jídel upravení nebo smaz{ní receptu Vytvořit jídelníček vybr{ní jídel pro týdenní jídelníček Dokoupení z{sob zobrazení financí jídelny, surovin na skladě a jejich dokoupení 5
2.1.3 Uživatel typu administr{tor Tento typ uživatele může vzniknout povýšením ze str{vníka nebo kuchaře. Do aplikace se také hl{sí pomocí nicku a hesla, které si vybral při první registraci za str{vníka. Stejně jako kuchař přich{zí o možnost úpravy osobních údajů, kvůli možné n{sledné kontrole. Navíc oproti kuchaři získ{v{ novou možnost pr{ce s aplikací. Tato a ostatní možnosti se zobrazí na místě přihlašovacího formul{ře. Možnosti: viz: 2.1.2 Uživatel typu kuchař, možnosti Úprava uživatelů upravení pravomocí uživatelům, úprava financí jednotlivých uživatelů a jejich maz{ní 2.1.4 UML diagram užití obr. 4: zjednodušený UML diagram užití, uživatelé a jejich možnosti zjednodušení vynech{v{ <<include>>, který by od každé funkce směřoval k přihl{šení 6
3 N{vrh datab{ze Aplikace spolupracuje s datab{zovým systémem MySQL, což je relační datab{zový systém. Tento systém je relativně jednoduchý na pr{ci, s dostatečnou rychlostí, spolehlivostí a data jsou přehledně uložena v tabulk{ch, tím p{dem není problém ze samostatné datab{ze vyčíst potřebné hodnoty. Tento typ datab{zového systému vyhovuje potřeb{m této aplikace. Datab{ze se jménem maturita10 obsahuje osm tabulek, polovina z nich je propojena relacemi. obr. 5: UML diagram tříd, přehled datab{ze a uk{zka relací 3.1 Tabulka: jidelnicek Tato tabulka obsahuje všechny dostupné recepty, které může jídelna vařit a vyd{vat. Obsah této tabulky může upravovat administr{tor a kuchař. 7
3.1.1 Vytv{ření jídel Každý recept obsahuje ingredience, které dané jídlo obsahuje. Spr{vný form{t ingrediencí by se vyřešil na ostrém provozu, s ohledem na dodavatele. 3.2 Tabulka: tyden Tato tabulka obsahuje jídla vybran{ pro určitý týden. Na první pohled se může zd{t, že se data v tabulce zdvojují. Ale ani sebelepší administr{tor nepřijde na n{zev jídla pouze z indexu, když opr{vněn{ osoba jídlo smaže z tabulky jidelnicek. Díky tomu zůstane archiv týdenních jídelníčků přehledný. Obsah této tabulky může upravovat administr{tor a kuchař. 3.3 Tabulka: uživatel Tato tabulka obsahuje všechny nezbytně nutné informace o uživateli. Pro odlišení vnitřních nebo venkovních uživatelů by nebyl problém přidat další sloupec. Tato problematika by se vyřešila na ostrém provozu po domluvě s uživatelem, který by chtěl využívat tuto aplikaci. Obsah této tabulky může upravovat str{vník, ale jen svoje hodnoty. Administr{tor může v této tabulce upravovat pravomoc a finance jednotlivým z{kazníkům. 3.4 Tabulka: objednavka Tato tabulka obsahuje všechny provedené objedn{vky. Str{vník upravovat pouze svoje objedn{vky a to ještě s časovým omezením. Objedn{vku lze upravit nejpozději den před datem vyřízení. Při ostrém provozu by se dala upravit i poslední hodina možné úpravy. Opět by bylo z{vislé na domluvě. Administr{tor a kuchař mohou objedn{vky upravovat se stejným časovým omezením. 3.5 Tabulka: sklad Tato tabulka obsahuje dostupné ingredience, ze kterých je možné uvařit a vydat oběd. Pokud není sklad dostatečně plný, může být administr{torem nebo kuchařem doplněn. 3.6 Tabulka: dny Tato tabulka bude vždy obsahovat pouze jeden z{znam. Ten bude určovat platnost týdenního jídelníčku, kter{ pokaždé nemusí být pět pracovních dnů. Tento z{znam může upravit administr{tor nebo kuchař. 3.7 Tabulka: prehled Tato tabulka obsahuje počet objednaných a uvařených obědů. Z{znamy v této tabulce jsou vytv{řeny jen pomocí PHP skriptu. 3.8 Tabulka: finance Tato tabulka obsahuje pouze informace o finančním stavu jídelny. Z aplikace její hodnota opravovat nelze, pokud nepočít{m změny při objedn{vk{ch a úpravě z{sob. 8
4 Tvorba Aplikace běží na studentském serveru školy. Na vzhled je použito HTML a funkčnost obstar{v{ PHP. Jak již bylo řečeno na zač{tku, design se nese v duchu jednoduchosti a funkčnosti. To bylo docíleno použitím jednoduchého CSS, použití DIVů. Obsah jednotlivých str{nek, které obsahují informace, vybrané uživatelem, je vkl{d{n do indexu, konkrétně DIVu nazvaného content. 4.1 Obsluha V předch{zejícím odstavci, jsem se zmínil, že funkčnost obstar{v{ skriptovací jazyk PHP. Na jednotlivých str{nk{ch jsou volané metody, které zajistí splnění požadované operace. Většina těchto metod spolupracuje s datab{zí, ze které data získ{v{ nebo ji naopak plní daty novými. Aplikace by bez připojení k datab{zovému byla naprosto nepoužiteln{. 4.2 Specifické metody Specifickými metodami jsem si dovolil nazvat metody, které byly vyžadov{ny v zad{ní. Ty obstar{vají například: vytvoření nového receptu, vytvoření týdenního jídelníčku, smaz{ní receptu, úpravu receptů, dokoupení z{sob jídelny, smaz{ní uživatele, atd. A jsou 4.2.1 Vytvoření nového receptu Nový recept se do datab{ze dostane průchodem přes formul{ř, ve kterém jsou vybr{ny všechny dostupné ingredience na skladu. Administr{tor nebo kuchař vybere ingredience, ze kterým se recept skl{d{ a tyto hodnoty jsou uloženy do datab{ze. Tímto je recept připraven k n{slednému zařazení do týdenního jídelníčku. Spr{vný form{t (kg, ks, porce) ingrediencí se musí vybrat při vytv{ření datab{ze a n{sledně jej používat u všech receptů. K receptu je také možné nahr{t obr{zek, aby se mohl uživatel předem podívat, co si objedn{. 4.2.2 Smaz{ní receptu Když přestane být recept u uživatelů oblíbený, není ž{dný problém tento recept kliknutím smazat. Avšak se musí br{t ohled, na týdenní jídelníček a z něj provedené objedn{vky. Recept lze smazat, pokud není nikým objedn{n. 4.2.3 Vytvoření týdenního jídelníčku Týdenní jídelníček se d{ skl{dat pouze z receptů, které jsou uloženy v jídelníčku. Skl{d{ se z posledních patn{cti receptů, které jsou uloženy v tabulce tyden, pokud administr{tor nebo kuchař nevyberou všech patn{ct nových receptů, vezmou se vybrané recepty a doplní se recepty z předch{zejícího týdne. 4.2.4 Vytvoření objedn{vky Objedn{vku může vytvořit každý přihl{šeny uživatel s dostatečnými financemi a je-li na skladě dostatek surovin pro vybraný recept. 9
4.2.5 Dokoupení z{sob Z{soby ze skladu ubývají na z{vislosti počtu objedn{vek. Dokupovat z{soby lze s ohledem stavu financí celé jídelny. 4.2.6 Smaz{ní uživatele Je jedna z nejsložitějších metod. Pokud chceme uživatele smazat, musíme zajistit, aby nedošlo ke ztr{tě financí a z{sob. Toto zkreslení by se mohlo projevit už po jednom uživateli s více objedn{vkami. 4.2.7 Uk{zka kódu Na uk{zku jsem vybral metodu, pro smaz{ní uživatele. V této metodě jsou vidět všechny prov{děné kroky: public function upravzasoby($jidlo){ $dotaz = sprintf ("SELECT veprove, kureci, hovezi, sul, koreni, brambory, hranolky, ameriky, ryze, knedlik, testoviny, zelenina FROM jidelnicek WHERE id = $jidlo"); $vysledek = $this->pripojeni->query($dotaz); while($radek = $vysledek->fetch_object()){ $veprove = $radek->veprove; $kureci = $radek->kureci; $hovezi = $radek->hovezi; $sul = $radek->sul; $koreni = $radek->koreni; $brambory = $radek->brambory; $hranolky = $radek->hranolky; $ameriky = $radek->ameriky; $ryze = $radek->ryze; $knedlik = $radek->knedlik; $testoviny = $radek -> testoviny; $zelenina = $radek->zelenina; } $dotaz = sprintf("update sklad SET veprove = veprove + '$veprove', kureci = kureci + '$kureci', hovezi = hovezi + '$hovezi', sul = sul + '$sul', koreni = koreni + '$koreni', brambory = brambory + '$brambory', hranolky = hranolky + '$hranolky', ameriky = ameriky + '$ameriky', ryze = ryze + '$ryze', knedlik = knedlik + '$knedlik', testoviny = testoviny + '$testoviny', zelenina = zelenina + '$zelenina' WHERE id = 1"); $this->pripojeni->query($dotaz) or die ("$dotaz"); } public function zjistijidlo($id){ $dneska = date('y-m-d'); $dotaz = sprintf ("SELECT jidlo FROM objednavka WHERE uzivatel = $id AND datum > $dneska"); $vysledek = $this->pripojeni->query($dotaz); while($radek = $vysledek->fetch_object()){ $jidlo = $radek -> jidlo; $this->upravzasoby($jidlo); } } 10
public function pocetvyskytu($id){ $dneska = date('y-m-d'); $dotaz = sprintf ("SELECT COUNT(id) AS pocet FROM objednavka WHERE uzivatel = $id AND datum > $dneska"); $vysledek = $this->pripojeni->query($dotaz); while($radek = $vysledek->fetch_object()){ $pocet = $radek -> pocet; } $vysledek->free_result(); } return $pocet; public function smazobjednavky($id){ $dneska = date('y-m-d'); $dotaz = sprintf ("DELETE FROM objednavka WHERE uzivatel = $id AND datum > $dneska"); $this->pripojeni->query($dotaz); } public function upravfinance($pocet, $id){ $pocet = $pocet * 35; $dotaz = sprintf ("UPDATE finance SET finance = finance - $pocet WHERE id = 1"); $this->pripojeni->query($dotaz); $dotaz = sprintf ("UPDATE uzivatel SET finance = finance + $pocet WHERE id = $id"); $this->pripojeni->query($dotaz) or die ("$dotaz"); } public function smaz($id){ } $this->zjistijidlo($id); $pocet = $this->pocetvyskytu($id); $this->upravfinance($pocet, $id); $this->smazobjednavky($id); $dotaz = sprintf("delete FROM uzivatel WHERE id = $id"); $this->pripojeni->query($dotaz); $this->pripojeni->close(); echo "<center>uživatel byl smazán.<center>"; 11
Samotn{ funkce smaz vol{ další čtyři funkce, které potřebuje ke své spr{vné činnosti: 1. zjistijidlo($id) tato metoda zjistí všechny neprovedené objedn{vky a při každém průchodu zavol{ další metodu, které před{ parametr, podle kterého se upraví z{soby na skladě i. upravzasoby($jidlo) 2. pocetvyskytu($id) tato metoda zjistí počet objednaných obědů a jejich počet je n{sledně uložen do proměnné 3. upravfinance($pocet, $id) proměnn{ získan{ z předch{zející metody vstupuje do této metody, jako parametr díky jednotné ceně není problém upravit finance 4. smazobjednavky($id) tato metoda smaže doposud neprovedené objedn{vky 12
Z{věr Jak bylo v protokolu zmíněno, aplikace by potřebovala p{r drobných úprav, aby mohla být spuštěna pro ostrý provoz. Ale není to nic, co by se nedalo vyřešit během p{r hodin, maxim{lně během několika dní. Všechny tyto úpravy by byly provedeny dle instrukcí z{kazníka. 13
Seznam použitých zkratek 1. UML Unified Modeling Language využív{ se v softwarovém inženýrství grafický jazyk pro vizualizaci, specifikaci, navrhov{ní a dokumentaci programových systémů 2. MySQL datab{zový systém 3. PHP Hypertext Preprocessor skriptovací programovací jazyk 4. HTML HyperText Markup Language značkovací jazyk pro hypertext 5. CSS Cascading Style Sheets jazyk pro popis způsobu zobrazení str{nek napsaných v jazyce HTML a podobných jazycích 14
Seznam použitých obr{zků Obr. 1: uk{zka přístupné hlavní str{nky a designu. 3 Obr. 2: výřez registračního formul{ře 4 Obr. 3: uk{zka možností str{vníka. 5 Obr. 4: zjednodušený UML diagram užití, uživatelé a jejich možnosti 6 Obr. 5: UML diagram tříd, přehled datab{ze a uk{zka relací 7 15
Seznam použité literatury Wikipedia: http://cs.wikipedia.org/wiki/unified_modeling_language http://cs.wikipedia.org/wiki/diagram_u%c5%beit%c3%ad http://cs.wikipedia.org/wiki/html http://cs.wikipedia.org/wiki/php http://cs.wikipedia.org/wiki/kask%c3%a1dov%c3%a9_styly Jak ps{t web: http://www.jakpsatweb.cz/html/tabulky.html http://www.jakpsatweb.cz/css/font-variant.html http://www.jakpsatweb.cz/meta-tagy.html 16
Seznam použitých n{hledů U jídel: Vepřový řízek s bramborami: http://stravovani.srbatabor.cz/docstore/food/images/1207652165.jpg Vepřový řízek s bramborovou kaší: http://www.vetruse.cz/uploads/images/albums/jidla4/smazenyrizek.jpg Přírodní vepřový řízek s bramborovou kaší: http://i.mimibazar.cz/h/bc/10/101022/10/j94376.jpg Kuřecí řízek s bramborami: http://img.ihned.cz/attachment.php/490/24691490/wmpl8vc9ofnx3ugn7k qtr1qbkadcyjuh/100325_58c_pn.jpg Kuřecí řízek s bramborovou kaší: http://www.zsburesova.cz/jidelna/fotky/kureci_rizek_v_sezamovem_ob alu,_bramb._kase_resize.jpg Přírodní kuřecí řízek s hranolky: http://receptyfotky.chytrazena.cz/recepty_foto/fotky11/maxi/1297197115-52.jpg Vepřové rizoto: http://enciklopedie.bloger.cz/obrazky/enciklopedie.bloger.cz/riz.j pg Kuřecí rizoto: http://www.mujplan.cz/obrazky/img_4459.jpg Zeleninové rizoto: http://www.raduzyrecepty.com/img/picture/250/zeleninov%c3%a9- rizoto-s-krevetami-4.jpg Moravský vrabec s bramborovým knedlíkem: http://i.idnes.cz/10/101/c460/bor363dc9_moravsky_vrabec.jpg Uzené koleno s bramborovým knedlíkem: http://foto.dama.cz/img/484/484161.jpg Hovězí gul{š s knedlíkem: http://www.tradicnirecepty.cz/jidla/hovezi-gulas.jpg Vepřový gul{š s knedlíkem: http://stravovani.srbatabor.cz/docstore/food/images/1207651724.jpg 17
Hovězí steak s americkými bramborami: http://www.pragmoon.cz/wp-content/uploads/2010/07/hovezi.jpg Španělský pt{ček s rýží: http://img.ella.centrum.cz/photos/2010/02/01/6-211063-spanelskyptacek-s-ryzi.jpg Dom{cí sekan{ s bramborovou kaší: http://dani.napady.net/image/11679693 Francouzské brambory: http://nd01.jxs.cz/625/852/71c7862d3e_26202405_o2.jpg Boloňské špagety: http://dejavu2k9.files.wordpress.com/2010/03/spaghettibolognese1.jpg Zepečené těstoviny: http://img.ella.centrum.cz/photos/2010/02/22/6-153355-kategoriezapecene-testoviny.jpg Lasagne: http://viaemilianyc.com/lasagne1.jpg Úvodní obr{zek: Jídelna: http://www.dobrachata.cz/_datapublic/photo/a45cdcbae7801a7ae01e6a9 7886c2999/RESTAURACE_resize.JPG všechny tyto n{hledy se nach{zejí na serveru spolu s aplikací odkazy směřují přímo na požadovaný obr{zek 18