Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA, U SUPROTNOM SE RAD NECE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 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
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORISTENJE HELP-A
- 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)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URADJENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- #include<iostream>
- #include <tuple>
- using namespace std;
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- const char *crt = "\n-------------------------------------------\n";
- enum vrstaDokumenta { PDF, DOC, TXT, HTML };
- const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
- enum vrstaAktivnosti { KREIRANJE, DODAVANJE, ZAMJENA, PRINTANJE };
- const char * vrstaAktivnostiChar[] = { "KREIRANJE", "DODAVANJE", "ZAMJENA", "PRINTANJE" };
- const int BROJ_ZNAKOVA_PO_STRANICI = 30;
- struct DatumVrijeme
- {
- int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
- void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- _sati = new int(sati);
- _minuti = new int(minuti);
- }
- void Dealociraj() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- }
- void Ispis() {
- cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
- }
- bool provjeraDatuma(DatumVrijeme OD, DatumVrijeme DO)
- {
- long long mojeMinute = *_minuti + *_sati * 60 + *_dan * 24 * 60 + *_mjesec * 30 * 24 * 60 + *_godina * 12 * 30 * 24 * 60;
- long long odMinute = *OD._minuti + *OD._sati * 60 + *OD._dan * 24 * 60 + *OD._mjesec * 30 * 24 * 60 + *OD._godina * 12 * 30 * 24 * 60;
- long long doMinute = *DO._minuti + *DO._sati * 60 + *DO._dan * 24 * 60 + *DO._mjesec * 30 * 24 * 60 + *DO._godina * 12 * 30 * 24 * 60;
- if ((odMinute <= mojeMinute) && (mojeMinute <= doMinute))
- {
- return true;
- }
- else
- return false;
- }
- };
- bool veciDatum(DatumVrijeme d1, DatumVrijeme d2)
- {
- if (*d1._godina < *d2._godina)
- return true;
- else if (*d2._godina < *d1._godina)
- return false;
- if (*d1._mjesec < *d2._mjesec)
- return true;
- else if (*d2._mjesec < *d1._mjesec)
- return false;
- if (*d1._dan < *d2._dan)
- return true;
- else if (*d2._dan < *d1._dan)
- return false;
- if (*d1._sati < *d2._sati)
- return true;
- else if (*d2._sati < *d1._sati)
- return false;
- if (*d1._minuti < *d2._minuti)
- return true;
- else if (*d2._mjesec < *d1._minuti)
- return false;
- return true;//znaci da su svi gore napisani jednaki datumi
- }
- char * AlocirajNizKaraktera(const char * sadrzaj) {
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- struct Modifikacija {
- char * _korisnicnkoIme;
- vrstaAktivnosti _aktivnost;
- DatumVrijeme _vrijemeModifikacije;
- void Unos(const char * sadrzaj, vrstaAktivnosti aktivnost, DatumVrijeme vm)
- {
- _korisnicnkoIme = AlocirajNizKaraktera(sadrzaj);
- _aktivnost = aktivnost;
- _vrijemeModifikacije.Unos(*vm._dan, *vm._mjesec, *vm._godina, *vm._dan, *vm._minuti);
- }
- void Dealociraj() {
- delete[] _korisnicnkoIme; _korisnicnkoIme = nullptr;
- _vrijemeModifikacije.Dealociraj();
- }
- void Ispis()
- {
- if (_korisnicnkoIme != nullptr)
- {
- cout << _korisnicnkoIme << " (" << vrstaAktivnostiChar[_aktivnost] << ")"; _vrijemeModifikacije.Ispis();
- }
- }
- };
- struct Dokument {
- unique_ptr<vrstaDokumenta> _vrsta;
- char * _naziv;
- char * _sadrzaj;
- Modifikacija * _modifikacije;
- int _brojModifikacija;
- //vrijeme kreiranja dokumenta je ujedno i vrijeme posljednje modifikacije
- void kopiraj(Dokument & dokument)
- {
- _vrsta = make_unique<vrstaDokumenta>(*dokument._vrsta);
- if (dokument._naziv != nullptr)
- {
- _naziv = AlocirajNizKaraktera(dokument._naziv);
- }
- if (dokument._sadrzaj != nullptr)
- {
- _sadrzaj = AlocirajNizKaraktera(dokument._sadrzaj);
- }
- _modifikacije = new Modifikacija[dokument._brojModifikacija];
- for (int i = 0; i < dokument._brojModifikacija; i++)
- {
- _modifikacije[i].Unos(dokument._modifikacije[i]._korisnicnkoIme, dokument._modifikacije[i]._aktivnost,
- dokument._modifikacije[i]._vrijemeModifikacije);
- }
- _brojModifikacija = dokument._brojModifikacija;
- }
- void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran) {
- _naziv = AlocirajNizKaraktera(naziv);
- _vrsta = make_unique<vrstaDokumenta>(vrsta);
- _brojModifikacija = 0;
- _modifikacije = new Modifikacija[_brojModifikacija + 1];
- _modifikacije->Unos("", KREIRANJE, kreiran);
- _brojModifikacija++;
- _sadrzaj = nullptr;
- }
- void Dealociraj() {
- delete[] _naziv; _naziv = nullptr;
- delete[] _sadrzaj; _sadrzaj = nullptr;
- for (size_t i = 0; i < _brojModifikacija; i++)
- _modifikacije[i].Dealociraj();
- delete[] _modifikacije;
- _modifikacije = nullptr;
- }
- void Ispis() {
- cout << crt << _naziv << " " << vrstaDokumentaChar[*_vrsta] << " kreiran ";
- if (_sadrzaj != nullptr)
- {
- cout << crt << _sadrzaj << crt;
- }
- for (size_t i = 0; i < _brojModifikacija; i++)
- {
- _modifikacije[i].Ispis();
- }
- }
- /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI.
- SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU.
- PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
- void DodajSadrzaj(const char * sadrzaj, const char * korisnickoIme, DatumVrijeme vrijemeModifikacije) //dodaj modifikaciju
- {
- char * temp;
- if (_sadrzaj != nullptr)
- {
- int size = strlen(_sadrzaj) + strlen(sadrzaj) + 4;
- temp = new char[size];
- strcpy_s(temp, size, _sadrzaj); //prekopirala u temp stari sadrzaj
- strcat_s(temp, size, " ");
- strcat_s(temp, size, sadrzaj);
- _sadrzaj = temp;
- }
- else if (_sadrzaj == nullptr)
- {
- int size1 = strlen(sadrzaj) + 1;
- _sadrzaj = new char[size1];
- strcpy_s(_sadrzaj, size1, sadrzaj);
- }
- Modifikacija * privremena = new Modifikacija[_brojModifikacija + 1];
- for (int i = 0; i < _brojModifikacija; i++)
- {
- privremena[i].Unos(_modifikacije[i]._korisnicnkoIme, _modifikacije[i]._aktivnost, _modifikacije[i]._vrijemeModifikacije);
- }
- privremena[_brojModifikacija].Unos(korisnickoIme, DODAVANJE, vrijemeModifikacije);
- for (int i = 0; i < _brojModifikacija; i++)
- {
- _modifikacije[i].Dealociraj();
- }
- delete[]_modifikacije;
- _modifikacije = privremena;
- _brojModifikacija++;
- }
- };
- struct Printer {
- char * _model;
- Dokument * _dokumenti;
- int _trenutnoDokumenata;
- void Unos(const char * model) {
- _model = AlocirajNizKaraktera(model);
- _dokumenti = nullptr;
- _trenutnoDokumenata = 0;
- }
- void Dealociraj() {
- delete[] _model; _model = nullptr;
- for (size_t i = 0; i < _trenutnoDokumenata; i++)
- _dokumenti[i].Dealociraj();
- delete[]_dokumenti; _dokumenti = nullptr;
- }
- void Ispis() {
- if (_model != nullptr)
- cout << _model << crt;
- for (size_t i = 0; i < _trenutnoDokumenata; i++)
- {
- _dokumenti[i].Ispis();
- }
- }
- /*DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA :
- 1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA,
- A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
- 2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE :
- -1 KREIRANJE
- - 1 ILI VIŠE DODAVANJA
- - 1 ILI VIŠE ZAMJENA SADRZAJA
- 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.
- BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
- ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU.
- NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI I MODIFIKACIJU "PRINTANJE".
- */
- bool Printaj(Dokument & dokument, const char * korisnickoIme, DatumVrijeme datum)
- {
- int brojacKreiranje = 0, brojacDodavanje = 0, brojacZamjena = 0, brojacModifikacija = 0;
- int size = strlen(dokument._naziv);
- for (int i = 0; i < size; i++)
- {
- //provjeriti funkciju tolower
- if (!((dokument._naziv[i] >= 'A' && dokument._naziv[i] <= 'Z') || (dokument._naziv[i] >= 'a' && dokument._naziv[i] <= 'z')
- || (dokument._naziv[i] == '.')))
- {
- cout << "Nije mi tacan naziv dokumenta. " << dokument._naziv << endl;
- return false;
- }
- }
- if (strstr(dokument._naziv, ".doc") == nullptr && strstr(dokument._naziv, ".pdf") == nullptr
- && strstr(dokument._naziv, ".txt") == nullptr && strstr(dokument._naziv, ".html") == nullptr)
- {
- cout << "Nije mi tacna ekstenzija. " << endl;
- return false;
- }
- for (int i = 0; i < dokument._brojModifikacija; i++)
- {
- if (dokument._modifikacije[i]._aktivnost == KREIRANJE)
- brojacKreiranje++;
- if (dokument._modifikacije[i]._aktivnost == DODAVANJE)
- brojacDodavanje++;
- if (dokument._modifikacije[i]._aktivnost == ZAMJENA)
- brojacZamjena++;
- }
- /* cout << "Kreiranje " << brojacKreiranje << endl;
- cout << "Dodavannje " << brojacDodavanje << endl;
- cout << "Zamjena: " << brojacZamjena << endl;*/
- if (!(brojacKreiranje == 1))
- {
- //cout << "Kreiranje " << brojacKreiranje << crt;
- return false;
- }
- if (!(brojacDodavanje >= 1))
- {
- //cout << "Dodavannje " << brojacDodavanje << crt;
- return false;
- }
- /*if (!(brojacZamjena >= 1)) zamjenu nigdje nije dodana u main-u pa da ne bi funkcija vracala false zakomentarisala sam ju
- {
- cout << "Zamjena: " << brojacZamjena<< endl;
- return false;
- }*/
- for (int i = 0; i < dokument._brojModifikacija; i++)
- {
- if (strcmp(dokument._modifikacije[i]._korisnicnkoIme, korisnickoIme) == 0)
- {
- brojacModifikacija++;
- }
- }
- if (brojacModifikacija < 1)
- {
- cout << "Broj modifikacija za osobu: " << korisnickoIme << " " << brojacModifikacija;
- cout << "Osobe koje nisu napravile niti jednu modifikaciju nad dokumnetom - ne smije printati " << endl;
- return false;
- }
- Dokument * temp = new Dokument[_trenutnoDokumenata + 1];
- for (int i = 0; i < _trenutnoDokumenata; i++)
- {
- temp[i].kopiraj(_dokumenti[i]);
- }
- temp[_trenutnoDokumenata].kopiraj(dokument);
- for (int i = 0; i < _trenutnoDokumenata; i++)
- {
- _dokumenti[i].Dealociraj();
- }
- delete[] _dokumenti;
- _dokumenti = temp;
- _trenutnoDokumenata++;
- int printanje = strlen(dokument._sadrzaj);
- cout << dokument._sadrzaj[0];
- for (int i = 1; i < printanje; i++)
- {
- //cout << "U printanju sadrzaja sam... " << endl;
- cout << dokument._sadrzaj[i];
- if (i%BROJ_ZNAKOVA_PO_STRANICI == 0)
- {
- cout << crt;
- }
- }
- Modifikacija * temp1 = new Modifikacija[dokument._brojModifikacija + 1];
- for (int i = 0; i < dokument._brojModifikacija; i++)
- {
- temp1[i].Unos(dokument._modifikacije[i]._korisnicnkoIme, dokument._modifikacije[i]._aktivnost, dokument._modifikacije[i]._vrijemeModifikacije);
- }
- temp1[dokument._brojModifikacija].Unos("", PRINTANJE, datum);
- for (int i = 0; i < dokument._brojModifikacija; i++)
- {
- dokument._modifikacije[i].Dealociraj();
- }
- delete[] dokument._modifikacije;
- dokument._modifikacije = temp1;
- dokument._brojModifikacija++;
- return true;
- }
- //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
- float GetProsjecanBrojModifikacijaByVrsta(vrstaAktivnosti vrsta, int & brojacAktivnosti, int & j, int & i /**/)
- {
- if (i >= _trenutnoDokumenata)
- {
- return brojacAktivnosti / _trenutnoDokumenata;
- }
- else if (_dokumenti[i]._modifikacije[j]._aktivnost == vrsta)
- {
- brojacAktivnosti++;
- }
- if (j < _dokumenti[i]._brojModifikacija)
- {
- j++;
- }
- else
- {
- j = 0;
- if (i < _trenutnoDokumenata)
- {
- i++;
- }
- }
- return GetProsjecanBrojModifikacijaByVrsta(vrsta, brojacAktivnosti, j, i);
- }
- // float prosjek;
- // //bazni slucaj uvijek nam vraca nesto na kraju
- // if (_trenutnoDokumenata == i)
- // {
- // if (brojac == 0)
- // return 0;
- // else
- // {
- // prosjek = suma / brojac;
- // return prosjek;
- // }
- // }
- // else
- // {
- // for (int j = 0; j < _dokumenti[i]._brojModifikacija; j++)
- // {
- // if (_dokumenti[i]._modifikacije[j]._aktivnost == aktivnost)
- // {
- // suma += _dokumenti[i]._brojModifikacija;
- // brojac++;
- // }
- // }
- // i++;
- // return GetProsjecanBrojModifikacijaByVrsta(aktivnost, suma, i, brojac);
- // }
- //}
- //FUNKCIJA GetModifikacijeByDatum VRACA SVE MODIFIKACIJE KOJE SU NAPRAVLJENE NA DOKUMENTIMA U PERIODU OD - DO (PROSLIJEDJENOM KAO PARAMETAR)
- pair <Modifikacija*, int> GetModifikacijeByDatum(DatumVrijeme OD, DatumVrijeme DO)
- {
- Modifikacija * pok = nullptr;
- int brojac = 0;
- Modifikacija * temp =nullptr;
- for (int i = 0; i < _trenutnoDokumenata; i++)
- {
- for (int j = 0; j < _dokumenti[i]._brojModifikacija; j++)
- {
- if (veciDatum(OD, _dokumenti[i]._modifikacije[j]._vrijemeModifikacije) && veciDatum(_dokumenti[i]._modifikacije[j]._vrijemeModifikacije, DO))
- {
- temp = new Modifikacija[brojac + 1];
- for (int t = 0; t < brojac; t++)
- {
- if (pok[t]._korisnicnkoIme != nullptr)
- temp[t].Unos(pok->_korisnicnkoIme, pok->_aktivnost, pok->_vrijemeModifikacije);
- else
- temp[t].Unos("", pok->_aktivnost, pok->_vrijemeModifikacije);
- }
- temp[brojac].Unos(_dokumenti[i]._modifikacije[j]._korisnicnkoIme, _dokumenti[i]._modifikacije[j]._aktivnost,
- _dokumenti[i]._modifikacije[j]._vrijemeModifikacije);
- for (int t = 0; t < brojac; t++)
- {
- pok[t].Dealociraj();
- }
- delete[] pok;
- pok = temp;
- brojac++;
- }
- }
- }
- pair <Modifikacija*, int> rezultat = make_pair(pok, brojac);
- return rezultat;
- }
- };
- bool istiDan(DatumVrijeme d1, DatumVrijeme d2) {
- if (*d1._godina == *d2._godina && *d1._mjesec == *d2._mjesec && *d1._dan == *d2._dan){
- return true;
- }
- return false;
- }
- int main() {
- DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
- DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);//U KONTEKSTU MODIFIKACIJE, UNOS PODRAZUMIJEVA KREIRANJE
- DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
- DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
- Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
- ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
- ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
- ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
- ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
- /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI. SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU. PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
- ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ", "denis.music", danas1);
- ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ", "indira.hamulic", danas2);
- ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
- ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ", "jasmin.azemovic", danas1);
- ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ", "adel.handzic", danas2);
- Printer hp3200; hp3200.Unos("HP 3200");
- /*
- DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
- 1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
- 2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE:
- - 1 KREIRANJE
- - 1 ILI VIŠE DODAVANJA
- - 1 ILI VIŠE ZAMJENA SADRZAJA
- 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.
- BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
- ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU. NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI
- I MODIFIKACIJU "PRINTANJE".
- */
- if (hp3200.Printaj(ispitPRII, "denis.music", za10Dana))
- cout << "Printam -> " << ispitPRII._naziv << endl;
- if (hp3200.Printaj(ispitMAT, "denis.music", za10Dana))
- cout << "Printam -> " << ispitMAT._naziv << endl;
- if (hp3200.Printaj(ispitUIT, "iris.memic", za10Dana))
- cout << "Printam -> " << ispitUIT._naziv << endl;
- if (hp3200.Printaj(ispitUITDrugiRok, "goran.skondric", za10Dana))
- cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
- //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
- int brojacAktivnosti = 0, j = 0, i = 0;
- cout << "Prosjecan broj modifikacija odrejdne vrste printanih dokumenata je -> " << hp3200.GetProsjecanBrojModifikacijaByVrsta(DODAVANJE, brojacAktivnosti, j, i /**/) << crt;
- Modifikacija * pok = nullptr;
- int brojac = 0;
- //FUNKCIJA GetModifikacijeByDatum VRACA SVE MODIFIKACIJE KOJE SU NAPRAVLJENE NA DOKUMENTIMA U PERIODU OD - DO (PROSLIJEDJENOM KAO PARAMETAR)
- tie(pok, brojac) = hp3200.GetModifikacijeByDatum(danas1, za10Dana);
- cout << "brojac: " << brojac;
- if (brojac > 0 && pok != nullptr)
- {
- cout << "Tuple: " << endl;
- for (size_t i = 0; i < brojac; i++)
- pok[i].Ispis();
- }
- //ISPISUJE INFORMACIJE O SVIM DOKUMENTIMA KOJI SU ISPRINTANI
- hp3200.Ispis();
- /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU SVIH PRINTANIH DOKUMENATA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA,
- TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
- //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1. ZAMJENU REGISTROVATI KAO MODIFIKACIJU
- auto Zamijeni = [&](char prviZnak, char drugiZnak, const char * ImePrezime, DatumVrijeme datum)
- {
- int brojacZnakova = 0;
- bool jeLiZamjenjeno = false;
- bool zamijeni = false;
- for (int i = 0; i < hp3200._trenutnoDokumenata; i++)
- {
- //vidi je na ovaj datum iz parametra printano
- for (int k = 0; k < hp3200._dokumenti[i]._brojModifikacija; k++) {
- if (hp3200._dokumenti[i]._modifikacije[k]._aktivnost == PRINTANJE && istiDan(hp3200._dokumenti[i]._modifikacije[k]._vrijemeModifikacije, datum)) {
- zamijeni = true;
- }
- }
- if (zamijeni == true) {
- //zamijeni
- int sizeSadrzaja = strlen(hp3200._dokumenti[i]._sadrzaj);
- for (int j = 0; j < sizeSadrzaja; j++)
- {
- if (hp3200._dokumenti[i]._sadrzaj[j] == prviZnak)
- {
- hp3200._dokumenti[i]._sadrzaj[j] = drugiZnak;
- brojacZnakova++;
- jeLiZamjenjeno = true;
- }
- }
- }
- //dodaj modifikaciju
- if (jeLiZamjenjeno == true)
- {
- Modifikacija * privremena = new Modifikacija[hp3200._dokumenti[i]._brojModifikacija + 1];
- for (int t = 0; t < hp3200._dokumenti[i]._brojModifikacija; t++)
- {
- privremena[i].Unos(hp3200._dokumenti[i]._modifikacije[t]._korisnicnkoIme, hp3200._dokumenti[i]._modifikacije[t]._aktivnost,
- hp3200._dokumenti[i]._modifikacije[t]._vrijemeModifikacije);
- }
- privremena[hp3200._dokumenti[i]._brojModifikacija].Unos(ImePrezime, ZAMJENA, datum);
- for (int t = 0; t < hp3200._dokumenti[i]._brojModifikacija; t++)
- {
- hp3200._dokumenti[i]._modifikacije[t].Dealociraj();
- }
- delete[]hp3200._dokumenti[i]._modifikacije;
- hp3200._dokumenti[i]._modifikacije = privremena;
- hp3200._dokumenti[i]._brojModifikacija++;
- jeLiZamjenjeno = false;
- zamijeni = false;
- }
- }
- return brojacZnakova;
- };
- int zamijenjeno = Zamijeni(' ', '-', "denis.music", danas1);
- cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
- hp3200.Ispis();
- prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
- ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
- hp3200.Dealociraj();
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement