Advertisement
neogz

Bhtelecom v3

Feb 11th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6. char crt[] = {"----------------------------------------\n"};
  7.  
  8. //  \(^-^)/  \(^-^)/  \(^-^)/  \(^-^)/    KLASE      \(^-^)/  \(^-^)/  \(^-^)/  \(^-^)/
  9.  
  10. template<class T1>
  11. class Kolekcija{
  12.     T1 * _elementi1;
  13.     int _trenutnoElemenata;
  14. public:
  15.     Kolekcija(){
  16.         _elementi1 = nullptr;
  17.         _trenutnoElemenata = 0;
  18.     }
  19.     Kolekcija(const Kolekcija & obj){
  20.         _elementi1 = new T1[obj._trenutnoElemenata];
  21.         for (int i = 0; i < obj._trenutnoElemenata; i++)
  22.             _elementi1[i] = obj._elementi1[i];
  23.         _trenutnoElemenata = obj._trenutnoElemenata;
  24.     }
  25.     ~Kolekcija(){
  26.         delete[]_elementi1;
  27.         _elementi1 = nullptr;
  28.     }
  29.     // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
  30.     bool operator += (const T1 & element){
  31.         // operator+= :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko prosiranje kolekcije,
  32.         // te onemoguciti ponavljanje elemenata.U zavisnosti od uspjesnosti operacije funkcija vraca true ili false.
  33.         for (int i = 0; i < _trenutnoElemenata; i++)
  34.             if (_elementi1[i] == element) return false;
  35.  
  36.         T1 * temp = new T1[_trenutnoElemenata + 1];
  37.         for (int i = 0; i < _trenutnoElemenata; i++)
  38.             temp[i] = _elementi1[i];
  39.  
  40.         delete[]_elementi1;
  41.         _elementi1 = temp;
  42.         _elementi1[_trenutnoElemenata] = element;
  43.         _trenutnoElemenata++;
  44.         return true;
  45.     }
  46.     bool operator -= (const T1 & element){
  47.         // operator-= ::na osnovu parametra tipa T1 uklanja element iz kolekcije.Ukoliko je potrebno, prilikom
  48.         //  uklanjanja elementa izvrsiti dealokaciju.
  49.         // Onemoguciti pojavljivanje neinicijaliziranih elemenata, te  ocuvati redoslijed dodavanja elemenata.
  50.         // U zavisnosti od uspjesnosti operacije, funkcija vraca true ili false
  51.  
  52.         for (int i = 0; i < _trenutnoElemenata; i++)
  53.             if (_elementi1[i] == element){
  54.             T1 * temp = new T1[_trenutnoElemenata - 1];
  55.             for (int j = 0; j < i; j++)                     temp[j] = _elementi1[j];
  56.             for (int j = i; j < _trenutnoElemenata - 1; j++)    temp[j] = _elementi1[j + 1];
  57.             delete[]_elementi1;
  58.             _elementi1 = temp;
  59.             _trenutnoElemenata--;
  60.             return true;
  61.  
  62.             return false; // nije nasao
  63.  
  64.             }
  65.         /*1. potrebne funkcije
  66.         2. operator+= :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko prosiranje kolekcije,
  67.         te onemoguciti ponavljanje elemenata. U zavisnosti od uspjesnosti operacije funkcija vraca true ili
  68.         false.
  69.         3. operator-= :: na osnovu parametra tipa T1 uklanja element iz kolekcije. Ukoliko je potrebno, prilikom
  70.         uklanjanja elementa izvrsiti dealokaciju. Onemoguciti pojavljivanje neinicijaliziranih elemenata, te
  71.         ocuvati redoslijed dodavanja elemenata. U zavisnosti od uspjesnosti operacije, funkcija vraca true ili
  72.         false*/
  73.  
  74.     };
  75.     friend ostream & operator << <>(ostream & cout, const Kolekcija<T1> & obj);
  76.     // geteri
  77.     int getTrenutno()const{
  78.         return _trenutnoElemenata;
  79.     }
  80.     T1 & getElement(int id){
  81.         return _elementi1[id];
  82.     }
  83.  
  84. };
  85. class Datum{
  86.     int * _dan, *_mjesec, *_godina;
  87. public:
  88.     Datum(int d=1, int m=1, int g=1900){
  89.         _dan = new int(d);
  90.         _mjesec = new int(m);
  91.         _godina = new int(g);
  92.     }
  93.     Datum(const Datum & obj){
  94.         _dan = new int(*obj._dan);
  95.         _mjesec = new int(*obj._mjesec);
  96.         _godina = new int(*obj._godina);
  97.     }
  98.     ~Datum(){
  99.         delete _dan;
  100.         delete _mjesec;
  101.         delete _godina;
  102.         _dan = nullptr;
  103.         _mjesec = nullptr;
  104.         _godina = nullptr;
  105.     }
  106.     // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
  107.     Datum & operator = (const Datum & obj){
  108.         if (this != &obj){
  109.             delete _dan;
  110.             delete _mjesec;
  111.             delete _godina;
  112.  
  113.             _dan = new int(*obj._dan);
  114.             _mjesec = new int(*obj._mjesec);
  115.             _godina = new int(*obj._godina);
  116.         }
  117.         return *this;
  118.     }
  119.     bool operator == (const Datum & obj){
  120.         if (*_dan == *obj._dan && *_mjesec == *obj._mjesec && *_godina == *obj._godina) return true;
  121.         return false;
  122.     }
  123.     friend ostream & operator <<(ostream & cout, const Datum & obj);
  124.     bool operator > (const Datum & obj){
  125.         if ((*_godina > *obj._godina) || (*_godina == *obj._godina && *_mjesec > *obj._mjesec) || (*_godina == *obj._godina && *_mjesec == *obj._mjesec && *_dan > *obj._dan)) return true;
  126.         else return false;
  127.     }
  128.     bool operator <(const Datum & obj){
  129.         if (*this > obj) return false;
  130.         return true;
  131.     }
  132. };
  133. class TelefonskiPrikljucak{
  134.     Datum _datumPrikljucenja;
  135.     char* _telefonskiBroj;//036 111 222
  136.     bool _aktivan; //u slucaju da se broj viลกe ne koristi
  137. public:
  138.     TelefonskiPrikljucak(Datum datumpPrikljucenja, char * telefonskiBroj, bool aktivan) :_datumPrikljucenja(datumpPrikljucenja){
  139.         //([0-9]{3])([ -])?([0-9]{3])([ -])?([0-9]{3])
  140.         int vel = strlen(telefonskiBroj) + 1;
  141.         _telefonskiBroj = new char[vel];
  142.         strcpy_s(_telefonskiBroj, vel, telefonskiBroj);
  143.         _aktivan = aktivan;
  144.     }
  145.     TelefonskiPrikljucak(const TelefonskiPrikljucak & obj) : _datumPrikljucenja(obj._datumPrikljucenja){
  146.         int vel = strlen(obj._telefonskiBroj) + 1;
  147.         _telefonskiBroj = new char[vel];
  148.         strcpy_s(_telefonskiBroj, vel, obj._telefonskiBroj);
  149.         _aktivan = obj._aktivan;
  150.     }
  151.     ~TelefonskiPrikljucak(){
  152.         delete[]_telefonskiBroj;
  153.         _telefonskiBroj = nullptr;
  154.     }
  155.     // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
  156.     TelefonskiPrikljucak & operator = (const TelefonskiPrikljucak & obj){
  157.         if (this != &obj){
  158.             _datumPrikljucenja = obj._datumPrikljucenja;
  159.             delete[] _telefonskiBroj;
  160.             int vel = strlen(obj._telefonskiBroj) + 1;
  161.             _telefonskiBroj = new char[vel];
  162.             strcpy_s(_telefonskiBroj, vel, obj._telefonskiBroj);
  163.             _aktivan = obj._aktivan;
  164.  
  165.         }
  166.         return *this;
  167.     }
  168.     bool operator == (const TelefonskiPrikljucak & obj){
  169.         if (strcmp(_telefonskiBroj, obj._telefonskiBroj) == 0) return true;
  170.         return false;
  171.     }
  172.     friend ostream & operator <<(ostream & cout, const TelefonskiPrikljucak & obj);
  173.     //geteri
  174.     char * getTelefonskiBroj()const{
  175.         return _telefonskiBroj;
  176.     }
  177.     Datum getDatum(){
  178.         return _datumPrikljucenja;
  179.     }
  180. };
  181. class TelecomKorisnik{
  182.     char * _imePrezimeKorisnika;
  183.     Kolekcija<TelefonskiPrikljucak> * _telefonskiPrikljucci;
  184.     vector<float> _dugovi;//odnosi se na neizmirene dugove na svakom telefonskom prikljucku
  185. public:
  186.     TelecomKorisnik(char * imePrezimeKorisnika){
  187.         int vel = strlen(imePrezimeKorisnika) + 1;
  188.         _imePrezimeKorisnika = new char[vel];
  189.         strcpy_s(_imePrezimeKorisnika, vel, imePrezimeKorisnika);
  190.  
  191.         _telefonskiPrikljucci = new Kolekcija < TelefonskiPrikljucak > ;
  192.  
  193.     }
  194.     TelecomKorisnik(const TelecomKorisnik & obj){
  195.         int vel = strlen(obj._imePrezimeKorisnika) + 1;
  196.         _imePrezimeKorisnika = new char[vel];
  197.         strcpy_s(_imePrezimeKorisnika, vel, obj._imePrezimeKorisnika);
  198.  
  199.         _dugovi = obj._dugovi;
  200.  
  201.         _telefonskiPrikljucci = new Kolekcija<TelefonskiPrikljucak>[obj._telefonskiPrikljucci->getTrenutno()];
  202.         for (int i = 0; i < obj._telefonskiPrikljucci->getTrenutno(); i++)
  203.             _telefonskiPrikljucci[i] = obj._telefonskiPrikljucci->getElement[i];
  204.     }
  205.     ~TelecomKorisnik(){
  206.         delete[]_imePrezimeKorisnika;
  207.         delete _telefonskiPrikljucci;
  208.         _imePrezimeKorisnika = nullptr;
  209.         _telefonskiPrikljucci = nullptr;
  210.     }
  211.     // ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^ ^-^
  212.     TelefonskiPrikljucak * operator [] (char * brojtelefona){
  213.         for (int i = 0; i < _telefonskiPrikljucci->getTrenutno(); i++)
  214.             if (strcmp(_telefonskiPrikljucci->getElement(i).getTelefonskiBroj(), brojtelefona) == 0) return &_telefonskiPrikljucci->getElement(i);
  215.        
  216.         return NULL;
  217.     }
  218.     bool addTelefonskiPrikljucak(const TelefonskiPrikljucak & obj){
  219.         //  2. AddTelefonskiPrikljucak :: dodaje podatke o novom telefonskom priljucku korisnika.
  220.         //  Nije dozvoljeno dodati dva identicna telefonska broja.Prilikom dodavanja novog prikljucka iznos duga treba biti
  221.         //  postavljen na 0. U zavisnosti od uspjesnosti operacije, funkcija vraca true ili false.
  222.         for (int i = 0; i < _telefonskiPrikljucci->getTrenutno(); i++)
  223.             if (strcmp(_telefonskiPrikljucci->getElement(i).getTelefonskiBroj(), obj.getTelefonskiBroj()) == 0) return false;
  224.  
  225.         _telefonskiPrikljucci->operator+=(obj);
  226.         _dugovi.push_back(0);
  227.         return true;
  228.        
  229.     }
  230.     int RemoveTelefonskiPrikljucakByDatum(const Datum & d1, const Datum & d2){
  231.         int brojac = 0;
  232.         for (int i = 0; i < _telefonskiPrikljucci->getTrenutno(); i++){
  233.             if (_telefonskiPrikljucci->getElement(i).getDatum() > d1 && _telefonskiPrikljucci->getElement(i).getDatum() < d2){
  234.                 // veci od d1 i manji od d2 znaci u opsegu je, sada provjeriti dug
  235.                 if (_dugovi.at(i) == 0){
  236.                     // nula je dug na lokaciji od prikljucka moze se brisat
  237.                     vector<float>::iterator  it= _dugovi.begin() + 1;
  238.                     _dugovi.erase(it);
  239.                     _telefonskiPrikljucci->operator-=(_telefonskiPrikljucci->getElement(i));
  240.                     brojac++;
  241.                 }
  242.             }
  243.         }
  244.         return brojac;
  245.     }
  246.     friend ostream & operator <<(ostream & cout, const TelecomKorisnik & obj);
  247.     // get
  248.     Kolekcija<TelefonskiPrikljucak> & getKolekcija(){
  249.         return *_telefonskiPrikljucci;
  250.     }
  251. };
  252.  
  253. //  \(^-^)/  \(^-^)/  \(^-^)/  \(^-^)/    <<     \(^-^)/  \(^-^)/  \(^-^)/  \(^-^)/  
  254.  
  255. template<class T1>
  256. ostream & operator <<(ostream & cout, const Kolekcija<T1> & obj){
  257.     cout << crt << "\t ::KOLEKCIJA:: \n" << crt;
  258.     for (int i = 0; i < obj._trenutnoElemenata; i++)
  259.         cout << obj._elementi1[i] << endl;
  260.     return cout;
  261. }
  262. ostream & operator <<(ostream & cout, const Datum & obj){
  263.     cout << "[" << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina << "]" << endl;
  264.     return cout;
  265. }
  266. ostream & operator <<(ostream & cout, const TelefonskiPrikljucak & obj){
  267.     cout << crt << "\t ::TELEFONSKI PRIKLJUCAK:: \n" << crt;
  268.     cout << "DATUM PRIKLJUCENJA: " << obj._datumPrikljucenja << endl;
  269.     cout << "TELEFONSKI BROJ:    " << obj._telefonskiBroj << endl;
  270.     if (obj._aktivan)   cout << "AKTIVAN:             DA" << endl;
  271.     else cout << "AKTIVAN:             NE" << endl;
  272.     return cout;
  273. }
  274. ostream & operator <<(ostream & cout, const TelecomKorisnik & obj){
  275.     cout << crt << "\t ::TELEFONSKI PRIKLJUCAK:: \n" << crt;
  276.     cout << "KORISNIK: " << obj._imePrezimeKorisnika << endl;
  277.     for (int i = 0; i < obj._telefonskiPrikljucci->getTrenutno(); i++){
  278.         cout << obj._telefonskiPrikljucci->getElement(i) << endl;
  279.         cout << obj._dugovi.at(i) << endl;
  280.     }
  281. }
  282.  
  283. void PretragaPoBroju(Kolekcija<TelecomKorisnik> BHTelecomKorisnici, char * trazeniBroj){
  284.     for (int i = 0; i < BHTelecomKorisnici.getTrenutno(); i++){
  285.         for (int j = 0; j < BHTelecomKorisnici.getElement(i).getKolekcija().getTrenutno(); j++){   
  286.             if (strcmp(BHTelecomKorisnici.getElement(i).getKolekcija().getElement(j).getTelefonskiBroj(), trazeniBroj) == 0){
  287.                 cout << BHTelecomKorisnici.getElement(i);
  288.             }
  289.         }
  290.     }
  291. }
  292.  
  293. //  \(^-^)/  \(^-^)/  \(^-^)/  \(^-^)/  MAIN  \(^-^)/  \(^-^)/  \(^-^)/  \(^-^)/  
  294.  
  295. int main(){
  296.     // mrsko mi
  297.     cout << "Puno srece u radu..." << endl;
  298.     cout << "Hvala profesore.\n";
  299.     Kolekcija<TelecomKorisnik> BHTelecomKorisnici;
  300.  
  301.     system("pause > null");
  302.     return 0;
  303. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement