Advertisement
lopezz

Vjezba 10 3 T

Jan 9th, 2016
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class SubjectsRec
  7. {
  8. public:
  9.     int code;
  10.     string name;
  11.     string course;
  12.  
  13.     template <typename P>
  14.     void io(bool print, P pointer, bool sub_only = false)
  15.     {
  16.         if (sub_only && cout << "\n\tPredmet: " << name) return;
  17.  
  18.         if (print &&
  19.             cout << "\tSifra predmeta: " << code
  20.             << "\tNaziv: " << name
  21.             << "\tSmjer: " << course
  22.             << "\tPokazivac na sljedeci element: 0x" << pointer << endl)
  23.             return;
  24.  
  25.         cout << "\nSifra predmeta: ";
  26.         cin >> code;
  27.         cout << "Naziv: ";
  28.         cin.ignore();
  29.         getline(cin, name);
  30.         cout << "Smjer: ";
  31.         getline(cin, course);
  32.     }
  33. };
  34.  
  35.  
  36. class Subjects
  37. {
  38.     SubjectsRec subjects;
  39.     Subjects* next;
  40.     Subjects* previous;
  41.  
  42. public:
  43.     static int counter;
  44.  
  45.     Subjects()
  46.     {
  47.         next = NULL;
  48.         previous = NULL;
  49.     }
  50.  
  51.     void appendFront()
  52.     {
  53.         if (!this->next && cout << "\nLista je prazna,te se ne moze dodati element na pocetak!") return;
  54.  
  55.         subjects.io(0, 0);
  56.         counter++;
  57.  
  58.         Subjects* node = new Subjects;
  59.         Subjects* _next = next;
  60.  
  61.         node->subjects = subjects;
  62.         node->previous = this;
  63.         node->next = _next;
  64.         this->next = node;
  65.         _next->previous = node;
  66.     }
  67.  
  68.     void appendBack()
  69.     {
  70.         subjects.io(0, 0, 0);
  71.         counter++;
  72.  
  73.         Subjects* last = this;
  74.         Subjects* node = new Subjects;
  75.  
  76.  
  77.         while (last->next) last = last->next;
  78.  
  79.         node->subjects = subjects;
  80.         node->previous = last;
  81.         node->next = NULL;
  82.         last->next = node;
  83.     }
  84.  
  85.     void PrintList()
  86.     {
  87.         puts("\nIspis liste: ");
  88.         for (Subjects* node = this->next; node; node = node->next)
  89.             node->subjects.io(true, node->next);
  90.     }
  91.  
  92.  
  93.     bool Search(string course_id, int sub_id, bool bycode = false, bool bycode_print = false)
  94.     {
  95.         for (Subjects* node = this->next; node; node = node->next)
  96.         {
  97.             if (!bycode_print && node->subjects.course == course_id) node->subjects.io(true, NULL, true);
  98.             if (!bycode_print && node->subjects.course == course_id) return true;
  99.             if (bycode_print && node->subjects.code == sub_id) node->subjects.io(true, NULL, true);
  100.             if ((bycode || bycode_print)  && node->subjects.code == sub_id) return true;
  101.         }
  102.         return false;
  103.     }
  104. }*SubjectsList = NULL;
  105.  
  106. class EntryRec
  107. {
  108. public:
  109.     int entry_code;
  110.     int sub_code;
  111.     string stud_id;
  112.     string term;
  113.  
  114.     void io(bool print = false)
  115.     {
  116.         if (print &&
  117.             cout << "\n\tSifra prijave: " << entry_code
  118.             << "\tSifra predmeta: " << sub_code
  119.             && SubjectsList->Search("", sub_code, 1, 1) && //ispis predmeta
  120.             cout << "\tMaticni broj: " << stud_id
  121.             << "\tRok: " << term << endl
  122.             ) return;
  123.  
  124.         cout << "\nSifra prijave: ";
  125.         cin >> entry_code;
  126.  
  127.         do cout << "Sifra predmeta: ";
  128.         while (cin >> sub_code && !SubjectsList->Search("", sub_code, true));
  129.  
  130.         cout << "Maticni broj studenta: ";
  131.         cin.ignore();
  132.         getline(cin, stud_id);
  133.         cout << "Rok: ";
  134.         getline(cin, term);
  135.     }
  136. };
  137.  
  138.  
  139. class Entry
  140. {
  141. public:
  142.     EntryRec* entry_rec;
  143.     Entry* next;
  144.     static int counter;
  145.  
  146.     Entry()
  147.     {
  148.         entry_rec = new EntryRec;
  149.         next = NULL;
  150.     }
  151.  
  152.     void append()
  153.     {
  154.         entry_rec->io();
  155.         counter++;
  156.  
  157.         Entry* last = this;
  158.         Entry* node = new Entry;
  159.  
  160.         while (last->next) last = last->next;
  161.         last->next = node;
  162.  
  163.  
  164.         node->entry_rec->entry_code = entry_rec->entry_code;
  165.         node->entry_rec->sub_code = entry_rec->sub_code;
  166.         node->entry_rec->stud_id = entry_rec->stud_id;
  167.         node->entry_rec->term = entry_rec->term;
  168.     }
  169.  
  170.     void PrintEntries()
  171.     {
  172.         for (Entry* node = this->next; node; node = node->next)
  173.             node->entry_rec->io(true);
  174.     }
  175. }*EntryList = NULL;
  176.  
  177. int Subjects::counter = 0;
  178. int Entry::counter = 0;
  179.  
  180. short ListStatus(bool sub_list = true)
  181. {
  182.     if (sub_list && !SubjectsList && cout << "\n\t0 - Glava liste predmeta nije alocirana") return 0;
  183.     if (sub_list && SubjectsList && !Subjects::counter && cout << "\n\t1 - Lista predmeta je prazna\n") return 1;
  184.     if (sub_list && SubjectsList && Subjects::counter && printf("\n\t2 - Lista predmeta sadrzi %i element/a\n", Subjects::counter)) return 2;
  185.  
  186.     if (!EntryList && cout << "\n\t0 - Glava liste prijava nije alocirana\n") return 0;
  187.     if (EntryList && !Entry::counter && cout << "\n\t0 - Lista prijava je prazna\n") return 1;
  188.     if (Entry::counter && printf("\n\t2 - Lista prijava sadrzi %i element/a\n", Entry::counter)) return 2;
  189. }
  190.  
  191.  
  192. int main()
  193. {
  194.     short choice;
  195.     short subs_state;
  196.     short entry_state;
  197.     string buffer;
  198.  
  199. infinite_loop:
  200.  
  201.     puts("\n1. Alokacija glave liste predmeta/Upis predmeta na kraj liste predmeta i ispis liste");
  202.     puts("2. Popis predmeta zadanog smjera/Unos na pocetak liste predmeta");
  203.     puts("3. Unos u listu prijava/Ispis liste prijava za sve predmete");
  204.     puts("9. Izlaz\n");
  205.  
  206.     cout << "Izbor: ";
  207.     cin >> choice;
  208.  
  209.  
  210.     switch (choice)
  211.     {
  212.     case 1:
  213.         if (!ListStatus())
  214.         {
  215.             SubjectsList = new Subjects;
  216.             cout << "\n\tGlava liste predmeta alocirana!" << endl;
  217.             break;
  218.         }
  219.  
  220.         SubjectsList->appendBack();
  221.         SubjectsList->PrintList();
  222.         break;
  223.     case 2:
  224.         if (!ListStatus()) break;
  225.         buffer = "";
  226.  
  227.         cout << "Unesite smjer: ";
  228.         cin.ignore();
  229.         getline(cin, buffer);
  230.  
  231.         puts("Popis predmeta za zadani smjer: ");
  232.         SubjectsList->Search(buffer, 0);
  233.  
  234.         cout << "\nPritisnite enter ako zelite dodati predmet na pocetak liste, 0 za povratak: ";
  235.         if (cin.get() != '\n') break;
  236.  
  237.         SubjectsList->appendFront();
  238.         SubjectsList->PrintList();
  239.         break;
  240.     case 3:
  241.         subs_state = ListStatus();
  242.         entry_state = ListStatus(false);
  243.         if (subs_state != 2 && cout << "\n\tUnos prijava nije dopusten!") break;
  244.  
  245.         if (!entry_state)
  246.         {
  247.             EntryList = new Entry;
  248.             puts("\tGlava liste prijava alocirana!");
  249.             break;
  250.         }
  251.         EntryList->append();
  252.         EntryList->PrintEntries();
  253.         break;
  254.     default:
  255.         if (choice != 9) puts("\nNepostojeci izbor!\n");
  256.         else return 0;
  257.     }
  258.  
  259.     goto infinite_loop;
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement