Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- using namespace std;
- enum VrstaObaveze { Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni };
- struct Datum {
- int *_dan, *_mjesec, *_godina;
- void Unos(int d, int m, int g) {
- _dan = new int(d);
- _mjesec = new int(m);
- _godina = new int(g);
- }
- void Ispis() {
- cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
- }
- void Dealociraj() {
- delete _dan;
- delete _mjesec;
- delete _godina;
- _dan = _mjesec = _godina = nullptr;
- }
- };
- bool sedamDana(Datum datum, Datum datum1) {
- if (*datum._godina > *datum1._godina)
- return true;
- else if (*datum._godina == *datum1._godina && *datum._mjesec > *datum1._mjesec)
- return true;
- else if (*datum._mjesec == *datum1._mjesec && *datum._dan - *datum1._dan > 7)
- return true;
- return false;
- }
- struct ObavezeNaPredmetu {
- VrstaObaveze *_vrstaObaveze;
- Datum *_datumIzvrsenja;
- char *_napomena;
- int _ocjena;
- void Unos(VrstaObaveze vrsta, Datum *datum, int ocjena, char *napomena)
- {
- _vrstaObaveze = new VrstaObaveze(vrsta);
- _datumIzvrsenja = new Datum;
- _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
- _ocjena = ocjena;
- int vel = strlen(napomena) + 1;
- _napomena = new char[vel];
- strcpy_s(_napomena, vel, napomena);
- }
- void Ispis() {
- cout << *_vrstaObaveze << " " << _ocjena << " " << _napomena;
- _datumIzvrsenja->Ispis();
- cout << endl;
- }
- void Dealociraj() {
- _datumIzvrsenja->Dealociraj();
- delete _vrstaObaveze;
- delete _napomena;
- _vrstaObaveze = nullptr;
- _napomena = nullptr;
- }
- };
- struct PolozeniPredmet {
- Datum _datumPolaganja;
- char* _nazivPredmeta;
- ObavezeNaPredmetu *_listaIzvrsenihObaveza[10];
- int _trenutnoIzvrsenihObaveza;
- int _konacnaOcjena;
- void Unos(char*nazivPredmeta)
- {
- _nazivPredmeta = new char[strlen(nazivPredmeta) + 1];
- strcpy_s(_nazivPredmeta, strlen(nazivPredmeta) + 1, nazivPredmeta);
- _trenutnoIzvrsenihObaveza = 0;
- _konacnaOcjena = 0;
- }
- bool DodajIzvrsenuObavezu(VrstaObaveze vrsta, Datum date, int ocjena, char*napomena)
- {
- /*DodajIzvrsenuObavezu – na osnovu vrijednosti primljenih parametara
- osigurati dodavanje novoizvrsene obaveze na predmetu.
- Potrebno je onemoguciti dodavanje identicnih obaveza, a izmedju izvrsenja pojedinih obaveza mora proci najmanje 7 dana.
- Identicna vrsta obaveze se moze dodati samo u slucaju da se radi o Seminarskom ili je prethodno dodana obaveza (identicne vrste)
- imala ocjenu 5*/
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (*_listaIzvrsenihObaveza[i]->_vrstaObaveze == vrsta && vrsta != Seminarski && _listaIzvrsenihObaveza[i]->_ocjena != 5 && sedamDana(date, *_listaIzvrsenihObaveza[i]->_datumIzvrsenja) == false)
- return false;
- }
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza] = new ObavezeNaPredmetu;
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza]->Unos(vrsta, &date, ocjena, napomena);
- _trenutnoIzvrsenihObaveza++;
- return true;
- }
- /*3. FormirajKonacnuOcjenu - konacna ocjene predstavlja prosjecnu ocjenu na predmetu,
- a za njeno formiranje 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 slucaju da bilo koji od navedenih uslova nije zadovoljenkonacna ocjena treba biti postavljena na vrijednost 5.
- Konacna ocjena, takodjer, ne smije biti formirana u slucaju da u napomeni od dvije obaveze stoji rijec 'prepisivao' ili 'izbacen'.
- Ukoliko su ispunjeni svi uslovi, osim formiranja konacne ocjene, kao datum polaganja je potrebno postaviti na vrijednost datuma posljednje izvrsene
- obaveze koja je usla u formiranje ocjene.*/
- float FormirajKonacnuOcjenu() {
- int brojVaranja = 0;
- int brojSeminarskih = 0;
- _konacnaOcjena = 5;
- double prosjek = 0;
- int prvaParcijala = 0;
- int drugaParcijala = 0;
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- if (strstr(_listaIzvrsenihObaveza[i]->_napomena, "prepisivao") || strstr(_listaIzvrsenihObaveza[i]->_napomena, "Izbacen"))
- brojVaranja++;
- if (*_listaIzvrsenihObaveza[i]->_vrstaObaveze == Seminarski) {
- if (_listaIzvrsenihObaveza[i]->_ocjena > 5) {
- brojSeminarskih++;
- }
- }
- }
- for (int j = 0; j < _trenutnoIzvrsenihObaveza; j++)
- {
- if (*_listaIzvrsenihObaveza[j]->_vrstaObaveze == Integralni && brojVaranja < 2) {
- if (_listaIzvrsenihObaveza[j]->_ocjena > 5) {
- _konacnaOcjena = _listaIzvrsenihObaveza[j]->_ocjena;
- _datumPolaganja.Unos(*_listaIzvrsenihObaveza[j]->_datumIzvrsenja->_dan, *_listaIzvrsenihObaveza[j]->_datumIzvrsenja->_mjesec, *_listaIzvrsenihObaveza[j]->_datumIzvrsenja->_godina);
- return _konacnaOcjena;
- }
- }
- else if (*_listaIzvrsenihObaveza[j]->_vrstaObaveze == Parcijalni1) {
- if (_listaIzvrsenihObaveza[j]->_ocjena > 5) {
- prvaParcijala = _listaIzvrsenihObaveza[j]->_ocjena;
- }
- }
- else if (*_listaIzvrsenihObaveza[j]->_vrstaObaveze == Parcijalni2) {
- if (_listaIzvrsenihObaveza[j]->_ocjena > 5) {
- drugaParcijala = _listaIzvrsenihObaveza[j]->_ocjena;
- }
- }
- }
- for(int k=0; k<_trenutnoIzvrsenihObaveza; k++)
- if (prvaParcijala > 5 && drugaParcijala > 5 && brojSeminarskih >= 2) {
- prosjek = (prvaParcijala + drugaParcijala) / 2.00;
- _datumPolaganja.Unos(*_listaIzvrsenihObaveza[k]->_datumIzvrsenja->_dan, *_listaIzvrsenihObaveza[k]->_datumIzvrsenja->_mjesec, *_listaIzvrsenihObaveza[k]->_datumIzvrsenja->_godina);
- return prosjek;
- }
- else
- return _konacnaOcjena;
- }
- void Ispis() {
- cout<< "Predmet: " << _nazivPredmeta << endl;
- cout << "Datum polaganja: ";
- _datumPolaganja.Ispis();
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++)
- {
- cout << "Obaveza ->" << *_listaIzvrsenihObaveza[i]->_vrstaObaveze << " ocjena : " << _listaIzvrsenihObaveza[i]->_ocjena << endl;
- }
- cout << "Konacna ocjena: " << _konacnaOcjena << endl;
- }
- };
- int PretragaRekurzivno(ObavezeNaPredmetu **predmet, int max, int &brojac)
- {
- if (max == 0)
- return brojac;
- if (predmet[max-1]->_ocjena < 6)
- {
- brojac++;
- return PretragaRekurzivno(predmet, max - 1, brojac);
- }
- return PretragaRekurzivno(predmet, max - 1, brojac);
- }
- /*void UpisiUBinarniFajl(PolozeniPredmet predmet) {
- char nazivFajla[20];
- strcpy_s(nazivFajla, 20, predmet._nazivPredmeta);
- strcat_s(nazivFajla, ".bin");
- ofstream ObjekatUnos(nazivFajla, ios::out | ios::binary);
- ObjekatUnos.write((char*)(&predmet._nazivPredmeta), sizeof(predmet._nazivPredmeta));
- cout << "Objekat upisan u " << nazivFajla << endl;
- ObjekatUnos.close();
- }
- /*void UcitajIzBinarnogFajla(PolozeniPredmet predmet, char*predmetch)
- {
- //ne kontam ove parametre
- }*/
- void main() {
- Datum datumSeminarski1, datumSeminarski2, datumParcijalni1, datumParcijalni2;
- datumSeminarski1.Unos(10, 6, 2016);
- datumSeminarski2.Unos(18, 6, 2016);
- datumParcijalni1.Unos(22, 3, 2016);
- datumParcijalni2.Unos(22, 6, 2016);
- //polozeni predmet
- PolozeniPredmet prII, prII_FromFile;
- prII.Unos("Programiranje II");
- if (prII.DodajIzvrsenuObavezu(Parcijalni1, datumParcijalni1, 6, "uslovno polozen"))
- cout << "Parcijalni 1...dodan" << endl;
- if (prII.DodajIzvrsenuObavezu(Parcijalni2, datumParcijalni2, 5, "previse gresaka"))
- cout << "Parcijalni 2...dodan" << endl;
- if (prII.DodajIzvrsenuObavezu(Seminarski, datumSeminarski1, 8, "implementirani svi algoritmi"))
- cout << "Seminarski1...dodan" << endl;
- if (prII.DodajIzvrsenuObavezu(Seminarski, datumSeminarski2, 6, "rad slican kao kod studenta IB150388"))
- cout << "Seminarski2...dodan" << endl;
- cout << "Konacna ocjena iz predmeta PRII je: " << prII.FormirajKonacnuOcjenu() << endl;
- datumParcijalni2.Unos(22, 7, 2016);
- if (prII.DodajIzvrsenuObavezu(Parcijalni2, datumParcijalni2, 6, ""))
- cout << "Parcijalni 2...dodan" << endl;
- cout << "Konacna ocjena iz predmeta PRII je: " << prII.FormirajKonacnuOcjenu() << endl;
- //rekurzija
- int brojac = 0;
- cout << "Broj negativnih ocjena je: " << PretragaRekurzivno(prII._listaIzvrsenihObaveza, prII._trenutnoIzvrsenihObaveza, brojac) << endl;
- //manipulacija fajlovima
- //UpisiUBinarniFajl(prII);
- prII.Ispis();
- //UcitajIzBinarnogFajla(prII_FromFile, "Programiranje II_6");
- //prII_FromFile.Ispis();
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement