Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <iterator>
- #include <exception>
- using namespace std;
- class Izuzetak :public exception {
- string _datum;
- int _linija;
- public:
- Izuzetak(string datum, int linija) {
- _datum = datum;
- _linija = linija;
- }
- friend ostream & operator<<(ostream &c, Izuzetak & i) {
- c << "Linija: " << i._linija << " Datum: " << i._datum << endl;
- return c;
- }
- };
- template<class T1, class T2, int max>
- class Kolekcija {
- T1 * _elementi1[max];
- T2 * _elementi2[max];
- int * _trenutno;
- public:
- Kolekcija() {
- for (size_t i = 0; i < max; i++)
- {
- _elementi1[i] = nullptr;
- _elementi2[i] = nullptr;
- }
- _trenutno = new int(0);
- }
- void AddElement(T1 e1, T2 e2) {
- if (*_trenutno >= max)
- throw exception("Maximalan broj elemenata!");
- else {
- _elementi1[(*_trenutno)] = new T1(e1);
- _elementi2[(*_trenutno)] = new T2(e2);
- (*_trenutno)++;
- }
- }
- T1 GetElement1(int lok) { return *_elementi1[lok]; }
- T1 GetElement2(int lok) { return *_elementi2[lok]; }
- int GetTrenutno() { return *_trenutno; }
- friend ostream & operator <<(ostream & c, Kolekcija & obj) {
- for (size_t i = 0; i < obj.GetTrenutno(); i++)
- {
- c << obj.GetElement1(i) << " - " << obj.GetElement2(i) << endl;
- }
- return c;
- }
- Kolekcija(const Kolekcija & original) {
- for (size_t i = 0; i < *original._trenutno; i++)
- {
- _elementi1[i] = original._elementi1[i];
- _elementi2[i] = original._elementi2[i];
- }
- _trenutno = original._trenutno;
- }
- int GetMax() { return max; }
- };
- 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() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- Datum(const Datum &original) {
- _dan = new int(*original._dan);
- _mjesec = new int(*original._mjesec);
- _godina = new int(*original._godina);
- }
- bool operator<(Datum & d) {
- if (*_godina < *d._godina)
- return false;
- if (*_godina == *d._godina) {
- if (*_mjesec < *d._mjesec)
- return false;
- }
- if (*_godina == *d._godina) {
- if (*_mjesec == *d._mjesec)
- if (*_dan < *d._dan)
- return false;
- }
- return true;
- }
- Datum & operator=(Datum & original) {
- if (this != &original) {
- _dan = new int(*original._dan);
- _mjesec = new int(*original._mjesec);
- _godina = new int(*original._godina);
- }
- return *this;
- }
- bool operator==(const Datum & original) {
- return(*_dan == *original._dan && *_mjesec == *original._mjesec&& *_godina == *original._godina);
- }
- friend ostream& operator<< (ostream &COUT, Datum &obj) {
- COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
- return COUT;
- }
- };
- enum ListaKurseva { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
- char *listakurseva[] = { "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;
- _pocetak = new Datum(pocetak);
- _kraj = new Datum(kraj);
- int size = strlen(imepredavaca) + 1;
- _imePredavaca = new char[size];
- strcpy_s(_imePredavaca, size, imepredavaca);
- }
- ListaKurseva GetKurs() { return _kurs; }
- Datum GetPocetak() { return *_pocetak; }
- Datum GetKraj() { return *_kraj; }
- Kurs(const Kurs & original) {
- _kurs = original._kurs;
- _pocetak = new Datum(*original._pocetak);
- _kraj = new Datum(*original._kraj);
- int size = strlen(original._imePredavaca) + 1;
- _imePredavaca = new char[size];
- strcpy_s(_imePredavaca, size, original._imePredavaca);
- }
- Kurs & operator=(Kurs & original) {
- if (this != &original) {
- _kurs = original._kurs;
- *_pocetak = *original._pocetak;
- *_kraj = *original._kraj;
- int size = strlen(original._imePredavaca) + 1;
- _imePredavaca = new char[size];
- strcpy_s(_imePredavaca, size, original._imePredavaca);
- }
- return *this;
- }
- bool operator==(Kurs & original) {
- return (_kurs == original._kurs && *_pocetak == *original._pocetak && *_kraj == *original._kraj && strcmp(_imePredavaca, original._imePredavaca) == 0);
- }
- bool operator!=(Kurs & original) {
- return !(*this == original);
- }
- friend ostream & operator<<(ostream & c, Kurs & obj) {
- c << listakurseva[obj._kurs] << "---" << *obj._pocetak << "---" << *obj._kraj << "---" << obj._imePredavaca << endl;
- return c;
- }
- ~Kurs() {
- delete _pocetak; _pocetak = nullptr; delete _kraj; _kraj = nullptr; delete[]_imePredavaca; _imePredavaca = nullptr;
- }
- };
- 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() { delete[] _imePrezime; }
- friend ostream &operator<<(ostream &c, Polaznik & p) {
- c << p._polaznikID << "." << p._imePrezime;
- for (size_t i = 0; i <p._pohadjaniKursevi.size(); i++)
- {
- c << p._pohadjaniKursevi[i] << ",";
- }
- c << endl;
- return c;
- }
- bool operator==(Polaznik & original) {
- if (_pohadjaniKursevi.size() != original._pohadjaniKursevi.size())
- return false;
- for (int i = 0; i < _pohadjaniKursevi.size(); i++)
- {
- if (_pohadjaniKursevi[i] != original._pohadjaniKursevi[i])
- return false;
- }
- return (strcmp(_imePrezime, original._imePrezime) == 0);
- }
- Polaznik & operator=(Polaznik & original) {
- int size = strlen(original._imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, original._imePrezime);
- for (size_t i = 0; i < original._pohadjaniKursevi.size(); i++)
- {
- _pohadjaniKursevi[i] = original._pohadjaniKursevi[i];
- }
- return *this;
- }
- bool AddKurs(Kurs kurs)throw(Izuzetak) {
- vector<Kurs>::iterator it = _pohadjaniKursevi.begin();
- for (it; it !=_pohadjaniKursevi.end(); it++)
- {
- if (*it == kurs) {
- throw Izuzetak(__DATE__, __LINE__);
- }
- }
- _pohadjaniKursevi.push_back(kurs);
- return true;
- }
- bool RemoveKurs(Kurs kurs) {
- for (size_t i = 0; i < _pohadjaniKursevi.size(); i++)
- {
- if (_pohadjaniKursevi[i] == kurs) {
- _pohadjaniKursevi.erase(_pohadjaniKursevi.begin() + i);
- return true;
- }
- }
- throw Izuzetak(__DATE__, __LINE__);
- return false;
- }
- };
- int Polaznik::ID = 0;
- 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;
- }
- void AddKurs(Kurs & kurs)throw(Izuzetak) {
- for (size_t i = 0; i < _kursevi.size(); i++)
- {
- if (_kursevi[i] == kurs)
- return;
- }
- _kursevi.push_back(kurs);
- }
- bool ProvjeriKoliziju(Kurs kurs)throw(Izuzetak) {
- for (int i = 0; i < _kursevi.size(); i++)
- {
- if (!(_kursevi[i].GetKraj() < kurs.GetPocetak())) {
- throw Izuzetak(__DATE__, __LINE__);
- return false;
- }
- }
- return true;
- }
- void AddAplikaciju(Kurs kurs, Polaznik & pol)throw(Izuzetak) {
- }
- };
- char *crt = "\n---------------------------------------\n";
- void main()
- {
- /****************************************************************************
- 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
- 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
- 3. SPASAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URADJENOG ZADATKA
- 4. PROGRAMSKI CODE SE TAKODJER NALAZI U FAJLU CODE_.TXT
- 5. NAZIVI FUNKCIJA MORAJU BITI IDENTIČNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U.OSTALE, POMOĆNE FUNKCIJE MOŽETE IMENOVATI PO ŽELJI.
- 6. IZUZETAK BACITE KAD GOD JE TO POTREBNO.
- ****************************************************************************/
- #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 << endl;
- 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" << endl;
- Kurs msql2(msql);
- cout << msql2 << endl;
- //#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 << endl;
- //if (denis.AddKurs(msql))
- // cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << endl;
- //if (denis.AddKurs(msql))//<<<< NIJE DOZVOLJENO DODATI IDENTICNE KURSEVE, PRILIKOM PROVJERE KORISTITI ITERATOR
- // cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << endl;
- if (denis.RemoveKurs(msql))
- cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << msql << endl;
- /*if (denis.RemoveKurs(sef))
- cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << sef << endl;*/
- cout << denis2 << endl;//<<<<<KORISTITI OSTREAM_ITERATOR
- denis2 = denis;
- if (denis == denis2)//polaznici su isti ako imaju isto ime i ako su pohadjali iste kurseve
- cout << "ISTI SU" << endl;
- }
- 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 << endl;
- // }
- // catch (Izuzetak & err) {
- // cout << err << endl;
- // }
- #pragma endregion
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement