Advertisement
Guest User

Untitled

a guest
May 21st, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #define TYPE_CPU 1U
  4. #define TYPE_SSD 2U
  5.  
  6. using namespace std;
  7.  
  8. class Item
  9. {
  10. public:
  11. virtual void add() = 0;
  12. virtual void print() = 0;
  13. };
  14.  
  15. class CPU : public Item
  16. {
  17. private:
  18. string model, brand;
  19. unsigned short mhz;
  20.  
  21. public:
  22. void add()
  23. {
  24. cout << "Unesi brend: ";
  25. getline(cin, this->brand);
  26.  
  27. cout << "Unesi model: ";
  28. getline(cin, this->model);
  29.  
  30. cout << "Unesi MHz: ";
  31. cin >> this->mhz;
  32. }
  33.  
  34. void print()
  35. {
  36. cout << "CPU:" << endl <<
  37. "Brend: " << this->brand << endl <<
  38. "Model: " << this->model << endl <<
  39. "MHz: " << this->mhz << endl;
  40. }
  41. };
  42.  
  43. class SSD : public Item
  44. {
  45. private:
  46. string model, brand;
  47. unsigned short capacity;
  48.  
  49. public:
  50. void add()
  51. {
  52. cout << "Unesi brend: ";
  53. getline(cin, this->brand);
  54.  
  55. cout << "Unesi model: ";
  56. getline(cin, this->model);
  57.  
  58. cout << "Unesi kapacitet: ";
  59. cin >> this->capacity;
  60. }
  61.  
  62. void print()
  63. {
  64. cout << "SSD:" << endl <<
  65. "Brend: " << this->brand << endl <<
  66. "Model: " << this->model << endl <<
  67. "Kapacitet: " << this->capacity << " GB" << endl;
  68. }
  69. };
  70.  
  71. class List
  72. {
  73. private:
  74. Item *item = NULL;
  75.  
  76. public:
  77. List *next = NULL;
  78.  
  79. List(const unsigned short type)
  80. {
  81. switch(type)
  82. {
  83. case TYPE_CPU:
  84. {
  85. this->item = new CPU;
  86. break;
  87. }
  88. case TYPE_SSD:
  89. {
  90. this->item = new SSD;
  91. break;
  92. }
  93. default:
  94. {
  95. cout << "Pogresan unos." << endl;
  96. return;
  97. }
  98. }
  99.  
  100. if(this->item) this->item->add();
  101. }
  102.  
  103. void print()
  104. {
  105. if(this->item) this->item->print();
  106. }
  107. };
  108.  
  109.  
  110. void add_item(List **head);
  111. void print_items(List *head);
  112. void delete_items(List **head);
  113.  
  114.  
  115. void add_item(List **head)
  116. {
  117. unsigned short type;
  118.  
  119. cout << endl <<
  120. TYPE_CPU << " za CPU." << endl <<
  121. TYPE_SSD << " za SSD." << endl <<
  122. "Vas izbor: ";
  123.  
  124. cin >> type;
  125. cin.ignore();
  126.  
  127. List *new_item = new List(type); // alokacija memorije za buduci novi clan
  128.  
  129. // samo ako je lista prazna, prvi unos
  130. if(!*head)
  131. {
  132. *head = new_item;
  133. return;
  134. }
  135.  
  136. List *current;
  137.  
  138. // ako lista ima barem 1 clan
  139. for(current = *head; current->next; current = current->next); // dolazimo na kraj liste
  140. current->next = new_item; // dodajemo novi clan na kraj liste
  141. }
  142.  
  143. void print_items(List *head)
  144. {
  145. unsigned short i = 0;
  146.  
  147. while(head)
  148. {
  149. cout << endl << ++i << ")" << endl;
  150. head->print();
  151. head = head->next;
  152. }
  153. }
  154.  
  155. void delete_items(List **head)
  156. {
  157. List *tmp;
  158. List *current = *head;
  159.  
  160. while(current)
  161. {
  162. tmp = current;
  163. current = current->next;
  164.  
  165. delete tmp;
  166. }
  167.  
  168. *head = NULL;
  169. cout << "Lista je prazna." << endl;
  170. }
  171.  
  172. int main(int argc, char** argv)
  173. {
  174. unsigned short menu_choice;
  175. List *head = NULL; // u pocetku lista je prazna pa head pokazuje na NULL
  176.  
  177. do
  178. {
  179. cout << endl << "\tIZBORNIK" << endl <<
  180. "-------------------------" << endl <<
  181. "0 za izlaz." << endl <<
  182. "1 za dodavanje nove komponente." << endl <<
  183. "2 za ispis svih komponenti." << endl <<
  184. "3 za brisanje svih komponenti." << endl <<
  185. "Vas izbor: ";
  186. cin >> menu_choice;
  187.  
  188. switch(menu_choice)
  189. {
  190. case 0: break;
  191. case 1:
  192. {
  193. add_item(&head);
  194. break;
  195. }
  196. case 2:
  197. {
  198. print_items(head);
  199. break;
  200. }
  201. case 3:
  202. {
  203. delete_items(&head);
  204. break;
  205. }
  206. default:
  207. {
  208. cout << "Pogresan unos." << endl;
  209. break;
  210. }
  211. }
  212. }
  213. while(menu_choice);
  214.  
  215. delete_items(&head); // pobrinemo se da se sva memorija oslobodi na izlazu iz programa
  216. return 0;
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement