Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- enum Kompanija {Pegasus, TurkishAirlines, AustrianAirlines, FlyEmirates};
- char * Kompanije[] = {"Pegasus", "TurkishAirlines", "AustrianAirlines", "FlyEmirates"};
- char * crtice = "\n================================================\n";
- int ID = 1;
- struct Putnik{
- int _putnikID;
- char * _imePrezime;
- float _brojPredjenihMilja;
- void Unos(char * imePrezime)
- {
- int vel = strlen(imePrezime) + 1;
- _imePrezime = new char[vel];
- strcpy_s(_imePrezime, vel, imePrezime);
- _brojPredjenihMilja = 0;
- _putnikID = ID++;
- }
- void Info()
- {
- cout << "[" << _putnikID<<"] "<< _imePrezime <<
- " (" << _brojPredjenihMilja << " milja)" << " | ";
- }
- void Dealociraj()
- {
- delete [] _imePrezime;
- _imePrezime = nullptr;
- }
- void DodajPredjeneMilje(int brojMilja)
- {
- _brojPredjenihMilja += brojMilja;
- }
- };
- struct Rezervacija{
- Putnik * _putnik;
- int _oznakaSjedista;
- float _cijena;
- void Unos(Putnik putnik, int oznaka, float cijena)
- {
- _putnik = new Putnik;
- _putnik->_putnikID = putnik._putnikID;
- int vel = strlen(putnik._imePrezime) + 1;
- _putnik->_imePrezime = new char[vel];
- strcpy_s(_putnik->_imePrezime, vel, putnik._imePrezime);
- _putnik->_brojPredjenihMilja = putnik._brojPredjenihMilja;
- _oznakaSjedista = oznaka;
- _cijena = cijena;
- }
- void Info()
- {
- _putnik->Info();
- cout << "Sjediste: " << _oznakaSjedista << " Cijena: " << _cijena << " KM " << endl;
- }
- void Dealociraj()
- {
- _putnik->Dealociraj();
- delete _putnik;
- _putnik = nullptr;
- }
- };
- struct Let{
- Kompanija * _kompanija;
- char * _pocetak; // Početna lokacija
- char * _destinacija;
- Rezervacija * _rezervacije;
- int _brojMjesta; // Maksimalan broj mjesta na letu
- float _brojMilja; // Odnosi se na dužinu leta – broj pređenih milja
- float _cijenaKarte;
- void Unos(Kompanija kompanija, char * pocetak, char * destinacija, int brojMjesta, float brojMilja, float cijena)
- {
- _kompanija = new Kompanija(kompanija);
- int vel = strlen(pocetak) + 1;
- _pocetak = new char[vel];
- strcpy_s(_pocetak, vel, pocetak);
- vel = strlen(destinacija) + 1;
- _destinacija = new char[vel];
- strcpy_s(_destinacija, vel, destinacija);
- _brojMjesta = brojMjesta;
- _rezervacije = new Rezervacija[_brojMjesta];
- Putnik * temp = new Putnik;
- temp->Unos("<SLOBODNO MJESTO>");
- for (int i = 0; i < _brojMjesta; i++)
- _rezervacije[i].Unos(*temp, i, 0);
- _brojMilja = brojMilja;
- _cijenaKarte = cijena;
- }
- void Info()
- {
- cout << crtice << "\t" << Kompanije[*_kompanija] << " [" << _pocetak << " - " << _destinacija << "]" << crtice;
- cout << "Broj mjesta: " << _brojMjesta << endl;
- cout << "Broj milja: " << _brojMilja << endl;
- cout << "Cijena karte: " << _cijenaKarte << " KM" << endl;
- cout << "Rezervacije:" << endl;
- for(int i = 0; i < _brojMjesta; i++)
- {
- cout << i + 1 << ". ";
- _rezervacije[i].Info();
- }
- }
- void Dealociraj()
- {
- delete _kompanija;
- _kompanija = nullptr;
- delete [] _pocetak;
- _pocetak = nullptr;
- delete [] _destinacija;
- _destinacija = nullptr;
- for(int i = 0; i < _brojMjesta; i++)
- _rezervacije[i].Dealociraj();
- delete [] _rezervacije;
- _rezervacije = nullptr;
- }
- bool AddRezervaciju(Putnik * p)
- {
- /* Na samom početku, funkcija ispisuje listu slobodnih sjedišta na letu, te omogućava izbor nekog od njih. Prilikom
- 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". */
- int izbor;
- cout << "Slobodna mjesta na letu su: ";
- for(int i = 0; i < _brojMjesta; i++) {
- if(_rezervacije[i]._putnik->_putnikID == p->_putnikID && strcmp(_rezervacije[i]._putnik->_imePrezime, p->_imePrezime) == 0)
- return false;
- if(strcmp(_rezervacije[i]._putnik->_imePrezime, "<SLOBODNO MJESTO>") == 0)
- cout << _rezervacije[i]._oznakaSjedista + 1 << " ";
- }
- cout << endl;
- do {
- cout << "Vas izbor je: ";
- cin >> izbor;
- izbor--; }
- while((izbor < 0 || izbor >= _brojMjesta) || strcmp(_rezervacije[izbor]._putnik->_imePrezime, "<SLOBODNO MJESTO>") != 0);
- float cijenaKarte = _cijenaKarte;
- if (p->_brojPredjenihMilja >= 10000 && p->_brojPredjenihMilja < 50000)
- cijenaKarte = _cijenaKarte * 0.9;
- if (p->_brojPredjenihMilja >= 50000 && p->_brojPredjenihMilja < 100000)
- cijenaKarte = _cijenaKarte * 0.8;
- if (p->_brojPredjenihMilja > 100000)
- cijenaKarte = _cijenaKarte * 0.7;
- p->DodajPredjeneMilje(_brojMilja);
- _rezervacije[izbor].Unos(*p, izbor, cijenaKarte);
- return true;
- }
- bool RemoveRezervacija(int oznakaSjedista)
- {
- /* 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". */
- oznakaSjedista--;
- if(oznakaSjedista < 0 || oznakaSjedista >= _brojMjesta)
- return false;
- if(strcmp(_rezervacije[oznakaSjedista]._putnik->_imePrezime, "<SLOBODNO MJESTO>") == 0)
- return false;
- _rezervacije[oznakaSjedista].Dealociraj();
- Putnik *temp = new Putnik;
- temp->Unos("<SLOBODNO MJESTO>");
- _rezervacije[oznakaSjedista].Unos(*temp, oznakaSjedista, 0);
- return true;
- }
- };
- float GetMiljeByKompanija(Let * letovi, int maxLetova, Kompanija k, Putnik p){
- /* Funkcija vraća broj milja koje je putnik "p" ostvario putujući kompanijom "k". */
- float brojMilja = 0;
- for(int i = 0; i < maxLetova; i++)
- if(*letovi[i]._kompanija == k) {
- for(int j = 0; j < letovi[i]._brojMjesta; j++)
- if(p._putnikID == letovi[i]._rezervacije[j]._putnik->_putnikID)
- brojMilja += letovi[i]._brojMilja;
- }
- return brojMilja;
- }
- void main()
- {
- Putnik putnici[5];
- putnici[0].Unos("Putnik 1");
- putnici[1].Unos("Putnik 2");
- putnici[2].Unos("Putnik 3");
- putnici[3].Unos("Putnik 4");
- putnici[4].Unos("Putnik 5");
- cout << "[Putnici] Dodato pet putnika!" << endl;
- Let letovi[4];
- letovi[0].Unos(Pegasus, "Mostar", "Berlin", 10, 667, 200);
- letovi[1].Unos(TurkishAirlines, "Istanbul", "Sarajevo", 15, 728, 250);
- letovi[2].Unos(AustrianAirlines, "Bec", "Mostar", 20, 555, 175);
- letovi[3].Unos(Pegasus, "London", "Berlin", 15, 688, 300);
- cout << "[Letovi] Dodata cetiri leta!" << endl << endl;
- cout << "[Ispis] Ispisujem prvi let:";
- letovi[0].Info();
- cout << crtice << "[Rezervacija karte za let Mostar - Berlin] - Putnik 1" << crtice;
- if(letovi[0].AddRezervaciju(&putnici[0]))
- cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
- else
- cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
- cout << "Ponovo ispisujem prvi let:";
- letovi[0].Info();
- cout << crtice << "[Rezervacija karte za let Mostar - Berlin] - Putnik 2" << crtice;
- if(letovi[0].AddRezervaciju(&putnici[1]))
- cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
- else
- cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
- cout << "Ponovo ispisujem prvi let:";
- letovi[0].Info();
- cout << "[Rezervacija] Uklanjam rezervaciju za Putnika 1 i ponovo ispisujem.";
- letovi[0].RemoveRezervacija(1);
- letovi[0].Info();
- cout << crtice << "[Rezervacija karte za let Istanbul - Sarajevo] - Putnik 1" << crtice;
- if(letovi[1].AddRezervaciju(&putnici[0]))
- cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
- else
- cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
- cout << crtice << "[Rezervacija karte za let London - Berlin] - Putnik 1" << crtice;
- if(letovi[3].AddRezervaciju(&putnici[0]))
- cout << "[Rezervacija] Karta je uspjesno rezervisana!" <<endl;
- else
- cout << "[Rezervacija] Doslo je do greske prilikom rezervisanja!" << endl;
- cout << crtice << "Ukupno milja koje je presao Putnik 1 kompanijom Pegasus: " << GetMiljeByKompanija(letovi, 4, Pegasus, putnici[0]) << endl;
- }
Add Comment
Please, Sign In to add comment