Aurora Borealis - Recreation Center
Projekt konceptualny
Przedmiotem projektu jest stworzenie strony internetowej centrum sportowego, które umożliwiałoby
klientom wynajem boisk piłkarskich oraz ewentualny udział w prowadzonej przez
centrum lidze lub też dodatkowe atrakcje w zależności od potrzeb klienta. Wybór tematu
opiera się na fakcie dużego zainteresowania współczesnego społeczeństwa aktywnościami fizycznymi,
chęci dbania o własne ciało, miłego spędzenia czasu z kolegami, zwykłego poruszania
się. Podobnie firmy w trosce o pracowników starają się im zapewnić rekreację czyniąc ją jeszcze
bardziej kuszącą z powodu jej darmowości, załatwionej orgranizacji i gwarancji chętnych
do udziału osób. Z tego powodu niejedno centrum sportowe musi umieć się zareklamować,
wyjaśnić dlaczego stanowi idealne miejsce na takie rozgrywki i czym sie wyróżnia.
Najprostszym, najcelniejszym środkiem może okazać sie właśnie strona internetowa wprowadzająca
potencjalnych graczy w ofertę, której właśnie szukali. Ciekawym dodatkiem jest
możliwość prowadzenia rozgrywek w centrum, czyli pozwolenie graczom zmierzyć sie z innymi
drużynami, zmotywować ich do bardziej zaciekłej walki i ogólnie do samej gry. Różne poziomy
rozgrywek zapewniają ogólnie dobre, wyrównane mecze, aby czerpana przyjemność była
dla wszystkich jak największa. Dla użytkowników oraz administratora będą udostępnione wygodne
narzędzia użyteczne w przęgladaniu różnorodnych treści dotyczących ligi, zarządzania
drużynami, wynikami, terminami rozgrywek oraz temu podobnymi.
2. Analiza stanu wejściowego
System w całości będzie realizowany od podstaw, wszelkie dane będą uzupełniane ręcznie w
miarę realistycznymi informacjami. Z tego powodu nie istnieją żadne dokumenty, raporty
umożliwiające analizę realizowanego projektu, lecz będą tworzone wraz z postępem prac. W
pierwszej fazie system ma pełnić rolę demonstracyjną stąd wykorzystywana baza danych nie
wymaga żadnych dodatkowych uprawnień, pozwoleń i jest w pełni legalna, choć wymusza
włożenie większego wysiłku w stworzenie danych testowych.
3. Analiza wymagań użytkownika
Wymagania funkcjonalne
Przeglądanie
Zarządzanie
użytkownikami
boiskami i rezerwacjami
własną drużyną
danymi rozgrywek
galerią
Wymagania techniczne
System będzie dostępny w formie aplikacji sieciowej przez co po uruchomieniu na dowolnym
serwerze(w wersji demonstracyjnej jetty) można z niego korzystać przy użyciu przeglądarki
internetowej. Pozwala to na dużą niezależność platformową i minimalne wymagania sprzętowe.
Wymagania dotyczące dostępu, obsługi, administracji, utrzymywalności
Dostęp do systemu odbywa się przez wybrany adres url oraz przeglądarkę internetową, dostarczaną
przez każdy system operacyjny. Natomiast samo działanie aplikacji uzależnione jest w
dużym stopniu od serwera aplikacji.
Wymagania niezawodności i bezpieczeństwa
Bezpieczeństwo zapewnione jest przez wymuszoną autoryzację konieczną do otrzymania odpowiednich
uprawnień użytkownika lub administratora pozwalających na korzystanie z bardziej
zaawansowanych funkcjonalności. Niezawodność systemu oparta jest na niezawodności wybranego
serwera.
4. Scenariusze użycia
Podstawowe scenariusze użycia:
Dla użytkownika
Rezerwacja boiska:
. Użytkownik wybiera z menu stronę 'Rezerwacje'.
. System wyświetla stronę wraz z kalendarzem ustawionym na dzień dzisiejszy.
. Użytkownik wybiera miesiąc, w którym interesuje go złożenie rezerwacji.
. Użytkownik naciska na dzień w kalendarzu.
. System wyświetla panel popup z tabela zawierającą możliwe godziny rezerwacji.
. Użytkownik naciska przycisk 'Zarezerwuj' w wierszu z wybraną godziną.
. System wyświetla potwierdzenia złożenia rezerwacji.
Edycja konta:
. Użytkownik wybiera z menu stronę 'Edycja profilu'.
. System wyświetla szczegółowe dane użytkownika.
. Użytkownik zmienia wybrane pola.
. Użytkownik potwierdza zmiany wciskając przycisk 'Zapisz'.
. System sprawdza poprawność wprowadzonych zmian.
. System zapisuje zmiany w bazie.
Edycja danych drużyny:
. Użytkownik wybiera z menu stronę 'Moja drużyna'.
. System wyświetla stronę na podstawie zalogowanego użytkownika.
. Użytkownik zmienia dowolne dane osób z drużyny.
. Użytkownik potwierdza zmiany przyciskiem zapisz.
. System zapisuje po walidacji zapisuje zmiany.
Dla administratora
Edycja rezerwacji:
. Administrator wybiera z menu stronę 'Rezerwacje'.
. System wyświetla stronę z kalendarzem ustawionym na dzień dzisiejszy.
. Administrator wybiera miesiąc wprowadzania zmian.
. Administrator naciska na dzień do edycji.
. System wyświetla panel popup z tabelą złożoną z możliwych godzin wynajmu, rezerwacji i opisu.
. Administrator edytuje zmiany, usuwa wybrane wiersze.
. Administrator zapisuje zmiany.
Planowanie rozgrywek:
. Administrator wybiera z menu stronę 'Rozgrywki'.
. System wyświetla stronę z rozgrywek dla dzisiejszego dnia.
. Administrator wybiera z kalendarza rozpatrywany dzień rozgrywek.
. Administrator z panelu drużyn przeciąga odpowiednie drużyny do tabeli meczy.
. Administrator uzupełnia godziny rozgrywek.
. Administrator potwierdza zmiany.
. System zapisuje wprowadzone dane.
Dodawanie kar:
. Administrator wybiera z menu stronę 'Kary'
. System wyświetla stronę z listą kar.
. Administrator poprzez przycisk dodaj wyświetla panel dodawania kary.
. System wyświetla panel.
. Administrator uzupełnia dane kary oraz potwierdza przyciskiem zapisz.
. System zapisuje dane oraz zamyka panel.
5. Identyfikacja funkcji
System opiera się na bazie PostgreSQL, gdzie będzie przechowywał wszystkie
informacje. W tym celu potrzebne są proste operacje tworzenia, edycji tabel oraz formułowania
odpowiednich zapytań. Składają się na to instrukcje CREATE TABLE, INSERT INTO,
SELECT, do których dostęp umożliwi framework Hibernate poprzez stworzone encje, obiekty
DAO, menedżery, zarzadzające dostępem do tych tabel (mapowanie ORM do obiektów Java).
6. Analiza hierarchii funkcji projektowanej aplikacji
7. Budowa i analiza diagramu przepływu danych
8. Encje i atrybuty
W projekcie bazy danych wyróżniono następujące encje:
Użytkownicy (id, nazwa, telefon, adres, nr dowodu, uprawnienie, id zawodnika)
Uprawnienia (id, nazwa, opis)
Grupy (id, nazwa, opis)
Zawodnicy (id, imię, nazwisko, pesel, email, id drużyny)
Drużyny (id, id grupy, nazwa, opis, kolor)
Mecze (id, data, id pierwszej drużyny, id drugiej drużyny)
Bramki (id, id zawodnika, id meczu, czas)
Kary (id, id zawodnika, id meczu, opis, czas trwania)
Zgłoszenia (id, id zawodnika, id meczu, status)
Rezerwacje (id rezerwacji, data, id użytkownika, opis)
Dni wolne (id, nazwa, data)
9. Projektowanie powiązań (relacji) pomiędzy encjami
10. Projekt diagramu STD
Projekt logiczny
11. Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. w oparciu o zdefiniowany diagram ERD
12. Słowniki danych
client_roles
client_role_id - wymagane, liczba całkowita
client_role_description - łańcuch znaków
client_role_name - łańcuch znaków
clients
client_id - wymagane, liczba całkowita
client_address - łańcuch znaków
client_document - łańcuch znaków
client_phone - łańcuch znaków
client_username - wymagane, łańcuch znaków
client_player_id - wymagane, liczba całkowita
client_role_id - wymagane, liczba całkowita
daysoff
goals
goal_id - wymagane, liczba całkowita
goal_minute - liczba całkowita
goal_match_id - wymagane, liczba całkowita
goal_player_id - wymagane, liczba całkowita
matches
match_id - wymagane, liczba całkowita
match_date - data z czasem
match_first_team - wymagane, liczba całkowita
match_second_team - wymagane, liczba całkowita
notifications
notification_id - wymagane, liczba całkowita
notification_readiness - wartość logiczna
notification_match_id - wymagane, liczba całkowita
notification_player_id - wymagane, liczba całkowita
penalties
penalty_id - wymagane, liczba całkowita
penalty_description - łańcuch znaków
penalty_expiration_date - data,
penalty_match_id - wymagane, liczba całkowita
penalty_player_id - wymagane, liczba całkowita
players
player_id - wymagane, liczba całkowita
player_email - łańcuch znaków
player_first_name - łańcuch znaków
player_last_name - łańcuch znaków
player_nationalid - łańcuch znaków
player_team_id - wymagane, liczba całkowita
reservations
reservation_id - wymagane, liczba całkowita
reservation_date - data z czasem
reservation_description - łańcuch znaków
reservation_client_id - wymagane, liczba całkowita
team_groups
team_group_id - wymagane, liczba całkowita
team_group_description - łańcuch znaków
team_group_name - łańcuch znaków
teams
team_id - wymagane, liczba całkowita
team_colour - łańcuch znaków
team_description - łańcuch znaków
team_name - łańcuch znaków
team_group_id - wymagane, liczba całkowita
13. Analiza zależności funkcyjnych i normalizacja tabel
Rozpatrywanie wszystkich tabel ze względu na kolejne postacie normalne:
Wszystkie wartości atrybutów są atomowe, więc zgodnie z definicją warunek postaci 1NF spełniony.
Każdy atrybut niekluczowy jest w pełni funkcyjnie zależny od klucza głównego (oraz baza w postaci 1NF), więc warunek postaci 2NF jest spełniony.
W bazie nie występują żadne zależności funkcyjne pomiędzy dowolną kolumną i inną kolumną nie będącą kluczem głównym tej tabeli - warunek postaci 3NF spełniony. (2NF także)
Warunek czwartej postaci normalnej nie został spełniony, gdyż w bazie istnieją wielokrotne, wielowartościowe zależności
funkcjonalne. Na cele aplikacji nie potrzeba dalszej normalizacji bazy danych, natomiast w obecnym stanie bardzo dobrze odzwierciedla model ukazywany w wartstwie prezentacji.
Z powodu braku 4NF, wykluczona została także postać 5NF.
14. Projektowanie operacji na danych
select * from clients where client_player_id=?
select * from clients where userName=?
select * from daysoff where month(date)=? and year(date)=?
select * from goals where goal_player_id=?
select * from goals where match=? and player_team_id=?
select * from Match where match_first_team_id=? or match_second_team_id=?
select * from Match where day(date)=? and month(date)=? and year(date)=?
select * from Notification where notification_player_id=?
select * from Penalty where penalty_player_id=?
select * from Player where player_team_id=?
select * from Reservation where month(date)=? and year(date)=?
select * from Reservation where day(date)=? and month(date)=? and year(date)=?
select * from Team where team_group_id=?
Raport końcowy
15. Implementacja bazy danych
Bazę danych można stworzyć za pomocą podanego wcześniej skryptu zgodnego z językiem bazy PostgreSQL:
Skrypt SQL
W przypadku środowiska developerskiego zakładającego budowanie projektu w oparciu o narzędzie Apache Maven, ręczna implementacja bazy jest niepotrzebna. Podczas budowania modułu core aplikacji na podstawie zdefiniowanych encji zostają automatycznie stworzone odpowiednie struktury w bazie danych. Obowiązkowo należy zwrócić uwagę na plik mapowania encji oraz właściwości projektu dotyczące wybranej bazy danych (np. driver, lokalizacja bazy).
16. Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych
Formularze można podzielić ze względu na ich docelowego odbiorcę: użytkownika, administratora lub wspólne. W większości przypadków użytkownik może tylko przeglądać dane, dodawać ewentualne wpisy, podczas gdy administrator kontroluje całość zapisów.
17. Zdefiniowanie panelu sterowania aplikacji
Sterowanie aplikacją będzie odbywało się poprzez menu tworzone na podstawie ról nadanych użytkownikowi z uwagi na różny rodzaj uprawnień - np. użytkownik może edytować swój profil, a administrator widzi listę użytkowników.
Widok panelu:
18. Wprowadzanie danych
Przykładowe dane zostały wprowadzone do aplikacji i są dodawane do bazy przy budowaniu projektu. W rzeczywistości dane jednak będzie można wprowadzać na dwa sposoby:
udostępnione formularze - logika zawarta w formularzach pozwala na dodawanie danych ograniczonych przez założenia formularza, jednak z powodu ograniczenia czasowego formularze nie obsługują wszystkich możliwych danych które użytkownik może zechcieć wprowadzić. Wprowadzane dane powinny wystarczyć dla potencjalnego użytkownika.
insert do bazy - tworzenie odpowiednich zapytań, skryptów jest w pełni kompatybilne z działającą aplikacją i pozwala dodać dane nie obsłużone przez formularze (np. nowy użytkownik) lub w przypadku problemów innego rodzaju edycję.
19. Rozwijanie i modyfikowanie aplikacji
Aplikacja została utworzona w technologii Java EE przy użyciu dość popularnego narzędzia Apache Maven oraz framework'u Appfuse (w nim zawarte: Hibernate, Spring, JSF i inne), przez co dalszy rozwój aplikacji jest uzależniony od tych narzędzi. Modyfikacja aplikacji wymaga przynajmniej podstawowej znajomości technologii obecnej w zmienianym module - dla bazy danych jest to np. Hibernate.
Obecny stan aplikacji pozwala na łatwy dalszy rozwój dzięki możliwości wzorowania się na zastosowanych rozwiązaniach, powielania ich do osiągnięcia satysfakcjonującego rezultatu.
Budowanie projektu skutkuje stworzeniem paczki war możliwej do uruchomienie na dowolnym serwerze aplikacji (np. Apache Tomacat będący kontenerem serwletów). Jeśli aplikacja nie jest budowana na danym środowisku przy użyciu Apache Maven to należy całą bazą danych stworzyć ręcznie przy użyciu skryptu. Możliwe jest także dzięki zastosowaniu profilów wykorzystanie innej bazy danych.
20. Opracowanie doświadczeń wynikających z realizacji projektu
Realizacja projektu odbyła się w oparciu o znane technologie co pozwoliło na jego w miarę szybki, bezproblemowy rozwój. Wyeliminowało to trudności związane z poznawaniem technologii, szukaniem optymalnego rozwiązania danego problemu, optymalizacji kodu i tym podobnych. Podobnie dokładne oszacowanie kosztu prac, ograniczeń systemu i funkcjonalności ograniczyło dodatkowe nakłady pracy czy różnego rodzaje zastoje spowodowane brakiem idei na dalszą rozbudowę.
Nowym wymaganym aspektem projektu okazała się jego dokładna dokumentacja definiująca cały przebieg. Dodatkowy czas poświęcony na jej sporządzenie, dopracowanie umożliwia swobodniejsze tworzenie samej aplikacji w oparciu o gotowe schematy, diagramy. Zazwyczaj tworzone projekty były tworzone na bieżąco przez co kształt aplikacji mógł się bardzo zmieniać, w zależności od nowo powstałych potrzeb, czasem bardzo uciążliwych do zrealizowania. Dzięki wcześniejszemu przemyśleniu co należy stworzyć, w jaki sposób ma to działać i co dostarczać wszystkie funkcjonalne problemy były rozwiązane na samym początku. W przypadku poważnego problemu dotyczącego aplikacji dużo prościej jest przebudować sam koncept, kilka diagramów niż przepisywać część aplikacji, usilnie zmuszać moduły do współpracy.
21. Wykaz literatury, załączniki