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:minibus:start [2010/05/31 18:13]
ztb2010
pl:dydaktyka:ztb:2010:projekty:minibus:start [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Ogólnopolska baza połączeń minibusowych ====== ====== Ogólnopolska baza połączeń minibusowych ======
-  * Autorzy: **Jakub Gorzała, Łukasz Kowalski**+ Autorzy: **Jakub Gorzała, Łukasz Kowalski**
  
 ---- ----
 ===== 1. Sformułowanie zadania projektowego ===== ===== 1. Sformułowanie zadania projektowego =====
-Sformułowanie zadania projektowego:​ podanie ​przedmiotu ​projektowania,​ jego celów, przeglądu zadań, specyfiki i uwarunkowań.+Projekt bazy danych, która będzie wykorzystywana w projekcie z przedmiotu ​Technologie i programowanie WWW. Projekt ten ma na celu stworzenie portalu zawierającego rozkłady jazdy minibusów z całej polski.
  
  
 ===== 2. Analiza stanu wyjściowego ===== ===== 2. Analiza stanu wyjściowego =====
-Analiza stanu wyjściowego;​ analiza stanu zastanegouwarunkowań prawnych, przyjętego obiegu istniejącej dokumentacji,​ analiza istniejącego systemu elektronicznego przetwarzania danych ​(aktualnej bazy), analiza występujących problemówetc. pomocne ​mogą być scenariusze postępowania i ich analiza (elementy, obiekty, charakterystyki,​ atrybuty, strukturaprzepływ danychpowiązania, relacje, ograniczenia funkcjonalności).+W sieci istnieje strona o podobnej tematycelecz posiada ona sporo wad. Po pierwsze jest wykonana w bardzo prostej technologii ​(zwykły html + css), jest nieczytelna przez co prezentuje się bardzo nie atrakcyjnie i nie wzbudza zainteresowania. Nie jest aktualizowanawięc informacje na niej zawarte ​mogą być mylące dla użytkowników. Strona w głównej mierze jest zbiorem linków do poszczególnych przewoźnikówa nie centralnym zbiorem rozkładówprzez co wyszukiwanie interesującego połączenia jest trudne. Storna nie posiada możliwości wystawiania opinii ani komentarzy przewoźnikom,​ a takie informacje mogły by być przydatne.
  
  
 ===== 3. Analiza wymagań użytkownika (wstępna) ===== ===== 3. Analiza wymagań użytkownika (wstępna) =====
-Analiza wymagań użytkownika (wstępna); na tym etapie należy określić podstawowe cele, zadania i funkcjonalność jakie mają być realizowane ​przez projektowaną bazę danych oraz ew. wymagania dotyczące projektu i dokumentacji. Dobrze byłoby, aby ytkownik ​na bieżąco współuczestniczył ​projektowaniu i implementacji oraz wnosił swoje uwagi. Należy zidentyfikować wymagania jawne i niejawne. +Główne funkcjonalności portalu: 
 +  * zarejestrowanie nowej firmy przewozowej + podstawowych informacji adresowych 
 +  * dodanie kursów oferowanych przez tą firmę 
 +  * możliwość wyszukiwania kursów filtrując po przystankach z miejscowości A do B 
 +  * możliwość dodania komentarzy dla poszczególnych firm przez użytkowników 
 +  * moduł rejestracji ​ytkowników 
 +  * dodawanie cen biletów ​na poszczególnych trasach 
 +  * powiadomienia mailowe odnośnie nowych przewoźników w regionie bądź zmian rozkładach jazdy
  
  
 ===== 4. Określenie scenariuszy użycia ===== ===== 4. Określenie scenariuszy użycia =====
-Określenie scenariuszy ​ycia. Scenariusze ​użycia pozwolą na konstrukcję diagramów DFD i STD oraz hierarchii funkcji.+  - **Scenariusze dla Użytkownika** 
 +     - Wyszukanie połączenia:​ 
 +       * Wejście na stronę 
 +       * Przejście na zakładkę '​Szukaj busa'​ 
 +       * Wprowadzenie danych przystanku początkowego i końcowego 
 +       * Podanie godziny odjazdu lub przyjazdu 
 +       * Uruchomienie wyszukiwania i przeglądnięcie wyników 
 +     - Założenie konta: 
 +       * Wejście na stronę 
 +       * Kliknięci w panel '​Rejestracja!'​ 
 +       * Wprowadzenie danych ​ytkownika 
 +       * Potwierdzenie założenia konta 
 +  - **Scenariusze ​dla Użytkownika posiadającego firmę** 
 +     - Założenie firmy 
 +       * Wejście ​na stronę 
 +       * Zalogowanie się 
 +       * Kliknięcie w panel 'Dodaj firmę'​ 
 +       * Wprowadzenie nazwy firmy oraz maila firmowego 
 +       * Potwierdzenie dodania firmy 
 +     - Wprowadzenie trasy 
 +       * Wejście na stronę 
 +       * Zalogowanie się 
 +       * Wybranie zakładki 'Dodaj linię'​ 
 +       * Wprowadzenie kolejnych przystanków,​ czasów odjazdu oraz cen biletów 
 +       * Potwierdzenie dodania linii      
 +     - Zarządzanie trasami 
 +       * Wejście na stronę 
 +       * Zalogowanie się 
 +       * Wybranie zakładki '​Połączenia'​ 
 +       * Edycja/​usuwanie zdefiniowanych połączeń
  
  
 ===== 5. Identyfikacja funkcji ===== ===== 5. Identyfikacja funkcji =====
-Identyfikacja funkcji. Określenie podstawowych funkcji realizowanych w bazie danych +Baza danych ​będzie przechowywać informacje o: 
 +   * kontach użytkowników 
 +   * zarejestrowanych firmach 
 +   * przystankach 
 +   * zdefiniowanych połączeniach 
 +   * opiniach o firmie
  
  
 ===== 6. Analiza hierarchii funkcji projektowanej aplikacji (FHD – Functional Hierarchy Diagram) ===== ===== 6. Analiza hierarchii funkcji projektowanej aplikacji (FHD – Functional Hierarchy Diagram) =====
-Analiza hierarchii funkcji projektowanej aplikacji (FHD – Functional Hierarchy Diagram); określenie struktury zależności hierarchicznych pomiędzy jednostkami analizowanego systemu, zwłaszcza w zakresie specyfikacji wymagań funkcjonalnych. Specyfikacja funkcji (funkcjonalności) projektowanego systemu.+{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​fhd.png|}}
  
  
 ===== 7. Budowa i analiza diagramu przepływu danych (DFD – Data Flow Diagram) ===== ===== 7. Budowa i analiza diagramu przepływu danych (DFD – Data Flow Diagram) =====
-Budowa i analiza diagramu przepływu danych (DFD – Data Flow Diagram); ma na celu określenie przepływu danych (wejścia, wyjścia, operacje, przechowywanie) oraz elementów sterowania tym przepływem, co może być pomocne dla tworzenia aplikacjiSpecyfikacja danych wejściowych i wyjściowych.+   * Level 0 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dfd_1.png|}} 
 + 
 +   * Level 1 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dfd_2.png|}} 
 + 
 +   * Level 2 - Wyszukiwanie busa 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dfd_3_1.png|}} 
 + 
 +   * Level 2 - Zarządzanie połączeniami 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dfd_3_2.png|}} 
 + 
 +   * Level 2 - Dodawanie komentarza 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dfd_3_3.png|}} 
  
 ===== 8. Wybór encji (obiektów) i ich atrybutów ===== ===== 8. Wybór encji (obiektów) i ich atrybutów =====
 +<code java>
 +@Entity
 +@Table(name="​COMPANIES"​)
 +@NamedQueries({
 +@NamedQuery(name="​findCompanyByName",​ query="​SELECT c FROM Company c WHERE c.name = :​name"​),​
 +@NamedQuery(name="​findCompanyByOwnerName",​ query="​SELECT c FROM Company c WHERE c.owner.name = :​name"​)
 +})
 +public class Company implements Serializable {
  
 + private static final long serialVersionUID = 5074588959885714521L;​
 +
 + @GeneratedValue(strategy=GenerationType.AUTO)
 + private long companyid;
 +
 + @Column(nullable=false)
 + private String name;
 +
 + @Column(nullable=false)
 + private String mail;
 +
 + @ManyToOne
 + private User owner;
 +
 + @OneToMany(mappedBy="​company",​ targetEntity=Opinion.class,​ cascade=CascadeType.ALL,​ fetch=FetchType.EAGER)
 + private Set<​Opinion>​ opinions;
 +
 + @OneToMany(mappedBy="​owner",​ targetEntity=Course.class,​ cascade=CascadeType.ALL,​ fetch=FetchType.LAZY)
 + private Set<​Course>​ courses;
 +}
  
-===== 9Projektowanie powiązań ​(relacjipomiędzy encjami ​===== + 
-Projektowanie powiązań ​(relacjipomiędzy encjamiKonstrukcja diagramu ERD (Entity-Relationship Diagram); jest to zasadniczy etap procesu projektowania struktury bazy danychIdentyfikacja klas encjiich atrybutówzdefiniowanie ​(określeniekluczyTablica krzyżowa powiązańeliminacja ​powiązań ​wiele-do-wielu. Konstrukcja diagramu ​ERD.+@Entity 
 +@Table(name="​COURSES"​) 
 +@NamedQuery(name="​findCourseByCompany",​ query="​SELECT c FROM Course c WHERE c.owner.name ​:​name"​) 
 +public class Course implements Serializable { 
 + 
 + private static final long serialVersionUID ​3008699718560976506L;​ 
 +  
 + @GeneratedValue(strategy=GenerationType.AUTO) 
 + private long courseid 
 +  
 + @OneToOne 
 + private Company owner; 
 +  
 + @Column(nullable=true) 
 + private String description;​ 
 +  
 + @OneToMany(mappedBy="​course",​ targetEntity=Stop.class, cascade=CascadeType.ALL,​ fetch=FetchType.EAGER) 
 + private List<​Stop>​ stops; 
 +
 + 
 + 
 +@Entity 
 +@Table(name="​OPINIONS"​) 
 +@NamedQuery(name="​findOpinionByCompany",​ query="​SELECT o FROM Opinion o WHERE o.company.name = :name") 
 +public class Opinion implements Serializable { 
 + 
 + private static final long serialVersionUID = 2475121744579807544L;​ 
 + 
 + @GeneratedValue(strategy=GenerationType.AUTO) 
 + private long opinionid;​ 
 +  
 + @ManyToOne 
 + private Company company; 
 +  
 + @Column(nullable=true) 
 + private boolean positive; 
 +  
 + @Column(nullable=true) 
 + private String description;​ 
 +
 + 
 + 
 +@Entity 
 +@Table(name="​PLACES"​) 
 +@NamedQueries({ 
 +@NamedQuery(name="​findPlaceByName",​ query="​SELECT p FROM Place p WHERE p.city = :city AND p.name = :​name"​), 
 +@NamedQuery(name="​autocompletePlace"​query="​SELECT p FROM Place p WHERE p.city LIKE :city AND p.name LIKE :​name"​),​ 
 +@NamedQuery(name="​autocompletePlaceByCity",​ query="​SELECT p FROM Place p WHERE p.city LIKE :city")
 +@NamedQuery(name="​autocompletePlaceByName",​ query="​SELECT p FROM Place p WHERE p.name LIKE :​name"​) 
 +}) 
 +public class Place implements Serializable { 
 + 
 + private static final long serialVersionUID = 7561920390812143011L;​ 
 +  
 + @GeneratedValue(strategy=GenerationType.AUTO) 
 + private long placeid; 
 +  
 + @Column(nullable=false) 
 + private String city; 
 +  
 + @Column(nullable=false) 
 + private String name; 
 +  
 + @Column(nullable=true) 
 + private BigDecimal lon; 
 +  
 + @Column(nullable=true) 
 + private BigDecimal lat; 
 +
 + 
 + 
 +@Entity 
 +@Table(name="​STOPS"​) 
 +@NamedQuery(name="​findStopByPlace"​query="​SELECT s FROM Stop s WHERE s.place.city = :city and s.place.name = :​name"​) 
 +public class Stop implements Serializable { 
 + 
 + private static final long serialVersionUID = 2015220800633676479L;​ 
 +  
 + @GeneratedValue(strategy=GenerationType.AUTO) 
 + private long stopid; 
 +  
 + @ManyToOne 
 + private Course course; 
 +  
 + @OneToOne 
 + private Place place; 
 +  
 + @Column(nullable=false) 
 + private int orderNumber;​ 
 +  
 + @Column(nullable=true) 
 + private BigDecimal cost; 
 +  
 + @Column(nullable=true) 
 + private String hours; 
 +
 + 
 + 
 +@Entity 
 +@Table(name="​USERS"​) 
 +public class User implements Serializable { 
 + 
 + private static final long serialVersionUID = 8651753619995718647L;​ 
 +  
 + @GeneratedValue(strategy=GenerationType.AUTO) 
 + private long userid; 
 +  
 + @Column(nullable=false) 
 + private String name; 
 +  
 + @Column(nullable=false) 
 + private String password; 
 +  
 + @Column(nullable=false) 
 + private String mail; 
 +  
 + @Column(nullable=false) 
 + private int role = 1; 
 +  
 + @OneToMany(mappedBy="​owner",​ targetEntity=Company.class,​ cascade=CascadeType.ALL,​ fetch=FetchType.EAGER) 
 + private Set<​Company>​ companies;​ 
 +
 +</​code>​ 
 + 
 +===== 9. Projektowanie ​powiązań ​(relacji) pomiędzy encjami (ERD) ===== 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​erd2.png|}}
  
  
 ===== 10. Projekt diagramów STD (State Transition Diagram) ===== ===== 10. Projekt diagramów STD (State Transition Diagram) =====
-Projekt diagramów STD (State Transition Diagram – diagramy przejść pomiędzy stanami). Wykonanie w oparciu ​scenariusze użycia strukturę bazy danych. ​Pomocny ​do budowy interfejsu aplikacji.+   * Wyszukiwanie busa 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​std1.png|}} 
 + 
 +   * Dodawanie połączenia 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​std2.png|}} 
 + 
 +===== 11. Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów ===== 
 + 
 +<code sql> 
 +CREATE TABLE companies 
 +
 +  id bigint NOT NULL, 
 +  "​name"​ character varying(255) NOT NULL, 
 +  mail character varying(255) NOT NULL, 
 +  owner_id bigint, 
 +  CONSTRAINT companies_pkey PRIMARY KEY (id), 
 +  CONSTRAINT fk51e1f1bbedbce178 FOREIGN KEY (owner_id) 
 +      REFERENCES users (id) MATCH SIMPLE 
 +      ON UPDATE NO ACTION ON DELETE NO ACTION 
 +
 + 
 + 
 +CREATE TABLE courses 
 +
 +  id bigint NOT NULL, 
 +  description character varying(255),​ 
 +  hours character varying(255),​ 
 +  owner_id bigint, 
 +  CONSTRAINT courses_pkey PRIMARY KEY (id), 
 +  CONSTRAINT fk63e4af986eae0d5e FOREIGN KEY (owner_id) 
 +      REFERENCES companies (id) MATCH SIMPLE 
 +      ON UPDATE NO ACTION ON DELETE NO ACTION 
 +
 + 
 + 
 +CREATE TABLE opinions 
 +
 +  id bigint NOT NULL, 
 +  positive boolean, 
 +  description character varying(255),​ 
 +  company_id bigint, 
 +  CONSTRAINT opinions_pkey PRIMARY KEY (id), 
 +  CONSTRAINT fk176ead31d905f754 FOREIGN KEY (company_id) 
 +      REFERENCES companies (id) MATCH SIMPLE 
 +      ON UPDATE NO ACTION ON DELETE NO ACTION 
 +
 + 
 + 
 +CREATE TABLE places 
 +
 +  id bigint NOT NULL, 
 +  city character varying(255) NOT NULL, 
 +  "​name"​ character varying(255) NOT NULL, 
 +  lon numeric(19,​2),​ 
 +  lat numeric(19,​2),​ 
 +  CONSTRAINT places_pkey PRIMARY KEY (id) 
 +
 + 
 + 
 +CREATE TABLE stops 
 +
 +  id bigint NOT NULL, 
 +  ordernumber integer NOT NULL, 
 +  "​cost"​ numeric(19,​2),​ 
 +  lag numeric(19,​2),​ 
 +  place_id bigint, 
 +  course_id bigint, 
 +  CONSTRAINT stops_pkey PRIMARY KEY (id), 
 +  CONSTRAINT fk4b9009137509994 FOREIGN KEY (place_id) 
 +      REFERENCES places (id) MATCH SIMPLE 
 +      ON UPDATE NO ACTION ON DELETE NO ACTION, 
 +  CONSTRAINT fk4b90091894e45e0 FOREIGN KEY (course_id) 
 +      REFERENCES courses (id) MATCH SIMPLE 
 +      ON UPDATE NO ACTION ON DELETE NO ACTION 
 +
 + 
 + 
 +CREATE TABLE users 
 +
 +  id bigint NOT NULL, 
 +  "​name"​ character varying(255) NOT NULL, 
 +  "​password"​ character varying(255) NOT NULL, 
 +  mail character varying(255) NOT NULL, 
 +  "​role"​ integer NOT NULL, 
 +  CONSTRAINT users_pkey PRIMARY KEY (id) 
 +) 
 + 
 + 
 +CREATE SEQUENCE hibernate_sequence 
 +  INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; 
 +</​code>​ 
 + 
 +===== 12Analiza zależności funkcyjnych i normalizacja tabel ===== 
 +Wydaje się, że baza danych spełnia załenia 3NF. Wynika to z faktu, że przechowywane w niej dane są istnotnie atomiczne - z punktu widzenia implementacji projektu. W każdej tabeli atrybuty są w pełni bezpośrednio zależne od klucza głównego. Generalnie baza była projektowana tak by przy możlie maksymalnej funkcjonalności tabel, zapewnić trzecią postać normalną. 
 + 
 +===== 13. Projektowanie operacji na danych ===== 
 +Kwerendy ​zapytania wynikają z mechanizmu mapowania obiektowo relacyjnego w j2ee i są poniekąd dostarczone przez klasę EntityManager standardu JPA Hibernate. Pozostałe zapytania w celu optymalizacji wydajności pracy aplikacji zrealizowane zostały jako NamedQuery - zapytania prekompilowane i stworzone przy użyciu składni HQL - Hibernate Query Language. Można je zobaczyć nad kodem encji do których przynależą. 
 + 
 + 
 +===== RAPORT KOŃCOWY ===== 
 + 
 +===== 14. Stos technologiczny ===== 
 +Aplikacja zrealizowana jest na bazie wzorca projektowego MVC (model widok kotroller). 
 +Sklada sie z 3 wyraznie wyrożnionych warstw: 
 +  * baza danych - Postrgres 8.3, Mapowanie relacyjno obiektowe standard Java JPA Persistence 
 +  * logika biznesowa - Zrealizowana za pomocą technologii EJB 3.0 
 +  * widok - Zrealizowany za pomocą JSF (java server faces 1.2) z nakładką jQery oraz jQueryUI 
 + 
 + 
 +===== 15. Implementacja ​bazy danych ​===== 
 +Patrz punkt 11Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów. 
 + 
 + 
 +===== 16. Zdefiniowanie interfejsów ​do prezentacji,​ edycji i obsługi danych ===== 
 + 
 +-formularz rejestracji użytkownika 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​rejestracja1.png|}} 
 + 
 + 
 +-formularz logowania użytkownika 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​logowanie1.png|}} 
 + 
 + 
 +-formularz zakładania firmy przez użytkownika 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dodawanie_firmy1.png|}} 
 + 
 + 
 +-formularz edycji danych użytkownika 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​moje_dane.png|}} 
 + 
 + 
 +-formularz dodawania komentarzy 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​komentarze1.png|}} 
 + 
 + 
 +-formularz dodawania połączenia 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dodawanie_polaczenia1.png|}} 
 + 
 + 
 +-formularz wyszukiwania połączeń 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​wyszukiwanie1.png|}} 
 + 
 + 
 +===== 17. Zdefiniowanie dokumentów do przetwarzania i prezentacji danych ===== 
 + 
 +-prezentacja wyników wyszukiwania 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​wyszukiwanie1.png|}} 
 + 
 + 
 +-prezentacja dodanej trasy 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​dodawanie_polaczenia2.png|}} 
 + 
 + 
 +-prezentacja aktualnosci 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​aktualnosci1.png|}} 
 + 
 + 
 +-prezentacja komentarzy 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​minibus:​komentarze1.png|}}
pl/dydaktyka/ztb/2010/projekty/minibus/start.1275322421.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