Advertisement
limun11

jasko

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