0% au considerat acest document util (0 voturi)
39 vizualizări20 pagini

Proiect 2

Proiectul 'Rent a car' este realizat în cadrul cursului de Introducere în Baze de Date și include analiza cerințelor utilizatorilor, modelul de date, detalii de implementare și concluzii. Baza de date conține nouă tabele, inclusiv Booking, Customer, Car și Branch, iar interogările SQL sunt utilizate pentru a extrage informații relevante. Implementarea site-ului a fost realizată folosind PHP, SQL, CSS și JavaScript, cu scopul de a oferi o experiență ușor de utilizat pentru clienți.

Încărcat de

Marius
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
39 vizualizări20 pagini

Proiect 2

Proiectul 'Rent a car' este realizat în cadrul cursului de Introducere în Baze de Date și include analiza cerințelor utilizatorilor, modelul de date, detalii de implementare și concluzii. Baza de date conține nouă tabele, inclusiv Booking, Customer, Car și Branch, iar interogările SQL sunt utilizate pentru a extrage informații relevante. Implementarea site-ului a fost realizată folosind PHP, SQL, CSS și JavaScript, cu scopul de a oferi o experiență ușor de utilizat pentru clienți.

Încărcat de

Marius
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

FACULTATEA DE AUTOMATICA SI CALCULATOARE CATEDRA

CALCULATOARE

PROIECT
la
disciplina
Introducere in Baze de Date

Rent a car
Muresan Cristian Marius
si
Iuonas Ovidiu Claudiu
An academic: 2014 – 2015

PROIECT de SEMESTRU
Catedra de Calculatoare
Disciplina : Introducere in Baze de Date
Coordonator: s.l. ing. Cosmina IVAN
Data 13.01.2015
FACULTATEA DE AUTOMATICA SI CALCULATOARE CATEDRA
CALCULATOARE

Cuprins

1. Introducere
Introducere, argumente, scop si obiective specifice

2. Analiza cerintelor utilizatorilor ( Specificatiile de proiect)


• Ipoteze specifice domeniului ales pentru proiect ( cerinte,
constrangeri )
• Organizare structurata( tabelar) a cerintelor utilizator
• Determinarea si caracterizarea de profiluri de utilizatori
( admin, user intern, user extern…diversi alti “actori”)

3. Modelul de date si descrierea acestuia


• Entitati si atributele lor ( descriere detaliata – implementarea
fizica)
• Diagrama EER/UML pentru modelul de date complet
• Normalizarea datelor

4. Detalii de implementare
• Descrierea functionala a modulelor ( organizarea logica a
acestora- de ex . structura claselor Java, cod HTML, JSP, ASP,
PhP)
• Manual de utilizare/instalare (diferentiat pe tipuri de actori)
• Elemente de securizare a aplicatiei
FACULTATEA DE AUTOMATICA SI CALCULATOARE CATEDRA
CALCULATOARE

5. Concluzii limitari si dezvoltari ulterioare

1. Introducere

Acest document are in vedere prezentarea in ansamblu a proiectului `Rent a car`,


realizat in cadrul cursului de Introducere in Baze de Date, semestrul I, an
universitar 2014-2015. In acest document sunt descrisi pasii urmati in realizarea
proiectului, o descriere a versiunii finale a proiectului si o urmatoare etapa la care
poate fi dus acest proiect.

2. Analiza cerintelor utilizatorilor ( Specificatiile de proiect)

• Ipoteze specifice domeniului ales pentru proiect ( cerinte, constrangeri )

O mare importanta o are aplicatia web, iar aceasta trebuie construita astfel ca
utilizatorul sa o poata utiliza cu mare usurita. Design-ul site-ului este foarte
important fiindca ajuta utilizatorul sa navigheze cat mai usor, obtinand astfel
informatiile necesare.

• Organizare structurata (tabelar) a ceritelor utilizator


FACULTATEA DE AUTOMATICA SI CALCULATOARE CATEDRA
CALCULATOARE

Informatiile din baza de date se pastreaza in mai multe tabele, iar in cazul
aplicatiei `Rent a car` avem nevoie de tabele pentru rezervare, clienti, agentiile de
la care se pot face rezervarile si pentru masinile care se pot inchiria.

3. Modelul de date si descrierea acestuia

Pentru ca informatiile puse la dispozitie de aplicatia `Rent a car` sa fie


structurate cat mai clar, in baza de date exista 9 tabele :
FACULTATEA DE AUTOMATICA SI CALCULATOARE CATEDRA
CALCULATOARE
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

Tabela principala este Booking care are cheia primara ID si care contine
data inceperii inchirierii, si data returnarii produsului. Tot aici se gasesc cheile
straine care fac legatura cu tabela Cars si cu tabea Agency. Mai este si tabea
Extra_stuff in care sunt niste produse suplimentare ale inchrierii.
Tabela Customer stocheaza datele clientului si care are o cheie straina in
tabela Customer_address, tabela in care se stocheaza adresa clientului.
Tabela Car retine informatii despre masina precum numarul de inmatriculare,
anul fabricatiei, culoarea si contine cheie straina din tabela Car_type care retine tipul
masinii inchiriate.
Fiecare masina poate fii disponibila la o sucursala a unei agentii. Astfel in
tabela Car se gaseste o cheie straina din tabela Branch. Tabela Branch contine
numele sucursalei, iar in tabela Branch_address este stocata adresa sucursalei.

Interogari (Queries) utilizate pe baza de date:

#1. Producatorii de masini


SELECT PRODUCER
FROM car_type
ORDER BY PRODUCER ASC;

#2. Numele si producatorul masinilor fabricate dupa anul 2008 ordonate dupa
nume
SELECT NAME as 'Nume',PRODUCER as 'Producator'
FROM car_type,car where
DATE_OF_MANUFACTURING>'2008' and
car_type.ID = car.CAR_TYPE_ID
Order by NAME;

#3. Numele si producatorul masinilor al caror pret zilnic este mai mic decat 150
Select PRODUCER as 'Producator',NAME as 'Nume' from
car_type,car
where car.BASE_PRICE_PER_DAY<'150' and car.CAR_TYPE_ID=
car_type.ID;

1
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

#4. Numele si producatorul masinilor albastre Select


PRODUCER as 'Producator',NAME as 'Nume' from
car_type,car
where [Link]='Blue' and
car.CAR_TYPE_ID= car_type.ID;

#5. Numele si producatorul masinilor inchiriate pentru minim 15 zile


Select PRODUCER as 'Producator',NAME as 'Nume'
from booking,car,car_type where
[Link] = booking.CAR_ID and
[Link] = car_type.ID and
datediff(booking.RETURN_DATE, booking.BOOKING_DATE) >= '15';

#6. Strazile sucursalelor Budget din Bucuresti


SELECT STREET_NAME
FROM branch_address,branch,agency WHERE
[Link]='Budget' and [Link] =
branch.AGENCY_ID and
branch.BRANCH_ADDRESS_ID = branch_address.ID and
branch_address.CITY_NAME='Bucuresti';

#7. Numerele de telefon de la sucursalele din Ploiesti


SELECT branch_address.PHONE_NUMBER AS 'Numar de telefon - Ploiesti'
FROM branch_address
WHERE CITY_NAME='Ploiesti';

#8. Email-ul clientilor din Alba Iulia SI NUMELE LOR


SELECT EMAIL as 'Adresa de e-mail'
FROM customer,customer_address
WHERE [Link] = customer_address.CUSTOMER_ID AND
customer_address.CITY = 'Alba Iulia';

#9. Clientii care au peste 21 de ani


SELECT First_name,Surname ,DATE_OF_BIRTH
FROM CUSTOMER;

2
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

#10. Numele agentiilor si numerele de telefon

SELECT NAME as 'Nume', PHONE_NUMBER as 'Numar de telefon' FROM


AGENCY
ORDER BY NAME ASC;

#11. Media preturilor de inchiriere pe zile

SELECT AVG(BASE_PRICE_PER_DAY) as 'Pretul mediu de inchiriere'


FROM CAR;

#12. Lista clientilor, fiecare cu ce masina a inchiriat

SELECT FIRST_NAME as 'Prenume', SURNAME as 'Nume', PRODUCER as


'Producator', NAME as 'Model'
FROM CAR, CAR_TYPE, BOOKING, CUSTOMER
WHERE BOOKING.CUSTOMER_ID = [Link]
AND car_type.id = car.car_type_id
AND [Link] = booking.car_id
ORDER BY SURNAME ASC;

#13. Lista sucursalelor cu masinile disponibile

SELECT [Link], CAR_TYPE.PRODUCER, CAR_TYPE.NAME


FROM BRANCH, CAR, CAR_TYPE
WHERE [Link] = CAR.BRANCH_ID AND CAR_TYPE.ID =
CAR.CAR_TYPE_ID;

#14. Masinile si tipul lor


SELECT PRODUCER,NAME, CAR_TYPE.TYPE
FROM CAR_TYPE
INNER JOIN CAR
ON CAR_TYPE.ID = CAR.CAR_TYPE_ID;

3
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

#15. Clientii cu adresa si data lor de nastere

SELECT FIRST_NAME, SURNAME, DATE_OF_BIRTH,CITY,STREET


FROM CUSTOMER JOIN CUSTOMER_ADDRESS
ON ([Link]=CUSTOMER_ADDRESS.CUSTOMER_ID)
ORDER BY DATE_OF_BIRTH ASC;
Vederi (Views) utilizate pe baza de date:

#1. Masini inchiriate

DROP VIEW IF EXISTS Numerele_Masinilor_inchiriate;

CREATE VIEW Numerele_Masinilor_inchiriate AS


Select distinct Registration_Number from Car
Where Id in (Select Car_id from Booking)
Group by Registration_Number;

#2. Clientii care au facut rezervari

DROP VIEW IF EXISTS Clienti_rezervari;

CREATE VIEW Clienti_rezervari AS


Select distinct First_name , Surname from Customer
Where [Link] in (Select booking.customer_id from booking)
Order by Surname asc;

Normalizarea datelor

Pentru ca datele sa poata fi relationate si utilizate corect este necesara


normalizarea bazei de date. Acest lucru presupune incadrarea in formele de
normalizare de mai jos:
4
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

1. Prima forma de normalizare (1NF)

Intr-o baza de date relationala, entitatile diferite trebuie stocate in tabele


diferite. Este recomandabil ca pentru fiecare entitate sa se creeze un tabel
separat. Foarte adesea aceasta forma de normalizare este prezentata intr-un alt
mod. In aceasta formulare se spune ca valoarea unui atribut al unei entitati
(modelat, in mod normal, in baza de date printr-o coloana) nu poate lua valori
multiple (ceea ce ar insemna utilizarea mai multor coloane de acelasi fel).

2. A doua forma de normalizare (2NF)

O tabela este in a doua forma de normalizare daca si numai


daca se gaseste in prima forma de normalizare si, in plus, orice
inregistrare dintr-o tabela poate fi identificata in mod unic printr-o cheie
primara si fiecare atribut (valoare dintr-o coloana) depinde in mod direct
de intreaga cheie [Link] a asigura dependenya fata de intreaga
cheie primara, este necesar ca in tabelele care au cheie compusa, fiecare
atribut sa depinda de toate coloanele care compun cheia primara. Daca un
tabel are cheie unica el intra automat in a doua forma de normalizare.

3. A treia forma de normalizare(3NF)

O tabela este in a treia forma de normalizare daca si numai daca


se gaseste in a doua forma de normalizare si, in plus, campurile care nu
sunt chei primare sunt independente unul de altul, in sensul ca nici un
camp sa nu fie obtinut prin aplicarea unei functii asupra valorii altor
campuri (campurile care nu sunt chei primare sunt independente intre ele
si depind numai de cheia primara). Incalcarea acestei forme poate fi
detectata analizand care campuri trebuie actualizate atunci cand se
actualizeaza un alt camp.
In afara de aceste trei forme de normalizare, in literatura de specialitate
mai sunt descrise si altele. In general insa, acestea trei sunt acoperitoare si se
accepta ca o baza de date este normalizata daca se gaseste in a treia forma de
normalizare.

5
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

4. Detalii de implementare

Pentru realizarea site-ului am folosit mai multe limbaje de programare.


Site-ul a fost realizat folosind : PHP, SQL, CSS si JavaScript. Pentru crearea
tabelelor si popularea lor am scris cod SQL in MySQL Workbench si
phpMyAdmin folosind ca server XAMPP. Customizarea template-ului a fost
realizata folosind CSS. Mai jos sunt prezentate cateva detalii despre fiecare in
parte:

MySQL Workbench este un instrument grafic pentru a lucra cu serverele


si bazele de date MySQL. Acesta este prevazut sa lucreze cu versiunile de
MySQL Server 5.1 si mai sus si tinde sa fie un instrument ce acopera cele mai
importante activitati de gestionare a bazelor de date.

XAMPP este un pachet de programe free software, open source si


crossplatform web server, care consta in Apache HTTP Server, MySQL
database si interpretoare pentru scripturile scrise in limbajele de programare
PHP si Perl.

SQL (Structured Query Language - Limbaj Structurat de Interogare) este


un limbaj de programare specific pentru manipularea datelor in sistemele de
manipulare a bazelor de date relationale (RDBMS), iar la origine este un limbaj
bazat pe algebra relationala. Acesta are ca scop inserarea datelor, interogatii,
actualizare si stergere, modificarea si crearea schemelor, precum si controlul
accesului la date. A devenit un standard in domeniu (standardizat ANSI-ISO),
fiind cel mai popular limbaj utilizat pentru creearea, modificarea, regasirea si
manipularea datelor de catre SGBD-urile (Sistemele de Gestiune a Bazelor de
Date) relationale. Pe langa versiunile standardizate ale limbajului, exista o
multime de dialecte si variante, unele proprietare, fiind specifice anumitor
SGBD-uri si de asemenea continand extensii pentru a suporta SBD-urile
(Sistemele de Baze de Date) obiectuale (obiectual-relationale).

6
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

HTML(HyperText Markup Language ) este un limbaj de marcare utilizat


pentru crearea paginilor web ce pot fi afisate intr-unbrowser (sau navigator).
Scopul HTML este mai degraba prezentarea informatiilor – paragrafe, fonturi,
tabele s.a.m.d. – decat descrierea semanticii documentului.

CSS (Cascading Style Sheets) este un limbaj (style language) care


defineste "layout-ul" pentru documentele HTML. CSS acopera culori, font-uri,
margini (borders), linii, inaltime, latime, imagini de fundal, pozitii avansate si
multe alte optiuni. CSS foloseste stiluri, acestea inglobeaza, sub un anumit
nume, atribute de formatare care se aplica asupra unui element individual din
pagina, asupra unui grup de elemente sau la nivelul intregului document.

JavaScript este un limbaj de programare orientat obiect bazat pe


conceptul prototipurilor. Este folosit mai ales pentru introducerea unor
functionalitati in paginile web, codul Javascript din aceste pagini fiind rulat de
catre browser. Limbajul este binecunoscut pentru folosirea sa in construirea
siturilor web, dar este folosit si pentru acesul la obiecte incastrate (embedded
objects) in alte aplicatii. In ciuda numelui si a unor similaritati in sintaxa, intre
JavaScript si limbajul Java nu exista nicio legatura.

PHP (Hypertext Preprocessor) este un limbaj de programare folosit initial


pentru a produce pagini web dinamice. Astazi este folosit pe scara larga in
dezvoltarea paginilor si aplicatiilor web. Se foloseste in principal inglobat in
codul HTML, dar incepand de la versiunea 4.3.0 se poate folosi si in mod „linie
de comanda” (CLI), permitand crearea de aplicatii independente.

Paginile .php ale aplicatiei `Rent a cat’ sunt urmatoarele: Agency,


Booking, BookingRaspuns, BookingRaspuns2, Cars, Customers,
CustomersRaspuns, CustomerRaspuns2, index si Query. Pagina principala este
pagina index. Pe pagina Query sunt exemplificate niste Interogari utilizate pe
7
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

baza de date, pe pagina Cars sunt prezentate masinile care pot fi inchiriate
impreuna cu niste date descriptive, iar pe pagina Agency gasim agentiile de la
care putem inchiria, impreuna cu datele de contact. Pe pagina Booking putem
insera sau sterge o comanda, daca inserarea a reusit se va sari la pagina
BookingRaspuns, iar daca stergerea a reusit se va sari la pagina
BookingRaspuns2. Din pagina Customers se va face inserarea unui nou client si
inserarea adresei clientului introdus. Daca inserarea clientului a reusit se va sari
pe pagina CustomersRaspuns, iar daca inserarea adresei a reusit se va sari pe
pagina CustomersRaspuns2.

Exemplu de cod PHP:

8
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

Proceduri utilizate pe baza de date:

[Link] client

DELIMITER //

DROP PROCEDURE IF EXISTS INSERT_NEW_CLIENT//

CREATE PROCEDURE `INSERT_NEW_CUSTOMER`(IN `ID`


INT(11) UNSIGNED, IN `LOGIN_NAME` VARCHAR(45), IN `EMAIL`
VARCHAR(45), IN `FIRST_NAME` VARCHAR(45), IN `SURNAME`
VARCHAR(45), IN `DATE_OF_BIRTH` DATE, IN `PASSWORD`
VARCHAR(45), IN `COMPANY_NAME` VARCHAR(45))
BEGIN

INSERT INTO CUSTOMER


(LOGIN_NAME,EMAIL,FIRST_NAME,SURNAME,DATE_OF_BIRTH,PAS
SWORD,COMPANY_NAME) VALUES
(LOGIN_NAME,EMAIL,FIRST_NAME,SURNAME,DATE_OF_BIRTH,PAS
SWORD,COMPANY_NAME);

END//

DELIMITER;

[Link] adresa client

DELIMITER //

DROP PROCEDURE IF EXISTS INSERT_CUSTOMER_ADDRESS//

9
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

CREATE PROCEDURE `INSERT_CUSTOMER_ADDRESS`(IN `ID`


INT(11) UNSIGNED, IN `STREET` VARCHAR(45), IN `CITY`
VARCHAR(45), IN `STREET_NUMBER` VARCHAR(45), IN `ZIP_CODE`
VARCHAR(10), IN `COUNTRY` VARCHAR(45), IN `PHONE_NUMBER`
VARCHAR(45), IN `CUSTOMER_ID` INT(11) UNSIGNED)
BEGIN

INSERT INTO CUSTOMER_ADDRESS


(STREET,CITY,STREET_NUMBER,ZIP_CODE,COUNTRY,PHONE_
NUMBER,CUSTOMER_ID)
VALUES
(STREET,CITY,STREET_NUMBER,ZIP_CODE,COUNTRY,PHONE_
NUMBER,CUSTOMER_ID);

END//

DELIMITER;

[Link] rezervare

DELIMITER //

DROP PROCEDURE IF EXISTS INSERT_BOOKING//

CREATE PROCEDURE `INSERT_BOOKING`(IN


`BOOKING_NUMBER` INT(11) UNSIGNED, IN `BOOKING_DATE`
DATE, IN `RETURN_DATE` DATE, IN `CAR_ID` INT(11), IN
`AGENCY_ID` INT(11), IN `CUSTOMER_ID` INT(11))

BEGIN

INSERT INTO
BOOKING(BOOKING_DATE,RETURN_DATE,CAR_ID,AGENCY_ID,CUS

10
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

TOMER_ID) VALUES
(BOOKING_DATE,RETURN_DATE,CAR_ID,AGENCY_ID,CUSTOMER_I
D);

END//

DELIMITER;

[Link] rezervare

DELIMITER //

DROP PROCEDURE IF EXISTS DELETE_BOOKING//

CREATE PROCEDURE `DELETE_BOOKING`(NUMBER INT(11))


BEGIN
DELETE FROM BOOKING WHERE
BOOKING_NUMBER=NUMBER;

END// DELIMITER;
Aceasta este pagina Home a website-ului:

11
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

Pe aceasta pagina se pot vizualiza masinile care se pot inchiria impreuna


cu datele descriptive:

12
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

Pe aceasta pagina se poate adauga sau sterge o rezervare:

Pe aceasta pagina se poate inregistra un nou client:

13
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

Aici se pot vizualiza datele de contact al agentiilor si al sucursalelor


acestora:

Aplicatia Rent a car este securizata folosind urmatoarele elemente:

1. Unul dintre triggere este folosit pentru a nu putea adauga in tabelul


Car_type decat dupa ce sa facut o adaugare in tabelul Car;
2. Al doilea trigger este folosit pentru a nu putea adauga o rezervare care
contine aceeasi data de rezervare si de returnare pentru aceeasi masina;
3. Cel de-al treilea trigger nu permite adaugarea unui nou client care are
aceeasi adresa de email;
4. Cheile primare nu permit utilizatorului introducerea unui nou element al
carui id este deja in baza de date.

14
FACULTATEA DE AUTOMATICA SI CALCULATOARE
CATEDRA CALCULATOARE

5. Concluzii, limitari si dezvoltari ulterioare

Dezvoltarea ulterioara poate aparea atat in partea bazei de date prin


introducerea unor noi tabele sau campuri, cat si in partea de interfata.
In partea de interfata se poate realiza un Log in cu username si parola sau un
Log in pentru un administrator care poate modifica orice informatie in baza de
date.
Se pot realiza mai multe proceduri pentru introducerea, stergerea sau
modifiarea datelor din baza de date.
Se poate trece intr-un mediu online pentru a vedea principiul de
functionare.

15

S-ar putea să vă placă și