Advertisement
neogz

pr2 Pacijenti v2 -full

Feb 12th, 2015
335
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 <vector>
  3. #include <string>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. char crt[] = { "-------------------------------------------------------\n" };
  8.  
  9. template<class T1, class T2>
  10. class Kolekcija{
  11.     T1 * _elementi1;
  12.     T2 * _elementi2;
  13.     int _trenutnoElemenata;
  14. public:
  15.     Kolekcija(){
  16.         _elementi1 = nullptr;
  17.         _elementi2 = nullptr;
  18.         _trenutnoElemenata = 0;
  19.     }
  20.     Kolekcija(const Kolekcija & obj){
  21.         _trenutnoElemenata = obj._trenutnoElemenata;
  22.        
  23.         _elementi1 = new T1[_trenutnoElemenata];
  24.         _elementi2 = new T2[_trenutnoElemenata];
  25.  
  26.         for (int i = 0; i < _trenutnoElemenata; i++){
  27.             _elementi1[i] = obj._elementi1[i];
  28.             _elementi2[i] = obj._elementi2[i];
  29.         }
  30.     }
  31.     ~Kolekcija(){
  32.         delete[]_elementi1;
  33.         delete[]_elementi2;
  34.         _elementi1 = nullptr;
  35.         _elementi2 = nullptr;
  36.     }
  37.     //
  38.     bool addElement(T1 e1, T2 e2){
  39.         for (int i = 0; i < _trenutnoElemenata; i++)
  40.             if (_elementi1[i] == e1 && _elementi2[i] == e2)
  41.                 return false;
  42.         T1 * temp1 = new T1[_trenutnoElemenata + 1];
  43.         T2 * temp2 = new T2[_trenutnoElemenata + 1];
  44.  
  45.         for (int i = 0; i < _trenutnoElemenata; i++){
  46.             temp1[i] = _elementi1[i];
  47.             temp2[i] = _elementi2[i];
  48.         }
  49.         delete[]_elementi1;
  50.         delete[]_elementi2;
  51.  
  52.         _elementi1 = temp1;
  53.         _elementi2 = temp2;
  54.  
  55.         _elementi1[_trenutnoElemenata] = e1;
  56.         _elementi2[_trenutnoElemenata] = e2;
  57.  
  58.         _trenutnoElemenata++;
  59.         return true;
  60.     }
  61.     bool removeElement(T1 element){
  62.         for (int i = 0; i < _trenutnoElemenata; i++){
  63.             if (_elementi1[i] == element){
  64.                 T1 * temp1 = new T1[_trenutnoElemenata - 1];
  65.                 T2 * temp2 = new T2[_trenutnoElemenata - 1];
  66.                 for (int j = 0; j < i; j++){
  67.                     temp1[j] = _elementi1[j];
  68.                     temp2[j] = _elementi2[j];
  69.                 }
  70.                 for (int j = i; j < _trenutnoElemenata-1; j++){
  71.                     temp1[j] = _elementi1[j+1];
  72.                     temp2[j] = _elementi2[j+1];
  73.                 }
  74.                 delete[]_elementi1;
  75.                 delete[]_elementi2;
  76.                 _elementi1 = temp1;
  77.                 _elementi2 = temp2;
  78.                 _trenutnoElemenata--;
  79.                 return true;
  80.             }
  81.         }
  82.         return false;
  83.     }
  84.     Kolekcija operator - (const Kolekcija & obj){
  85.         Kolekcija temp;
  86.         for (int i = 0; i < _trenutnoElemenata; i++){
  87.             temp.addElement(_elementi1[i], _elementi2[i]);
  88.         }
  89.         for (int i = 0; i < obj._trenutnoElemenata; i++){
  90.             temp.addElement(obj._elementi1[i], obj._elementi2[i]);
  91.         }
  92.         return temp;
  93.     }
  94.     //
  95.     int getTrenutno()const {
  96.         return _trenutnoElemenata;
  97.     }
  98.     T1 & getElement1(int id){
  99.         return _elementi1[id];
  100.     }
  101.     T2 & getElement2(int id){
  102.         return _elementi2[id];
  103.     }
  104.     friend ostream & operator << <>(ostream & cout, const Kolekcija<T1,T2> & obj);
  105. };
  106. class Datum{
  107.     int *_dan, *_mjesec, *_godina;
  108. public:
  109.     Datum(int d = 1, int m = 1, int g= 1900){
  110.         _dan = new int(d);
  111.         _mjesec = new int(m);
  112.         _godina = new int(g);
  113.     }
  114.     Datum(const Datum & obj){
  115.         _dan = new int(*obj._dan);
  116.         _mjesec = new int(*obj._mjesec);
  117.         _godina = new int(*obj._godina);
  118.     }
  119.     ~Datum(){
  120.         delete _dan;
  121.         delete _mjesec;
  122.         delete _godina;
  123.         _dan = nullptr;
  124.         _mjesec = nullptr;
  125.         _godina = nullptr;
  126.     }
  127.     // = == <<    <     >
  128.     bool operator == (const Datum & obj){
  129.         if (*_dan == *obj._dan && *_mjesec == *obj._mjesec && *_godina == *obj._godina) return true;
  130.         else return false;
  131.     }
  132.     Datum & operator =(const Datum & obj){
  133.         if (this != &obj){
  134.             delete _dan;
  135.             delete _mjesec;
  136.             delete _godina;
  137.             _dan = new int(*obj._dan);
  138.             _mjesec = new int(*obj._mjesec);
  139.             _godina = new int(*obj._godina);
  140.         }
  141.         return *this;
  142.     }
  143.     bool operator <(const Datum & obj){
  144.         if ((*_godina < *obj._godina) || (*_godina == *obj._godina && *_mjesec < *obj._mjesec) || (*_godina == *obj._godina && *_mjesec == *obj._mjesec && *_dan < *obj._dan)) return true;
  145.         else return false;
  146.        
  147.     }
  148.     bool operator >(const Datum & obj){
  149.         if (*this < obj) return false;
  150.         else return true;
  151.     }
  152.     friend ostream & operator <<(ostream & cout, const Datum & obj);
  153. };
  154. class Pregled{
  155.     char * _dijagnoza;
  156.     vector<string> _terapije;
  157.     Datum * _datumPregleda;
  158. public:
  159.     Pregled(char * dijagnoza, Datum datumPregleda){
  160.         int vel = strlen(dijagnoza) + 1;
  161.         _dijagnoza = new char[vel];
  162.         strcpy_s(_dijagnoza, vel, dijagnoza);
  163.  
  164.         _datumPregleda = new Datum(datumPregleda);
  165.     }
  166.     Pregled(const Pregled & obj){
  167.         int vel = strlen(obj._dijagnoza) + 1;
  168.         _dijagnoza = new char[vel];
  169.         strcpy_s(_dijagnoza, vel, obj._dijagnoza);
  170.  
  171.         _datumPregleda = new Datum(*obj._datumPregleda);
  172.         for (int i = 0; i < obj._terapije.size(); i++){
  173.             _terapije.push_back(obj._terapije.at(i));
  174.         }
  175.     }
  176.     ~Pregled(){
  177.         delete[] _dijagnoza;
  178.         delete _datumPregleda;
  179.         _dijagnoza = nullptr;
  180.         _datumPregleda = nullptr;
  181.     }
  182.     // ==  =  <<
  183.     bool operator == (const Pregled & obj){
  184.         if (strcmp(_dijagnoza, obj._dijagnoza) == 0 && _datumPregleda == obj._datumPregleda)return true;
  185.         else return false;
  186.     }
  187.     Pregled & operator =(const Pregled & obj){
  188.         if (this != &obj){
  189.             delete[] obj._dijagnoza;
  190.             delete   obj._datumPregleda;
  191.             int vel = strlen(obj._dijagnoza) + 1;
  192.             _dijagnoza = new char[vel];
  193.             strcpy_s(_dijagnoza, vel, obj._dijagnoza);
  194.  
  195.             _datumPregleda = new Datum(*obj._datumPregleda);
  196.  
  197.             _terapije.erase(_terapije.begin(), _terapije.end());
  198.             for (int i = 0; i < obj._terapije.size(); i++){
  199.                 _terapije.push_back(obj._terapije.at(i));
  200.             }
  201.  
  202.  
  203.         }
  204.         return *this;
  205.     }
  206.     friend ostream & operator <<(ostream & cout, Pregled & obj);
  207.     // -------------------------------------------------------------------
  208.     bool addTerapija(string terapija){
  209.  
  210.         vector<string>::iterator it = _terapije.begin();
  211.  
  212.         for (it; it!=_terapije.end(); it++)
  213.             if (*it == terapija)
  214.                 return false;
  215.  
  216.         // provjeriti 216
  217.         _terapije.push_back(terapija);
  218.        
  219.     }
  220.     bool removeTerapija(string terapija){
  221.  
  222.         vector<string>::iterator it = _terapije.begin();
  223.  
  224.         for (it; it!=_terapije.end(); it++)
  225.             if (*it == terapija){
  226.             _terapije.erase(it);
  227.  
  228.             // 2nd way
  229.             //_terapije.erase(_terapije.begin()+i);
  230.                 return true;
  231.             }
  232.                
  233.                
  234.     return false;
  235.     }
  236.     vector<string> & getTerapije(){
  237.         return _terapije;
  238.     }
  239.     Datum getDatumPregleda(){
  240.         return *_datumPregleda;
  241.     }
  242.    
  243. };
  244. class Pacijent{
  245. protected:
  246.     static int brojpacijenata;
  247.     const int _pacijentID;
  248.     char _imePrezime[20]; //  pacijenta
  249.     Kolekcija<string, Pregled *> * _preglediPacijenta;
  250.     // string za ime i prezime doktora
  251. public:
  252.     Pacijent(char * imePrezime):_pacijentID(++brojpacijenata){
  253.         strcpy_s(_imePrezime, 20, imePrezime);
  254.        
  255.         _preglediPacijenta = new Kolekcija < string, Pregled * > ;
  256.  
  257.     }
  258.     Pacijent(const Pacijent & obj) :_pacijentID(++brojpacijenata){
  259.         strcpy_s(_imePrezime, 20, obj._imePrezime);
  260.  
  261.         _preglediPacijenta = new Kolekcija < string, Pregled * >[obj._preglediPacijenta->getTrenutno()];
  262.         for (int i = 0; i < obj._preglediPacijenta->getTrenutno(); i++)
  263.             _preglediPacijenta->addElement(obj._preglediPacijenta->getElement1(i), obj._preglediPacijenta->getElement2(i));
  264.        
  265.     }
  266.     ~Pacijent(){
  267.         delete   _preglediPacijenta;
  268.         _preglediPacijenta = nullptr;
  269.     }
  270.  
  271.     friend ostream & operator << (ostream & cout, const Pacijent & obj);
  272.     Pregled & operator [](string terapija){
  273.         for (int i = 0; i < _preglediPacijenta->getTrenutno(); i++){
  274.             for (int j = _preglediPacijenta->getElement2(i)->getTerapije().size(); j > 0; j--){
  275.                 if (_preglediPacijenta->getElement2(i)->getTerapije().at(j) == terapija)
  276.                     return *_preglediPacijenta->getElement2(i);
  277.             }
  278.         }
  279.     }
  280.     bool addPregled(string doktor, Pregled & obj){
  281.         for (int i = 0; i < _preglediPacijenta->getTrenutno(); i++){
  282.             if (*_preglediPacijenta->getElement2(i) == obj){
  283.                 return false;
  284.             }
  285.         }
  286.  
  287.         _preglediPacijenta->addElement(doktor, &obj);
  288.         return true;
  289.     }
  290.     bool RemovePregledByDatum(const Datum & d){
  291.         bool uklonjen_bar_1 = false;
  292.         for (int i = 0; i < _preglediPacijenta->getTrenutno(); i++){
  293.             if (_preglediPacijenta->getElement2(i)->getDatumPregleda() < d){
  294.  
  295.                 // pregledan je datuma x koji je < od datuma d
  296.                 // ukloni
  297.                 _preglediPacijenta->removeElement(_preglediPacijenta->getElement1(i));
  298.                 i--; // ovo je kljuc !!!! hehehhe
  299.                 uklonjen_bar_1 = true;
  300.             }
  301.         }
  302.         if (uklonjen_bar_1 == true) return true;
  303.         else return false;
  304.     }
  305.     int RemovePregledByLjekar(string imedoktora){
  306.         int brojac = 0;
  307.         for (int i = 0; i < _preglediPacijenta->getTrenutno(); i++){
  308.             if (_preglediPacijenta->getElement1(i) == imedoktora){
  309.                 _preglediPacijenta->removeElement(imedoktora);
  310.                 i--; // hehhehe ;)
  311.                 brojac++;
  312.             }
  313.         }
  314.         return brojac;
  315.     }
  316. };
  317. //  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
  318. int Pacijent::brojpacijenata = 0;
  319. template<class T1, class T2>
  320. ostream & operator <<(ostream & cout, const Kolekcija<T1,T2> & obj){
  321.     cout << crt << "\t\t :: KOLEKCIJA :: \n" <<crt;
  322.     for (int i = 0; i < obj._trenutnoElemenata; i++){
  323.         cout << obj._elementi1[i] << "  -  " << obj._elementi2[i] << endl;
  324.     }
  325.     cout << crt;
  326.     return cout;
  327. }
  328. ostream & operator <<(ostream & cout, const Datum & obj){
  329.     cout << "[" << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina << "]" << endl;
  330.     return cout;
  331. }
  332. ostream & operator <<(ostream & cout, Pregled & obj){
  333.     cout << crt << "\t\t :: PREGLED :: \n" << crt;
  334.     cout << "DIJAGNOZA:      " << obj._dijagnoza << endl;
  335.     cout << "DATUM PREGLEDA: " << *obj._datumPregleda;
  336.     cout << "TERAPIJE: " << endl;
  337.  
  338.     sort(obj._terapije.begin(), obj._terapije.end());
  339.  
  340.     ostream_iterator<string> it(cout, "\n");
  341.     copy(obj._terapije.begin(), obj._terapije.end(), it);
  342.  
  343.     // 2nd way
  344.     //for (int i = 0; i < obj._terapije.size(); i++)
  345.     //  cout << obj._terapije.at(i) << endl;
  346.  
  347.     return cout;
  348. }
  349. ostream & operator << (ostream & cout, const Pacijent & obj){
  350.     cout << crt << "\t\t :: PACIJENT :: \n" << crt;
  351.     cout << "PACIJENT ID:     " << obj._pacijentID << "\nPACIJENT PODACI: " << obj._imePrezime << endl;
  352.     for (int i = 0; i < obj._preglediPacijenta->getTrenutno(); i++){
  353.         cout << crt <<"DOKTOR PODACI:  " << obj._preglediPacijenta->getElement1(i) << endl;
  354.         cout << *obj._preglediPacijenta->getElement2(i);
  355.     }
  356.     return cout;
  357. }
  358.  
  359. int main(){
  360.     // provjeriti 216 liniju
  361.     Datum d1(13, 1, 1995);
  362.     Datum d2(10, 4, 2015);
  363.     Datum d3(13, 9, 2015);
  364.     Datum d4(21, 12, 2015);
  365.  
  366.     Pregled p1("P1 Dijagnoza", d1);
  367.     Pregled p2("P2 Dijagnoza", d2);
  368.     Pregled p3("P3 Dijagnoza", d3);
  369.     Pregled p2c("P2 DIjagnoa kopija", d2);
  370.  
  371.     Pacijent nedim("Nedim Fejzic");
  372.     Pacijent micko("Mirnes Turkovic");
  373.  
  374.     //nedim.addPregled("DOKTOR1", p1);
  375.     nedim.addPregled("DOKTOR2", p2);
  376.     nedim.addPregled("DOKTOR2", p1);
  377.     // test remove by ljekar - RADI
  378.    
  379.  
  380.     // test remove by datum
  381.     nedim.addPregled("DOKTOR1", p1);
  382.     nedim.addPregled("DOKTOR1", p2);
  383.     nedim.addPregled("DOKTOR1", p3);
  384.     nedim.addPregled("DOKTOR1", p2c);
  385.  
  386.     cout << crt << "FUNKCIJA .RemovePregledByLjekar je uklonila: " << nedim.RemovePregledByLjekar("DOKTOR2") << " pregleda. \n" << crt;
  387.     nedim.RemovePregledByDatum(d4); // treba sve ukloniti
  388.     cout << nedim;
  389.    
  390.    
  391.  
  392.     system("pause > null");
  393.     return 0;
  394. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement