Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
Nowa wersja
Both sides next revision
|
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2010/06/27 21:36] ztb2010 |
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2010/07/02 11:59] ztb2010 |
| |
===== Analiza wymagań użytkownika ===== | ===== Analiza wymagań użytkownika ===== |
| |
| **Wymagane** |
| * Rejestracja nowych użytkowników |
| * Zarządzanie kontem(przypomnienie hasła) |
| * Przeglądanie katalogu znaczków |
| * Wyszukiwanie znaczków po numerze katalogowym |
| * Widok szczegółowy znaczka, komentarze, opinie |
| * Dodawanie nowego znaczka do bazy |
| * Moderacja wpisów przez administratora/moderatora |
| * Łatwe dodawanie wpisów na stronie głównej |
| * Ciekawy layout/design, elementy pozostałe(FAQ, Regulamin) |
| |
| **Opcjonalne** |
| * Oferta okresowej subskrypcji katalogu(przyszłość) |
| * Sondy, badanie preferencji użytkowników |
| * Dodanie nieintruzywnych reklam |
| * Monitorowanie aktywności odwiedzin |
| |
| |
| |
| |
===== Określenie scenariuszy użycia ===== | ===== Określenie scenariuszy użycia ===== |
| |
| ** Scenariusze dla gościa ** |
| * Rejestracja w serwisie |
| * Przeglądanie katalogu |
| * Wyszukiwanie po numerze katalogowym |
| * Generowanie PDF ze szczegółami wpisu z katalogu |
| * Przegląd informacji o serwisie (FAQ/Regulamin/Kontakt) |
| * Wysłanie wiadomości kontaktowej |
| |
| ** Scenariusze dla użytkownika ** |
| * Logowanie/Wylogowywanie |
| * Przypomnienie hasła |
| * Dodawanie wpisu do katalogu |
| * Przeglądanie katalogu |
| * Wyszukiwanie po numerze katalogowym |
| * Generowanie PDF ze szczegółami wpisu z katalogu |
| * Dodawanie komentarzy do wpisu |
| * Przegląd informacji o serwisie (FAQ/Regulamin/Kontakt) |
| * Wysłanie wiadomości kontaktowej |
| |
| ** Scenariusze dla administratora/moderatora ** |
| * Logowanie/Wylogowywanie |
| * Dodawanie/edycja/usuwanie wiadomości na stronie głównej |
| * Zarządzanie wpisami w katalogu |
| * Dodawanie komentarzy do wpisu |
| * Weryfikacja/unieważnianie dodanych przez użytkowników wpisów |
| * Przegląd logów i statystyk |
| |
| ** Diagram przypadków użycia ** |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:use_case_diagam.png|}} |
| |
===== Identyfikacja funkcji ===== | ===== Identyfikacja funkcji ===== |
| |
| * Logowanie/wylogowywanie z serwisu |
| * Rejestracja konta użytkownika |
| * Dodawanie wpisów na stronie głównej przez administratora |
| * Dodanie/usunięcie/modyfikacja informacji o znaczkach |
| * Generowanie dokumentu PDF dla danego znaczka |
| * Moderacja (uprawnienie dla użytkownika) wpisów w bazie znaczków |
| * Backup bazy danych |
| |
===== FHD - Diagram hierarchii funkcji ===== | ===== FHD - Diagram hierarchii funkcji ===== |
===== DFD - Diagram przepływu danych ===== | |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:fhd.png|}} |
| |
| ===== Budowa i analiza diagramu przepływu danych ===== |
| |
| === Diagram kontekstowy === |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:diagram_kontekstowy.png|}} |
| |
| === Diagram główny === |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:diagram_glowny.png|}} |
| |
| == 1.Obsługa użytkownika niezarejestrowanego == |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:uzytkownik_niezarejestrowany_dfd.png|}} |
| |
| == 2.Obsługa użytkownika zarejestrowanego == |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:uzytkownik_zarejestrowany_dfd.png|}} |
| |
| == 3.Obsługa administratora == |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:administratror_dfd.png|}} |
===== Diagram STD - State Transition Diagram ===== | ===== Diagram STD - State Transition Diagram ===== |
| |
| Diagram przejść stanów systemu: |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:state_transistion_diagram.png|}} |
| |
===== Projektowanie tabel ===== | ===== Projektowanie tabel ===== |
| |
| <code sql> |
| CREATE TABLE IF NOT EXISTS `admin` ( |
| `admin_name` varchar(20) CHARACTER SET utf8 NOT NULL, |
| `admin_pass` varchar(32) CHARACTER SET utf8 NOT NULL, |
| `admin_email` varchar(60) CHARACTER SET utf8 NOT NULL |
| ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; |
| |
| CREATE TABLE IF NOT EXISTS `users` ( |
| `user_name` varchar(20) CHARACTER SET utf8 NOT NULL, |
| `user_pass` varchar(32) CHARACTER SET utf8 NOT NULL, |
| `user_email` varchar(60) CHARACTER SET utf8 NOT NULL |
| ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; |
| |
| CREATE TABLE IF NOT EXISTS `users_not_confirmed` ( |
| `users_not_confirmed_name` varchar(20) NOT NULL, |
| `users_not_confirmed_pass` varchar(32) NOT NULL, |
| `users_not_confirmed_email` varchar(60) NOT NULL |
| ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
| |
| CREATE TABLE IF NOT EXISTS `main_page_info` ( |
| `main_page_info_title` varchar(30) CHARACTER SET utf8 NOT NULL, |
| `main_page_info_msg` varchar(2048) CHARACTER SET utf8 NOT NULL, |
| `main_page_info_user` varchar(20) CHARACTER SET utf8 NOT NULL, |
| `main_page_info_date` date NOT NULL, |
| `main_page_info_time` time NOT NULL |
| ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; |
| |
| CREATE TABLE IF NOT EXISTS `poststamps` ( |
| `poststamp_id` int(4) NOT NULL, |
| `poststamp_title` varchar(256) CHARACTER SET utf8 NOT NULL, |
| `poststamp_price` float NOT NULL, |
| `poststamp_print_tech` varchar(32) CHARACTER SET utf8 NOT NULL, |
| `poststamp_tooth` varchar(11) CHARACTER SET utf8 NOT NULL, |
| `poststamp_color` varchar(32) CHARACTER SET utf8 NOT NULL, |
| `poststamp_amount` int(10) NOT NULL, |
| `poststamp_release` date NOT NULL, |
| `poststamp_additional` varchar(2048) CHARACTER SET utf8 NOT NULL, |
| `poststamp_user` varchar(20) CHARACTER SET utf8 NOT NULL, |
| `poststamp_date` date NOT NULL, |
| `poststamp_time` time NOT NULL, |
| `poststamp_checked` tinyint(1) NOT NULL |
| ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; |
| |
| CREATE TABLE IF NOT EXISTS `stamps_comments` ( |
| `stamp_comment_title` varchar(30) NOT NULL, |
| `stamp_comment_stampid` int(4) NOT NULL, |
| `stamp_comment_user` varchar(20) NOT NULL, |
| `stamp_comment_date` date NOT NULL, |
| `stamp_comment_time` time NOT NULL, |
| `stamp_comment_msg` varchar(8192) NOT NULL |
| ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
| </code> |
| |
===== Normalizacja tabel ===== | ===== Normalizacja tabel ===== |
===== Wybór Encji i ich atrybutów ===== | |
===== Diagram ERD ===== | Wydaje się, że baza danych spełnia założenia [[http://pl.wikipedia.org/wiki/Posta%C4%87_normalna_%28bazy_danych%29|3NF]]. |
| |
| * Relacja jest w pierwszej postaci normalnej, jeśli wartości atrybutów są elementarne (atomowe, niepodzielne) - są to pojedyncze wartości określonego typu, a nie zbiory wartości. Tabela reprezentująca tę relację nie zawiera powtarzających się grup informacji. Każda kolumna jest wartością skalarną (atomową), a nie macierzą lub listą czy też czymkolwiek, co posiada własną strukturę. |
| * Relacja jest w drugiej postaci normalnej wtedy i tylko wtedy gdy jest w I postaci normalnej i każda kolumna zależy funkcyjnie od całego klucza głównego (a nie np. od części klucza). |
| * Mamy z nią do czynienia wtedy i tylko wtedy, gdy tabela jest w 2NF oraz gdy wszystkie pola nie będące polami klucza głównego są od niego zależne bezpośrednio. |
| |
| |
| |
| ===== Diagram ERD oraz wybór encji i ich atrybutów ===== |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:erd_znaczki.png|ERD dla portalu o znaczkach}} |
| |
| ===== Projektowanie operacji na danych ===== |
| |
| <code php> |
| /** |
| * Dodawanie przez administratora informacji na stronie głównej portalu. |
| */ |
| $title = addslashes($POST['mainpagetopic']); |
| $msg = addslashes($POST['mainpagemsg']); |
| $user = $SESSION['login']; |
| $mysqlquery = "INSERT INTO `$database`.`main_page_info` (`main_page_info_title`, `main_page_info_msg`, `main_page_info_user`, `main_page_info_date`, `main_page_info_time`) VALUES ('$title', '$msg', '$user', CURDATE(), NOW());"; |
| mysql_query($mysqlquery); |
| |
| |
| /** |
| * Wypisywanie na stronie głównej informacji od administracji. |
| */ |
| $mysqlquery = "SELECT * FROM `main_page_info` ORDER BY `main_page_info_date` DESC, `main_page_info_time` DESC"; |
| $result = mysql_query($mysqlquery); |
| |
| |
| /** |
| * Wprowadzanie informacji o znaczku do bazy (dodawnie nowego znaczka oraz modyfikacja istniejącego). |
| */ |
| $postid = addslashes($POST['postid']); |
| $posttitle = addslashes($POST['posttitle']); |
| $postprice = str_replace(",", ".", addslashes($POST['postprice'])); |
| $postprinttech = addslashes($POST['postprinttech']); |
| $posttooth = addslashes($POST['posttooth']); |
| $postcolor = addslashes($POST['postcolor']); |
| $postamount = addslashes($POST['postamount']); |
| $postreleasedate = addslashes($POST['postreleasedate']); |
| $postadditional = ($POST['postadditional'] == "Dodatkowe informacje") ? "" : addslashes($POST['postadditional']); |
| $user = $SESSION['login']; |
| $checked = (checkIfAdmin($SESSION['login'], $SESSION['pass'])) ? 1 : 0 ; |
| $mysqlquery = "INSERT INTO `$database`.`poststamps` (`poststamp_id`, `poststamp_title`, `poststamp_price`, `poststamp_print_tech`, `poststamp_tooth`, `poststamp_color`, `poststamp_amount`, `poststamp_release`, `poststamp_additional`, `poststamp_user`, `poststamp_date`, `poststamp_time`, `poststamp_checked`) VALUES ('$postid', '$posttitle', '$postprice', '$postprinttech', '$posttooth', '$postcolor', '$postamount', '$postreleasedate', '$postadditional', '$user', CURDATE(), NOW(), $checked);"; |
| mysql_query($mysqlquery); |
| |
| |
| /** |
| * Akceptacja/unieważnienie przez administratowa znaczka (zielona/czerwona ramka znaczka, świadcząca o jego wiarygodności). |
| */ |
| $postid = addslashes($GET['postnr']); |
| $checked = ($GET['checked'] == "true") ? 1 : 0; |
| $mysqlquery = "UPDATE `$database`.`poststamps` SET `poststamp_checked` = $checked WHERE `poststamp_id` = $postid;"; |
| mysql_query($mysqlquery); |
| |
| |
| /** |
| * Wyciąganie informacji o konkretnym znaczku. |
| */ |
| $mysqlquery = "SELECT * FROM `poststamps` WHERE `poststamp_id` = $postnr"; |
| $result = mysql_query($mysqlquery); |
| </code> |
===== Implementacja (screeny, platforma, interfejsy, uzytkowanie, przyszłośc) ===== | ===== Implementacja (screeny, platforma, interfejsy, uzytkowanie, przyszłośc) ===== |
| |
| * Strona główna |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_01.png?200}} |
| * Dodawanie informacji na stronie głównej |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_02.png?200}} |
| * Katalog znaczków - strona informacyjna |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_03.png?200}} |
| * Katalog znaczków - informacje o znaczku |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_04.png?200}} |
| * Katalog znaczków - dodawanie informacji o znaczku |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_05.png?200}} |
| |
===== Literatura ===== | ===== Literatura ===== |
| |
| * [[http://www.databaseanswers.org/data_models/|Database Answers]] |
| * [[http://pl.wikipedia.org/wiki/Posta%C4%87_normalna_%28bazy_danych%29|Postać normalna (Wikipedia)]] |
| * William Kent, "A Simple Guide to Five Normal Forms in Relational Database Theory", Communications of the ACM 26(2), Feb. 1983, 120-125. |