Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.77 KB | None | 0 0
  1. #include<iostream>
  2. #include<conio.h>
  3. #include<string.h>
  4. using namespace std;
  5. class lista;
  6.  
  7. enum dot{piscina, restaurant, sala_conferinta, sala_sport};
  8.  
  9. typedef struct data1
  10. {
  11. char localitate[20], tara[20], strada[20];
  12. int cod_postal, numar;
  13. }DATA1;
  14.  
  15. typedef struct data2
  16. {
  17. int nr_tel;
  18. char email[20], site[20], facebook[20];
  19. }DATA2;
  20.  
  21. class cazare
  22. {
  23. private:
  24. int id_cazare;
  25. static int total_id;
  26. char nume_cazare[20];
  27. DATA1 adresa;
  28. DATA2 date_contact;
  29. bool loc_parcare;
  30. int numar_camere;
  31. int num_loc;
  32. int numar_cam_ocup;
  33. int pret_cazare;
  34. int tip;
  35. cazare *urm;
  36. public:
  37. cazare(char nume[20], DATA1 adrs, DATA2 contact, bool parcare, int nr_cam, int loc, int cam_ocup, int pret, int tp)
  38. {
  39. id_cazare = total_id++;
  40. strcpy_s(nume_cazare, nume);
  41. adresa = adrs;
  42. date_contact = contact;
  43. loc_parcare = parcare;
  44. numar_camere = nr_cam;
  45. num_loc = loc;
  46. numar_cam_ocup = cam_ocup;
  47. pret_cazare = pret;
  48. tip = tp;
  49. urm = NULL;
  50. }
  51. virtual void afisare()
  52. {
  53. cout << "ID cazare: " << id_cazare << endl;
  54. cout << "Nume: " << nume_cazare << endl;
  55. cout << "Adresa: " << adresa.localitate << "/" << adresa.cod_postal << "/" << adresa.tara << "/" << adresa.strada << "/" << adresa.numar << endl;
  56. cout << "Date de contact: " << date_contact.nr_tel << "/" << date_contact.email << "/" << date_contact.site << "/" << date_contact.facebook << endl;
  57. cout << "Loc de parcare [0/1]: " << loc_parcare << endl;
  58. cout << "Numar de camerer: " << numar_camere << endl;
  59. cout << "Numar de locuri in camera: " << num_loc << endl;
  60. cout << "Numar de camere ocupate: " << numar_cam_ocup << endl;
  61. cout << "Pret cazare/noapte/persoana: " << pret_cazare << endl;
  62. }
  63. friend class lista;
  64. };
  65.  
  66. int cazare::total_id = 0;
  67.  
  68. class hotel :public cazare
  69. {
  70. private:
  71. int numar_stele;
  72. dot dotari;
  73. public:
  74. 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)
  75. {
  76. numar_stele = stele;
  77. if (!stricmp(dotare, "piscina"))
  78. dotari = piscina;
  79. else
  80. if (!stricmp(dotare, "restaurant"))
  81. dotari = restaurant;
  82. else
  83. if (!stricmp(dotare, "sala_conferinta"))
  84. dotari = sala_conferinta;
  85. else
  86. dotari = sala_sport;
  87. }
  88. void afisare()
  89. {
  90. cazare::afisare();
  91. cout << "Numar de stele: " << numar_stele << endl;
  92. cout << "Dotari: "<<dotari <<'\n';
  93. }
  94. friend class lista;
  95. };
  96.  
  97. class pensiune :public cazare
  98. {
  99. private:
  100. int numar_margarete;
  101. bool BB;
  102. public:
  103. 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)
  104. {
  105. numar_margarete = margarete;
  106. BB = bb;
  107. }
  108. void afisare()
  109. {
  110. cazare::afisare();
  111. cout << "Numar de margarete: " << numar_margarete << endl;
  112. cout << "Bed&Breakfast [0/1] (1 daca se ofera): " << BB << endl;
  113. }
  114. friend class lista;
  115. };
  116.  
  117. class lista
  118. {
  119. public:
  120. cazare *head;
  121. void adaugare(cazare *a);
  122. void afisare_hotel();
  123. void afisare_pensiune();
  124. void cautare(int pret);
  125. void stergere(int pret);
  126. };
  127.  
  128. class MyException
  129. {
  130. public:
  131. char str_what[80];
  132. int what;
  133. MyException() { *str_what = 0; what = 0; }
  134. MyException(char *s, int e)
  135. {
  136. strcpy_s(str_what, s);
  137. what = e;
  138. }
  139. };
  140.  
  141. void lista::adaugare(cazare *a)
  142. {
  143. cazare *p;
  144. p = head;
  145. if (p == NULL)
  146. {
  147. head = a;
  148. }
  149. else
  150. {
  151. if (strcmp(a->nume_cazare, head->nume_cazare) < 0)
  152. {
  153. a->urm = head;
  154. head = a;
  155. }
  156. else
  157. {
  158. while (p->urm&&strcmp(p->nume_cazare, a->nume_cazare) > 0)
  159. p = p->urm;
  160. a->urm = p->urm;
  161. p->urm = a;
  162. }
  163. }
  164. }
  165.  
  166. void lista::afisare_hotel()
  167. {
  168. cazare *p;
  169. p = head;
  170. while (p){
  171. if (p->tip == 1)
  172. p->afisare();
  173. p = p->urm;
  174. }
  175. }
  176.  
  177. void lista::afisare_pensiune()
  178. {
  179. cazare *p;
  180. p = head;
  181. while (p){
  182. if (p->tip == 2)
  183. p->afisare();
  184. p = p->urm;
  185. }
  186. }
  187.  
  188. void lista::cautare(int pret)
  189. {
  190. cazare *p;
  191. p = head;
  192. if (p == NULL)
  193. {
  194. cout << "Nu exista !";
  195. }
  196. else
  197. {
  198. while (p)
  199. {
  200. if (p->pret_cazare == pret)
  201. p->afisare();
  202. p = p->urm;
  203. }
  204. }
  205. }
  206.  
  207. void lista::stergere(int pret)
  208. {
  209. cazare *p, *aux;
  210. p = head;
  211. if (p == NULL)
  212. {
  213. cout << "Nu exista !";
  214. }
  215. else
  216. {
  217. if (head->pret_cazare == pret)
  218. {
  219. aux = head;
  220. head = head->urm;
  221. free(aux);
  222. }
  223. else
  224. {
  225. while (p->urm != NULL && (p->urm->pret_cazare == pret))
  226. p = p->urm;
  227. aux = p->urm;
  228. p->urm = p->urm->urm;
  229. free(aux);
  230. }
  231. }
  232. }
  233.  
  234. void introducere(lista &l, int x)
  235. {
  236. cazare *c;
  237. hotel *h;
  238. pensiune *pns;
  239. int numar_camere, num_loc, numar_cam_ocup, pret_cazare, numar_stele, numar_margarete;
  240. bool loc_parcare, BB;
  241. char nume_cazare[20];
  242. char dotare[20];
  243. DATA1 adresa;
  244. DATA2 date_contact;
  245. cout << "Nume cazare: ";
  246. cin >> nume_cazare;
  247. cout << "Localitate: ";
  248. cin >> adresa.localitate;
  249. cout << "Cod postal: ";
  250. cin >> adresa.cod_postal;
  251. cout << "Tara: ";
  252. cin >> adresa.tara;
  253. cout << "Strada: ";
  254. cin >> adresa.strada;
  255. cout << "Numar: ";
  256. cin >> adresa.numar;
  257. cout << "Numar telefon: ";
  258. cin >> date_contact.nr_tel;
  259. cout << "Adresa de email: ";
  260. cin >> date_contact.email;
  261. cout << "Site: ";
  262. cin >> date_contact.site;
  263. cout << "Facebook: ";
  264. cin >> date_contact.facebook;
  265. cout << "Loc de parcare[0/1]: ";
  266. cin >> loc_parcare;
  267. cout << "Numar total camere: ";
  268. cin >> numar_camere;
  269. cout << "Numar locuri in camera: ";
  270. cin >> num_loc;
  271. cout << "Numar camere ocupate: ";
  272. cin >> numar_cam_ocup;
  273. cout << "Pret cazare/noapte/persoane: ";
  274. cin >> pret_cazare;
  275. if (x == 1)
  276. {
  277. try
  278. {
  279. cout << "Numar de stele: ";
  280. cin >> numar_stele;
  281. if (numar_stele > 7)
  282. throw MyException("Numar de stele mai mare ca 7", numar_stele);
  283. }
  284. catch (MyException e)
  285. {
  286. do
  287. {
  288. cout << "Introduceti numar de stele (maxim 7): ";
  289. cin >> numar_stele;
  290. } while (numar_stele > 7);
  291. }
  292. cout << "Dotare: ";
  293. cin >> dotare;
  294. h = new hotel(nume_cazare, adresa, date_contact, loc_parcare, numar_camere, num_loc, numar_cam_ocup, pret_cazare, 1, numar_stele,dotare);
  295. c = h;
  296. l.adaugare(c);
  297. }
  298. if (x == 2)
  299. {
  300. try
  301. {
  302. cout << "Numar margarete: ";
  303. cin >> numar_margarete;
  304. if (numar_margarete > 5)
  305. throw MyException("Numar de margarete mai mare ca 5", numar_margarete);
  306. }
  307. catch (MyException e)
  308. {
  309. do
  310. {
  311. cout << "Introduceti numar de margarete (maxim 5): ";
  312. cin >> numar_margarete;
  313. } while (numar_margarete > 5);
  314. }
  315. cout << "Bed&Breakfast[0/1] (1 daca se ofera): ";
  316. cin >> BB;
  317. pns = new pensiune(nume_cazare, adresa, date_contact, loc_parcare, numar_camere, num_loc, numar_cam_ocup, pret_cazare, 2, numar_margarete, BB);
  318. c = pns;
  319. l.adaugare(c);
  320. }
  321. }
  322.  
  323. int main()
  324. {
  325. lista l;
  326. l.head = NULL;
  327. int opt;
  328. int pret;
  329. do
  330. {
  331. system("cls");
  332. cout << "1.Adaugare hotel. \n";
  333. cout << "2.Adaugare pensiune. \n";
  334. cout << "3.Afisare hoteluri. \n";
  335. cout << "4.Afisare pensiuni. \n";
  336. cout << "5.Cautare cazare dupa pret. \n";
  337. cout << "6.Stergere cazare dupa pret. \n";
  338. cout << "0.Iesire. \n";
  339. cout << "Introduceti optiune: ";
  340. cin >> opt;
  341. switch (opt)
  342. {
  343. case 1:
  344. introducere(l, 1);
  345. break;
  346. case 2:
  347. introducere(l, 2);
  348. break;
  349. case 3:
  350. l.afisare_hotel(); system("pause");
  351. break;
  352. case 4:
  353. l.afisare_pensiune(); system("pause");
  354. break;
  355. case 5:
  356. cout << "Introduceti pretul dupa care se cauta: ";
  357. cin >> pret;
  358. l.cautare(pret);
  359. system("pause");
  360. break;
  361. case 6:
  362. cout << "Introduceti pretul dupa care se sterge: ";
  363. cin >> pret;
  364. l.stergere(pret);
  365. break;
  366. case 0:
  367. exit(0);
  368. break;
  369. }
  370. } while (opt != 0);
  371. _getch();
  372. return 0;
  373. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement