Advertisement
limun11

letovi-putnici I parc.

Jun 25th, 2018
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.34 KB | None | 0 0
  1. #include <iostream>
  2. #include<tuple>
  3. const char * crt = "\n-------------------------------------\n";
  4.  
  5. using namespace std;
  6.  
  7. struct Putnik {
  8.     char * _imePrezime;
  9.     //pretpostavka je da ce se uvijek unijeti validna oznaka sjedista u formatu XXA gdje je XX dvocifreni broj, a A predstavlja veliko slovo.
  10.     //Jednocifrene oznake ce imati prefiks 0
  11.     char _ozankaSjedista[4]; //npr. 02A, 12B, 14B, 28C -> broj predstavlja oznaku reda, a slovo oznaku kolone
  12.  
  13.     void Dealociraj()
  14.     {
  15.         delete[] _imePrezime; _imePrezime = nullptr;
  16.     }
  17. };
  18.  
  19. struct Let {
  20.     char * _relacija;//Mostar -> Sarajevo
  21.     Putnik * _putnici;
  22.     int _trenutnoPutnika;
  23.     int _brojRedovaUAvionu;
  24.     int _brojKolonaUAvionu;//broj kolona mora biti paran >=4 i <=10
  25. };
  26.  
  27. void Dealociraj(Let & let) {
  28.     delete[] let._relacija; let._relacija = nullptr;
  29.     for (size_t i = 0; i < let._trenutnoPutnika; i++) {
  30.         delete[] let._putnici[i]._imePrezime;
  31.         let._putnici[i]._imePrezime = nullptr;
  32.     }
  33.     delete[] let._putnici;
  34.     let._putnici = nullptr;
  35. }
  36. //inicijalizuje vrijednosti atributa objekta mostar_sarajevo
  37. void Unos(Let & let, const char * relacija, int brojRedova, int brojKolona)//relacija, broj_redova, broj_kolona
  38. {
  39.     int size = strlen(relacija) + 1;
  40.     let._relacija = new char[size];
  41.     strcpy_s(let._relacija, size, relacija);
  42.  
  43.     let._brojRedovaUAvionu = brojRedova;
  44.     let._brojKolonaUAvionu = brojKolona;
  45.  
  46.     let._trenutnoPutnika = 0;
  47.     let._putnici = nullptr;
  48. }
  49. //GetPozicijuUReduIKoloni - na osnovu oznake sjedista vraca pair red i kolona tj. poziciju u matrici
  50. //ispisuje 14/1 - 15B
  51. //ispisuje 0/1 - 01B
  52. pair <int, int> GetPozicijuUReduIKoloni(const char * oznakaSjedista)
  53. {
  54.     pair <int, int> rezultat;
  55.     int prvaPomocna;
  56.     prvaPomocna = oznakaSjedista[0] - '0'; //1-0=1
  57.     prvaPomocna = prvaPomocna * 10;//1*10=10
  58.     int drugaPomocna;
  59.     drugaPomocna = oznakaSjedista[1] - '0'-1;//5-0=5-1=4
  60.     int prvaKoordinata;
  61.     prvaKoordinata = prvaPomocna + drugaPomocna;
  62.     int drugaKoordinata = oznakaSjedista[2] - 'A';//B-A=1-0=1
  63.     rezultat=make_pair(prvaKoordinata, drugaKoordinata);
  64.     return rezultat;
  65. }
  66.  
  67. /*
  68. GetNovogPutnika - vraca objekat (ne pokazivac) tipa Putnik koji je inicijalizovan
  69. vrijednsotima proslijedjenih parametara*/
  70. Putnik GetNovogPutnika(const char * oznakaSjedista, const char * imePrezime)
  71. {
  72.     Putnik putnik;
  73.     strcpy_s(putnik._ozankaSjedista, oznakaSjedista);
  74.  
  75.     int size = strlen(imePrezime) + 1;
  76.     putnik._imePrezime = new char[size];
  77.     strcpy_s(putnik._imePrezime, size, imePrezime);
  78.  
  79.     return putnik;
  80. }
  81. /*DodajPutnika - podatke o novom putniku dodaje u listu (niz) putnika na proslijedjenom letu.
  82. Onemoguciti dodavanje putnika sa istim imenom i prezimenom,
  83. nepostojecom lokacijom sjedista ili u slucaju da su sva mjesta popunjena
  84. */
  85. bool provjeraSjedista(const char *oznakaSjedista)
  86. {
  87.     //0,1,2,3,4,5,6,78,9
  88.     //A,B,C....Z
  89.     //15B
  90.     if (!(oznakaSjedista[0]>='0' && oznakaSjedista[0]<='9'))
  91.         return false;
  92.     if (!(oznakaSjedista[1]>='0' && oznakaSjedista[1]<='9'))
  93.         return false;
  94.     if (!(oznakaSjedista[2]>='A' && oznakaSjedista[2]<='Z'))
  95.         return false;
  96.  
  97.     return true;
  98. }
  99. bool DodajPutnika(Let & let, Putnik putnik)
  100. {
  101.     //provjere
  102.     for (int i = 0; i < let._trenutnoPutnika; i++)
  103.     {
  104.         if (strcmp(let._putnici[i]._imePrezime, putnik._imePrezime) == 0)
  105.         {
  106.             cout << "Putnik sa istim imenom vec dodan! " << endl;
  107.             return false;
  108.         }
  109.         if (strcmp(let._putnici[i]._ozankaSjedista, putnik._ozankaSjedista) == 0)
  110.         {
  111.             cout << "Sjediste je vec zauzeto. " << endl;
  112.             return false;
  113.         }
  114.         if (!(provjeraSjedista(putnik._ozankaSjedista) == true))
  115.         {
  116.             cout << "Nepostojeca lokacija sjedista... " << endl;
  117.             return false;
  118.         }
  119.     }
  120.     Putnik * temp = new Putnik[let._trenutnoPutnika + 1];
  121.     for (int i = 0; i < let._trenutnoPutnika; i++)
  122.     {
  123.         strcpy_s(temp[i]._ozankaSjedista, 4, let._putnici[i]._ozankaSjedista);
  124.  
  125.         int size = strlen(let._putnici[i]._imePrezime) + 1;
  126.         temp[i]._imePrezime = new char[size];
  127.         strcpy_s(temp[i]._imePrezime, size, let._putnici[i]._imePrezime);
  128.     }
  129.     strcpy_s(temp[let._trenutnoPutnika]._ozankaSjedista, 4, putnik._ozankaSjedista);
  130.     int size1 = strlen(putnik._imePrezime) + 1;
  131.     temp[let._trenutnoPutnika]._imePrezime = new char[size1];
  132.     strcpy_s(temp[let._trenutnoPutnika]._imePrezime, size1, putnik._imePrezime);
  133.     for (int i = 0; i < let._trenutnoPutnika; i++)
  134.     {
  135.         let._putnici[i].Dealociraj();
  136.     }
  137.     delete[] let._putnici;
  138.     let._putnici = temp;
  139.     let._trenutnoPutnika++;
  140.     return true;
  141. }
  142. //PrikaziRasporedSjedenja - na osnovu oznake sjedista prikazuje raspored sjedenja u avionu za let koji je proslijedjen kao parametar
  143. void PrikaziRasporedSjedenja(Let & let)
  144. {
  145.  
  146. }
  147. int rekBrojacKaraktera(Let & let, int trenutnoPutnika, int brojac)
  148. {
  149.     return 0;
  150. }
  151. int main() {
  152.     int oznakaR = 0, oznakaK = 0;
  153.     Let mostar_sarajevo;
  154.     //inicijalizuje vrijednosti atributa objekta mostar_sarajevo
  155.     Unos(mostar_sarajevo, "Mostar -> Sarajevo", 10, 4);//relacija, broj_redova, broj_kolona
  156.  
  157.                                                        //GetPozicijuUReduIKoloni - na osnovu oznake sjedista vraca pair red i kolona tj. poziciju u matrici
  158.     tie(oznakaR, oznakaK) = GetPozicijuUReduIKoloni("15B");
  159.     cout << crt << "GetPozicijuUReduIKoloni(15B) ->" << oznakaR << "/" << oznakaK << endl;//ispisuje 14/1
  160.     tie(oznakaR, oznakaK) = GetPozicijuUReduIKoloni("01B");
  161.     cout << "GetPozicijuUReduIKoloni(01B) ->" << oznakaR << "/" << oznakaK << crt;//ispisuje 0/1
  162.                                                                                   /*
  163.                                                                                   GetNovogPutnika - vraca objekat (ne pokazivac) tipa Putnik koji je inicijalizovan
  164.                                                                                   vrijednsotima proslijedjenih parametara
  165.                                                                                   DodajPutnika - podatke o novom putniku dodaje u listu (niz) putnika na
  166.                                                                                   proslijedjenom letu. Onemoguciti dodavanje putnika sa istim imenom i prezimenom,
  167.                                                                                   nepostojecom lokacijom sjedista ili u slucaju da su sva mjesta popunjena
  168.                                                                                   */
  169.     if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("01A", "Denis Music")))
  170.         cout << crt << "Putnik uspjesno dodan!" << crt;
  171.     if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("07C", "Zanin Vejzovic")))
  172.         cout << crt << "Putnik uspjesno dodan!" << crt;
  173.     if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("10D", "Adel Handzic")))
  174.         cout << crt << "Putnik uspjesno dodan!" << crt;
  175.  
  176.     if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("d5C", "Sdel Handzic")))
  177.         cout << crt << "Putnik uspjesno dodan!" << crt;
  178.  
  179.     //PrikaziRasporedSjedenja - na osnovu oznake sjedista prikazuje raspored sjedenja u avionu za let koji je proslijedjen kao parametar
  180.     PrikaziRasporedSjedenja(mostar_sarajevo);
  181.  
  182.     //rekBrojacKaraktera - rekurzivna funkcija koja vraca maksimalan broj karaktera u imenu i prezimenu putnika na odredjenom letu
  183.     cout << crt << "Maksimalna broj karaktera u imenu i prezimenu putnika je -> " << rekBrojacKaraktera(mostar_sarajevo,
  184.         mostar_sarajevo._trenutnoPutnika, 0) << crt; //broj 0 je pocetno stanje prilikom brojanja max karaktera
  185.  
  186.                                                      /*
  187.                                                      DODATNO:
  188.                                                      1. prilikom ispisa, sirinu kolone prilagoditi maksimalnom broju karaktera u imenu i prezimenu
  189.                                                      2. automatski generisati oznaku sjedista na osnovu narednog slobodnog mjesta na letu
  190.                                                      (povratnom vrijednoscu sugerisati na slucaj u kome su sva mjesta na letu vec zauzeta).
  191.                                                      ovu funkciju nije potrebno integrisati u postojece rjesenje, vec se moze i zasebno testirati
  192.                                                      */
  193.  
  194.     Dealociraj(mostar_sarajevo);
  195.     system("PAUSE");
  196.     return 0;
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement