Advertisement
limun11

zavrsiti

Jun 16th, 2018
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.70 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. /*
  5. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEĆE BODOVATI
  6. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  7. 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB160061.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA
  8. VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
  9. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  10. 5. 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)
  11. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  12. */
  13. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  14. #pragma warning(disable:4996)
  15.  
  16. /*
  17. u nastavku je prikazan primjer ispitnog zapisnika (izvještaj o održanom ispitu) sa detaljima/stavkama
  18.  
  19. ________________________________________
  20. Datum ispita: 07.09.2017
  21. Predmet: Programiranje II
  22. ________________________________________
  23. IZVJESTAJ O ODRZANOM ISPITU
  24. ________________________________________
  25. Br indeksa Ime prezime Komisijsko*** Ocjena
  26. 16001 A. Joldic DA 5
  27. 15251 D. Music NE 7 Ponisteno
  28. 16014 E. Babovic DA 8
  29. ________________________________________
  30. UKUPNO POLOZILO: 2
  31. PROSJECNA OCJENA: 6.67
  32. ________________________________________
  33. *** komisijski ispit: ako student pristupa četvrti put i dalje (računajući i poništene rezultate)
  34. */
  35.  
  36. const char * crt = "\n-------------------------------------------\n";
  37. struct Datum
  38. {
  39.     int _dan;
  40.     int _mjesec;
  41.     int _godina;
  42.     void Unos(int d, int m, int g)
  43.     {
  44.         _dan = d;
  45.         _mjesec = m;
  46.         _godina = g;
  47.     }
  48.     void Ispis()
  49.     {
  50.         cout << _dan << "." << _mjesec << "." << _godina << " ";
  51.     }
  52. };
  53. struct Student
  54. {
  55.     char _imePrezime[20];
  56.     int _brojIndeksa;
  57.     int _polozioECTS;
  58.  
  59.     void Unos(const char* naziv, float cijena)
  60.     {
  61.         strcpy_s(_imePrezime, naziv);
  62.         _brojIndeksa = cijena;
  63.         _polozioECTS = 0;
  64.     }
  65.     void DodajECTS(float ects)
  66.     {
  67.         _polozioECTS += ects;
  68.     }
  69.     void UmanjiECTS(float ects)
  70.     {
  71.         _polozioECTS += ects;
  72.     }
  73.     void Ispis()
  74.     {
  75.         cout << _imePrezime << ", Indeks: " << _brojIndeksa << ", ECTS: " << _polozioECTS << " " << endl;
  76.     }
  77. };
  78.  
  79. struct ZapisnikStavka
  80. {
  81.     int _ocjena;
  82.     Student* _student; //ZapisnikStavka će pokazivati na objekat tipa student koji se nalazi u instanci tipa Fakultet, pa nije
  83.     //potrebno vršiti nove alokacije
  84.     bool _ponisteno;
  85.     bool _komisijskoPolaganje;
  86.  
  87.     void Unos(Student* proizvod, int ocjena, bool komisijskoPolaganje)
  88.     {
  89.         _ocjena = ocjena;
  90.         _student = proizvod;
  91.         _komisijskoPolaganje = komisijskoPolaganje;
  92.         _ponisteno = false;
  93.     }
  94.  
  95.     void Ispis()
  96.     {
  97.         cout << _student->_imePrezime << "\t" << _ocjena << "\t" << _student->_brojIndeksa << "\t";
  98.         if (_ponisteno)
  99.             cout << " Ponisteno";
  100.         cout << endl;
  101.     }
  102. };
  103. struct IspitniZapisnik
  104. {
  105.     Datum _datum;
  106.     ZapisnikStavka ** _stavke;//svaki put se dodaje po jedna stavka
  107.     int _brojStavki;
  108.     int _ects;
  109.     char _predmet[20];
  110.     void dodajZapisnik(Student * student, int ocjena)
  111.     {
  112.         ZapisnikStavka ** temp = new ZapisnikStavka *[_brojStavki + 1];
  113.         for (int i = 0; i < _brojStavki; i++)
  114.         {
  115.             temp[i] = new ZapisnikStavka;
  116.             temp[i]->Unos(_stavke[i]->_student, _stavke[i]->_ocjena, _stavke[i]->_komisijskoPolaganje);
  117.             delete _stavke[i];//kako svaku stavku[i] upisujem u temp ona mi vise ne treba i mogu je izbrisati
  118.         }
  119.         if (_stavke != nullptr)//kad svaku pojedinacnu stavku izbrisem tako onda na kraju unistavam cijeli obejekat
  120.             delete[] _stavke;
  121.         temp[_brojStavki] = new ZapisnikStavka;
  122.         temp[_brojStavki]->Unos(student, ocjena, false);
  123.         _stavke = temp;
  124.         temp = nullptr;
  125.         _brojStavki++;
  126.         //return;
  127.     }
  128.     void Unos(Datum datum, const char* predmet, int ects)
  129.     {
  130.         _datum = datum;
  131.         _brojStavki = 0;
  132.         _stavke = nullptr;
  133.         _ects = ects;
  134.         strcpy_s(_predmet, predmet);
  135.     }
  136.     /*Prosjecnu ocjenu izračunati koristeći lambda funkciju koja se poziva koristeći objekat
  137.     tipa auto. u prosjek računati i poništene rezultate (stavke)*/
  138.     float GetProsjecnaOcjena()
  139.     {
  140.         auto lambda = [&]() -> float
  141.         {
  142.             int ocjene = 0;
  143.             float prosjek = 0;
  144.             for (int i = 0; i < _brojStavki; i++)
  145.             {
  146.                 ocjene += _stavke[i]->_ocjena;
  147.             }
  148.             prosjek = ocjene / _brojStavki;
  149.             return prosjek;
  150.         };
  151.         return lambda();
  152.     }
  153. };
  154. const int Max = 100;
  155.  
  156. /*unutar objekta tipa Fakultet ce se cuvati podaci o svim studentima i ispitnim zapisnicima, a dodaju se pomocu globalnih funkcija*/
  157. struct Fakultet
  158. {
  159.     //umjesto brojaca koristiti default.ne vrijednosti
  160.     Student* Studenti[Max] = { NULL };
  161.     IspitniZapisnik* Zapisnici[Max] = { NULL };
  162.  
  163.     void Dealociraj()
  164.     {
  165.         for (size_t i = 0; i < Max; i++)
  166.         {
  167.             delete Studenti[i]; Studenti[i] = NULL;
  168.         }
  169.         for (size_t i = 0; i < Max; i++)
  170.         {
  171.             delete Zapisnici[i]; Zapisnici[i] = NULL;
  172.         }
  173.     }
  174. };
  175. /*dodaje podatke o novom studentu u fakultet */
  176. //fakultet, imePrezime, broj indeksa
  177. //ne dodaje studenta jer je broj indeksa zauzet
  178. void dodaj_student(Fakultet & fakultet, const char * imePrezime, int brojIndeksa)
  179. {
  180.     for (int i = 0; i < Max; i++)
  181.     {
  182.         if (fakultet.Studenti[i] != nullptr)
  183.         {
  184.             if (fakultet.Studenti[i]->_brojIndeksa == brojIndeksa)
  185.             {
  186.                 cout << "Student: " << i << " nije dodan jer je taj broj indeksa dodan vec ranije..." << endl;
  187.                 return;
  188.             }
  189.         }
  190.     }
  191.     for (int i = 0; i < Max; i++)
  192.     {
  193.         if (fakultet.Studenti[i] == nullptr)
  194.         {
  195.             fakultet.Studenti[i] = new Student;
  196.             fakultet.Studenti[i]->Unos(imePrezime, brojIndeksa);
  197.             cout << "Student: " << i << " je dodan... " << endl;
  198.             return;
  199.         }
  200.     }
  201. }
  202. /*kraira novi zapisnik*/
  203. //fakultet, datum, predmet, ects krediti
  204. void kreiraj_zapisnik(Fakultet & fakultet, int dan, int mjesec, int godina, const char * predemt, int ectsKrediti)
  205. {
  206.     Datum datum;
  207.     for (int i = 0; i < Max; i++)
  208.     {
  209.         if (fakultet.Zapisnici[i] == nullptr)
  210.         {
  211.             fakultet.Zapisnici[i] = new IspitniZapisnik;
  212.             datum.Unos(dan, mjesec, godina);
  213.             fakultet.Zapisnici[i]->Unos(datum, predemt, ectsKrediti);
  214.             cout << "Ispitni zapisnik: " << i << " je dodan na listu... " << endl;
  215.             return;
  216.         }
  217.     }
  218. }
  219. /*dodaje stavku na posljednji kreiran zapisnik, a ects studenta uveća ako je student položio ispit. */
  220. /*ako je student vec dodat u zapisnik, onda se vrsi samo modifikacija njegove ocjene*/
  221. bool dodaj_stavku_na_zapisnik(Fakultet & fakultet, int brojIndeksa, int ocjena)
  222. {
  223.     int indeksStudenta = 0;
  224.     for (int i = 0; i < Max; i++)
  225.     {
  226.         //ako u zapisniku postoji student modifikujem mu ocjenu na novu ocjenu
  227.         if (fakultet.Zapisnici[i] != nullptr)
  228.         {
  229.             for (int j = 0; j < fakultet.Zapisnici[i]->_brojStavki; j++)
  230.             {
  231.                 if (fakultet.Zapisnici[i]->_stavke[j]->_student->_brojIndeksa == brojIndeksa)
  232.                 {
  233.                     fakultet.Zapisnici[i]->_stavke[j]->_ocjena = ocjena;
  234.                     cout << "Student s brojem indeksa vec nadjen, radim modifikaciju njegove ocjene. Nova ocjena je: "<< fakultet.Zapisnici[i]->_stavke[j]->_ocjena<< endl;
  235.                     return true;
  236.                 }
  237.             }
  238.         }
  239.     }
  240.     for (int i = 0; i < Max; i++)
  241.     {
  242.         if (fakultet.Studenti[i] != nullptr)//trazim studenta koji vec postoji da bih mu mogla dodati zapisnik
  243.         {
  244.             //prolazim kroz studente da nadjem studenta s tim brojem indkesa za kojeg trebam dodati zapisnik
  245.             if (fakultet.Studenti[i]->_brojIndeksa == brojIndeksa)
  246.             {
  247.                 indeksStudenta = i;
  248.                 break;
  249.             }
  250.         }
  251.     }
  252.     for (int i = 0; i < Max; i++)// u svaki od zapisnika smo dodali zapisnik od studnetu
  253.     {
  254.         if (fakultet.Zapisnici[i] != nullptr)
  255.         {
  256.             fakultet.Zapisnici[i]->dodajZapisnik(fakultet.Studenti[indeksStudenta], ocjena);
  257.             cout << "Zapisnik dodan... " << endl;
  258.             break;// da prekine izvrsavanje kad nadje prvog inace ce ih sve do kraja popuniti s ovom funkcijom
  259.         }
  260.     }
  261.     return true;
  262. }
  263. /*u posljednjem zapisniku stavku za studenta 16001 ponistiti, a studentu umanjiti ects bodove.
  264. funkcija vraca false u slucaju da se student ne nalazi na posljednjem zapisniku*/
  265. bool ponisti_stavku_rezultat(Fakultet & fakultet, int brojIndeksa)
  266. {
  267.     return true;
  268. }
  269. /* funkcija printaj prikazuje posljednji ispitni zapisnik u formatu prikazanom na pocetku zadatka.
  270. * pored prikazivanja, identican sadrzaj ispitnog zapisnika je potrebno je pasiti u tekstualni fajl.
  271. * naziv fajla treba biti Predmet_datum.txt, npr. ProgramiranjeII_2017-09-01.txt. zapisnik se nece
  272. prikazati niti sacuvati u fajl ukoliko ne posjeduje niti jednu stavku ili su sve stavke ponistene*/
  273. bool printaj(Fakultet & fakultet)
  274. {
  275.     return true;
  276. }
  277. void main() {
  278.     Fakultet fakultet;
  279.  
  280.     /*dodaje podatke o novom studentu u fakultet */
  281.     //fakultet, imePrezime, broj indeksa
  282.     dodaj_student(fakultet, "A. Joldic", 16001);
  283.     dodaj_student(fakultet, "D. Music", 15251);
  284.     dodaj_student(fakultet, "E. Babovic ", 16014);
  285.     dodaj_student(fakultet, "E. Junuz", 16015);
  286.     dodaj_student(fakultet, "J. Azemovic", 16014);//ne dodaje studenta jer je broj indeksa zauzet
  287.                                                   /*kraira novi zapisnik*/
  288.                                                   //fakultet, datum, predmet, ects krediti
  289.     kreiraj_zapisnik(fakultet, 6, 9, 2017, "Programiranje 2", 7);
  290.  
  291.     /*dodaje stavku na posljednji kreiran zapisnik, a ects studenta uveća ako je student položio ispit. */
  292.  
  293.     if (dodaj_stavku_na_zapisnik(fakultet, 16001, 5))
  294.         cout << "Stavka (rezultat) uspjesno dodata!" << endl;
  295.  
  296.     /*ako je student vec dodat u zapisnik, onda se vrsi samo modifikacija njegove ocjene*/
  297.     if (!dodaj_stavku_na_zapisnik(fakultet, 16001, 6))
  298.         cout << "Student vec dodat na zapisnik. Ocjena je ispravljena!" << endl;
  299.  
  300.     dodaj_stavku_na_zapisnik(fakultet, 15251, 5);
  301.     dodaj_stavku_na_zapisnik(fakultet, 16015, 6);
  302.     dodaj_stavku_na_zapisnik(fakultet, 16014, 8);
  303.  
  304.     kreiraj_zapisnik(fakultet, 7, 9, 2017, "Računarske mreze", 5);
  305.     //naredne stavke se dodaju na novi zapisnik
  306.     dodaj_stavku_na_zapisnik(fakultet, 16015, 5);
  307.     dodaj_stavku_na_zapisnik(fakultet, 16014, 10);
  308.  
  309.  
  310.     /*u posljednjem zapisniku stavku za studenta 16001 ponistiti, a studentu umanjiti ects bodove.
  311.     funkcija vraca false u slucaju da se student ne nalazi na posljednjem zapisniku*/
  312.  
  313.     if (ponisti_stavku_rezultat(fakultet, 16001))
  314.         cout << "Stavka (rezultat) uspjesno ponisten!" << endl;
  315.  
  316.     if (!ponisti_stavku_rezultat(fakultet, 19001))
  317.         cout << "Student nije pronadjen!" << endl;
  318.  
  319.     /* funkcija printaj prikazuje posljednji ispitni zapisnik u formatu prikazanom na pocetku zadatka.
  320.     * pored prikazivanja, identican sadrzaj ispitnog zapisnika je potrebno je pasiti u tekstualni fajl.
  321.     * naziv fajla treba biti Predmet_datum.txt, npr. ProgramiranjeII_2017-09-01.txt. zapisnik se nece
  322.     prikazati niti sacuvati u fajl ukoliko ne posjeduje niti jednu stavku ili su sve stavke ponistene*/
  323.     if (printaj(fakultet))
  324.         cout << "Ispitni zapisnik uspjesno prikazan i spasen u fajl!" << endl;
  325.     fakultet.Dealociraj();
  326.     system("PAUSE");
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement