wiuu23

Postavka-VrstaObaveze

Jun 9th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.53 KB | None | 0 0
  1. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  2. #pragma warning(disable:4996)
  3.  
  4. enum VrstaObaveze { Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni };
  5. struct Datum {
  6. int *_dan, *_mjesec, *_godina;
  7. void Unos(int d, int m, int g) {
  8. _dan = &d; _mjesec = &m; _godina = &g;
  9. }
  10. void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }  
  11. void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
  12. };
  13. struct ObavezeNaPredmetu {
  14. VrstaObaveze _vrstaObaveze;
  15. Datum * _datumIzvrsenja;
  16. char * _napomena;
  17. int _ocjena; // 5 - 10
  18. void Unos(VrstaObaveze vrsta, Datum * datum, int ocjena, char * napomena) {
  19. _vrstaObaveze = vrsta;
  20. _datumIzvrsenja = new Datum;
  21. _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  22. _ocjena = ocjena;
  23. int size = strlen(napomena) + 1;
  24. _napomena = new char[size];
  25. strcpy_s(_napomena, size, napomena);
  26. }
  27. void Ispis() {
  28. cout << _vrstaObaveze << " " << _ocjena << " " << _napomena;
  29. _datumIzvrsenja->Ispis();
  30. cout << endl;
  31. }
  32. void Dealociraj() {
  33. _datumIzvrsenja->Dealociraj(); 
  34. delete[] _datumIzvrsenja; _datumIzvrsenja = nullptr;
  35. delete[] _napomena; _napomena = nullptr;
  36. }
  37. };
  38. struct PolozeniPredmet {
  39. char * _nazivPredmeta;
  40. ObavezeNaPredmetu * _listaIzvrsenihObaveza[10];//ogranicen je broj izvrsenih obavezan na predmetu
  41. int _trenutnoIzvrsenihObaveza;
  42. int _konacnaOcjena; //formira se na osnovu ocjena izvrsenih obaveza
  43. void Unos(char * naziv) {
  44. int size = strlen(naziv) + 1;
  45. _nazivPredmeta = new char[size];
  46. strcpy_s(_nazivPredmeta, size, naziv);
  47. _trenutnoIzvrsenihObaveza = 0;
  48. _konacnaOcjena = 5;
  49. }
  50. void Dealociraj() {
  51. delete[] _nazivPredmeta; _nazivPredmeta = nullptr;
  52. for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++) {
  53. _listaIzvrsenihObaveza[i]->Dealociraj();
  54. delete _listaIzvrsenihObaveza[i];
  55. _listaIzvrsenihObaveza[i] = nullptr;
  56. }
  57. }
  58. void Ispis() {
  59. cout << _nazivPredmeta <<"(" <<_konacnaOcjena << ")" << endl;
  60. for (size_t i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  61. _listaIzvrsenihObaveza[i]->Ispis();
  62. }
  63.  
  64.  
  65.  
  66.  
  67.  
  68. /*
  69. 1. DodajIzvrsenuObavezu – na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene obaveze na predmetu. Potrebno je onemoguciti dodavanje identicnih obaveza. Identicna vrsta obaveze se moze dodati samo u slucaju da se radi o Prakticno radu ili je prethodno dodana obaveza (identicne vrste) imala ocjenu 5.
  70. 2. FormirajKonacnuOcjenu - formiranje konacne ocjene se vrsi prema sljedecim pravilima: student mora posjedovati polozen integralni ili dva parijcalna ispita; ukoliko je ispit polozen putem parcijalnih ispita, student takodjer mora imati pozitivno (ocjenom vecom od 5) ocijenjena najmanje dva seminarska rada u okviru kojih nije evidentirana losa napomena (rijeci koje oznacavaju losu napomenu: nije dobro, kopirano, nije ispravljeno); u slucaju da je ispit polozen putem integralnog ispita student mora imati polozen i prakticni ispit (polozen najkasnije 15 dana od dana polaganja integralnog ispita).
  71. */
  72. };
  73.  
  74. struct Student {
  75. char * _imePrezime;
  76. char * _brojIndeksa;
  77. PolozeniPredmet * _polozeniPredmeti;
  78. int _brojPolozenih;
  79. void Unos(char * IB, char * imePrezime) {
  80. int size = strlen(imePrezime) + 1;
  81. _imePrezime = new char[size];
  82. strcpy_s(_imePrezime, size, imePrezime);
  83. size = strlen(IB) + 1;
  84. _brojIndeksa = new char[size];
  85. strcpy_s(_brojIndeksa, size, IB);
  86. _brojPolozenih = 0;
  87. }
  88.  
  89. /*
  90. 1. DodajPolozeniPredmet - na osnovu vrijednosti primljenog parametra osigurati dodavanje novopolozenog predmeta. Potrebno je onemoguciti dodavanje identicnih predmeta, predmeta koja ne posjeduju formiranu konacnu ocjenu, te predmeta kod kojih je u napomeni neke od izvrsenih obaveza navedena rijec 'prepisivao' ili 'izbacen'.
  91. 2. PronadjiNajuspjesnijuObavezu - vraca pokazivac na predmet u okviru koga je student ostvario najvecu ocjenu tokom realizacije odredjene obaveze (vrsta obaveze je proslijedjena kao parametar). Ukoliko postoje dva identicna predmeta, onda funkcija vraca pokazivac na posljednje pronadjeni predmet. U slucaju da obaveza nije pronadjena, funkcija vraca nullptr.
  92. */
  93.  
  94. void Ispis() {
  95. cout << _brojIndeksa << " " << _imePrezime << endl;
  96. for (size_t i = 0; i < _brojPolozenih; i++)
  97. _polozeniPredmeti[i].Ispis();
  98. }
  99. void Dealociraj() {
  100. delete[] _imePrezime; _imePrezime = nullptr;
  101. delete[] _brojIndeksa; _brojIndeksa = nullptr;
  102. for (size_t i = 0; i < _brojPolozenih; i++)
  103. _polozeniPredmeti[i].Dealociraj();
  104. delete [] _polozeniPredmeti;
  105. _polozeniPredmeti = nullptr;
  106.  
  107. }
  108. };
  109.  
  110. /*
  111. 1. UpisiUBinarniFajl - objekat koji je primljen kao parametar upisuje u binarni fajl. Naziv fajla treba biti sastavljen od naziva predmeta i konacne ocjena npr. "Programiranje II_6"
  112. 2. UcitajIzBinarnogFajla - u objekat koji je primljen kao parametar ucitava sadrzaj binarnog fajla (naziv fajla je takodjer proslijedjen kao parametar)
  113. */
  114. void main() {
  115. /*
  116. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEĆE BODOVATI
  117. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  118. 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
  119. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  120. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI ĆETE KOPIRATI VAŠA RJEŠENJA)
  121. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  122. */
  123.  
  124.  
  125. Datum datumSeminarski1, datumSeminarski2, datumParcijalni1, datumParcijalni2,
  126. datumIntegralni;
  127. datumSeminarski1.Unos(10, 6, 2016);
  128. datumSeminarski2.Unos(18, 6, 2016);
  129. datumParcijalni1.Unos(22, 3, 2016);
  130. datumParcijalni2.Unos(22, 6, 2016);
  131.  
  132. ObavezeNaPredmetu parcijalni1, parcijalni2, seminarski1, seminarski2;
  133. parcijalni1.Unos(Parcijalni1, &datumParcijalni1, 6, "uslovno polozen");
  134.  
  135. parcijalni2.Unos(Parcijalni2, &datumParcijalni2, 5, "previse gresaka");
  136. parcijalni2.DodajNapomenu("sugerisati da se vise paznje obrati na rad sa dinamickim nizovima");
  137.  
  138. seminarski1.Unos(Seminarski, &datumSeminarski1, 8, "implementirani svi algoritmi");
  139. seminarski1.DodajNapomenu("predloziti ucesce na FITCC 2017");//omogucava dodavanje dodatnih napomena vezano za obeveze na predmetu
  140.  
  141. seminarski2.Unos(Seminarski, &datumSeminarski2, 6, "rad slican kao kod studenta IB150388");
  142.  
  143.  
  144.  
  145. //polozeni predmet
  146. PolozeniPredmet prII, prII_FromFile;
  147. prII.Unos("Programiranje II");
  148. if (prII.DodajIzvrsenuObavezu(parcijalni1))
  149. cout << "Parcijalni 1...dodan" << endl;
  150. if (prII.DodajIzvrsenuObavezu(parcijalni2))
  151. cout << "Parcijalni 2...dodan" << endl;
  152. if (prII.DodajIzvrsenuObavezu(seminarski1))
  153. cout << "Seminarski1...dodan" << endl;
  154. if (prII.DodajIzvrsenuObavezu(seminarski2))
  155. cout << "Seminarski2...dodan" << endl;
  156.  
  157.  
  158. datumParcijalni2.Unos(22, 7, 2016);
  159. parcijalni2._datumIzvrsenja = &datumParcijalni2;
  160.  
  161. if (prII.DodajIzvrsenuObavezu(parcijalni2))
  162. cout << "Parcijalni 2...dodan" << endl;
  163. cout << "Konacna ocjena iz predmeta PRII je: " << prII.FormirajKonacnuOcjenu() << endl;
  164.  
  165. //manipulacija fajlovima
  166. UpisiUBinarniFajl(prII);
  167. prII.Ispis();
  168. UcitajIzBinarnogFajla(prII_FromFile, "Programiranje II_6");
  169. prII_FromFile.Ispis();
  170.  
  171. Student jasmin;
  172. jasmin.Unos("IB130031", "Jasmin Azemovic");
  173. if (jasmin.DodajPolozeniPredmet(prII))
  174. cout << "PRII uspjesno dodan!" << endl;
  175. PolozeniPredmet * p = jasmin.PronadjiNajuspjesnijuObavezu(Seminarski);
  176. cout << "Najuspjesniji seminarski je realizovan u okviru predmeta "; p->Ispis();
  177. jasmin.Ispis();
  178.  
  179. //izvrsiti potrebne dealokacije
  180.  
  181. }
Add Comment
Please, Sign In to add comment