Sunteți pe pagina 1din 7

TEMA 7 Baza de date pentru o unitate hoteliera (rezervari, incasari, aprovizionari)

Se doreste informatizarea unei unitati hoteliere care are un anumit numar de camere si
apartamente. O camera poate avea minim 2 paturi, dar poate fi ocupata de o singura
persoana in regim single. Exista si camere cu 3 paturi , precum si apartamente cu 1 sau 2
camere.
Fiecare camera are o lista de inventar mijloace fixe(nr. de paturi, dulapuri, scaune,etc.) si pt.
fiecare camera se intocmeste o lista de consumabile necesare(sapun, hartie ig., etc.).
Se specifica pt fiecare camera, nr de paturi, dotarea(tv,frigider,etc.),daca este sau nu
ocupata, data ocuparii/eliberarii, data urmatoarei rezervari. Pentru fiecare client se retin
datele din bulletin, se pot emite chitante , iar in caz de rezervare se plateste de catre client
un avans in valoare de 10% din tarifulde cazare pe perioada solicitata. Hotelul are un plan
tarifar stabilit pe camere/numar de ocupanti. Daca clientul depaseste 10 zile beneficeaza de
o reducere de 5% din suma totala pe care trebuie sa o achite.
Cerinte minime:
· se vor putea lista in orice moment camerele ocupate, situatia rezervarilor pe o anumita
luna, lista tuturor clientilor la o anumita data cu toate informatiile corespunzatoare.
· se vor putea obtine liste cu incasarile /cheltuielile lunare.
· Se vor tipari lista de inventar mijloace fixe pentru o anumita camera si necesarul zilnic de
consumabile.

Crearea Bazei de date cu tabelele aferente


CREATE DATABASE `unitate_hoteliera`

CREATE TABLE `camera` (

`nr_camera` int(3) NOT NULL,

`apartament?` varchar(2) DEFAULT NULL,

`nr_paturi/camere` int(1) NOT NULL,

`nr_pers_incamera` int(1) DEFAULT NULL,

`dotari` varchar(50) NOT NULL,

`ocupat?` varchar(2) NOT NULL,

`nume_client` varchar(30) DEFAULT NULL,

`data_checkin` date DEFAULT NULL,


`data_checkout` date DEFAULT NULL,

`data_urmator_checkin` date DEFAULT NULL

INSERT INTO `camera` (`nr_camera`, `apartament?`, `nr_paturi/camere`, `nr_pers_incamera`,


`dotari`, `ocupat?`, `nume_client`, `data_checkin`, `data_checkout`, `data_urmator_checkin`)
VALUES

(100, 'DA', 3, 2, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Popescu', '2020-01-20', '2020-01-23', '2020-02-
20'),

(101, 'DA', 2, 2, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Ionea', '2020-01-01', '2020-01-10', '2020-01-15'),

(102, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Ionesc', '2020-01-06', '2020-01-20', '2020-01-22'),

(103, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Popesc', '2020-01-11', '2020-01-28', '2020-02-02'),

(104, 'NU', 2, 0, 'TV, Frigider, Telefon, WI-FI', 'NU', NULL, NULL, NULL, NULL),

(105, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Pop', '2020-01-05', '2020-01-13', '2020-01-20'),

(106, 'DA', 2, 2, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Stroia', '2020-01-10', '2020-01-23', '2020-01-27'),

(107, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Ionicescu', '2020-01-03', '2020-01-16', '2020-01-
20'),

(108, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Andreescu', '2020-01-21', '2020-02-11', '2020-02-
20'),

(109, 'NU', 2, 2, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Bursuc', '2020-01-06', '2020-01-12', '2020-01-14'),

(110, 'DA', 1, 0, 'TV, Frigider, Telefon, WI-FI', 'NU', NULL, NULL, NULL, NULL),

(111, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Popa', '2020-01-02', '2020-01-14', '2020-01-15'),

(112, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Stan', '2020-01-20', '2020-01-29', '2020-02-10'),

(113, 'NU', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Stoica', '2020-01-07', '2020-01-12', '2020-01-17'),

(114, 'DA', 3, 3, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Stoian', '2020-01-09', '2020-01-19', '2020-01-25'),

(115, 'DA', 1, 1, 'TV, Frigider, Telefon, WI-FI', 'DA', 'Stroian', '2020-01-10', '2020-01-22', '2020-02-10');

CREATE TABLE `clienti` (

`nume_client` varchar(30) NOT NULL,

`prenume_client` varchar(40) NOT NULL,

`cnp` varchar(13) NOT NULL,

`adresa` varchar(100) NOT NULL,

`nr_tel` varchar(10) NOT NULL


)

INSERT INTO `clienti` (`nume_client`, `prenume_client`, `cnp`, `adresa`, `nr_tel`) VALUES

('Popescu', 'Andrei', '1780627900334', 'str.Libertatii 33 Timisoara', '0765258152'),

('Ionea', 'Catalin', '1870126542023', 'str Soarelui 123 Timisoara', '0756236584'),

('Ionesc', 'Nicolae', '1970623501325', 'str Bulevardului 23 Hunedoara', '0758246826'),

('Popesc', 'Mirel', '1790324241036', 'str Primaverii 11 Arad', '0765824152'),

('Pop', 'Marcel', '1930525241036', 'str Primaverii 11 Arad', '0765824152'),

('Stroia', 'Alexandru', '1951202241036', 'str Primaverii 11 Arad', '0765824152'),

('Ionicescu', 'Mariana', '1900505241036', 'str Primaverii 11 Arad', '0765824152'),

('Andreescu', 'Mirela', '1800329241036', 'str Primaverii 11 Arad', '0765824152'),

('Bursuc', 'Anton', '1700225241036', 'str Primaverii 11 Arad', '0765824152'),

('Popa', 'Andreea', '1650126241036', 'str Primaverii 11 Arad', '0765824152'),

('Stan', 'Alexandra', '1990315241036', 'str Primaverii 11 Arad', '0765824152'),

('Stoica', 'Robert', '1790624241036', 'str Primaverii 11 Arad', '0765824152'),

('Stoian', 'Mircea', '1680703241036', 'str Primaverii 11 Arad', '0765824152'),

('Stroian', 'Dorel', '1690828241036', 'str Primaverii 11 Arad', '0765824152');

CREATE TABLE `inventar_camera` (

`nr_camera` int(3) NOT NULL,

`nr_paturi` int(11) NOT NULL,

`nr_dulapuri` int(11) NOT NULL,

`nr_scaune` int(11) NOT NULL,

`nr_sapun` int(11) NOT NULL,

`nr_hartie` int(11) NOT NULL,

`nr_lenjerii` int(11) NOT NULL

INSERT INTO `inventar_camera` (`nr_camera`, `nr_paturi`, `nr_dulapuri`, `nr_scaune`, `nr_sapun`,


`nr_hartie`, `nr_lenjerii`) VALUES

(100, 3, 4, 4, 4, 2, 6),

(101, 2, 4, 2, 3, 1, 4),
(102, 1, 2, 2, 7, 3, 2),

(103, 1, 2, 2, 5, 2, 6),

(104, 2, 4, 2, 8, 5, 10),

(105, 1, 2, 2, 5, 2, 4),

(106, 2, 4, 2, 5, 1, 5),

(107, 1, 2, 2, 3, 2, 7),

(108, 1, 2, 2, 6, 2, 8),

(109, 2, 4, 2, 2, 0, 5),

(110, 1, 2, 2, 8, 5, 10),

(111, 1, 2, 2, 7, 3, 9),

(112, 1, 2, 2, 6, 4, 8),

(113, 1, 2, 2, 7, 3, 9),

(114, 3, 4, 4, 1, 1, 2),

(115, 1, 2, 2, 5, 4, 8);

Cerinte:

 Listarea camerelor ocupate:


SELECT * FROM camera WHERE `ocupat?` = "DA"

 Listarea rezervarilor pe o anumita luna (In cazul de mai jos, luna


februarie), ordonate dupa data
SELECT * FROM camera WHERE data_urmator_checkin BETWEEN '2020-02-01' AND '2020-02-28'

ORDER BY `camera`.`data_urmator_checkin` ASC

 Lista tuturor clientilor la o anumita data cu toate informatiile


corespunzatoare (in cazul asta data de “12-01-2020”) data checkout
in ordine crescatoare
SELECT clienti.nume_client,

clienti.prenume_client,
clienti.cnp AS CNP_client,

clienti.nr_tel AS nr_telefon_client,

nr_camera AS camera_ocupata,

`apartament?`,

nr_pers_incamera,

data_checkin,

data_checkout,

(CASE

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) >= 10 &&


(camera.`apartament?` = "DA")

THEN @Venituri := (DATEDIFF(camera.data_checkout, camera.data_checkin)


+1) * (400 + (camera.nr_pers_incamera*100)) * 0.95

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) < 10 &&


(camera.`apartament?` = "DA")

THEN @Venituri := (DATEDIFF(camera.data_checkout, camera.data_checkin)


+1) * (400 + (camera.nr_pers_incamera*100))

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) >= 10 &&


(camera.`apartament?` = "NU")

THEN @Venituri := (DATEDIFF(camera.data_checkout, camera.data_checkin)


+1) * (150 + (camera.nr_pers_incamera*50)) * 0.95

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) < 10 &&


(camera.`apartament?` = "NU")

THEN @Venituri := (DATEDIFF(camera.data_checkout, camera.data_checkin)


+1) * (150 + (camera.nr_pers_incamera*50))

ELSE 1

END) AS total_plata_client_checkout

FROM camera

INNER JOIN clienti ON clienti.nume_client = camera.nume_client

WHERE '2020-01-12' BETWEEN data_checkin AND data_checkout

ORDER BY `camera`.`data_checkout` ASC

 se vor putea obtine liste cu incasarile /cheltuielile lunare.


SELECT

COALESCE(camera.nr_camera, "TOTAL" ) nr_camera,


SUM(CASE

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) >= 10 &&


(camera.`apartament?` = "DA")

THEN @Venituri := (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) * (400 +


(camera.nr_pers_incamera*100)) * 0.95

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) < 10 &&


(camera.`apartament?` = "DA")

THEN @Venituri := (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) * (400 +


(camera.nr_pers_incamera*100))

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) >= 10 &&


(camera.`apartament?` = "NU")

THEN @Venituri :=

(DATEDIFF(camera.data_checkout, camera.data_checkin)+1) * (150 +


(camera.nr_pers_incamera*50)) * 0.95

WHEN (DATEDIFF(camera.data_checkout, camera.data_checkin)+1) < 10 &&


(camera.`apartament?` = "NU")

THEN @Venituri :=

(DATEDIFF(camera.data_checkout, camera.data_checkin)+1) * (150 +


(camera.nr_pers_incamera*50))

ELSE 1

END) AS total_incasari,

SUM(@Cheltuieli := ((8-inventar_camera.nr_sapun)*10)+((5-inventar_camera.nr_hartie)*2)+((10-
inventar_camera.nr_lenjerii)*30)) AS cheltuieli, SUM(@Venituri - @Cheltuieli) AS profit

FROM camera

INNER JOIN inventar_camera ON inventar_camera.nr_camera = camera.nr_camera

WHERE camera.data_checkout BETWEEN '2020-01-01' AND '2020-01-30'

GROUP BY camera.nr_camera WITH ROLLUP

 Se vor tipari lista de inventar mijloace fixe pentru o anumita camera


si necesarul zilnic de consumabile.

SELECT nr_camera,

nr_paturi,

nr_dulapuri,
nr_scaune,

nr_sapun,

nr_hartie,

nr_lenjerii,

(8 - nr_sapun) AS necesar_sapun,

(5 - nr_hartie) AS necesar_hartie,

(10 - nr_lenjerii) AS necesar_lenjerii

FROM inventar_camera

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