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 Katalog znaczków pocztowych oraz serwis 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

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

Budowa i analiza diagramu przepływu danych

Diagram kontekstowy

Diagram główny

1.Obsługa użytkownika niezarejestrowanego

2.Obsługa użytkownika zarejestrowanego

3.Obsługa administratora

Diagram STD - State Transition Diagram

Diagram przejść stanów systemu:

Projektowanie tabel

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;

Normalizacja tabel

Wydaje się, że baza danych spełnia założenia 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

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

/**
 * 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);

Same zapytania do bazy danych były wykonywane w najprostszy sposób:

/**
 * 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);

Po wykonaniu wszystkich zapytań połączenie z bazą danych jest zawsze zamykane:

/**
 * Zakończenie połączenia z bazą danych.
 */
if(!$connection) {
    mysql_close($connection);
} /*if(!$connection)*/

Implementacja (screeny, platforma, interfejsy, uzytkowanie, przyszłośc)

  • Strona główna

  • Dodawanie informacji na stronie głównej

  • Katalog znaczków - strona informacyjna

  • Katalog znaczków - informacje o znaczku

  • Katalog znaczków - dodawanie informacji o znaczku

Literatura

pl/dydaktyka/ztb/2010/projekty/znaczki/start.txt · ostatnio zmienione: 2017/07/17 08:08 (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