limun11

5. Globalne-Stavke-Postavka

Jun 9th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.36 KB | None | 0 0
  1. Grupa A
  2. 1. ZADATAK
  3.  
  4. Izvršiti definiciju funkcija na naèin koji odgovara opisu (komentarima) datom neposredno uz pozive ili nazive funkcija. Možete dati komentar na bilo koju liniju code-a koju smatrate da bi trebalo unaprijediti ili da æe eventualno uzrokovati grešku prilikom kompajliranja. Takoðer, možete dodati dodatne funkcije koje æe vam olakšati implementaciju programa.
  5.  
  6. #include <iostream>
  7. using namespace std;
  8.  
  9. /*
  10. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEÆE BODOVATI
  11. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  12. 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 VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
  13. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  14. 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)
  15. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  16. */
  17. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  18. #pragma warning(disable:4996)
  19.  
  20. /*
  21. u nastavku je prikazan primjer ispitnog zapisnika (izvještaj o održanom ispitu) sa detaljima/stavkama
  22.  
  23. -------------------------------------------
  24. Datum ispita: 07.09.2018
  25. Predmet: Programiranje II
  26. -------------------------------------------
  27. IZVJESTAJ O ODRZANOM ISPITU
  28. -------------------------------------------
  29. Br indeksa  Ime prezime   Komisijsko***  Ocjena
  30. 16001        A. Joldic        DA        5
  31. 15251        D. Music        NE        7 Ponisteno
  32. 16014        E. Babovic        DA        8
  33. -------------------------------------------
  34. UKUPNO POLOZILO:    2
  35. PROSJECNA OCJENA:    6.67
  36. -------------------------------------------
  37. *** komisijski ispit: ako student pristupa èetvrti put i dalje (raèunajuæi i poništene rezultate)
  38. */
  39.  
  40. const char * crt = "\n-------------------------------------------\n";
  41. const int MAX = 100;
  42.  
  43. char * AlocirajNizKaraktera(const char * sadrzaj) {
  44.     if (sadrzaj == nullptr)
  45.         return nullptr;
  46.     int vel = strlen(sadrzaj) + 1;
  47.     char * temp = new char[vel];
  48.     strcpy_s(temp, vel, sadrzaj);
  49.     return temp;
  50. }
  51. struct Datum {
  52.     int _dan, _mjesec, _godina;
  53.     void Unos(int d, int m, int g) {
  54.         _dan = d;
  55.         _mjesec = m;
  56.         _godina = g;
  57.     }
  58.     void Ispis() {
  59.         cout << _dan << "." << _mjesec << "." << _godina << " ";
  60.     }
  61. };
  62. struct Student {
  63.     char * _imePrezime;
  64.     int _brojIndeksa;
  65.     int _polozioECTS;
  66.  
  67.     void Unos(const char* ime, float indeks) {
  68.         _imePrezime = AlocirajNizKaraktera(ime);
  69.         _brojIndeksa = indeks;
  70.         _polozioECTS = 0;
  71.     }
  72.     void Dealociraj() {
  73.         delete[] _imePrezime; _imePrezime = nullptr;
  74.     }
  75.     void DodajECTS(float ects) { _polozioECTS += ects; }
  76.     void UmanjiECTS(float ects) { _polozioECTS -= ects; }
  77.     void Ispis() {
  78.         cout << _imePrezime << ", Indeks: " << _brojIndeksa << ", ECTS: " << _polozioECTS << " " << endl;
  79.     }
  80. };
  81.  
  82. struct ZapisnikStavka {
  83.     int _ocjena;
  84.     //ZapisnikStavka æe pokazivati na objekat tipa student koji se nalazi u instanci tipa Fakultet, pa nije potrebno vršiti nove alokacije
  85.     Student* _student;
  86.     bool _ponisteno;
  87.     bool _komisijskoPolaganje;
  88.  
  89.     void Unos(Student* student, int ocjena, bool komisijskoPolaganje) {
  90.         _ocjena = ocjena;
  91.         _student = student;
  92.         _komisijskoPolaganje = komisijskoPolaganje;
  93.         _ponisteno = false;
  94.     }
  95.     void Ispis() {
  96.         cout << _student->_imePrezime << "\t" << _ocjena << "\t" << _student->_brojIndeksa << "\t";
  97.         if (_ponisteno)
  98.             cout << " Ponisteno";
  99.         cout << endl;
  100.     }
  101. };
  102. struct IspitniZapisnik {
  103.     Datum _datum;
  104.     ZapisnikStavka * _stavke;//svaki put se dodaje po jedna stavka
  105.     int _brojStavki;
  106.     int _ects;
  107.     char * _predmet;
  108.     void Unos(Datum & datum, char* predmet, int ects) {
  109.         _datum = datum;
  110.         _brojStavki = 0;
  111.         _stavke = nullptr;
  112.         _ects = ects;
  113.         _predmet = AlocirajNizKaraktera(predmet);
  114.     }
  115.     void Dealociraj() {
  116.         delete[] _predmet; _predmet = nullptr;
  117.         delete[] _stavke; _stavke = nullptr;
  118.     }
  119.     /*Prosjecnu ocjenu izraèunati koristeæi lambda funkciju. u prosjek raèunati i poništene rezultate (stavke)*/
  120.     float GetProsjecnaOcjena() { return 0; }
  121. };
  122.  
  123. /*unutar objekta tipa Fakultet ce se cuvati podaci o svim studentima i ispitnim zapisnicima, a dodaju se pomocu globalnih funkcija*/
  124. struct Fakultet {
  125.     //umjesto brojaca koristiti default.ne vrijednosti
  126.     Student* _studenti[MAX] = { nullptr };
  127.     IspitniZapisnik* _zapisnici[MAX] = { nullptr };
  128.  
  129.     void Dealociraj() {
  130.         for (size_t i = 0; i < MAX; i++) {          
  131.             _studenti[i]->Dealociraj();
  132.             _zapisnici[i]->Dealociraj();
  133.             delete _studenti[i]; _studenti[i] = NULL;
  134.             delete _zapisnici[i]; _zapisnici[i] = NULL;
  135.         }
  136.     }
  137. };
  138. int main() {
  139.     Fakultet fakultet;
  140.  
  141.     /*dodaje podatke o novom studentu u fakultet */
  142.     //fakultet, imePrezime, broj indeksa
  143.     dodaj_student(fakultet, "A. Joldic", 16001);
  144.     dodaj_student(fakultet, "D. Music", 15251);
  145.     dodaj_student(fakultet, "E. Babovic    ", 16014);
  146.     dodaj_student(fakultet, "E. Junuz", 16015);
  147.     dodaj_student(fakultet, "J. Azemovic", 16014);//ne dodaje studenta jer je broj indeksa zauzet
  148.     /*kraira novi zapisnik*/
  149.      //fakultet, datum, predmet, ects krediti
  150.     kreiraj_zapisnik(fakultet, 6, 9, 2018, "Programiranje II", 7);
  151.  
  152.     /*dodaje stavku na posljednji kreiran zapisnik, a ects studenta (_polozioECTS) uveæa ako je student položio ispit. */
  153.  
  154.     if (dodaj_stavku_na_zapisnik(fakultet, 16001, 5))
  155.         cout << "Stavka (rezultat) uspjesno dodata!" << endl;
  156.  
  157.     /*ako je student vec dodat u zapisnik, onda se vrsi samo modifikacija njegove ocjene*/
  158.     if (!dodaj_stavku_na_zapisnik(fakultet, 16001, 6))
  159.         cout << "Student vec dodat na zapisnik. Ocjena je ispravljena!" << endl;
  160.  
  161.     dodaj_stavku_na_zapisnik(fakultet, 15251, 5);
  162.     dodaj_stavku_na_zapisnik(fakultet, 16015, 6);
  163.     dodaj_stavku_na_zapisnik(fakultet, 16014, 8);
  164.  
  165.     kreiraj_zapisnik(fakultet, 7, 9, 2018, "Raèunarske mreze", 5);
  166.     //naredne stavke se dodaju na novi zapisnik
  167.     dodaj_stavku_na_zapisnik(fakultet, 16015, 5);
  168.     dodaj_stavku_na_zapisnik(fakultet, 16014, 10);
  169.  
  170.  
  171.     /*u posljednjem zapisniku stavku za studenta 16001 ponistiti, a studentu umanjiti ects bodove.
  172.     funkcija vraca false u slucaju da se student ne nalazi na posljednjem zapisniku*/
  173.  
  174.     if (ponisti_stavku_rezultat(fakultet, 16001))
  175.         cout << "Stavka (rezultat) uspjesno ponisten!" << endl;
  176.  
  177.     if (!ponisti_stavku_rezultat(fakultet, 19001))
  178.         cout << "Student nije pronadjen!" << endl;
  179.  
  180.     /* funkcija printaj prikazuje posljednji ispitni zapisnik u formatu prikazanom na pocetku zadatka.
  181.     zapisnik se nece prikazati ukoliko ne posjeduje niti jednu stavku ili su sve stavke poništene. prilikom kreiranja zapisnika
  182.     iskoristiti funkciju GetProsjecnaOcjena i njenu lambda implementaciju*/
  183.     if (fakultet.printaj())
  184.         cout << "Ispitni zapisnik uspjesno prikazan!" << endl;
  185.     fakultet.Dealociraj();
  186.  
  187.     system("pause>0");
  188.     return 0;
  189. }
Add Comment
Please, Sign In to add comment