Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<conio.h>
- #include<string.h>
- using namespace std;
- class lista;
- enum dot{piscina, restaurant, sala_conferinta, sala_sport};
- typedef struct data1
- {
- char localitate[20], tara[20], strada[20];
- int cod_postal, numar;
- }DATA1;
- typedef struct data2
- {
- int nr_tel;
- char email[20], site[20], facebook[20];
- }DATA2;
- class cazare
- {
- private:
- int id_cazare;
- static int total_id;
- char nume_cazare[20];
- DATA1 adresa;
- DATA2 date_contact;
- bool loc_parcare;
- int numar_camere;
- int num_loc;
- int numar_cam_ocup;
- int pret_cazare;
- int tip;
- cazare *urm;
- public:
- cazare(char nume[20], DATA1 adrs, DATA2 contact, bool parcare, int nr_cam, int loc, int cam_ocup, int pret, int tp)
- {
- id_cazare = total_id++;
- strcpy_s(nume_cazare, nume);
- adresa = adrs;
- date_contact = contact;
- loc_parcare = parcare;
- numar_camere = nr_cam;
- num_loc = loc;
- numar_cam_ocup = cam_ocup;
- pret_cazare = pret;
- tip = tp;
- urm = NULL;
- }
- virtual void afisare()
- {
- cout << "ID cazare: " << id_cazare << endl;
- cout << "Nume: " << nume_cazare << endl;
- cout << "Adresa: " << adresa.localitate << "/" << adresa.cod_postal << "/" << adresa.tara << "/" << adresa.strada << "/" << adresa.numar << endl;
- cout << "Date de contact: " << date_contact.nr_tel << "/" << date_contact.email << "/" << date_contact.site << "/" << date_contact.facebook << endl;
- cout << "Loc de parcare [0/1]: " << loc_parcare << endl;
- cout << "Numar de camerer: " << numar_camere << endl;
- cout << "Numar de locuri in camera: " << num_loc << endl;
- cout << "Numar de camere ocupate: " << numar_cam_ocup << endl;
- cout << "Pret cazare/noapte/persoana: " << pret_cazare << endl;
- }
- friend class lista;
- };
- int cazare::total_id = 0;
- class hotel :public cazare
- {
- private:
- int numar_stele;
- dot dotari;
- public:
- hotel(char nume[20], DATA1 adrs, DATA2 contact, bool parcare, int nr_cam, int loc, int cam_ocup, int pret, int tp, int stele, char dotare[20]) :cazare(nume, adrs, contact, parcare, nr_cam, loc, cam_ocup, pret, tp)
- {
- numar_stele = stele;
- if (!stricmp(dotare, "piscina"))
- dotari = piscina;
- else
- if (!stricmp(dotare, "restaurant"))
- dotari = restaurant;
- else
- if (!stricmp(dotare, "sala_conferinta"))
- dotari = sala_conferinta;
- else
- dotari = sala_sport;
- }
- void afisare()
- {
- cazare::afisare();
- cout << "Numar de stele: " << numar_stele << endl;
- cout << "Dotari: "<<dotari <<'\n';
- }
- friend class lista;
- };
- class pensiune :public cazare
- {
- private:
- int numar_margarete;
- bool BB;
- public:
- pensiune(char nume[20], DATA1 adrs, DATA2 contact, bool parcare, int nr_cam, int loc, int cam_ocup, int pret, int tp, int margarete, bool bb) :cazare(nume, adrs, contact, parcare, nr_cam, loc, cam_ocup, pret, tp)
- {
- numar_margarete = margarete;
- BB = bb;
- }
- void afisare()
- {
- cazare::afisare();
- cout << "Numar de margarete: " << numar_margarete << endl;
- cout << "Bed&Breakfast [0/1] (1 daca se ofera): " << BB << endl;
- }
- friend class lista;
- };
- class lista
- {
- public:
- cazare *head;
- void adaugare(cazare *a);
- void afisare_hotel();
- void afisare_pensiune();
- void cautare(int pret);
- void stergere(int pret);
- };
- class MyException
- {
- public:
- char str_what[80];
- int what;
- MyException() { *str_what = 0; what = 0; }
- MyException(char *s, int e)
- {
- strcpy_s(str_what, s);
- what = e;
- }
- };
- void lista::adaugare(cazare *a)
- {
- cazare *p;
- p = head;
- if (p == NULL)
- {
- head = a;
- }
- else
- {
- if (strcmp(a->nume_cazare, head->nume_cazare) < 0)
- {
- a->urm = head;
- head = a;
- }
- else
- {
- while (p->urm&&strcmp(p->nume_cazare, a->nume_cazare) > 0)
- p = p->urm;
- a->urm = p->urm;
- p->urm = a;
- }
- }
- }
- void lista::afisare_hotel()
- {
- cazare *p;
- p = head;
- while (p){
- if (p->tip == 1)
- p->afisare();
- p = p->urm;
- }
- }
- void lista::afisare_pensiune()
- {
- cazare *p;
- p = head;
- while (p){
- if (p->tip == 2)
- p->afisare();
- p = p->urm;
- }
- }
- void lista::cautare(int pret)
- {
- cazare *p;
- p = head;
- if (p == NULL)
- {
- cout << "Nu exista !";
- }
- else
- {
- while (p)
- {
- if (p->pret_cazare == pret)
- p->afisare();
- p = p->urm;
- }
- }
- }
- void lista::stergere(int pret)
- {
- cazare *p, *aux;
- p = head;
- if (p == NULL)
- {
- cout << "Nu exista !";
- }
- else
- {
- if (head->pret_cazare == pret)
- {
- aux = head;
- head = head->urm;
- free(aux);
- }
- else
- {
- while (p->urm != NULL && (p->urm->pret_cazare == pret))
- p = p->urm;
- aux = p->urm;
- p->urm = p->urm->urm;
- free(aux);
- }
- }
- }
- void introducere(lista &l, int x)
- {
- cazare *c;
- hotel *h;
- pensiune *pns;
- int numar_camere, num_loc, numar_cam_ocup, pret_cazare, numar_stele, numar_margarete;
- bool loc_parcare, BB;
- char nume_cazare[20];
- char dotare[20];
- DATA1 adresa;
- DATA2 date_contact;
- cout << "Nume cazare: ";
- cin >> nume_cazare;
- cout << "Localitate: ";
- cin >> adresa.localitate;
- cout << "Cod postal: ";
- cin >> adresa.cod_postal;
- cout << "Tara: ";
- cin >> adresa.tara;
- cout << "Strada: ";
- cin >> adresa.strada;
- cout << "Numar: ";
- cin >> adresa.numar;
- cout << "Numar telefon: ";
- cin >> date_contact.nr_tel;
- cout << "Adresa de email: ";
- cin >> date_contact.email;
- cout << "Site: ";
- cin >> date_contact.site;
- cout << "Facebook: ";
- cin >> date_contact.facebook;
- cout << "Loc de parcare[0/1]: ";
- cin >> loc_parcare;
- cout << "Numar total camere: ";
- cin >> numar_camere;
- cout << "Numar locuri in camera: ";
- cin >> num_loc;
- cout << "Numar camere ocupate: ";
- cin >> numar_cam_ocup;
- cout << "Pret cazare/noapte/persoane: ";
- cin >> pret_cazare;
- if (x == 1)
- {
- try
- {
- cout << "Numar de stele: ";
- cin >> numar_stele;
- if (numar_stele > 7)
- throw MyException("Numar de stele mai mare ca 7", numar_stele);
- }
- catch (MyException e)
- {
- do
- {
- cout << "Introduceti numar de stele (maxim 7): ";
- cin >> numar_stele;
- } while (numar_stele > 7);
- }
- cout << "Dotare: ";
- cin >> dotare;
- h = new hotel(nume_cazare, adresa, date_contact, loc_parcare, numar_camere, num_loc, numar_cam_ocup, pret_cazare, 1, numar_stele,dotare);
- c = h;
- l.adaugare(c);
- }
- if (x == 2)
- {
- try
- {
- cout << "Numar margarete: ";
- cin >> numar_margarete;
- if (numar_margarete > 5)
- throw MyException("Numar de margarete mai mare ca 5", numar_margarete);
- }
- catch (MyException e)
- {
- do
- {
- cout << "Introduceti numar de margarete (maxim 5): ";
- cin >> numar_margarete;
- } while (numar_margarete > 5);
- }
- cout << "Bed&Breakfast[0/1] (1 daca se ofera): ";
- cin >> BB;
- pns = new pensiune(nume_cazare, adresa, date_contact, loc_parcare, numar_camere, num_loc, numar_cam_ocup, pret_cazare, 2, numar_margarete, BB);
- c = pns;
- l.adaugare(c);
- }
- }
- int main()
- {
- lista l;
- l.head = NULL;
- int opt;
- int pret;
- do
- {
- system("cls");
- cout << "1.Adaugare hotel. \n";
- cout << "2.Adaugare pensiune. \n";
- cout << "3.Afisare hoteluri. \n";
- cout << "4.Afisare pensiuni. \n";
- cout << "5.Cautare cazare dupa pret. \n";
- cout << "6.Stergere cazare dupa pret. \n";
- cout << "0.Iesire. \n";
- cout << "Introduceti optiune: ";
- cin >> opt;
- switch (opt)
- {
- case 1:
- introducere(l, 1);
- break;
- case 2:
- introducere(l, 2);
- break;
- case 3:
- l.afisare_hotel(); system("pause");
- break;
- case 4:
- l.afisare_pensiune(); system("pause");
- break;
- case 5:
- cout << "Introduceti pretul dupa care se cauta: ";
- cin >> pret;
- l.cautare(pret);
- system("pause");
- break;
- case 6:
- cout << "Introduceti pretul dupa care se sterge: ";
- cin >> pret;
- l.stergere(pret);
- break;
- case 0:
- exit(0);
- break;
- }
- } while (opt != 0);
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement