Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef _MSC_VER
- #define _CRT_SECURE_NO_WARNINGS
- #endif
- #include <iostream>
- using namespace std;
- char crt[] = { "\n-------------------------------------------------\n" };
- char crt2[] = { "-------------------------------------------------\n" };
- enum Kompanija { Pegasus, TurkishAirlines, AustrianAirlines, FlyEmirates };
- int ID = 1;
- struct Putnik {
- int _putnikID;
- char * _imePrezime;
- float _brojPredjenihMilja;
- void Unos(char * imePrezime){
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- _brojPredjenihMilja = 0;
- _putnikID = ID++;
- }
- void Info(){
- cout << crt2 << "[" << _putnikID << "] " << _imePrezime << " (" << _brojPredjenihMilja << " milja) " <<endl;
- }
- 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.Unos(putnik._imePrezime);
- _oznakaSjedista = oznaka;
- _cijena = cijena;
- }
- void Info(){
- _putnik.Info();
- cout << "Oznaka sjedista: \t" << _oznakaSjedista << endl;
- cout << "Cijena: \t\t" << _cijena << endl;
- }
- void Dealociraj(){
- _putnik.Dealociraj();
- }
- };
- struct Let {
- Kompanija _kompanija;
- char * _pocetak;
- char * _destinacija;
- float _brojMilja;
- float _cijenaKarte;
- Rezervacija * _rezervacija;
- int _brojMjesta;
- //////////////////////////////////////////
- void Unos(Kompanija kompanija, char * pocetak, char * destinacija, int brojMjesta, float brojMilja, float cijena){
- _kompanija = kompanija;
- _pocetak = new char[strlen(pocetak) + 1];
- strcpy(_pocetak, pocetak);
- _destinacija = new char[strlen(destinacija) + 1];
- strcpy(_destinacija, destinacija);
- _brojMjesta = brojMjesta;
- _rezervacija = new Rezervacija[_brojMjesta];
- Putnik temp;
- temp.Unos("<SLOBODNO MJESTO>");
- for (int i = 0; i < _brojMjesta; i++)
- _rezervacija[i].Unos(temp, i, 0);
- _brojMilja = brojMilja;
- _cijenaKarte = cijena;
- }
- void Dealociraj(){
- /*Definisati funkciju vodeci racuna o oslobadjanju svih resursa koji su alocirani za potrebe objekta tipa Let.*/
- delete[]_pocetak;
- delete[]_destinacija;
- for (int i = 0; i < _brojMjesta; i++)
- _rezervacija[i].Dealociraj();
- }
- bool AddRezervaciju(Putnik * p){
- /*
- Na samom pocetku, funkcija treba ispisati listu svih SLOBODNIH sjedista na letu, te putniku omoguciti da izabere neko od njih.
- Voditi racuna o broju prednjenih milja, prilikom formiranja cijene karte. Ako je putnik presao:
- - od 10 000 do 50 000 milja onda ostvaruje popust od 10% na punu cijenu karte,
- - od 50 000 do 100 000 milja onda ostvaruje popust od 20% na punu cijenu karte,
- - a preko 100 000 milja se ostvaruje popust od 30% na pounu cijenu karte.
- Omoguciti dodavanje rezervacija sa identicnim putnicima (isti putnikID i imePrezime.
- U zavisnosti od uspjesnosti funkcija vraca TRUE ili FALSE;
- */
- for (int i = 0; i < _brojMjesta; i++){
- if (strcmp(_rezervacija[i]._putnik._imePrezime, p->_imePrezime) == 0)
- {
- cout << "GRESKA! \nKorisnik je vec rezervisao mjesto." << endl;
- return false;
- }
- }
- // ispis slobodnih mjesta
- cout << "Slobodna mjesta su: " << crt;
- for (int i = 0; i < _brojMjesta; i++){
- if (_rezervacija[i]._cijena == 0) {
- cout << i + 1 << "\t";
- }
- }
- cout << crt;
- // biranje sjedista koje ce se rezervisati
- int izbor;
- do{
- cout << "Izaberite sjediste: ";
- cin >> izbor;
- cin.ignore();
- --izbor;
- } while (izbor <0 || izbor >= _brojMjesta);
- // dobivanje cijene sa popustom ili bez popusta
- float cijena = _cijenaKarte;
- float milje = p->_brojPredjenihMilja;
- if (milje > 100000) cijena *= 0.70;
- else if (milje<100000 && milje >= 50000) cijena *= 0.80;
- else if (milje < 50000 && milje >= 10000) cijena *= 0.90;
- // rezervacija
- _rezervacija[izbor].Unos(*p, _rezervacija[izbor]._oznakaSjedista, cijena);
- return true;
- }
- };
- float GetMiljeByKompanija(Let * letovi, int maxLetova, Kompanija kompanija, Putnik * putnik){
- /* Funkcija vraca broj milja koje je putnik (proslijedjen kao parametar funkcije), ostvario putujuci sa kompanijom
- koja je takodjer proslijedjena kao parametar funkcije. */
- float miljeZaVratiti = 0;
- for (int i = 0; i < maxLetova; i++)
- for (int j = 0; j < letovi[i]._brojMjesta; j++)
- if (letovi[i]._kompanija == kompanija && strcmp(putnik->_imePrezime, letovi[i]._rezervacija[j]._putnik._imePrezime) == 0)
- miljeZaVratiti += letovi[i]._brojMilja;
- return miljeZaVratiti;
- }
- int main(){
- Let test[2];
- test[0].Unos(FlyEmirates, "Gorazde", "London", 5, 1425, 125);
- test[1].Unos(Pegasus, "Sarajevo", "Mostar", 6, 50, 25);
- Putnik p1, p2, p3,p4;
- p1.Unos("Nedim Fejzic");
- p2.Unos("Saban Saulic");
- p3.Unos("Bakir Izetbegovic");
- p4.Unos("Edin Dzeko");
- test[0].AddRezervaciju(& p1);
- test[0].AddRezervaciju(& p3);
- test[0].AddRezervaciju(& p4);
- cout << crt;
- test[1].AddRezervaciju(& p1);
- test[1].AddRezervaciju(& p2);
- test[1].AddRezervaciju(& p3);
- cout << crt2 <<"Putnik p1 je presao: ";
- cout << GetMiljeByKompanija(test,2,Pegasus,&p1);
- system("pause > null");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement