Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.00 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. #include<conio.h>
  4. using namespace std;
  5.  
  6. struct adresa
  7. {
  8. char *localitate, *tara, *strada;
  9. int cod_postal, numar;
  10. };
  11.  
  12. struct date_contact
  13. {
  14. long int nr_telefon;
  15. char *email, *site, *facebook;
  16. };
  17.  
  18. typedef enum { piscina = 0, restaurant = 1, sala_conf = 2, sala_sport = 3 }dotari;
  19.  
  20. class Lista; //prototipul clasei Lista
  21. class Agentie //clasa de baza agentie
  22. {
  23. private:
  24. int tip;
  25. int id_cazare, nr_camere, num_loc, nr_cam_ocupate, pret;
  26. char *nume;
  27. bool loc_parcare;
  28. adresa a;
  29. date_contact d;
  30. Agentie *urm; //adresa urm element din lista
  31. public:
  32. 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
  33. {
  34. tip = tp;
  35. id_cazare = id;
  36. nume = new char[strlen(n) + 1]; //alocare memorie pentru variabila nume
  37. strcpy(nume, n);
  38. a.localitate = new char[strlen(local) + 1];
  39. strcpy(a.localitate, local);
  40. a.tara = new char[strlen(tar) + 1];
  41. strcpy(a.tara, tar);
  42. a.strada = new char[strlen(str) + 1];
  43. strcpy(a.strada, str);
  44. a.cod_postal = cod_p;
  45. a.numar = nr;
  46. d.nr_telefon = tel;
  47. d.email = new char[strlen(em) + 1];
  48. strcpy(d.email, em);
  49. d.site = new char[strlen(st) + 1];
  50. strcpy(d.site, st);
  51. d.facebook = new char[strlen(fb) + 1];
  52. strcpy(d.facebook, fb);
  53. loc_parcare = parc;
  54. nr_camere = nr_cam;
  55. num_loc = nr_loc;
  56. nr_cam_ocupate = cam_ocup;
  57. pret = p;
  58. urm = NULL; //adresa noului nod este initial NULL
  59. }
  60. virtual void afisare() //functia de afisare elemente clasa de baza
  61. {
  62. cout << "-----------------------------------------\n";
  63. if (tip == 1)
  64. cout << "Tip: Hotel" << endl;
  65. else
  66. if (tip == 2)
  67. cout << "Tip: Pensiune" << endl;
  68. cout << "Id-ul cazarii: " << id_cazare << endl;
  69. cout << "Nume: " << nume << endl;
  70. cout << "Localitatea: " << a.localitate << endl;
  71. cout << "Tara: " << a.tara << endl;
  72. cout << "Strada: " << a.strada << endl;
  73. cout << "Codul postal: " << a.cod_postal << endl;
  74. cout << "Numar: " << a.numar << endl;
  75. cout << "Numarul de telefon: " << d.nr_telefon << endl;
  76. cout << "Email: " << d.email << endl;
  77. cout << "Site: " << d.site << endl;
  78. cout << "Facebook: " << d.facebook << endl;
  79. cout << "Locuri de parcare(0/1): " << loc_parcare << endl;
  80. cout << "Numar camere: " << nr_camere << endl;
  81. cout << "Numarul de locuri dintr-o camera: " << num_loc << endl;
  82. cout << "Numar camere ocupate: " << nr_cam_ocupate << endl;
  83. cout << "Pretul: " << pret << endl;
  84. }
  85. friend class Lista; //declararea clasei Lista friend la clasa agentie, pentru a se avea
  86. //acces la campurile acesteia
  87. };
  88. class Hotel :public Agentie //prima clasa derivata
  89. {
  90. private:
  91. dotari dot;
  92. int nr_stele;
  93. public:
  94. 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
  95. {
  96. dot = d;
  97. nr_stele = stele;
  98. }
  99. void afisare() //afisare elemente din clasa hotel
  100. {
  101. Agentie::afisare(); //apelare afisare elemente din clasa de baza
  102. if (dot == 0)
  103. cout << "Dotare: piscina" << endl;
  104. if (dot == 1)
  105. cout << "Dotare: restaurant" << endl;
  106. if (dot == 2)
  107. cout << "Dotare: sala de conferinte" << endl;
  108. if (dot == 3)
  109. cout << "Dotare: sala de sport" << endl;
  110. cout << "Nr stele: " << nr_stele << endl;
  111. }
  112. friend class Lista;
  113. };
  114. class Pensiune :public Agentie // a doua clasa derivata
  115. {
  116. private:
  117. int nr_margarete;
  118. bool brb;
  119. public:
  120. 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
  121. {
  122. nr_margarete = marg;
  123. brb = bb;
  124. }
  125. void afisare() //functie afisare
  126. {
  127. Agentie::afisare();
  128. cout << "Nr margarete: " << nr_margarete << endl;
  129. if (brb == 0)
  130. cout << "Bed & breakfast(0/1): False " << endl;
  131. if (brb == 1)
  132. cout << "Bed & breakfast(0/1): True " << endl;
  133. }
  134. friend class Lista;
  135. };
  136. class Lista //clasa Lista
  137. {
  138. public:
  139. Agentie *head, *ultim; //capul listei
  140. void adaugare(Agentie *a); //adaugare in lista
  141. void afisare_lista(); //afisarea listei
  142. void stergere(char *n); //stergere din lista
  143. void afisare_cond(char *x, char *y); //calcularea ofertei cea mai avantajoasa
  144.  
  145. //void Adaugare_Fata(Agentie*a); //-----daca faceai adaugarea in fata listei
  146. //void Adaugare_Spate(Agentie *a); ----daca faceai adaugarea in spatelei listei
  147. };
  148. //adaugare in lista ordonata
  149. void Lista::adaugare(Agentie *a)
  150. {
  151. Agentie *p; //var p este declarata de tip agentie
  152. p = head;
  153. if (p) //daca lista nu este vida
  154. {
  155. if (strcmp(a->nume, p->nume)<0) //daca nodul care se adauga este mai mic decat
  156. //primul nod din lista
  157. {
  158. a->urm = head; //noul nod se leaga de primul nod
  159. head = a; //capul listei devine noul nod
  160. }
  161. else
  162. {
  163. while (p->urm && strcmp((p->urm)->nume, a->nume)<0) //se parcurge lista
  164. //pana cand exista elemente si noul nod nu este mai mare decat nodul curent
  165. p = p->urm;
  166. a->urm = p->urm; //se fac legaturile intre noul nod si cele din lista
  167. p->urm = a;
  168. }
  169. }
  170. else
  171. head = a; //daca lista este vida, capul este nodul adaugat
  172. }
  173.  
  174. //------------------------------------------------------------------------------------
  175. /*void Lista::Adaugare_Fata(Agentie *a) //adaugare in fata listei (pusa in comentarii pt ca folosim adaugarea ordonata)
  176. {
  177. if (head == NULL)
  178. {
  179. head = a;
  180. }
  181. else
  182. {
  183. a->urm = head;
  184. head = a;
  185. }
  186. }
  187.  
  188. //--------------------------------------------------------------------------
  189. void Lista::Adaugare_Spate(Agentie *a) //adaugare la sfarsitul listei (pusa in comentarii pt ca folosim adaugarea ordonata)
  190. {
  191. Agentie *p;
  192. if (head == NULL)
  193. {
  194. head = a;
  195. }
  196. else
  197. {
  198. p = head;
  199. while (p->urm != NULL)
  200. p = p->urm;
  201. p->urm = a;
  202. }
  203. }*/
  204. //------------------------------------------------------------------------------
  205. void Lista::afisare_lista() //afisarea listei
  206. {
  207. Agentie *a;
  208. a = head; //se initializeaza cu capul listei
  209. if (!a) //daca lista este vida
  210. cout << "Lista este vida!";
  211. else
  212. while (a) //cat timp sunt noduri in lista
  213. {
  214. a->afisare(); //se apeleaza afisarea corespunzatoare nodului curent
  215. a = a->urm; //se trece la urm nod in lista
  216. system("pause");
  217. }
  218. }
  219.  
  220. void introducere(Lista &l, int x) //introducere info in noduri
  221. {
  222. char nume[20], localitate[20], tara[20], strada[20], email[20], site[20], facebook[20];
  223. int id_cazare, nr_camere, num_loc, nr_cam_ocupate, pret, cod_postal, numar, nr_telefon;
  224. int nr_stele;
  225. int dot;
  226. int nr_margarete;
  227. bool loc_parcare, brb;
  228. Agentie *a;
  229. cout << "ID-ul cazarii: ";
  230. cin >> id_cazare;
  231. cout << "Nume: ";
  232. cin >> nume;
  233. cout << "Localitate: ";
  234. cin >> localitate;
  235. cout << "Tara: ";
  236. cin >> tara;
  237. cout << "Strada: ";
  238. cin >> strada;
  239. cout << "Codul postal: ";
  240. cin >> cod_postal;
  241. cout << "Numarul: ";
  242. cin >> numar;
  243. cout << "Numarul de telefon: ";
  244. cin >> nr_telefon;
  245. cout << "Emailul: ";
  246. cin >> email;
  247. cout << "Adresa site-ului: ";
  248. cin >> site;
  249. cout << "Adresa de facebook: ";
  250. cin >> facebook;
  251. cout << "Locuri de parcare(0/1): ";
  252. cin >> loc_parcare;
  253. cout << "Numarul total de camere: ";
  254. cin >> nr_camere;
  255. cout << "Numarul de locuri dintr-o camera: ";
  256. cin >> num_loc;
  257. cout << "Numarul de camere ocupate: ";
  258. cin >> nr_cam_ocupate;
  259. cout << "Pretul cazarii: ";
  260. cin >> pret;
  261.  
  262. if (x == 0) // daca s-a ales adaugarea unui nou hotel
  263. {
  264. Hotel *h;
  265. cout << "Dati dotarea hotelului(0-piscina 1-restaurant 2-sala de conferinte 3-sala de sport): ";
  266. cin >> dot;
  267. dotari dota = static_cast<dotari>(dot);
  268. cout << "Dati numarul de stele: ";
  269. cin >> nr_stele;
  270. 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
  271. a = h; //cast pentru clasa de baza
  272. l.adaugare(a); //se adauga nodul
  273.  
  274. //l.Adaugare_Fata(a); ---daca faceai adaugarea in fata listei
  275. //l.Adaugare_Spate(a) ----daca faceai adaugarea la sfarsitul listei
  276. }
  277. else if (x == 1) //daca s-a ales adaugarea unei pensiuni
  278. {
  279. Pensiune *p;
  280. cout << "Dati numarul de margarete: ";
  281. cin >> nr_margarete;
  282. cout << "Dati daca are optiunea bed&breakfast(0/1): ";
  283. cin >> brb;
  284. 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
  285. a = p;//cast pentru clasa de baza
  286. l.adaugare(a);//se adauga nodul
  287.  
  288. //l.Adaugare_Fata(a); //---daca faceai adaugarea in fata listei
  289. //l.Adaugare_Spate(a); ----daca faceai adaugarea la sfarsitul listei
  290. }
  291. }
  292. void Lista::stergere(char *n) //stergere element din lista
  293. {
  294. Agentie *p, *q;
  295. p = q = head;
  296. if (p)
  297. {
  298. while (p && strcmp(p->nume, n) != 0) //cat timp nu s-a gasit nodul care se doreste
  299. //a fi sters
  300. {
  301. q = p; //se inainteaza in lista cu cei 2 pointeri
  302. p = p->urm;
  303. }
  304. if (p) //daca lista nu este goala
  305. {
  306. if (p != q) //daca nu este un singur nod in lista
  307. {
  308. q->urm = p->urm; //se realizeaza legaturile dintre nodurile care
  309. //raman
  310. delete p; //se sterge nodul dorit
  311. }
  312. else
  313. {
  314. head = p->urm; //se sterge capul liste daca nodul de sters este capul
  315. //liste si capul devine urm nod
  316. delete p;
  317. }
  318. }
  319. else
  320. cout << "Numele nu exista in lista!";
  321. }
  322. else
  323. cout << "Lista este vida!";
  324. }
  325.  
  326. void Lista::afisare_cond(char *x, char *y)
  327. {
  328. Agentie *ag;
  329. ag = head; //se initializeaza cu capul listei
  330. if (!ag) //daca lista este vida
  331. cout << "Lista este vida!";
  332. else
  333. while (ag)
  334. {
  335. if (ag->loc_parcare == 1)
  336. if (strcmp(ag->a.localitate, x) == 0 && strcmp(ag->a.tara, y) == 0)
  337. ag->afisare();
  338. ag = ag->urm;
  339. //system("pause");
  340. }
  341. }
  342.  
  343.  
  344.  
  345. void main() //programul principal
  346. {
  347. int opt;
  348. char localitatea[20], tara[20];
  349. Lista l;
  350. l.head = NULL;
  351. do
  352. {
  353. system("CLS");
  354. //meniu
  355. cout << "1.Adaugare oferta hotel.\n";
  356. cout << "2.Adaugare oferta pensiune.\n";
  357. cout << "3.Afisare oferte.\n";
  358. cout << "4.Afisare cazari cu parcare proprie dintr-o anumita localitate si tara\n";
  359. cout << "5.Stergere cazare.\n";
  360. cout << "0.Iesire.\n";
  361. cout << "Dati optiunea dvs: ";
  362. cin >> opt;
  363. cout << "\n";
  364. //apelare functii in functie de optiunea aleasa
  365. switch (opt)
  366. {
  367. case 1: introducere(l, 0);
  368. break;
  369. case 2: introducere(l, 1);
  370. break;
  371. case 3: l.afisare_lista();
  372. break;
  373. case 4:
  374. cout << "Dati numele localitatii: ";
  375. cin >> localitatea;
  376. cout << "Dati numele tarii: ";
  377. cin >> tara;
  378. l.afisare_cond(localitatea, tara);
  379. system("pause");
  380. break;
  381. case 5: char nm[20];
  382. cout << "Dati numele ofertei pe care doriti sa o stergeti: ";
  383. cin >> nm;
  384. l.stergere(nm);
  385. system("pause");
  386. break;
  387. case 0: break;
  388. default:cout << "Comanda gresita!";
  389. }
  390. } while (opt != 0);
  391. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement