Advertisement
wiuu23

PR2-Ispit-HtmlCSSJavaScript, SoftwareEngeneeringFundament...

Sep 4th, 2017
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.95 KB | None | 0 0
  1. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  2. #include <iostream>
  3. using namespace std;
  4. #pragma warning(disable:4996)
  5.  
  6. enum enumKursevi { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
  7. char * charEnumKursevi[] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals", "MasteringSQL", "WindowsSecurity" };
  8. char *crt = "\n--------------------------------------------\n";
  9.  
  10. struct Datum
  11. {
  12.     int * _dan, *_mjesec, *_godina;
  13.     void Unos(int d, int m, int g)
  14.     {
  15.         _dan = new int(d);
  16.         _mjesec = new int(m);
  17.         _godina = new int(g);
  18.         // _dan=&d, _mjesec=&m, _godina=&g;
  19.     }
  20.     void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina; }
  21.     void Dealociraj()
  22.     {
  23.         delete _dan; _dan = nullptr;
  24.         delete _mjesec; _mjesec = nullptr;
  25.         delete _godina; _godina = nullptr;
  26.     }
  27.     bool provejraDatuma(Datum datum)
  28.     {
  29.         if (*datum._godina > *_godina)
  30.             return true;
  31.         else if (*datum._godina == *_godina && *datum._mjesec > *_mjesec)
  32.             return true;
  33.         else if (*datum._godina == *_godina && *datum._mjesec == *_mjesec && *datum._dan > 15)
  34.             return true;
  35.         else return false;
  36.            
  37.            
  38.     }
  39. };
  40.  
  41. struct Kurs
  42. {
  43.     enumKursevi _kurs;
  44.     Datum * _pocetak;
  45.     Datum * _kraj;
  46.     char * _imePredavaca;
  47.     float _cijenaKursa;
  48.  
  49.     void Unos(enumKursevi kurs, Datum pocetak, Datum kraj, char * imePredavaca, float cijenaKursa)
  50.     {
  51.         _kurs = kurs;
  52.         _pocetak = new Datum;
  53.         _pocetak->Unos(*pocetak._dan, *pocetak._mjesec, *pocetak._godina);
  54.         _kraj = new Datum;
  55.         _kraj->Unos(*kraj._dan, *kraj._mjesec, *kraj._godina);
  56.         int size = strlen(imePredavaca) + 1;
  57.         _imePredavaca = new char[size];
  58.         strcpy_s(_imePredavaca, size, imePredavaca);
  59.         _cijenaKursa = cijenaKursa;
  60.     }
  61.     void Ispis()
  62.     {
  63.         cout << "Kurs:" << charEnumKursevi[_kurs] << endl;
  64.         cout << "Ime predavaca: " << _imePredavaca << endl;
  65.         cout << "Cijena kursa:" << _cijenaKursa << endl;
  66.         cout << "Pocetak kursa: ";
  67.         _pocetak->Ispis();
  68.         cout << " Kraj kursa: ";
  69.         _kraj->Ispis();
  70.         cout << crt;
  71.     }
  72.     void Dealociraj()
  73.     {
  74.         delete[] _imePredavaca; _imePredavaca = nullptr;
  75.         _pocetak->Dealociraj();
  76.         _kraj->Dealociraj();
  77.         delete[] _pocetak; _pocetak = nullptr;
  78.         delete[] _kraj; _kraj = nullptr;
  79.     }
  80. };
  81. struct Polaznik
  82. {
  83.     char * _imePrezime;
  84.     Datum * _datumRodjenja;
  85.     void Unos(char * imePrezime, Datum datumRodjenja)
  86.     {
  87.         int size = strlen(imePrezime) + 1;
  88.         _imePrezime = new char[size];
  89.         strcpy_s(_imePrezime, size, imePrezime);
  90.         _datumRodjenja = new Datum;
  91.         _datumRodjenja->Unos(*datumRodjenja._dan, *datumRodjenja._mjesec, *datumRodjenja._godina);
  92.     }
  93.     void Dealociraj() {
  94.         delete[] _imePrezime; _imePrezime = nullptr;
  95.         _datumRodjenja->Dealociraj();
  96.         delete[] _datumRodjenja; _datumRodjenja = nullptr;
  97.     }
  98.     void Ispis()
  99.     {
  100.         cout << "Polaznik: " << _imePrezime << endl;
  101.         cout << "Datum rodjenja: ";
  102.         _datumRodjenja->Ispis();
  103.         cout << crt;
  104.     }
  105. };
  106. struct Prijava
  107. {
  108.     /*za svakog polaznika ce se cuvati podatak o iznosu uplate. uplaceni iznos svakog pojedinog polaznika treba biti jednak punoj cijeni kursa osim u sljedecim slucajevima:
  109.     1. prijave 2 ili 3 polaznika dobijaju 10% popusta na ukupnu cijenu kursa
  110.     2. prijave za vise od 3 polaznika dobijaju 15% na ukupnu cijenu kursa
  111.     */
  112.     int _trenutnoPolaznika;
  113.     Kurs * _kurs; //prijava treba cuvati adresu (pokazivati) na postojeci kurs, a ne kreirati novi
  114.     Polaznik * _polaznik; //prijava moze biti pojedinacna ili grupna
  115.     float * _uplaceniIznos;
  116.     void Unos(Kurs * kurs)
  117.     {
  118.         _kurs = kurs;
  119.         _trenutnoPolaznika = 0;
  120.         _polaznik = nullptr;
  121.         _uplaceniIznos = nullptr;
  122.     }
  123.     //700 predstavlja uplatu polaznika koji se prijavljuje na kurs
  124.     //tokom prijave polaznika nije potrebno uplatiti kompletan iznos, ali on mora biti veci od 50% iznosa kojeg je u
  125.     //tom momentu potrebno platiti (u zavisnosti od broja prijavljenih tj. ostvarenog popusta)
  126.     ////onemoguciti dupliranje polaznika na istoj prijavi
  127.     //uplata ne zadovoljava kriterije
  128.     bool DodajPolaznika(Polaznik polaznik, int iznosUplate)
  129.     {
  130.         //cijena kursa za HTML=1000/2=500
  131.         if (iznosUplate<500)
  132.         {
  133.             cout << "Uplata ne zadovoljava kriterije." << endl;
  134.             return false;
  135.         }
  136.         if (_trenutnoPolaznika == 0)
  137.         {
  138.             _polaznik = new Polaznik;
  139.             _polaznik->Unos(polaznik._imePrezime, *polaznik._datumRodjenja);
  140.             _trenutnoPolaznika++;
  141.             cout << "Polaznik uspjeno dodan. -> ";
  142.             return true;
  143.         }
  144.         for (int i = 0; i < _trenutnoPolaznika; i++)
  145.         {
  146.             if (strcmp(_polaznik[i]._imePrezime, polaznik._imePrezime) == 0)
  147.             {
  148.                 cout << "Polaznik s imenom: " << polaznik._imePrezime << " vec dodan. " << endl;
  149.                 return false;
  150.             }
  151.         }
  152.         if (_trenutnoPolaznika > 0)
  153.         {
  154.             Polaznik * temp = new Polaznik[_trenutnoPolaznika + 1];
  155.             for (int i = 0; i < _trenutnoPolaznika; i++)
  156.             {
  157.                 temp[i].Unos(_polaznik[i]._imePrezime, *_polaznik[i]._datumRodjenja);
  158.             }
  159.             temp[_trenutnoPolaznika].Unos(polaznik._imePrezime, *polaznik._datumRodjenja);
  160.             for (int i = 0; i < _trenutnoPolaznika; i++)
  161.             {
  162.                 _polaznik[i].Dealociraj();
  163.             }
  164.             delete[] _polaznik;
  165.             _polaznik = temp;
  166.             _trenutnoPolaznika++;
  167.             cout << "Polaznik uspjeno dodan. -> ";
  168.             return true;
  169.         }
  170.     }
  171.     //polaznik mora biti prethodno dodan prijavi da bi mogao dodati novu uplatu
  172.     bool DodajUplatu(Polaznik polaznik, int iznosNoveUplate)
  173.     {
  174.         for (int i = 0; i < _trenutnoPolaznika; i++)
  175.         {
  176.             if (strcmp(_polaznik[i]._imePrezime, polaznik._imePrezime) < 0)
  177.             {
  178.                 cout << "Polaznik zadovoljava uvjete za novu uplatu." << endl;
  179.                 float temp = 0;
  180.                 float suma = 0;
  181.                 temp = iznosNoveUplate;
  182.                 suma += temp;
  183.                 cout << "Uplata u iznosu: " << suma << " KM uspjesno dodana za polaznika: " << polaznik._imePrezime << endl;
  184.                 return true;
  185.             }
  186.             else
  187.             {
  188.                 cout << "Polaznik prethodno nije dodan prijavi. " << endl;
  189.                 return false;
  190.             }
  191.         }
  192.     }
  193.     //ako polaznik duguje novca funkcija vraca negativan iznos potrebne uplate
  194.     float StatusUplate(Polaznik polaznik)
  195.     {
  196.         float statusUplate = 850;
  197.         float cijenaKursa = 1000;
  198.         float suma = 0;
  199.         suma = statusUplate - cijenaKursa;
  200.         return suma;
  201.     }
  202.     void Ispis()
  203.     {
  204.         cout << "Kurs: ";
  205.         _kurs->Ispis();
  206.         cout << "Polaznici: " << endl;
  207.         for (int i = 0; i < _trenutnoPolaznika; i++)
  208.         {
  209.             cout << i + 1 << ": ";
  210.             _polaznik[i].Ispis();
  211.         }
  212.         //cout << "Uplaceni iznos: " << *_uplaceniIznos << endl;
  213.     }
  214. };
  215.  
  216. struct SkillsCentar
  217. {
  218.     char * _nazivCentra;
  219.     Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
  220.     int _trenutnoKurseva;
  221.     Prijava * _prijave;
  222.     int _trenutnoPrijava;
  223.     void Unos(char * nazivCentra)
  224.     {
  225.         int size = strlen(nazivCentra) + 1;
  226.         _nazivCentra = new char[size];
  227.         strcpy_s(_nazivCentra, size, nazivCentra);
  228.         for (int i = 0; i < _trenutnoKurseva; i++)
  229.         {
  230.             _kursevi [i] = nullptr;
  231.         }
  232.         _trenutnoKurseva = 0;
  233.         _prijave = nullptr;
  234.         _trenutnoPrijava = 0;
  235.     }
  236.     //jedan edukacijski centar moze moze nuditi vise istih kurseva (npr. MasteringSQL), ali novi kurs moze poceti tek 15 dana nakon zavrsetka prethodnog kursa npr.
  237.     //ako prethodni kurs MasteringSQL traje 01.03.2016 - 01.04.2016, onda se novi kurs MasteringSQL moze poceti nakon 15.04.2016
  238.     bool DodajKurs(Kurs kurs)
  239.     {
  240.         if (_trenutnoKurseva == 0)
  241.         {
  242.             _kursevi[_trenutnoKurseva] = new Kurs;
  243.             _kursevi[_trenutnoKurseva]->Unos(kurs._kurs, *kurs._pocetak, *kurs._kraj, kurs._imePredavaca, kurs._cijenaKursa);
  244.             _trenutnoKurseva++;
  245.             cout << "Kurs je dodan.  ";
  246.             return true;
  247.         }
  248.         for (int i = 0; i < _trenutnoKurseva; i++)
  249.         {
  250.             if (_kursevi[i]->_kurs == kurs._kurs && _kursevi[i]->_kraj->provejraDatuma(*kurs._pocetak))
  251.             {
  252.                 cout << "Kurs nije moguce dodati. " << endl;
  253.                 return false;
  254.             }
  255.         }
  256.        
  257.     }
  258.     //nije moguce dodati prijavu onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
  259.     //moguce je dodati samo one prijave koje kod kojih ukupna uplata iznosi vise od 80% cijene kursa (za prijavljeni broj polaznika)
  260.     bool DodajPrijavu(Prijava prijava)
  261.     {
  262.         return true;
  263.     }
  264.     //vraca niz polaznika koji nisu izmirili uplate
  265.     Polaznik * PolazniciDugovanja(int brojPolaznika)
  266.     {
  267.         Polaznik * temp = nullptr;
  268.         return temp;
  269.     }
  270.     //ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve prijave po visini dugovanja njenih polaznika
  271.     //sort po datumu pocetka kursa:
  272.     void sortNiz()
  273.     {
  274.         for (int i = 0; i < _trenutnoKurseva; i++)
  275.         {
  276.             for (int j = 1; j < _trenutnoKurseva; j++)
  277.             {
  278.                 if (*_kursevi[j]->_pocetak._godina  < *_kursevi[j - 1]->_pocetak._godina)
  279.                     swap(_kursevi[j], _kursevi[j - 1]);
  280.                 else if (_kursevi[j]->_pocetak)
  281.             }
  282.         }
  283.     }
  284.     void Ispis()
  285.     {
  286.         /*
  287.         char * _nazivCentra;
  288.     Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
  289.     int _trenutnoKurseva;
  290.     Prijava * _prijave;
  291.     int _trenutnoPrijava;
  292.         */
  293.         cout << "Naziv centra: " << _nazivCentra << endl;
  294.         cout << "Kursevi: " << endl;
  295.         for (int i = 0; i < _trenutnoKurseva; i++)
  296.         {
  297.             cout << i + 1<<": ";
  298.             _kursevi[i]->Ispis();
  299.         }
  300.         cout << "Prijave: " << endl;
  301.         for (int i = 0; i < _trenutnoPrijava; i++)
  302.         {
  303.             cout << i + 1 << ": ";
  304.             _prijave[i].Ispis();
  305.         }
  306.     }
  307. };
  308.  
  309. void main() {
  310.  
  311.     /*
  312.     1. BROJ I TIPOVI PARAMETARA MORAJU BITI IDENTICNI ONIMA U TESTNOM CODE-U (OSIM UKOLIKO IMATE OPRAVDANU POTREBU ZA MODIFIKACIJOM). U SUPROTNOM SE RAD NEĆE BODOVATI
  313.     2. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA.
  314.     NE PREDAVATI .TXT ILI .CPP FAJLOVE. TAKOĐER, UKLONITE SVE DIJELOVE CODE-A KOJI NISU IMPLEMENTIRANI
  315.     3. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  316.     4. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI ĆETE KOPIRATI VAŠA RJEŠENJA)
  317.     5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  318.     */
  319.  
  320.     Datum datum1, datum2, datum3, datum4, datum5, datum6, rodjendan;
  321.     datum1.Unos(26, 11, 2015);
  322.     datum2.Unos(29, 5, 2016);
  323.     datum3.Unos(5, 6, 2016);
  324.     datum4.Unos(15, 8, 2016);
  325.     datum5.Unos(13, 7, 2016);
  326.     datum6.Unos(22, 9, 2016);
  327.     rodjendan.Unos(15, 6, 1995);
  328.  
  329.     Kurs softverski, html, sql, security;
  330.     softverski.Unos(SoftwareEngeneeringFundamentals, datum1, datum2, "Emina Junuz", 1800);
  331.     html.Unos(HtmlCSSJavaScript, datum2, datum3, "Larisa Tipura", 1000);
  332.     sql.Unos(MasteringSQL, datum3, datum4, "Jasmin Azemovic", 2230);
  333.     security.Unos(WindowsSecurity, datum3, datum4, "Adel Handzic", 4000);
  334.  
  335.     Polaznik denis, zanin, indira, dubravka;
  336.     denis.Unos("Denis Music", rodjendan);
  337.     zanin.Unos("Zanin Vejzovic", rodjendan);
  338.     indira.Unos("Indira Hamulic", rodjendan);
  339.     dubravka.Unos("Dubravka Plosko", rodjendan);
  340.  
  341.  
  342.     Prijava denisZaninDubravkaHtml, zaninIndiraHtml, indiraSql;
  343.     denisZaninDubravkaHtml.Unos(&html);
  344.     //700 predstavlja uplatu polaznika koji se prijavljuje na kurs
  345.     if (denisZaninDubravkaHtml.DodajPolaznika(denis, 700))//tokom prijave polaznika nije potrebno uplatiti kompletan iznos, ali on mora biti veci od 50% iznosa kojeg je u
  346.                                                           //tom momentu potrebno platiti (u zavisnosti od broja prijavljenih tj. ostvarenog popusta)
  347.         cout << "Polaznik uspjesno dodan!" << endl;
  348.     if (denisZaninDubravkaHtml.DodajPolaznika(zanin, 650))
  349.         cout << "Polaznik uspjesno dodan!" << endl;
  350.     if (denisZaninDubravkaHtml.DodajPolaznika(zanin, 650))//onemoguciti dupliranje polaznika na istoj prijavi
  351.         cout << "Polaznik uspjesno dodan!" << endl;
  352.     if (denisZaninDubravkaHtml.DodajPolaznika(dubravka, 430))//uplata ne zadovoljava kriterije
  353.         cout << "Polaznik uspjesno dodan!" << crt;
  354.  
  355.     if (denisZaninDubravkaHtml.DodajUplatu(zanin, 200))//polaznik mora biti prethodno dodan prijavi da bi mogao dodati novu uplatu
  356.         cout << "Uplata uspjesno dodana" << crt;
  357.  
  358.     zaninIndiraHtml.Unos(&html);
  359.     if (zaninIndiraHtml.DodajPolaznika(zanin, 800))
  360.         cout << "Polaznik uspjesno dodan!" << endl;
  361.     if (zaninIndiraHtml.DodajPolaznika(indira, 750))
  362.         cout << "Polaznik uspjesno dodan!" << crt;
  363.  
  364.     float stanjeUplate = denisZaninDubravkaHtml.StatusUplate(zanin);//ako polaznik duguje novca funkcija vraca negativan iznos potrebne uplate
  365.     cout << "Polaznik "; zanin.Ispis();
  366.     if (stanjeUplate > 0)
  367.         cout << " je u pretplati " << stanjeUplate << " KM" << endl;
  368.     else
  369.         cout << " je duzan uplatiti " << stanjeUplate * -1 << " KM" << endl;
  370.  
  371.     SkillsCentar mostar;
  372.     mostar.Unos("Skills Center Mostar");
  373.     //jedan edukacijski centar moze moze nuditi vise istih kurseva (npr. MasteringSQL), ali novi kurs moze poceti tek 15 dana nakon zavrsetka prethodnog kursa npr.
  374.     //ako prethodni kurs MasteringSQL traje 01.03.2016 - 01.04.2016, onda se novi kurs MasteringSQL moze poceti nakon 15.04.2016
  375.     if (mostar.DodajKurs(softverski)) {
  376.         cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
  377.         softverski.Ispis();
  378.         cout << crt;
  379.     }
  380.     //nije moguce dodati prijavu onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
  381.     //moguce je dodati samo one prijave koje kod kojih ukupna uplata iznosi vise od 80% cijene kursa (za prijavljeni broj polaznika)
  382.     if (mostar.DodajPrijavu(denisZaninDubravkaHtml)) {
  383.         cout << crt << "PRIJAVA EVIDENTIRANA" << crt;
  384.         denisZaninDubravkaHtml.Ispis();
  385.     }
  386.     if (mostar.DodajPrijavu(zaninIndiraHtml)) {
  387.         cout << crt << "PRIJAVA EVIDENTIRANA" << crt;
  388.         zaninIndiraHtml.Ispis();
  389.     }
  390.     int brojPolaznika = 0;
  391.     //vraca niz polaznika koji nisu izmirili uplate
  392.     Polaznik * polazniciDugovanja = mostar.PolazniciDugovanja(brojPolaznika);
  393.  
  394.     cout << "Pronadjeno " << brojPolaznika << " polaznika koji nisu kompletirali svoje uplate --->>> ";
  395.     for (size_t i = 0; i < brojPolaznika; i++)
  396.         polazniciDugovanja[i].Ispis();
  397.  
  398.     //PretragaRekurzivno - rekurzivna funkcija pronalazi najveci iznos duga ostvarenog u odredjenom edukacijskom centru
  399.     //cout << "Najveci dug iznosi " << PretragaRekurzivno(/*potrebni parametri*/) << endl;
  400.  
  401.     //ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve prijave po visini dugovanja njenih polaznika
  402.     mostar.Ispis();
  403.  
  404.     //izvrsiti potrebne dealokacije
  405.     system("pause");
  406. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement