Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2010/04/08 15:13]
ztb2010
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 [[dawid.boisse@gmail.com|Dawid Boisse]], Wojciech Myśliwiec [[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.1270732403.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