Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <exception>
- #include <string>
- using namespace std;
- int brojac = 1;
- template<class T1, class T2, int max>
- class Kolekcija{
- T1 * _elementi1[max];
- T2 * _elementi2[max];
- int _trenutnoElemenata;
- public:
- Kolekcija()
- {
- for (size_t i = 0; i < max; i++)
- {
- _elementi1[i] = NULL;
- _elementi2[i] = NULL;
- }
- _trenutnoElemenata = 0;
- }
- Kolekcija(const Kolekcija& original)
- {
- if (this != &original)
- {
- for (size_t i = 0; i < max; i++)
- {
- _elementi1[i] = NULL;
- _elementi2[i] = NULL;
- }
- _trenutnoElemenata = original._trenutnoElemenata;
- for (size_t i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi1[i] = new T1(*original._elementi1[i]);
- _elementi2[i] = new T2(*original._elementi2[i]);
- }
- }
- return;
- }
- ~Kolekcija()
- {
- for (size_t i = 0; i < max; i++)
- {
- delete _elementi1[i];
- delete _elementi2[i];
- _elementi1[i] = NULL;
- _elementi2[i] = NULL;
- }
- }
- Kolekcija<T1, T2, max> operator= (const Kolekcija<T1, T2, max>& obj)
- {
- if (this != &obj)
- {
- for (size_t i = 0; i < max; i++)
- {
- delete _elementi1[i];
- delete _elementi2[i];
- _elementi1[i] = NULL;
- _elementi2[i] = NULL;
- }
- _trenutnoElemenata = obj._trenutnoElemenata;
- for (size_t i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi1[i] = new T1(*obj._elementi1[i]);
- _elementi2[i] = new T2(*obj._elementi2[i]);
- }
- return *this;
- }
- return *this;
- }
- friend ostream& operator<< <>(ostream& COUT, Kolekcija& obj);
- bool AddElement(T1 e1, T2 e2)
- {
- if (_trenutnoElemenata == max)
- return false;
- for (size_t i = 0; i < _trenutnoElemenata; i++)
- {
- if (*_elementi1[i] == e1 && *_elementi2[i] == e2)
- return false;
- }
- _elementi1[_trenutnoElemenata] = new T1(e1);
- _elementi2[_trenutnoElemenata] = new T2(e2);
- _trenutnoElemenata++;
- return true;
- }
- bool RemoveElement(T1 e1)
- {
- if (_trenutnoElemenata == 0)
- return false;
- for (size_t i = 0; i < _trenutnoElemenata; i++)
- {
- if (*_elementi1[i] == e1)
- {
- for (size_t j = i; j < _trenutnoElemenata - 1; j++)
- {
- delete _elementi1[j];
- delete _elementi2[j];
- _elementi1[j] = new T1(*_elementi1[j + 1]);
- _elementi2[j] = new T2(*_elementi2[j + 1]);
- }
- _trenutnoElemenata--;
- return true;
- }
- }
- return false;
- }
- bool PopFront()
- {
- if (_trenutnoElemenata == 0)
- {
- throw exception("Kolekcija je prazna");
- return false;
- }
- for (size_t i = 0; i < _trenutnoElemenata - 1; i++)
- {
- delete _elementi1[i];
- delete _elementi2[i];
- _elementi1[i] = new T1(*_elementi1[i + 1]);
- _elementi2[i] = new T2(*_elementi2[i + 1]);
- }
- _trenutnoElemenata--;
- return true;
- }
- int GetTrenutnoElemenata(){ return _trenutnoElemenata; }
- T1 GetElement1(int lokacija){ return *_elementi1[lokacija]; }
- T2 GetElement2(int lokacija){ return *_elementi2[lokacija]; }
- };
- template<class T1, class T2, int max>
- ostream& operator<< (ostream& COUT, Kolekcija<T1, T2, max>& obj)
- {
- for (size_t i = 0; i <obj._trenutnoElemenata ; i++)
- {
- COUT << *obj._elementi1[i] << " - " << *obj._elementi2[i] << endl;
- }
- return COUT;
- }
- class Datum{
- int *_dan, *_mjesec, *_godina;
- public:
- Datum(int dan = 1, int mjesec = 1, int godina = 2016)
- {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- }
- Datum(const Datum& original)
- {
- if (this != &original)
- {
- _dan = new int(*original._dan);
- _mjesec = new int(*original._mjesec);
- _godina = new int(*original._godina);
- }
- return;
- }
- ~Datum()
- {
- delete _dan;
- delete _mjesec;
- delete _godina;
- _dan = NULL;
- _mjesec = NULL;
- _godina = NULL;
- }
- Datum operator= (const Datum& obj)
- {
- if (this != &obj)
- {
- delete _dan;
- delete _mjesec;
- delete _godina;
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- return *this;
- }
- return *this;
- }
- friend ostream& operator<<(ostream& COUT, Datum& obj);
- };
- ostream& operator<<(ostream& COUT, Datum& obj)
- {
- COUT << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina << endl;
- return COUT;
- }
- class PolozeniPredmet{
- char * _nazivPredmeta;
- char * _imePrezimeNastavnika;
- Datum _datumPolaganja;
- int _ocjena;
- public:
- PolozeniPredmet(char* nazivPredmeta = "Predmet", char* imePrezimeNastavnika = "Nastavnik", Datum datumPologanja = Datum(), int ocjena = 6)
- :_datumPolaganja(datumPologanja)
- {
- int size = strlen(nazivPredmeta) + 1;
- _nazivPredmeta = new char[size];
- strcpy_s(_nazivPredmeta, size, nazivPredmeta);
- size = strlen(imePrezimeNastavnika) + 1;
- _imePrezimeNastavnika = new char[size];
- strcpy_s(_imePrezimeNastavnika, size, imePrezimeNastavnika);
- _ocjena = ocjena;
- }
- PolozeniPredmet(const PolozeniPredmet& original) :_datumPolaganja(original._datumPolaganja)
- {
- if (this != &original)
- {
- int size = strlen(original._nazivPredmeta) + 1;
- _nazivPredmeta = new char[size];
- strcpy_s(_nazivPredmeta, size, original._nazivPredmeta);
- size = strlen(original._imePrezimeNastavnika) + 1;
- _imePrezimeNastavnika = new char[size];
- strcpy_s(_imePrezimeNastavnika, size, original._imePrezimeNastavnika);
- _ocjena = original._ocjena;
- }
- return;
- }
- ~PolozeniPredmet()
- {
- delete[] _nazivPredmeta;
- delete[] _imePrezimeNastavnika;
- _nazivPredmeta = NULL;
- _imePrezimeNastavnika = NULL;
- }
- PolozeniPredmet operator= (const PolozeniPredmet& obj)
- {
- if (this != &obj)
- {
- delete[] _nazivPredmeta;
- delete[] _imePrezimeNastavnika;
- int size = strlen(obj._nazivPredmeta) + 1;
- _nazivPredmeta = new char[size];
- strcpy_s(_nazivPredmeta, size, obj._nazivPredmeta);
- size = strlen(obj._imePrezimeNastavnika) + 1;
- _imePrezimeNastavnika = new char[size];
- strcpy_s(_imePrezimeNastavnika, size, obj._imePrezimeNastavnika);
- _ocjena = obj._ocjena;
- return *this;
- }
- return *this;
- }
- friend ostream& operator<< (ostream& COUT, PolozeniPredmet& obj);
- char* GetNazivPredmeta(){ return _nazivPredmeta; }
- char* GetImePrezimeNastavnika(){ return _imePrezimeNastavnika; }
- Datum GetDatumPolaganja(){ return _datumPolaganja; }
- bool operator== (PolozeniPredmet& obj)
- {
- if (strcmp(_nazivPredmeta, obj._nazivPredmeta) == 0)
- return true;
- return false;
- }
- int GetOcjena(){ return _ocjena; }
- };
- ostream& operator<< (ostream& COUT, PolozeniPredmet& obj)
- {
- COUT << obj._nazivPredmeta << endl;
- COUT << obj._imePrezimeNastavnika << endl;
- COUT << obj._datumPolaganja;
- COUT << obj._ocjena << endl;
- return COUT;
- }
- class Student{
- const int _brojIndeksa;
- char * _imePrezime;
- //planom i programom je definisano da je student, tokom studija, duzan poloziti 40 predmeta
- Kolekcija<PolozeniPredmet, string, 40> _polozeniPredmeti;//string se odnosi na napomenu
- public:
- Student(char* imePrezime = "Ime i prezime") :_brojIndeksa(brojac++)
- {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- }
- Student(class Student& original) :_brojIndeksa(original._brojIndeksa)
- {
- if (this != &original)
- {
- int size = strlen(original._imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, original._imePrezime);
- _polozeniPredmeti = original._polozeniPredmeti;
- }
- return;
- }
- ~Student()
- {
- delete[] _imePrezime;
- _imePrezime = NULL;
- }
- Student operator= (const Student& obj)
- {
- if (this != &obj)
- {
- delete[] _imePrezime;
- int size = strlen(obj._imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, obj._imePrezime);
- _polozeniPredmeti = obj._polozeniPredmeti;
- return *this;
- }
- return *this;
- }
- friend ostream& operator<< (ostream& COUT, Student& obj);
- bool AddPolozeniIspit(PolozeniPredmet& predmet, string napomena = " ")
- {
- int x = 0; //cuva podatak o broju predmeta kod jednog profesora
- if (strlen(napomena.c_str()) > 100)
- {
- throw exception("Napomena je preduga.");
- return false;
- }
- for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
- {
- if (strcmp(_polozeniPredmeti.GetElement1(i).GetNazivPredmeta(), predmet.GetNazivPredmeta()) == 0)
- {
- throw exception("Predmet vec postoji u nizu.");
- return false;
- }
- }
- for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
- {
- if (strcmp(_polozeniPredmeti.GetElement1(i).GetImePrezimeNastavnika(), predmet.GetImePrezimeNastavnika()) == 0)
- x++;
- }
- if (x >= 3)
- {
- throw exception("Kod predmetnog profesora ima vec 3 ili vise polozenih predmeta.");
- return false;
- }
- return _polozeniPredmeti.AddElement(predmet, napomena);
- }
- bool RemovePolozeniPredmet(char* nazivPredmeta)
- {
- for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
- {
- if (strcmp(_polozeniPredmeti.GetElement1(i).GetNazivPredmeta(), nazivPredmeta) == 0)
- return _polozeniPredmeti.RemoveElement(_polozeniPredmeti.GetElement1(i));
- }
- }
- double GetProsjekByNastavnik(char* imeNastavnika)
- {
- double suma = 0;
- int n = 0; //broj polozenih predmeta kod istog profesora
- for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
- {
- if (strcmp(_polozeniPredmeti.GetElement1(i).GetImePrezimeNastavnika(), imeNastavnika) == 0)
- {
- suma += _polozeniPredmeti.GetElement1(i).GetOcjena();
- n++;
- }
- }
- return suma / n;
- }
- PolozeniPredmet* operator()(char* napomena, int &broj)
- {
- PolozeniPredmet * pok = new PolozeniPredmet[40];
- for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
- {
- if (strcmp(_polozeniPredmeti.GetElement2(i).c_str(), napomena) == 0)
- {
- pok[broj] = _polozeniPredmeti.GetElement1(i);
- broj++;
- }
- }
- return pok;
- }
- };
- ostream& operator<< (ostream& COUT, Student& obj)
- {
- COUT << obj._brojIndeksa << endl;
- COUT << obj._imePrezime << endl;
- COUT << obj._polozeniPredmeti << endl;
- return COUT;
- }
- int main()
- {
- Datum datum1(20, 2, 2016);
- Datum datum2(25, 2, 2016);
- Datum datum3(27, 2, 2016);
- Datum datum4(28, 2, 2016);
- PolozeniPredmet p1("Programiranje1", "Denis", datum1, 10);
- PolozeniPredmet p2("Baze podataka", "Jasmin", datum2, 10);
- PolozeniPredmet p3("Inzinjerska matematika", "Nina", datum3, 10);
- PolozeniPredmet p4("Racunarske mreze", "Zanin", datum4, 10);
- PolozeniPredmet p5("Programiranje2", "Denis", datum2, 6);
- PolozeniPredmet p6("Programiranje3", "Denis", datum3, 9);
- Student s1("Sanjin");
- Student s2("Amir");
- Student s3("Tarik");
- Student s4("Muhamed");
- try
- {
- //s1.AddPolozeniIspit(p1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
- s1.AddPolozeniIspit(p1, "Nema napomena");
- //s1.AddPolozeniIspit(p1, "Nema napomena");
- //cout << s1 << endl;
- //s1.RemovePolozeniPredmet("Programiranje");
- //cout << s1 << endl;
- s1.AddPolozeniIspit(p5, "prepisivao");
- s1.AddPolozeniIspit(p6, "prepisivao");
- cout << s1 << endl;
- cout << "Prosjek: " << s1.GetProsjekByNastavnik("Denis") << endl;;
- cout << "--------------------" << endl;
- int broj = 0;
- PolozeniPredmet * pokazivac = new PolozeniPredmet[40];
- pokazivac = s1("prepisivao", broj);
- for (size_t i = 0; i < broj; i++)
- {
- cout << pokazivac[i] << endl;
- }
- }
- catch (exception & error)
- {
- cout << error.what() << endl;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement