background image

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) 
); 

background image

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, 

background image

  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. 

background image

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.  

 

 

background image

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.  

background image

 

 

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. 

background image

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.  

background image

 

 

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. 

background image

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.  

 

 

background image

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.  

background image

 

 

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.  

background image

 

 

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 

background image

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.  

background image

 

 

 

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 
 

background image

 
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. 
 

 

 

background image

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 

background image

 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.