Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define TYPE_CPU 1U
- #define TYPE_SSD 2U
- using namespace std;
- class Item
- {
- public:
- virtual void add() = 0;
- virtual void print() = 0;
- };
- class CPU : public Item
- {
- private:
- string model, brand;
- unsigned short mhz;
- public:
- void add()
- {
- cout << "Unesi brend: ";
- getline(cin, this->brand);
- cout << "Unesi model: ";
- getline(cin, this->model);
- cout << "Unesi MHz: ";
- cin >> this->mhz;
- }
- void print()
- {
- cout << "CPU:" << endl <<
- "Brend: " << this->brand << endl <<
- "Model: " << this->model << endl <<
- "MHz: " << this->mhz << endl;
- }
- };
- class SSD : public Item
- {
- private:
- string model, brand;
- unsigned short capacity;
- public:
- void add()
- {
- cout << "Unesi brend: ";
- getline(cin, this->brand);
- cout << "Unesi model: ";
- getline(cin, this->model);
- cout << "Unesi kapacitet: ";
- cin >> this->capacity;
- }
- void print()
- {
- cout << "SSD:" << endl <<
- "Brend: " << this->brand << endl <<
- "Model: " << this->model << endl <<
- "Kapacitet: " << this->capacity << " GB" << endl;
- }
- };
- class List
- {
- private:
- Item *item = NULL;
- public:
- List *next = NULL;
- List(const unsigned short type)
- {
- switch(type)
- {
- case TYPE_CPU:
- {
- this->item = new CPU;
- break;
- }
- case TYPE_SSD:
- {
- this->item = new SSD;
- break;
- }
- default:
- {
- cout << "Pogresan unos." << endl;
- return;
- }
- }
- if(this->item) this->item->add();
- }
- void print()
- {
- if(this->item) this->item->print();
- }
- };
- void add_item(List **head);
- void print_items(List *head);
- void delete_items(List **head);
- void add_item(List **head)
- {
- unsigned short type;
- cout << endl <<
- TYPE_CPU << " za CPU." << endl <<
- TYPE_SSD << " za SSD." << endl <<
- "Vas izbor: ";
- cin >> type;
- cin.ignore();
- List *new_item = new List(type); // alokacija memorije za buduci novi clan
- // samo ako je lista prazna, prvi unos
- if(!*head)
- {
- *head = new_item;
- return;
- }
- List *current;
- // ako lista ima barem 1 clan
- for(current = *head; current->next; current = current->next); // dolazimo na kraj liste
- current->next = new_item; // dodajemo novi clan na kraj liste
- }
- void print_items(List *head)
- {
- unsigned short i = 0;
- while(head)
- {
- cout << endl << ++i << ")" << endl;
- head->print();
- head = head->next;
- }
- }
- void delete_items(List **head)
- {
- List *tmp;
- List *current = *head;
- while(current)
- {
- tmp = current;
- current = current->next;
- delete tmp;
- }
- *head = NULL;
- cout << "Lista je prazna." << endl;
- }
- int main(int argc, char** argv)
- {
- unsigned short menu_choice;
- List *head = NULL; // u pocetku lista je prazna pa head pokazuje na NULL
- do
- {
- cout << endl << "\tIZBORNIK" << endl <<
- "-------------------------" << endl <<
- "0 za izlaz." << endl <<
- "1 za dodavanje nove komponente." << endl <<
- "2 za ispis svih komponenti." << endl <<
- "3 za brisanje svih komponenti." << endl <<
- "Vas izbor: ";
- cin >> menu_choice;
- switch(menu_choice)
- {
- case 0: break;
- case 1:
- {
- add_item(&head);
- break;
- }
- case 2:
- {
- print_items(head);
- break;
- }
- case 3:
- {
- delete_items(&head);
- break;
- }
- default:
- {
- cout << "Pogresan unos." << endl;
- break;
- }
- }
- }
- while(menu_choice);
- delete_items(&head); // pobrinemo se da se sva memorija oslobodi na izlazu iz programa
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement