Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- enum VrstaObaveze{Seminarski, Parcijalni1, Parcijalni2, Integralni, Prakticni};
- char * niz[] = { "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;
- }
- bool IstiJe(Datum d){
- if (*_dan == *d._dan && *_mjesec == *d._mjesec && *_godina == *d._godina) return true;
- else return false;
- }
- bool StarijiJe(Datum d){
- if (*d._godina > *_godina) return true;
- else if (*d._godina == *_godina){
- if (*d._mjesec > *_mjesec) return true;
- else if (*d._mjesec == *_mjesec){
- if (*d._dan > *_dan) return true;
- }
- }
- return false;
- }
- };
- struct ObavezeNaPredmetu {
- VrstaObaveze *_vrstaObaveze;
- Datum *_datumIzvrsenja;
- int *_ocjena;
- void Unos(VrstaObaveze * vrsta, Datum * datum, int ocjena){
- _vrstaObaveze = new VrstaObaveze(*vrsta);
- _datumIzvrsenja = new Datum;
- _datumIzvrsenja->Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
- _ocjena = new int(ocjena);
- }
- void Ispis(){
- cout << niz[*_vrstaObaveze] << " " << *_ocjena;
- _datumIzvrsenja->Ispis();
- cout << endl;
- }
- void Dealociraj(){
- delete _vrstaObaveze;
- _datumIzvrsenja->Dealociraj();
- delete _datumIzvrsenja;
- delete _ocjena;
- }
- };
- struct PolozeniPredmet{
- Datum _datumpolaganja;
- ObavezeNaPredmetu _listaIzvrsenihObaveza[10];
- int _trenutnoIzvrsenihObaveza;
- int _konacnaOcjena;
- void Unos(Datum * d){
- _trenutnoIzvrsenihObaveza = 0;
- _datumpolaganja.Unos(*d->_dan, *d->_mjesec, *d->_godina);
- _konacnaOcjena = 5;
- }
- bool DodajIzvrsenuObavezu(ObavezeNaPredmetu o){
- /* Funkcija ima zadatak da na osnovu primljenog parametra osigura dodavanje novoizvrsene obaveze na predmetu.
- Potrebno je onemogućiti dodavanje identicnih obaveza, te u zavisnosti od uspješnosti operacije funkcija treba vratiti True ili False.
- Svaka novoizvrsena obaveza ne smije imati stariji datum od prethodno izvrsene. */
- if (_trenutnoIzvrsenihObaveza > 10) return false;
- else {
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++){
- if (_datumpolaganja.IstiJe(*o._datumIzvrsenja) && *_listaIzvrsenihObaveza[i]._ocjena == *o._ocjena && *_listaIzvrsenihObaveza[i]._vrstaObaveze == *o._vrstaObaveze)
- return false;
- }
- if (!_listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza-1]._datumIzvrsenja->StarijiJe(*o._datumIzvrsenja)) return false;
- }
- _listaIzvrsenihObaveza[_trenutnoIzvrsenihObaveza].Unos(o._vrstaObaveze, o._datumIzvrsenja, *o._ocjena);
- _trenutnoIzvrsenihObaveza++;
- return true;
- }
- int FormirajKonacnuOcjenu(Datum datumPredaje){
- /*Funkcija je zaduzena za formiranje konacne ocjene na predmetu.
- Za formiranje konačne ocjene predmeta potrebno je posjedovati položen integralni ili dva parcijalna ispista.
- Ukoliko je ispit položen putem parcijalnih ispita, student takodjer mora imati polozen i prakticni rad koji je predao
- prije datuma oznacenog parametrom datumPredaje. ukoliko svi pomenuti uslovi nisu zadovoljeni, konacna ocjena treba biti
- postavljena na vrijednost 5. Funkcija vraca vrijednost atributa _konacnaocjena */
- int brojacParcijalnih = 0, lokacijaPrakticnog = -1;
- float suma = 0;
- for (int i = 0; i < _trenutnoIzvrsenihObaveza; i++){
- if (*_listaIzvrsenihObaveza[i]._vrstaObaveze == Integralni){
- _konacnaOcjena = *_listaIzvrsenihObaveza[i]._ocjena;
- return _konacnaOcjena;
- }
- // 2 parcijalna + prakticni rad predat poslije datuma datumPredaje
- else if (*_listaIzvrsenihObaveza[i]._vrstaObaveze == Parcijalni1 || *_listaIzvrsenihObaveza[i]._vrstaObaveze == Parcijalni2){
- brojacParcijalnih++;
- suma += *_listaIzvrsenihObaveza[i]._ocjena;
- }
- else if (*_listaIzvrsenihObaveza[i]._vrstaObaveze == Prakticni ){
- lokacijaPrakticnog = i;
- }
- }
- if (lokacijaPrakticnog!=-1 && _listaIzvrsenihObaveza[lokacijaPrakticnog]._datumIzvrsenja->StarijiJe(datumPredaje) && brojacParcijalnih >= 2){
- _konacnaOcjena = suma / brojacParcijalnih;
- return _konacnaOcjena;
- }
- _konacnaOcjena = 5;
- return _konacnaOcjena;
- }
- };
- int Pretraga(PolozeniPredmet * p, int max){
- /* Funkcija ima zadatak da ispise infromacije o svim polozenim predmetima kod kojih je student imao
- najmanje dva seminarska rada, a koja su rađena u septembarskom ispitnom roku. Da bi informacije o polozenom
- predmetu bile ispisane moraju biti ispunjeni svi uslovi neophodni za formiranje konačne ocjene. Nakon ispisa,
- funkcija vraća broj položenih predmeta koji su zadovoljili pomenute kriterije. */
- int brojPolozenih = 0, brojSeminarskih = 0;
- for (int i = 0; i < max; i++){
- for (int j = 0; j < p[i]._trenutnoIzvrsenihObaveza; j++){
- if (*p[i]._listaIzvrsenihObaveza->_vrstaObaveze == Seminarski && *p[i]._listaIzvrsenihObaveza->_datumIzvrsenja->_mjesec == 9)
- {
- brojSeminarskih++;
- }
- if (brojSeminarskih >= 2){
- brojPolozenih++;
- p[i]._datumpolaganja.Ispis();
- p[i]._listaIzvrsenihObaveza[j].Ispis();
- cout <<"Konacna ocjena: " <<p[i]._konacnaOcjena;
- }
- }
- }
- return brojPolozenih;
- }
- int main(){
- // izbjegavati korištenje vlastitog imena i prezimena
- // provjeriti validnost izvršenja svih dostupnih funkcionalnosti
- Datum d;
- d.Unos(10, 4, 2014);
- ObavezeNaPredmetu obaveza;
- VrstaObaveze vrsta = Integralni;
- obaveza.Unos(&vrsta, &d, 9);
- PolozeniPredmet UIT;
- UIT.Unos(&d);
- obaveza.Ispis();
- system("pause > null");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement