Advertisement
Guest User

pt acasa

a guest
Nov 22nd, 2019
153
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 <fstream>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8. class domeniu;
  9. class telefon_fix;
  10. class telefon_mobil;
  11. //structura in care se retina data calendaristica
  12. struct magazin
  13. {
  14. int zi, luna, an;
  15. };
  16. //clasa lista
  17. template <class T> class lista
  18. {
  19. T *rad;
  20. T *point;
  21. public:
  22. lista();
  23. ~lista();
  24. void adaugare(T *q);
  25. T* cautare(char *nume);
  26. int stergere(char *nume);
  27. //returneaza primul nod
  28. T* prim()
  29. {
  30. point = rad;
  31. return point;
  32. }
  33. //returneaza urmatorul nod
  34. T* next()
  35. {
  36. if (point != NULL)
  37. point = point->urm;
  38. return point;
  39. }
  40. //returneaza daca un nod este vid sau nu
  41. int vid()
  42. {
  43. if (rad == NULL)
  44. return 1;
  45. else
  46. return 0;
  47. }
  48. void elibereaza();
  49. void afisare();
  50. };
  51. //se initializeaza radacina cu NULL
  52. template <class T> lista<T>::lista()
  53. {
  54. rad = NULL;
  55. }
  56. //stergere lista
  57. template <class T> void lista<T>::elibereaza()
  58. {
  59. T *p, *q;
  60. for (p = rad; p != NULL; p = q)
  61. {
  62. //se inainteaza in lista si se sterg nodurile
  63. q = p->urm;
  64. delete p;
  65. }
  66. //radacina devine null
  67. rad = NULL;
  68. }
  69. //destructorul care sterge lista
  70. template <class T> lista<T>::~lista()
  71. {
  72. elibereaza();
  73. }
  74. //adaugare nod in lista
  75. template <class T> void lista<T>::adaugare(T *q)
  76. {
  77. T *p;
  78. //daca lista e nula se adauga primul nod
  79. if (rad == NULL) {
  80. rad = q;
  81. return;
  82. }
  83. //se adauga ordonat in lista nodurile urmatoare
  84. for (p = rad; p->urm != NULL; p = p->urm)
  85. if (strcmp(p->urm->nume, q->nume) > 0)
  86. break;
  87. q->urm = p->urm;
  88. p->urm = q;
  89. }
  90. //stergere element in lista
  91. template <class T> int lista<T>::stergere(char *aux)
  92. {
  93. T *p, *q;
  94. //daca nu sunt elemente in lista
  95. if (rad == NULL)
  96. return 0;
  97. //daca se sterge primul nod
  98. if (strcmp(rad->nume, aux) == 0)
  99. {
  100. q = rad;
  101. rad = rad->urm;
  102. delete q;
  103. return 1;
  104. }
  105. //daca se sterge nod in interiorul listei
  106. for (p = rad; p->urm != NULL; p = p->urm)
  107. if (strcmp(p->urm->nume, aux) == 0)
  108. {
  109. q = p->urm;
  110. p->urm = p->urm->urm;
  111. delete q;
  112. return 1;
  113. }
  114. return 0;
  115. }
  116. //cautare nod in lista
  117. template <class T> T* lista<T>::cautare(char *aux)
  118. {
  119. T *p;
  120. for (p = rad; p != NULL; p = p->urm)
  121. if (strcmp(p->nume, aux) == 0)
  122. return p;
  123. return NULL;
  124. }
  125. //afisare lista
  126. template <class T> void lista<T>::afisare()
  127. {
  128. T *p;
  129. for (p = rad; p != NULL; p = p->urm)
  130. p->afisare();
  131. }
  132. class telefon_fix
  133. {
  134. char *producator;
  135. char *culoare;
  136. char *dimensiune;
  137.  
  138. int an;
  139. int nr;
  140. telefon_fix *urm;
  141. public:
  142. magazin impr;
  143. telefon_fix(char *, char *, char *, int,int, magazin);
  144. ~telefon_fix();
  145. void afisare();
  146. char* autorbook()
  147. {
  148. return culoare;
  149. }
  150. char* numebook()
  151. {
  152. return producator;
  153. }
  154. char* cotabook()
  155. {
  156. return dimensiune;
  157. }
  158.  
  159. int anbook()
  160. {
  161. return an;
  162. }
  163. int nrbook()
  164. {
  165. return nr;
  166. }
  167. friend class lista<telefon_fix>;
  168. };
  169.  
  170. telefon_fix::telefon_fix(char *n, char *t, char *c,int a, int N, magazin i)
  171. {
  172. producator = new char[strlen(n) + 1];
  173. strcpy(producator, n);
  174. culoare = new char[strlen(t) + 1];
  175. strcpy(culoare, t);
  176. dimensiune = new char[strlen(c) + 1];
  177. strcpy(dimensiune, c);
  178.  
  179. an = a;
  180. nr = N;
  181. impr = i;
  182. urm = NULL;
  183. }
  184.  
  185. telefon_fix::~telefon_fix()
  186. {
  187. delete[] producator;
  188. delete[] culoare;
  189. delete[] dimensiune;
  190. impr.zi = impr.luna = impr.an = 0;
  191. an = nr = 0;
  192. }
  193.  
  194. void telefon_fix::afisare()
  195. {
  196. cout << endl;
  197. cout << "Autorul: " << producator << endl;
  198. cout << "Titlu: " << culoare << endl;
  199. cout << "Cota: " << dimensiune << endl;
  200.  
  201. cout << "Anul aparitiei: " << an << endl;
  202. cout << "Numar editie: " << nr << endl;
  203. cout << "Imprumutata(0/calendar): ";
  204. if (impr.zi == 0)
  205. cout << impr.zi << endl;
  206. else
  207. cout << impr.zi << "/" << impr.luna << "/" << impr.an << endl;
  208. }
  209. //class telefon_fix
  210. //{
  211. // char *producator;
  212. // char *culoare;
  213. // char *dimensiune;
  214. //
  215. // int an;
  216. // int nr;
  217. // telefon_fix *urm;
  218. //public:
  219. // magazin impr;
  220. // telefon_fix(char *, char *, char *, int, int, magazin);
  221. // ~telefon_fix();
  222. // void afisare();
  223. // char* autorbook()
  224. // {
  225. // return culoare;
  226. // }
  227. // char* numebook()
  228. // {
  229. // return producator;
  230. // }
  231. // char* cotabook()
  232. // {
  233. // return dimensiune;
  234. // }
  235. //
  236. // int anbook()
  237. // {
  238. // return an;
  239. // }
  240. // int nrbook()
  241. // {
  242. // return nr;
  243. // }
  244. // friend class lista<telefon_fix>;
  245. //};
  246. //
  247. //telefon_fix::telefon_fix(char *n, char *t, char *c, int a, int N, magazin i)
  248. //{
  249. // producator = new char[strlen(n) + 1];
  250. // strcpy(producator, n);
  251. // culoare = new char[strlen(t) + 1];
  252. // strcpy(culoare, t);
  253. // dimensiune = new char[strlen(c) + 1];
  254. // strcpy(dimensiune, c);
  255. //
  256. // an = a;
  257. // nr = N;
  258. // impr = i;
  259. // urm = NULL;
  260. //}
  261. //
  262. //telefon_fix::~telefon_fix()
  263. //{
  264. // delete[] producator;
  265. // delete[] culoare;
  266. // delete[] dimensiune;
  267. // impr.zi = impr.luna = impr.an = 0;
  268. // an = nr = 0;
  269. //}
  270. //
  271. //void telefon_fix::afisare()
  272. //{
  273. // cout << endl;
  274. // cout << "Autorul: " << producator << endl;
  275. // cout << "Titlu: " << culoare << endl;
  276. // cout << "Cota: " << dimensiune << endl;
  277. //
  278. // cout << "Anul aparitiei: " << an << endl;
  279. // cout << "Numar editie: " << nr << endl;
  280. // cout << "Imprumutata(0/calendar): ";
  281. // if (impr.zi == 0)
  282. // cout << impr.zi << endl;
  283. // else
  284. // cout << impr.zi << "/" << impr.luna << "/" << impr.an << endl;
  285. //}
  286. class domeniu
  287. {
  288. protected:
  289. char *nume;
  290. lista<telefon_fix> book;
  291. domeniu *urm;
  292. public:
  293. domeniu(char *);
  294. ~domeniu();
  295. void adaugarebook(telefon_fix *q)
  296. {
  297. book.adaugare(q);
  298. }
  299. telefon_fix* cautarebook(char *aux)
  300. {
  301. return book.cautare(aux);
  302. }
  303. int stergerebook(char *aux)
  304. {
  305. return book.stergere(aux);
  306. }
  307. char* numedom()
  308. {
  309. return nume;
  310. }
  311. telefon_fix* primbook()
  312. {
  313. return book.prim();
  314. }
  315. telefon_fix* nextbook()
  316. {
  317. return book.next();
  318. }
  319. virtual void afisare();
  320. friend class lista<domeniu>;
  321. };
  322.  
  323. domeniu::domeniu(char *n)
  324. {
  325. nume = new char[strlen(n) + 1];
  326. strcpy(nume, n);
  327. urm = NULL;
  328. }
  329.  
  330. domeniu::~domeniu()
  331. {
  332. delete[] nume;
  333. }
  334.  
  335. void domeniu::afisare()
  336. {
  337. cout << endl;
  338. cout << "Domeniu: " << nume << endl;
  339. book.afisare();
  340. }
  341.  
  342. class magazin
  343. {
  344. lista<domeniu> dom;
  345. public:
  346. void adaugaredom(domeniu *aux)
  347. {
  348. dom.adaugare(aux);
  349. }
  350. domeniu* cautaredom(char *aux)
  351. {
  352. return dom.cautare(aux);
  353. }
  354. int stergeredom(char *aux)
  355. {
  356. return dom.stergere(aux);
  357. }
  358. void elibereaza()
  359. {
  360. dom.elibereaza();
  361. }
  362. void afisare()
  363. {
  364. dom.afisare();
  365. }
  366. domeniu* primdom()
  367. {
  368. return dom.prim();
  369. }
  370. domeniu* nextdom()
  371. {
  372. return dom.next();
  373. }
  374. };
  375.  
  376. void meniu()
  377. {
  378. cout << endl;
  379. cout << "1.Incarcare biblioteca dintr-un fisier" << endl;
  380. cout << "2.Creare domeniu nou" << endl;
  381. cout << "3.Adaugare carte la un anumit domeniu" << endl;
  382. cout << "4.Cautare carte in biblioteca" << endl;
  383. cout << "5.Stergere carte din biblioteca" << endl;
  384. cout << "6.Salvare in fisier a bibliotecii" << endl;
  385. cout << "7.Iesire" << endl;
  386. cout << "0.Afisare" << endl;
  387. cout << "Optiunea: " << endl;
  388. }
  389.  
  390. telefon_fix* read_book()
  391. {
  392. telefon_fix *c;
  393. char producator[100];
  394. char culoare[100];
  395. char dimensiune[100];
  396.  
  397. int an;
  398. int nr;
  399. magazin impr;
  400. cout << "\nAutor: "; cin >> producator;
  401. cout << "\nTitlu: "; cin >> culoare;
  402. cout << "\nCota: "; cin >> dimensiune;
  403.  
  404. cout << "\nAnul aparitiei: "; cin >> an;
  405. cout << "\nNumar editie: "; cin >> nr;
  406. cout << "\nImprumutata(0/calendar-zi luna an): ";
  407. cin >> impr.zi;
  408. if (impr.zi == 0)
  409. impr.luna = impr.an = 0;
  410. else
  411. {
  412. cin >> impr.luna;
  413. cin >> impr.an;
  414. }
  415. c = new telefon_fix(producator, culoare, dimensiune, an, nr, impr);
  416. return c;
  417. }
  418. //citire date din fisier
  419. void cit_fisier(magazin *b)
  420. {
  421. domeniu *d;
  422. telefon_fix *c;
  423. ifstream f;
  424. char aux, producator[100], culoare[100], dimensiune[100];
  425. magazin impr;
  426. int an, nr;
  427. f.open("carti.txt");
  428. while (!f.eof()) {
  429. aux = f.get();
  430. if (aux == 'd') {
  431. f.ignore(1);
  432. f.getline(producator, 20);
  433. d = new domeniu(producator);
  434. b->adaugaredom(d);
  435. }
  436. if (aux == 'c') {
  437. f.ignore(1);
  438. f >> producator;
  439. f >> culoare;
  440. f >> dimensiune;
  441.  
  442. f >> an;
  443. f >> nr;
  444. f >> impr.zi;
  445. if (impr.zi == 0)
  446. impr.luna = impr.an = 0;
  447. else
  448. {
  449. f >> impr.luna;
  450. f >> impr.an;
  451. }
  452. c = new telefon_fix(producator, culoare, dimensiune, an, nr, impr);
  453. if (d != NULL) d->adaugarebook(c);
  454. f.ignore(1000, '\n');
  455. }
  456. }
  457. f.close();
  458. }
  459.  
  460. void save_fisier(magazin *b)
  461. {
  462. domeniu *d;
  463. telefon_fix *c;
  464. ofstream f;
  465. f.open("carti.txt");
  466. d = b->primdom();
  467. while (d != NULL) {
  468. f << "d ";
  469. f << d->numedom() << "\n";
  470. c = d->primbook();
  471. while (c != NULL) {
  472. f << "c " << c->autorbook() << " " << c->numebook() << " " << c->cotabook() << " ";
  473. f << c->anbook() << " " << c->nrbook() << " ";
  474. if (c->impr.zi == 0)
  475. f << c->impr.zi << "\n";
  476. else
  477. f << c->impr.zi << " " << c->impr.luna << " " << c->impr.an << "\n";
  478. c = d->nextbook();
  479. }
  480. d = b->nextdom();
  481. }
  482. }
  483.  
  484. int main()
  485. {
  486. int opt, x;
  487. telefon_fix *c = NULL;
  488. domeniu *d = NULL;
  489. magazin b;
  490. char aux[100];
  491. do {
  492. meniu();
  493. cin >> opt;
  494. switch (opt)
  495. {
  496. case 1: cit_fisier(&b);
  497. b.afisare();
  498. getch();
  499. break;
  500. case 2: cout << "\n Introduceti numele domeniului: ";
  501. cin >> aux;
  502. d = b.cautaredom(aux);
  503. if (d == NULL)
  504. {
  505. d = new domeniu(aux);
  506. b.adaugaredom(d);
  507. cout << "\n Domeniul a fost adaugat"; getch();
  508. }
  509. else
  510. {
  511. cout << "\n Domeniul exista deja !";
  512. getch();
  513. }
  514. d = NULL;
  515. b.afisare();
  516. getch();
  517. break;
  518. case 3:cout << "\n Introduceti numele domeniului:";
  519. cin >> aux;
  520. d = b.cautaredom(aux);
  521. if (d == NULL)
  522. {
  523. cout << "\n Domeniul introdus nu exista!";
  524. getch();
  525. }
  526. else
  527. {
  528. c = read_book();
  529. d->adaugarebook(c);
  530. }
  531. d = NULL;
  532. c = NULL;
  533. b.afisare();
  534. getch();
  535. break;
  536. case 4:cout << "\n Introduceti numele domeniului: ";
  537. cin >> aux;
  538. d = b.cautaredom(aux);
  539. if (d == NULL)
  540. {
  541. cout << "\n Domeniul introdus nu exista!";
  542. getch();
  543. }
  544. else
  545. {
  546. cout << "\n Introduceti titlul cartii: ";
  547. cin >> aux;
  548. c = d->cautarebook(aux);
  549. if (c != NULL)
  550. {
  551. cout << "\n Cartea se afla in biblioteca";
  552. getch();
  553. }
  554. else
  555. {
  556. cout << "\n Cartea nu se afla in biblioteca"; getch();
  557. }
  558. }
  559. break;
  560. case 5:cout << "\n Introduceti numele domeniului: ";
  561. cin >> aux;
  562. d = b.cautaredom(aux);
  563. if (d == NULL)
  564. {
  565. cout << "\n Domeniul introdus nu exista";
  566. getch();
  567. }
  568. else
  569. {
  570. cout << "\n Introduceti titlul cartii: ";
  571. cin >> aux;
  572. x = d->stergerebook(aux);
  573. }
  574. if (x == 1)
  575. {
  576. cout << "\n Cartea a fost stearsa";
  577. getch();
  578. }
  579. else
  580. {
  581. cout << "\n Cartea nu se afla in biblioteca"; getch();
  582. }
  583. break;
  584. case 6: save_fisier(&b);
  585. cout << "\n Datele au fost salvate in fisier"; getch();
  586. break;
  587. case 7: break;
  588. case 0: b.afisare();
  589. getch();
  590. break;
  591. default: cout << "\n Optiune gresita";
  592. break;
  593. }
  594. } while (opt != 7);
  595.  
  596. return 0;
  597. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement