Sunteți pe pagina 1din 6

Aplicația 3 - FIRMA DE ÎNCHIRIERI AUTO

O firmă de închirieri auto dispune de un parc auto format din maşini de mărci diferite, cu
motorizări diferite (benzină / motorină), număr de locuri diferit (5 sau 7 persoane) precum şi un
tarif zilnic stabilit diferenţiat pentru fiecare maşină în parte în funcţie de dotări.
Pentru a avea o evidenţă a tuturor clienţilor vom presupune o tabelă de clienţi în care vom
trece codul client (CNP pentru persoane fizice sau CIF pentru firme), numele, adresa, localitatea
şi numărul de telefon.
Închirierile vor fi înregistrate în tabela INCHIRIERI. Aici vom avea numărul tranzacţiei, data
închirierii, data restituirii, numărul de înmatriculare al maşinii, codul clientului şi un câmp (disc)
pentru discount-ul acordat (în procente).
Deoarece fiecare maşină se presupune că trebuie să intre atât periodic cât şi accidental în
service vom înregistra aceste intrări în tabela REVIZII. Astfel vom putea vedea disponibilitatea
maşinilor pentru închiriere, făcând diferenţa dintre totalul maşinilor din firmă şi maşinile
închiriate plus maşinile aflate în service. În tabela REVIZII vom avea câmpurile: numărul
operaţiei, tipul reviziei (RP = periodică / RA = accidentală / RK = capitală), data începerii
operaţiei (intrării în service), data terminării (ieşirii din service) şi numărul de înmatriculare al
maşinii.
Aplicaţia de gestiune a închirierilor auto se poate realiza cu ajutorul următoarelor relaţii
(tabele):

MASINI [nr_inmat, marca, carburant, nr_locuri, tarif]

nr_inmat Marca carburant nr_locuri tarif


BV55ABC Ford Focus B 5 30
BV22DEF Dacia Logan B 7 15
BV33PRQ VW Polo M 5 35
BV11MNP Renault Megan M 5 25
BV44RST Ford Focus B 5 15
Tabela MASINI
Cheia primară este (nr_inmat).

CLIENTI [cod_cli, nume, adresa, loc, tel]

cod_cli Nume adresa loc tel


163082208 Moldoveanu Ion Bucegi 100 Brasov 072255
188032920 Munteanu Ana Ciucas 45 Cluj 072388
RO123456 Alfa SRL Rodnei 70 Iasi 072411
RO567890 Beta SA Cibin 50 Brasov 072244
185030408 Ardeleanu Vasile Retezat 10 Cluj 072599
Tabela CLIENTI
Cheia primară este (cod_cli).

1
INCHIRIERI [nr_tranz, data_i, data_r, nr_inmat, cod_cli, disc]

nr_tranz data_i data_r nr_inmat cod_cli disc


T001 15/01/2017 18/01/2017 BV22DEF 185030408 0
T002 25/01/2017 05/02/2017 BV55ABC 163082208 0
T003 10/02/2017 15/02/2017 BV55ABC RO123456 0
T004 10/02/2017 12/02/2017 BV11MNP RO567890 0
T005 16/02/2017 18/02/2017 BV33PRQ 185030408 10
T006 20/02/2017 28/02/2017 BV44RST RO123456 20
T007 20/02/2017 24/02/2017 BV11MNP 188032920 0
Tabela INCHIRIERI
Cheia primară este (nr_tranz). Atributele (nr_inmat) şi (cod_cli) sunt chei externe, deoarece
sunt definite pe domeniul primar al altor relaţii: (nr_inmat) este cheie primară în relaţia
MASINI, iar (cod_cli) este cheie primară în relaţia CLIENTI. În tabelă datele au fost indicate sub
forma ZZ/LL/AA.

REVIZII [nr_oper, tip_revizie, data_i, data_t, nr_inmat]

nr_oper tip_revizie data_i data_t nr_inmat


R001 RP 18/01/2017 18/01/2017 BV55ABC
R002 RA 19/01/2017 10/02/2017 BV22DEF
R003 RA 09/02/2017 15/02/2017 BV33PRQ
R004 RP 11/02/2017 11/02/2017 BV44RST
R005 RA 25/02/2017 28/02/2017 BV33PRQ
Tabela REVIZII
Cheia primară este (nr_oper). Atributul (nr_inmat) este cheie externă, deoarece este definit pe
domeniul primar al altei relaţii. În cazul nostru (nr_inmat) este cheie primară în relaţia MASINI.
În tabelă datele au fost indicate sub forma ZZ/LL/AA.

Schema legăturilor dintre tabelele bazei de date

2
Pentru interogările formulate se vor prezenta rezolvările utilizând limbajul SQL din Microsoft
Access.

P1. Care sunt maşinile disponibile în data de 11 februarie 2017?

Lista: | nr_inmat | marca |

SQL Access

SELECT nr_inmat, marca


FROM masini
WHERE nr_inmat NOT IN
(SELECT inchirieri.nr_inmat
FROM inchirieri
WHERE #02-11-2017# BETWEEN inchirieri.data_i AND inchirieri.data_r)
AND
nr_inmat NOT IN
(SELECT revizii.nr_inmat
FROM revizii
WHERE #02-11-2017# BETWEEN revizii.data_i AND revizii.data_t);

Lista rezultat pentru P1 (SQL Access)

P2. Care sunt maşinile, pe benzină cu 7 locuri, disponibile în data de 11 februarie 2017?

Lista: | nr_inmat | marca |

SQL Access

SELECT nr_inmat, marca


FROM masini
WHERE nr_inmat NOT IN
(SELECT inchirieri.nr_inmat
FROM inchirieri
WHERE #02-11-2017# BETWEEN inchirieri.data_i AND inchirieri.data_r)
AND

3
nr_inmat NOT IN
(SELECT revizii.nr_inmat
FROM revizii
WHERE #02-11-2017# BETWEEN revizii.data_i AND revizii.data_t)
AND
carburant="B" AND nr_locuri=7;

Lista rezultat pentru P2 (SQL Access)

P3. Cât a plătit clientul Alfa SRL (cod_client RO123456) pentru închirierile efectuate?

Lista: | cod_cli | nume | nr zile inchiriere | total plata |

SQL Access

SELECT clienti.cod_cli, nume, nr_zile_de_inchiriere, total_plata


FROM clienti, [SELECT cod_cli, SUM(data_r-data_i+1) AS nr_zile_de_inchiriere,
SUM(tarif*(data_r-data_i+1)*(100-disc)/100) AS total_plata
FROM masini, inchirieri
WHERE masini.nr_inmat=inchirieri.nr_inmat
GROUP BY cod_cli]. AS tmp
WHERE clienti.cod_cli=tmp.cod_cli
AND
clienti.nume="ALFA SRL";

Lista rezultat pentru P3 (SQL Access)

P4. Situaţia maşinilor în data de 15 februarie 2017.

Lista: | nr. masini disponibile | nr masini inchiriate | nr masini revizie |

4
SQL Access
SELECT nr_masini_disponibile, nr_masini_inchiriate, nr_masini_revizie
FROM [SELECT COUNT(NR_INMAT) AS nr_masini_disponibile
FROM masini
WHERE nr_inmat NOT IN
(SELECT inchirieri.nr_inmat
FROM inchirieri
WHERE #02-15-2017# BETWEEN inchirieri.data_i
AND inchirieri.data_r)
AND nr_inmat NOT IN
(SELECT revizii.nr_inmat
FROM revizii
WHERE #02-15-2017# BETWEEN revizii.data_i
AND revizii.data_t)]. AS tmp1,
[SELECT COUNT( inchirieri.nr_inmat) AS nr_masini_inchiriate
FROM inchirieri
WHERE #02-15-2017# BETWEEN inchirieri.data_i
AND inchirieri.data_r]. AS tmp2,
[SELECT COUNT(revizii.nr_inmat) AS nr_masini_revizie
FROM revizii
WHERE #02-15-2017# BETWEEN revizii.data_i
AND revizii.data_t]. AS tmp3;

Lista rezultat pentru P4 (SQL Access)

P5. Care au fost cele mai solicitate mărci la închiriere, ca număr de zile? (Se vor evidenţia
primele două marci)

Lista: | marca | nr zile inchiriere |

SQL Access

SELECT TOP 2 marca, SUM( nr_zile) AS nr_zile_pe_marca


FROM [SELECT nr_inmat, SUM(data_r-data_i+1) AS nr_zile
FROM inchirieri
GROUP BY nr_inmat]. AS tmp,
masini
WHERE tmp.nr_inmat=masini.nr_inmat
GROUP BY marca
ORDER BY SUM( nr_zile) DESC;
5
Lista rezultat pentru P5 (SQL Access)

P6. Care este maşina cu tariful cel mai mic, disponibilă, în data de 20 februarie?

Lista: | nr_inmat | marca | tarif |

SQL Access

SELECT TOP 1 nr_inmat, marca, tarif


FROM masini
WHERE nr_inmat NOT IN
(SELECT inchirieri.nr_inmat
FROM inchirieri
WHERE #02-20-2017# BETWEEN inchirieri.data_i AND inchirieri.data_r)
AND
nr_inmat NOT IN
(SELECT revizii.nr_inmat
FROM revizii
WHERE #02-20-2017# BETWEEN revizii.data_i AND revizii.data_t)
ORDER BY tarif;

Lista rezultat pentru P6 (SQL Access)

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