Advertisement
Guest User

Untitled

a guest
Feb 14th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.44 KB | None | 0 0
  1. #include <iostream>
  2. #include <exception>
  3. #include <string>
  4. using namespace std;
  5.  
  6. int brojac = 1;
  7.  
  8. template<class T1, class T2, int max>
  9. class Kolekcija{
  10.     T1 * _elementi1[max];
  11.     T2 * _elementi2[max];
  12.     int _trenutnoElemenata;
  13. public:
  14.     Kolekcija()
  15.     {
  16.         for (size_t i = 0; i < max; i++)
  17.         {
  18.             _elementi1[i] = NULL;
  19.             _elementi2[i] = NULL;
  20.         }
  21.         _trenutnoElemenata = 0;
  22.     }
  23.     Kolekcija(const Kolekcija& original)
  24.     {
  25.         if (this != &original)
  26.         {
  27.             for (size_t i = 0; i < max; i++)
  28.             {
  29.                 _elementi1[i] = NULL;
  30.                 _elementi2[i] = NULL;
  31.             }
  32.             _trenutnoElemenata = original._trenutnoElemenata;
  33.  
  34.             for (size_t i = 0; i < _trenutnoElemenata; i++)
  35.             {
  36.                 _elementi1[i] = new T1(*original._elementi1[i]);
  37.                 _elementi2[i] = new T2(*original._elementi2[i]);
  38.             }
  39.         }
  40.         return;
  41.     }
  42.     ~Kolekcija()
  43.     {
  44.         for (size_t i = 0; i < max; i++)
  45.         {
  46.             delete _elementi1[i];
  47.             delete _elementi2[i];
  48.             _elementi1[i] = NULL;
  49.             _elementi2[i] = NULL;
  50.         }
  51.     }
  52.     Kolekcija<T1, T2, max> operator= (const Kolekcija<T1, T2, max>& obj)
  53.     {
  54.         if (this != &obj)
  55.         {
  56.             for (size_t i = 0; i < max; i++)
  57.             {
  58.                 delete _elementi1[i];
  59.                 delete _elementi2[i];
  60.                 _elementi1[i] = NULL;
  61.                 _elementi2[i] = NULL;
  62.             }
  63.             _trenutnoElemenata = obj._trenutnoElemenata;
  64.  
  65.             for (size_t i = 0; i < _trenutnoElemenata; i++)
  66.             {
  67.                 _elementi1[i] = new T1(*obj._elementi1[i]);
  68.                 _elementi2[i] = new T2(*obj._elementi2[i]);
  69.             }
  70.             return *this;
  71.         }
  72.         return *this;
  73.     }
  74.     friend ostream& operator<< <>(ostream& COUT, Kolekcija& obj);
  75.     bool AddElement(T1 e1, T2 e2)
  76.     {
  77.         if (_trenutnoElemenata == max)
  78.             return false;
  79.         for (size_t i = 0; i < _trenutnoElemenata; i++)
  80.         {
  81.             if (*_elementi1[i] == e1 && *_elementi2[i] == e2)
  82.                 return false;
  83.         }
  84.         _elementi1[_trenutnoElemenata] = new T1(e1);
  85.         _elementi2[_trenutnoElemenata] = new T2(e2);
  86.         _trenutnoElemenata++;
  87.         return true;
  88.     }
  89.     bool RemoveElement(T1 e1)
  90.     {
  91.         if (_trenutnoElemenata == 0)
  92.             return false;
  93.         for (size_t i = 0; i < _trenutnoElemenata; i++)
  94.         {
  95.             if (*_elementi1[i] == e1)
  96.             {
  97.                 for (size_t j = i; j < _trenutnoElemenata - 1; j++)
  98.                 {
  99.                     delete _elementi1[j];
  100.                     delete _elementi2[j];
  101.                     _elementi1[j] = new T1(*_elementi1[j + 1]);
  102.                     _elementi2[j] = new T2(*_elementi2[j + 1]);
  103.                 }
  104.                 _trenutnoElemenata--;
  105.                 return true;
  106.             }
  107.         }
  108.         return false;
  109.     }
  110.     bool PopFront()
  111.     {
  112.         if (_trenutnoElemenata == 0)
  113.         {
  114.             throw exception("Kolekcija je prazna");
  115.             return false;
  116.         }
  117.         for (size_t i = 0; i < _trenutnoElemenata - 1; i++)
  118.         {
  119.             delete _elementi1[i];
  120.             delete _elementi2[i];
  121.             _elementi1[i] = new T1(*_elementi1[i + 1]);
  122.             _elementi2[i] = new T2(*_elementi2[i + 1]);
  123.         }
  124.         _trenutnoElemenata--;
  125.         return true;
  126.     }
  127.     int GetTrenutnoElemenata(){ return _trenutnoElemenata; }
  128.     T1 GetElement1(int lokacija){ return *_elementi1[lokacija]; }
  129.     T2 GetElement2(int lokacija){ return *_elementi2[lokacija]; }
  130. };
  131. template<class T1, class T2, int max>
  132. ostream& operator<< (ostream& COUT, Kolekcija<T1, T2, max>& obj)
  133. {
  134.     for (size_t i = 0; i <obj._trenutnoElemenata ; i++)
  135.     {
  136.         COUT << *obj._elementi1[i] << " - " << *obj._elementi2[i] << endl;
  137.     }  
  138.     return COUT;
  139. }
  140.  
  141. class Datum{
  142.     int *_dan, *_mjesec, *_godina;
  143. public:
  144.     Datum(int dan = 1, int mjesec = 1, int godina = 2016)
  145.     {
  146.         _dan = new int(dan);
  147.         _mjesec = new int(mjesec);
  148.         _godina = new int(godina);
  149.     }
  150.     Datum(const Datum& original)
  151.     {
  152.         if (this != &original)
  153.         {
  154.             _dan = new int(*original._dan);
  155.             _mjesec = new int(*original._mjesec);
  156.             _godina = new int(*original._godina);
  157.         }
  158.         return;
  159.     }
  160.     ~Datum()
  161.     {
  162.         delete _dan;
  163.         delete _mjesec;
  164.         delete _godina;
  165.  
  166.         _dan = NULL;
  167.         _mjesec = NULL;
  168.         _godina = NULL;
  169.     }
  170.     Datum operator= (const Datum& obj)
  171.     {
  172.         if (this != &obj)
  173.         {
  174.             delete _dan;
  175.             delete _mjesec;
  176.             delete _godina;
  177.  
  178.             _dan = new int(*obj._dan);
  179.             _mjesec = new int(*obj._mjesec);
  180.             _godina = new int(*obj._godina);
  181.             return *this;
  182.         }
  183.         return *this;
  184.     }
  185.     friend ostream& operator<<(ostream& COUT, Datum& obj); 
  186. };
  187. ostream& operator<<(ostream& COUT, Datum& obj)
  188. {
  189.     COUT << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina << endl;
  190.     return COUT;
  191. }
  192.  
  193. class PolozeniPredmet{
  194.     char * _nazivPredmeta;
  195.     char * _imePrezimeNastavnika;
  196.     Datum _datumPolaganja;
  197.     int _ocjena;
  198. public:
  199.     PolozeniPredmet(char* nazivPredmeta = "Predmet", char* imePrezimeNastavnika = "Nastavnik", Datum datumPologanja = Datum(), int ocjena = 6)
  200.         :_datumPolaganja(datumPologanja)
  201.     {
  202.         int size = strlen(nazivPredmeta) + 1;
  203.         _nazivPredmeta = new char[size];
  204.         strcpy_s(_nazivPredmeta, size, nazivPredmeta);
  205.  
  206.         size = strlen(imePrezimeNastavnika) + 1;
  207.         _imePrezimeNastavnika = new char[size];
  208.         strcpy_s(_imePrezimeNastavnika, size, imePrezimeNastavnika);
  209.  
  210.         _ocjena = ocjena;
  211.     }
  212.     PolozeniPredmet(const PolozeniPredmet& original) :_datumPolaganja(original._datumPolaganja)
  213.     {
  214.         if (this != &original)
  215.         {
  216.             int size = strlen(original._nazivPredmeta) + 1;
  217.             _nazivPredmeta = new char[size];
  218.             strcpy_s(_nazivPredmeta, size, original._nazivPredmeta);
  219.  
  220.             size = strlen(original._imePrezimeNastavnika) + 1;
  221.             _imePrezimeNastavnika = new char[size];
  222.             strcpy_s(_imePrezimeNastavnika, size, original._imePrezimeNastavnika);
  223.  
  224.             _ocjena = original._ocjena;
  225.         }
  226.         return;
  227.     }
  228.     ~PolozeniPredmet()
  229.     {
  230.         delete[] _nazivPredmeta;
  231.         delete[] _imePrezimeNastavnika;
  232.  
  233.         _nazivPredmeta = NULL;
  234.         _imePrezimeNastavnika = NULL;
  235.     }
  236.     PolozeniPredmet operator= (const PolozeniPredmet& obj)
  237.     {
  238.         if (this != &obj)
  239.         {
  240.             delete[] _nazivPredmeta;
  241.             delete[] _imePrezimeNastavnika;
  242.  
  243.             int size = strlen(obj._nazivPredmeta) + 1;
  244.             _nazivPredmeta = new char[size];
  245.             strcpy_s(_nazivPredmeta, size, obj._nazivPredmeta);
  246.  
  247.             size = strlen(obj._imePrezimeNastavnika) + 1;
  248.             _imePrezimeNastavnika = new char[size];
  249.             strcpy_s(_imePrezimeNastavnika, size, obj._imePrezimeNastavnika);
  250.  
  251.             _ocjena = obj._ocjena;
  252.             return *this;
  253.         }
  254.         return *this;
  255.     }
  256.     friend ostream& operator<< (ostream& COUT, PolozeniPredmet& obj);
  257.     char* GetNazivPredmeta(){ return _nazivPredmeta; }
  258.     char* GetImePrezimeNastavnika(){ return _imePrezimeNastavnika; }
  259.     Datum GetDatumPolaganja(){ return _datumPolaganja; }
  260.     bool operator== (PolozeniPredmet& obj)
  261.     {
  262.         if (strcmp(_nazivPredmeta, obj._nazivPredmeta) == 0)
  263.             return true;
  264.         return false;
  265.     }
  266.     int GetOcjena(){ return _ocjena; }
  267. };
  268. ostream& operator<< (ostream& COUT, PolozeniPredmet& obj)
  269. {
  270.     COUT << obj._nazivPredmeta << endl;
  271.     COUT << obj._imePrezimeNastavnika << endl;
  272.     COUT << obj._datumPolaganja;
  273.     COUT << obj._ocjena << endl;
  274.     return COUT;
  275. }
  276.  
  277. class Student{
  278.     const int _brojIndeksa;
  279.     char * _imePrezime;
  280.     //planom i programom je definisano da je student, tokom studija, duzan poloziti 40 predmeta
  281.     Kolekcija<PolozeniPredmet, string, 40> _polozeniPredmeti;//string se odnosi na napomenu
  282. public:
  283.     Student(char* imePrezime = "Ime i prezime") :_brojIndeksa(brojac++)
  284.     {
  285.         int size = strlen(imePrezime) + 1;
  286.         _imePrezime = new char[size];
  287.         strcpy_s(_imePrezime, size, imePrezime);
  288.     }
  289.     Student(class Student& original) :_brojIndeksa(original._brojIndeksa)
  290.     {
  291.         if (this != &original)
  292.         {
  293.             int size = strlen(original._imePrezime) + 1;
  294.             _imePrezime = new char[size];
  295.             strcpy_s(_imePrezime, size, original._imePrezime);
  296.             _polozeniPredmeti = original._polozeniPredmeti;
  297.         }
  298.         return;
  299.     }
  300.     ~Student()
  301.     {
  302.         delete[] _imePrezime;
  303.         _imePrezime = NULL;
  304.     }
  305.     Student operator= (const Student& obj)
  306.     {
  307.         if (this != &obj)
  308.         {
  309.             delete[] _imePrezime;
  310.  
  311.             int size = strlen(obj._imePrezime) + 1;
  312.             _imePrezime = new char[size];
  313.             strcpy_s(_imePrezime, size, obj._imePrezime);
  314.             _polozeniPredmeti = obj._polozeniPredmeti;
  315.             return *this;
  316.         }
  317.         return *this;
  318.     }
  319.     friend ostream& operator<< (ostream& COUT, Student& obj);
  320.     bool AddPolozeniIspit(PolozeniPredmet& predmet, string napomena = "   ")
  321.     {
  322.         int x = 0; //cuva podatak o broju predmeta kod jednog profesora
  323.         if (strlen(napomena.c_str()) > 100)
  324.         {
  325.             throw exception("Napomena je preduga.");
  326.             return false;
  327.         }
  328.         for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
  329.         {
  330.             if (strcmp(_polozeniPredmeti.GetElement1(i).GetNazivPredmeta(), predmet.GetNazivPredmeta()) == 0)
  331.             {
  332.                 throw exception("Predmet vec postoji u nizu.");
  333.                 return false;
  334.             }
  335.         }
  336.         for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
  337.         {
  338.             if (strcmp(_polozeniPredmeti.GetElement1(i).GetImePrezimeNastavnika(), predmet.GetImePrezimeNastavnika()) == 0)
  339.                 x++;
  340.         }
  341.         if (x >= 3)
  342.         {
  343.             throw exception("Kod predmetnog profesora ima vec 3 ili vise polozenih predmeta.");
  344.                 return false;
  345.         }
  346.         return _polozeniPredmeti.AddElement(predmet, napomena);
  347.     }
  348.     bool RemovePolozeniPredmet(char* nazivPredmeta)
  349.     {
  350.         for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
  351.         {
  352.             if (strcmp(_polozeniPredmeti.GetElement1(i).GetNazivPredmeta(), nazivPredmeta) == 0)
  353.                 return _polozeniPredmeti.RemoveElement(_polozeniPredmeti.GetElement1(i));
  354.         }
  355.     }
  356.     double GetProsjekByNastavnik(char* imeNastavnika)
  357.     {
  358.         double suma = 0;
  359.         int n = 0; //broj polozenih predmeta kod istog profesora
  360.         for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
  361.         {
  362.             if (strcmp(_polozeniPredmeti.GetElement1(i).GetImePrezimeNastavnika(), imeNastavnika) == 0)
  363.             {
  364.                 suma += _polozeniPredmeti.GetElement1(i).GetOcjena();
  365.                 n++;
  366.             }
  367.         }
  368.         return suma / n;
  369.     }
  370.     PolozeniPredmet* operator()(char* napomena, int &broj)
  371.     {
  372.         PolozeniPredmet * pok = new PolozeniPredmet[40];       
  373.         for (size_t i = 0; i < _polozeniPredmeti.GetTrenutnoElemenata(); i++)
  374.         {
  375.             if (strcmp(_polozeniPredmeti.GetElement2(i).c_str(), napomena) == 0)
  376.             {
  377.                 pok[broj] = _polozeniPredmeti.GetElement1(i);
  378.                 broj++;
  379.             }
  380.         }
  381.         return pok;
  382.     }
  383. };
  384. ostream& operator<< (ostream& COUT, Student& obj)
  385. {
  386.     COUT << obj._brojIndeksa << endl;
  387.     COUT << obj._imePrezime << endl;
  388.     COUT << obj._polozeniPredmeti << endl;
  389.     return COUT;
  390. }
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397. int main()
  398. {
  399.     Datum datum1(20, 2, 2016);
  400.     Datum datum2(25, 2, 2016);
  401.     Datum datum3(27, 2, 2016);
  402.     Datum datum4(28, 2, 2016);
  403.     PolozeniPredmet p1("Programiranje1", "Denis", datum1, 10); 
  404.     PolozeniPredmet p2("Baze podataka", "Jasmin", datum2, 10);
  405.     PolozeniPredmet p3("Inzinjerska matematika", "Nina", datum3, 10);
  406.     PolozeniPredmet p4("Racunarske mreze", "Zanin", datum4, 10);
  407.     PolozeniPredmet p5("Programiranje2", "Denis", datum2, 6);
  408.     PolozeniPredmet p6("Programiranje3", "Denis", datum3, 9);
  409.     Student s1("Sanjin");
  410.     Student s2("Amir");
  411.     Student s3("Tarik");
  412.     Student s4("Muhamed");
  413.    
  414.  
  415.  
  416.     try
  417.     {
  418.         //s1.AddPolozeniIspit(p1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  419.         s1.AddPolozeniIspit(p1, "Nema napomena");
  420.         //s1.AddPolozeniIspit(p1, "Nema napomena");
  421.         //cout << s1 << endl;
  422.         //s1.RemovePolozeniPredmet("Programiranje");
  423.         //cout << s1 << endl;
  424.         s1.AddPolozeniIspit(p5, "prepisivao");
  425.         s1.AddPolozeniIspit(p6, "prepisivao");
  426.         cout << s1 << endl;
  427.         cout << "Prosjek: " << s1.GetProsjekByNastavnik("Denis") << endl;;
  428.         cout << "--------------------" << endl;
  429.         int broj = 0;
  430.         PolozeniPredmet * pokazivac = new PolozeniPredmet[40];
  431.         pokazivac = s1("prepisivao", broj);
  432.         for (size_t i = 0; i < broj; i++)
  433.         {
  434.             cout << pokazivac[i] << endl;
  435.         }
  436.  
  437.        
  438.  
  439.        
  440.  
  441.     }
  442.     catch (exception & error)
  443.     {
  444.         cout << error.what() << endl;
  445.     }
  446.  
  447.     system("pause");
  448.     return 0;
  449. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement