Zasady budowy programów.
Sekcja: Studium Przypadku - Program Rent a Car.
80. Diagram ERD (Entity Relationship Diagram)
Budujemy aplikację służącą do obsługi wypożyczalni samochodów. W bazie będziemy
rejestrować: samochody, klientów oraz wypożyczane przez nich samochody. Dodatkowo
będziemy używali słownika miast w adresach klientów. Na poniższym diagramie
przedstawiłem strukturę bazy danych.
81. Projekt bazy danych i dane testowe w SQL.
Następnie przystępujemy do zakodowania projektu bazy w SQL oraz do wprowadzenia za
pomocą instrukcji INSERT INTO danych testowych do tabel. Można to zrealizować za
pomocą wielokrotnej instrukcji INSERT INTO. Pamiętamy o tym aby najpierw wprowadzać
tabele słownikową a potem tabelę główną. Przy kasowaniu postępujemy odwrotnie.
DROP table wypozyczenie;
DROP TABLE klient;
DROP TABLE miasto;
DROP TABLE samochod;
CREATE TABLE miasto
(
nr serial,
nazwa character varying(30) NOT NULL,
CONSTRAINT s1 PRIMARY KEY (nr)
);
INSERT INTO miasto
(nazwa)VALUES('Gda
ń
sk'),('Warszawa'),('Szczecin'),('Kraków'),('Pozna
ń
');
CREATE TABLE samochod
(
nr serial,
marka character varying(20) NOT NULL,
model character varying(16) NOT NULL,
kolor character varying(16) NOT NULL,
rok integer NOT NULL,
przebieg integer NOT NULL,
rejestracja varchar(10) NOT NULL,
status boolean,
CONSTRAINT s2 PRIMARY KEY (nr)
);
INSERT INTO samochod
(marka,model,kolor,rok,przebieg,rejestracja,status)VALUES
('Fiat','Uno','Czerwony',2008,10000,'WPI-1234',FALSE),
('Fiat','Uno','Czarny',2007,30000,'WPI-1235',FALSE),
('Fiat','Uno','Zielony',2009,5000,'WPI-1236',FALSE),
('Fiat','Panda','Czerwony',2008,10000,'WPI-1237',FALSE),
('Fiat','Panda','Czarny',2007,30000,'WPI-1238',FALSE),
('Fiat','Panda','Zielony',2009,5000,'WPI-1239',FALSE);
CREATE TABLE klient
(
nr serial,
ident varchar(5),
imie varchar(20) NOT NULL,
nazwisko varchar(20) NOT NULL,
ulica varchar(20) NOT NULL,
dom varchar(8) NOT NULL,
kod character(6) NOT NULL,
miasto integer NOT NULL,
CONSTRAINT s4 PRIMARY KEY (nr),
CONSTRAINT s5 FOREIGN KEY (miasto) REFERENCES miasto(nr)
);
INSERT INTO klient (ident,imie,nazwisko,ulica,dom,kod,miasto)VALUES
('K0001','Adam','Adamski','Miła','35/2','02-345',(SELECT nr FROM miasto
WHERE nazwa='Warszawa')),
('K0002','Bernard','Biały
ń
ski','Dobra','6/28','03-123',(SELECT nr FROM
miasto WHERE nazwa='Warszawa')),
('K0003','Czesław','Caba
ń
ski','Widok','8/45','04-067',(SELECT nr FROM
miasto WHERE nazwa='Warszawa')),
('K0004','Dariusz','Dziewo
ń
ski','Krucza','21/2','02-456',(SELECT nr FROM
miasto WHERE nazwa='Warszawa')),
('K0005','Edward','Edwardowski','Kawcza','6/123','02-887',(SELECT nr FROM
miasto WHERE nazwa='Warszawa')),
('K0006','Florian','Farfelski','Tarczy
ń
ska','8/8','01-412',(SELECT nr FROM
miasto WHERE nazwa='Warszawa')),
('K0007','Grzegorz','Gorazdowski','Marszałkowska','105/5','01-123',(SELECT
nr FROM miasto WHERE nazwa='Warszawa')),
('K0008','Hanna','Harasimowicz','Smolna','4/2','00-345',(SELECT nr FROM
miasto WHERE nazwa='Warszawa')),
('K0009','Igor','Irzycki','Ordynacka','11/9','00-052',(SELECT nr FROM
miasto WHERE nazwa='Warszawa'));
CREATE TABLE wypozyczenie
(
nr serial,
nr_k integer,
nr_s integer,
data date NOT NULL,
dni integer,
zwrot boolean,
CONSTRAINT s5 PRIMARY KEY (nr),
CONSTRAINT s6 FOREIGN KEY (nr_k) REFERENCES klient(nr),
CONSTRAINT s7 FOREIGN KEY (nr_s) REFERENCES samochod(nr)
);
Przykład 81: Projekt bazy danych i dane testowe w SQL.
82. Zaprojektowanie grafu sterowania w programie.
Przed przystąpieniem do kodowania należy zaprojektować graf sterowania w programie. Aby
to uczynić należy zastanowić się jakie ekrany przewidujemy i jaka będzie między nimi
nawigacja. Ważne jest aby projekt ekranów zakładał ich budowę ze standardowych
elementów. W projekcie przewidujemy, że ekran będzie składał się z nagłówka (header),
części zawierającej treść (content) oraz stopki (footer). W nowoczesnych stronach
internetowych staramy się nie używać tabel ani konstrukcji typu frame ponieważ są ciężkie i
nieprecyzyjne. Dlatego do budowy aplikacji zastosowałem arkusz css. Zaprojektowany ekran
posiada stałe wymiary. W przypadku gdy powierzchnia na przeglądarce jest za mała do
zmieszczenia ekranu pojawiają się suwaki.
83. Zaprojektowanie wyglądu ekranu - menu.00.
Menu startowe programu zawiera siedem przycisków i opisy do czego przyciski służą.
Naciśniecie przycisku uruchamia kolejne funkcjonalności programu. Ponieważ projekt
programu Rent a Car jest bardzo uproszczony więc nie zastosowałem funkcjonalności
logowania do systemu.
84. Zaprojektowanie wyglądu ekranu - display.01.
Po naciśnięciu przycisku 01 pojawia się ekran wyświetlanie danych klienta. Służy on jedynie
do oglądania danych klientów. Ekran posiada przyciski: first, next, prev, last służące do
nawigowaniu po danych oraz przycisk menu służący do opuszczenia ekranu.
85. Zaprojektowanie wyglądu ekranu - display.02.
Po naciśnięciu przycisku 02 pojawia się ekran wyświetlanie danych samochodów. Służy on
jedynie do oglądania danych klientów. Ekran posiada przyciski: first, next, prev, last służące
do nawigowaniu po danych oraz przycisk menu służący do opuszczenia ekranu.
86. Zaprojektowanie wyglądu ekranu - edit.03.
Po naciśnięciu przycisku 03 pojawia się ekran edycji danych. Służy on do poprawiania
danych klientów. Pole słownikowe miasto zostało zrealizowane za pomocą polecenia html
input-select. Ekran posiada przyciski: first, next, prev, last służące do nawigowaniu po
danych, przycisk OK do zatwierdzania zmian, oraz przycisk menu służący do opuszczenia
ekranu.
87. Zaprojektowanie wyglądu ekranu - edit.04.
Po naciśnięciu przycisku 04 pojawia się ekran edycji danych. Służy on do poprawiania
danych samochodów. Ekran posiada przyciski: first, next, prev, last służące do nawigowaniu
po danych, przycisk OK do zatwierdzania zmian, oraz przycisk menu służący do opuszczenia
ekranu.
88. Zaprojektowanie wyglądu ekranu - search.05.
Po naciśnięciu przycisku 05 pojawia się ekran do wyszukiwania klientów. Jeśli nic nie
wpiszemy i naciśniemy klawisz OK to na następnym ekranie wyświetlą się wszyscy klienci.
Jeśli wprowadzimy nazwisko klienta lub jego część to na następnym ekranie wyświetlą się
wszystkie rekordy spełniające wzorzec.
89. Zaprojektowanie wyglądu ekranu - display.06.
Po naciśnięciu na poprzednim ekranie przycisku search pojawiają się rekordy spełniające
wzorzec. Jeśli na ekranie jest klient który chce wypożyczyć samochód to zaznaczamy go za
pomocą wyboru jednokrotnego radio i naciskamy przycisk go.
90. Zaprojektowanie wyglądu ekranu - search.08.
Następnie pojawia się ekran do wyszukiwania samochodów. Jeśli nic nie wpiszemy i
naciśniemy klawisz OK to na następnym ekranie wyświetlą się wszystkie samochody
możliwe do wypożyczenia. Jeśli wprowadzimy markę samochodu lub jej część to na
następnym ekranie wyświetlą się wszystkie rekordy spełniające wzorzec.
91. Zaprojektowanie wyglądu ekranu - display.07.
Po naciśnięciu na poprzednim ekranie przycisku search pojawiają się rekordy spełniające
wzorzec. Jeśli na ekranie jest samochód który chce wypożyczyć klient to zaznaczamy go za
pomocą wyboru jednokrotnego radio i naciskamy przycisk go.
92. Zaprojektowanie wyglądu ekranu - display.09.
Następnie pojawia się ekran zawierający dane klienta i wybranego przez niego samochodu.
Wystarczy wpisać jedynie na ile dni klient chce pożyczyć samochód i nacisnąc przycisk OK.
93. Zaprojektowanie wyglądu ekranu - display.10.
Pojawia się wtedy ekran informacyjny informujący pracownika o fakcie zarejestrowania w
bazie wypożyczenia samochodu. Po naciśnięciu przycisku OK przenosimy się do głównego
menu programu.
94. Zaprojektowanie wyglądu ekranu - search.11.
Po naciśnięciu przycisku 08 pojawia się ekran do wyszukiwania klienta zwracającego
samochód. Jeśli nic nie wpiszemy i naciśniemy klawisz OK to na następnym ekranie
wyświetlą się wszystkie wypoźyczenia. Jeśli wprowadzimy nazwisko klienta lub jego część to
na następnym ekranie wyświetlą się wszystkie rekordy spełniające wzorzec.
95. Zaprojektowanie wyglądu ekranu - display.12.
Na tym ekranie wyświetlają się wszystkie nie zwrócone wypożyczenia samochodów.
Wybieramy zwracany samochód, naciskamy przycisk go i przechodzimy do następnego
ekranu.
96. Zaprojektowanie wyglądu ekranu - display.13.
Ekran zawiera informacje dotyczące zwracanego samochodu oraz klienta który go zwraca.
Należy jedynie wpisać liczbę przejechanych kilometrów i nacisnąć klawisz OK.
97. Zaprojektowanie wyglądu ekranu - display.15.
Po naciśnięciu przycisku OK na poprzednim ekranie pojawia się ekran informujący
pracownika, że zwrócenie samochodu zostało zrealizowane.
98. Funkcja biznesowa - wypożycz samochód.
W programie Rent a Car zrealizowałem dwie funkcje biznesowe. Pierwsza z nich służy do
wypożyczenia samochodu, druga do jego zwrotu. Transakcja wypożyczenia wymaga wyboru
klient, wyboru samochodu, dokonania wypożyczenia oraz zaznaczenia, że dany samochód
został wypożyczony. Wybór klienta i samochodu jest wykonywany za pomocą instrukcji
SELECT. Wypożyczenie za pomocą instrukcji INSERT. Zaznaczenie, że samochód jest
wypożyczony za pomocą instrukcji UPDATE.
99. Funkcja biznesowa - zwróć samochód.
Transakcja zwrotu samochodu składa się z operacji wyboru dokonywanego zwrotu
zrealizowanego za pomocą instrukcji SELECT. Następnie odnotowujemy za pomocą
instrukcji UPDATE, że wypożyczenie się zakończyło. Na koniec za pomocą instrukcji
UPDATE zaznaczamy, że dany samochód został zwrócony.
100. Zapytanie SQL do ekranu - display.01.
Poniższy kod SQL wybiera bieżącego klienta i łączy jego dane z tabelą słownikową miasto.
SELECT klient.nr,klient.ident,klient.imie,klient.nazwisko,
klient.ulica,klient.dom,klient.kod,miasto.nazwa
FROM klient,miasto
WHERE klient.miasto=miasto.nr
ORDER BY klient.nazwisko
Przykład 100: Zapytanie SQL do ekranu - display.01.
101. Zapytanie SQL do ekranu - display.02.
Poniższy kod SQL wybiera bieżącey samochód.
SELECT samochod.nr,samochod.marka,samochod.model,samochod.kolor,
samochod.rok,samochod.przebieg,samochod.rejestracja
FROM samochod
ORDER BY samochod.marka
Przykład 101: Zapytanie SQL do ekranu - display.02.
102. Zapytanie SQL do ekranu - edit.03.
Poniższy kod SQL edytuje w bazie dane poprawione na formularzu.
UPDATE klient
SET
ident='K0001',imie='Adam',nazwisko='Adamski',ulica='Miła',dom='35/2',kod='02-
345',
miasto= (SELECT nr FROM miasto WHERE nazwa='Kraków')
WHERE nr=1
Przykład 102: Zapytanie SQL do ekranu - edit.03.
103. Zapytanie SQL do ekranu - edit.04.
Poniższy kod SQL edytuje w bazie dane poprawione na formularzu.
UPDATE samochod
SET marka='Fiat',model='Uno',kolor='Czarny',rok='2009',przebieg='34100',
rejestracja='WPI-1235'
WHERE nr=2
Przykład 103: Zapytanie SQL do ekranu - edit.04.
104. Zapytanie SQL do ekranu - display.06.
Poniższy kod wyświetla dane wybrane wzorcem na formularzu search.
SELECT klient.nr,klient.ident,klient.imie,klient.nazwisko,klient.ulica,
klient.dom,klient.kod,miasto.nazwa
FROM klient,miasto
WHERE klient.miasto=miasto.nr and klient.nazwisko LIKE 'A%'
ORDER BY klient.nazwisko
Przykład 104: Zapytanie SQL do ekranu - display.06.
105. Zapytanie SQL do ekranu - display.07.
Poniższy kod wyświetla dane wybrane wzorcem na formularzu search.
SELECT samochod.nr,samochod.marka,samochod.model,samochod.kolor,
samochod.rok,samochod.przebieg,samochod.rejestracja
FROM samochod
WHERE samochod.marka LIKE 'Fi%' and status=FALSE
ORDER BY samochod.marka
Przykład 105: Zapytanie SQL do ekranu - display.07.
106. Zapytanie SQL realizujące transakcję wypożycz samochód.
Poniższa transakcja wykonuje trzy czynności. Wprowadza rekord opisujący wypożyczenie do
tabeli wypożyczenie. Ustala numer wypożyczonego właśnie samochodu oraz zaznacza, że
samochód został wypożyczony.
// wprowadzenie wypo
ż
yczenia do tablicy wypo
ż
yczenie
INSERT INTO wypozyczenie (nr_k,nr_s,data,dni,zwrot)
VALUES (4,5,CURRENT_DATE,10,FALSE);
// ustalenie numeru wypo
ż
yczonego samochodu z poprzedniej instrukcji
SELECT nr FROM wypozyczenie
WHERE nr_k=4 and nr_s=5 and nr_s=5;
// zaznaczenie
ż
e samochód został wypo
ż
yczony, ustawienie statusu w
tablicy samochód
UPDATE samochod SET status=TRUE
WHERE nr=5
Przykład 106: Zapytanie SQL realizujące transakcję wypożycz samochód.
107. Zapytanie SQL realizujące transakcję zwróć samochód.
Poniższa transakcja wykonuje trzy czynności. Zaznacza w tabeli wypożyczenie, że
wypożyczenie się zakończyło. Ustala numer zwróconego samochodu. Zmienia status
samochodu z wypożyczonego na wolny.
// zaznaczenie faktu zwrócenia samochodu w tabeli wypozyczenie
UPDATE wypozyczenie SET zwrot=TRUE
WHERE nr=50
// ustalenie numeru zwróconego samochodu
SELECT nr_s FROM wypozyczenie
WHERE nr=50
// zmiana statusu zwróconego samochodu oraz zwi
ę
kszenie jego przebiegu o
wprowadzon
ą
warto
ść
.
UPDATE samochod SET status=FALSE, przebieg=przebieg+1000
WHERE nr=5
Przykład 107: Zapytanie SQL realizujące transakcję zwróć samochód.
108. Przykładowa struktura kodu html strony www zgodnej ze standardem.
Należy pamiętać aby wytworzony przez aplikację dynamiczny kod html był zgodny z jednym
z istniejących standardów.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd" >
<html xmlns="http://www.w3.org/1999/html">
<head>
<title>Aplikacja Rent a Car</title>
<style type="text/css">
-- tu jest miejsce na arkusz styli
</style>
</head>
<body>
-- tu jest miejsce na nasz program
</body>
</html>
Przykład 108: Przykładowa struktura kodu html strony www zgodnej ze standardem.