Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<string>
- #include<regex>
- #include<algorithm>
- #include<exception>
- using namespace std;
- char *crt = "\n-----------------------------------------------\n";
- char *upisiString(char *tekst){
- int vel = strlen(tekst) + 1;
- char *temp = new char[vel];
- strcpy_s(temp, vel, tekst);
- return temp;
- }
- class Izuzetak :public exception {
- string _datum;
- int _linija;
- public:
- Izuzetak(char *poruka, int linija, string datum) : exception(poruka){
- _linija = linija;
- _datum = datum;
- }
- friend ostream& operator<<(ostream&, const Izuzetak&);
- };
- ostream& operator<<(ostream& ispis, const Izuzetak& obj){
- ispis << "Greska: " << obj.what() << ", na " << obj._linija << ". liniji koda, datuma: " << obj._datum << endl;
- return ispis;
- }
- template<class T1, class T2, int max>
- class Kolekcija {
- T1 * _elementi1[max];
- T2 * _elementi2[max];
- int * _trenutno;
- public:
- Kolekcija() {
- for (int i = 0; i < max; i++) {
- _elementi1[i] = nullptr;
- _elementi2[i] = nullptr;
- }
- _trenutno = new int(0);
- }
- Kolekcija(const Kolekcija& obj){
- _trenutno = new int(*obj._trenutno);
- for (int i = 0; i < *obj._trenutno; i++)
- {
- _elementi1[i] = new T1(*obj._elementi1[i]);
- _elementi2[i] = new T2(*obj._elementi2[i]);
- }
- }
- ~Kolekcija(){
- for (int i = 0; i < max; i++) {
- delete _elementi1[i]; _elementi1[i] = nullptr;
- delete _elementi2[i]; _elementi2[i] = nullptr;
- }
- delete _trenutno; _trenutno = nullptr;
- }
- Kolekcija &operator=(const Kolekcija& obj){
- if (this != &obj){
- for (int i = 0; i < *_trenutno; i++) {
- delete _elementi1[i];
- delete _elementi2[i];
- }
- delete _trenutno;
- _trenutno = new int(*obj._trenutno);
- for (int i = 0; i < *obj._trenutno; i++)
- {
- _elementi1[i] = new T1(*obj._elementi1[i]);
- _elementi2[i] = new T2(*obj._elementi2[i]);
- }
- }
- return *this;
- }
- void AddElement(T1 el1, T2 el2){
- if (*_trenutno == max){
- throw Izuzetak("Prekoracili ste velicinu niza!",__LINE__,__DATE__);
- }
- _elementi1[*_trenutno] = new T1(el1);
- _elementi2[*_trenutno] = new T2(el2);
- (*_trenutno)++;
- }
- T1 GetElement1(int lokacija) { return *_elementi1[lokacija]; }
- T2 GetElement2(int lokacija) { return *_elementi2[lokacija]; }
- int GetTrenutno() { return *_trenutno; }
- int GetMax(){ return max; }
- friend ostream& operator<< <>(ostream&, Kolekcija&);
- };
- template<class T1, class T2, int max>
- ostream& operator<< <>(ostream& ispis, Kolekcija<T1,T2,max>& k){
- for (int i = 0; i < *k._trenutno; i++)
- {
- ispis << *k._elementi1[i] << " " << *k._elementi2[i] << endl;
- }
- return ispis;
- }
- class Datum {
- int *_dan, *_mjesec, *_godina;
- public:
- Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- }
- Datum(const Datum& obj){
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- }
- Datum &operator=(const Datum& obj){
- if (this != &obj){
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- }
- return *this;
- }
- ~Datum() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- friend bool operator==(const Datum&, const Datum&);
- friend bool operator<(const Datum&, const Datum&);
- friend bool operator>(const Datum&, const Datum&);
- friend ostream& operator<< (ostream &COUT, Datum &obj) {
- COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
- return COUT;
- }
- };
- bool operator==(const Datum& d1, const Datum& d2){
- return (*d1._dan == *d2._dan&&*d1._mjesec == *d2._mjesec&&*d1._godina == *d2._godina);
- }
- bool operator<(const Datum& d1, const Datum& d2){
- if (*d1._godina < *d2._godina)
- return true;
- else if (*d1._godina == *d2._godina && *d1._mjesec < *d2._mjesec)
- return true;
- else if (*d1._godina == *d2._godina&&*d1._mjesec == *d2._mjesec&&*d1._dan < *d2._dan)
- return true;
- return false;
- }
- bool operator>(const Datum& d1, const Datum& d2){
- if (*d1._godina > *d2._godina)
- return true;
- else if (*d1._godina == *d2._godina && *d1._mjesec > *d2._mjesec)
- return true;
- else if (*d1._godina == *d2._godina&&*d1._mjesec == *d2._mjesec&&*d1._dan > *d2._dan)
- return true;
- return false;
- }
- enum ListaKurseva { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
- char *listaKurseva_txt[] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals", "MasteringSQL", "WindowsSecurity" };
- class Kurs {
- ListaKurseva _kurs;
- Datum * _pocetak;
- Datum * _kraj;
- char * _imePredavaca;
- public:
- Kurs(ListaKurseva kurs, char* imePredavaca, Datum pocetak, Datum kraj){
- _kurs = kurs;
- _imePredavaca = upisiString(imePredavaca);
- _pocetak = new Datum(pocetak);
- _kraj = new Datum(kraj);
- }
- ~Kurs(){
- delete _pocetak; _pocetak = nullptr;
- delete _kraj; _kraj = nullptr;
- delete[]_imePredavaca; _imePredavaca = nullptr;
- }
- Kurs(const Kurs& obj){
- _kurs = obj._kurs;
- _imePredavaca = upisiString(obj._imePredavaca);
- _pocetak = new Datum(*obj._pocetak);
- _kraj = new Datum(*obj._kraj);
- }
- Kurs &operator=(const Kurs& obj){
- if (this != &obj){
- delete _pocetak;
- delete _kraj;
- delete[]_imePredavaca;
- _kurs = obj._kurs;
- _imePredavaca = upisiString(obj._imePredavaca);
- _pocetak = new Datum(*obj._pocetak);
- _kraj = new Datum(*obj._kraj);
- }
- return *this;
- }
- Datum GetPocetak(){ return *_pocetak; }
- Datum GetKraj(){ return *_kraj; }
- bool operator< (const Kurs &obj){
- return (*_pocetak < *obj._pocetak);
- }
- friend bool operator==(const Kurs&, const Kurs&);
- friend ostream& operator<<(ostream&, const Kurs&);
- };
- ostream& operator<<(ostream& ispis, const Kurs& k){
- ispis << "Kurs: " << listaKurseva_txt[k._kurs] << endl;
- ispis << "Ime predavaca: " << k._imePredavaca << endl;
- ispis << "Pocetak kursa: " << *k._pocetak << endl;
- ispis << "Zavrsetak kursa: " << *k._kraj << endl;
- return ispis;
- }
- bool operator==(const Kurs& k1, const Kurs& k2){
- return (k1._kurs == k2._kurs && *k1._pocetak == *k2._pocetak && *k1._kraj == *k2._kraj && strcmp(k1._imePredavaca, k2._imePredavaca) == 0);
- }
- class Polaznik {
- static int ID;
- const int _polaznikID; //svakom novom studentu automatski dodijeliti novi ID (autoincrement)
- char * _imePrezime;
- vector<Kurs> _pohadjaniKursevi;
- public:
- Polaznik(char * imePrezime) :_polaznikID(ID++) {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- }
- Polaznik(const Polaznik& obj) : _polaznikID(obj._polaznikID){
- _imePrezime = upisiString(obj._imePrezime);
- _pohadjaniKursevi = obj._pohadjaniKursevi;
- }
- Polaznik &operator=(const Polaznik& obj){
- if (this != &obj){
- delete[] _imePrezime;
- _imePrezime = upisiString(obj._imePrezime);
- _pohadjaniKursevi = obj._pohadjaniKursevi;
- int(_polaznikID) = obj._polaznikID;
- }
- return *this;
- }
- ~Polaznik() { delete[] _imePrezime; _imePrezime = nullptr; }
- bool AddKurs(Kurs kurs){
- vector<Kurs>::iterator it = _pohadjaniKursevi.begin();
- for (it; it < _pohadjaniKursevi.end(); it++)
- {
- if (*it == kurs)
- //throw Izuzetak("Korisnik je vec pohadjao taj kurs!", __LINE__, __DATE__);
- return false;
- }
- _pohadjaniKursevi.push_back(kurs);
- sort(_pohadjaniKursevi.begin(), _pohadjaniKursevi.end());
- return true;
- }
- bool RemoveKurs(Kurs kurs){
- vector<Kurs>::iterator it = _pohadjaniKursevi.begin();
- for (it; it < _pohadjaniKursevi.end(); it++)
- {
- if (*it == kurs)
- _pohadjaniKursevi.erase(it);
- return true;
- }
- throw Izuzetak("Ne postoji odabrani kurs!", __LINE__, __DATE__);
- return false;
- }
- /*bool operator== (const Polaznik &obj)
- {
- int i = 0;
- if (strcmp(_imePrezime, obj._imePrezime) == 0)
- {
- for (vector<Kurs>::iterator it = _pohadjaniKursevi.begin(); it != _pohadjaniKursevi.end(); it++)
- {
- if (*it == obj._pohadjaniKursevi[i])
- return true;
- i++;
- }
- }
- return false;
- }*/
- bool operator ==(const Polaznik & a)
- {
- if (strcmp(_imePrezime, a._imePrezime) == 0)
- {
- int brojac = 0;
- for (int i = 0; i<_pohadjaniKursevi.size(); i++)
- {
- if (_pohadjaniKursevi[i] == a._pohadjaniKursevi[i])
- brojac++;
- }
- if (brojac == _pohadjaniKursevi.size())
- return true;
- }
- return false;
- }
- friend ostream& operator<<(ostream&, Polaznik&);
- };
- int Polaznik::ID = 1;
- ostream& operator<<(ostream& ispis, Polaznik& p){
- ispis << p._imePrezime << " sa ID brojem: " << p.ID << endl;
- ispis << "Pohadjani kursevi: ";
- ostream_iterator<Kurs> it(ispis,"\n");
- copy(p._pohadjaniKursevi.begin(), p._pohadjaniKursevi.end(), it);
- return ispis;
- }
- class SkillsCentar {
- string _nazivCentra;
- vector<Kurs> _kursevi;//kursevi koje nudi odredjeni centar
- Kolekcija<Kurs *, Polaznik*, 150> _aplikanti;
- public:
- SkillsCentar(string naziv) { _nazivCentra = naziv; }
- SkillsCentar(const SkillsCentar & obj) :_kursevi(obj._kursevi), _aplikanti(obj._aplikanti) {
- _nazivCentra = obj._nazivCentra;
- }
- SkillsCentar& operator=(const SkillsCentar& obj){
- if (this != &obj){
- _nazivCentra = obj._nazivCentra;
- _kursevi = obj._kursevi;
- _aplikanti = obj._aplikanti;
- }
- return *this;
- }
- bool ProvjeriKoliziju(Kurs &kurs){
- vector<Kurs>::iterator it = _kursevi.begin();
- for (it; it != _kursevi.end(); it++)
- {
- if (it->GetPocetak() < kurs.GetPocetak() && it->GetKraj() > kurs.GetKraj())
- //throw Izuzetak("Kolizija datuma kursa!", __LINE__, __DATE__);
- return false;
- }
- return true;
- }
- void AddKurs(Kurs &kurs){
- vector<Kurs>::iterator it = _kursevi.begin();
- for (it; it != _kursevi.end(); it++)
- {
- if (*it==kurs)
- //throw Izuzetak("Nemoguce dodavanje 2 ista kursa u centar!", __LINE__, __DATE__);
- return;
- }
- _kursevi.push_back(kurs);
- cout << "Kurs dodan!" << endl;
- }
- void AddAplikaciju(Kurs& kurs,Polaznik& polaznik){
- vector<Kurs>::iterator it = _kursevi.begin();
- for (it; it != _kursevi.end(); it++)
- {
- if (*it == kurs)
- _aplikanti.AddElement(new Kurs(kurs), new Polaznik(polaznik));
- }
- cout << "Aplikacija dodana!" << endl;
- }
- friend ostream &operator<< (ostream &c, SkillsCentar &obj)
- {
- c << "Naziv centra: " << obj._nazivCentra << "\nAplikanti:\n";
- for (int i = 0; i < obj._aplikanti.GetTrenutno(); i++)
- {
- c << *obj._aplikanti.GetElement1(i) << endl;
- c << *obj._aplikanti.GetElement2(i) << endl;
- }
- c << "\nKursevi:\n";
- ostream_iterator<Kurs> it(c, "\n");
- copy(obj._kursevi.begin(), obj._kursevi.end(), it);
- return c;
- }
- };
- int main()
- {
- #pragma region TestiranjeDatuma
- Datum danas(26, 11, 2015);
- Datum sutra(danas);
- Datum prekosutra;
- prekosutra = danas;
- cout << danas << endl << sutra << endl << prekosutra << crt;
- #pragma endregion
- #pragma region TestiranjeKolekcije
- Kolekcija<int, int, 10> kolekcija1;
- for (size_t i = 0; i < kolekcija1.GetMax(); i++)
- kolekcija1.AddElement(i, i + 2);
- cout << kolekcija1.GetElement1(0) << " " << kolekcija1.GetElement2(0) << endl;
- cout << kolekcija1 << endl;
- Kolekcija<int, int, 10> kolekcija2;
- kolekcija2 = kolekcija1;
- cout << kolekcija2 << crt;
- if (kolekcija1.GetTrenutno() == kolekcija2.GetTrenutno())
- cout << "ISTI BROJ ELEMENATA" << endl;
- Kolekcija<int, int, 10> kolekcija3(kolekcija2);
- cout << kolekcija3 << crt;
- #pragma endregion
- #pragma region TestiranjeKursa
- Kurs sef(SoftwareEngeneeringFundamentals, "Jasmin Azemovic", Datum(28, 1, 2016), Datum(15, 2, 2016));
- cout << sef << crt;
- Kurs msql(MasteringSQL, "Adel Handzic", Datum(28, 2, 2016), Datum(15, 3, 2016));
- //sef = msql;
- if (sef == msql)//kursevi su isti ako posjeduju identicne vrijednosti svih atributa
- cout << "ISTI SU KURSEVI" << crt;
- Kurs msql2(msql);
- cout << msql2 << crt;
- #pragma endregion
- #pragma region TestiranjePolaznika
- Polaznik denis("Denis Music");
- Polaznik denis2("Denis2 Music2");
- try{
- if (denis.AddKurs(sef)) //<<<< NAKON DODAVANJA SVAKOG NOVOG KURSA IZVRSITI NJIHOVO SORTIRANJE - NACIN SORTIRANJA PO VASEM IZBORU
- cout << "Polazniku " << denis << " uspjesno dodat kurs " << sef << crt;
- if (denis.AddKurs(msql))
- cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << crt;
- if (denis.AddKurs(msql))//<<<< NIJE DOZVOLJENO DODATI IDENTICNE KURSEVE, PRILIKOM PROVJERE KORISTITI ITERATOR
- cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << crt;
- if (denis.RemoveKurs(msql))
- cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << msql << crt;
- if (denis.RemoveKurs(sef))
- cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << sef << crt;
- cout << denis2 << crt;//<<<<<KORISTITI OSTREAM_ITERATOR
- denis2 = denis;
- if (denis == denis2)//polaznici su isti ako imaju isto ime i ako su pohadjali iste kurseve
- cout << "ISTI SU" << crt;
- }
- catch (Izuzetak & err) {
- cout << err << endl;
- }
- #pragma endregion
- #pragma region TestiranjeCentra
- try{
- SkillsCentar mostar("Skills Center Mostar");
- if (mostar.ProvjeriKoliziju(sef))//<<<JEDAN KURS NE SMIJE POCETI DOK DRUGI TRAJE TJ. VRIJEME ODRZAVANJA KURSA SE NE SMIJE POKLAPATI
- mostar.AddKurs(sef);
- if (mostar.ProvjeriKoliziju(msql))
- mostar.AddKurs(msql);
- if (mostar.ProvjeriKoliziju(msql2))
- mostar.AddKurs(msql2);//<<<< ONEMOGUCITI DODAVANJE IDENTICNIH KURSEVA
- mostar.AddAplikaciju(sef, denis);//<<< ONEMOGUCITI APLICIRANJE ZA KURSEVE KOJI NISU REGISTROVANI U CENTRU
- mostar.AddAplikaciju(msql, denis);
- mostar.AddAplikaciju(msql, denis);//<<< ONEMOGUCITI APLICIRANJE ZA ISTI KURS
- //mostar.DodajUspjesnoOkoncanKurs(1, sef);//BROJ 1 OZNACAVA id STUDENTA. FUNKCIJA JE ZADUZENA DA STUDENTU DODA KURS KOJI JE POSLAT KAO PARAMETAR. PREDUSLOV ZA DODAVANJE JE DA JE STUDENT PRETHODNO APLICIRAO ZA TAJ KURS
- //vector<Polaznik> listaPolaznika = mostar.GetPolazniciByPredavac("Jasmin Azemovic");//VRACA INFORMACIJE O POLAZNICIMA KOJI SU KOD ODREDJENOG PREDAVACA USPJESNO OKONCALI KURS
- //if (mostar.RemoveKurs(sef))//ONEMOGUCITI UKLANJANJE KURSA KOJI SU VEC PRIJAVILI NEKI OD POLAZNIKA
- //cout << "Kurs " << sef << " uspjesno uklonjen iz cetra " << mostar << endl;
- SkillsCentar sarajevo = mostar;
- cout << sarajevo << crt;
- }
- catch (Izuzetak & err) {
- cout << err << endl;
- }
- #pragma endregion
- system("pause>0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement