Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- #include<conio.h>
- using namespace std;
- struct adresa
- {
- char *localitate, *tara, *strada;
- int cod_postal, numar;
- };
- struct date_contact
- {
- long int nr_telefon;
- char *email, *site, *facebook;
- };
- typedef enum { piscina = 0, restaurant = 1, sala_conf = 2, sala_sport = 3 }dotari;
- class Lista; //prototipul clasei Lista
- class Agentie //clasa de baza agentie
- {
- private:
- int tip;
- int id_cazare, nr_camere, num_loc, nr_cam_ocupate, pret;
- char *nume;
- bool loc_parcare;
- adresa a;
- date_contact d;
- Agentie *urm; //adresa urm element din lista
- public:
- Agentie(int tp, int id, char *n, char *local, char *tar, char *str, int cod_p, int nr, long int tel, char *em, char *st, char *fb, bool parc, int nr_cam, int nr_loc, int cam_ocup, int p) //constructor clasa de baza
- {
- tip = tp;
- id_cazare = id;
- nume = new char[strlen(n) + 1]; //alocare memorie pentru variabila nume
- strcpy(nume, n);
- a.localitate = new char[strlen(local) + 1];
- strcpy(a.localitate, local);
- a.tara = new char[strlen(tar) + 1];
- strcpy(a.tara, tar);
- a.strada = new char[strlen(str) + 1];
- strcpy(a.strada, str);
- a.cod_postal = cod_p;
- a.numar = nr;
- d.nr_telefon = tel;
- d.email = new char[strlen(em) + 1];
- strcpy(d.email, em);
- d.site = new char[strlen(st) + 1];
- strcpy(d.site, st);
- d.facebook = new char[strlen(fb) + 1];
- strcpy(d.facebook, fb);
- loc_parcare = parc;
- nr_camere = nr_cam;
- num_loc = nr_loc;
- nr_cam_ocupate = cam_ocup;
- pret = p;
- urm = NULL; //adresa noului nod este initial NULL
- }
- virtual void afisare() //functia de afisare elemente clasa de baza
- {
- cout << "-----------------------------------------\n";
- if (tip == 1)
- cout << "Tip: Hotel" << endl;
- else
- if (tip == 2)
- cout << "Tip: Pensiune" << endl;
- cout << "Id-ul cazarii: " << id_cazare << endl;
- cout << "Nume: " << nume << endl;
- cout << "Localitatea: " << a.localitate << endl;
- cout << "Tara: " << a.tara << endl;
- cout << "Strada: " << a.strada << endl;
- cout << "Codul postal: " << a.cod_postal << endl;
- cout << "Numar: " << a.numar << endl;
- cout << "Numarul de telefon: " << d.nr_telefon << endl;
- cout << "Email: " << d.email << endl;
- cout << "Site: " << d.site << endl;
- cout << "Facebook: " << d.facebook << endl;
- cout << "Locuri de parcare(0/1): " << loc_parcare << endl;
- cout << "Numar camere: " << nr_camere << endl;
- cout << "Numarul de locuri dintr-o camera: " << num_loc << endl;
- cout << "Numar camere ocupate: " << nr_cam_ocupate << endl;
- cout << "Pretul: " << pret << endl;
- }
- friend class Lista; //declararea clasei Lista friend la clasa agentie, pentru a se avea
- //acces la campurile acesteia
- };
- class Hotel :public Agentie //prima clasa derivata
- {
- private:
- dotari dot;
- int nr_stele;
- public:
- Hotel(int tp, int id, char *n, char *local, char *tar, char *str, int cod_p, int nr, long int tel, char *em, char *st, char *fb, bool parc, int nr_cam, int nr_loc, int cam_ocup, int p, dotari d, int stele) :Agentie(tp, id, n, local, tar, str, cod_p, nr, tel, em, st, fb, parc, nr_cam, nr_loc, cam_ocup, p)//constructor clasa derivata
- {
- dot = d;
- nr_stele = stele;
- }
- void afisare() //afisare elemente din clasa hotel
- {
- Agentie::afisare(); //apelare afisare elemente din clasa de baza
- if (dot == 0)
- cout << "Dotare: piscina" << endl;
- if (dot == 1)
- cout << "Dotare: restaurant" << endl;
- if (dot == 2)
- cout << "Dotare: sala de conferinte" << endl;
- if (dot == 3)
- cout << "Dotare: sala de sport" << endl;
- cout << "Nr stele: " << nr_stele << endl;
- }
- friend class Lista;
- };
- class Pensiune :public Agentie // a doua clasa derivata
- {
- private:
- int nr_margarete;
- bool brb;
- public:
- Pensiune(int tp, int id, char *n, char *local, char *tar, char *str, int cod_p, int nr, long int tel, char *em, char *st, char *fb, bool parc, int nr_cam, int nr_loc, int cam_ocup, int p, int marg, bool bb) :Agentie(tp, id, n, local, tar, str, cod_p, nr, tel, em, st, fb, parc, nr_cam, nr_loc, cam_ocup, p)//constructor clasa derivata
- {
- nr_margarete = marg;
- brb = bb;
- }
- void afisare() //functie afisare
- {
- Agentie::afisare();
- cout << "Nr margarete: " << nr_margarete << endl;
- if (brb == 0)
- cout << "Bed & breakfast(0/1): False " << endl;
- if (brb == 1)
- cout << "Bed & breakfast(0/1): True " << endl;
- }
- friend class Lista;
- };
- class Lista //clasa Lista
- {
- public:
- Agentie *head, *ultim; //capul listei
- void adaugare(Agentie *a); //adaugare in lista
- void afisare_lista(); //afisarea listei
- void stergere(char *n); //stergere din lista
- void afisare_cond(char *x, char *y); //calcularea ofertei cea mai avantajoasa
- //void Adaugare_Fata(Agentie*a); //-----daca faceai adaugarea in fata listei
- //void Adaugare_Spate(Agentie *a); ----daca faceai adaugarea in spatelei listei
- };
- //adaugare in lista ordonata
- void Lista::adaugare(Agentie *a)
- {
- Agentie *p; //var p este declarata de tip agentie
- p = head;
- if (p) //daca lista nu este vida
- {
- if (strcmp(a->nume, p->nume)<0) //daca nodul care se adauga este mai mic decat
- //primul nod din lista
- {
- a->urm = head; //noul nod se leaga de primul nod
- head = a; //capul listei devine noul nod
- }
- else
- {
- while (p->urm && strcmp((p->urm)->nume, a->nume)<0) //se parcurge lista
- //pana cand exista elemente si noul nod nu este mai mare decat nodul curent
- p = p->urm;
- a->urm = p->urm; //se fac legaturile intre noul nod si cele din lista
- p->urm = a;
- }
- }
- else
- head = a; //daca lista este vida, capul este nodul adaugat
- }
- //------------------------------------------------------------------------------------
- /*void Lista::Adaugare_Fata(Agentie *a) //adaugare in fata listei (pusa in comentarii pt ca folosim adaugarea ordonata)
- {
- if (head == NULL)
- {
- head = a;
- }
- else
- {
- a->urm = head;
- head = a;
- }
- }
- //--------------------------------------------------------------------------
- void Lista::Adaugare_Spate(Agentie *a) //adaugare la sfarsitul listei (pusa in comentarii pt ca folosim adaugarea ordonata)
- {
- Agentie *p;
- if (head == NULL)
- {
- head = a;
- }
- else
- {
- p = head;
- while (p->urm != NULL)
- p = p->urm;
- p->urm = a;
- }
- }*/
- //------------------------------------------------------------------------------
- void Lista::afisare_lista() //afisarea listei
- {
- Agentie *a;
- a = head; //se initializeaza cu capul listei
- if (!a) //daca lista este vida
- cout << "Lista este vida!";
- else
- while (a) //cat timp sunt noduri in lista
- {
- a->afisare(); //se apeleaza afisarea corespunzatoare nodului curent
- a = a->urm; //se trece la urm nod in lista
- system("pause");
- }
- }
- void introducere(Lista &l, int x) //introducere info in noduri
- {
- char nume[20], localitate[20], tara[20], strada[20], email[20], site[20], facebook[20];
- int id_cazare, nr_camere, num_loc, nr_cam_ocupate, pret, cod_postal, numar, nr_telefon;
- int nr_stele;
- int dot;
- int nr_margarete;
- bool loc_parcare, brb;
- Agentie *a;
- cout << "ID-ul cazarii: ";
- cin >> id_cazare;
- cout << "Nume: ";
- cin >> nume;
- cout << "Localitate: ";
- cin >> localitate;
- cout << "Tara: ";
- cin >> tara;
- cout << "Strada: ";
- cin >> strada;
- cout << "Codul postal: ";
- cin >> cod_postal;
- cout << "Numarul: ";
- cin >> numar;
- cout << "Numarul de telefon: ";
- cin >> nr_telefon;
- cout << "Emailul: ";
- cin >> email;
- cout << "Adresa site-ului: ";
- cin >> site;
- cout << "Adresa de facebook: ";
- cin >> facebook;
- cout << "Locuri de parcare(0/1): ";
- cin >> loc_parcare;
- cout << "Numarul total de camere: ";
- cin >> nr_camere;
- cout << "Numarul de locuri dintr-o camera: ";
- cin >> num_loc;
- cout << "Numarul de camere ocupate: ";
- cin >> nr_cam_ocupate;
- cout << "Pretul cazarii: ";
- cin >> pret;
- if (x == 0) // daca s-a ales adaugarea unui nou hotel
- {
- Hotel *h;
- cout << "Dati dotarea hotelului(0-piscina 1-restaurant 2-sala de conferinte 3-sala de sport): ";
- cin >> dot;
- dotari dota = static_cast<dotari>(dot);
- cout << "Dati numarul de stele: ";
- cin >> nr_stele;
- h = new Hotel(1, id_cazare, nume, localitate, tara, strada, cod_postal, numar, nr_telefon, email, site, facebook, loc_parcare, nr_camere, num_loc, nr_cam_ocupate, pret, dota, nr_stele); //apelare constructor cu info citite
- a = h; //cast pentru clasa de baza
- l.adaugare(a); //se adauga nodul
- //l.Adaugare_Fata(a); ---daca faceai adaugarea in fata listei
- //l.Adaugare_Spate(a) ----daca faceai adaugarea la sfarsitul listei
- }
- else if (x == 1) //daca s-a ales adaugarea unei pensiuni
- {
- Pensiune *p;
- cout << "Dati numarul de margarete: ";
- cin >> nr_margarete;
- cout << "Dati daca are optiunea bed&breakfast(0/1): ";
- cin >> brb;
- p = new Pensiune(2, id_cazare, nume, localitate, tara, strada, cod_postal, numar, nr_telefon, email, site, facebook, loc_parcare, nr_camere, num_loc, nr_cam_ocupate, pret, nr_margarete, brb); //apelare constructor cu info citite
- a = p;//cast pentru clasa de baza
- l.adaugare(a);//se adauga nodul
- //l.Adaugare_Fata(a); //---daca faceai adaugarea in fata listei
- //l.Adaugare_Spate(a); ----daca faceai adaugarea la sfarsitul listei
- }
- }
- void Lista::stergere(char *n) //stergere element din lista
- {
- Agentie *p, *q;
- p = q = head;
- if (p)
- {
- while (p && strcmp(p->nume, n) != 0) //cat timp nu s-a gasit nodul care se doreste
- //a fi sters
- {
- q = p; //se inainteaza in lista cu cei 2 pointeri
- p = p->urm;
- }
- if (p) //daca lista nu este goala
- {
- if (p != q) //daca nu este un singur nod in lista
- {
- q->urm = p->urm; //se realizeaza legaturile dintre nodurile care
- //raman
- delete p; //se sterge nodul dorit
- }
- else
- {
- head = p->urm; //se sterge capul liste daca nodul de sters este capul
- //liste si capul devine urm nod
- delete p;
- }
- }
- else
- cout << "Numele nu exista in lista!";
- }
- else
- cout << "Lista este vida!";
- }
- void Lista::afisare_cond(char *x, char *y)
- {
- Agentie *ag;
- ag = head; //se initializeaza cu capul listei
- if (!ag) //daca lista este vida
- cout << "Lista este vida!";
- else
- while (ag)
- {
- if (ag->loc_parcare == 1)
- if (strcmp(ag->a.localitate, x) == 0 && strcmp(ag->a.tara, y) == 0)
- ag->afisare();
- ag = ag->urm;
- //system("pause");
- }
- }
- void main() //programul principal
- {
- int opt;
- char localitatea[20], tara[20];
- Lista l;
- l.head = NULL;
- do
- {
- system("CLS");
- //meniu
- cout << "1.Adaugare oferta hotel.\n";
- cout << "2.Adaugare oferta pensiune.\n";
- cout << "3.Afisare oferte.\n";
- cout << "4.Afisare cazari cu parcare proprie dintr-o anumita localitate si tara\n";
- cout << "5.Stergere cazare.\n";
- cout << "0.Iesire.\n";
- cout << "Dati optiunea dvs: ";
- cin >> opt;
- cout << "\n";
- //apelare functii in functie de optiunea aleasa
- switch (opt)
- {
- case 1: introducere(l, 0);
- break;
- case 2: introducere(l, 1);
- break;
- case 3: l.afisare_lista();
- break;
- case 4:
- cout << "Dati numele localitatii: ";
- cin >> localitatea;
- cout << "Dati numele tarii: ";
- cin >> tara;
- l.afisare_cond(localitatea, tara);
- system("pause");
- break;
- case 5: char nm[20];
- cout << "Dati numele ofertei pe care doriti sa o stergeti: ";
- cin >> nm;
- l.stergere(nm);
- system("pause");
- break;
- case 0: break;
- default:cout << "Comanda gresita!";
- }
- } while (opt != 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement