Advertisement
Guest User

pr2 b grupa ispitni

a guest
Jul 22nd, 2018
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.62 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 <memory>
  11. #include <fstream>
  12. #include <tuple>
  13.  
  14.  
  15. using namespace std;
  16.  
  17. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  18. #pragma warning(disable:4996)
  19.  
  20. const char *crt = "\n-------------------------------------------\n";
  21.  
  22. enum vrstaDokumenta { PDF, DOC, TXT, HTML };
  23. const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
  24.  
  25. enum vrstaAktivnosti { KREIRANJE, DODAVANJE, ZAMJENA, PRINTANJE };
  26. const char * vrstaAktivnostiChar[] = { "KREIRANJE", "DODAVANJE", "ZAMJENA", "PRINTANJE" };
  27.  
  28. const int BROJ_ZNAKOVA_PO_STRANICI = 30;
  29.  
  30. struct DatumVrijeme {
  31.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  32.     void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1) {
  33.         _dan = new int(dan);
  34.         _mjesec = new int(mjesec);
  35.         _godina = new int(godina);
  36.         _sati = new int(sati);
  37.         _minuti = new int(minuti);
  38.     }
  39.     void Dealociraj() {
  40.         delete _dan; _dan = nullptr;
  41.         delete _mjesec; _mjesec = nullptr;
  42.         delete _godina; _godina = nullptr;
  43.         delete _sati; _sati = nullptr;
  44.         delete _minuti; _minuti = nullptr;
  45.     }
  46.     void Ispis() {
  47.         cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
  48.     }
  49.     bool LaterThan(DatumVrijeme Od) {
  50.         if (*_dan * 365 + *_mjesec * 30 + *_godina * 365 + *_sati + *_minuti >= *Od._dan * 365 + *Od._mjesec * 30 + *Od._godina * 365 + *Od._sati + *Od._minuti) {
  51.             return true;
  52.         }
  53.         else return false;
  54.     }
  55.     bool EarlierThan(DatumVrijeme Od) {
  56.         if (*_dan * 365 + *_mjesec * 30 + *_godina * 365 + *_sati + *_minuti <= *Od._dan * 365 + *Od._mjesec * 30 + *Od._godina * 365 + *Od._sati + *Od._minuti) {
  57.             return true;
  58.         }
  59.         else return false;
  60.     }
  61.     bool Equal(DatumVrijeme Od) {
  62.         if (*_dan * 365 + *_mjesec * 30 + *_godina * 365 + *_sati + *_minuti == *Od._dan * 365 + *Od._mjesec * 30 + *Od._godina * 365 + *Od._sati + *Od._minuti) {
  63.             return true;
  64.         }
  65.         else return false;
  66.     }
  67. };
  68.  
  69. char * AlocirajNizKaraktera(const char * sadrzaj) {
  70.     int vel = strlen(sadrzaj) + 1;
  71.     char * temp = new char[vel];
  72.     strcpy_s(temp, vel, sadrzaj);
  73.     return temp;
  74. }
  75.  
  76. struct Modifikacija {
  77.     char * _korisnicnkoIme;
  78.     vrstaAktivnosti _aktivnost;
  79.     DatumVrijeme _vrijemeModifikacije;
  80.     void Unos(const char * sadrzaj, vrstaAktivnosti aktivnost, DatumVrijeme vm) {//ovdje se treba proslijediti korisnicko ime
  81.         _korisnicnkoIme = AlocirajNizKaraktera(sadrzaj);
  82.         _aktivnost = aktivnost;
  83.         _vrijemeModifikacije.Unos(*vm._dan, *vm._mjesec, *vm._godina, *vm._dan, *vm._minuti);
  84.     }
  85.     void Dealociraj() {
  86.         delete[] _korisnicnkoIme; _korisnicnkoIme = nullptr;
  87.         _vrijemeModifikacije.Dealociraj();
  88.     }
  89.     void Ispis() { cout << _korisnicnkoIme << " (" << vrstaAktivnostiChar[_aktivnost] << ")"; _vrijemeModifikacije.Ispis(); }
  90. };
  91.  
  92. struct Dokument {
  93.     unique_ptr<vrstaDokumenta> _vrsta;
  94.     char * _naziv;
  95.     char * _sadrzaj;
  96.     Modifikacija * _modifikacije;
  97.     int _brojModifikacija;
  98.     void AddModifikacija(const char* ime, DatumVrijeme dat, vrstaAktivnosti akt = ZAMJENA) {
  99.         Modifikacija *temp = new Modifikacija[_brojModifikacija + 1];
  100.         for (int i = 0; i < _brojModifikacija; i++) {
  101.             temp[i].Unos(_modifikacije[i]._korisnicnkoIme, _modifikacije[i]._aktivnost, _modifikacije[i]._vrijemeModifikacije);
  102.             _modifikacije[i].Dealociraj();
  103.         }
  104.         delete[]_modifikacije; _modifikacije = nullptr;
  105.         temp[_brojModifikacija].Unos(ime,akt,dat);
  106.         _modifikacije = temp; temp = nullptr;
  107.         _brojModifikacija++;
  108.     }
  109.     void Ispis2() {
  110.        
  111.         int broj_znakova = 0;
  112.         for (int i = 0; i < strlen(_sadrzaj); i++) {
  113.            
  114.             if (broj_znakova==BROJ_ZNAKOVA_PO_STRANICI) {
  115.                 cout <<endl << crt << endl;
  116.                 broj_znakova = 0;
  117.             }
  118.             cout << _sadrzaj[i];
  119.             broj_znakova++;
  120.         }
  121.     }
  122.     /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI. SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU.
  123.     PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
  124.     void Unos2(vrstaDokumenta vrst, const char* naziv, const char * sadrzaj, Modifikacija *mod, int br_mod) {
  125.         _vrsta = make_unique<vrstaDokumenta>(vrst);
  126.         _naziv = new char[strlen(naziv) + 1];
  127.         strcpy_s(_naziv, strlen(naziv) + 1, naziv);
  128.         _sadrzaj = new char[strlen(sadrzaj) + 1];
  129.         strcpy_s(_sadrzaj, strlen(sadrzaj) + 1, sadrzaj);
  130.         _brojModifikacija = br_mod;
  131.         _modifikacije = new Modifikacija[_brojModifikacija];
  132.         for (int i = 0; i < _brojModifikacija; i++) {
  133.             _modifikacije[i].Unos(mod[i]._korisnicnkoIme, mod[i]._aktivnost, mod[i]._vrijemeModifikacije);
  134.         }
  135.  
  136.     }
  137.     void DodajSadrzaj(const char* sadrzaj, const char* ime, DatumVrijeme dat) {
  138.         if (_sadrzaj != nullptr) {
  139.             char *temp = new char[strlen(_sadrzaj) + 1 + strlen(sadrzaj) + 1];
  140.             strcpy_s(temp, strlen(_sadrzaj) + 1, _sadrzaj);//
  141.             delete[] _sadrzaj;
  142.             _sadrzaj = temp;
  143.             strcat_s(&_sadrzaj[strlen(_sadrzaj)], strlen(sadrzaj) + 1, sadrzaj);
  144.             temp = nullptr;
  145.         }
  146.  
  147.         if (_sadrzaj == nullptr) {
  148.             _sadrzaj = AlocirajNizKaraktera(sadrzaj);
  149.         }
  150.                
  151.         ofstream file;
  152.         file.open(_naziv, ios::out | ios::binary | ios::app);
  153.         file << _sadrzaj << endl;
  154.         file.close();
  155.                
  156.         Modifikacija *temp = new Modifikacija[_brojModifikacija + 1];
  157.         for (int i = 0; i < _brojModifikacija; i++) {
  158.             temp[i].Unos(_modifikacije[i]._korisnicnkoIme, _modifikacije[i]._aktivnost, _modifikacije[i]._vrijemeModifikacije);
  159.         }
  160.         temp[_brojModifikacija].Unos(ime, DODAVANJE, dat);
  161.         for (int i = 0; i < _brojModifikacija; i++) {
  162.             _modifikacije[i].Dealociraj();
  163.         }
  164.         delete[] _modifikacije;
  165.         _modifikacije = temp; temp = nullptr;
  166.         _brojModifikacija++;
  167.     }
  168.     //vrijeme kreiranja dokumenta je ujedno i vrijeme posljednje modifikacije
  169.     void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran) {
  170.         _naziv = AlocirajNizKaraktera(naziv);
  171.         _vrsta = make_unique<vrstaDokumenta>(vrsta);
  172.         _brojModifikacija = 0;
  173.         _modifikacije = new Modifikacija[_brojModifikacija + 1];
  174.         _modifikacije->Unos("", KREIRANJE, kreiran);
  175.         _brojModifikacija++;
  176.         _sadrzaj = nullptr;
  177.     }
  178.     void Dealociraj() {
  179.         delete[] _naziv; _naziv = nullptr;
  180.        
  181.         delete[] _sadrzaj; _sadrzaj = nullptr;
  182.         for (int i = 0; i < _brojModifikacija; i++)
  183.             _modifikacije[i].Dealociraj();
  184.         delete[] _modifikacije;
  185.         _modifikacije = nullptr;
  186.     }
  187.     void Ispis() {
  188.         cout << crt << _naziv << " " << vrstaDokumentaChar[*_vrsta] << " kreiran ";
  189.         if (_sadrzaj != nullptr)
  190.         cout << crt << _sadrzaj << crt;
  191.        
  192.  
  193.         for (size_t i = 0; i < _brojModifikacija; i++)
  194.             _modifikacije[i].Ispis();
  195.     }
  196.     bool SamoSlova() {
  197.         for (int i = 0; i < strlen(_naziv); i++) {
  198.             if (!((_naziv[i] >= 'A' && _naziv[i] <= 'Z') || (_naziv[i] >= 'a' && _naziv[i] <= 'z') || _naziv[i]=='.')) {
  199.                 return false;
  200.             }
  201.         }
  202.         return true;
  203.     }
  204.     bool ExtenzijaOk(vrstaDokumenta vrsta) {
  205.         /*int broj_karaktera = strlen(_naziv);
  206.         char ext[4]="XXX";
  207.         int br_ext = 2;
  208.         for (int i = broj_karaktera-1; i >=broj_karaktera - 3; i--) {
  209.             ext[br_ext] = toupper(_naziv[i]);
  210.             br_ext--;
  211.         }
  212.         cout << "Poredi se: " << ext << " sa " << vrstaDokumentaChar[vrsta] << endl;*/
  213.        
  214.         /*char *ext = &_naziv[strlen(_naziv) - 3];
  215.         cout << "Poredi se: " << ext << " sa " << vrstaDokumentaChar[vrsta] << endl; */
  216.         //ili...
  217.         char *ext2 = new char[4];
  218.         strcpy_s(ext2, 4, &_naziv[strlen(_naziv) - 3]);
  219.        
  220.         for (int i = 0; i < 3; i++) {
  221.             ext2[i] = toupper(ext2[i]);
  222.         }
  223.         //cout << "Poredi se: " << ext2 << " sa " << vrstaDokumentaChar[vrsta] << endl;
  224.        
  225.         if (strcmp(ext2, vrstaDokumentaChar[vrsta]) == 0) {
  226.             return true;
  227.         }
  228.         else return false;
  229.     }
  230. };
  231. struct Printer {
  232.     char * _model;
  233.     Dokument * _dokumenti;
  234.     int _trenutnoDokumenata;
  235.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
  236.     int GetProsjecanBrojModifikacijaByVrsta(vrstaAktivnosti vrst=DODAVANJE, int br_mod=0, int br_dok=0, int br=0) {
  237.         if (br_dok == _trenutnoDokumenata) {
  238.             return (br / 2);
  239.         }
  240.         if (br_mod == _dokumenti[br_dok]._brojModifikacija) {
  241.             br_dok++;
  242.             br_mod = 0;
  243.             GetProsjecanBrojModifikacijaByVrsta(DODAVANJE, br_mod, br_dok, br);
  244.         }
  245.         if (_trenutnoDokumenata != br_dok) {
  246.             if (_dokumenti[br_dok]._modifikacije[br_mod]._aktivnost == vrst) {
  247.                 br_mod++;
  248.                 br++;
  249.                 GetProsjecanBrojModifikacijaByVrsta(DODAVANJE, br_mod, br_dok, br);
  250.             }
  251.             if (_dokumenti[br_dok]._modifikacije[br_mod]._aktivnost != vrst) {
  252.                 br_mod++;
  253.                 GetProsjecanBrojModifikacijaByVrsta(DODAVANJE, br_mod, br_dok, br);
  254.             }
  255.         }
  256.        
  257. }
  258.    
  259.     /*
  260.     DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
  261.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  262.     2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE:
  263.     - 1 KREIRANJE
  264.     - 1 ILI VIŠE DODAVANJA
  265.     - 1 ILI VIŠE ZAMJENA SADRZAJA
  266.     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 STRANICE DOKUMENTA.
  267.     BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM  PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
  268.     ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU. NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI I MODIFIKACIJU "PRINTANJE".
  269.     */
  270.     bool Printaj(Dokument &dok, const char* ime, DatumVrijeme dat) {
  271.         if (!dok.SamoSlova()) {
  272.             return false;
  273.         }
  274.         if (!dok.ExtenzijaOk(*dok._vrsta)) {
  275.             return false;
  276.         }
  277.         bool kreiranje, dodavanje, zamjena;
  278.         kreiranje = dodavanje = zamjena = false;
  279.         bool printReady = false;
  280.  
  281.         for (int i = 0; i < dok._brojModifikacija; i++) {
  282.             if (dok._modifikacije[i]._aktivnost == KREIRANJE) {
  283.                 kreiranje = true;
  284.             }
  285.             if (dok._modifikacije[i]._aktivnost == DODAVANJE) {
  286.                 dodavanje = true;
  287.             }
  288.             if (dok._modifikacije[i]._aktivnost == ZAMJENA) {
  289.                 zamjena = true;
  290.             }
  291.         }
  292.         if (kreiranje==true && dodavanje == true && zamjena==true) {
  293.             printReady = true;
  294.         }
  295.         if (printReady==true) {
  296.             Dokument *temp = new Dokument[_trenutnoDokumenata + 1];
  297.             for (int i = 0; i < _trenutnoDokumenata; i++) {
  298.                 temp[i].Unos2(*_dokumenti[i]._vrsta, _dokumenti[i]._naziv, _dokumenti[i]._sadrzaj, _dokumenti[i]._modifikacije, _dokumenti[i]._brojModifikacija);
  299.                 _dokumenti[i].Dealociraj();
  300.             }
  301.             if(_dokumenti!=nullptr)
  302.             delete[] _dokumenti; _dokumenti = nullptr;
  303.             temp[_trenutnoDokumenata].Unos2(*dok._vrsta, dok._naziv, dok._sadrzaj, dok._modifikacije, dok._brojModifikacija);
  304.             _dokumenti = temp; temp = nullptr;
  305.             _trenutnoDokumenata++;
  306.            
  307.             dok.Ispis2();
  308.             dok.AddModifikacija(ime, dat, PRINTANJE);
  309.             return true;
  310.         }
  311.         else return false;
  312.  
  313.        
  314.  
  315.     }
  316.     void Unos(const char * model) {
  317.         _model = AlocirajNizKaraktera(model);
  318.         _dokumenti = nullptr;
  319.         _trenutnoDokumenata = 0;
  320.     }
  321.     void Dealociraj() {
  322.         delete[] _model; _model = nullptr;
  323.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  324.             _dokumenti[i].Dealociraj();
  325.         delete[]_dokumenti; _dokumenti = nullptr;
  326.     }
  327.     void Ispis() {
  328.         cout << _model << crt;
  329.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  330.             _dokumenti[i].Ispis();
  331.     }
  332.     pair<Modifikacija*, int>GetModifikacijeByDatum(DatumVrijeme Od, DatumVrijeme Do) {
  333.         int br_mod = 0;
  334.         for (int i = 0; i < _trenutnoDokumenata; i++) {
  335.             for (int j = 0; j < _dokumenti[i]._brojModifikacija; j++) {
  336.                 if (_dokumenti[i]._modifikacije[j]._vrijemeModifikacije.LaterThan(Od) && _dokumenti[i]._modifikacije[j]._vrijemeModifikacije.LaterThan(Do)) {
  337.                     br_mod++;
  338.                 }
  339.             }
  340.         }
  341.         Modifikacija *niz = new Modifikacija[br_mod];
  342.         br_mod = 0;
  343.         for (int i = 0; i < _trenutnoDokumenata; i++) {
  344.             for (int j = 0; j < _dokumenti[i]._brojModifikacija; j++) {
  345.                 if (_dokumenti[i]._modifikacije[j]._vrijemeModifikacije.LaterThan(Od) && _dokumenti[i]._modifikacije[j]._vrijemeModifikacije.LaterThan(Do)) {
  346.                     niz[br_mod].Unos(_dokumenti[i]._modifikacije[j]._korisnicnkoIme, _dokumenti[i]._modifikacije[j]._aktivnost, _dokumenti[i]._modifikacije[j]._vrijemeModifikacije);
  347.                     br_mod++;
  348.                 }
  349.             }
  350.         }
  351.         if(niz!=nullptr)
  352.         return make_pair(niz, br_mod);
  353.         else return make_pair(nullptr, br_mod);
  354.     }
  355.     int Zamijeni(const char znak, const char znak2, const char* ime, DatumVrijeme dat) {
  356.         int broj_znakova = 0;
  357.         auto pok = [&]()->int {
  358.             for (int i = 0; i < _trenutnoDokumenata; i++) {
  359.                 for (int j = 0; j < _dokumenti[i]._brojModifikacija; j++) {
  360.                     if (_dokumenti[i]._modifikacije[j]._aktivnost == PRINTANJE && _dokumenti[i]._modifikacije[j]._vrijemeModifikacije.Equal(dat)) {
  361.                         for (int z = 0; z < strlen(_dokumenti[i]._sadrzaj); z++) {
  362.                             if (_dokumenti[i]._sadrzaj[z] == znak) {
  363.                                 _dokumenti[i]._sadrzaj[z] = znak2;
  364.                                 broj_znakova++;
  365.                             }
  366.                         }
  367.                         _dokumenti[i].AddModifikacija(ime, dat, ZAMJENA);
  368.                     }
  369.                 }
  370.  
  371.             }
  372.             return broj_znakova;
  373.         }();
  374.         return broj_znakova;
  375.  
  376.     }
  377.    
  378. };
  379.  
  380.  
  381. void main() {
  382.     DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
  383.     DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);//U KONTEKSTU MODIFIKACIJE, UNOS PODRAZUMIJEVA KREIRANJE
  384.     DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
  385.     DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
  386.  
  387.     Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
  388.     ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
  389.     ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
  390.     ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
  391.     ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
  392.  
  393.     /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI. SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU. PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
  394.     ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ", "denis.music", danas1);
  395.     ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ", "indira.hamulic", danas2);
  396.  
  397.     ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
  398.  
  399.     ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ", "jasmin.azemovic", danas1);
  400.     ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ", "adel.handzic", danas2);
  401.     //ispitMAT.AddModifikacija("Emir", za10Dana);
  402.     ispitMAT.Ispis();
  403.     Printer hp3200; hp3200.Unos("HP 3200");
  404.     /*
  405.     DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
  406.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  407.     2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE:
  408.     - 1 KREIRANJE
  409.     - 1 ILI VIŠE DODAVANJA
  410.     - 1 ILI VIŠE ZAMJENA SADRZAJA
  411.     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 STRANICE DOKUMENTA.
  412.     BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM  PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
  413.     ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU. NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI I MODIFIKACIJU "PRINTANJE".
  414.     */
  415.     if (hp3200.Printaj(ispitPRII, "denis.music", za10Dana))
  416.         cout << "Printam -> " << ispitPRII._naziv << endl;
  417.     if (hp3200.Printaj(ispitMAT, "denis.music", za10Dana))
  418.         cout << "Printam -> " << ispitMAT._naziv << endl;
  419.     if (hp3200.Printaj(ispitUIT, "iris.memic", za10Dana))
  420.         cout << "Printam -> " << ispitUIT._naziv << endl;
  421.     if (hp3200.Printaj(ispitUITDrugiRok, "goran.skondric", za10Dana))
  422.         cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
  423.  
  424.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
  425.     cout << "Prosjecan broj modifikacija odrejdne vrste printanih dokumenata je -> " << hp3200.GetProsjecanBrojModifikacijaByVrsta(DODAVANJE) << crt;
  426.  
  427.     Modifikacija * pok = nullptr;
  428.     int brojac = 0;
  429.     //FUNKCIJA GetModifikacijeByDatum VRACA SVE MODIFIKACIJE KOJE SU NAPRAVLJENE NA DOKUMENTIMA U PERIODU OD - DO (PROSLIJEDJENOM KAO PARAMETAR)
  430.     tie(pok, brojac) = hp3200.GetModifikacijeByDatum(danas1, za10Dana);
  431.     if (brojac > 0 && pok != nullptr)
  432.         for (size_t i = 0; i < brojac; i++)
  433.             pok[i].Ispis();
  434.  
  435.     //ISPISUJE INFORMACIJE O SVIM DOKUMENTIMA KOJI SU ISPRINTANI
  436.     hp3200.Ispis();
  437.  
  438.     /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU SVIH PRINTANIH DOKUMENATA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA, TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
  439.     //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1. ZAMJENU REGISTROVATI KAO MODIFIKACIJU
  440.     int zamijenjeno = hp3200.Zamijeni(' ', '-', "denis.music", danas1);
  441.     cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
  442.     hp3200.Ispis();
  443.  
  444.     prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
  445.     ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
  446.  
  447.     hp3200.Dealociraj();
  448.  
  449.     system("PAUSE");
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement