Poniżej jest umieszczana automatycznie treść podstrony przeglady1 znajdującej się w namespace projektu. Proszę ją utworzyć i traktować jako stronę startową - tam umieszczamy linki do poszczególnych podstron, które też mają się znajdować w projekcie, np. analiza_wymagan. W namespace mogą też Państwo umieszczać pliki (obrazki, diagramy, archiwa) linkowane na stronie danego projektu. Proszę usunąć ten akapit po zapoznaniu się z jego treścią.
Aplikacja powinna pozwolić właścicielom samochodów na rejestrację czynności wykonywanych w serwisie. System powinien umożliwiać budowanie bazy modeli samochodów z wyszczególnieniem czynności oraz ich częstotliwości (według czasu i/lub przebiegu) z podziałem na „przeglądy” (z opcjonalną wymianą), „wymiany” (obowiązkowe). Użytkownicy definiują samochód (poprzez wybór modelu, oraz uzupełnienie atrybutów takich jak data produkcji, data rejestracji, VIN, kolor, nr rejestracyjny), a następnie mogą definiować dla nich „zdarzenia” oznaczające przeprowadzenie przy określonej dacie i przy określonym przebiegu danej czynności. Dla każdej czynności powinna być możliwość dodania notatek oraz załączników w postaci plików JPG i PDF). System powinien obliczać pozostały czas i przebieg do kolejnych czynności serwisowych, a także generować raport wszystkich czynności wykonanych przy samochodzie.
Projekt zaczynamy od początku.
Celem projektu jest stworzenie aplikacji webowej (dostępnej z poziomu przeglądarki) oferującej użytkownikowi przejrzystą książkę przeglądową. Klient ma możliwość stworzenia własnego konta, dodania samochodu, edytowania danych serwisowych na jego temat (przebiegu, dat wymiany elementów), generowania raportów zawierających najważniejsze dane i datę najbliższego przeglądu oraz dodawanie zdarzeń. Z wymagań pozafunkcjonalnych ważne jest, aby system nie generował dużych opóźnień, co byłoby drażniące dla użytkownika.
Użytkownik wchodzi na stronę pansamochodzik.pl. Widzi opcje: „załóż konto” i „zaloguj się”. Klika w „załóż konto” i zostaje przekierowany na stronę zawierającą pola do wypełnienia (login, hasło oraz podstawowe dane osobowe). Po wciśnięciu „ok” serwer sprawdza poprawność danych, jeżeli przechodzą one test pomyślnie użytkownik widzi napis „Nowe konto zostało utworzone”.
Użytkownik wchodzi na stronę pansamochodzik.pl. Widzi opcje: „załóż konto” i „zaloguj się”. Klika w zaloguj się i zostaje przekierowany na stronę zawierającą pola do logowania (login i hasło). Po wciśnięciu „ok” serwer sprawdza zgodność danych, jeżeli przechodzą one test pomyślnie użytkownik zostaje przekierowany na stronę swojego konta.
Po zalogowaniu się użytkownik jest przekierowywany do swojej strony, z której ma dostęp do poniższych funkcjonalności. Może się też wylogować. Jeżeli w którymś samochodzie jakiś podzespół wymaga wymiany/przeglądu, to jest to wyszczególnione na stronie głównej.
Użytkownik może zmienić hasło - w takim wypadku musi najpierw podać stare, a następnie dwukrotnie nowe hasło i zatwierdzić przyciskiem „ok”. Może też zmienić swoje dane osobowe.
Użytkownik zostaje przekierowany na stronę, na której znajduje się lista jego samochodów. Przy każdym samochodzie jest opcja skasowania go (przycisk „Usuń”) oraz uzyskania większej ilości informacji na jego temat (przycisk „Przeglądaj”). Na dole listy znajduje się przycisk „Dodaj samochód”. Po wybraniu „Przeglądaj” użytkownik otrzymuje raport, w którym zawarte są informacje o samochodzie, przebiegu, wszystkich częściach samochodu oraz pozostałym przebiegu/czasie do wymiany/przeglądu. Elementy, którym niewiele do wymiany brakuje, lub termin ten już przekroczyły, są wyszczególnione. Po kliknięciu w „Dodaj samochód” użytkownik zostaje przekierowany do formularza, gdzie uzupełnia podstawowe dane o samochodzie (marka, model, silnik). Dane te są zgłaszane do serwisu, który próbuje wyszukać samochód o takich parametrach, aby zwrócić listę części, którą już ktoś wypełnił. Jeżeli mu się to uda, użytkownikowi proponuje się ową konfigurację (z możliwością edytowania, dodawania i usuwania części). Jeżeli takiego samochodu w bazie nie ma, użytkownik musi sam dodać wszystkie części, nad którymi serwis ma sprawować pieczę. Po zatwierdzeniu jest proszony o ponowne przyjrzenie się temu, co wpisał i zatwierdzenie kolejne, ponieważ wpisane dane będzie mógł edytować tylko podczas zdarzenia serwisowego.
Użytkownik na tej podstronie może wyświetlić wszystkie zdarzenia, które miały miejsce lub dodać zdarzenie nowe. Po kliknięciu w „Dodaj zdarzenie” musi wybrać samochód, którego zdarzenie dotyczy. Kiedy go zatwierdzi, jest przekierowany do strony, na której wybiera, które elementy z danego samochodu przeszły przegląd/wymianę. W przypadku wymiany może też zmienić parametry nowej części (dopuszczalny przebieg/dopuszczalny czas użytkowania). Na koniec uzupełnia dodatkowe informacje: datę, komentarz, serwis oraz ewentualne zdjęcie.
Użytkownik widzi listę swoich samochodów wraz z wypisanymi przebiegami. Obok każdego z nich ma okno, do którego może wpisać nowy przebieg i zatwierdzić go przyciskiem „ok”.
- zakładanie nowego konta - logowanie/wylogowywanie z serwisu - edycja konta - dodawanie/usuwanie samochodu - edytowanie danych samochodu - aktualizowanie danych serwisowych - dodawanie zdarzeń - dodawanie komentarzy i obrazków do zdarzeń - przeliczanie daty wymiany elementów samochodu - generowanie raportów - przechowywanie danych użytkownika
CREATE TABLE Czesc (
ID_CZESCI INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Samochod_ID_SAMOCHODU INTEGER UNSIGNED NOT NULL, Nazwa TEXT, Symbol TEXT, Przebieg_do_wymiany INTEGER UNSIGNED, Przebieg_do_przegladu INTEGER UNSIGNED, Okres_wymiany INTEGER UNSIGNED, Okres_przegladu INTEGER UNSIGNED, Warunki_wymiany TEXT NOT NULL, Warumki_przegladu TEXT NOT NULL, PRIMARY KEY(ID_CZESCI), FOREIGN KEY (Samochod_ID_SAMOCHODU) REFERENCES Samochod (ID_SAMOCHODU)
);
CREATE TABLE Osoba (
ID_WŁASCICIELA INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Imie TEXT NOT NULL, Nazwisko TEXT NOT NULL, Data urodzenia DATE NOT NULL, Plec TEXT NOT NULL, Login TEXT UNSIGNED NOT NULL UNIQUE, Haslo TEXT NOT NULL, PRIMARY KEY(ID_WŁASCICIELA)
);
CREATE TABLE Samochod (
ID_SAMOCHODU INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Osoba_ID_WŁASCICIELA INTEGER UNSIGNED NOT NULL, Marka TEXT NOT NULL, Model TEXT NOT NULL, Silnik TEXT NOT NULL, Przebieg INTEGER UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY(ID_SAMOCHODU), FOREIGN KEY (Osoba_ID_WŁASCICIELA) REFERENCES Osoba(ID_WLASCICIELA)
);
CREATE TABLE Zdarzenie (
ID_ZDARZENIA INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Data_zdarzenia DATE NOT NULL, Komentarz TEXT, Zdjecie TEXT, Serwis TEXT, Przebieg_w_momencie_zdarzenia INTEGER UNSIGNED NOT NULL, PRIMARY KEY(ID_ZDARZENIA)
);
CREATE TABLE Zestawienie (
Typ_zdarzenia TEXT NOT NULL, Zdarzenie_ID_ZDARZENIA INTEGER UNSIGNED NOT NULL, Czesc_ID_CZESCI INTEGER UNSIGNED NOT NULL, FOREIGN KEY (Czesc_ID_CZESCI) REFERENCES Czesc(ID_CZESCI), FOREIGN KEY (Zdarzenie_ID_ZDARZENIA) REFERENCES Zdarzenie(ID_ZDARZENIA)
);
Dozwolone znaki:
dozwolony-znak-alf = [ A-Z | a-z | - | ] dozwolony-znak-alfnum = [ A-Z | a-z | - | 1-9 | ]
Osoba
Imię = *imię posiadacza konta* {dozwolony-znak-alf} Nazwisko = *nazwisko posiadacza konta* {dozwolony-znak-alf} Data urodzenia = *jednostki: dni od 01.01.1900* Płeć = *płeć posiadacza konta* [M|K] Login = *login posiadacza konta* {dowolny-znak-alfnum} Hasło = *hasło posiadacza konta* {dowolny-znak-alfnum}
Samochód
Marka = *marka samochodu* {dowolny-znak-alf} Model = *model samochodu* {dowolny-znak-alfnum} Silnik = *rodzaj silnika - diesel/benzyna + pojemność* {dowolny-znak-alfnum} Przebieg = *aktualny przebieg samochodu* *jednostka: km, zakres: 0-inf*
Część
Nazwa = *nazwa części* {dowolny-znak-alf} Symbol = *symbol katalogowy części* Przebieg do wymiany = *przebieg, po którym należy wymienić część* *jednostka: km* Przebieg do przeglądu = *przebieg, po którym należy przeglądnąć część* *jednostka: km* Okres wymiany = *czas, po którym należy wymienić część* *jednostka: liczba dni* Okres przeglądu = *czas, po którym należy przeglądnąć część* *jednostka: liczba dni* Warunki wymiany = *wskaźnik, który informuje o warunkach wymiany* [przebieg | okres] Warunki przeglądu = *wskaźnik, który informuje o warunkach przeglądu* [przebieg | okres]
Zdarzenie
Data = *jednostki: dni od 01.01.1900* Komentarz = *komentarz użytkownika na temat czynności serwisowej* Zdjęcie = *adres url zdjęcia* Serwis = *nazwa serwisu, w którym nastąpiła czynność* Przebieg w momencie zdarzenia = *przebieg w momencie zdarzenia* *jednostka: km*
Zestawienie
Typ zdarzenia = [przeglad | wymiana]
Analiza zależności funkcyjnych i normalizacja tabel (dekompozycja do 3NF, BCNF, 4NF, 5NF); na tym etapie dokonuje się sprawdzenia, czy tabele spełniają warunki zakładanych postaci normalnych i ew. dekompozycji w celu normalizacji. Każda tabela powinna zostać przeanalizowana zgodnie z wytycznymi przedstawionymi na wykładzie; efekty tej analizy powinny zostać w całości umieszczone w raporcie.
Sprawdzamy, czy podany login istnieje:
SELECT * FROM Osoba WHERE Login = login_in;
Jeżeli nie istnieje dodajemy go:
INSERT INTO Osoba (Imie,Nazwisko,Data_urodzenia,Plec,Login,Haslo) VALUES (imie_in,nazwisko_in,data_ur_in,plec_in,login_in,haslo_in);
Sprawdzamy, czy hasło podane przez użytkownika jest poprawne.
SELECT Haslo FROM Osoba WHERE Login = login_in;
Szkielet ogólnej komendy edycji konta
UPDATE Osoba SET col = nowa_wartosc WHERE Login = login_in;
Dodawanie nowego samochodu
INSERT INTO Samochod (Osoba_ID_WLASCICIELA,Marka,Model,Silnik) VALUES (osoba_id_wlasc,marka,model,silnik);
Dodawanie części do tablicy Części
INSERT INTO Czesci (Samochod_ID_SAMOCHODU,Nazwa,Symbol,Przebieg_do_wymiany,Przebieg_do_przegladu,Okres_wymiany,Okres_przegladu,Warunki_wymiany,Warunki_przegladu) VALUES(id_samochodu,nazwa_in,symbol_in,przebieg_do_wymiany_in,przebieg_do_przegladu_in,okres_wymiany_in,okres_przegladu_in,warunki_wymiany_in,warunki_przegladu_in);
Pokazanie użytkownikowi danych o jego samochodach
SELECT * FROM Samochod WHERE Osoba_ID_WLASCICIELA = osoba_id_wlasc;
Usuwanie samochodu
DELETE FROM Samochod WHERE ID_SAMOCHODU = id_samochodu;
Usuwanie czesci
DELETE FROM Czesci WHERE Samochod_ID_SAMOCHODU = id_samochodu;
UPDATE Samochod SET col = nowa_wartosc WHERE Login = login_in;
UPDATE Samochod SET Przebieg = przebieg_in WHERE ID_SAMOCHODU = id_samochodu_in;
INSERT INTO Zdarzenie (Data_zdarzenia,Komentarz,Zdjecie,Serwis,Przebieg_w_momencie_zdarzenia) VALUES (data_zdarzenia_in,komentarz_in,zdjecie_in,serwis_in,przebieg_w_momencie_zdarzenia_in);
Dodawanie nowych części
INSERT INTO Czesci (Samochod_ID_SAMOCHODU,Nazwa,Symbol,Przebieg_do_wymiany,Przebieg_do_przegladu,Okres_wymiany,Okres_przegladu,Warunki_wymiany,Warunki_przegladu) VALUES(id_samochodu,nazwa_in,symbol_in,przebieg_do_wymiany_in,przebieg_do_przegladu_in,okres_wymiany_in,okres_przegladu_in,warunki_wymiany_in,warunki_przegladu_in);
Edytowanie części
UPDATE Czesci SET col = nowa_wartosc WHERE Login = login_in;
Usuwanie części
DELETE FROM Czesci WHERE Samochod_ID_SAMOCHODU = id_samochodu;
Pobranie części
SELECT * FROM Czesci WHERE Samochod_ID_SAMOCHODU = id_samochodu;
Pobranie przebiegu
SELECT Przebieg FROM Samochod WHERE ID_SAMOCHODU = id_samochodu;
Wybieranie samochodów
SELECT * FROM Czesci WHERE Samochod_ID_SAMOCHODU = id_samochodu;
Wybieranie części
SELECT * FROM Samochod WHERE Osoba_ID_WLASCICIELA = osoba_id_wlasc;