Advertisement
limun11

4.1 PrinterModifikacija-Rjesenje

Jun 9th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 20.45 KB | None | 0 0
  1. /*
  2. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA, U SUPROTNOM SE RAD NECE BODOVATI
  3. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  4. 3. KREIRAJTE .DOC FAJL SA VASIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJESENJA VASIH ZADATAKA. NE PREDAVATI .CPP FAJLOVE
  5. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORISTENJE HELP-A
  6. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VASA RJESENJA)
  7. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URADJENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  8. */
  9. #include<iostream>
  10. #include <tuple>
  11.  
  12. using namespace std;
  13.  
  14. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  15. #pragma warning(disable:4996)
  16.  
  17. const char *crt = "\n-------------------------------------------\n";
  18.  
  19. enum vrstaDokumenta { PDF, DOC, TXT, HTML };
  20. const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
  21.  
  22.  
  23. enum vrstaAktivnosti { KREIRANJE, DODAVANJE, ZAMJENA, PRINTANJE };
  24. const char * vrstaAktivnostiChar[] = { "KREIRANJE", "DODAVANJE", "ZAMJENA", "PRINTANJE" };
  25.  
  26. const int BROJ_ZNAKOVA_PO_STRANICI = 30;
  27.  
  28. struct DatumVrijeme
  29. {
  30.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  31.     void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1) {
  32.         _dan = new int(dan);
  33.         _mjesec = new int(mjesec);
  34.         _godina = new int(godina);
  35.         _sati = new int(sati);
  36.         _minuti = new int(minuti);
  37.     }
  38.     void Dealociraj() {
  39.         delete _dan; _dan = nullptr;
  40.         delete _mjesec; _mjesec = nullptr;
  41.         delete _godina; _godina = nullptr;
  42.         delete _sati; _sati = nullptr;
  43.         delete _minuti; _minuti = nullptr;
  44.     }
  45.     void Ispis() {
  46.         cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
  47.     }
  48.  
  49.     bool provjeraDatuma(DatumVrijeme OD, DatumVrijeme DO)
  50.     {
  51.         long long mojeMinute = *_minuti + *_sati * 60 + *_dan * 24 * 60 + *_mjesec * 30 * 24 * 60 + *_godina * 12 * 30 * 24 * 60;
  52.         long long odMinute = *OD._minuti + *OD._sati * 60 + *OD._dan * 24 * 60 + *OD._mjesec * 30 * 24 * 60 + *OD._godina * 12 * 30 * 24 * 60;
  53.         long long doMinute = *DO._minuti + *DO._sati * 60 + *DO._dan * 24 * 60 + *DO._mjesec * 30 * 24 * 60 + *DO._godina * 12 * 30 * 24 * 60;
  54.  
  55.         if ((odMinute <= mojeMinute) && (mojeMinute <= doMinute))
  56.         {
  57.             return true;
  58.         }
  59.         else
  60.             return false;
  61.     }
  62. };
  63. bool veciDatum(DatumVrijeme d1, DatumVrijeme d2)
  64. {
  65.     if (*d1._godina < *d2._godina)
  66.         return true;
  67.     else if (*d2._godina < *d1._godina)
  68.         return false;
  69.  
  70.     if (*d1._mjesec < *d2._mjesec)
  71.         return true;
  72.     else if (*d2._mjesec < *d1._mjesec)
  73.         return false;
  74.  
  75.     if (*d1._dan < *d2._dan)
  76.         return true;
  77.     else if (*d2._dan < *d1._dan)
  78.         return false;
  79.  
  80.     if (*d1._sati < *d2._sati)
  81.         return true;
  82.     else if (*d2._sati < *d1._sati)
  83.         return false;
  84.  
  85.     if (*d1._minuti < *d2._minuti)
  86.         return true;
  87.     else if (*d2._mjesec < *d1._minuti)
  88.         return false;
  89.  
  90.     return true;//znaci da su svi gore napisani jednaki datumi
  91.  
  92. }
  93. char * AlocirajNizKaraktera(const char * sadrzaj) {
  94.     int vel = strlen(sadrzaj) + 1;
  95.     char * temp = new char[vel];
  96.     strcpy_s(temp, vel, sadrzaj);
  97.     return temp;
  98. }
  99.  
  100. struct Modifikacija {
  101.     char * _korisnicnkoIme;
  102.     vrstaAktivnosti _aktivnost;
  103.     DatumVrijeme _vrijemeModifikacije;
  104.     void Unos(const char * sadrzaj, vrstaAktivnosti aktivnost, DatumVrijeme vm)
  105.     {
  106.         _korisnicnkoIme = AlocirajNizKaraktera(sadrzaj);
  107.         _aktivnost = aktivnost;
  108.         _vrijemeModifikacije.Unos(*vm._dan, *vm._mjesec, *vm._godina, *vm._dan, *vm._minuti);
  109.     }
  110.     void Dealociraj() {
  111.         delete[] _korisnicnkoIme; _korisnicnkoIme = nullptr;
  112.         _vrijemeModifikacije.Dealociraj();
  113.     }
  114.     void Ispis()
  115.     {
  116.         if (_korisnicnkoIme != nullptr)
  117.         {
  118.             cout << _korisnicnkoIme << " (" << vrstaAktivnostiChar[_aktivnost] << ")"; _vrijemeModifikacije.Ispis();
  119.         }
  120.     }
  121. };
  122.  
  123. struct Dokument {
  124.     unique_ptr<vrstaDokumenta> _vrsta;
  125.     char * _naziv;
  126.     char * _sadrzaj;
  127.     Modifikacija * _modifikacije;
  128.     int _brojModifikacija;
  129.     //vrijeme kreiranja dokumenta je ujedno i vrijeme posljednje modifikacije
  130.     void kopiraj(Dokument & dokument)
  131.     {
  132.         _vrsta = make_unique<vrstaDokumenta>(*dokument._vrsta);
  133.         if (dokument._naziv != nullptr)
  134.         {
  135.             _naziv = AlocirajNizKaraktera(dokument._naziv);
  136.         }
  137.         if (dokument._sadrzaj != nullptr)
  138.         {
  139.             _sadrzaj = AlocirajNizKaraktera(dokument._sadrzaj);
  140.         }
  141.         _modifikacije = new Modifikacija[dokument._brojModifikacija];
  142.         for (int i = 0; i < dokument._brojModifikacija; i++)
  143.         {
  144.             _modifikacije[i].Unos(dokument._modifikacije[i]._korisnicnkoIme, dokument._modifikacije[i]._aktivnost,
  145.                 dokument._modifikacije[i]._vrijemeModifikacije);
  146.         }
  147.         _brojModifikacija = dokument._brojModifikacija;
  148.     }
  149.     void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran) {
  150.         _naziv = AlocirajNizKaraktera(naziv);
  151.         _vrsta = make_unique<vrstaDokumenta>(vrsta);
  152.         _brojModifikacija = 0;
  153.         _modifikacije = new Modifikacija[_brojModifikacija + 1];
  154.         _modifikacije->Unos("", KREIRANJE, kreiran);
  155.         _brojModifikacija++;
  156.         _sadrzaj = nullptr;
  157.     }
  158.     void Dealociraj() {
  159.         delete[] _naziv; _naziv = nullptr;
  160.         delete[] _sadrzaj; _sadrzaj = nullptr;
  161.         for (size_t i = 0; i < _brojModifikacija; i++)
  162.             _modifikacije[i].Dealociraj();
  163.         delete[] _modifikacije;
  164.         _modifikacije = nullptr;
  165.     }
  166.     void Ispis() {
  167.         cout << crt << _naziv << " " << vrstaDokumentaChar[*_vrsta] << " kreiran ";
  168.         if (_sadrzaj != nullptr)
  169.         {
  170.             cout << crt << _sadrzaj << crt;
  171.         }
  172.         for (size_t i = 0; i < _brojModifikacija; i++)
  173.         {
  174.             _modifikacije[i].Ispis();
  175.         }
  176.     }
  177.     /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI.
  178.     SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU.
  179.     PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
  180.     void DodajSadrzaj(const char * sadrzaj, const char * korisnickoIme, DatumVrijeme vrijemeModifikacije) //dodaj modifikaciju
  181.     {
  182.         char * temp;
  183.         if (_sadrzaj != nullptr)
  184.         {
  185.             int size = strlen(_sadrzaj) + strlen(sadrzaj) + 4;
  186.             temp = new char[size];
  187.             strcpy_s(temp, size, _sadrzaj); //prekopirala u temp stari sadrzaj
  188.             strcat_s(temp, size, " ");
  189.             strcat_s(temp, size, sadrzaj);
  190.             _sadrzaj = temp;
  191.         }
  192.         else if (_sadrzaj == nullptr)
  193.         {
  194.             int size1 = strlen(sadrzaj) + 1;
  195.             _sadrzaj = new char[size1];
  196.             strcpy_s(_sadrzaj, size1, sadrzaj);
  197.         }
  198.  
  199.         Modifikacija * privremena = new Modifikacija[_brojModifikacija + 1];
  200.         for (int i = 0; i < _brojModifikacija; i++)
  201.         {
  202.             privremena[i].Unos(_modifikacije[i]._korisnicnkoIme, _modifikacije[i]._aktivnost, _modifikacije[i]._vrijemeModifikacije);
  203.         }
  204.         privremena[_brojModifikacija].Unos(korisnickoIme, DODAVANJE, vrijemeModifikacije);
  205.         for (int i = 0; i < _brojModifikacija; i++)
  206.         {
  207.             _modifikacije[i].Dealociraj();
  208.         }
  209.         delete[]_modifikacije;
  210.         _modifikacije = privremena;
  211.         _brojModifikacija++;
  212.     }
  213. };
  214. struct Printer {
  215.     char * _model;
  216.     Dokument * _dokumenti;
  217.     int _trenutnoDokumenata;
  218.  
  219.     void Unos(const char * model) {
  220.         _model = AlocirajNizKaraktera(model);
  221.         _dokumenti = nullptr;
  222.         _trenutnoDokumenata = 0;
  223.     }
  224.     void Dealociraj() {
  225.         delete[] _model; _model = nullptr;
  226.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  227.             _dokumenti[i].Dealociraj();
  228.         delete[]_dokumenti; _dokumenti = nullptr;
  229.     }
  230.     void Ispis() {
  231.         if (_model != nullptr)
  232.             cout << _model << crt;
  233.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  234.         {
  235.             _dokumenti[i].Ispis();
  236.         }
  237.     }
  238.     /*DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA :
  239.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA,
  240.     A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  241.  
  242.         2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE :
  243.         -1 KREIRANJE
  244.         - 1 ILI VIŠE DODAVANJA
  245.         - 1 ILI VIŠE ZAMJENA SADRZAJA
  246.  
  247.         SAMO DOKUMENTI KOJI ZADOVOLJE USLOVE PRINTANJA TREBAJU BITI SACUVANI U NIZ _dokumenti.
  248.  
  249.         NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA,
  250.         A SA CRT LINIJOM ODVAJATI STRANICE DOKUMENTA.
  251.  
  252.         BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM  PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
  253.  
  254.         ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU.
  255.  
  256.         NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI I MODIFIKACIJU "PRINTANJE".
  257.         */
  258.     bool Printaj(Dokument & dokument, const char * korisnickoIme, DatumVrijeme datum)
  259.     {
  260.         int brojacKreiranje = 0, brojacDodavanje = 0, brojacZamjena = 0, brojacModifikacija = 0;
  261.         int size = strlen(dokument._naziv);
  262.         for (int i = 0; i < size; i++)
  263.         {
  264.             //provjeriti funkciju tolower
  265.             if (!((dokument._naziv[i] >= 'A' && dokument._naziv[i] <= 'Z') || (dokument._naziv[i] >= 'a' && dokument._naziv[i] <= 'z')
  266.                 || (dokument._naziv[i] == '.')))
  267.             {
  268.                 cout << "Nije mi tacan naziv dokumenta. " << dokument._naziv << endl;
  269.                 return false;
  270.             }
  271.         }
  272.  
  273.         if (strstr(dokument._naziv, ".doc") == nullptr && strstr(dokument._naziv, ".pdf") == nullptr
  274.             && strstr(dokument._naziv, ".txt") == nullptr && strstr(dokument._naziv, ".html") == nullptr)
  275.         {
  276.             cout << "Nije mi tacna ekstenzija. " << endl;
  277.             return false;
  278.         }
  279.  
  280.  
  281.         for (int i = 0; i < dokument._brojModifikacija; i++)
  282.         {
  283.             if (dokument._modifikacije[i]._aktivnost == KREIRANJE)
  284.                 brojacKreiranje++;
  285.             if (dokument._modifikacije[i]._aktivnost == DODAVANJE)
  286.                 brojacDodavanje++;
  287.             if (dokument._modifikacije[i]._aktivnost == ZAMJENA)
  288.                 brojacZamjena++;
  289.         }
  290.         /*  cout << "Kreiranje " << brojacKreiranje << endl;
  291.             cout << "Dodavannje " << brojacDodavanje << endl;
  292.             cout << "Zamjena:  " << brojacZamjena << endl;*/
  293.  
  294.         if (!(brojacKreiranje == 1))
  295.         {
  296.             //cout << "Kreiranje " << brojacKreiranje << crt;
  297.             return false;
  298.         }
  299.         if (!(brojacDodavanje >= 1))
  300.         {
  301.             //cout << "Dodavannje " << brojacDodavanje << crt;
  302.             return false;
  303.         }
  304.         /*if (!(brojacZamjena >= 1)) zamjenu nigdje nije dodana u main-u pa da ne bi funkcija vracala false zakomentarisala sam ju
  305.         {
  306.             cout << "Zamjena:  " << brojacZamjena<< endl;
  307.             return false;
  308.         }*/
  309.  
  310.         for (int i = 0; i < dokument._brojModifikacija; i++)
  311.         {
  312.             if (strcmp(dokument._modifikacije[i]._korisnicnkoIme, korisnickoIme) == 0)
  313.             {
  314.                 brojacModifikacija++;
  315.             }
  316.         }
  317.         if (brojacModifikacija < 1)
  318.         {
  319.             cout << "Broj modifikacija za osobu: " << korisnickoIme << " " << brojacModifikacija;
  320.             cout << "Osobe koje nisu napravile niti jednu modifikaciju nad dokumnetom - ne smije printati " << endl;
  321.             return false;
  322.         }
  323.  
  324.  
  325.         Dokument * temp = new Dokument[_trenutnoDokumenata + 1];
  326.         for (int i = 0; i < _trenutnoDokumenata; i++)
  327.         {
  328.             temp[i].kopiraj(_dokumenti[i]);
  329.         }
  330.         temp[_trenutnoDokumenata].kopiraj(dokument);
  331.         for (int i = 0; i < _trenutnoDokumenata; i++)
  332.         {
  333.             _dokumenti[i].Dealociraj();
  334.         }
  335.         delete[] _dokumenti;
  336.         _dokumenti = temp;
  337.         _trenutnoDokumenata++;
  338.  
  339.         int printanje = strlen(dokument._sadrzaj);
  340.         cout << dokument._sadrzaj[0];
  341.         for (int i = 1; i < printanje; i++)
  342.         {
  343.             //cout << "U printanju sadrzaja sam... " << endl;
  344.             cout << dokument._sadrzaj[i];
  345.             if (i%BROJ_ZNAKOVA_PO_STRANICI == 0)
  346.             {
  347.                 cout << crt;
  348.             }
  349.         }
  350.  
  351.         Modifikacija * temp1 = new Modifikacija[dokument._brojModifikacija + 1];
  352.         for (int i = 0; i < dokument._brojModifikacija; i++)
  353.         {
  354.             temp1[i].Unos(dokument._modifikacije[i]._korisnicnkoIme, dokument._modifikacije[i]._aktivnost, dokument._modifikacije[i]._vrijemeModifikacije);
  355.         }
  356.         temp1[dokument._brojModifikacija].Unos("", PRINTANJE, datum);
  357.         for (int i = 0; i < dokument._brojModifikacija; i++)
  358.         {
  359.             dokument._modifikacije[i].Dealociraj();
  360.         }
  361.         delete[] dokument._modifikacije;
  362.         dokument._modifikacije = temp1;
  363.         dokument._brojModifikacija++;
  364.  
  365.         return true;
  366.     }
  367.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
  368.     float GetProsjecanBrojModifikacijaByVrsta(vrstaAktivnosti vrsta, int &  brojacAktivnosti, int & j, int & i  /**/)
  369.     {
  370.         if (i >= _trenutnoDokumenata)
  371.         {
  372.             return brojacAktivnosti / _trenutnoDokumenata;
  373.  
  374.         }
  375.         else if (_dokumenti[i]._modifikacije[j]._aktivnost == vrsta)
  376.         {
  377.             brojacAktivnosti++;
  378.         }
  379.  
  380.  
  381.         if (j < _dokumenti[i]._brojModifikacija)
  382.         {
  383.             j++;
  384.         }
  385.         else
  386.         {
  387.             j = 0;
  388.             if (i < _trenutnoDokumenata)
  389.             {
  390.                 i++;
  391.             }
  392.         }
  393.         return GetProsjecanBrojModifikacijaByVrsta(vrsta, brojacAktivnosti, j, i);
  394.     }
  395.     //  float prosjek;
  396.     //  //bazni slucaj uvijek nam vraca nesto na kraju
  397.     //  if (_trenutnoDokumenata == i)
  398.     //  {
  399.     //      if (brojac == 0)
  400.     //          return 0;
  401.     //      else
  402.     //      {
  403.     //          prosjek = suma / brojac;
  404.     //          return prosjek;
  405.     //      }
  406.     //  }
  407.     //  else
  408.     //  {
  409.     //      for (int j = 0; j < _dokumenti[i]._brojModifikacija; j++)
  410.     //      {
  411.     //          if (_dokumenti[i]._modifikacije[j]._aktivnost == aktivnost)
  412.     //          {
  413.     //              suma += _dokumenti[i]._brojModifikacija;
  414.     //              brojac++;
  415.     //          }
  416.     //      }
  417.     //      i++;
  418.     //      return GetProsjecanBrojModifikacijaByVrsta(aktivnost, suma, i, brojac);
  419.     //  }
  420.     //}
  421.  
  422.     //FUNKCIJA GetModifikacijeByDatum VRACA SVE MODIFIKACIJE KOJE SU NAPRAVLJENE NA DOKUMENTIMA U PERIODU OD - DO (PROSLIJEDJENOM KAO PARAMETAR)
  423.     pair <Modifikacija*, int> GetModifikacijeByDatum(DatumVrijeme OD, DatumVrijeme DO)
  424.     {
  425.         Modifikacija * pok = nullptr;
  426.         int brojac = 0;
  427.         Modifikacija * temp =nullptr;
  428.  
  429.         for (int i = 0; i < _trenutnoDokumenata; i++)
  430.         {
  431.             for (int j = 0; j < _dokumenti[i]._brojModifikacija; j++)
  432.             {
  433.                 if (veciDatum(OD, _dokumenti[i]._modifikacije[j]._vrijemeModifikacije) && veciDatum(_dokumenti[i]._modifikacije[j]._vrijemeModifikacije, DO))
  434.                 {
  435.  
  436.                     temp = new Modifikacija[brojac + 1];
  437.                     for (int t = 0; t < brojac; t++)
  438.                     {
  439.                         if (pok[t]._korisnicnkoIme != nullptr)
  440.                             temp[t].Unos(pok->_korisnicnkoIme, pok->_aktivnost, pok->_vrijemeModifikacije);
  441.                         else
  442.                             temp[t].Unos("", pok->_aktivnost, pok->_vrijemeModifikacije);
  443.                     }
  444.                     temp[brojac].Unos(_dokumenti[i]._modifikacije[j]._korisnicnkoIme, _dokumenti[i]._modifikacije[j]._aktivnost,
  445.                         _dokumenti[i]._modifikacije[j]._vrijemeModifikacije);
  446.                     for (int t = 0; t < brojac; t++)
  447.                     {
  448.                         pok[t].Dealociraj();
  449.                     }
  450.                     delete[] pok;
  451.                     pok = temp;
  452.                     brojac++;
  453.                 }
  454.             }
  455.         }
  456.         pair <Modifikacija*, int> rezultat = make_pair(pok, brojac);
  457.         return rezultat;
  458.     }
  459. };
  460.  
  461. bool istiDan(DatumVrijeme d1, DatumVrijeme d2) {
  462.     if (*d1._godina == *d2._godina && *d1._mjesec == *d2._mjesec && *d1._dan == *d2._dan){
  463.         return true;
  464. }
  465.     return false;
  466. }
  467.  
  468.  
  469. int main() {
  470.     DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
  471.     DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);//U KONTEKSTU MODIFIKACIJE, UNOS PODRAZUMIJEVA KREIRANJE
  472.     DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
  473.     DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
  474.  
  475.     Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
  476.     ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
  477.     ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
  478.     ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
  479.     ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
  480.  
  481.     /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI. SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU. PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
  482.     ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ", "denis.music", danas1);
  483.     ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ", "indira.hamulic", danas2);
  484.  
  485.     ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
  486.  
  487.     ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ", "jasmin.azemovic", danas1);
  488.     ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ", "adel.handzic", danas2);
  489.  
  490.     Printer hp3200; hp3200.Unos("HP 3200");
  491.     /*
  492.     DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
  493.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  494.     2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE:
  495.     - 1 KREIRANJE
  496.     - 1 ILI VIŠE DODAVANJA
  497.     - 1 ILI VIŠE ZAMJENA SADRZAJA
  498.     SAMO DOKUMENTI KOJI ZADOVOLJE USLOVE PRINTANJA TREBAJU BITI SACUVANI U NIZ _dokumenti. NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA, A SA CRT LINIJOM ODVAJATI
  499.     STRANICE DOKUMENTA.
  500.     BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM  PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
  501.     ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU. NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI
  502.     I MODIFIKACIJU "PRINTANJE".
  503.     */
  504.     if (hp3200.Printaj(ispitPRII, "denis.music", za10Dana))
  505.         cout << "Printam -> " << ispitPRII._naziv << endl;
  506.     if (hp3200.Printaj(ispitMAT, "denis.music", za10Dana))
  507.         cout << "Printam -> " << ispitMAT._naziv << endl;
  508.     if (hp3200.Printaj(ispitUIT, "iris.memic", za10Dana))
  509.         cout << "Printam -> " << ispitUIT._naziv << endl;
  510.     if (hp3200.Printaj(ispitUITDrugiRok, "goran.skondric", za10Dana))
  511.         cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
  512.  
  513.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
  514.     int  brojacAktivnosti = 0, j = 0, i = 0;
  515.     cout << "Prosjecan broj modifikacija odrejdne vrste printanih dokumenata je -> " << hp3200.GetProsjecanBrojModifikacijaByVrsta(DODAVANJE, brojacAktivnosti, j, i /**/) << crt;
  516.  
  517.     Modifikacija * pok = nullptr;
  518.     int brojac = 0;
  519.     //FUNKCIJA GetModifikacijeByDatum VRACA SVE MODIFIKACIJE KOJE SU NAPRAVLJENE NA DOKUMENTIMA U PERIODU OD - DO (PROSLIJEDJENOM KAO PARAMETAR)
  520.     tie(pok, brojac) = hp3200.GetModifikacijeByDatum(danas1, za10Dana);
  521.     cout << "brojac: " << brojac;
  522.     if (brojac > 0 && pok != nullptr)
  523.     {
  524.         cout << "Tuple: " << endl;
  525.         for (size_t i = 0; i < brojac; i++)
  526.             pok[i].Ispis();
  527.     }
  528.  
  529.     //ISPISUJE INFORMACIJE O SVIM DOKUMENTIMA KOJI SU ISPRINTANI
  530.     hp3200.Ispis();
  531.  
  532.     /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU SVIH PRINTANIH DOKUMENATA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA,
  533.     TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
  534.     //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1. ZAMJENU REGISTROVATI KAO MODIFIKACIJU
  535.     auto Zamijeni = [&](char prviZnak, char drugiZnak, const char * ImePrezime, DatumVrijeme datum)
  536.     {
  537.         int brojacZnakova = 0;
  538.         bool jeLiZamjenjeno = false;
  539.         bool zamijeni = false;
  540.         for (int i = 0; i < hp3200._trenutnoDokumenata; i++)
  541.         {
  542.             //vidi je na ovaj datum iz parametra printano
  543.  
  544.             for (int k = 0; k < hp3200._dokumenti[i]._brojModifikacija; k++) {
  545.                 if (hp3200._dokumenti[i]._modifikacije[k]._aktivnost == PRINTANJE && istiDan(hp3200._dokumenti[i]._modifikacije[k]._vrijemeModifikacije, datum)) {
  546.                     zamijeni = true;
  547.                 }
  548.             }
  549.  
  550.  
  551.             if (zamijeni == true) {
  552.                 //zamijeni
  553.                 int sizeSadrzaja = strlen(hp3200._dokumenti[i]._sadrzaj);
  554.                 for (int j = 0; j < sizeSadrzaja; j++)
  555.                 {
  556.                     if (hp3200._dokumenti[i]._sadrzaj[j] == prviZnak)
  557.                     {
  558.                         hp3200._dokumenti[i]._sadrzaj[j] = drugiZnak;
  559.                         brojacZnakova++;
  560.                         jeLiZamjenjeno = true;
  561.                     }
  562.                 }
  563.  
  564.             }
  565.        
  566.  
  567.             //dodaj modifikaciju
  568.             if (jeLiZamjenjeno == true)
  569.             {
  570.                 Modifikacija * privremena = new Modifikacija[hp3200._dokumenti[i]._brojModifikacija + 1];
  571.                 for (int t = 0; t < hp3200._dokumenti[i]._brojModifikacija; t++)
  572.                 {
  573.                     privremena[i].Unos(hp3200._dokumenti[i]._modifikacije[t]._korisnicnkoIme, hp3200._dokumenti[i]._modifikacije[t]._aktivnost,
  574.                         hp3200._dokumenti[i]._modifikacije[t]._vrijemeModifikacije);
  575.                 }
  576.                 privremena[hp3200._dokumenti[i]._brojModifikacija].Unos(ImePrezime, ZAMJENA, datum);
  577.                 for (int t = 0; t < hp3200._dokumenti[i]._brojModifikacija; t++)
  578.                 {
  579.                     hp3200._dokumenti[i]._modifikacije[t].Dealociraj();
  580.                 }
  581.                 delete[]hp3200._dokumenti[i]._modifikacije;
  582.                 hp3200._dokumenti[i]._modifikacije = privremena;
  583.                 hp3200._dokumenti[i]._brojModifikacija++;
  584.                 jeLiZamjenjeno = false;
  585.                 zamijeni = false;
  586.             }
  587.  
  588.         }
  589.  
  590.         return brojacZnakova;
  591.     };
  592.  
  593.     int zamijenjeno = Zamijeni(' ', '-', "denis.music", danas1);
  594.     cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
  595.     hp3200.Ispis();
  596.  
  597.     prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
  598.     ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
  599.  
  600.     hp3200.Dealociraj();
  601.  
  602.     system("PAUSE");
  603.     return 0;
  604. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement