Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- enum Kompanija{ Pegasus, TurkishAirlines, AustrianAirlines, FlyEmirates };
- int ID = 0;
- 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 << "[" << _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 << "Sjediste: " << _oznakaSjedista << " Cijena: "
- << _cijena << endl;
- }
- void Dealociraj(){ _putnik.Dealociraj(); }
- };
- struct Let{
- Kompanija _kompanija;
- char * _pocetak; //pocetna lokacija
- char * _destinacija;
- Rezervacija * _rezervacije[10];
- float * _brojMilja; //odnosi se na duzinu leta – broj predjenih milja
- float * _cijenaKarte;
- int brojacPutnika = 0;
- void Unos(Kompanija kompanija, char * pocetak, char * destinacija, float brojMilja, float cijenaKarte){
- _kompanija = kompanija;
- int size = 0;
- size = strlen(pocetak) + 1;
- _pocetak = new char[size];
- strcpy_s(_pocetak, size, pocetak);
- size = strlen(destinacija) + 1;
- _destinacija = new char[size];
- strcpy_s(_destinacija, size, destinacija);
- _brojMilja = new float;
- *_brojMilja = brojMilja;
- _cijenaKarte = new float;
- *_cijenaKarte = cijenaKarte;
- for (int i = 0; i < 10; i++){
- _rezervacije[i] = new Rezervacija;
- }
- Putnik temp;
- temp.Unos("<SLOBODNO MJESTO>");
- for (int i = 0; i < 10; i++){
- _rezervacije[i]->Unos(&temp, i, 0);
- }
- /*na osnovu vrijednosti primljenih parametara, inicijalizovati vrijednosti atributa strukture.
- predloziti mehanizam pracenja broja slobodnih mjesta bez uvodjenja dodatnih atributa */
- }
- void Dealociraj(){
- /*definisati funkciju vodeci racuna o oslobadjanju svih resursa koji su alocirani za potrebe objekta tipa Let*/
- }
- bool AddRezervaciju(Putnik * p){
- for (int i = 0; i < 10; i++){
- //ova petlja treba izbaciti samo SLOBODNA mjesta, ali nisam implementirao sad zbog pregledavanja funkcionalnosti rezervisanja
- _rezervacije[i]->Info();
- }
- for (int i = 0; i < 10; i++){
- if (strstr(_rezervacije[i]->_putnik._imePrezime, p->_imePrezime) != NULL){
- cout << "Isti putnik je vec rezervisao mjesto u letu." << endl;
- return false;
- }
- }
- char poredProzora;
- if (p->_brojPredjenihMilja > 50000){
- cout << "Da li zelite mjesto pored prozora?(d/n): ";
- do{
- cin >> poredProzora;
- if (poredProzora != 'd' && poredProzora != 'n'){
- cout << "Greska u unosu, unesite ponovo: ";
- }
- } while (poredProzora != 'd' && poredProzora != 'n');
- if (poredProzora == 'd'){
- for (int i = 0; i < 10; i++){
- if (i % 2 != 0){ //ako je neparno onda je do prozora
- if (strstr(_rezervacije[i]->_putnik._imePrezime, "<SLOBODNO MJESTO>") != NULL){
- _rezervacije[i]->Unos(p, i, *_cijenaKarte);
- _rezervacije[i]->_putnik.DodajPredjeneMilje(*_brojMilja);
- return true;
- }
- }
- }
- }
- else{
- for (int i = 0; i < 10; i++){
- if (i % 2 == 0){
- if (strstr(_rezervacije[i]->_putnik._imePrezime, "<SLOBODNO MJESTO>") != NULL){
- _rezervacije[i]->Unos(p, i, *_cijenaKarte);
- _rezervacije[i]->_putnik.DodajPredjeneMilje(*_brojMilja);
- return true;
- }
- }
- }
- }
- }
- for (int i = 0; i < 10; i++){
- if (strstr(_rezervacije[i]->_putnik._imePrezime, "<SLOBODNO MJESTO>") != NULL){
- _rezervacije[i]->Unos(p, i, *_cijenaKarte);
- _rezervacije[i]->_putnik.DodajPredjeneMilje(*_brojMilja);
- return true;
- }
- }
- cout << "Nema slobodnih mjesta!" << endl;
- return false;
- /*putniku se dodjeljuje prvo slobodno sjediste pri cemu ce oznaka sjedista
- biti identicna lokaciji rezervacije u nizu. prilikom dodjeljivanja
- slobodnog sjedista voditi racuna o broju predjenih milja putnika.
- ako je putnik presao vise od 50000 milja onda mu je potrebno ponuditi
- sjediste pored prozora (pretpostavimo da su sva sjedista sa neparnim
- indeksom sjedista pored prozora).u slucaju da putnik ne zeli mjesto pored
- prozora, onda mu se dodjeljuje prvo slobodno sjediste. onemoguciti dodavanje
- rezervacija sa identicnim putnicima (isti putnikID i imePrezime). u zavisnosti
- od uspjesnosti funkcija vraca true ili false */
- }
- bool RemoveRezervaciju(char * imePrezime){
- Putnik temp;
- temp.Unos("<SLOBODNO MJESTO>");
- for (int i = 0; i < 10; i++){
- if (strstr(_rezervacije[i]->_putnik._imePrezime, imePrezime) != NULL){
- _rezervacije[i]->Dealociraj();
- _rezervacije[i]->Unos(&temp, i, 0);
- return true;
- }
- }
- return false;
- /*na osnovu vrijednosti parametra izvrsiti
- uklanjanje rezervacije iz niza. voditi racuna o
- alociranom memorijskom prostoru. u zavisnosti od
- uspjesnosti funkcija vraca true ili false */
- }
- };
- float GetMiljeByKompanija(Let * letovi, int max, Kompanija kompanija, Putnik * putnik){
- float sumaMilja = 0;
- for (int i = 0; i < max; i++){
- if (letovi[i]._kompanija == kompanija){
- for (int j = 0; j < 10; j++){
- if (strstr(letovi[i]._rezervacije[j]->_putnik._imePrezime, putnik->_imePrezime) != NULL){
- sumaMilja += letovi[i]._rezervacije[j]->_putnik._brojPredjenihMilja;
- }
- }
- }
- }
- return sumaMilja;
- /*funkcija vraca broj milja koje je putnik (proslijedjen kao parametar funkcije)
- ostvario putujuci sa kompanijom koja je takodjer proslijedjena kao
- parametar funkcije*/
- return 0;
- }
- void main(){
- int max = 2;
- Let *l;
- l = new Let[max];
- Putnik p2, p3, p4, p5, p6;
- Putnik *p1 = new Putnik;
- p1->Unos("Adnan Mujagic");
- p2.Unos("Arnes Mujagic");
- p3.Unos("Nejla Mujagic");
- p4.Unos("Dijana Mujagic");
- p5.Unos("Zubejr Sedic");
- p5.DodajPredjeneMilje(60000);
- p6.Unos("Adnan Mujagic");
- l[0].Unos(TurkishAirlines, "Berlin", "Sarajevo", 640, 100);
- l[1].Unos(TurkishAirlines, "Istanbul", "Sarajevo", 570, 90);
- l[0].AddRezervaciju(p1);
- l[0].AddRezervaciju(&p2);
- l[0].AddRezervaciju(&p3);
- l[0].AddRezervaciju(&p4);
- l[0].AddRezervaciju(&p5);
- if (l[0].RemoveRezervaciju("Nejla Mujagic") == true)
- cout << "Uspjesno obrisana rezervacija." << endl;
- else
- cout << "Rezervacija nije izbrisana." << endl;
- l[0].AddRezervaciju(&p6);
- l[1].AddRezervaciju(p1);
- cout << "Broj predjenih milja sa prvim putnikom u datoj kompaniji je: " << GetMiljeByKompanija(l, 2, TurkishAirlines, p1) << endl;
- /*provjeriti validnost izvrsenja svih dostupnih funkcionalnosti.
- izbjegavajte koristenje vlastitog imena i prezimena*/
- cout << "puno srece u radu..." << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement