Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. #include<iostream>
  2. #include<conio.h>
  3. #include<string.h>
  4.  
  5. using namespace std;
  6.  
  7. class Lista;
  8.  
  9. class Produse_magazin
  10. {
  11. private:
  12. int tip_produs;
  13. int cod_produs;
  14. char *producator;
  15. char *rezolutie;
  16. char *dimensiuni;
  17.  
  18. Produse_magazin *urm; //adresa urmat elem din lista
  19.  
  20. public:
  21.  
  22. Produse_magazin(int t, int cod, char *prod, char*rez, char*dim)
  23. {
  24. tip_produs = t;
  25. cod_produs = cod;
  26. producator = new char[strlen(prod) + 1];
  27. strcpy(producator, prod);
  28. rezolutie = new char[strlen(rez) + 1];
  29. strcpy(rezolutie, rez);
  30. dimensiuni = new char[strlen(dim) + 1];
  31. strcpy(dimensiuni, dim);
  32.  
  33. urm = NULL; //adresa urmat nod e initial null
  34.  
  35. }
  36.  
  37. virtual void afisare() //fct de afisare a elem din clasa de baza
  38. {
  39. cout << "codul produsului: " << cod_produs << endl;
  40. cout << "producatorul: " << producator << endl;
  41. cout << "rezolutie: " << rezolutie << endl;
  42. cout << "dimensiuni: " << dimensiuni << endl;
  43. }
  44. friend class Lista; //declara clasa Lista friend la clasa Produse_magazin
  45. };
  46.  
  47. class Scanner :public Produse_magazin
  48. {
  49. private:
  50. char *soft;
  51. int viteza;
  52.  
  53. public:
  54.  
  55. Scanner(int t, char *prod, int cod, char*rez, char*dim, char *sof, int vitez) :Produse_magazin(t, cod, prod, rez, dim)
  56. {
  57. soft = new char[strlen(sof) + 1];
  58. strcpy(soft, sof);
  59. viteza = vitez;
  60.  
  61.  
  62.  
  63. }
  64.  
  65. void afisare() //afisare elem din scanner
  66. {
  67. Produse_magazin::afisare();
  68. cout << "softul : " << soft << endl;
  69. cout << "viteza: " << viteza << endl;
  70. }
  71. friend class Lista;
  72. };
  73.  
  74. class Imprimante :public Produse_magazin //a 2-a clasa derivata
  75. {
  76. private:
  77. char *format;
  78. char *tip;
  79.  
  80. public:
  81. Imprimante(int t, int cod, char *prod, char*rez, char*dim, char *form, char *tp) :Produse_magazin(t, cod, prod, rez, dim)
  82. {
  83.  
  84. format = new char[strlen(form) + 1];
  85. strcpy(format, form);
  86. tip = new char[strlen(tp) + 1];
  87. strcpy(tip, tp);
  88. }
  89.  
  90. void afisare()
  91. {
  92. Produse_magazin::afisare();
  93. cout << "format: " << format << endl;
  94. cout << "tip: " << tip << endl;
  95. }
  96. friend class Lista;
  97.  
  98. };
  99.  
  100. class Lista
  101. {
  102. public:
  103.  
  104. Produse_magazin *head; //capul listei
  105.  
  106. void adaugare(Produse_magazin *a);
  107. void afisare_lista();
  108. //void afisare_scannere(char *soft); //afisarea unui anumit scanner dupa soft
  109. //void stergere(char *prod); //stergearea din lista dupa producator
  110.  
  111.  
  112.  
  113. };
  114.  
  115.  
  116.  
  117. void Lista::adaugare(Produse_magazin *a)
  118. {
  119. Produse_magazin *p;
  120. p = head;
  121. if (p)
  122. {
  123. if (strcmp(a->producator, p->producator) < 0)
  124. {
  125. a->urm = head;
  126. head = a;
  127. }
  128. else
  129. {
  130. while (p->urm && strcmp((p->urm)->producator, a->producator) < 0)
  131. p = p->urm;
  132. a->urm = p->urm;
  133. p->urm = a;
  134. }
  135. }
  136. else
  137. head = a;
  138.  
  139. }
  140.  
  141. void Lista::afisare_lista()
  142. {
  143. Produse_magazin *a;
  144. a = head;
  145. if (!a)
  146. cout << "nu exista elem in lista";
  147. else
  148. {
  149. while (a)
  150. {
  151. a->afisare();
  152. a = a->urm;
  153. // _getch();
  154. }
  155. }
  156. }
  157.  
  158. void introducere(Lista &l, int x) //introducere info in noduri
  159. {
  160. int tip_produs;
  161. char producator[50];
  162. int cod_produs;
  163. char rezolutie[50];
  164. char dimensiuni[100];
  165. char soft[100];
  166. int viteza;
  167. char format[20];
  168. char tip[20];
  169. Produse_magazin *prodMag;
  170.  
  171. cout << "Introduceti producatorul: ";
  172. cin >> producator;
  173. cout << "Introduceti codul de produs: ";
  174. cin >> cod_produs;
  175. cout << "Introduceti rezolutia: ";
  176. cin >> rezolutie;
  177. cout << "Introduceti dimensiunile: ";
  178. cin >> dimensiuni;
  179.  
  180. if (x == 0) // daca s-a ales adaugarea unui nou Scaner
  181. {
  182. Scanner *Sc;
  183. cout << "Introduceti softul inclus: ";
  184. cin >> soft;
  185. cout << "Introduceti viteza de scanare: ";
  186. cin >> viteza;
  187.  
  188. Sc = new Scanner(1, producator, cod_produs, rezolutie, dimensiuni, soft, viteza); //apelare constructor cu info citite
  189. prodMag = Sc; //cast pentru clasa de baza
  190. l.adaugare(prodMag); //se adauga nodul
  191. }
  192. else if (x == 1) //daca s-a ales adaugarea unei pensiuni
  193. {
  194. Imprimante *Imprim;
  195.  
  196. cout << "Introduceti formatul imprimantei: ";
  197. cin >> format;
  198. cout << "Introduceti tipul imprimantei: ";
  199. cin >> tip;
  200. Imprim = new Imprimante(2, cod_produs, producator, rezolutie, dimensiuni, format, tip);//apelare constructor cu info citite
  201. prodMag = Imprim;//cast pentru clasa de baza
  202. l.adaugare(prodMag);//se adauga nodul
  203. }
  204. }
  205.  
  206. void main() //programul principal
  207. {
  208. int opt;
  209. Lista l;
  210. l.head = NULL;
  211. do
  212. {
  213. //system("CLS");
  214. //meniu
  215. cout << "1.Adaugare scanere in lista, ordonat dupa producator.\n";
  216. cout << "2.Adaugare imprimante in lista, ordonat dupa producator.\n";
  217. cout << "3.Afisare articole din magazin.\n";
  218. //cout << "4.Afisare scanere cu un anumit Soft_includ citit de la tastatura.\n";
  219. //cout << "5.Stergere articol dupa producator.\n";
  220. cout << "0.Iesire.\n";
  221. cout << "Dati optiunea dvs: ";
  222. cin >> opt;
  223. //apelare functii in functie de optiunea aleasa
  224. switch (opt)
  225. {
  226. case 1: introducere(l, 0);
  227. break;
  228. case 2: introducere(l, 1);
  229. break;
  230. case 3: l.afisare_lista();
  231. break;
  232. //case 4: char soft[100];
  233. // cout << "Introduceti numele softului pentru care se vor afisa scanerele: ";
  234. // cin >> soft;
  235. // l.afisare_conditionata(soft);
  236. // getch();
  237. // break;
  238. //case 5: char produc[20];
  239. //cout << "Introduceti producatorul care doriti sa il stergeti: ";
  240. //cin >> produc;
  241. //l.stergere(produc);
  242. //cout << "Apasati o tasta pt continuare...";
  243. //getch();
  244. //break;
  245. case 0: break;
  246. default:cout << "Comanda gresita!";
  247. }
  248. } while (opt != 0);
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement