Advertisement
limun11

Obaveze na predmetu by Anisa

Jun 11th, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.21 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. enum VrstaObaveze { Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni };
  6. struct Datum {
  7.     int *_dan, *_mjesec, *_godina;
  8.     void Unos(int d, int m, int g) {
  9.         _dan = new int(d);
  10.         _mjesec = new int(m);
  11.         _godina = new int(g);
  12.     }
  13.     void Ispis() {
  14.         cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
  15.     }
  16.     void Dealociraj() {
  17.         delete _dan;
  18.         delete _mjesec;
  19.         delete _godina;
  20.         _dan = _mjesec = _godina = nullptr;
  21.     }
  22.  
  23. };
  24. bool sedamDana(Datum datum, Datum datum1) {
  25.     if (*datum._godina > *datum1._godina)
  26.         return true;
  27.     else if (*datum._godina == *datum1._godina && *datum._mjesec > *datum1._mjesec)
  28.         return true;
  29.     else if (*datum._mjesec == *datum1._mjesec && *datum._dan - *datum1._dan > 7)
  30.         return true;
  31.     return false;
  32. }
  33. struct ObavezeNaPredmetu {
  34.     VrstaObaveze *_vrstaObaveze;
  35.     Datum *_datumIzvrsenja;
  36.     char *_napomena;
  37.     int _ocjena;
  38.     void Unos(VrstaObaveze vrsta, Datum *datum, int ocjena, char *napomena)
  39.     {
  40.         _vrstaObaveze = new VrstaObaveze(vrsta);
  41.         _datumIzvrsenja = new Datum;
  42.         _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  43.         _ocjena = ocjena;
  44.         int vel = strlen(napomena) + 1;
  45.         _napomena = new char[vel];
  46.         strcpy_s(_napomena, vel, napomena);
  47.     }
  48.     void Ispis() {
  49.         cout << *_vrstaObaveze << " " << _ocjena << " " << _napomena;
  50.         _datumIzvrsenja->Ispis();
  51.         cout << endl;
  52.     }
  53.     void Dealociraj() {
  54.         _datumIzvrsenja->Dealociraj();
  55.         delete _vrstaObaveze;
  56.         delete _napomena;
  57.         _vrstaObaveze = nullptr;
  58.         _napomena = nullptr;
  59.     }
  60. };
  61. struct PolozeniPredmet {
  62.     Datum _datumPolaganja;
  63.     char* _nazivPredmeta;
  64.     ObavezeNaPredmetu *_listaIzvrsenihObaveza[10];
  65.     int _trenutnoIzvrsenihObaveza;
  66.     int _konacnaOcjena;
  67.     void Unos(char*nazivPredmeta)
  68.     {
  69.         _nazivPredmeta = new char[strlen(nazivPredmeta) + 1];
  70.         strcpy_s(_nazivPredmeta, strlen(nazivPredmeta) + 1, nazivPredmeta);
  71.         _trenutnoIzvrsenihObaveza = 0;
  72.         _konacnaOcjena = 0;
  73.     }
  74.     bool DodajIzvrsenuObavezu(VrstaObaveze vrsta, Datum date, int ocjena, char*napomena)
  75.     {
  76.         /*DodajIzvrsenuObavezu – na osnovu vrijednosti primljenih parametara
  77.         osigurati dodavanje novoizvrsene obaveze na predmetu.
  78.         Potrebno je onemoguciti dodavanje identicnih obaveza, a izmedju izvrsenja pojedinih obaveza mora proci najmanje 7 dana.
  79.         Identicna vrsta obaveze se moze dodati samo u slucaju da se radi o Seminarskom ili je prethodno dodana obaveza (identicne vrste)
  80.         imala ocjenu 5*/
  81.  
  82.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  83.         {
  84.             if (*_listaIzvrsenihObaveza[i]->_vrstaObaveze == vrsta && vrsta != Seminarski && _listaIzvrsenihObaveza[i]->_ocjena != 5 && sedamDana(date, *_listaIzvrsenihObaveza[i]->_datumIzvrsenja) == false)
  85.  
  86.                 return false;
  87.  
  88.         }
  89.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza] = new ObavezeNaPredmetu;
  90.         _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(vrsta, &date, ocjena, napomena);
  91.         _trenutnoIzvrsenihObaveza++;
  92.         return true;
  93.  
  94.     }
  95. /*3. FormirajKonacnuOcjenu - konacna ocjene predstavlja prosjecnu ocjenu na predmetu,
  96. a za njeno formiranje student mora posjedovati polozen integralni ili dva parijcalna ispita.
  97. Ukoliko je ispit polozen putem parcijalnih ispita, student takodjer mora imati pozitivno (ocjenom vecom od 5) ocijenjena najmanje dva seminarska rada.
  98. U slucaju da bilo koji od navedenih uslova nije zadovoljenkonacna ocjena treba biti postavljena na vrijednost 5.
  99. Konacna ocjena, takodjer, ne smije biti formirana u slucaju da u napomeni od dvije obaveze stoji rijec 'prepisivao' ili 'izbacen'.
  100. Ukoliko su ispunjeni svi uslovi, osim formiranja konacne ocjene, kao datum polaganja je potrebno postaviti na vrijednost datuma posljednje izvrsene
  101. obaveze koja je usla u formiranje ocjene.*/
  102.     float FormirajKonacnuOcjenu() {
  103.         int brojVaranja = 0;
  104.         int brojSeminarskih = 0;
  105.         _konacnaOcjena = 5;
  106.         double prosjek = 0;
  107.         int prvaParcijala = 0;
  108.         int drugaParcijala = 0;
  109.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  110.         {
  111.             if (strstr(_listaIzvrsenihObaveza[i]->_napomena, "prepisivao") || strstr(_listaIzvrsenihObaveza[i]->_napomena, "Izbacen"))
  112.                 brojVaranja++;
  113.             if (*_listaIzvrsenihObaveza[i]->_vrstaObaveze == Seminarski) {
  114.                 if (_listaIzvrsenihObaveza[i]->_ocjena > 5) {
  115.                     brojSeminarskih++;
  116.                 }
  117.             }
  118.         }
  119.         for (int j = 0; j < _trenutnoIzvrsenihObaveza; j++)
  120.         {
  121.             if (*_listaIzvrsenihObaveza[j]->_vrstaObaveze == Integralni && brojVaranja < 2) {
  122.                 if (_listaIzvrsenihObaveza[j]->_ocjena > 5) {
  123.                     _konacnaOcjena = _listaIzvrsenihObaveza[j]->_ocjena;
  124.                     _datumPolaganja.Unos(*_listaIzvrsenihObaveza[j]->_datumIzvrsenja->_dan, *_listaIzvrsenihObaveza[j]->_datumIzvrsenja->_mjesec, *_listaIzvrsenihObaveza[j]->_datumIzvrsenja->_godina);
  125.                     return _konacnaOcjena;
  126.                 }
  127.             }
  128.             else if (*_listaIzvrsenihObaveza[j]->_vrstaObaveze == Parcijalni1) {
  129.                 if (_listaIzvrsenihObaveza[j]->_ocjena > 5) {
  130.                     prvaParcijala = _listaIzvrsenihObaveza[j]->_ocjena;
  131.                 }
  132.             }
  133.             else if (*_listaIzvrsenihObaveza[j]->_vrstaObaveze == Parcijalni2) {
  134.                 if (_listaIzvrsenihObaveza[j]->_ocjena > 5) {
  135.                     drugaParcijala = _listaIzvrsenihObaveza[j]->_ocjena;
  136.                 }
  137.             }
  138.         }
  139.         for(int k=0; k<_trenutnoIzvrsenihObaveza; k++)
  140.         if (prvaParcijala > 5 && drugaParcijala > 5 && brojSeminarskih >= 2) {
  141.             prosjek = (prvaParcijala + drugaParcijala) / 2.00;
  142.             _datumPolaganja.Unos(*_listaIzvrsenihObaveza[k]->_datumIzvrsenja->_dan, *_listaIzvrsenihObaveza[k]->_datumIzvrsenja->_mjesec, *_listaIzvrsenihObaveza[k]->_datumIzvrsenja->_godina);
  143.             return prosjek;
  144.         }
  145.         else
  146.             return _konacnaOcjena;
  147.     }  
  148.  
  149.     void Ispis() {
  150.         cout<< "Predmet: " << _nazivPredmeta << endl;
  151.         cout << "Datum polaganja: ";
  152.         _datumPolaganja.Ispis();
  153.         for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
  154.         {
  155.             cout << "Obaveza ->" << *_listaIzvrsenihObaveza[i]->_vrstaObaveze << " ocjena : " << _listaIzvrsenihObaveza[i]->_ocjena << endl;
  156.         }
  157.         cout << "Konacna ocjena: " << _konacnaOcjena << endl;
  158.     }
  159. };
  160. int PretragaRekurzivno(ObavezeNaPredmetu **predmet, int max, int &brojac)
  161. {
  162.     if (max == 0)
  163.         return brojac;
  164.     if (predmet[max-1]->_ocjena < 6)
  165.     {
  166.         brojac++;
  167.         return PretragaRekurzivno(predmet, max - 1, brojac);
  168.     }
  169.     return PretragaRekurzivno(predmet, max - 1, brojac);
  170.  
  171. }
  172. /*void UpisiUBinarniFajl(PolozeniPredmet predmet) {
  173.     char nazivFajla[20];
  174.     strcpy_s(nazivFajla, 20, predmet._nazivPredmeta);
  175.     strcat_s(nazivFajla, ".bin");
  176.  
  177.     ofstream ObjekatUnos(nazivFajla, ios::out | ios::binary);
  178.     ObjekatUnos.write((char*)(&predmet._nazivPredmeta), sizeof(predmet._nazivPredmeta));
  179.     cout << "Objekat upisan u " << nazivFajla << endl;
  180.     ObjekatUnos.close();
  181.  
  182. }
  183. /*void UcitajIzBinarnogFajla(PolozeniPredmet predmet, char*predmetch)
  184. {
  185. //ne kontam ove parametre
  186. }*/
  187. void main() {
  188.     Datum datumSeminarski1, datumSeminarski2, datumParcijalni1, datumParcijalni2;
  189.     datumSeminarski1.Unos(10, 6, 2016);
  190.     datumSeminarski2.Unos(18, 6, 2016);
  191.     datumParcijalni1.Unos(22, 3, 2016);
  192.     datumParcijalni2.Unos(22, 6, 2016);
  193.  
  194.     //polozeni predmet
  195.     PolozeniPredmet prII, prII_FromFile;
  196.     prII.Unos("Programiranje II");
  197.     if (prII.DodajIzvrsenuObavezu(Parcijalni1, datumParcijalni1, 6, "uslovno polozen"))
  198.         cout << "Parcijalni 1...dodan" << endl;
  199.     if (prII.DodajIzvrsenuObavezu(Parcijalni2, datumParcijalni2, 5, "previse gresaka"))
  200.         cout << "Parcijalni 2...dodan" << endl;
  201.     if (prII.DodajIzvrsenuObavezu(Seminarski, datumSeminarski1, 8, "implementirani svi algoritmi"))
  202.         cout << "Seminarski1...dodan" << endl;
  203.     if (prII.DodajIzvrsenuObavezu(Seminarski, datumSeminarski2, 6, "rad slican kao kod studenta IB150388"))
  204.         cout << "Seminarski2...dodan" << endl;
  205.  
  206.     cout << "Konacna ocjena iz predmeta PRII je: " << prII.FormirajKonacnuOcjenu() << endl;
  207.     datumParcijalni2.Unos(22, 7, 2016);
  208.     if (prII.DodajIzvrsenuObavezu(Parcijalni2, datumParcijalni2, 6, ""))
  209.         cout << "Parcijalni 2...dodan" << endl;
  210.     cout << "Konacna ocjena iz predmeta PRII je: " << prII.FormirajKonacnuOcjenu() << endl;
  211.     //rekurzija
  212.     int brojac = 0;
  213.     cout << "Broj negativnih ocjena je: " << PretragaRekurzivno(prII._listaIzvrsenihObaveza, prII._trenutnoIzvrsenihObaveza, brojac) << endl;
  214.     //manipulacija fajlovima
  215.     //UpisiUBinarniFajl(prII);
  216.     prII.Ispis();
  217.     //UcitajIzBinarnogFajla(prII_FromFile, "Programiranje II_6");
  218.     //prII_FromFile.Ispis();
  219.  
  220.  
  221.  
  222.     system("pause>0");
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement