Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.96 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. char* crt = "\n----------------------------------------------\n";
  5.  
  6.  
  7. template<class  T1, class T2>
  8. class Kolekcija {
  9.  
  10.     T1 * _elementi1;
  11.     T2 * _elementi2;
  12.     int _trenutnoElemenata;
  13. public:
  14.     Kolekcija() {
  15.         _elementi1 = nullptr;
  16.         _elementi2 = nullptr;
  17.         _trenutnoElemenata = 0;
  18.     }
  19.     Kolekcija(const Kolekcija& obj) {
  20.  
  21.         _elementi1 = new T1[obj._trenutnoElemenata];
  22.         _elementi2 = new T2[obj._trenutnoElemenata];
  23.         for (int i = 0; i < obj._trenutnoElemenata; i++) {
  24.             _elementi1[i] = obj._elementi1[i];
  25.             _elementi2[i] = obj._elementi2[i];
  26.         }
  27.         _trenutnoElemenata = obj._trenutnoElemenata;
  28.     }
  29.  
  30.     Kolekcija& operator=(const Kolekcija& obj) {
  31.         if (this != &obj) {
  32.             delete[] _elementi1;
  33.             delete[] _elementi2;
  34.  
  35.  
  36.  
  37.             _elementi1 = new T1[obj._trenutnoElemenata];
  38.             _elementi2 = new T2[obj._trenutnoElemenata];
  39.             for (int i = 0; i < obj._trenutnoElemenata; i++) {
  40.                 _elementi1[i] = obj._elementi1[i];
  41.                 _elementi2[i] = obj._elementi2[i];
  42.             }
  43.             _trenutnoElemenata = obj._trenutnoElemenata;
  44.         }
  45.         return *this;
  46.     }
  47.  
  48.     ~Kolekcija() {
  49.         delete[] _elementi1;
  50.         delete[] _elementi2;
  51.         _elementi1 = nullptr;
  52.         _elementi2 = nullptr;
  53.     }
  54.  
  55.  
  56.     bool AddElement(T1 el1, T2 el2) {
  57.  
  58.         for (int i = 0; i < _trenutnoElemenata; i++){
  59.             if (_elementi1[i] == el1 /*||_elementi2[i] == el2*/ )
  60.                 return false;
  61.         }
  62.         T1* temp1 = new T1[_trenutnoElemenata + 1];
  63.         T2* temp2 = new T2[_trenutnoElemenata + 1];
  64.         for (int i = 0; i < _trenutnoElemenata; i++) {
  65.             temp1[i] = _elementi1[i];
  66.             temp2[i] = _elementi2[i];
  67.         }
  68.  
  69.         temp1[_trenutnoElemenata] = el1;
  70.         temp2[_trenutnoElemenata] = el2;
  71.  
  72.         delete[] _elementi1;
  73.         delete[] _elementi2;
  74.  
  75.         _elementi1 = temp1;
  76.         _elementi2 = temp2;
  77.         _trenutnoElemenata++;
  78.  
  79.         return true;
  80.     }
  81.  
  82.     void RemoveElement(int indeks) {
  83.         if (indeks >= 0 && indeks < _trenutnoElemenata) {
  84.             T1* temp1 = new T1[_trenutnoElemenata - 1];
  85.             T2* temp2 = new T2[_trenutnoElemenata - 1];
  86.  
  87.             for (int i = 0, j = 0; i < _trenutnoElemenata; i++) {
  88.                 if (i != indeks)
  89.                 {
  90.                     temp1[j] = _elementi1[i];
  91.                     temp2[j++] = _elementi2[i];
  92.                 }
  93.             }
  94.             delete[] _elementi1;
  95.             delete[] _elementi2;
  96.  
  97.             _elementi1 = temp1;
  98.             _elementi2 = temp2;
  99.             _trenutnoElemenata--;
  100.         }
  101.     }
  102.  
  103.     friend ostream& operator<< <>(ostream&, Kolekcija&);
  104.  
  105.     int getTrenutno() const { return _trenutnoElemenata; }
  106.  
  107.     T1& GetElement1(int lokacija) {
  108.         return _elementi1[lokacija];
  109.     }
  110.  
  111.     T2& GetElement2(int lokacija) {
  112.         return _elementi2[lokacija];
  113.     }
  114.     //T1& operator[](int index)
  115.     //{return _elementi1[index]}
  116.  
  117. };
  118.  
  119. template<class  T1, class T2>
  120. ostream& operator<<  (ostream& COUT, Kolekcija<T1, T2>& obj) { //potrebno definisati tipove kada se radi van klase
  121.  
  122.     for (int i = 0; i < obj._trenutnoElemenata; i++) {
  123.         COUT << obj._elementi1[i] << endl;//
  124.         COUT << obj._elementi2[i] << endl;
  125.  
  126.     }
  127.     return COUT;
  128. }
  129.  
  130.  
  131. class Datum {
  132.     int *_dan, *_mjesec, *_godina;
  133. public:
  134.     Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  135.         _dan = new int(dan);
  136.         _mjesec = new int(mjesec);
  137.         _godina = new int(godina);
  138.     }
  139.  
  140.     Datum(const Datum& obj) {
  141.         _dan = new int(*obj._dan);
  142.         _mjesec = new int(*obj._mjesec);
  143.         _godina = new int(*obj._godina);
  144.     }
  145.  
  146.     Datum& operator=(const Datum &obj) {
  147.         if (this != &obj) {
  148.             delete _dan;
  149.             delete _mjesec;
  150.             delete _godina;
  151.             _dan = new int(*obj._dan);
  152.             _mjesec = new int(*obj._mjesec);
  153.             _godina = new int(*obj._godina);
  154.         }
  155.         return *this;
  156.     }
  157.     ~Datum() {
  158.         delete _dan; _dan = nullptr;
  159.         delete _mjesec; _mjesec = nullptr;
  160.         delete _godina; _godina = nullptr;
  161.     }
  162.  
  163.     friend ostream& operator<<(ostream& COUT, Datum&obj) {
  164.         COUT << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina;
  165.  
  166.         return COUT;
  167.     }
  168.  
  169.     bool operator==(Datum& drugi) {
  170.         return *_dan == *drugi._dan && *_mjesec == *drugi._mjesec && *_godina == *drugi._godina;
  171.     }
  172.  
  173. };
  174.  
  175. class Student {
  176.     char *_imePrezime;
  177.     Datum *_datumRodjenja;
  178. public:
  179.     Student(char *imePrezime = "---", Datum d = Datum()) {
  180.         int size = strlen(imePrezime) + 1;
  181.         _imePrezime = new char[size];
  182.         strcpy_s(_imePrezime, size, imePrezime);
  183.         _datumRodjenja = new Datum(d);
  184.     }
  185.     Student(const Student&obj) {
  186.         int size = strlen(obj._imePrezime) + 1;
  187.         _imePrezime = new char[size];
  188.         strcpy_s(_imePrezime, size, obj._imePrezime);
  189.         _datumRodjenja = new Datum(*obj._datumRodjenja);
  190.     }
  191.     Student& operator=(const Student& obj) {
  192.         if (this != &obj)
  193.         {
  194.             int size = strlen(obj._imePrezime) + 1;
  195.             _imePrezime = new char[size];
  196.             strcpy_s(_imePrezime, size, obj._imePrezime);
  197.         *_datumRodjenja = *obj._datumRodjenja;
  198.  
  199.         }
  200.         return *this;
  201.     }
  202.     ~Student() {
  203.         delete[] _imePrezime; _imePrezime = nullptr;
  204.         delete _datumRodjenja;
  205.     }
  206.  
  207.     bool operator==(Student & drugi) {
  208.         return strcmp(_imePrezime, drugi._imePrezime) == 0;
  209.     }
  210.  
  211.     friend ostream& operator<<(ostream& ,  Student &);
  212. };
  213.  ostream& operator<<(ostream& COUT,  Student &obj) {
  214.     COUT << "Ime i prezime : " << obj._imePrezime << endl;
  215.     COUT << "Datum rodjenja : " << *obj._datumRodjenja << endl;
  216.     return COUT;
  217. }
  218.  
  219.  
  220. class Ispit {
  221.     Datum _datumOdrzavanja;
  222.     char *_opisIspita;
  223.     Kolekcija<Student, Datum>_prijave;
  224.     Kolekcija<Student, int> _rezultati;
  225. public:
  226.     Ispit(char *opisIspita, Datum &d) {
  227.         _datumOdrzavanja = d;
  228.         int size = strlen(opisIspita) + 1;
  229.         _opisIspita = new char[size];
  230.         strcpy_s(_opisIspita, size, opisIspita);
  231.     }
  232.     Ispit(const Ispit& obj):_prijave(obj._prijave),_rezultati(obj._rezultati){
  233.         _datumOdrzavanja = obj._datumOdrzavanja;
  234.         int size = strlen(obj._opisIspita) + 1;
  235.         _opisIspita = new char[size];
  236.         strcpy_s(_opisIspita, size, obj._opisIspita);
  237.     }
  238.  
  239.     Ispit& operator=(const Ispit & obj) {
  240.         if (this!=&obj){
  241.             delete[] _opisIspita; _opisIspita = nullptr;
  242.  
  243.             _datumOdrzavanja = obj._datumOdrzavanja;
  244.             int size = strlen(obj._opisIspita) + 1;
  245.             _opisIspita = new char[size];
  246.             strcpy_s(_opisIspita, size, obj._opisIspita);
  247.  
  248.         }
  249.         return *this;
  250.     }
  251.  
  252.     bool DodajPrijavu(Student &s,Datum &d) {
  253.  
  254.                  return _prijave.AddElement(s, d);
  255.                  
  256.     }
  257.  
  258.     void DodajRezultat(Student& s, int ocjena) {
  259.         for (int i = 0; i < _prijave.getTrenutno(); i++){
  260.             if (s == _prijave.GetElement1(i)){
  261.                 _rezultati.AddElement(s, ocjena);
  262.                 return;    
  263.             }
  264.         }
  265.     }
  266.  
  267.     void Sortiraj() {
  268.         for (int i = 0; i < _rezultati.getTrenutno(); i++){
  269.             for (int j = 0; j < _rezultati.getTrenutno()-1; j++){
  270.                 if (_rezultati.GetElement2(j) > _rezultati.GetElement2(j+1))
  271.                 {
  272.                     swap(_rezultati.GetElement2(j), _rezultati.GetElement2(j + 1));
  273.                 }
  274.             }
  275.         }
  276.     }
  277.  
  278.     void ZakljuciRezultate() {
  279.  
  280.         int index;
  281.         for (int i = 0; i < _prijave.getTrenutno(); i++) {
  282.             int index = -1;
  283.             for (int j = 0; j < _rezultati.getTrenutno(); j++) {
  284.  
  285.                 if (_prijave.GetElement1(i) == _rezultati.GetElement1(j))
  286.                 {
  287.                     index = i;
  288.                     break;
  289.                 }
  290.             }
  291.             if (index == -1){
  292.                 _rezultati.AddElement(_prijave.GetElement1(i), 5);
  293.             }
  294.         }
  295.     }
  296.  
  297.  
  298.     ~Ispit() {
  299.         delete[] _opisIspita;
  300.         _opisIspita = nullptr;
  301.     }
  302.  
  303.     friend ostream& operator<<(ostream&,  Ispit&);
  304. };
  305.  
  306.  
  307. ostream& operator<<(ostream& COUT,  Ispit& obj) {
  308.     /*COUT << "Datum odrzavanja : " << obj._datumOdrzavanja << endl;
  309.     COUT << "Opis: " << obj._opisIspita << endl;
  310.  
  311.     COUT << "\n\n::Prijave:: \n\n";
  312.     for (int i = 0; i <obj._prijave.getTrenutno(); i++){
  313.         cout << obj._prijave.GetElement1(i) <<"  ";
  314.         cout << obj._prijave.GetElement2(i) << endl;
  315.     }
  316.     COUT << "\n::Rezultati:: \n\n";
  317.     for (int j = 0; j < obj._rezultati.getTrenutno(); j++){
  318.         cout << obj._rezultati.GetElement1(j) << " ";
  319.         cout << obj._rezultati.GetElement2(j) << endl;
  320.    
  321.     }*/
  322.     COUT << "Datum odrzavanja : " << obj._datumOdrzavanja << endl;
  323.     COUT << "Opis: " << obj._opisIspita << endl;
  324.  
  325.     COUT << "Prijave: " << obj._prijave << endl;
  326.     COUT << "Rezultati : " << obj._rezultati << endl;
  327.  
  328.     if (obj._prijave.getTrenutno() == obj._rezultati.getTrenutno())
  329.         COUT << obj._rezultati;
  330.    
  331.  
  332.     return COUT;
  333.  
  334.  }
  335.  
  336. void main() {
  337.  
  338.     Kolekcija<int, double> kolekcija1;
  339.     for (size_t i = 0; i < 5; i++)
  340.         kolekcija1.AddElement(i, i + 0.3);
  341.     cout << kolekcija1 << endl;
  342.     cout << crt;
  343.  
  344.     Kolekcija<int, double>kolekcija2;
  345.     kolekcija2 = kolekcija1;
  346.  
  347.     kolekcija1.RemoveElement(2);
  348.     cout << kolekcija1 << crt;
  349.  
  350.     if (kolekcija1.getTrenutno() == kolekcija2.getTrenutno())
  351.         cout << "Isti broj elemenata !";
  352.  
  353.     Kolekcija<int, double>kolekcija3(kolekcija2);
  354.     cout << kolekcija3 << crt;
  355.     cout << crt;
  356.  
  357.     Datum danas(18, 11, 2017);
  358.     Datum sutra(danas);
  359.     Datum prekosutra;
  360.     prekosutra = danas;
  361.     cout << danas << endl << sutra << endl << prekosutra << endl;
  362.  
  363.     Student denis("Denis Music", Datum(26, 11, 1990));
  364.     Student Jasmin("Jasmin Azemovic", Datum(22, 11, 1990));
  365.     Student goran;
  366.     goran = Jasmin;
  367.     Student adel("Adel Handzic", Datum(25, 8, 1990));
  368.     Student marija("Marija Herceg", Datum(15, 6, 1990));
  369.  
  370.     Ispit prIII("PRIII::26.11.2017", danas);
  371.     //DodajPrijavu -- dodaje novog studenta u listu prijavljenih za ispit, onemoguciti dodavanje dva ista studenta
  372.     if (prIII.DodajPrijavu(denis, danas))
  373.         cout << denis << "Dodat na spisak " << endl;
  374.     if (prIII.DodajPrijavu(Jasmin, danas))
  375.         cout << Jasmin << "Dodat na spisak " << endl;
  376.     if (prIII.DodajPrijavu(goran, danas))
  377.         cout << goran << "Dodat na spisak " << endl;
  378.     if (prIII.DodajPrijavu(adel, danas))
  379.         cout << adel << "Dodat na spisak " << endl;
  380.     if (prIII.DodajPrijavu(marija, danas))
  381.         cout << marija << "Dodat na spisak " << endl;
  382.  
  383.     cout << crt;
  384.     // DodajRezultat - dodaje ocjenu koju je student ostvario na ispitu .Za dodavanje ocjene student je trebao prethodno biti prijavljen
  385.  
  386.     prIII.DodajRezultat(goran, 7);
  387.     prIII.DodajRezultat(Jasmin, 6);
  388.     prIII.DodajRezultat(adel, 8);
  389.     prIII.DodajRezultat(marija, 9);
  390.  
  391.  
  392.     ////Sortiraj - sortira rezultate ispita prema ocjeni
  393.  
  394.     prIII.Sortiraj();
  395.  
  396.     ////Zakljuci rezultate - dodaje ocjenu 5 svim studentima koji su prijavili ispit a nije im evidentirana ocjena
  397.     prIII.ZakljuciRezultate();
  398.     cout << prIII << endl;
  399.  
  400.     Ispit prIII_2(prIII);
  401.    
  402.     cout << prIII_2 << endl;
  403.    
  404.     system("PAUSE");
  405.  
  406. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement