Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. using namespace std;
  5.  
  6. #pragma warning(disable:4996)
  7.  
  8. char *crt = "\n-------------------------------------------\n";
  9.  
  10. enum eNacinStudiranja { REDOVAN, DL };
  11. enum eClass { PRVI = 1, DRUGI, TRECI, CETVRTI };
  12.  
  13. struct DatumVrijeme {
  14.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  15.     void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 0, int minuti = 0) {
  16.         _dan = new int(dan);
  17.         _mjesec = new int(mjesec);
  18.         _godina = new int(godina);
  19.         _sati = new int(sati);
  20.         _minuti = new int(minuti);
  21.     }
  22.     void Deallocate() {
  23.         delete _dan; _dan = nullptr;
  24.         delete _mjesec; _mjesec = nullptr;
  25.         delete _godina; _godina = nullptr;
  26.         delete _sati; _sati = nullptr;
  27.         delete _minuti; _minuti = nullptr;
  28.     }
  29.     void Output() {
  30.         cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
  31.     }
  32.     void GetDatumKaoNizKaraktera()
  33.     {
  34.         cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
  35.     }
  36.     bool VeciOdIliJednak(DatumVrijeme d) {
  37.         if (_godina > d._godina)
  38.             return true;
  39.         if (_godina == d._godina) {
  40.             if (_mjesec > d._mjesec)
  41.                 return true;
  42.             if (_mjesec == d._mjesec && _dan >= d._dan)
  43.                 return true;
  44.         }
  45.         return false;
  46.     }
  47. };
  48.  
  49. const DatumVrijeme rokZaPrijavu = { new int(5), new int(7), new int(2017), new int(12), new int(30) };
  50.  
  51.  
  52. struct Subject {
  53.     char* _name;
  54.     int _mark;
  55.     DatumVrijeme* _datumUnosa;
  56.     void Unos(char * name, int ocjena, DatumVrijeme datumUnosa) {
  57.         int vel = strlen(name) + 1;
  58.         _name = new char[vel];
  59.         strcpy_s(_name, vel, name);
  60.         _mark = ocjena;
  61.         _datumUnosa = new DatumVrijeme;
  62.         _datumUnosa->Unos(*datumUnosa._dan, *datumUnosa._mjesec, *datumUnosa._godina, *datumUnosa._sati, *datumUnosa._minuti);
  63.     }
  64.     void Deallocate() {
  65.         delete[] _name; _name = nullptr;
  66.         _datumUnosa->Deallocate(); delete _datumUnosa;
  67.     }
  68.     void Output() {
  69.         cout << _name << " (" << _mark << ") ";
  70.         _datumUnosa->GetDatumKaoNizKaraktera();
  71.     }
  72. };
  73.  
  74. struct Success {
  75.     eClass _Class;
  76.     Subject* subjects;
  77.     int counterSubjects;
  78.     void Unos(eClass Class) {
  79.         _Class = Class;
  80.         subjects = nullptr;
  81.         counterSubjects = 0;
  82.     }
  83.     void Deallocate() {
  84.         for (int i = 0; i < counterSubjects; i++)
  85.             subjects[i].Deallocate();
  86.         delete[] subjects; subjects = nullptr;
  87.     }
  88.     void Output() {
  89.         cout << crt << "Class -> " << _Class << crt;
  90.         for (int i = 0; i < counterSubjects; i++)
  91.             subjects[i].Output();
  92.     }
  93.     bool DodajSubject(Subject p) {
  94.         Subject* temp = new Subject[counterSubjects + 1];
  95.         for (int i = 0; i < counterSubjects; i++)
  96.         {
  97.             temp[i].Unos(subjects[i]._name, subjects[i]._mark, *subjects[i]._datumUnosa);
  98.             subjects[i].Deallocate();
  99.         }
  100.         temp[counterSubjects].Unos(p._name, p._mark, *p._datumUnosa);
  101.  
  102.         delete[] subjects;
  103.         subjects = temp;
  104.         counterSubjects++;
  105.  
  106.         return true;
  107.     }
  108. };
  109.  
  110. struct Candidate {
  111.     eNacinStudiranja _nacinStudiranja;
  112.     char* _imePrezime;
  113.     shared_ptr<Success> _Success[4];
  114.  
  115.     void Unos(eNacinStudiranja nacinStudiranja, char* imePrezime) {
  116.         int vel = strlen(imePrezime) + 1;
  117.         _imePrezime = new char[vel];
  118.         strcpy_s(_imePrezime, vel, imePrezime);
  119.         _nacinStudiranja = nacinStudiranja;
  120.         for (size_t i = 0; i < 4; i++)
  121.             _Success[i] = nullptr;
  122.     }
  123.     void Deallocate() {
  124.         delete[] _imePrezime; _imePrezime = nullptr;
  125.         for (size_t i = 0; i < 4; i++)
  126.             _Success[i]->Deallocate();
  127.     }
  128.     void Output() {
  129.         cout << crt << _imePrezime << " " << _nacinStudiranja;
  130.         for (size_t i = 0; i < 4; i++)
  131.             _Success[i]->Output();
  132.     }
  133.     bool DodajSubject(eClass e, Subject p)
  134.     {
  135.         int position = e - 1;
  136.         if (_Success[position] == nullptr)
  137.         {
  138.             _Success[position] = make_shared<Success>();
  139.             _Success[position]->Unos(e);
  140.             //_Success[position]->DodajSubject(p);
  141.         }
  142.  
  143.         int counter = 0;
  144.         for (int i = 0; i < 4; i++)
  145.         {
  146.             if (_Success[i] == nullptr)
  147.                 continue;
  148.  
  149.             for (int j = 0; j < _Success[i]->counterSubjects; j++)
  150.             {
  151.                 if (strcmp(_Success[i]->subjects[j]._name, p._name) == 0)
  152.                     counter++;
  153.             }
  154.         }
  155.  
  156.         if (counter >= 2)
  157.             cout << crt;
  158.         else {
  159.             _Success[position]->DodajSubject(p);
  160.             return true;
  161.         }
  162.  
  163.         return false;
  164.     }
  165. };
  166.  
  167. int main()
  168. {
  169.     DatumVrijeme datum19062017_1015, datum20062017_1115, datum30062017_1215, datum05072017_1231;
  170.     datum19062017_1015.Unos(19, 6, 2017, 10, 15);
  171.     datum20062017_1115.Unos(20, 6, 2017, 11, 15);
  172.     datum30062017_1215.Unos(30, 6, 2017, 12, 15);
  173.     datum05072017_1231.Unos(5, 7, 2017, 12, 31);
  174.  
  175.     datum19062017_1015.GetDatumKaoNizKaraktera();//9.6.2017 10:15
  176.  
  177.     Subject Matematika, Fizika, Hemija, Engleski;
  178.     //2 - ocjena na Subjectu; datum - datum evidentiranja Successa na Subjectu jer postoji krajnji rok za evidentiranje
  179.     Matematika.Unos("Matematika", 2, datum19062017_1015);
  180.     Fizika.Unos("Fizika", 5, datum20062017_1115);
  181.     Hemija.Unos("Hemija", 2, datum20062017_1115);
  182.     Engleski.Unos("Engleski", 5, datum05072017_1231);
  183.  
  184.     int counterCandidate = 2;
  185.  
  186.     Candidate * student = new Candidate[counterCandidate];
  187.     student[0].Unos(DL, "Jasmin Azemovic");
  188.     student[1].Unos(REDOVAN, "Indira Hamulic");
  189.  
  190.     /*
  191.     Success (tokom srednjoskolskog obrazovanja) se dodaje za svaki Subject na nivou Classa.
  192.     prilikom dodavanja onemoguciti:
  193.     - dodavanje Subjecta za Classe koji nisu definisani enumeracijom,
  194.     - dodavanje istoimenih Subjecta na nivou jednog Classa,
  195.     - dodavanje Subjecta nakon dozvoljenog roka za prijavu (rokZaPrijavu).
  196.     Classi (Subjecti ili Success) ne moraju biti dodavani sortiranim redoslijedom (npr. prvo se moze dodati Success za II Class, pa onda za I Class i sl.). Funkcija vraca true ili false u zavisnosti od (ne)uspjesnost izvrsenja
  197.     */
  198.     if (student[0].DodajSubject(DRUGI, Engleski))//ne bi trebao dodati jer je prosao postavljeni rok za dodavanje Subjecta
  199.         cout << "Subject uspjesno dodan!" << crt;
  200.     if (student[0].DodajSubject(DRUGI, Matematika))
  201.         cout << "Subject uspjesno dodan!" << crt;
  202.     if (student[0].DodajSubject(PRVI, Fizika))
  203.         cout << "Subject uspjesno dodan!" << crt;
  204.     if (student[0].DodajSubject(PRVI, Hemija))
  205.         cout << "Subject uspjesno dodan!" << crt;
  206.  
  207.     Matematika._mark = 5;
  208.     Hemija._mark = 3;
  209.  
  210.     if (student[1].DodajSubject(PRVI, Matematika))
  211.         cout << "Subject uspjesno dodan!" << crt;
  212.     if (student[1].DodajSubject(PRVI, Matematika))//ne bi trebalo ponovo dodati Matematiku!
  213.         cout << "Subject uspjesno dodan!" << crt;
  214.     if (student[1].DodajSubject(TRECI, Hemija))
  215.         cout << "Subject uspjesno dodan!" << crt;
  216.     if (student[1].DodajSubject(DRUGI, Engleski))
  217.         cout << "Subject uspjesno dodan!" << crt;
  218.  
  219.     cout << endl << "Candidate sa najvecim prosjekom u drugom Classu: ";
  220.  
  221.     for (int i = 0; i < counterCandidate; i++)
  222.     {
  223.         student[i].Output();
  224.         student[i].Deallocate();
  225.     }
  226.     delete[] student;
  227.     student = nullptr;
  228.  
  229.     system("pause>0");
  230.     return 0;
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement