Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- char* crt = "\n----------------------------------------------\n";
- template<class T1, class T2>
- class Kolekcija {
- T1 * _elementi1;
- T2 * _elementi2;
- int _trenutnoElemenata;
- public:
- Kolekcija() {
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutnoElemenata = 0;
- }
- Kolekcija(const Kolekcija& obj) {
- _elementi1 = new T1[obj._trenutnoElemenata];
- _elementi2 = new T2[obj._trenutnoElemenata];
- for (int i = 0; i < obj._trenutnoElemenata; i++) {
- _elementi1[i] = obj._elementi1[i];
- _elementi2[i] = obj._elementi2[i];
- }
- _trenutnoElemenata = obj._trenutnoElemenata;
- }
- Kolekcija& operator=(const Kolekcija& obj) {
- if (this != &obj) {
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = new T1[obj._trenutnoElemenata];
- _elementi2 = new T2[obj._trenutnoElemenata];
- for (int i = 0; i < obj._trenutnoElemenata; i++) {
- _elementi1[i] = obj._elementi1[i];
- _elementi2[i] = obj._elementi2[i];
- }
- _trenutnoElemenata = obj._trenutnoElemenata;
- }
- return *this;
- }
- ~Kolekcija() {
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- }
- bool AddElement(T1 el1, T2 el2) {
- for (int i = 0; i < _trenutnoElemenata; i++){
- if (_elementi1[i] == el1 /*||_elementi2[i] == el2*/ )
- return false;
- }
- T1* temp1 = new T1[_trenutnoElemenata + 1];
- T2* temp2 = new T2[_trenutnoElemenata + 1];
- for (int i = 0; i < _trenutnoElemenata; i++) {
- temp1[i] = _elementi1[i];
- temp2[i] = _elementi2[i];
- }
- temp1[_trenutnoElemenata] = el1;
- temp2[_trenutnoElemenata] = el2;
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- _trenutnoElemenata++;
- return true;
- }
- void RemoveElement(int indeks) {
- if (indeks >= 0 && indeks < _trenutnoElemenata) {
- T1* temp1 = new T1[_trenutnoElemenata - 1];
- T2* temp2 = new T2[_trenutnoElemenata - 1];
- for (int i = 0, j = 0; i < _trenutnoElemenata; i++) {
- if (i != indeks)
- {
- temp1[j] = _elementi1[i];
- temp2[j++] = _elementi2[i];
- }
- }
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- _trenutnoElemenata--;
- }
- }
- friend ostream& operator<< <>(ostream&, Kolekcija&);
- int getTrenutno() const { return _trenutnoElemenata; }
- T1& GetElement1(int lokacija) {
- return _elementi1[lokacija];
- }
- T2& GetElement2(int lokacija) {
- return _elementi2[lokacija];
- }
- //T1& operator[](int index)
- //{return _elementi1[index]}
- };
- template<class T1, class T2>
- ostream& operator<< (ostream& COUT, Kolekcija<T1, T2>& obj) { //potrebno definisati tipove kada se radi van klase
- for (int i = 0; i < obj._trenutnoElemenata; i++) {
- COUT << obj._elementi1[i] << endl;//
- COUT << obj._elementi2[i] << endl;
- }
- return COUT;
- }
- 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) {
- delete _dan;
- delete _mjesec;
- delete _godina;
- _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 ostream& operator<<(ostream& COUT, Datum&obj) {
- COUT << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina;
- return COUT;
- }
- bool operator==(Datum& drugi) {
- return *_dan == *drugi._dan && *_mjesec == *drugi._mjesec && *_godina == *drugi._godina;
- }
- };
- class Student {
- char *_imePrezime;
- Datum *_datumRodjenja;
- public:
- Student(char *imePrezime = "---", Datum d = Datum()) {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- _datumRodjenja = new Datum(d);
- }
- Student(const Student&obj) {
- int size = strlen(obj._imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, obj._imePrezime);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- Student& operator=(const Student& obj) {
- if (this != &obj)
- {
- int size = strlen(obj._imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, obj._imePrezime);
- *_datumRodjenja = *obj._datumRodjenja;
- }
- return *this;
- }
- ~Student() {
- delete[] _imePrezime; _imePrezime = nullptr;
- delete _datumRodjenja;
- }
- bool operator==(Student & drugi) {
- return strcmp(_imePrezime, drugi._imePrezime) == 0;
- }
- friend ostream& operator<<(ostream& , Student &);
- };
- ostream& operator<<(ostream& COUT, Student &obj) {
- COUT << "Ime i prezime : " << obj._imePrezime << endl;
- COUT << "Datum rodjenja : " << *obj._datumRodjenja << endl;
- return COUT;
- }
- class Ispit {
- Datum _datumOdrzavanja;
- char *_opisIspita;
- Kolekcija<Student, Datum>_prijave;
- Kolekcija<Student, int> _rezultati;
- public:
- Ispit(char *opisIspita, Datum &d) {
- _datumOdrzavanja = d;
- int size = strlen(opisIspita) + 1;
- _opisIspita = new char[size];
- strcpy_s(_opisIspita, size, opisIspita);
- }
- Ispit(const Ispit& obj):_prijave(obj._prijave),_rezultati(obj._rezultati){
- _datumOdrzavanja = obj._datumOdrzavanja;
- int size = strlen(obj._opisIspita) + 1;
- _opisIspita = new char[size];
- strcpy_s(_opisIspita, size, obj._opisIspita);
- }
- Ispit& operator=(const Ispit & obj) {
- if (this!=&obj){
- delete[] _opisIspita; _opisIspita = nullptr;
- _datumOdrzavanja = obj._datumOdrzavanja;
- int size = strlen(obj._opisIspita) + 1;
- _opisIspita = new char[size];
- strcpy_s(_opisIspita, size, obj._opisIspita);
- }
- return *this;
- }
- bool DodajPrijavu(Student &s,Datum &d) {
- return _prijave.AddElement(s, d);
- }
- void DodajRezultat(Student& s, int ocjena) {
- for (int i = 0; i < _prijave.getTrenutno(); i++){
- if (s == _prijave.GetElement1(i)){
- _rezultati.AddElement(s, ocjena);
- return;
- }
- }
- }
- void Sortiraj() {
- for (int i = 0; i < _rezultati.getTrenutno(); i++){
- for (int j = 0; j < _rezultati.getTrenutno()-1; j++){
- if (_rezultati.GetElement2(j) > _rezultati.GetElement2(j+1))
- {
- swap(_rezultati.GetElement2(j), _rezultati.GetElement2(j + 1));
- }
- }
- }
- }
- void ZakljuciRezultate() {
- int index;
- for (int i = 0; i < _prijave.getTrenutno(); i++) {
- int index = -1;
- for (int j = 0; j < _rezultati.getTrenutno(); j++) {
- if (_prijave.GetElement1(i) == _rezultati.GetElement1(j))
- {
- index = i;
- break;
- }
- }
- if (index == -1){
- _rezultati.AddElement(_prijave.GetElement1(i), 5);
- }
- }
- }
- ~Ispit() {
- delete[] _opisIspita;
- _opisIspita = nullptr;
- }
- friend ostream& operator<<(ostream&, Ispit&);
- };
- ostream& operator<<(ostream& COUT, Ispit& obj) {
- /*COUT << "Datum odrzavanja : " << obj._datumOdrzavanja << endl;
- COUT << "Opis: " << obj._opisIspita << endl;
- COUT << "\n\n::Prijave:: \n\n";
- for (int i = 0; i <obj._prijave.getTrenutno(); i++){
- cout << obj._prijave.GetElement1(i) <<" ";
- cout << obj._prijave.GetElement2(i) << endl;
- }
- COUT << "\n::Rezultati:: \n\n";
- for (int j = 0; j < obj._rezultati.getTrenutno(); j++){
- cout << obj._rezultati.GetElement1(j) << " ";
- cout << obj._rezultati.GetElement2(j) << endl;
- }*/
- COUT << "Datum odrzavanja : " << obj._datumOdrzavanja << endl;
- COUT << "Opis: " << obj._opisIspita << endl;
- COUT << "Prijave: " << obj._prijave << endl;
- COUT << "Rezultati : " << obj._rezultati << endl;
- if (obj._prijave.getTrenutno() == obj._rezultati.getTrenutno())
- COUT << obj._rezultati;
- return COUT;
- }
- void main() {
- Kolekcija<int, double> kolekcija1;
- for (size_t i = 0; i < 5; i++)
- kolekcija1.AddElement(i, i + 0.3);
- cout << kolekcija1 << endl;
- cout << crt;
- Kolekcija<int, double>kolekcija2;
- kolekcija2 = kolekcija1;
- kolekcija1.RemoveElement(2);
- cout << kolekcija1 << crt;
- if (kolekcija1.getTrenutno() == kolekcija2.getTrenutno())
- cout << "Isti broj elemenata !";
- Kolekcija<int, double>kolekcija3(kolekcija2);
- cout << kolekcija3 << crt;
- cout << crt;
- Datum danas(18, 11, 2017);
- Datum sutra(danas);
- Datum prekosutra;
- prekosutra = danas;
- cout << danas << endl << sutra << endl << prekosutra << endl;
- Student denis("Denis Music", Datum(26, 11, 1990));
- Student Jasmin("Jasmin Azemovic", Datum(22, 11, 1990));
- Student goran;
- goran = Jasmin;
- Student adel("Adel Handzic", Datum(25, 8, 1990));
- Student marija("Marija Herceg", Datum(15, 6, 1990));
- Ispit prIII("PRIII::26.11.2017", danas);
- //DodajPrijavu -- dodaje novog studenta u listu prijavljenih za ispit, onemoguciti dodavanje dva ista studenta
- if (prIII.DodajPrijavu(denis, danas))
- cout << denis << "Dodat na spisak " << endl;
- if (prIII.DodajPrijavu(Jasmin, danas))
- cout << Jasmin << "Dodat na spisak " << endl;
- if (prIII.DodajPrijavu(goran, danas))
- cout << goran << "Dodat na spisak " << endl;
- if (prIII.DodajPrijavu(adel, danas))
- cout << adel << "Dodat na spisak " << endl;
- if (prIII.DodajPrijavu(marija, danas))
- cout << marija << "Dodat na spisak " << endl;
- cout << crt;
- // DodajRezultat - dodaje ocjenu koju je student ostvario na ispitu .Za dodavanje ocjene student je trebao prethodno biti prijavljen
- prIII.DodajRezultat(goran, 7);
- prIII.DodajRezultat(Jasmin, 6);
- prIII.DodajRezultat(adel, 8);
- prIII.DodajRezultat(marija, 9);
- ////Sortiraj - sortira rezultate ispita prema ocjeni
- prIII.Sortiraj();
- ////Zakljuci rezultate - dodaje ocjenu 5 svim studentima koji su prijavili ispit a nije im evidentirana ocjena
- prIII.ZakljuciRezultate();
- cout << prIII << endl;
- Ispit prIII_2(prIII);
- cout << prIII_2 << endl;
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement