rijads

Untitled

Jan 21st, 2014
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.99 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. char ln[] = "\n---------------------------------------\n";
  4. /////////////////////////////DATUM//////////////////////////////////////
  5. class Datum{
  6.     int _dan, _mjesec, _godina;
  7. public:
  8.     Datum(int d = 1, int m = 1, int g = 2000){
  9.         _dan = d;
  10.         _mjesec = m;
  11.         _godina = g;
  12.     }
  13.     friend ostream & operator<< (ostream & COUT, Datum & obj);
  14.     //KLASU DATUM PROSIRITI OPERATORSKIM FUNKCIJA KOJE CE BITI
  15.     //POTREBNE U NASTAVKU PROGRAMA
  16.     bool operator==(Datum& d){
  17.         if (_dan == d._dan&&_mjesec == d._mjesec&&_godina == d._godina)
  18.             return true;
  19.         return false;
  20.     }
  21. };
  22. ostream & operator<< (ostream & COUT, Datum & obj){
  23.     COUT << obj._dan << "/" << obj._mjesec << "/" << obj._godina;
  24.     return COUT;
  25. }
  26. /////////////////////////////PREDMET//////////////////////////////////////
  27. class Predmet{
  28. protected:
  29.     int _predmetID;
  30.     char * _naziv;
  31.     char * _predavaci[5];
  32.     int _brojPredavaca;
  33. public:
  34.     Predmet(int id, char * naziv, char * predavac){
  35.         _predmetID = id;
  36.         int size = strlen(naziv) + 1;
  37.         _naziv = new char[size];
  38.         strcpy_s(_naziv, size, naziv);
  39.         _brojPredavaca = 0;
  40.         //POKUSAJTE NA DRUGACIJI NACIN DODATI PREDAVACA NA PREDMET
  41.         /*size = strlen(predavac) + 1;
  42.         _predavaci[_brojPredavaca] = new char[size];
  43.         strcpy_s(_predavaci[_brojPredavaca], size, predavac);
  44.         _brojPredavaca++;*/
  45.     }
  46.     Predmet(Predmet & obj){
  47.         _predmetID = obj._predmetID;
  48.         int size = strlen(obj._naziv) + 1;
  49.         _naziv = new char[size];
  50.         strcpy_s(_naziv, size, obj._naziv);
  51.         _brojPredavaca = obj._brojPredavaca;
  52.         for (int i = 0; i<_brojPredavaca; i++){
  53.             size = strlen(obj._predavaci[i]) + 1;
  54.             _predavaci[i] = new char[size];
  55.             strcpy_s(_predavaci[i], size, obj._predavaci[i]);
  56.         }
  57.     }
  58.     ~Predmet(){
  59.         delete[] _naziv;
  60.  
  61.         _naziv = NULL;
  62.         for (int i = 0; i<_brojPredavaca; i++){
  63.             delete[] _predavaci[i];
  64.             _predavaci[i] = NULL;
  65.         }
  66.     }
  67.     int GetPredmetID(){ return _predmetID; }
  68.     void DodajPredavaca(char * ime){
  69.         if (_brojPredavaca == 5)
  70.             throw exception("Prekoracen broj predavaca ");
  71.         for (int i = 0; i<_brojPredavaca; i++)
  72.         if (strcmp(_predavaci[i], ime) == 0)
  73.             throw exception("Predavac vec postoji ");
  74.         int size = strlen(ime) + 1;
  75.         _predavaci[_brojPredavaca] = new char[size];
  76.         strcpy_s(_predavaci[_brojPredavaca], size, ime);
  77.         _brojPredavaca++;
  78.     }
  79.     friend ostream & operator<< (ostream & COUT, Predmet & obj);
  80.     bool operator==(Predmet& d){
  81.         if (_predmetID == d._predmetID&&_brojPredavaca == d._brojPredavaca&&strcmp(_naziv, d._naziv) == 0)
  82.             return true;
  83.         return false;
  84.     }
  85. };
  86. ostream & operator<< (ostream & COUT, Predmet & obj){
  87.     COUT << obj._predmetID << " " << obj._naziv << ln;
  88.     for (int i = 0; i<obj._brojPredavaca; i++)
  89.         COUT << obj._predavaci[i];
  90.     return COUT;
  91. }
  92.  
  93. /////////////////////////////POLOZENI PREDMET//////////////////////////////////////
  94. class PolozeniPredmet :public Predmet{
  95.     Datum _datumPolaganja;
  96.     int _ocjena;
  97. public:
  98.     PolozeniPredmet() :Predmet(0, "-", "-"){
  99.         _ocjena = 5;
  100.     }
  101.     PolozeniPredmet(int id, char * naziv, char * predavac, Datum dp, int ocj) :
  102.         Predmet(id, naziv, predavac), _datumPolaganja(dp)
  103.     {
  104.         _ocjena = ocj;
  105.     }
  106.     PolozeniPredmet(PolozeniPredmet & obj) :
  107.         Predmet(obj), _datumPolaganja(obj._datumPolaganja)
  108.     {
  109.         _ocjena = obj._ocjena;
  110.     }
  111.     bool operator==(PolozeniPredmet & obj){
  112.         //U PROVJERU JEDNAKOSTI UKLJUCITI I SVE OSTALE ATRIBUTE KLASE PolozeniPredmet
  113.         if (strcmp(obj._naziv, _naziv) == 0 && obj._predmetID == _predmetID &&
  114.             obj._brojPredavaca == _brojPredavaca&&_ocjena==obj._ocjena&&_datumPolaganja==obj._datumPolaganja)
  115.             return true;
  116.         return false;
  117.     }
  118.     PolozeniPredmet & operator=(PolozeniPredmet & obj){
  119.         //OPERATOR= IMPLEMENTIRATI NA DRUGACIJI NACIN, A TOM PRILIKOM VODITI RAČUNA O
  120.         //1. POTREBNIM DEALOKACIJA
  121.         //2. PRAVILNOM PONASANJU FUNKCIJE U SLUCAJU KADA SE RADI O ISTIM OBJEKTIMA
  122.         if (this != &obj){
  123.             _predmetID = obj._predmetID;
  124.             int size = strlen(obj._naziv) + 1;
  125.             delete[]_naziv;
  126.             _naziv = new char[size];
  127.             strcpy_s(_naziv, size, obj._naziv);
  128.             for (int i = 0; i < _brojPredavaca; i++){
  129.                 delete[]_predavaci[i];
  130.             }
  131.             _brojPredavaca = obj._brojPredavaca;
  132.             for (int i = 0; i < _brojPredavaca; i++){
  133.                 size = strlen(obj._predavaci[i]) + 1;
  134.                 _predavaci[i] = new char[size];
  135.                 strcpy_s(_predavaci[i], size, obj._predavaci[i]);
  136.             }
  137.             _datumPolaganja = obj._datumPolaganja;
  138.             _ocjena = obj._ocjena;
  139.         }
  140.         return *this;
  141.     }
  142.     friend ostream & operator<< (ostream & COUT, PolozeniPredmet & obj);
  143. };
  144. ostream & operator<< (ostream & COUT, PolozeniPredmet & obj){
  145.     COUT << (Predmet)obj << ln;
  146.  
  147.     COUT << obj._datumPolaganja << " " << obj._ocjena;
  148.     return COUT;
  149. }
  150. /////////////////////////////KOLEKCIJA//////////////////////////////////////
  151. template<class T>
  152. class Kolekcija{
  153.     T * _elementi;
  154.     int _max;
  155.     int _trenutno;
  156. public:
  157.     Kolekcija(int max = 10){
  158.         _max = max;
  159.         _trenutno = 0;
  160.         _elementi = new T[_max];
  161.     }
  162.     ~Kolekcija(){
  163.         delete[] _elementi;
  164.         _elementi = NULL;
  165.     }
  166.     bool AddElement(T & ele){
  167.         for (int i = 0; i<_trenutno; i++)
  168.         if (ele == _elementi[i])
  169.             return false;
  170.         if (_trenutno == _max){
  171.             _max += 5;
  172.             T * temp = new T[_max];
  173.             for (int i = 0; i<_trenutno; i++)
  174.                 temp[i] = _elementi[i];
  175.             delete[] _elementi;
  176.             _elementi = temp;
  177.         }
  178.         _elementi[_trenutno] = ele;
  179.         _trenutno++;
  180.         return true;
  181.     }
  182.     bool RemoveElement(T & ele){
  183.         for (int i = 0; i<_trenutno; i++)
  184.         if (ele == _elementi[i]){
  185.             for (int j = i; j<_trenutno - 1; j++){
  186.                 _elementi[j] = _elementi[j + 1];
  187.             }
  188.             cout << endl;
  189.             _trenutno--;
  190.             return true;
  191.         }
  192.         return false;
  193.     }
  194.     T * operator[] (int lokacija){
  195.         if (lokacija >= 0 && lokacija<_trenutno)
  196.             return &_elementi[lokacija];
  197.         return NULL;
  198.     }
  199.     int GetTrenutno(){ return _trenutno; }
  200.     friend ostream & operator<< <> (ostream & COUT, Kolekcija<T> & obj);
  201. };
  202. template<class T>
  203. ostream & operator<< (ostream & COUT, Kolekcija<T> & obj){
  204.     for (int i = 0; i<obj._trenutno; i++)
  205.         COUT << obj._elementi[i] << ln;
  206.     return COUT;
  207. }
  208. int brInd = 0;
  209. class Student{
  210.     int _brojIndeksa;
  211.     char * _imePrezime;
  212.     Kolekcija<PolozeniPredmet> _polozeni;
  213. public:
  214.     Student(char * ip="Nepoznato"){
  215.         _brojIndeksa = ++brInd;
  216.         int size = strlen(ip) + 1;
  217.         _imePrezime = new char[size];
  218.         strcpy_s(_imePrezime, size, ip);
  219.     }
  220.     ~Student(){
  221.         delete[] _imePrezime;
  222.         _imePrezime = NULL;
  223.     }
  224.  
  225.     bool DodajPolozeni(int id, char * naziv, char * predavac, Datum dp, int ocj){
  226.         PolozeniPredmet * temp = new PolozeniPredmet(id, naziv, predavac, dp, ocj);
  227.         temp->DodajPredavaca(predavac); //<<STA BISMO TREBALI OCEKIVATI OD OVE LINIJE CODE-A
  228.         return _polozeni.AddElement(*temp);
  229.     }
  230.     bool UkloniPredmetPoIDu(int id){
  231.         //UMJESTO OPERATORA[] PREDLOZITI NEKO DRUGO RJESENJE ZA PRISTUP CLANOVIMA KLASE KOLEKCIJA
  232.         PolozeniPredmet * temp = NULL;
  233.         for (int i = 0; i<_polozeni.GetTrenutno(); i++){
  234.             temp = _polozeni[i];
  235.             if (temp != NULL){
  236.                 if (temp->GetPredmetID() == id){
  237.                     _polozeni.RemoveElement(*temp);
  238.                     return true;
  239.                 }
  240.             }
  241.         }
  242.         return false;
  243.     }
  244.     friend ostream & operator<< (ostream & COUT, Student & obj);
  245. };
  246. ostream & operator<< (ostream & COUT, Student & obj){
  247.     COUT << obj._brojIndeksa << " " << obj._imePrezime << ln;
  248.     COUT << obj._polozeni << ln;
  249.     return COUT;
  250. }
  251. //RAZVITI HIJERARHIJU KLASA KOJE CE SE KORISTI ZA BACANJE IZUZETAKA U SPECIFICNIM IZVRSENJIMA
  252. //PROGRAMA. KAO BAZNU KLASU ISKORISTITI KLASU exception
  253.  
  254. void main(){
  255.     try{
  256.         //KREIRATI NIZ OBJEKATA TIPA STUDENT I TESTIRATI DOSTUPNE FUNKCIONALNOSTI KLASA
  257.         Student *s = new Student[3];
  258.         Student a("Chuck Norris");
  259.         Datum d(12, 5, 2012);
  260.         a.DodajPolozeni(1, "Uvod u programiranje", "doc.dr. Emina Junuz", d, 8);
  261.         a.DodajPolozeni(2, "Programiranje 1", "doc.dr. Jasmin Azemovic", d, 10);
  262.         a.DodajPolozeni(3, "Programiranje 2", "doc.dr. Emina Junuz", d, 9);
  263.         cout << a;
  264.         a.UkloniPredmetPoIDu(2);
  265.         cout << ln << "NAKON UKLANJANJA PREDMETA SA ID-om: 2" << ln << endl;
  266.         cout << a;
  267.     }
  268.     catch (exception & obj){
  269.         cout << "Greska: " << obj.what() << endl;
  270.     }
  271.     system("pause");
  272. }
Advertisement
Add Comment
Please, Sign In to add comment