SHARE
TWEET

Untitled

a guest May 21st, 2019 66 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top