Advertisement
neogz

PR1 - ispitni zadnji

Sep 19th, 2014
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.25 KB | None | 0 0
  1. #ifdef _MSC_VER
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #endif
  4. #include <iostream>
  5. using namespace std;
  6. char crt[] = { "\n-------------------------------------------------\n" };
  7. char crt2[] = { "-------------------------------------------------\n" };
  8.  
  9. enum Kompanija { Pegasus, TurkishAirlines, AustrianAirlines, FlyEmirates };
  10. int ID = 1;
  11. struct Putnik {
  12.     int _putnikID;
  13.     char * _imePrezime;
  14.     float _brojPredjenihMilja;
  15.     void Unos(char * imePrezime){
  16.         int size = strlen(imePrezime) + 1;
  17.         _imePrezime = new char[size];
  18.         strcpy_s(_imePrezime, size, imePrezime);
  19.  
  20.         _brojPredjenihMilja = 0;
  21.         _putnikID = ID++;
  22.     }
  23.     void Info(){
  24.         cout << crt2 << "[" << _putnikID << "] " << _imePrezime << " (" << _brojPredjenihMilja << " milja) " <<endl;
  25.     }
  26.     void Dealociraj(){
  27.         delete[] _imePrezime;
  28.         _imePrezime = nullptr;
  29.     }
  30.     void DodajPredjeneMilje(int brojmilja){
  31.         _brojPredjenihMilja += brojmilja;
  32.     }
  33. };
  34. struct Rezervacija{
  35.     Putnik _putnik;
  36.     int _oznakaSjedista;
  37.     float _cijena;
  38.     void Unos(Putnik putnik, int oznaka, float cijena){
  39.         _putnik.Unos(putnik._imePrezime);
  40.         _oznakaSjedista = oznaka;
  41.         _cijena = cijena;
  42.     }
  43.     void Info(){
  44.         _putnik.Info();
  45.         cout << "Oznaka sjedista: \t" << _oznakaSjedista << endl;
  46.         cout << "Cijena: \t\t" << _cijena << endl;
  47.     }
  48.     void Dealociraj(){
  49.         _putnik.Dealociraj();
  50.     }
  51. };
  52. struct Let {
  53.     Kompanija _kompanija;
  54.     char * _pocetak;
  55.     char * _destinacija;
  56.     float _brojMilja;
  57.     float _cijenaKarte;
  58.  
  59.     Rezervacija * _rezervacija;
  60.     int _brojMjesta;
  61.    
  62.     //////////////////////////////////////////
  63.     void Unos(Kompanija kompanija, char * pocetak, char * destinacija, int brojMjesta, float brojMilja, float cijena){
  64.         _kompanija = kompanija;
  65.         _pocetak = new char[strlen(pocetak) + 1];
  66.         strcpy(_pocetak, pocetak);
  67.  
  68.         _destinacija = new char[strlen(destinacija) + 1];
  69.         strcpy(_destinacija, destinacija);
  70.  
  71.         _brojMjesta = brojMjesta;
  72.        
  73.         _rezervacija = new Rezervacija[_brojMjesta];
  74.         Putnik temp;
  75.         temp.Unos("<SLOBODNO MJESTO>");
  76.         for (int i = 0; i < _brojMjesta; i++)
  77.             _rezervacija[i].Unos(temp, i, 0);
  78.  
  79.         _brojMilja = brojMilja;
  80.         _cijenaKarte = cijena;
  81.     }
  82.     void Dealociraj(){
  83.         /*Definisati funkciju vodeci racuna o oslobadjanju svih resursa koji su alocirani za potrebe objekta tipa Let.*/
  84.         delete[]_pocetak;
  85.         delete[]_destinacija;
  86.         for (int i = 0; i < _brojMjesta; i++)
  87.             _rezervacija[i].Dealociraj();
  88.     }
  89.     bool AddRezervaciju(Putnik * p){
  90.         /*
  91.         Na samom pocetku, funkcija treba ispisati listu svih SLOBODNIH sjedista na letu, te putniku omoguciti da izabere neko od njih.
  92.         Voditi racuna o broju prednjenih milja, prilikom formiranja cijene karte. Ako je putnik presao:
  93.             - od 10 000 do  50 000 milja onda ostvaruje popust od 10% na punu cijenu karte,
  94.             - od 50 000 do 100 000 milja onda ostvaruje popust od 20% na punu cijenu karte,
  95.             - a preko 100 000 milja se ostvaruje popust od 30% na pounu cijenu karte.
  96.         Omoguciti dodavanje rezervacija sa identicnim putnicima (isti putnikID i imePrezime.
  97.         U zavisnosti od uspjesnosti funkcija vraca TRUE ili FALSE;
  98.         */
  99.        
  100.         for (int i = 0; i < _brojMjesta; i++){ 
  101.             if (strcmp(_rezervacija[i]._putnik._imePrezime, p->_imePrezime) == 0)
  102.             {
  103.                 cout << "GRESKA! \nKorisnik je vec rezervisao mjesto." << endl;
  104.                 return false;
  105.             }
  106.         }
  107.  
  108.         // ispis slobodnih mjesta
  109.         cout << "Slobodna mjesta su: " << crt;
  110.         for (int i = 0; i < _brojMjesta; i++){
  111.             if (_rezervacija[i]._cijena == 0) {
  112.                 cout << i + 1 << "\t";
  113.             }
  114.         }
  115.         cout << crt;
  116.  
  117.         // biranje sjedista koje ce se rezervisati
  118.         int izbor;
  119.         do{
  120.             cout << "Izaberite sjediste: ";
  121.             cin >> izbor;
  122.             cin.ignore();
  123.             --izbor;
  124.         } while (izbor <0 || izbor >= _brojMjesta);
  125.  
  126.         // dobivanje cijene sa popustom ili bez popusta
  127.         float cijena = _cijenaKarte;
  128.         float milje = p->_brojPredjenihMilja;
  129.         if (milje > 100000) cijena *= 0.70;
  130.         else if (milje<100000 && milje >= 50000) cijena *= 0.80;
  131.         else if (milje < 50000 && milje >= 10000) cijena *= 0.90;
  132.  
  133.         // rezervacija
  134.         _rezervacija[izbor].Unos(*p, _rezervacija[izbor]._oznakaSjedista, cijena);
  135.         return true;
  136.        
  137.     }
  138.  
  139. };
  140. float GetMiljeByKompanija(Let * letovi, int maxLetova, Kompanija kompanija, Putnik * putnik){
  141.     /*  Funkcija vraca broj milja koje je putnik (proslijedjen kao parametar funkcije), ostvario putujuci sa kompanijom
  142.         koja je takodjer proslijedjena kao parametar funkcije.  */
  143.     float miljeZaVratiti = 0;
  144.     for (int i = 0; i < maxLetova; i++)
  145.         for (int j = 0; j < letovi[i]._brojMjesta; j++)
  146.         if (letovi[i]._kompanija == kompanija && strcmp(putnik->_imePrezime, letovi[i]._rezervacija[j]._putnik._imePrezime) == 0)
  147.                 miljeZaVratiti += letovi[i]._brojMilja;
  148.        
  149.     return miljeZaVratiti;
  150. }
  151. int main(){
  152.    
  153.     Let test[2];
  154.     test[0].Unos(FlyEmirates, "Gorazde", "London", 5, 1425, 125);
  155.     test[1].Unos(Pegasus, "Sarajevo", "Mostar", 6, 50, 25);
  156.  
  157.     Putnik p1, p2, p3,p4;
  158.     p1.Unos("Nedim Fejzic");
  159.     p2.Unos("Saban Saulic");
  160.     p3.Unos("Bakir Izetbegovic");
  161.     p4.Unos("Edin Dzeko");
  162.  
  163.     test[0].AddRezervaciju(& p1);
  164.     test[0].AddRezervaciju(& p3);
  165.     test[0].AddRezervaciju(& p4);
  166.     cout << crt;
  167.     test[1].AddRezervaciju(& p1);
  168.     test[1].AddRezervaciju(& p2);
  169.     test[1].AddRezervaciju(& p3);
  170.    
  171.  
  172.     cout << crt2 <<"Putnik p1 je presao: ";
  173.     cout << GetMiljeByKompanija(test,2,Pegasus,&p1);
  174.  
  175.     system("pause > null");
  176.     return 0;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement