Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2010/04/08 15:13]
ztb2010 utworzono
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
-[[dawid.boisse@gmail.com|Dawid Boisse]]+[[dawid.boisse@gmail.com|Dawid Boisse]], Wojciech Myśliwiec 
 + 
 +Projekt realizowano również na przedmiocie Technologie i programowanie WWW. 
 + 
 +===== Streszczenie ===== 
 +Projekt stanowi podstawę bazodanową dla projektu realizowanego z przedmiotu Technologie i Programowanie WWW. 
 +Implementacja (w ciągłej fazie rozwoju) dostępna jest pod adresem [[http://​znaczki.malopolska.pl]] 
 + 
 +===== Sforumułowanie zadania projektowego ===== 
 + 
 +Celem projektu jest stworzenie serwisu dla filatelistów,​ który umożliwiałby im monitorowanie nowości i zmian na polskim rynku filatelistycznym. Elektroniczne źródła informacji z rynku filatelistycznego bywają skąpe w informacje oraz często nieaktualizowane na bieżąco. Brakuje również prostej wymiany informacji pomiędzy sympatykami znaczków, bardzo istotnej przy kompletowaniu zasobów.  
 +Zwieńczeniem byłaby działalność gospodarcza polegająca na okresowej subskrypcji katalogu znaczków drogą elektroniczną. 
 +W obecnej chwili wymagane jest fizyczne przeszukiwanie specjalistycznych sklepów filatelistycznych,​ co w mniejszych miejscowościach nie jest takie trywialne. 
 + 
 +Wychodząc naprzeciw potrzebom, nasz portal miałby pełnić funkcję podstawowego źródła wyżej wymienionych informacji. Chcielibyśmy przy tym stworzyć szansę wzrostu popularności tego hobby poprzez ułatwienie dostępu do informacji dla potencjalnych zainteresowanych.  
 + 
 +Użytkownicy w serwisie będą posiadali możliwość przeglądania katalogu online (zamiast w formie papierowej),​ wymiany informacji poprzez forum oraz komentarze o wszelkich aspektach działalności hobbystycznej oraz docelowo zamawiania katalogu drogą elektroniczną(w przyszłości). 
 + 
 +Pozyskanie większej ilości odwiedzić będzie motywacją do dalszego rozwoju serwisu, pozyskania środków finansowych z odwiedzin strony oraz przyciągania nowych osób do filatelistyki w Polsce. 
 + 
 +===== Analiza stanu wejściowego ===== 
 + 
 +W polskim internecie istnieje niewiele rozwiązań dedykowanych filatelistom. Najbardziej popularnym jest [[http://​kzp.pl|Katalog znaczków pocztowych]] oraz serwis [[http://​www.filatelistyka.org/​|Filatelistyka.org]]. O ile pierwszy z wymienionych wydaje się obejmować zbliżoną funkcjonalność,​ jednak w nieco bardziej ogólnym zakresie, o tyle drugi jest portalem generalnie traktującym o filatelistyce,​ a nie konkretnie ukierunkowanym na katalog znaczków w formie online.  
 +Obie strony są projektami niekomercyjnymi. 
 + 
 +===== 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 ===== 
 + 
 +** 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 ===== 
 + 
 +   * 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 ===== 
 + 
 +{{:​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 przejść stanów systemu: 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​state_transistion_diagram.png|}} 
 + 
 +===== 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 ===== 
 + 
 +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 ===== 
 + 
 +Do połączenia z bazą danych korzystaliśmy z prostej funkcji PHP, dla której wcześniej zdefiniowaliśmy parametry do łączenia z bazą danych 
 +<code php> 
 +/** 
 + * Dane do łączenia z bazą danych. Jest to także miejsce, gdzie należy je zmienić, by portal łączył się 
 + * z naszą bazą danych. 
 + *  
 + * @param hostname nazwa hosa, gdzie znajduje się baza danych 
 + * @param username nazwa użytkownika,​ który łączy się z bazą 
 + * @param password hasło do bazy danych 
 + * @param database baza danych 
 + */ 
 +$hostname = "​host";​ 
 +$username = "​uzytkownik";​ 
 +$password = "​haslo";​ 
 +$database = "​baza";​ 
 + 
 + 
 +/** 
 + * Połączenie z bazą danych. 
 + */ 
 +$connection = mysql_connect($host,​$db_user,​$db_pass);​ 
 +mysql_select_db($db);​ 
 +</​code>​ 
 +Same zapytania do bazy danych były wykonywane w najprostszy sposób: 
 +<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>​ 
 +Po wykonaniu wszystkich zapytań połączenie z bazą danych jest zawsze zamykane: 
 +<code php> 
 +/** 
 + * Zakończenie połączenia z bazą danych. 
 + */ 
 +if(!$connection) { 
 +    mysql_close($connection);​ 
 +} /​*if(!$connection)*/​ 
 +</​code>​ 
 + 
 +===== 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 ===== 
 + 
 +  * [[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.
pl/dydaktyka/ztb/2010/projekty/znaczki/start.1270732386.txt.gz · ostatnio zmienione: 2019/06/27 15:56 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0