adnanj

Letovi - rezervisanje avio karata

Jul 12th, 2015
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.32 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. enum Kompanija {Pegasus, TurkishAirlines, AustrianAirlines, FlyEmirates};
  6. char * Kompanije[] = {"Pegasus", "TurkishAirlines", "AustrianAirlines", "FlyEmirates"};
  7.  
  8. char * crtice = "\n================================================\n";
  9.  
  10. int ID = 1;
  11.  
  12. struct Putnik{
  13.     int _putnikID;
  14.     char * _imePrezime;
  15.     float _brojPredjenihMilja;
  16.  
  17.     void Unos(char * imePrezime)
  18.     {
  19.         int vel = strlen(imePrezime) + 1;
  20.         _imePrezime = new char[vel];
  21.         strcpy_s(_imePrezime, vel, imePrezime);
  22.         _brojPredjenihMilja = 0;
  23.         _putnikID = ID++;
  24.     }
  25.  
  26.     void Info()
  27.     {
  28.         cout << "[" << _putnikID<<"] "<< _imePrezime <<
  29.         " (" << _brojPredjenihMilja << " milja)" << " | ";
  30.     }
  31.  
  32.     void Dealociraj()
  33.     {
  34.         delete [] _imePrezime;
  35.         _imePrezime = nullptr;
  36.     }
  37.  
  38.     void DodajPredjeneMilje(int brojMilja)
  39.     {
  40.         _brojPredjenihMilja += brojMilja;
  41.     }
  42. };
  43.  
  44.  
  45.  
  46. struct Rezervacija{
  47.     Putnik * _putnik;
  48.     int _oznakaSjedista;
  49.     float _cijena;
  50.  
  51.     void Unos(Putnik putnik, int oznaka, float cijena)
  52.     {
  53.         _putnik = new Putnik;
  54.         _putnik->_putnikID = putnik._putnikID;
  55.         int vel = strlen(putnik._imePrezime) + 1;
  56.         _putnik->_imePrezime = new char[vel];
  57.         strcpy_s(_putnik->_imePrezime, vel, putnik._imePrezime);
  58.         _putnik->_brojPredjenihMilja = putnik._brojPredjenihMilja;
  59.         _oznakaSjedista = oznaka;
  60.         _cijena = cijena;
  61.     }
  62.  
  63.     void Info()
  64.     {
  65.         _putnik->Info();
  66.         cout << "Sjediste: " << _oznakaSjedista << " Cijena: " << _cijena << " KM " << endl;
  67.     }
  68.  
  69.     void Dealociraj()
  70.     {
  71.         _putnik->Dealociraj();
  72.         delete _putnik;
  73.         _putnik = nullptr;
  74.     }
  75.  
  76. };
  77.  
  78. struct Let{
  79.     Kompanija * _kompanija;
  80.     char * _pocetak; // Početna lokacija
  81.     char * _destinacija;  
  82.     Rezervacija * _rezervacije;
  83.     int _brojMjesta; // Maksimalan broj mjesta na letu  
  84.     float _brojMilja; // Odnosi se na dužinu leta – broj pređenih milja
  85.     float _cijenaKarte;    
  86.  
  87.     void Unos(Kompanija kompanija, char * pocetak, char * destinacija, int brojMjesta, float brojMilja, float cijena)
  88.     {
  89.         _kompanija = new Kompanija(kompanija);
  90.  
  91.         int vel = strlen(pocetak) + 1;
  92.         _pocetak = new char[vel];
  93.         strcpy_s(_pocetak, vel, pocetak);
  94.  
  95.         vel = strlen(destinacija) + 1;
  96.         _destinacija = new char[vel];
  97.         strcpy_s(_destinacija, vel, destinacija);
  98.  
  99.         _brojMjesta = brojMjesta;
  100.         _rezervacije = new Rezervacija[_brojMjesta];
  101.  
  102.         Putnik * temp = new Putnik;
  103.            
  104.         temp->Unos("<SLOBODNO MJESTO>");
  105.  
  106.         for (int i = 0; i < _brojMjesta; i++)
  107.             _rezervacije[i].Unos(*temp, i, 0);
  108.  
  109.         _brojMilja = brojMilja;
  110.         _cijenaKarte = cijena;
  111.     }
  112.  
  113.     void Info()
  114.     {
  115.         cout << crtice << "\t" << Kompanije[*_kompanija] << " [" << _pocetak << " - " << _destinacija << "]" << crtice;
  116.         cout << "Broj mjesta: " << _brojMjesta << endl;
  117.         cout << "Broj milja: " << _brojMilja << endl;
  118.         cout << "Cijena karte: " << _cijenaKarte << " KM" << endl;
  119.         cout << "Rezervacije:" << endl;
  120.         for(int i = 0; i < _brojMjesta; i++)
  121.         {
  122.             cout << i + 1 << ". ";
  123.             _rezervacije[i].Info();
  124.         }
  125.     }
  126.  
  127.  
  128.     void Dealociraj()
  129.     {
  130.         delete _kompanija;
  131.         _kompanija = nullptr;
  132.         delete [] _pocetak;
  133.         _pocetak = nullptr;
  134.         delete [] _destinacija;
  135.         _destinacija = nullptr;
  136.         for(int i = 0; i < _brojMjesta; i++)
  137.             _rezervacije[i].Dealociraj();
  138.         delete [] _rezervacije;
  139.         _rezervacije = nullptr;
  140.     }
  141.  
  142.     bool AddRezervaciju(Putnik * p)
  143.     {
  144.  
  145.         /* Na samom početku, funkcija ispisuje listu slobodnih sjedišta na letu, te omogućava izbor nekog od njih. Prilikom
  146.         formiranja cijene karte vodi se računa o broju pređenih milja putnika; ako je putnik prešao od 10000 do 50000 milja onda ostvaruje popust od 10% na punu cijenu karte (_cijenaKarte), od 50000 do 100000 milja ostvaruje popust od 20% na punu cijenu karte, a preko 100000 milja ostvaruje  popust od 30% na punu cijenu karte. Onemogućeno je dodavanje rezervacija sa identičnim putnicima (isti putnikID i imePrezime). U zavisnosti od uspješnosti funkcija vraća "true" ili "false". */
  147.  
  148.         int izbor;
  149.         cout << "Slobodna mjesta na letu su: ";
  150.         for(int i = 0; i < _brojMjesta; i++) {
  151.             if(_rezervacije[i]._putnik->_putnikID == p->_putnikID && strcmp(_rezervacije[i]._putnik->_imePrezime, p->_imePrezime) == 0)
  152.                 return false;
  153.             if(strcmp(_rezervacije[i]._putnik->_imePrezime, "<SLOBODNO MJESTO>") == 0)
  154.                 cout << _rezervacije[i]._oznakaSjedista + 1 << " ";
  155.         }
  156.  
  157.         cout << endl;
  158.  
  159.         do {
  160.         cout <<  "Vas izbor je: ";
  161.         cin >> izbor;
  162.         izbor--; }
  163.         while((izbor < 0 || izbor >= _brojMjesta) || strcmp(_rezervacije[izbor]._putnik->_imePrezime, "<SLOBODNO MJESTO>") != 0);
  164.  
  165.         float cijenaKarte = _cijenaKarte;
  166.             if (p->_brojPredjenihMilja >= 10000 && p->_brojPredjenihMilja < 50000)
  167.                       cijenaKarte = _cijenaKarte * 0.9;
  168.         if (p->_brojPredjenihMilja >= 50000 && p->_brojPredjenihMilja < 100000)
  169.                       cijenaKarte = _cijenaKarte * 0.8;
  170.             if (p->_brojPredjenihMilja > 100000)
  171.                       cijenaKarte = _cijenaKarte * 0.7;
  172.  
  173.         p->DodajPredjeneMilje(_brojMilja);
  174.  
  175.         _rezervacije[izbor].Unos(*p, izbor, cijenaKarte);
  176.  
  177.         return true;
  178.     }
  179.  
  180.  
  181.  
  182.     bool RemoveRezervacija(int oznakaSjedista)
  183.     {
  184.  
  185.       /* Funkcija uklanja rezervaciju na sjedištu čija je oznaka proslijeđena kao parametar funkcije, te vraća vrijednost "true"  ili "false". U slučaju da označeno mjesto nije rezervisano ili ne postoji na tom letu, funkcija vraća vrijednost "false". */
  186.       oznakaSjedista--;
  187.         if(oznakaSjedista < 0 || oznakaSjedista >= _brojMjesta)
  188.                 return false;
  189.  
  190.         if(strcmp(_rezervacije[oznakaSjedista]._putnik->_imePrezime, "<SLOBODNO MJESTO>") == 0)
  191.           return false;
  192.  
  193.         _rezervacije[oznakaSjedista].Dealociraj();
  194.  
  195.         Putnik *temp = new Putnik;
  196.         temp->Unos("<SLOBODNO MJESTO>");
  197.  
  198.         _rezervacije[oznakaSjedista].Unos(*temp, oznakaSjedista, 0);
  199.  
  200.         return true;
  201.     }
  202.  
  203. };
  204.  
  205.  
  206.  
  207. float GetMiljeByKompanija(Let * letovi, int maxLetova, Kompanija k, Putnik p){
  208.     /* Funkcija vraća broj milja koje je putnik "p" ostvario putujući kompanijom "k". */  
  209.     float brojMilja = 0;
  210.  
  211.     for(int i = 0; i < maxLetova; i++)
  212.         if(*letovi[i]._kompanija == k) {
  213.             for(int j = 0; j < letovi[i]._brojMjesta; j++)
  214.                 if(p._putnikID == letovi[i]._rezervacije[j]._putnik->_putnikID)
  215.                     brojMilja += letovi[i]._brojMilja;
  216.         }
  217.  
  218.     return brojMilja;
  219. }
  220.  
  221. void main()
  222. {
  223.     Putnik putnici[5];
  224.  
  225.     putnici[0].Unos("Putnik 1");
  226.     putnici[1].Unos("Putnik 2");
  227.     putnici[2].Unos("Putnik 3");
  228.     putnici[3].Unos("Putnik 4");
  229.     putnici[4].Unos("Putnik 5");
  230.  
  231.     cout << "[Putnici] Dodato pet putnika!" << endl;
  232.  
  233.     Let letovi[4];
  234.  
  235.     letovi[0].Unos(Pegasus, "Mostar", "Berlin", 10, 667, 200);
  236.     letovi[1].Unos(TurkishAirlines, "Istanbul", "Sarajevo", 15, 728, 250);
  237.     letovi[2].Unos(AustrianAirlines, "Bec", "Mostar", 20, 555, 175);
  238.     letovi[3].Unos(Pegasus, "London", "Berlin", 15, 688, 300);
  239.  
  240.     cout << "[Letovi] Dodata cetiri leta!" << endl << endl;
  241.  
  242.     cout << "[Ispis] Ispisujem prvi let:";
  243.     letovi[0].Info();
  244.     cout << crtice << "[Rezervacija karte za let Mostar - Berlin] - Putnik 1" << crtice;
  245.     if(letovi[0].AddRezervaciju(&putnici[0]))
  246.         cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
  247.     else
  248.         cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
  249.     cout << "Ponovo ispisujem prvi let:";
  250.     letovi[0].Info();
  251.     cout << crtice << "[Rezervacija karte za let Mostar - Berlin] - Putnik 2" << crtice;
  252.     if(letovi[0].AddRezervaciju(&putnici[1]))
  253.         cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
  254.     else
  255.         cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
  256.     cout << "Ponovo ispisujem prvi let:";
  257.     letovi[0].Info();
  258.     cout << "[Rezervacija] Uklanjam rezervaciju za Putnika 1 i ponovo ispisujem.";
  259.     letovi[0].RemoveRezervacija(1);
  260.     letovi[0].Info();
  261.         cout << crtice << "[Rezervacija karte za let Istanbul - Sarajevo] - Putnik 1" << crtice;
  262.     if(letovi[1].AddRezervaciju(&putnici[0]))
  263.         cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
  264.     else
  265.         cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
  266.     cout << crtice << "[Rezervacija karte za let London - Berlin] - Putnik 1" << crtice;
  267.     if(letovi[3].AddRezervaciju(&putnici[0]))
  268.         cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
  269.     else
  270.         cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
  271.     cout << crtice << "Ukupno milja koje je presao Putnik 1 kompanijom Pegasus: " << GetMiljeByKompanija(letovi, 4, Pegasus, putnici[0]) << endl;
  272.  
  273. }
Add Comment
Please, Sign In to add comment