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 19:48]
ztb2010
pl:dydaktyka:ztb:2010:projekty:minibus:start [2019/06/27 15:50] (aktualna)
Linia 62: Linia 62:
    * zdefiniowanych połączeniach    * zdefiniowanych połączeniach
    * opiniach o firmie    * 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.1275328114.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