blavorov_list

PR3KomunikacijePostavka

Sep 5th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.83 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. char *crt = "\n-------------------------------------------\n";
  6. enum stringFormat { DDMMGG, DDMMGGGG, DDMMGGSSMM, DDMMGGGGSSMM };
  7. enum prikazPoruka { SVE_PORUKE, SAKRIJ_POBRISANE, PRIKAZI_SAMO_POBRISANE };
  8. vector<string> nedozvoljeneRijeci;
  9. /*
  10. DDMMGG - 29.8.17
  11. DDMMGGGG - 29.8.2017
  12. DDMMGGGGSSMM - 29.8.2017 10:15
  13. */
  14.  
  15. template<class T1, class T2>
  16. class Kolekcija {
  17.     T1 * _elementi1;
  18.     T2 * _elementi2;
  19.     int * _trenutno;
  20. public:
  21.     Kolekcija()
  22.     {
  23.         _elementi1 = nullptr;
  24.         _elementi2 = nullptr;
  25.         _trenutno = new int(0);
  26.     }
  27.  
  28.     Kolekcija & operator=(Kolekcija<T1, T2> & orig)
  29.     {
  30.         if (this != &orig)
  31.         {
  32.             delete[]_elementi1;
  33.             delete[]_elementi2;
  34.  
  35.             _elementi1 = new T1[*orig._trenutno];
  36.             _elementi2 = new T2[*orig._trenutno];
  37.             *_trenutno = *orig._trenutno;
  38.  
  39.             for (int i = 0; i < *_trenutno; i++)
  40.             {
  41.                 _elementi1[i] = orig._elementi1[i];
  42.                 _elementi2[i] = orig._elementi2[i];
  43.             }
  44.         }
  45.         return *this;
  46.     }
  47.  
  48.     bool AddElement(T1 elem1, T2 elem2)
  49.     {
  50.         T1 * temp1 = new T1[*_trenutno + 1];
  51.         T2 * temp2 = new T2[*_trenutno + 1];
  52.  
  53.         for (int i = 0; i < *_trenutno; i++) {
  54.             temp1[i] = _elementi1[i];
  55.             temp2[i] = _elementi2[i];
  56.         }
  57.  
  58.         delete[] _elementi1;
  59.         delete[] _elementi2;
  60.  
  61.         _elementi1 = temp1;
  62.         _elementi2 = temp2;
  63.  
  64.         _elementi1[*_trenutno] = elem1;
  65.         _elementi2[*_trenutno] = elem2;
  66.         (*_trenutno)++;
  67.         return true;
  68.     }
  69.     ~Kolekcija()
  70.     {
  71.         delete[]_elementi1; _elementi1 = nullptr;
  72.         delete[]_elementi2; _elementi2 = nullptr;
  73.         delete _trenutno;   _trenutno = nullptr;
  74.     }
  75.  
  76.     T1 * getElementi1Pok() { return _elementi1; }
  77.     T2 * getElementi2Pok() { return _elementi2; }
  78.     T1 & getElement1(int lokacija) { return _elementi1[lokacija]; }
  79.     T2 & getElement2(int lokacija) { return _elementi2[lokacija]; }
  80.     int getTrenutno() { return *_trenutno; }
  81.  
  82.     friend ostream & operator<<(ostream & COUT, Kolekcija<T1, T2> & obj)
  83.     {
  84.         for (size_t i = 0; i < *obj._trenutno; i++)
  85.         {
  86.             COUT << obj.getElement1(i) << " " << obj.getElement2(i) << endl;
  87.         }
  88.         return COUT;
  89.     }
  90. };
  91. class DatumVrijeme {
  92.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  93. public:
  94.     DatumVrijeme(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 0, int minuti = 0) {
  95.         _dan = new int(dan);
  96.         _mjesec = new int(mjesec);
  97.         _godina = new int(godina);
  98.         _sati = new int(sati);
  99.         _minuti = new int(minuti);
  100.     }      
  101.     ~DatumVrijeme() {
  102.         delete _dan; _dan = nullptr;
  103.         delete _mjesec; _mjesec = nullptr;
  104.         delete _godina; _godina = nullptr;
  105.         delete _sati; _sati = nullptr;
  106.         delete _minuti; _minuti = nullptr;
  107.     }
  108.     friend ostream & operator<< (ostream & COUT, DatumVrijeme & obj) {
  109.         COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << " " << *obj._sati << ":" << *obj._minuti << endl;
  110.         return COUT;
  111.     }
  112. };
  113. class Poruka {
  114.     string _posiljalac;
  115.     string _primalac;
  116.     string _sadrzaj;
  117.     DatumVrijeme _vrijeme;
  118. public:
  119.     Poruka(string posiljalac, string primalac, string sadrzaj, DatumVrijeme vrijeme) :_vrijeme(vrijeme)
  120.     {
  121.         _posiljalac = posiljalac;
  122.         _primalac = primalac;
  123.         _sadrzaj = sadrzaj;
  124.     }  
  125.     friend ostream & operator<< (ostream & COUT, Poruka & obj) {
  126.         COUT << "(" << obj._vrijeme << ") " << obj._posiljalac << " -> ";
  127.         COUT << obj._sadrzaj;
  128.         return COUT;
  129.     }
  130.     string getPrimalac() { return _primalac; }
  131.     string getPosiljalac() { return _posiljalac; }
  132.     string getSadrzaj() { return _sadrzaj; }
  133. };
  134. class Komunikacija {
  135.     string _naslov;
  136.     int _ocjena; //ocjena komunikacije 1 - 5 se automatski izracunava
  137.     Kolekcija<Poruka, bool> _poruke;//bool se odnosi na podatak da li je poruka pobrisana tj. nece biti vidljiva u prikazu ukoliko se drugacije ne navede
  138. public:
  139.     Komunikacija(string naslov) {
  140.         _naslov = naslov;
  141.         _ocjena = -1;
  142.     }
  143.     friend ostream & operator<< (ostream & COUT, Komunikacija & obj) {
  144.         COUT << "(" << obj._ocjena << ") " << obj._nazivGrupre << " -> ";
  145.         for (size_t i = 0; i < obj._poruke.size(); i++)
  146.         {
  147.             COUT << obj._poruke[i] << endl;
  148.         }
  149.         return COUT;
  150.     }
  151.     Kolekcija<Poruka, bool> * getPoruke() { return &_poruke; }
  152.     int getOcjena() { return _ocjena; }
  153.     string getNaslov() { return _naslov; }
  154. };
  155.  
  156. class Korisnik {
  157.     string _korisnickoIme;
  158.     char * _imePrezime;
  159.     //char * - se odnosi na naziv predmeta gdje æe se èuvati kompletna komunikacija sa nastavnim osobljem na odreðenom predmetu
  160.     Kolekcija<char *, Komunikacija> _komunikacija;
  161. public:
  162.     Korisnik(char * korisnickoIme, char * imePrezime)
  163.     {
  164.         int vel = strlen(imePrezime) + 1;
  165.         _imePrezime = new char[vel];
  166.         strcpy_s(_imePrezime, vel, imePrezime);
  167.         _korisnickoIme = korisnickoIme;
  168.     }
  169.     Korisnik(Korisnik & original) :_komunikacija(original._komunikacija)
  170.     {
  171.         int vel = strlen(original._imePrezime) + 1;
  172.         _imePrezime = new char[vel];
  173.         strcpy_s(_imePrezime, vel, original._imePrezime);
  174.         _korisnickoIme = original._korisnickoIme;
  175.     }
  176.  
  177.     ~Korisnik()
  178.     {
  179.         delete[] _imePrezime; _imePrezime = nullptr;
  180.     }
  181.     friend ostream & operator<< (ostream &COUT, Korisnik &obj)
  182.     {
  183.         COUT << obj._imePrezime << endl << obj._komunikacija << endl;
  184.         return COUT;
  185.     }
  186.     Kolekcija<char*, Komunikacija> * GetKomunikacija() { return &_komunikacija; }
  187.     string getKorisnickoIme() { return _korisnickoIme; }
  188. };
  189. void main()
  190. {
  191.  
  192.     /****************************************************************************
  193.     1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  194.     2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR ÆE BITI OZNACENO KAO "RE"
  195.     3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJEÈILO GUBLJENJE URAÐENOG ZADATKA
  196.     4. PROGRAMSKI CODE SE TAKOÐER NALAZI U FAJLU CODE.TXT
  197.     5. NAZIVI FUNKCIJA, TE BROJ I TIP PARAMETARA MORAJU BITI IDENTIÈNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U, OSIM U SLUÈAJU DA POSTOJI ADEKVATAN RAZLOG ZA NJIHOVU MODIFIKACIJU. OSTALE, POMOÆNE FUNKCIJE MOŽETE IMENOVATI I DODAVATI PO ŽELJI.
  198.     6. IZUZETAK BACITE U FUNKCIJAMA U KOJIMA JE TO NAZNAÈENO.
  199.     ****************************************************************************/
  200.  
  201.  
  202.     /*rijeèi koje su zabranjene u komunikaciji*/
  203.     nedozvoljeneRijeci.push_back("ubiti");
  204.     nedozvoljeneRijeci.push_back("mrzim");
  205.     nedozvoljeneRijeci.push_back("rat");
  206.  
  207.     DatumVrijeme temp,
  208.         datum19062017_1015(19, 6, 2017, 10, 15),
  209.         datum19062017_1020(19, 6, 2017, 10, 20),
  210.         datum19062017_1021(19, 6, 2017, 10, 21),
  211.         datum19062017_1030(19, 6, 2017, 10, 30);
  212.  
  213.     cout << datum19062017_1015.ToString(DDMMGGGG) << endl;//vraca string: 19.6.2017
  214.     cout << datum19062017_1015.ToString(DDMMGGGGSSMM) << endl;//vraca string: 19.6.2017 10:15
  215.  
  216.  
  217.     const int max = 3;
  218.     Korisnik * korisnici[max];
  219.     korisnici[0] = new Korisnik("jasmin", "Jasmin Azemovic");
  220.     korisnici[1] = new Korisnik("adel", "Adel Handzic");
  221.     korisnici[2] = new Korisnik("denis", "Denis Music");
  222.        
  223.     /*
  224.     sve poruke se cuvaju u komunikaciji posiljaoca i primaoca tako da u svakom momentu oba ucesnika u komunikaciji posjeduju kompletnu historiju poruka. poruke se grupisu na osnovu naslova, pa ce poruke pod naslovom "Sastanak" izmedju dva korisnika sadrzavati sve poruke koje su razmijenjene na tu temu
  225.     u slucaju da posiljalac ili primalac ne postoje funkcija treba baciti izuzetak sa odgovarajucom porukom. takodjer, koristeci regex sve poruke koje sadrze neku od zabranjenih rijeci trebaju biti oznacene kao
  226.     */
  227.     PosaljiPoruku(korisnici, max, "Sastanak",
  228.         korisnici[0]->getKorisnickoIme(), korisnici[1]->getKorisnickoIme(),
  229.         "Danas imamo sastanak u 10h!", datum19062017_1015);
  230.    
  231.     PosaljiPoruku(korisnici, max, "Sastanak",
  232.         korisnici[1]->getKorisnickoIme(), korisnici[0]->getKorisnickoIme(),
  233.         "Naravno, vidimo se u sali za sastanke!", datum19062017_1020);
  234.  
  235.     PosaljiPoruku(korisnici, max, "Sastanak",
  236.         korisnici[0]->getKorisnickoIme(), korisnici[1]->getKorisnickoIme(),
  237.         "Sa sobom ponesi radni materijal!", datum19062017_1021);
  238.    
  239.     /*ispisuje sve poruke koje je korisnik razmijenio pod naslovom definisanim parametrom. ispis komunikacije
  240.     treba biti organizovan po datumu na nacin da se prvo prikaze datum, a nakon toga sve poruke koje su razmijenjene tog datuma.
  241.     Na mjestima pobrisanih poruka prikazati tekst "PORUKA IZBRISANA"
  242.     */
  243.     korisnici[0]->PrikaziKomunikacijuPoNaslovu("Sastanak", SVE_PORUKE);
  244.  
  245.     /*funkcija prikazuje sve poruke sa korisnikom cije korisnicko ime je definisano parametrom, te vraca ukupan broj (razmijenjenih poruka sa tim korisnikom)*/
  246.     int ukupnoPoruka = korisnici[0]->PrikaziKomunikacijuSaKorisnikom("adel");
  247.    
  248.     /*formira ocjenu na nivou komunikacije na nacin da izracunava prosjecno vrijeme odgovora drugog ucesnika izrazeno u minutama i to prema sljedecoj skali
  249.     prosjek > 20 minuta  = ocjena 1
  250.     prosjek > 15 minuta  = ocjena 2
  251.     prosjek > 10 minuta  = ocjena 3
  252.     prosjek > 5  minuta  = ocjena 4
  253.     prosjek < 2  minuta  = ocjena 5
  254.     */
  255.     korisnici[0]->OcijeniKomunikaciju("Sastanak");
  256.  
  257.     for (size_t i = 0; i < max; i++)
  258.     {
  259.         delete korisnici[i];
  260.         korisnici[i] = nullptr;
  261.     }
  262.  
  263.     system("PAUSE");
  264. }
Add Comment
Please, Sign In to add comment