Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- char crt[] = {"----------------------------------------\n"};
- // \(^-^)/ \(^-^)/ \(^-^)/ \(^-^)/ KLASE \(^-^)/ \(^-^)/ \(^-^)/ \(^-^)/
- template<class T1>
- class Kolekcija{
- T1 * _elementi1;
- int _trenutnoElemenata;
- public:
- Kolekcija(){
- _elementi1 = nullptr;
- _trenutnoElemenata = 0;
- }
- Kolekcija(const Kolekcija & obj){
- _elementi1 = new T1[obj._trenutnoElemenata];
- for (int i = 0; i < obj._trenutnoElemenata; i++)
- _elementi1[i] = obj._elementi1[i];
- _trenutnoElemenata = obj._trenutnoElemenata;
- }
- ~Kolekcija(){
- delete[]_elementi1;
- _elementi1 = nullptr;
- }
- // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
- bool operator += (const T1 & element){
- // operator+= :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko prosiranje kolekcije,
- // te onemoguciti ponavljanje elemenata.U zavisnosti od uspjesnosti operacije funkcija vraca true ili false.
- for (int i = 0; i < _trenutnoElemenata; i++)
- if (_elementi1[i] == element) return false;
- T1 * temp = new T1[_trenutnoElemenata + 1];
- for (int i = 0; i < _trenutnoElemenata; i++)
- temp[i] = _elementi1[i];
- delete[]_elementi1;
- _elementi1 = temp;
- _elementi1[_trenutnoElemenata] = element;
- _trenutnoElemenata++;
- return true;
- }
- bool operator -= (const T1 & element){
- // operator-= ::na osnovu parametra tipa T1 uklanja element iz kolekcije.Ukoliko je potrebno, prilikom
- // uklanjanja elementa izvrsiti dealokaciju.
- // Onemoguciti pojavljivanje neinicijaliziranih elemenata, te ocuvati redoslijed dodavanja elemenata.
- // U zavisnosti od uspjesnosti operacije, funkcija vraca true ili false
- for (int i = 0; i < _trenutnoElemenata; i++)
- if (_elementi1[i] == element){
- T1 * temp = new T1[_trenutnoElemenata - 1];
- for (int j = 0; j < i; j++) temp[j] = _elementi1[j];
- for (int j = i; j < _trenutnoElemenata - 1; j++) temp[j] = _elementi1[j + 1];
- delete[]_elementi1;
- _elementi1 = temp;
- _trenutnoElemenata--;
- return true;
- return false; // nije nasao
- }
- /*1. potrebne funkcije
- 2. operator+= :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko prosiranje kolekcije,
- te onemoguciti ponavljanje elemenata. U zavisnosti od uspjesnosti operacije funkcija vraca true ili
- false.
- 3. operator-= :: na osnovu parametra tipa T1 uklanja element iz kolekcije. Ukoliko je potrebno, prilikom
- uklanjanja elementa izvrsiti dealokaciju. Onemoguciti pojavljivanje neinicijaliziranih elemenata, te
- ocuvati redoslijed dodavanja elemenata. U zavisnosti od uspjesnosti operacije, funkcija vraca true ili
- false*/
- };
- friend ostream & operator << <>(ostream & cout, const Kolekcija<T1> & obj);
- // geteri
- int getTrenutno()const{
- return _trenutnoElemenata;
- }
- T1 & getElement(int id){
- return _elementi1[id];
- }
- };
- class Datum{
- int * _dan, *_mjesec, *_godina;
- public:
- Datum(int d=1, int m=1, int g=1900){
- _dan = new int(d);
- _mjesec = new int(m);
- _godina = new int(g);
- }
- Datum(const Datum & obj){
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- }
- ~Datum(){
- delete _dan;
- delete _mjesec;
- delete _godina;
- _dan = nullptr;
- _mjesec = nullptr;
- _godina = nullptr;
- }
- // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
- 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;
- }
- bool operator == (const Datum & obj){
- if (*_dan == *obj._dan && *_mjesec == *obj._mjesec && *_godina == *obj._godina) return true;
- return false;
- }
- friend ostream & operator <<(ostream & cout, const Datum & obj);
- bool operator > (const Datum & obj){
- if ((*_godina > *obj._godina) || (*_godina == *obj._godina && *_mjesec > *obj._mjesec) || (*_godina == *obj._godina && *_mjesec == *obj._mjesec && *_dan > *obj._dan)) return true;
- else return false;
- }
- bool operator <(const Datum & obj){
- if (*this > obj) return false;
- return true;
- }
- };
- class TelefonskiPrikljucak{
- Datum _datumPrikljucenja;
- char* _telefonskiBroj;//036 111 222
- bool _aktivan; //u slucaju da se broj viลกe ne koristi
- public:
- TelefonskiPrikljucak(Datum datumpPrikljucenja, char * telefonskiBroj, bool aktivan) :_datumPrikljucenja(datumpPrikljucenja){
- //([0-9]{3])([ -])?([0-9]{3])([ -])?([0-9]{3])
- int vel = strlen(telefonskiBroj) + 1;
- _telefonskiBroj = new char[vel];
- strcpy_s(_telefonskiBroj, vel, telefonskiBroj);
- _aktivan = aktivan;
- }
- TelefonskiPrikljucak(const TelefonskiPrikljucak & obj) : _datumPrikljucenja(obj._datumPrikljucenja){
- int vel = strlen(obj._telefonskiBroj) + 1;
- _telefonskiBroj = new char[vel];
- strcpy_s(_telefonskiBroj, vel, obj._telefonskiBroj);
- _aktivan = obj._aktivan;
- }
- ~TelefonskiPrikljucak(){
- delete[]_telefonskiBroj;
- _telefonskiBroj = nullptr;
- }
- // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
- TelefonskiPrikljucak & operator = (const TelefonskiPrikljucak & obj){
- if (this != &obj){
- _datumPrikljucenja = obj._datumPrikljucenja;
- delete[] _telefonskiBroj;
- int vel = strlen(obj._telefonskiBroj) + 1;
- _telefonskiBroj = new char[vel];
- strcpy_s(_telefonskiBroj, vel, obj._telefonskiBroj);
- _aktivan = obj._aktivan;
- }
- return *this;
- }
- bool operator == (const TelefonskiPrikljucak & obj){
- if (strcmp(_telefonskiBroj, obj._telefonskiBroj) == 0) return true;
- return false;
- }
- friend ostream & operator <<(ostream & cout, const TelefonskiPrikljucak & obj);
- //geteri
- char * getTelefonskiBroj()const{
- return _telefonskiBroj;
- }
- Datum getDatum(){
- return _datumPrikljucenja;
- }
- };
- class TelecomKorisnik{
- char * _imePrezimeKorisnika;
- Kolekcija<TelefonskiPrikljucak> * _telefonskiPrikljucci;
- vector<float> _dugovi;//odnosi se na neizmirene dugove na svakom telefonskom prikljucku
- public:
- TelecomKorisnik(char * imePrezimeKorisnika){
- int vel = strlen(imePrezimeKorisnika) + 1;
- _imePrezimeKorisnika = new char[vel];
- strcpy_s(_imePrezimeKorisnika, vel, imePrezimeKorisnika);
- _telefonskiPrikljucci = new Kolekcija < TelefonskiPrikljucak > ;
- }
- TelecomKorisnik(const TelecomKorisnik & obj){
- int vel = strlen(obj._imePrezimeKorisnika) + 1;
- _imePrezimeKorisnika = new char[vel];
- strcpy_s(_imePrezimeKorisnika, vel, obj._imePrezimeKorisnika);
- _dugovi = obj._dugovi;
- _telefonskiPrikljucci = new Kolekcija<TelefonskiPrikljucak>[obj._telefonskiPrikljucci->getTrenutno()];
- for (int i = 0; i < obj._telefonskiPrikljucci->getTrenutno(); i++)
- _telefonskiPrikljucci[i] = obj._telefonskiPrikljucci->getElement[i];
- }
- ~TelecomKorisnik(){
- delete[]_imePrezimeKorisnika;
- delete _telefonskiPrikljucci;
- _imePrezimeKorisnika = nullptr;
- _telefonskiPrikljucci = nullptr;
- }
- // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
- TelefonskiPrikljucak * operator [] (char * brojtelefona){
- for (int i = 0; i < _telefonskiPrikljucci->getTrenutno(); i++)
- if (strcmp(_telefonskiPrikljucci->getElement(i).getTelefonskiBroj(), brojtelefona) == 0) return &_telefonskiPrikljucci->getElement(i);
- return NULL;
- }
- bool addTelefonskiPrikljucak(const TelefonskiPrikljucak & obj){
- // 2. AddTelefonskiPrikljucak :: dodaje podatke o novom telefonskom priljucku korisnika.
- // Nije dozvoljeno dodati dva identicna telefonska broja.Prilikom dodavanja novog prikljucka iznos duga treba biti
- // postavljen na 0. U zavisnosti od uspjesnosti operacije, funkcija vraca true ili false.
- for (int i = 0; i < _telefonskiPrikljucci->getTrenutno(); i++)
- if (strcmp(_telefonskiPrikljucci->getElement(i).getTelefonskiBroj(), obj.getTelefonskiBroj()) == 0) return false;
- _telefonskiPrikljucci->operator+=(obj);
- _dugovi.push_back(0);
- return true;
- }
- int RemoveTelefonskiPrikljucakByDatum(const Datum & d1, const Datum & d2){
- int brojac = 0;
- for (int i = 0; i < _telefonskiPrikljucci->getTrenutno(); i++){
- if (_telefonskiPrikljucci->getElement(i).getDatum() > d1 && _telefonskiPrikljucci->getElement(i).getDatum() < d2){
- // veci od d1 i manji od d2 znaci u opsegu je, sada provjeriti dug
- if (_dugovi.at(i) == 0){
- // nula je dug na lokaciji od prikljucka moze se brisat
- vector<float>::iterator it= _dugovi.begin() + 1;
- _dugovi.erase(it);
- _telefonskiPrikljucci->operator-=(_telefonskiPrikljucci->getElement(i));
- brojac++;
- }
- }
- }
- return brojac;
- }
- friend ostream & operator <<(ostream & cout, const TelecomKorisnik & obj);
- // get
- Kolekcija<TelefonskiPrikljucak> & getKolekcija(){
- return *_telefonskiPrikljucci;
- }
- };
- // \(^-^)/ \(^-^)/ \(^-^)/ \(^-^)/ << \(^-^)/ \(^-^)/ \(^-^)/ \(^-^)/
- template<class T1>
- ostream & operator <<(ostream & cout, const Kolekcija<T1> & obj){
- cout << crt << "\t ::KOLEKCIJA:: \n" << crt;
- for (int i = 0; i < obj._trenutnoElemenata; i++)
- cout << obj._elementi1[i] << endl;
- return cout;
- }
- ostream & operator <<(ostream & cout, const Datum & obj){
- cout << "[" << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina << "]" << endl;
- return cout;
- }
- ostream & operator <<(ostream & cout, const TelefonskiPrikljucak & obj){
- cout << crt << "\t ::TELEFONSKI PRIKLJUCAK:: \n" << crt;
- cout << "DATUM PRIKLJUCENJA: " << obj._datumPrikljucenja << endl;
- cout << "TELEFONSKI BROJ: " << obj._telefonskiBroj << endl;
- if (obj._aktivan) cout << "AKTIVAN: DA" << endl;
- else cout << "AKTIVAN: NE" << endl;
- return cout;
- }
- ostream & operator <<(ostream & cout, const TelecomKorisnik & obj){
- cout << crt << "\t ::TELEFONSKI PRIKLJUCAK:: \n" << crt;
- cout << "KORISNIK: " << obj._imePrezimeKorisnika << endl;
- for (int i = 0; i < obj._telefonskiPrikljucci->getTrenutno(); i++){
- cout << obj._telefonskiPrikljucci->getElement(i) << endl;
- cout << obj._dugovi.at(i) << endl;
- }
- }
- void PretragaPoBroju(Kolekcija<TelecomKorisnik> BHTelecomKorisnici, char * trazeniBroj){
- for (int i = 0; i < BHTelecomKorisnici.getTrenutno(); i++){
- for (int j = 0; j < BHTelecomKorisnici.getElement(i).getKolekcija().getTrenutno(); j++){
- if (strcmp(BHTelecomKorisnici.getElement(i).getKolekcija().getElement(j).getTelefonskiBroj(), trazeniBroj) == 0){
- cout << BHTelecomKorisnici.getElement(i);
- }
- }
- }
- }
- // \(^-^)/ \(^-^)/ \(^-^)/ \(^-^)/ MAIN \(^-^)/ \(^-^)/ \(^-^)/ \(^-^)/
- int main(){
- // mrsko mi
- cout << "Puno srece u radu..." << endl;
- cout << "Hvala profesore.\n";
- Kolekcija<TelecomKorisnik> BHTelecomKorisnici;
- system("pause > null");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement