rijads

Untitled

Aug 28th, 2014
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.29 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #include<algorithm>
  5. using namespace std;
  6. int id = 0;
  7. template<class T1, class T2>
  8. class Kolekcija{
  9. private:
  10.     T1 * _elementi1;
  11.     T2 * _elementi2;
  12.     int * _max;
  13.     int * _trenutnoElemenata;
  14. public:
  15.     Kolekcija(){
  16.         _max = new int(3);
  17.         _trenutnoElemenata = new int(0);
  18.         _elementi1 = new T1[*_max];
  19.         _elementi2 = new T2[*_max];
  20.     }
  21.     ~Kolekcija(){
  22.         delete _max;
  23.         _max = NULL;
  24.         delete _trenutnoElemenata;
  25.         _trenutnoElemenata = NULL;
  26.         delete[]_elementi1;
  27.         _elementi1 = NULL;
  28.         delete[]_elementi2;
  29.         _elementi2 = NULL;
  30.     }
  31.  
  32.     //1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko
  33.     // prosiranje kolekcije ukoliko broj elemenata dostigne trenutni maksimum, te onemoguciti
  34.     // ponavljanje elemenata. U zavisnosti od uspjesnosti operacije, funkcija vraca true ili false
  35.     bool AddElement(T1 el1, T2 el2){
  36.         if (ponavlja(el1)==false){
  37.             if (*_trenutnoElemenata == *_max)
  38.                 prosiri();
  39.             _elementi1[*_trenutnoElemenata] = el1;
  40.             _elementi2[*_trenutnoElemenata] = el2;
  41.             (*_trenutnoElemenata)++;
  42.             return true;
  43.         }
  44.         return false;
  45.     }
  46.  
  47.     //2. RemoveElement :: na osnovu parametra tipa T1 uklanja elemente iz kolekcije. Ukoliko je
  48.     // potrebno,prilikom uklanjanja elementa izvrsiti dealokaciju. Onemoguciti pojavljivanje
  49.     // neinicijaliziranih elemenata, te ocuvati redoslijed dodavanja elemenata. U zavisnosti od
  50.     // uspjesnosti operacije, funkcija vraca true ili false
  51.     bool RemoveElement(T1 el){
  52.         for (int i = 0; i < *_trenutnoElemenata; i++)
  53.         {
  54.             if (_elementi1[i] == el){
  55.                 for (int j = i; j < *_trenutnoElemenata; j++){
  56.                     _elementi1[j] = _elementi1[j + 1];
  57.                     _elementi2[j] = _elementi2[j + 1];
  58.                 }
  59.                 (*_trenutnoElemenata)--;
  60.                 return true;
  61.             }
  62.         }
  63.         reutrn false;
  64.     }
  65.  
  66.     //3. operator -= :: uklanja sve elemente iz kolekcije koji su identicni onima koje posjeduje
  67.     // drugi objekat tipa Kolekcija koji je primljen kao parametar. Funkcija vraca broj uklonjenih elemenata
  68.  
  69.     //DODATNE
  70.     //Provjerava da li se ponavlja
  71.     bool ponavlja(T1 el){
  72.         for (int i = 0; i < *_trenutnoElemenata; i++)
  73.         {
  74.             if (_elementi1[i] == el)
  75.                 return true;
  76.         }
  77.         reutrn false;
  78.     }
  79.  
  80.     void prosiri(){
  81.         T1 *temp1;
  82.         T2 *temp2;
  83.         (*_max) += 3;
  84.         temp1 = new T1[*_max];
  85.         temp2 = new T2[*_max];
  86.         for (int i = 0; i < *_trenutnoElemenata; i++)
  87.         {
  88.             temp1[i] = _elementi1[i];
  89.             temp2[i] = _elementi2[i];
  90.         }
  91.         delete[]_elementi1;
  92.         delete[]_elementi2;
  93.         _elementi1 = temp1;
  94.         _elementi2 = temp2;
  95.     }
  96.     //ISPIS
  97.     friend ostream &  operator<< (ostream &, Kolekcija<T1, T2> &);
  98. };
  99.  
  100. template<class T1, class T2>
  101. ostream &  operator<< (ostream & out, Kolekcija<T1, T2> & obj) {
  102.     return out;
  103. }
  104.  
  105. class Datum{
  106. private:
  107.     int _dan, _mjesec, _godina;
  108. public:
  109.     Datum(int dan = 1, int mjesec = 1, int godina = 1900){
  110.         _dan = dan;
  111.         _mjesec = mjesec;
  112.         _godina = godina;
  113.     }
  114.     //1. potrebne funkcije
  115.     friend ostream &operator<<(ostream &, Datum);
  116. };
  117. ostream &operator<<(ostream &out, Datum d){
  118.     out << d._dan << "." << d._mjesec << "." << d._godina;
  119.     return out;
  120. }
  121.  
  122. class Pregled{
  123. private:
  124.     vector<char *> _terapije;
  125.     bool * _zakazanNoviTermin; //u slucaju da je pacijent narucen na kontrolni pregled
  126.     Datum _datumPregleda;
  127. public:
  128.     Pregled(){
  129.         _zakazanNoviTermin = new bool;
  130.         *_zakazanNoviTermin = false;
  131.     }
  132.     Pregled(Datum dat){
  133.         _zakazanNoviTermin = new bool;
  134.         *_zakazanNoviTermin = false;
  135.         _datumPregleda = dat;
  136.     }
  137.     ~Pregled(){
  138.         delete _zakazanNoviTermin;
  139.         _zakazanNoviTermin = NULL;
  140.     }
  141.     //1. potrebne funkcije
  142.     //2. Info :: ispisuje sve podatke o pregledu. Koristiti ostream_iterator. Prije ispisa
  143.     // sve terapije sortirati
  144.     void info(){
  145.         cout << "\nDatum pregleda: " << _datumPregleda << endl;
  146.         if ((*_zakazanNoviTermin) == true)
  147.             cout << "Novi termin je zakazan";
  148.         else
  149.             cout << "Novi termin nije zakazan";
  150.         sort(_terapije.begin(), _terapije.end());
  151.         cout << endl;
  152.         for (vector<char *>::iterator it = _terapije.begin(); it != _terapije.end(); it++){
  153.             cout << "Terapija: " << *it << endl;
  154.         }
  155.     }
  156.     //3. AddTerapija :: dodaje novu terapiju. Onemoguciti ponavljanje terapija. Koristiti iteratore
  157.     void AddTerapija(char* t){
  158.         bool dodaj = true;
  159.         for (vector<char *>::iterator it = _terapije.begin(); it != _terapije.end(); it++){
  160.             if (strcmp(*it, t) == 0)
  161.                 dodaj = false;
  162.         }
  163.         if (dodaj)
  164.             _terapije.push_back(t);
  165.     }
  166.     //4. RemoveTerapija :: uklanja sve terapije koje u sebi sadrze rijec primljenu kao parametar.
  167.     // Koristiti iteratore
  168.     void RemoveTerapija(char* t){
  169.         //int i = 0;
  170.         vector<char *>::iterator it = _terapije.begin();
  171.         for (int i = 0; i <= _terapije.size(); i++)
  172.         {
  173.             int j = 0;
  174.             for (it = _terapije.begin(); it != _terapije.end(); it++){
  175.                 if (strstr(*it, t) != NULL){
  176.                     cout << *it << endl;
  177.                     _terapije.erase(_terapije.begin() + j);
  178.                     cout << _terapije.size() << endl;
  179.                     i = 0;
  180.                     break;
  181.                 }
  182.                 j++;
  183.             }
  184.             //sort(_terapije.begin(), _terapije.end());
  185.         }
  186.     }
  187. };
  188. class Pacijent{
  189. protected:
  190.     const int _pacijentID;
  191.     char _imePrezime[20];
  192.     //tip string je za podatke o postavljenoj dijagnozi (jedna dijagnoza moze imati vise terapija)
  193.     //objekat tipa Pregled je za podatke o terapijama, te o zakazanom pregledu
  194.     Kolekcija<string, Pregled> * _preglediPacijenta;
  195. public:
  196.     Pacijent(char*ime="<Nepoznato>"):_pacijentID(++id){
  197.         strcpy(_imePrezime, ime);
  198.         _preglediPacijenta = new Kolekcija < string, Pregled >() ;
  199.  
  200.     }
  201.     ~Pacijent(){
  202.         delete _preglediPacijenta;
  203.         _preglediPacijenta = NULL;
  204.     }
  205.  
  206.     //1. operator [] :: vraca Pregled kod koga je postavljena dijagnoza koja je proslijedjena kao
  207.     // parametar. Dakle, operatorska funkcija prima dijagnozu kao parametar
  208.     //2. AddPregled :: dodaje podatke o novom pregledu pacijenta. Nije dozvoljeno dodati dva
  209.     // identicna pregleda. U zavisnosti od uspjesnosti operacije, funkcija vraca true ili false
  210.     //3. RemovePregledByDatum :: na osnovu primljenog parametra (tipa Datum) uklanja podatke o svim pregledima
  211.     // koji su obavljeni odredjenog datuma. U zavisnosti od uspjesnosti operacije, funkcija vraca true ili
  212.     // false
  213.     //4. RemovePregledByTerapija :: na osnovu primljenog parametra (terapije) uklanja podatke o svim
  214.     // pregledima kod koji je propisana trazena terapija. U zavisnosti od uspjesnosti operacije,
  215.     // funkcija vraca true ili false
  216.     //5. operator<< :: ispisuje vrijednosti svih atributa klase
  217.     friend ostream &operator<<(ostream &, Pacijent);
  218. };
  219. ostream &operator<<(ostream &out, Pacijent p){
  220.     out << "Pacijent ID: " << p._pacijentID << endl << "Ime i prezime pacijenta: " << p._imePrezime << endl;
  221.     return out;
  222. }
  223. void main(){
  224.     //izbjegavajte koristenje vlastitog imena i prezimena.
  225.     //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti na objektu tipa Pacijent
  226.     cout << "\n---TESTIRANJE DATUMA" << endl;
  227.     Datum dat1;
  228.     Datum dat2(6, 06, 2014);
  229.     cout << dat1 << endl << dat2;
  230.     cout << "\n---TESTIRANJE PREGLEDA" << endl;
  231.     Pregled pr(dat2);
  232.     pr.AddTerapija("Prva terapija");
  233.     pr.AddTerapija("Druga terapija");
  234.     pr.AddTerapija("1 terapija");
  235.     pr.AddTerapija("2 terapija");
  236.     pr.AddTerapija("10 terapija");
  237.     pr.AddTerapija("1 terapija");
  238.     pr.RemoveTerapija("1");
  239.     pr.RemoveTerapija("Prva");
  240.     pr.RemoveTerapija("2");
  241.     pr.info();
  242.     cout << "\n---TESTIRANJE Pacijenta i kolekcije" << endl;
  243.     Pacijent p;
  244.     cout << p;
  245.     system("pause>0");
  246. }
Advertisement
Add Comment
Please, Sign In to add comment