Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.94 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. enum Kompanija{ Pegasus, TurkishAirlines, AustrianAirlines, FlyEmirates };
  4. int ID = 0;
  5. struct Putnik{
  6.     int _putnikID;
  7.     char * _imePrezime;
  8.     float _brojPredjenihMilja;
  9.     void Unos(char * imePrezime){
  10.         int size = strlen(imePrezime) + 1;
  11.         _imePrezime = new char[size];
  12.         strcpy_s(_imePrezime, size, imePrezime);
  13.         _brojPredjenihMilja = 0;
  14.         _putnikID = ID++;
  15.     }
  16.     void Info(){
  17.         cout << "[" << _putnikID << "] " << _imePrezime <<
  18.             " (" << _brojPredjenihMilja << " milja)" << endl;
  19.     }
  20.     void Dealociraj(){ delete[] _imePrezime; _imePrezime = nullptr; }
  21.     void DodajPredjeneMilje(int brojMilja){ _brojPredjenihMilja += brojMilja; }
  22. };
  23. struct Rezervacija{
  24.     Putnik _putnik;
  25.     int _oznakaSjedista;
  26.     float _cijena;
  27.     void Unos(Putnik * putnik, int oznaka, float cijena){
  28.         _putnik.Unos(putnik->_imePrezime);
  29.         _oznakaSjedista = oznaka;
  30.         _cijena = cijena;
  31.     }
  32.     void Info(){
  33.         _putnik.Info();
  34.         cout << "Sjediste: " << _oznakaSjedista << " Cijena: "
  35.             << _cijena << endl;
  36.     }
  37.     void Dealociraj(){ _putnik.Dealociraj(); }
  38. };
  39. struct Let{
  40.     Kompanija _kompanija;
  41.     char * _pocetak; //pocetna lokacija
  42.     char * _destinacija;
  43.     Rezervacija * _rezervacije[10];
  44.     float * _brojMilja; //odnosi se na duzinu leta – broj predjenih milja
  45.     float * _cijenaKarte;
  46.     int brojacPutnika = 0;
  47.     void Unos(Kompanija kompanija, char * pocetak, char * destinacija, float brojMilja, float cijenaKarte){
  48.         _kompanija = kompanija;
  49.         int size = 0;
  50.         size = strlen(pocetak) + 1;
  51.         _pocetak = new char[size];
  52.         strcpy_s(_pocetak, size, pocetak);
  53.         size = strlen(destinacija) + 1;
  54.         _destinacija = new char[size];
  55.         strcpy_s(_destinacija, size, destinacija);
  56.         _brojMilja = new float;
  57.         *_brojMilja = brojMilja;
  58.         _cijenaKarte = new float;
  59.         *_cijenaKarte = cijenaKarte;
  60.         for (int i = 0; i < 10; i++){
  61.             _rezervacije[i] = new Rezervacija;
  62.         }
  63.         Putnik temp;
  64.         temp.Unos("<SLOBODNO MJESTO>");
  65.         for (int i = 0; i < 10; i++){
  66.             _rezervacije[i]->Unos(&temp, i, 0);
  67.         }
  68.         /*na osnovu vrijednosti primljenih parametara, inicijalizovati vrijednosti atributa strukture.
  69.         predloziti mehanizam pracenja broja slobodnih mjesta bez uvodjenja dodatnih atributa */
  70.     }
  71.     void Dealociraj(){
  72.         /*definisati funkciju vodeci racuna o oslobadjanju svih resursa koji su alocirani za potrebe objekta tipa Let*/
  73.     }
  74.     bool AddRezervaciju(Putnik * p){
  75.    
  76.         for (int i = 0; i < 10; i++){
  77.             //ova petlja treba izbaciti samo SLOBODNA mjesta, ali nisam implementirao sad zbog pregledavanja funkcionalnosti rezervisanja
  78.             _rezervacije[i]->Info();
  79.         }
  80.  
  81.         for (int i = 0; i < 10; i++){
  82.             if (strstr(_rezervacije[i]->_putnik._imePrezime, p->_imePrezime) != NULL){
  83.                 cout << "Isti putnik je vec rezervisao mjesto u letu." << endl;
  84.                 return false;
  85.             }
  86.         }
  87.         char poredProzora;
  88.         if (p->_brojPredjenihMilja > 50000){
  89.             cout << "Da li zelite mjesto pored prozora?(d/n): ";
  90.             do{
  91.                 cin >> poredProzora;
  92.                 if (poredProzora != 'd' && poredProzora != 'n'){
  93.                     cout << "Greska u unosu, unesite ponovo: ";
  94.                 }
  95.             } while (poredProzora != 'd' && poredProzora != 'n');
  96.  
  97.             if (poredProzora == 'd'){
  98.                 for (int i = 0; i < 10; i++){
  99.                     if (i % 2 != 0){                                 //ako je neparno onda je do prozora
  100.                         if (strstr(_rezervacije[i]->_putnik._imePrezime, "<SLOBODNO MJESTO>") != NULL){
  101.                             _rezervacije[i]->Unos(p, i, *_cijenaKarte);
  102.                             _rezervacije[i]->_putnik.DodajPredjeneMilje(*_brojMilja);
  103.                             return true;
  104.                         }
  105.                     }
  106.                 }
  107.             }
  108.             else{
  109.                 for (int i = 0; i < 10; i++){
  110.                     if (i % 2 == 0){
  111.                         if (strstr(_rezervacije[i]->_putnik._imePrezime, "<SLOBODNO MJESTO>") != NULL){
  112.                             _rezervacije[i]->Unos(p, i, *_cijenaKarte);
  113.                             _rezervacije[i]->_putnik.DodajPredjeneMilje(*_brojMilja);
  114.                             return true;
  115.                         }
  116.                     }
  117.                 }
  118.             }
  119.  
  120.         }
  121.         for (int i = 0; i < 10; i++){
  122.             if (strstr(_rezervacije[i]->_putnik._imePrezime, "<SLOBODNO MJESTO>") != NULL){
  123.                 _rezervacije[i]->Unos(p, i, *_cijenaKarte);
  124.                 _rezervacije[i]->_putnik.DodajPredjeneMilje(*_brojMilja);
  125.                 return true;
  126.             }
  127.         }
  128.  
  129.         cout << "Nema slobodnih mjesta!" << endl;
  130.         return false;
  131.         /*putniku se dodjeljuje prvo slobodno sjediste pri cemu ce oznaka sjedista
  132.         biti identicna lokaciji rezervacije u nizu. prilikom dodjeljivanja
  133.         slobodnog sjedista voditi racuna o broju predjenih milja putnika.
  134.         ako je putnik presao vise od 50000 milja onda mu je potrebno ponuditi
  135.         sjediste pored prozora (pretpostavimo da su sva sjedista sa neparnim
  136.         indeksom sjedista pored prozora).u slucaju da putnik ne zeli mjesto pored
  137.         prozora, onda mu se dodjeljuje prvo slobodno sjediste. onemoguciti dodavanje
  138.         rezervacija sa identicnim putnicima (isti putnikID i imePrezime). u zavisnosti
  139.         od uspjesnosti funkcija vraca true ili false */
  140.     }
  141.     bool RemoveRezervaciju(char * imePrezime){
  142.         Putnik temp;
  143.         temp.Unos("<SLOBODNO MJESTO>");
  144.         for (int i = 0; i < 10; i++){
  145.             if (strstr(_rezervacije[i]->_putnik._imePrezime, imePrezime) != NULL){
  146.                 _rezervacije[i]->Dealociraj();
  147.                 _rezervacije[i]->Unos(&temp, i, 0);
  148.                 return true;
  149.             }
  150.         }
  151.         return false;
  152.         /*na osnovu vrijednosti parametra izvrsiti
  153.         uklanjanje rezervacije iz niza. voditi racuna o
  154.         alociranom memorijskom prostoru. u zavisnosti od
  155.         uspjesnosti funkcija vraca true ili false */
  156.     }
  157. };
  158. float GetMiljeByKompanija(Let * letovi, int max, Kompanija kompanija, Putnik * putnik){
  159.     float sumaMilja = 0;
  160.     for (int i = 0; i < max; i++){
  161.         if (letovi[i]._kompanija == kompanija){
  162.             for (int j = 0; j < 10; j++){
  163.                 if (strstr(letovi[i]._rezervacije[j]->_putnik._imePrezime, putnik->_imePrezime) != NULL){
  164.                     sumaMilja += letovi[i]._rezervacije[j]->_putnik._brojPredjenihMilja;
  165.                 }
  166.             }
  167.         }
  168.        
  169.     }
  170.     return sumaMilja;
  171.  
  172.     /*funkcija vraca broj milja koje je putnik (proslijedjen kao parametar funkcije)
  173.     ostvario putujuci sa kompanijom koja je takodjer proslijedjena kao
  174.     parametar funkcije*/
  175.     return 0;
  176. }
  177. void main(){
  178.     int max = 2;
  179.     Let *l;
  180.     l = new Let[max];
  181.     Putnik p2, p3, p4, p5, p6;
  182.     Putnik *p1 = new Putnik;
  183.     p1->Unos("Adnan Mujagic");
  184.     p2.Unos("Arnes Mujagic");
  185.     p3.Unos("Nejla Mujagic");
  186.     p4.Unos("Dijana Mujagic");
  187.     p5.Unos("Zubejr Sedic");
  188.     p5.DodajPredjeneMilje(60000);
  189.     p6.Unos("Adnan Mujagic");
  190.     l[0].Unos(TurkishAirlines, "Berlin", "Sarajevo", 640, 100);
  191.     l[1].Unos(TurkishAirlines, "Istanbul", "Sarajevo", 570, 90);
  192.     l[0].AddRezervaciju(p1);
  193.     l[0].AddRezervaciju(&p2);
  194.     l[0].AddRezervaciju(&p3);
  195.     l[0].AddRezervaciju(&p4);
  196.     l[0].AddRezervaciju(&p5);
  197.     if (l[0].RemoveRezervaciju("Nejla Mujagic") == true)
  198.         cout << "Uspjesno obrisana rezervacija." << endl;
  199.     else
  200.         cout << "Rezervacija nije izbrisana." << endl;
  201.     l[0].AddRezervaciju(&p6);
  202.  
  203.     l[1].AddRezervaciju(p1);
  204.     cout << "Broj predjenih milja sa prvim putnikom u datoj kompaniji je: " << GetMiljeByKompanija(l, 2, TurkishAirlines, p1) << endl;
  205.  
  206.  
  207.     /*provjeriti validnost izvrsenja svih dostupnih funkcionalnosti.
  208.     izbjegavajte koristenje vlastitog imena i prezimena*/
  209.     cout << "puno srece u radu..." << endl;
  210.  
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement