Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- char * AlocirajNizKaraktera(const char * sadrzaj) {
- if (sadrzaj == nullptr)
- return nullptr;
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- template<class T, int max>
- class Kolekcija
- {
- T* _elementi[max];
- int _trenutnoElemenata;
- public:
- //Implementirati potrebne funkcije za rad sa kolekcijom.
- Kolekcija() {
- _trenutnoElemenata = 0;
- for (int i = 0; i < max; i++) {
- _elementi[i] = nullptr;
- }
- }
- Kolekcija(const Kolekcija& k) {
- _trenutnoElemenata = k._trenutnoElemenata;
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi[i] = new T(*k._elementi[i]);
- }
- }
- ~Kolekcija() {
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- delete _elementi[i];
- _elementi[i] = nullptr;
- }
- }
- bool operator= (const Kolekcija& k) {
- if (this != &k) {
- for (int i = 0; i < k._trenutnoElemenata; i++)
- {
- delete _elementi[i];
- _elementi[i] = nullptr;
- }
- _trenutnoElemenata = k._trenutnoElemenata;
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi[i] = new T(*k._elementi[i]);
- }
- return true;
- }
- return false;
- }
- bool AddElement(T broj) {
- if (_trenutnoElemenata == max)
- return false;
- _elementi[_trenutnoElemenata] = new T(broj);
- _trenutnoElemenata++;
- //*_elementi[_trenutnoElemenata++] = broj;
- return true;
- }
- friend ostream& operator<< <>(ostream& cout, const Kolekcija<T, max>& k);
- int GetTrenutno()const {
- return _trenutnoElemenata;
- }
- T** GetNiz() { return _elementi; }
- T& GetElement(int lokacija) {
- return *_elementi[lokacija];
- }
- };
- template<class T, int max>
- ostream& operator<< <>(ostream& cout, const Kolekcija<T, max>& k) {
- for (int i = 0; i < k._trenutnoElemenata; i++) {
- cout << k._elementi[i] << endl;
- }
- return cout;
- }
- class Prisustvo
- {
- char* _brojIndeksa;
- int _brojSati;
- public:
- Prisustvo() {
- _brojIndeksa = nullptr;
- _brojSati = 0;
- }
- Prisustvo(const char* brojIndeksa, int brojSati) : _brojSati(brojSati)
- {
- int size = strlen(brojIndeksa) + 1;
- _brojIndeksa = new char[size];
- strcpy_s(_brojIndeksa, size, brojIndeksa);
- }
- Prisustvo(const Prisustvo& p) :_brojSati(p._brojSati) {
- int size = strlen(p._brojIndeksa) + 1;
- _brojIndeksa = new char[size];
- strcpy_s(_brojIndeksa, size, p._brojIndeksa);
- }
- bool operator= (const Prisustvo& p) {
- if (this != &p) {
- delete[]_brojIndeksa;
- _brojSati = p._brojSati;
- int size = strlen(p._brojIndeksa) + 1;
- _brojIndeksa = new char[size];
- strcpy_s(_brojIndeksa, size, p._brojIndeksa);
- return true;
- }
- return false;
- }
- ~Prisustvo()
- {
- delete[] _brojIndeksa;
- _brojIndeksa = nullptr;
- }
- void operator+=(int povecaj) {
- _brojSati += povecaj;
- }
- void operator+ (int povecaj) {
- _brojSati += povecaj;
- }
- bool operator== (Prisustvo p) {
- if (strcmp(_brojIndeksa, p._brojIndeksa) == 0)
- return true;
- return false;
- }
- bool operator< (Prisustvo p) {
- int brojIndex = atoi(_brojIndeksa);
- int brojIndex1 = atoi(p._brojIndeksa);
- if (brojIndex < brojIndex1)
- return true;
- return false;
- }
- char *GetIndex() {
- return _brojIndeksa;
- }
- friend ostream& operator<< (ostream& cout, Prisustvo& p);
- };
- ostream& operator<<(ostream& cout, Prisustvo& p) {
- cout << "Broj indexa--> " << p._brojIndeksa << " Broj sati--> " << p._brojSati << endl;
- return cout;
- }
- class Nastava
- {
- char _datum[12];
- char _tipNastave; //P ili V
- int _odrzanoSati;
- Prisustvo* _prisutni;
- int _brojStudenata;
- public:
- Nastava() {
- _prisutni = nullptr;
- _brojStudenata = 0;
- _odrzanoSati = 0;
- }
- Nastava(const char* datum, char tip, int odrzanoSati) {
- strcpy_s(_datum, 12, datum);
- _tipNastave = tip;
- _odrzanoSati = odrzanoSati;
- _prisutni = nullptr;
- _brojStudenata = 0;
- }
- Nastava(const Nastava& n) {
- strcpy_s(_datum, 12, n._datum);
- _tipNastave = n._tipNastave;
- _odrzanoSati = n._odrzanoSati;
- _brojStudenata = n._brojStudenata;
- _prisutni = new Prisustvo[_brojStudenata];
- for (int i = 0; i < _brojStudenata; i++)
- {
- _prisutni[i] = n._prisutni[i];
- }
- }
- ~Nastava() {
- delete[]_prisutni;
- _prisutni = nullptr;
- }
- bool operator= (const Nastava& n) {
- if (this != &n) {
- delete[]_prisutni;
- strcpy_s(_datum, 12, n._datum);
- _tipNastave = n._tipNastave;
- _odrzanoSati = n._odrzanoSati;
- _brojStudenata = n._brojStudenata;
- _prisutni = new Prisustvo[_brojStudenata];
- for (int i = 0; i < _brojStudenata; i++)
- {
- _prisutni[i] = n._prisutni[i];
- }
- return true;
- }
- return false;
- }
- void Sortiraj() {
- bool promjena = true;
- while (promjena) {
- promjena = false;
- for (int i = 0; i < _brojStudenata - 1; i++)
- {
- if (_prisutni[i] < _prisutni[i + 1]) {
- Prisustvo temp = _prisutni[i];
- _prisutni[i] = _prisutni[i + 1];
- _prisutni[i + 1] = temp;
- promjena = true;
- }
- }
- }
- }
- bool operator+= (Prisustvo p) {
- for (int i = 0; i < _brojStudenata; i++)
- {
- if (_prisutni[i] == p)
- return false;
- }
- Prisustvo *temp = new Prisustvo[_brojStudenata + 1];
- for (int i = 0; i < _brojStudenata; i++)
- {
- temp[i] = _prisutni[i];
- }
- temp[_brojStudenata++] = p;
- delete[]_prisutni;
- _prisutni = temp;
- Sortiraj();
- return true;
- }
- void operator-= (const char* index) {
- Prisustvo *temp = new Prisustvo[_brojStudenata - 1];
- int j = 0;
- for (int i = 0; i < _brojStudenata; i++)
- {
- if (strcmp(_prisutni[i].GetIndex(), index) != 0) {
- temp[j] = _prisutni[i];
- j++;
- }
- }
- delete[]_prisutni;
- _prisutni = temp;
- _brojStudenata--;
- Sortiraj();
- }
- Prisustvo& operator[] (const char* index) {
- for (int i = 0; i < _brojStudenata; i++)
- {
- if (strcmp(_prisutni[i].GetIndex(), index) == 0)
- return _prisutni[i];
- }
- }
- void operator() (const char* index, int povecaj) {
- for (int i = 0; i < _brojStudenata; i++)
- {
- if (strcmp(_prisutni[i].GetIndex(), index) == 0) {
- _prisutni[i] += povecaj;
- return;
- }
- }
- }
- friend Nastava operator+ (Nastava& l, Nastava& d);
- friend ostream& operator<< (ostream& cout, const Nastava& n);
- int BrojStud() {
- return _brojStudenata;
- }
- char *GetDatum() {
- return _datum;
- }
- char GetTip() {
- return _tipNastave;
- }
- Prisustvo* getniz()
- {
- return _prisutni;
- }
- Prisustvo &GetPrisutni(int lok)
- {
- return _prisutni[lok];
- }
- int GetOdrzanoSati() {
- return _odrzanoSati;
- }
- };
- Nastava operator+ (Nastava& l, Nastava& d) {
- Nastava n;
- if (l._tipNastave != d._tipNastave) {
- cout << "Razlicit tip nastave. " << endl;
- return l;
- }
- n._brojStudenata = l._brojStudenata + d._brojStudenata;
- int j = 0;
- for (int i = 0; i < n._brojStudenata; i++)
- {
- if (i < l._brojStudenata) {
- n._prisutni[i] = l._prisutni[i];
- }
- else {
- n._prisutni[i] = d._prisutni[j];
- j++;
- }
- }
- for (int i = 0; i < n._brojStudenata; i++)
- {
- Prisustvo p = n._prisutni[i];
- for (int j = 0; j < n._brojStudenata; j++)
- {
- if (n._prisutni[j] == p) {
- cout << "GRESKA" << endl;
- return l;
- }
- }
- }
- strcpy_s(n._datum, 12, l._datum);
- n._odrzanoSati = l._odrzanoSati;
- n._tipNastave = l._tipNastave;
- return n;
- }
- ostream& operator<< (ostream& cout, const Nastava& n) {
- cout << "Datum--> " << n._datum << " Broj sati--> " << n._odrzanoSati << " Tip nastave--> " << n._tipNastave << endl;
- for (int i = 0; i < n._brojStudenata; i++)
- {
- cout << n._prisutni[i] << endl;
- }
- return cout;
- }
- class Predmet
- {
- char* _naziv;
- int _godinaStudija;
- Kolekcija<Nastava, 90> _odrzanaNastava;
- public:
- Predmet(const char* naziv, int godinaStudija) : _godinaStudija(godinaStudija)
- {
- _naziv = AlocirajNizKaraktera(naziv);
- }
- Predmet(const Predmet& p) {
- int vel = strlen(p._naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, p._naziv);
- _godinaStudija = p._godinaStudija;
- _odrzanaNastava = p._odrzanaNastava;
- }
- ~Predmet()
- {
- delete[] _naziv;
- _naziv = nullptr;
- }
- bool operator= (const Predmet& p) {
- if (this != &p) {
- delete[]_naziv;
- int vel = strlen(p._naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, p._naziv);
- _godinaStudija = p._godinaStudija;
- _odrzanaNastava = p._odrzanaNastava;
- return true;
- }
- return false;
- }
- void Evidencija(Nastava n) {
- _odrzanaNastava.AddElement(n);
- }
- /*Funkciju koja na osnovu datuma i tipa održane nastave dodaje prisustvo studentu sa proslijeđenim brojem indeksa i brojem sati.
- Voditi računa da broj sati prisustva ne može biti veći od broja sati održane nastave.*/
- void DodajPrisustvo(const char* index, int brojSati, char tip, const char* datum) {
- Prisustvo d(index, brojSati);
- for (int j = 0; j < _odrzanaNastava.GetTrenutno(); j++)
- {
- if (strcmp(_odrzanaNastava.GetNiz()[j]->GetDatum(), datum) == 0 && _odrzanaNastava.GetNiz()[j]->GetTip() == tip)
- {
- _odrzanaNastava.GetElement(j) += d;
- }
- }
- }
- /*Funkciju koja na osnovu datuma i tipa održane nastave uklanja prisustvo studentu sa proslijeđenim brojem indeksa.*/
- /*Funkciju koja na osnovu broja indeksa studenta vraća sve podatke o njegovom prisustvu na nastavi*/
- /*Funkciju koja na osnovu tipa nastave (P ili V) vrši ispis prisustva za sve studente (sumarno) u datom formatu:
- IB140001 30/40 75%, gdje je prva kolona "broj indeksa", druga kolona "broj sati prisustva / ukupan broj sati održane nastave" i
- treca kolona "procenat prisustva studenta na nastavi".*/
- friend ostream& operator<<(ostream&, const Predmet&);
- };
- ostream& operator<<(ostream& cout, const Predmet& p)
- {
- cout << "Predmet: " << p._naziv << endl;
- cout << "Godina studija: " << p._godinaStudija << endl;
- /*for (int i = 0; i < p._odrzanaNastava.GetTrenutno(); i++)
- {
- cout << p._odrzanaNastava.GetElement(i) << endl;
- }*/
- return cout;
- }
- void main()
- {
- Prisustvo p("IB170121", 3);
- Prisustvo p1("IB170321", 4);
- Prisustvo p2("IB170333", 3);
- Nastava n("23.09.1998.", 'V', 10);
- Nastava n1("23.10.1998.", 'P', 11);
- Nastava n2("23.12.1998.", 'V', 12);
- n += p1;
- n += p2;
- n += p;
- //n += p1;
- cout << n << endl;
- cout << "------------" << endl;
- n -= "IB170321";
- cout << n << endl;
- cout << "Podaci operator [] -->> ";
- cout << n["IB170121"] << endl;
- cout << "Uvecanje operator () -->> ";
- p += 10;
- cout << p << endl;
- Predmet pred1("PRIII", 2);
- pred1.Evidencija(n);
- cout << pred1 << endl;
- pred1.DodajPrisustvo("IB170333", 2, 'V', "23.12.1998.");
- cout << pred1 << endl;
- cout << "------------------------------" << endl;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement