Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string>
- #include <list>
- #include <iterator>
- using namespace std;
- void ex(int stele)
- {
- if (stele > 7)
- throw "Eroare";
- }
- typedef struct { string localiate, tara, strada; int cod, numar; }adresa;
- typedef struct { string nrtel, mail, site, facebook; }date_contact;
- class Cazare
- {
- protected :
- static int count;
- int id, camere=0;
- string nume_cazare;
- adresa adr;
- date_contact date;
- bool parcare;
- int nr_camere,nr_loc,nr_cam_ocup,pret;
- public:
- bool operator <(const Cazare &item) const
- {
- return pret > item.pret;
- }
- string get_tara() { return adr.tara; }
- string get_localitate() { return adr.localiate; }
- string get_nume() { return nume_cazare; }
- int set_camere_ocup(int a) { return nr_cam_ocup += a; }
- int get_camere_ocup() { return nr_cam_ocup; }
- bool get_parc() { return parcare; }
- //Cazare(int nr_camere_ocup) { this->nr_cam_ocup = nr_camere_ocup; }
- Cazare(string cazare, adresa adr, date_contact date, bool parcare, int nr_camere, int nr_loc, int nr_cam_ocup, int pret)
- {
- this->count++;
- this->id = count;
- this->camere += nr_camere;
- this->nume_cazare = cazare;
- this->adr = adr;
- this->date = date;
- this->parcare = parcare;
- this->nr_camere = nr_camere;
- this->nr_cam_ocup = nr_cam_ocup;
- this->nr_loc = nr_loc;
- this->pret = pret;
- }
- int camtotal() { return camere; }
- virtual void afisare()
- {
- cout <<"ID: "<<id<< " Nume: " << nume_cazare << endl;
- cout << "----Adresa---\n";
- cout << "Tara " << adr.tara << " Localiatea " << adr.localiate << " Cod postal " << adr.cod << " Strada " << adr.strada << " Numar " << adr.numar << endl;
- cout << "---Date Contact---\n";
- cout << "Facebook " << date.facebook << " Email " << date.mail << " NR.tel " << date.nrtel << " Site " << date.site << endl;
- cout << "Loc parcare " <<(parcare == 1 ? "DA" : "NU")<<endl;
- cout << "Nr camere " << nr_camere << " Nr locuri camera " << nr_loc << " Nr camere ocupate " << nr_cam_ocup << endl;
- cout << "Pret " << pret << endl;
- }
- };
- int Cazare::count = 0;
- class Hotel :public Cazare
- {private:
- typedef enum{piscina,rest,sala_conf}dotari;
- dotari dot;
- int nr_stele;
- public:
- dotari get_dot() { return dot; }
- Hotel(string cazare, adresa adr, date_contact date, bool parcare, int nr_camere, int nr_loc, int nr_cam_ocup, int pret, int dota, int nr_stele) :Cazare(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret)
- {
- try
- {
- ex(nr_stele);
- this->nr_stele = nr_stele;
- }
- catch (...) { cout << "Nr stele peste limita\n"; }
- this->dot = dotari(dota);
- }
- void afisare()
- {
- Cazare::afisare();
- cout << "Nr stele " << nr_stele << endl;
- cout << "Dotari " << dot<<endl;
- }
- };
- class Pensiune:public Cazare
- {
- private:
- int nr_margarete;
- bool BB;
- public:
- Pensiune(string cazare, adresa adr, date_contact date, bool parcare, int nr_camere, int nr_loc, int nr_cam_ocup, int pret, int nr_margarete, bool BB) :Cazare(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret)
- {
- this->nr_margarete = nr_margarete;
- this->BB = BB;
- }
- void afisare()
- {
- Cazare::afisare();
- cout << "Margarete " << nr_margarete << endl;
- cout << "BB " << (BB == 1 ? "DA" : "NU")<<endl;
- }
- };
- list<Cazare*>l;
- list <Cazare*>::iterator p;
- void citire()
- {
- string cazare;
- adresa adr;
- date_contact date;
- bool parcare, BB;
- int nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele, nr_margarete,o;
- cout << "Nume\n";
- cin >> cazare;
- cout << "----Adresa---\n";
- cout << "Tara\n";
- cin >> adr.tara;
- cout << "Localitate\n";
- cin >> adr.localiate;
- cout << "Cod postal\n";
- cin >> adr.cod;
- cout << "Strada\n";
- cin >> adr.strada;
- cout << "Numar stdrada\n";
- cin >> adr.numar;
- cout << "---Date contact---\n";
- cout << "Nr.telefon\n";
- cin >> date.nrtel;
- cout << "Email\n";
- cin >> date.mail;
- cout << "Facebook\n";
- cin >> date.facebook;
- cout << "Site\n";
- cin >> date.site;
- cout << "Loc parcare\n[0].NU\n[1].DA\n";
- cin >> parcare;
- cout << "Nr camere\n";
- cin >> nr_camere;
- cout << "Nr locuri din camera\n";
- cin >> nr_loc;
- cout << "Nr camere ocupate\n";
- cin >> nr_cam_ocup;
- cout << "Pret\n";
- cin >> pret;
- cout << "[1].Hotel\n[2].Pensiune\n";
- cin >> o;
- if (o == 1)
- {
- cout << "Dotari\n[1].Piscina\n[2].Restaurant\n[3].Sala conferinta\n";
- cin >> dota;
- cout << "Nr stele hotel\n";
- cin >> nr_stele;
- if (l.empty() == true)
- l.push_back(new Hotel(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele));
- else
- {
- auto p = l.begin();
- if (cazare < (*p)->get_nume())
- l.push_front(new Hotel(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele));
- else
- l.push_back(new Hotel(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele));
- }
- }
- else if (o == 2)
- {
- cout << "Nr margarete\n";
- cin >> nr_margarete;
- cout << "Bed&Breakfast\n[0].NU\n[1].DA\n";
- cin >> BB;
- if (l.empty() == true)
- l.push_back(new Pensiune(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret,nr_margarete,BB));
- else
- {
- auto p = l.begin();
- if (cazare < (*p)->get_nume())
- l.push_front(new Pensiune(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, nr_margarete, BB));
- else
- l.push_back(new Pensiune(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, nr_margarete, BB));
- }
- }
- }
- void afisare()
- {
- int o,nr_camere=0;
- cout << "[1].Hoteluri\n[2].Pensiuni\n";
- cin >> o;
- for ( auto q = l.begin(); q != l.end(); q++)
- {
- cout << endl;
- Hotel *photel = static_cast<Hotel*>(*q);
- Pensiune *ppensiune = static_cast<Pensiune*>(*q);
- switch (o)
- {
- case 1:
- if (photel)
- {
- photel->afisare();
- nr_camere+=photel->camtotal();
- }
- break;
- case 2:
- if (ppensiune)
- {
- ppensiune->afisare();
- nr_camere += ppensiune->camtotal();
- }
- break;
- default:
- cout << "Gresit\n";
- break;
- }
- }
- cout <<"Toatal nr camere "<< nr_camere << endl;
- }
- void cautare(string tara,string localitate)
- {
- for ( p = l.begin(); p != l.end(); p++)
- {
- Hotel *photel = dynamic_cast<Hotel*>(*p);
- Pensiune *ppensiune = dynamic_cast<Pensiune*>(*p);
- if (photel)
- if (photel->get_tara() == tara && photel->get_localitate() == localitate && photel->get_parc() == true)
- photel->afisare();
- if (ppensiune)
- if (ppensiune->get_tara() == tara && ppensiune->get_localitate() == localitate && ppensiune->get_parc() == true)
- ppensiune->afisare();
- }
- }
- void stergre(string nume)
- {
- p = l.begin();
- while (p != l.end())
- {
- if ((*p)->get_nume() == nume)
- p = l.erase(p);
- else
- p++;
- }
- }
- void dotare()
- {
- int dota;
- cout << "Ce dotare?\n[1].Piscina\n[2].Restaurant\n[3].Sala caonferinte\n";
- cin >> dota;
- l.sort();
- for ( p = l.begin(); p != l.end(); p++)
- {
- Hotel *photel = dynamic_cast<Hotel*>(*p);
- Pensiune *ppensiune = dynamic_cast<Pensiune*>(*p);
- if (photel)
- if (photel->get_dot() == dota)
- photel->afisare();
- }
- }
- void incrementare(string nume,int increment)
- {
- for (p=l.begin();p!=l.end();p++)
- if ((*p)->get_nume() == nume)
- {
- (*p)->set_camere_ocup(increment);
- }
- }
- int main()
- {
- int o,increment;
- string nume, tara, localitate;
- do
- {
- cout << "[1].Citire\n";
- cout << "[2].Afisare\n";
- cout << "[3].Cautare\n";
- cout << "[4].Stergre\n";
- cout << "[5].Afisare anumita dotare\n";
- cout << "[6].Incremenare\n";
- cout << "[0].Iesire\n";
- cout << "[99].Sterge consola\n";
- cin >> o;
- switch (o)
- {
- case 1:
- citire();
- break;
- case 2:
- afisare();
- break;
- case 3:
- cout << "Tara\n";
- cin >> tara;
- cout << "Localitatea\n";
- cin >> localitate;
- cautare(tara, localitate);
- break;
- case 4:
- cout << "Nume cazare\n";
- cin >> nume;
- stergre(nume);
- break;
- case 5:
- dotare();
- break;
- case 6:
- cout << "Ce cazare?\n";
- cin >> nume;
- cout << "Cu cat vreti sa incrementati\n";
- cin >> increment;
- incrementare(nume, increment);
- break;
- case 99:
- system("cls");
- break;
- default:
- cout << "Gresit\n";
- break;
- }
- } while (o != 0);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement