Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- #include<string>
- #include<regex>
- #include<vector>
- template<class T1, class T2>
- class Kolekcija{
- T1 * _elementi1;
- T2 * _elementi2;
- int _trenutnoElemenata;
- public:
- Kolekcija()
- {
- _trenutnoElemenata = 0;
- _elementi1 = new T1[_trenutnoElemenata + 1];
- _elementi2 = new T2[_trenutnoElemenata + 1];
- }
- Kolekcija(const Kolekcija<T1, T2> &org)
- {
- _trenutnoElemenata = org._trenutnoElemenata;
- _elementi1 = new T1[_trenutnoElemenata + 1];
- _elementi2 = new T2[_trenutnoElemenata + 1];
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi1[i] = org._elementi1[i];
- _elementi2[i] = org._elementi2[i];
- }
- }
- ~Kolekcija()
- {
- delete[] _elementi1;
- delete[] _elementi2;
- }
- Kolekcija<T1, T2>& operator=(const Kolekcija<T1, T2>& org)
- {
- if (this != &org)
- {
- _trenutnoElemenata = org._trenutnoElemenata;
- delete[]_elementi1;
- delete[]_elementi2;
- _elementi1 = new T1[_trenutnoElemenata + 1];
- _elementi2 = new T2[_trenutnoElemenata + 1];
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi1[i] = org._elementi1[i];
- _elementi2[i] = org._elementi2[i];
- }
- }
- return *this;
- }
- bool AddElement(T1& ele1, T2& ele2)
- {
- if (_trenutnoElemenata == 0)
- {
- _elementi1[_trenutnoElemenata] = ele1;
- _elementi2[_trenutnoElemenata] = ele2;
- _trenutnoElemenata++;
- return true;
- }
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- if (_elementi1[i] == ele1 && _elementi2[i] == ele2)
- {
- 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];
- }
- delete[]_elementi1;
- delete[]_elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- _elementi1[_trenutnoElemenata] = ele1;
- _elementi2[_trenutnoElemenata] = ele2;
- _trenutnoElemenata++;
- return true;
- }
- bool RemoveElement(T1 &ele1)
- {
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- if (_elementi1[i] == ele1)
- {
- for (int j = i; j < _trenutnoElemenata - 1; j++)
- {
- _elementi1[j] = _elementi1[j + 1];
- _elementi2[j] = _elementi2[j + 1];
- }
- _trenutnoElemenata--;
- return true;
- }
- }
- return false;
- }
- Kolekcija<T1, T2> operator+(Kolekcija<T1, T2> &obj)
- {
- Kolekcija<T1, T2> temp;
- for (int i = 0; i < _trenutnoElemenata; i++)
- {
- temp.AddElement(_elementi1[i], _elementi2[i]);
- }
- for (int i = 0; i < obj._trenutnoElemenata; i++)
- {
- temp.AddElement(obj._elementi1[i], obj._elementi2[i]);
- }
- return temp;
- }
- int getTrenutno()
- {
- return _trenutnoElemenata;
- }
- T1 & getElement1(int indeks)
- {
- return _elementi1[indeks];
- }
- T2 & getElement2(int indeks)
- {
- return _elementi2[indeks];
- }
- void setElement2(int indeks, string unos)
- {
- _elementi2[indeks] += unos;
- }
- friend ostream & operator<< <>(ostream& cout, const Kolekcija<T1, T2>& obj);
- /*1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko prosiranje kolekcije prilikom dodavanja svakog novog elementa, te onemoguciti ponavljanje elemenata.
- 2. RemoveElement :: na osnovu parametra tipa T1 uklanja elemente iz kolekcije i smanjuje velicinu niza. Ukoliko je potrebno, prilikom uklanjanja elementa izvrsiti dealokaciju. Prilikom uklanjanja elemenata ocuvati redoslijed njihovog dodavanja.
- 3. operator+ :: vraca objekat tipa Kolekcija koji u sebi sadrzi sve elemente objekta koji je
- pozvao funkciju i objekta koji je proslijedjen kao parametar (takodjer tipa Kolekcija), pri cemu se elementi unutar kreirane kolekcije ne smiju ponavljati (ne smiju postojati dva ista elementa).*/
- };
- template<class T1,class T2>
- ostream & operator<< (ostream& cout, const Kolekcija<T1, T2>& obj)
- {
- for (int i = 0; i < obj._trenutnoElemenata; i++)
- {
- cout << obj._elementi1[i] << " : " << obj._elementi2[i] << endl;
- }
- return cout;
- }
- class Student{
- const int _brojIndeksa;
- static int brojIndeksa;
- string _ime;
- string _prezime;
- string _korisnickomIme;
- string _lozinka;
- /*1. potrebne funkcije
- NAPOMENE:
- 2. lozinka mora postovati sljedeca pravila:
- 2.a: sadrzi kombinaciju slova, brojeva i nekog od specijalnih znakova
- 2.b: ne smije sadrzavati niti ime niti prezime
- 2.c: sadrzi minimalno 6 znakova
- postivanje navedenih pravila se mora osigurati prije kreiranje objekta tipa Student*/
- public:
- Student(string ime="Temp",string prezime="Temp",string korisnickoIme="Temp"
- ,string lozinka="Temp2*or") :_brojIndeksa(brojIndeksa++)
- {
- _ime = ime;
- _prezime = prezime;
- _korisnickomIme = korisnickoIme;
- _lozinka = lozinka;
- }
- Student(const Student& org) :_brojIndeksa(org._brojIndeksa)
- {
- _ime = org._ime;
- _prezime = org._prezime;
- _korisnickomIme = org._korisnickomIme;
- _lozinka = org._lozinka;
- }
- Student& operator=(const Student& org)
- {
- if (this != &org)
- {
- _ime = org._ime;
- _prezime = org._prezime;
- _korisnickomIme = org._korisnickomIme;
- _lozinka = org._lozinka;
- }
- return *this;
- }
- bool operator==(Student& org)//porediti po imenu?
- {
- if (strcmp(_ime.c_str(), org._ime.c_str())==0)
- return true;
- return false;
- }
- friend ostream& operator<<(ostream& cout, const Student& obj);
- };
- int Student::brojIndeksa = 1;
- ostream& operator<<(ostream& cout, const Student& obj)
- {
- cout << "Ime: " << obj._ime << " Prezime: " << obj._prezime << endl;
- cout << "Broj indeksa: " << obj._brojIndeksa << " Korisnicko ime: " << obj._korisnickomIme << endl;
- cout << "lozinka: " << obj._lozinka << endl;
- return cout;
- }
- class Ispit{
- protected:
- char * _opis;//npr. PR2::Integralni::30.01.2015
- /*tip string u kolekciji sluzi kao napomena vezana za ponasanje studenta na ispitu gdje ce se evidentirati utisci dezurnog nastavnika npr. kasnio, dosao bez indeksa, izbacen zbog prepisivanja*/
- Kolekcija<Student, string> * _listaStudenata;
- /*1. AddStudent :: dodaje podatke o studentu koji je pristupio ispitu
- uz odgovarajucu napomenu (napomena nije obavezna).
- Studentu nije dozvoljeno da dva puta pristupi istom ispitu,
- a u slucaju da pokusa pristupiti automatski
- se dodaje adekvatna napomena (npr. ponovo pokusao pristupiti). */
- public:
- Ispit(char* opis = " ")
- {
- int vel = strlen(opis) + 1;
- _opis = new char[vel];
- strcpy_s(_opis, vel, opis);
- _listaStudenata = new Kolekcija<Student, string>();
- }
- ~Ispit()
- {
- delete[]_opis;
- _opis = NULL;
- delete _listaStudenata;
- _listaStudenata = NULL;
- }
- Ispit(const Ispit& org)
- {
- int vel = strlen(org._opis) + 1;
- _opis = new char[vel];
- strcpy_s(_opis, vel,org._opis);
- _listaStudenata = new Kolekcija<Student, string>;
- *_listaStudenata = *org._listaStudenata;
- }
- bool AddStudent(Student novi, string napomena=" ")
- {
- for (int i = 0; i < _listaStudenata->getTrenutno(); i++)
- {
- if (_listaStudenata->getElement1(i) == novi)
- {
- _listaStudenata->setElement2(i,",ponovo pokusao pristupiti");
- return false;
- }
- }
- _listaStudenata->AddElement(novi, napomena);
- return true;
- }
- Ispit& operator=(const Ispit &org)
- {
- if (this != &org)
- {
- int vel = strlen(org._opis) + 1;
- delete[] _opis;
- _opis = new char[vel];
- strcpy_s(_opis, vel, org._opis);
- delete _listaStudenata;
- _listaStudenata = new Kolekcija<Student, string>();
- *_listaStudenata = *org._listaStudenata;
- }
- return *this;
- }
- bool operator ==(Ispit & org)
- {
- if (strcmp(_opis, org._opis) == 0)
- return true;
- return false;
- }
- int getListaStudenataTrenutno()
- {
- return _listaStudenata->getTrenutno();
- }
- Kolekcija<Student, string>* getlistaStudenata()
- {
- return _listaStudenata;
- }
- friend ostream& operator<<(ostream& cout, Ispit& obj);
- };
- ostream& operator<<(ostream& cout, Ispit& obj)
- {
- cout << "Opis: " << obj._opis << endl;
- cout << "Lista studenata: " << endl;
- cout <<* obj._listaStudenata << endl;
- return cout;
- }
- class Predmet{
- char * _nazivPredmeta;
- char * _profesor;
- //1. potrebne funkcije
- public:
- Predmet(char* nazivPredmeta="Temp", char* profesor="Temp")
- {
- int vel = strlen(nazivPredmeta) + 1;
- _nazivPredmeta = new char[vel];
- strcpy_s(_nazivPredmeta, vel, nazivPredmeta);
- vel = strlen(profesor) + 1;
- _profesor = new char[vel];
- strcpy_s(_profesor, vel, profesor);
- }
- Predmet(const Predmet& org)
- {
- int vel = strlen(org._nazivPredmeta) + 1;
- _nazivPredmeta = new char[vel];
- strcpy_s(_nazivPredmeta, vel, org._nazivPredmeta);
- vel = strlen(org._profesor) + 1;
- _profesor = new char[vel];
- strcpy_s(_profesor, vel,org._profesor);
- }
- ~Predmet()
- {
- delete[] _nazivPredmeta;
- _nazivPredmeta = NULL;
- delete[] _profesor;
- _profesor = NULL;
- }
- Predmet& operator=(const Predmet& org)
- {
- if (this != &org)
- {
- int vel = strlen(org._nazivPredmeta) + 1;
- delete[]_nazivPredmeta;
- _nazivPredmeta = new char[vel];
- strcpy_s(_nazivPredmeta, vel, org._nazivPredmeta);
- vel = strlen(org._profesor) + 1;
- delete[]_profesor;
- _profesor = new char[vel];
- strcpy_s(_profesor, vel, org._profesor);
- }
- return*this;
- }
- bool operator==(Predmet& org)
- {
- if (strcmp(_nazivPredmeta, org._nazivPredmeta) == 0)
- return true;
- return false;
- }
- friend ostream& operator<<(ostream& cout, Predmet& obj);
- };
- ostream& operator<<(ostream& cout, Predmet& obj)
- {
- cout << "Naziv Predmeta: " << obj._nazivPredmeta << endl;
- cout << "Profesor: " << obj._profesor << endl;
- return cout;
- }
- class SkolskaGodina{
- char * _skolskaGodina;//npr.2014/2015
- Kolekcija<Predmet, Ispit> * _odrzaniIspiti;
- public:
- SkolskaGodina(char* skolskaGodina="2000")
- {
- int vel = strlen(skolskaGodina) + 1;
- _skolskaGodina = new char[vel];
- strcpy_s(_skolskaGodina, vel, skolskaGodina);
- _odrzaniIspiti = new Kolekcija < Predmet, Ispit > ;
- }
- SkolskaGodina(const SkolskaGodina& org)
- {
- int vel = strlen(org._skolskaGodina) + 1;
- _skolskaGodina = new char[vel];
- strcpy_s(_skolskaGodina, vel, org._skolskaGodina);
- _odrzaniIspiti = new Kolekcija < Predmet, Ispit >;
- *_odrzaniIspiti = *org._odrzaniIspiti;
- }
- ~SkolskaGodina()
- {
- delete _odrzaniIspiti;
- delete[] _skolskaGodina;
- _skolskaGodina = NULL;
- }
- bool AddIspit(Predmet a,Ispit b)
- {
- _odrzaniIspiti->AddElement(a, b);
- return true;
- }
- bool RemoveIspit(Ispit& b)
- {
- for (int i = 0; i < _odrzaniIspiti->getTrenutno(); i++)
- {
- if (_odrzaniIspiti->getElement2(i) == b)
- {
- if (_odrzaniIspiti->getElement2(i).getListaStudenataTrenutno() != 0)
- {
- return false;
- }
- (*_odrzaniIspiti).RemoveElement(_odrzaniIspiti->getElement1(i));
- return true;
- }
- }
- return false;
- }
- int GetBrojIzlazakaByPredmet(Student a, Predmet b)
- {
- int brojac = 0;
- for (int i = 0; i < _odrzaniIspiti->getTrenutno(); i++)
- {
- if (_odrzaniIspiti->getElement1(i) == b)
- {
- for (int j = 0; j < _odrzaniIspiti->getElement2(i).getListaStudenataTrenutno();j++)
- {
- if (_odrzaniIspiti->getElement2(i).getlistaStudenata()->getElement1(j) == a)
- {
- brojac++;
- }
- }
- }
- }
- return brojac;
- }
- vector<Student> operator()(string napomena)
- {
- vector<Student> sa_napomenom;
- for (int i = 0; i < _odrzaniIspiti->getTrenutno(); i++)
- {
- for (int j = 0; j < _odrzaniIspiti->getElement2(i).getListaStudenataTrenutno(); j++)
- {
- if (strstr(_odrzaniIspiti->getElement2(i).getlistaStudenata()->getElement2(j).c_str(), napomena.c_str()) != 0)
- {
- sa_napomenom.push_back(_odrzaniIspiti->getElement2(i).getlistaStudenata()->getElement1(j));
- }
- }
- }
- return sa_napomenom;
- }
- friend ostream& operator<<(ostream& cout, SkolskaGodina& obj);
- /*1. AddIspit::dodate podatke o odrzanom ispitu na odredjenom predmetu
- 2. RemoveIspit::uklanja podatke o odrzanom ispitu, ali samo pod uslovom da tom ispitu nije pristupio niti jedan student
- 3. GetBrojIzlazakaByPredmet::vraca podatak o tome koliko je puta trazeni student izasao na ispit iz odredjenog predmeta u toku skolske godine
- 4. operator()::vraca sve studente koji u napomeni posjeduju sadrzaj koji je proslijedjen kao parametar (npr.listu svih studenata koji u napomeni posjeduju sadrzaj "bez indeksa")
- 5. operator<<::ispisuje sve dostupne podatke o odrzanim ispitima i studentima koji su im pristupili*/
- };
- ostream& operator<<(ostream& cout, SkolskaGodina& obj)
- {
- cout << "Skolska Godina: " << obj._skolskaGodina << endl;
- cout << "Odrzani ispiti: " << endl;
- cout <<* obj._odrzaniIspiti;
- return cout;
- }
- void main(){
- //izbjegavajte koristenje vlastitog imena i prezimena
- //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti na objektu tipa SkolskaGodina
- Student marko("Marko", "Markic", "Muke", "Temp3;ds");
- Student hasim("Hasim", "Hasimovic", "Haso", "ERes2*ds");
- Student kogi("Kim", "Krimic", "Kenju", "trDF5/as");
- Student sem("Sem", "Semic", "Semi", "trDF5/as");
- Ispit parcijalni("PR2::Integralni::30.01.2015");
- parcijalni.AddStudent(marko, "sve udure");
- /*parcijalni.AddStudent(hasim, "Nije ovjeren semestar");
- parcijalni.AddStudent(kogi);
- parcijalni.AddStudent(hasim);
- parcijalni.AddStudent(sem, "ovjeren semestar");*/
- Ispit integralni("Integrala");
- cout << ".........................." << endl;
- //cout << parcijalni << endl;
- cout << ".........................." << endl;
- Predmet prog("Uvod u baze podataka", "Jasmin Azemovic");
- Predmet prog2("Baze podataka", "Serif Azemovic");
- Predmet prog3("Statistika", "Larisa Dedovic");
- //cout << prog << prog2 << prog3;
- cout << ".........................." << endl;
- SkolskaGodina trenutna("2014/2015");
- trenutna.AddIspit(prog, parcijalni);
- trenutna.AddIspit(prog2, parcijalni);
- trenutna.AddIspit(prog3, parcijalni);
- trenutna.AddIspit(prog, integralni);
- cout << trenutna;
- cout << ".........................." << endl;
- trenutna.RemoveIspit(integralni);
- cout << trenutna;
- cout << ".........................." << endl;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement