Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.18 KB | None | 0 0
  1. #include<iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string>
  5. #include <list>
  6. #include <iterator>
  7. using namespace std;
  8.  
  9. void ex(int stele)
  10. {
  11. if (stele > 7)
  12. throw "Eroare";
  13. }
  14. typedef struct { string localiate, tara, strada; int cod, numar; }adresa;
  15. typedef struct { string nrtel, mail, site, facebook; }date_contact;
  16. class Cazare
  17. {
  18. protected :
  19. static int count;
  20. int id, camere=0;
  21. string nume_cazare;
  22. adresa adr;
  23. date_contact date;
  24. bool parcare;
  25. int nr_camere,nr_loc,nr_cam_ocup,pret;
  26.  
  27. public:
  28. bool operator <(const Cazare &item) const
  29. {
  30. return pret > item.pret;
  31. }
  32. string get_tara() { return adr.tara; }
  33. string get_localitate() { return adr.localiate; }
  34. string get_nume() { return nume_cazare; }
  35. int set_camere_ocup(int a) { return nr_cam_ocup += a; }
  36. int get_camere_ocup() { return nr_cam_ocup; }
  37. bool get_parc() { return parcare; }
  38. //Cazare(int nr_camere_ocup) { this->nr_cam_ocup = nr_camere_ocup; }
  39. Cazare(string cazare, adresa adr, date_contact date, bool parcare, int nr_camere, int nr_loc, int nr_cam_ocup, int pret)
  40. {
  41. this->count++;
  42. this->id = count;
  43. this->camere += nr_camere;
  44. this->nume_cazare = cazare;
  45. this->adr = adr;
  46. this->date = date;
  47. this->parcare = parcare;
  48. this->nr_camere = nr_camere;
  49. this->nr_cam_ocup = nr_cam_ocup;
  50. this->nr_loc = nr_loc;
  51. this->pret = pret;
  52. }
  53. int camtotal() { return camere; }
  54. virtual void afisare()
  55. {
  56. cout <<"ID: "<<id<< " Nume: " << nume_cazare << endl;
  57. cout << "----Adresa---\n";
  58. cout << "Tara " << adr.tara << " Localiatea " << adr.localiate << " Cod postal " << adr.cod << " Strada " << adr.strada << " Numar " << adr.numar << endl;
  59. cout << "---Date Contact---\n";
  60. cout << "Facebook " << date.facebook << " Email " << date.mail << " NR.tel " << date.nrtel << " Site " << date.site << endl;
  61. cout << "Loc parcare " <<(parcare == 1 ? "DA" : "NU")<<endl;
  62. cout << "Nr camere " << nr_camere << " Nr locuri camera " << nr_loc << " Nr camere ocupate " << nr_cam_ocup << endl;
  63. cout << "Pret " << pret << endl;
  64. }
  65.  
  66.  
  67. };
  68. int Cazare::count = 0;
  69.  
  70.  
  71. class Hotel :public Cazare
  72. {private:
  73. typedef enum{piscina,rest,sala_conf}dotari;
  74. dotari dot;
  75. int nr_stele;
  76. public:
  77. dotari get_dot() { return dot; }
  78. 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)
  79. {
  80. try
  81. {
  82. ex(nr_stele);
  83. this->nr_stele = nr_stele;
  84. }
  85. catch (...) { cout << "Nr stele peste limita\n"; }
  86. this->dot = dotari(dota);
  87. }
  88. void afisare()
  89. {
  90. Cazare::afisare();
  91. cout << "Nr stele " << nr_stele << endl;
  92. cout << "Dotari " << dot<<endl;
  93. }
  94. };
  95. class Pensiune:public Cazare
  96. {
  97. private:
  98. int nr_margarete;
  99. bool BB;
  100. public:
  101. 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)
  102. {
  103. this->nr_margarete = nr_margarete;
  104. this->BB = BB;
  105. }
  106. void afisare()
  107. {
  108. Cazare::afisare();
  109. cout << "Margarete " << nr_margarete << endl;
  110. cout << "BB " << (BB == 1 ? "DA" : "NU")<<endl;
  111. }
  112. };
  113.  
  114. list<Cazare*>l;
  115. list <Cazare*>::iterator p;
  116. void citire()
  117. {
  118. string cazare;
  119. adresa adr;
  120. date_contact date;
  121. bool parcare, BB;
  122. int nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele, nr_margarete,o;
  123. cout << "Nume\n";
  124. cin >> cazare;
  125. cout << "----Adresa---\n";
  126. cout << "Tara\n";
  127. cin >> adr.tara;
  128. cout << "Localitate\n";
  129. cin >> adr.localiate;
  130. cout << "Cod postal\n";
  131. cin >> adr.cod;
  132. cout << "Strada\n";
  133. cin >> adr.strada;
  134. cout << "Numar stdrada\n";
  135. cin >> adr.numar;
  136. cout << "---Date contact---\n";
  137. cout << "Nr.telefon\n";
  138. cin >> date.nrtel;
  139. cout << "Email\n";
  140. cin >> date.mail;
  141. cout << "Facebook\n";
  142. cin >> date.facebook;
  143. cout << "Site\n";
  144. cin >> date.site;
  145. cout << "Loc parcare\n[0].NU\n[1].DA\n";
  146. cin >> parcare;
  147. cout << "Nr camere\n";
  148. cin >> nr_camere;
  149. cout << "Nr locuri din camera\n";
  150. cin >> nr_loc;
  151. cout << "Nr camere ocupate\n";
  152. cin >> nr_cam_ocup;
  153. cout << "Pret\n";
  154. cin >> pret;
  155. cout << "[1].Hotel\n[2].Pensiune\n";
  156. cin >> o;
  157. if (o == 1)
  158. {
  159. cout << "Dotari\n[1].Piscina\n[2].Restaurant\n[3].Sala conferinta\n";
  160. cin >> dota;
  161. cout << "Nr stele hotel\n";
  162. cin >> nr_stele;
  163. if (l.empty() == true)
  164. l.push_back(new Hotel(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele));
  165. else
  166. {
  167. auto p = l.begin();
  168. if (cazare < (*p)->get_nume())
  169. l.push_front(new Hotel(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele));
  170. else
  171. l.push_back(new Hotel(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, dota, nr_stele));
  172. }
  173. }
  174. else if (o == 2)
  175. {
  176. cout << "Nr margarete\n";
  177. cin >> nr_margarete;
  178. cout << "Bed&Breakfast\n[0].NU\n[1].DA\n";
  179. cin >> BB;
  180. if (l.empty() == true)
  181. l.push_back(new Pensiune(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret,nr_margarete,BB));
  182. else
  183. {
  184. auto p = l.begin();
  185. if (cazare < (*p)->get_nume())
  186. l.push_front(new Pensiune(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, nr_margarete, BB));
  187. else
  188. l.push_back(new Pensiune(cazare, adr, date, parcare, nr_camere, nr_loc, nr_cam_ocup, pret, nr_margarete, BB));
  189. }
  190. }
  191. }
  192. void afisare()
  193. {
  194. int o,nr_camere=0;
  195. cout << "[1].Hoteluri\n[2].Pensiuni\n";
  196.  
  197. cin >> o;
  198. for ( auto q = l.begin(); q != l.end(); q++)
  199. {
  200. cout << endl;
  201. Hotel *photel = static_cast<Hotel*>(*q);
  202. Pensiune *ppensiune = static_cast<Pensiune*>(*q);
  203. switch (o)
  204. {
  205. case 1:
  206. if (photel)
  207. {
  208. photel->afisare();
  209. nr_camere+=photel->camtotal();
  210.  
  211. }
  212. break;
  213. case 2:
  214. if (ppensiune)
  215. {
  216. ppensiune->afisare();
  217. nr_camere += ppensiune->camtotal();
  218.  
  219. }
  220. break;
  221. default:
  222. cout << "Gresit\n";
  223. break;
  224. }
  225.  
  226. }
  227. cout <<"Toatal nr camere "<< nr_camere << endl;
  228. }
  229. void cautare(string tara,string localitate)
  230. {
  231. for ( p = l.begin(); p != l.end(); p++)
  232. {
  233. Hotel *photel = dynamic_cast<Hotel*>(*p);
  234. Pensiune *ppensiune = dynamic_cast<Pensiune*>(*p);
  235. if (photel)
  236. if (photel->get_tara() == tara && photel->get_localitate() == localitate && photel->get_parc() == true)
  237. photel->afisare();
  238. if (ppensiune)
  239. if (ppensiune->get_tara() == tara && ppensiune->get_localitate() == localitate && ppensiune->get_parc() == true)
  240. ppensiune->afisare();
  241. }
  242. }
  243. void stergre(string nume)
  244. {
  245. p = l.begin();
  246. while (p != l.end())
  247. {
  248.  
  249. if ((*p)->get_nume() == nume)
  250. p = l.erase(p);
  251. else
  252. p++;
  253. }
  254. }
  255. void dotare()
  256. {
  257. int dota;
  258. cout << "Ce dotare?\n[1].Piscina\n[2].Restaurant\n[3].Sala caonferinte\n";
  259. cin >> dota;
  260. l.sort();
  261. for ( p = l.begin(); p != l.end(); p++)
  262. {
  263. Hotel *photel = dynamic_cast<Hotel*>(*p);
  264. Pensiune *ppensiune = dynamic_cast<Pensiune*>(*p);
  265. if (photel)
  266. if (photel->get_dot() == dota)
  267. photel->afisare();
  268. }
  269.  
  270.  
  271. }
  272. void incrementare(string nume,int increment)
  273. {
  274.  
  275. for (p=l.begin();p!=l.end();p++)
  276. if ((*p)->get_nume() == nume)
  277. {
  278. (*p)->set_camere_ocup(increment);
  279. }
  280. }
  281. int main()
  282. {
  283. int o,increment;
  284. string nume, tara, localitate;
  285. do
  286. {
  287. cout << "[1].Citire\n";
  288. cout << "[2].Afisare\n";
  289. cout << "[3].Cautare\n";
  290. cout << "[4].Stergre\n";
  291. cout << "[5].Afisare anumita dotare\n";
  292. cout << "[6].Incremenare\n";
  293. cout << "[0].Iesire\n";
  294. cout << "[99].Sterge consola\n";
  295. cin >> o;
  296. switch (o)
  297. {
  298. case 1:
  299. citire();
  300. break;
  301. case 2:
  302. afisare();
  303. break;
  304. case 3:
  305. cout << "Tara\n";
  306. cin >> tara;
  307. cout << "Localitatea\n";
  308. cin >> localitate;
  309. cautare(tara, localitate);
  310. break;
  311. case 4:
  312. cout << "Nume cazare\n";
  313. cin >> nume;
  314. stergre(nume);
  315. break;
  316. case 5:
  317. dotare();
  318. break;
  319. case 6:
  320. cout << "Ce cazare?\n";
  321. cin >> nume;
  322. cout << "Cu cat vreti sa incrementati\n";
  323. cin >> increment;
  324. incrementare(nume, increment);
  325. break;
  326. case 99:
  327. system("cls");
  328. break;
  329. default:
  330. cout << "Gresit\n";
  331. break;
  332. }
  333.  
  334. } while (o != 0);
  335. system("pause");
  336. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement