VŠB – TU Ostrava
INFORMAČNÍ SYSTÉM PRODEJ LÍSTKŮ DO DIVADLA Informační systémy a datové sklady
Tomáš Bednár Pavel Bílý Lukáš Kubis Štěpán Minks
(bed163) (bil208) (kub749) (min111)
23.10.2009
1. Zadání Proč nový systém? Prodej lístků přímo v divadle je již zastaralý a častokrát se tak stávalo, že zákazník přišel a představení, na které si chtěl koupit lístky, již bylo vyprodané. Chceme tedy zákazníkům dát možnost rezervovat si lístky z pohodlí domova. K čemu má IS sloužit? Informační systém bude hlavně sloužit pro rezervaci lístků na dané představení. Uživatel bude moci prohlížet program divadla a rezervovat si lístky na vybraná představení. Aby si uživatelé mohli rezervovat lístky, musejí se nejdříve zaregistrovat. Po registraci uživatel uvidí při rezervaci schematický plánek divadelního sálu s označenými sedadly, která jsou již rezervována. Bude si tak moct vybrat volná sedadla, která mu nejvíce vyhovují. Maximální počet sedadel, která si může jeden člověk rezervovat na dané představení, je omezen na počet 6 sedadel. Rezervované lístky musí uživatel zaplatit a vyzvednout přímo v divadelní pokladně maximálně do tří dnů od data rezervace. Poté by byla jeho rezervace zrušena. Potvrzovat zaplacené rezervace bude pokladní. Pokladní bude moci rovněž prodávat lístky neregistrovaným lidem, kteří přijdou osobně na pokladnu a značit do systému tuto skutečnost. Může tedy provádět rezervace na neomezený počet sedadel. Správci systému (zaměstnanci divadla) budou do systému vkládat nové tituly a nová představení a upravovat informace uložené v databázi (editovat tituly, představení, mazat neaktuální informace…). Kdo s IS bude pracovat? Návštěvníci, kteří nejsou v systému přihlášení, si mohou jedině prohlížet vypsaný divadelní program a pročítat si jednotlivé tituly. Samozřejmostí je možnost registrace, bez které nemůžou provádět rezervaci lístků. Uživatelé, kteří se do systému zaregistrují, si mohou také prohlížet vypsaný divadelní program a pročítat si jednotlivé tituly. Navíc však mohou provádět rezervace lístků a vypisovat si jejich aktuální rezervace a historii svých rezervací. Pokladní bude mít shodná práva jako běžný registrovaný uživatel s tím rozdílem, že může provádět rezervace na neomezený počet míst a nemůže měnit žádné údaje u svého účtu jako např. jméno, pod kterým se přihlašuje. Správci, kteří se starají o chod celého systému, mohou taktéž provádět rezervace, ale jejich hlavní náplní je vkládat, editovat a případně mazat jednotlivé programy a tituly. Dále se také starají o správné cenové ohodnocení jednotlivých sedadel v sálu a udržují správný chod celého systému. Vstupy do systému: Registrace uživatele – při registraci uživatel vloží své jméno, příjmení, login, email, telefon a heslo. U uživatele v tabulce Role evidujeme, zda je, či není správcem. Musí být minimálně jeden správce. Rovněž evidujeme poslední aktivitu uživatele na stránce pro možnost mazání neaktivních uživatelů. Evidence herců – správce vkládá jméno, příjmení, věk a pohlaví herce.
Evidence sálů – správce vkládá název sálu a jeho kapacitu. Každý sál může být rozdělen do více cenových kategorií. Evidence částí sálů – správce zde definuje název části a směr, kterým se návštěvník do této části nejlépe dostane. Ke každé části se přiřazuje, o který sál se jedná. Evidence titulů – správce vkládá název, popis, autora, žánr příslušného titulu, seznam hlavních rolí a obsazení hlavních rolí. Jednu roli může hrát více herců v různých představeních. Evidence programů – správce vkládá datum a čas programu a vybírá k němu příslušný titul a sál, ve kterém se program bude hrát. Jeden program může mít pouze jeden titul, ale jeden titul může být obsažen ve více programech. U každého programu se ještě nastaví, kteří herci budou hrát hlavní role daného představení. Evidence sedadel – správce vkládá jednotlivá sedadla a u každého definuje jeho číslo a řadu. Spolu s tím určuje, do jaké části kterého sálu sedadlo patří. Rezervace – uživatel si rezervuje maximálně šest sedadel k jednomu programu. Každé rezervované sedadlo se ukládá jako samostatná rezervace. Při rezervaci si může nastavit slevu, ale při placení musí předložit potřebnou kartu, na kterou se sleva vztahuje. Při zaplacení se uloží, že zákazník rezervaci zaplatil.
Výstupy ze systému: Výpis divadelního programu: V tabulce budou zobrazeny všechny aktuální programy, které se v divadle hrají. U každého z nich bude zobrazen titul, u kterého si může uživatel zobrazit podrobnosti. Zobrazení plánku sálu: Při rezervaci se uživateli zobrazí schematický plánek divadelního sálu s vyznačením již rezervovaných sedadel. Výpis rezervací: V tabulce se uživateli zobrazí jeho aktuální rezervace. Pokud nebyla rezervace ještě zaplacena, bude jí mít možnost zrušit. Bude zde mít taky možnost zobrazit si své minulé rezervace a to tři měsíce pozpátku. Tisk lístků: Na vytisknutém lístku budou zobrazeny nejdůležitější informace jako například název titulu, datum a čas kdy se hraje, číslo sedadla a řada. Dále pak směr, kterým se ke svému místu návštěvník nejlépe dostane, a cena lístků.
Vybrané funkce systému: Událost
Reakce
Aktér
Nový uživatel
zapiš do seznamu uživatelů a nastav roli na neaktivního uživatele návštěvník
Neaktivní uživatel
nastaví se atribut aktivni_ucet na false
Smazání uživatele Nový titul
po upozornění a potvrzení smaže uživatele a odebere jej z tabulek Rezervace zapiš titul do seznamu titulů a hlavních postav a nastav ceny vstupného
uživatel, správce
správce
Nový správce
nastav danému uživateli roli správce
správce
Titul se již nehraje
nastavení atributu titulu na neaktivní
správce
Aktualizace titulu
uprav nastavené informace
správce
Aktualizace uživatele uprav nastavené informace
uživatel, správce
Přidání, smazaní a editace herce v programu
využití událostí aktualizace titulu
správce
Zrušení části sálu
po upozornění a potvrzení smaže záznam z tabulky cast_salu a odebere jej z tabulek Sedadla
Přidání programu
zapiš do seznamu programů a nastav obsazení hlavních rolí
správce
Aktualizace programu
aktualizuj nastavené informace
správce
Nový herec
zapiš herce do seznamu herců
správce
Neaktivní herec
nastavení atributu herec na neaktivní
správce
Smazání herce
po upozornění a potvrzení smaže záznam z tabulky herci a odebere jej z tabulek Hlavni_postavy, Herec_v_programu, Hlavni_postavy
Nový sál
zapiš do seznamu sálů a části sálů a sedadel
správce
Odebrání programu
po upozornění a potvrzení odebere program z tabulek Rezervace, Program, Herec_v_programu.
správce
Nová sleva
zapiš do seznamu slev
správce
Odebrání slevy
Nastav atribut je_aktualni v tabulce sleva
správce
Aktualizace slevy
aktualizuj slevu
správce
Aktualizace herce
aktualizuj herce
správce
Nová rezervace
zapiš do seznamu rezervací
Zrušení rezervace
odeber ze seznamu rezervací
Aktualizace rezervace
aktualizuj, že uživatel zaplatil
Výpis programu
zobraz program
Výpis rezervací
zobraz uživatelovy rezervace
Seznam uživatelů
Zobraz všechny uživatele
správce
Tisk lístků
tiskni lístky
uživatel, správce
uživatel, správce uživatel, správce správce návštěvník, uživatel, správce uživatel, správce
Okolí systému:
Nefunkční požadavky: Od výsledného Informačního systému budeme požadovat dodržení nejnovějších standardů a předpisů pro tvorbu IS. Důležitým kritériem je výsledná cena tohoto IS, která by měla být co nejmenší, stejně jako další náklady na provoz a údržbu. K systému bude v jednu chvíli přes internet přistupovat velké množství uživatelů. Je tudíž nutná vhodná implementace klient – server, která nám zajistí rychlou odezvu na požadavky uživatelů. IS bude přístupný přes všechny standardní webové prohlížeče. Celý informační systém bude vyvíjen v .NET - jazykem C# s pomocí MS SQL databáze.
2. Datová analýza ER diagram:
Lineární zápis typů entit: Primární klíč, Cizí klíč Uzivatel(id_uz, id_role, login, heslo, jmeno, prijmeni, email, telefon, posledni_aktivita, aktivni_ucet, aktivacni_retezec, registrace) Role(id_role, role) Titul(id_titul, nazev, popis, autor, zanr, hraje_se) Hlavni_postavy(id_hlavni_postavy, id_titul, nazev_postavy, id_herec) Program(id_prog, datum, cas, id_sal, id_titul) Sal(id_sal, nazev, kapacita) Casti_salu(id_casti, nazev, smer, id_sal, je_uzavren) Cenik(id_cen, id_titul, id_casti, cena) Sleva(id_slevy, popis, sleva_proc, je_aktualni) Rezervace(id_rez, datum, cas, zaplaceno, id_uz, id_sed, id_prog, id_slevy, vysledna_cena) Sedadlo(id_sed, cislo, rada, id_casti) Herec_v_programu(id_ herec_v_programu, id_prog, id_hlavni postavy) Herec(id_herec, jmeno, prijmeni, vek, id_pohlavi, je_aktivni) Pohlavi(id_pohlavi, nazev)
Lineární zápis typů vazeb: MA_POHLAVI MA_ROLI JE_CASTI_SALU HRAJE_POSTAVU MA_CENY MA_CENU MA_CASTI NA_SEDADLO MA_SLEVU MA_REZERVACI NA_PROGRAM NA_SAL HRAJE HRAJOU SE_HRAJE BUDE_HRAT
(Herec, Pohlavi) (Uživatel, Role) (Sedadlo, Cast_salu) (Herec, Hlavni_postavy) (Titul, Cenik) (Cast_salu, Cenik) (Sal, Cast_salu) (Rezervace, Sedadlo) (Rezervace, Sleva) (Uzivatel, Rezervace) (Rezervace, Program) (Program, Sal) (Program, Herec_v_programu) (Titul, Hlavni_postavy) (Titul, Program) (Herec_v_programu, Hlavni_postavy)
N:1 N:1 N:1 1:N 1:N 1:N 1:N N:1 N:1 1:N N:1 N:1 1:N 1:N 1:N N:1
Datový slovník: Uzivatel: Název
Datový typ
Velikost Klíč
Null
Index
Popis
id_uz
int
6
PK
ne
ano
jednoznačné číslo uživatele
id_role
int
6
FK
ne
ne
jednoznačné číslo role
varchar char varchar varchar varchar char datetime bit varchar int
30 40 30 30 30 13
ne ne ne ne ne ne ne ne ne ne
ne ne ne ne ne ano ne ne ano ne
ne ne ne ano ne ne ne ne ne ne
login uživatele heslo uživatele jméno uživatele příjmení uživatele email uživatele telefon uživatele datum posledního přihlášení uživatele Místo smazání se účet nastaví neaktivní Unikání řetězec pro aktivaci účtu časové razítko registrace (Unix time)
Null
Index
login heslo jmeno prijmeni email telefon posledni_aktivita aktivni_ucet aktivacni _retezec registrace
bit 42 11
Role: Název id_role role
Datový typ
Velikost Klíč
Popis
int
6
PK
ne
ano
jednoznačné číslo role
char
10
ne
ne
ne
název role
Titul: Název id_titul nazev popis autor zanr hraje_se
Datový typ
Velikost Klíč
Index
ne ne ne ne ne ne
ano ano ne ano ano ne
int varchar text varchar varchar bit
40 40 bit
PK ne ne ne ne ne
Hlavni_postavy: Název
Datový typ
Velikost
Klíč
Null
Index
id_hlavni_postavy id_titul nazev_postavy id_herec
int int varchar int
6 6 30 6
PK FK ne FK
ne ne ne ne
ano ano ne ne
Datový typ
Velikost
Klíč
Null
Index
int date time int int
6
6 6
PK ne ne FK FK
ne ne ne ne ne
ano ne ne ne ne
Datový typ
Velikost
Klíč
Null
Index
int varchar int
6 20 4
PK ne ne
ne ne ne
ano ano ne
Datový typ
Velikost
Klíč
Null
Index
int char char int
6 10 20 6
PK ne ne FK
ne ne ne ne
ano ne ne ne
bit
bit
ne
ne
ne
Program: Název id_prog datum cas id_sal id_titul
6 40
Null
Popis jednoznačné číslo titulu název titulu popis titulu autor titulu žánr titulu Titul se hraje
Popis jednoznačné číslo hlavní postavy jednoznačné číslo titulu název postavy jednoznačné číslo herce
Popis jednoznačné číslo programu datum představení začátek jednoznačné číslo sálu jednoznačné číslo titulu
Sal: Název id_sal nazev kapacita Casti_salu: Název id_casti nazev směr id_sal je_uzavren
Popis jednoznačné číslo sálu název sálu kapacita sálu
Popis jednoznačné číslo části sálu název části sálu směr v sále jednoznačné číslo sálu Část sálu je nedostupná (v opravě, zrušena)
Cenik Název id_cen id_titul id_casti cena
Datový typ
Velikost
Klíč
Null
Index
Popis
int int int int
6 6 6 4
PK FK FK ne
ne ne ne ne
ano ne ne ne
Datový typ
Velikost
Klíč
Null
Index
int text int bit
6 2 bit
PK FK FK ne
ne ne ne ne
ano ne ne ne
Datový typ
Velikost
Klíč
Null
Index
int date time bit int int int int int
6
bit 6 6 6 6 4
PK ne ne ne FK FK FK FK ne
ne ne ne ne ne ne ne ne ne
ano ne ne ano ne ne ano ne ne
Datový typ
Velikost
Klíč
Null
Index
int int int int
6 3 3 6
PK ne ne FK
ne ne ne ne
ano ne ne ne
Datový typ
Velikost
Klíč
Null
Index
int
6
PK
ne
ano
jednoznačné číslo herce v programu
int int
6 6
FK FK
ne ne
ne ne
jednoznačné číslo programu jednoznačné číslo hlavní postavy
jednoznačné číslo ceny jednoznačné číslo titulu jednoznačné číslo části sálu cena jednoho lístku
Sleva Název id_slevy popis sleva_proc je_aktualni
Popis jednoznačné číslo slevy popis slevy sleva v procentech Nastavení na neaktuální
Rezervace Název id_rez datum cas zaplaceno id_uz id_sed id_prog id_slevy vysledna_cena
Popis jednoznačné číslo rezervace datum rezervace čas rezervace rezervace zaplacena jednoznačné číslo uživatele jednoznačné číslo sedadla jednoznačné číslo programu jednoznačné číslo slevy konečná cena po odečtení slevy
Sedadlo Název id_sed cislo rada id_casti
Popis jednoznačné číslo sedadla číslo sedadla v řadě řada cenová kategorie
Herec_v_programu
Název id_herec_v_progra mu id_prog id_hlavni_postavy
Popis
Herec Název id_herec jmeno prijmeni vek id_pohlavi je_aktivni
Datový typ
Velikost
Klíč
Null
Index
int varchar varchar int int bit
6 30 30 3 1 bit
PK ne ne ne FK ne
ne ne ne ano ne ne
ano ne ne ne ne ne
Datový typ
Velikost
Klíč
Null
Index
int varchar
1 4
PK ne
ne ne
ano ne
Popis jednoznačné číslo herce jméno herce příjmení herce věk herce jednoznačné číslo pohlaví Je herec aktivní
Pohlavi Název id_pohlavi nazev
Popis jednoznačné číslo pohlaví název pohlaví
3. Funkční analýza Kontextový diagram:
DFD 0. úrovně:
DFD 1. úrovně: 1.1. Evidence uživatelů
Uživatel může editovat pouze informace, které zadal do systému při registraci. Nemůže si měnit roli. Roli může uživateli měnit pouze správce.
1.2. Evidence programů
1.3. Evidence titulů
1.4. Evidence rezervací
1.5. Evidence sálů
1.6. Evidence herců
1.7. Výstupy
Minispecifikace 1.4 Evidence uživatelů – 1.1 Registrace uživatele: 1. Zobraz uživateli registrační formulář s položkami: login, heslo, jméno, příjmení, email a telefon 2. Uživatel vyplní jednotlivé položky a odešle formulář 3. JESTLIŽE jsou k dispozici všechny položky PAK pokračuj bodem 4 JINAK upozorni uživatele, že musí vyplnit všechny položky a jdi zpět na bod 2 4. Ulož hodnoty jednotlivých položek do proměnných: Plogin, Pheslo, Pjmeno, Pprijmeni, Pemail a Ptelefon 5. Zašifruj proměnnou Pheslo algoritmem SHA1 6. Vygeneruj aktivační řetězec o délce 42 znaků a ulož do proměnné Pguid 7. Ulož aktuální „Unix time“ do proměnné Ptime 8. Načti z tabulky Role id_role příslušející k roli Uživatel a ulož do proměnné Pid_role 9. Vlož nový záznam do tabulky Uzivatel s hodnotami: Pid_role, Plogin, Pheslo, Pjmeno, Pprijmeni, Pemail, Ptelefon, Pguid a Ptime (Atribut aktivni_ucet v tabulce Uzivatel bude defaultně 0) 10. JESTLIŽE se registrace povedla PAK a. Odešli uživateli aktivační email na adresu Pemail, který bude obsahovat odkaz, ve kterém bude obsažen aktivační řetězec Pguid b. Zobraz uživateli zprávu o úspěšné registraci a nutnosti aktivace účtu JINAK zobraz uživateli zprávu o nezdařené registraci
1.4 Evidence uživatelů – 1.2 Aktivace uživatele: 1. Ulož aktivační řetěz z URL adresy do proměnné Pguid 2. Načti z tabulky Uzivatel hodnotu registrace, kde aktivacni _retezec = Pguid a ulož do proměnné Ptime 3. JESTLIŽE se podařilo záznam najít a proměnná Ptime není prázdná PAK a. Ulož do proměnné Ptime_act hodnotu aktuální „Unix time“ mínus 2 dny b. JESTLIŽE platí že Ptime_act ≤ Ptime PAK i. Nastav atribut aktivni_ucet v tabulce Uzivatel na hodnotu 1 u záznamu, kde aktivacni _retezec = Pguid ii. Nastav atribut aktivacni _retezec v tabulce Uzivatel na hodnotu NULL u záznamu, kde aktivacni _retezec = Pguid iii. Zobraz uživateli zprávu o úspěšné aktivaci účtu a možnosti přihlášení JINAK i. Smaž záznam z tabulky Uzivatel, kde aktivacni _retezec = Pguid ii. Zobraz uživateli zprávu o tom, že propásl čas vymezený pro aktivaci a musí se znovu registrovat JINAK zobraz uživateli zprávu u neúspěšné aktivaci účtu
1.4 Evidence rezervací – 4.1 Nová rezervace: 1. 2. 3. 4. 5.
6. 7. 8. 9. 10. 11.
12. 13. 14. 15. 16.
17.
Načti aktuální program z tabulky Program a zobraz jej uživateli v přehledné tabulce Uživatel si vybere konkrétní program Ulož id_prog, id_sal a id_titul vybraného programu do proměnných Pid_prog, Pid_sal a Pid_titul Z tabulky Casti_salu načti všechny id_casti kde id_sal = Pid_sal a ulož tyto hodnoty do pole Aid_casti[] PRO KAŽDÝ záznam z pole Aid_casti[] DĚLEJ a. Načti z tabulky Cenik id_cen, kde id_titul = Pid_titul a id_casti = Aid_casti[i] a ulož ho do proměnné Pid_cen b. PRO KAŽDÝ záznam za tabulky Sedadlo kde Aid_casti[i] = id_casti DĚLEJ i. Načti id_sed do proměnné Pid_sed ii. Vyhledej v tabulce Rezervace záznam z uloženým Pid_sed iii. JESTLIŽE záznam s Pid_sed v tabulce Rezervace existuje PAK zobraz sedadlo jako obsazené JINAK zobraz sedadlo jako volné a ulož u něj Pid_sed a Pid_cen KONEC CYKLU KONEC CYKLU Načti z tabulky Sleva všechny aktuální záznamy a zobraz je uživateli na výběr Uživatel si vybere maximálně 6 volných sedadel Uživatel si může vybrat jednu z nabízených slev (defaultně je sleva 0%) Ulož id_slevy vybrané (může být defaultní) slevy do proměnné Pid_slevy Uživatel odešle rezervaci JESTLIŽE je uživatel přihlášen PAK pokračuj bodem 13 JINAK nabídni uživateli možnost přihlášení Uživatel se přihlásí Ulož všechny dvojice Pid_sed a Pid_cen vybraných sedadel do pole Aid_sed[][] Ulož id_uz přihlášeného uživatele do proměnné Pid_uz Ulož aktuální datum a čas do proměnných Pdatum a Pcas PRO KAŽDÝ záznam z pole Aid_sed[][] DĚLEJ a. Načti z tabulky Cenik cena, kde id_cen = Aid_sed[i][Pid_cen] a ulož do proměnné Pcena b. Načti z tabulky Sleva sleva_proc, kde id_slevy = Pid_slevy a ulož do proměnné Psleva_proc c. Z původní ceny Pcena a hodnoty Psleva_proc vypočti cenu po slevě a ulož do proměnné Pcena_sleva d. Vlož do tabulky Rezervace nový záznam s hodnotami: (Pdatum, Pcas, Pid_uz, Aid_sed[i][Pid_sed], Pid_prog, Pid_slevy, Pcena_sleva) (Atribut Zaplaceno bude defaultně 0) KONEC CYKLU JESTLIŽE se rezervace povedla PAK a. Načti z Tabulky Uzivatel email uživatele, kde id_uz = Pid_uz a ulož ho do proměnné Pemail b. Odešli uživateli potvrzující email na adresu Pemail c. Zobraz uživateli zprávu o úspěšné rezervaci JINAK zobraz uživateli zprávu, že se rezervace nepovedla
4. Časová analýza Rezervace
Program
Uživatel
Herec
5. Uživatelské rozhraní Hlavní stránka
Přihlášení
Program divadla
Rezervace