Advertisement
Guest User

Untitled

a guest
Aug 24th, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.97 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <iomanip>
  6. #include <stdio.h>
  7. using namespace std;
  8.  
  9. class lotnisko {
  10. public:
  11.     static int ilosc_lotnisk;
  12.     string nazwa;
  13.     string nazwa_kraju;
  14.     lotnisko * next;
  15.     lotnisko():next(NULL){}
  16.     lotnisko(int x) {
  17.         next = NULL;
  18.         ++ilosc_lotnisk;
  19.         cout << "Podaj nazwe kraju w ktorym znajduje sie lotnisko" << endl;
  20.         cin >> nazwa_kraju;
  21.         cout << "Podaj nazwe lotniska" << endl;
  22.         cin >> nazwa;
  23.     }
  24.  
  25.     void wypisz(lotnisko *head_lotnisko) {
  26.         lotnisko *wypisz;
  27.         int j = 1;
  28.         for (wypisz = head_lotnisko; wypisz != NULL; wypisz = wypisz->next, j++)
  29.         {
  30.             cout << j << "." << wypisz->nazwa_kraju << ", " << wypisz->nazwa << endl;
  31.         }
  32.     }
  33. };
  34.  
  35. class lot{
  36. protected:
  37.     double godzina_odlotu;
  38.     double minuta_odlotu;
  39.     double czas_trwania_lotu_godzina;
  40.     double czas_trwania_lotu_minuta;
  41. public:
  42.    
  43.     lotnisko poczatkowe;
  44.     lotnisko docelowe;
  45.     static int ilosc_lotow;
  46.     lot * next;
  47.     string get_poczatkowe_kraj() {
  48.         return  poczatkowe.nazwa_kraju;
  49.     }
  50.     string get_poczatkowe_nazwa_lotniska() {
  51.         return  poczatkowe.nazwa;
  52.     }
  53.     string get_docelowe_kraj() {
  54.         return  docelowe.nazwa_kraju;
  55.     }
  56.     string get_docelowe_nazwa_lotniska() {
  57.         return  docelowe.nazwa_kraju;
  58.     }
  59.     double get_godzina_odlotu() {
  60.         return  godzina_odlotu;
  61.     }
  62.     double get_minuta_odlotu() {
  63.         return  minuta_odlotu;
  64.     }
  65.     double get_czas_godzina_lotu() {
  66.         return  czas_trwania_lotu_godzina;
  67.     }
  68.     double get_czas_minuta_lotu() {
  69.         return  minuta_odlotu;
  70.     }
  71.     void set_odlot_godzina(double godzina_odlotu_test) {
  72.         while (godzina_odlotu_test < 0 || godzina_odlotu_test>23) {
  73.             cout << "Nieprawidlowa wartosc" << endl;
  74.             cin.clear();
  75.             cin.ignore(9999, '\n');
  76.             cin >> godzina_odlotu_test;
  77.         }
  78.         godzina_odlotu = godzina_odlotu_test;
  79.     }
  80.     void set_odlot_minuta(double minuta_odlotu_test) {
  81.         while (minuta_odlotu_test < 0 || minuta_odlotu_test>59) {
  82.             cout << "Nieprawidlowa wartosc\n" << endl;
  83.             cin.clear();
  84.             cin.ignore(9999, '\n');
  85.             cin >> minuta_odlotu_test;
  86.         }
  87.         minuta_odlotu = minuta_odlotu_test;
  88.     }
  89.     void set_czas_godzina(double czas_trwania_lotu_godzina_test) {
  90.         while (czas_trwania_lotu_godzina_test < 0) {
  91.             cout << "Nieprawidlowa wartosc\n" << endl;
  92.             cin.clear();
  93.             cin.ignore(9999, '\n');
  94.             cin >> czas_trwania_lotu_godzina_test;
  95.         }
  96.         czas_trwania_lotu_godzina = czas_trwania_lotu_godzina_test;
  97.     }
  98.     void set_czas_minuta(double czas_trwania_lotu_minuta_test) {
  99.         while (czas_trwania_lotu_minuta_test < 0 || czas_trwania_lotu_minuta_test>59) {
  100.             cout << "Nieprawidlowa wartosc\n" << endl;
  101.             cin.clear();
  102.             cin.ignore(9999, '\n');
  103.             cin >> czas_trwania_lotu_minuta_test;
  104.         }
  105.         czas_trwania_lotu_minuta = czas_trwania_lotu_minuta_test;
  106.     }
  107.     void zapisz(lot *head) {
  108.         ofstream plik("baza.txt", std::ios::app | std::ios::ate);
  109.         plik.seekp(0, std::ios_base::end);
  110.         for (; head != NULL; head = head->next) {
  111.             plik << "Wylot z: " << get_poczatkowe_kraj() << "," << get_poczatkowe_nazwa_lotniska() << "\nPrzylot do: " << get_docelowe_kraj() << "," << get_docelowe_nazwa_lotniska() << "\nGodzina odlotu: " << get_godzina_odlotu() << ":" << get_minuta_odlotu() << "\nDlugosc lotu: " << get_czas_godzina_lotu() << ":" << get_czas_minuta_lotu() << "\n" << endl;
  112.         }
  113.         plik.close();
  114.     }
  115.     void wypisz(lot *head_lot) {
  116.         lot *wypisz;
  117.         int j = 1;
  118.         for (wypisz = head_lot; wypisz != NULL; wypisz = wypisz->next, j++)
  119.         {
  120.             cout << j << "." << "Wylot z: " << wypisz->get_poczatkowe_kraj() << "," << wypisz->get_poczatkowe_nazwa_lotniska() << "\nPrzylot do: " << wypisz->get_docelowe_kraj() << "," << wypisz->get_docelowe_nazwa_lotniska() << "\nGodzina odlotu: " << wypisz->get_godzina_odlotu() << ":" << wypisz->get_minuta_odlotu() << "\nDlugosc lotu: " << wypisz->get_czas_godzina_lotu() << ":" << wypisz->get_czas_minuta_lotu() << endl << endl;
  121.         }
  122.     }
  123.     lot():next(NULL) {
  124.         {
  125.             double godzina_odlotu_test, minuta_odlotu_test, czas_trwania_lotu_godzina_test, czas_trwania_lotu_minuta_test;
  126.             ++ilosc_lotow;
  127.             //// TO NIZEJ KONSTRUKTOREM KOPIUJACYM
  128.             //cout << "Podaj nazwe kraju z jakiego samolot odlatuje" << endl;
  129.             //cin >> poczatkowe.nazwa_kraju;
  130.             //cout << "Podaj nazwe lotniska poczatkowego" << endl;
  131.             //cin >> poczatkowe.nazwa; //najpierw pyta o nazwe kraju a pozniej wypisuje wszystkie lotniska z danego kraju
  132.             //cout << "Podaj nazwe kraju docelowego" << endl;
  133.             //cin >> docelowe.nazwa_kraju;
  134.             //cout << "Podaj nazwe lotniska docelowego" << endl;
  135.             //cin >> docelowe.nazwa;
  136.            
  137.             //najpierw wpisujemy kraj a pozniej wypisuje wszystkie dostepne tam lotniska, pozniej sprawdza czy wszystko
  138.             //sie zgadza (string=string) i dopiero zapisujemy dalej
  139.  
  140.             cout << "Podaj godzine odlotu" << endl;
  141.             cin >> godzina_odlotu_test;
  142.             set_odlot_godzina(godzina_odlotu_test);
  143.             cout << "Podaj minute odlotu" << endl;
  144.             cin >> minuta_odlotu_test;
  145.             set_odlot_minuta(minuta_odlotu_test);
  146.             cout << "Podaj godziny trwania lotu" << endl;
  147.             cin >> czas_trwania_lotu_godzina_test;
  148.             set_czas_godzina(czas_trwania_lotu_godzina_test);
  149.             cout << "Podaj minuty trwania lotu" << endl;
  150.             cin >> czas_trwania_lotu_minuta_test;
  151.             set_czas_minuta(czas_trwania_lotu_minuta_test);
  152.         };
  153.  
  154.     }
  155.     ~lot() {};
  156. };
  157.  
  158. class lot_osobowy : public lot {
  159. protected:
  160.     double cena, max_waga;
  161. public:
  162.     void set_cena() {
  163.         int cena_test;
  164.         cout << "Podaj cene za bilet" << endl;
  165.         cin >> cena_test;
  166.             while (cena_test < 0) {
  167.                 cout << "Nieprawidlowa wartosc\n" << endl;
  168.                 cin.clear();
  169.                 cin.ignore(9999, '\n');
  170.                 cin >> cena_test;
  171.             }
  172.             cena = cena_test;
  173.     }
  174.     void set_max_waga() {
  175.         int max_waga_test;
  176.         cout << "Podaj maksymalna wage bagazu" << endl;
  177.         cin >> max_waga_test;
  178.         while (max_waga_test < 0) {
  179.             cout << "Nieprawidlowa wartosc\n" << endl;
  180.             cin.clear();
  181.             cin.ignore(9999, '\n');
  182.             cin >> max_waga_test;
  183.         }
  184.         max_waga = max_waga_test;
  185.     }
  186.     lot_osobowy() {
  187.         set_cena();
  188.         set_max_waga();
  189.     };
  190.  
  191. };
  192.  
  193. class lot_towarowy : public lot {
  194. protected:
  195.     double oplata_stala, oplata_za_kg;
  196. public:
  197.     void set_oplata_stala() {
  198.         int oplata_stala_test;
  199.         cout << "Podaj oplate stala: \n" << endl;
  200.         cin >> oplata_stala_test;
  201.         while (oplata_stala_test < 0) {
  202.             cout << "Nieprawidlowa wartosc\n" << endl;
  203.             cin.clear();
  204.             cin.ignore(9999, '\n');
  205.             cin >> oplata_stala_test;
  206.         }
  207.         oplata_stala = oplata_stala_test;
  208.     }
  209.     void set_oplata_za_kg() {
  210.         int oplata_za_kg_test;
  211.         cout << "Podaj oplate za kg" << endl;
  212.         cin >> oplata_za_kg_test;
  213.         while (oplata_za_kg_test < 0) {
  214.             cout << "Nieprawidlowa wartosc\n" << endl;
  215.             cin.clear();
  216.             cin.ignore(9999, '\n');
  217.             cin >> oplata_za_kg_test;
  218.         }
  219.         oplata_za_kg = oplata_za_kg_test;
  220.     }
  221.     lot_towarowy() {
  222.         set_oplata_stala();
  223.         set_oplata_za_kg();
  224.     };
  225.  
  226. };
  227.  
  228. int lot::ilosc_lotow = 0;
  229. int lotnisko::ilosc_lotnisk = 0;
  230.  
  231. int main() {
  232.     lot *wsk_lot = NULL, *head_lot = NULL;
  233.     lotnisko *wsk_lotnisko = NULL, *head_lotnisko = NULL;
  234.     FILE * baza;
  235.     baza = fopen("baza.txt", "r");
  236.     if (baza == NULL) {
  237.         printf("plik nie istnieje.\n");
  238.     }
  239.     else {
  240.         printf("Prawidlowo otworzono plik.\n");
  241.     }
  242.     while (1) {
  243.         int wybor = 0;
  244.         int i;
  245.         printf("Co chcesz zrobic: \n");
  246.         printf("1. wypisanie wszystkich lotnisk posortowanych wg. krajow\n");
  247.         printf("2. wypisanie calej bazy posortowanej wg lotnisk poczatkowych\n");
  248.         printf("3. wypisanie wszystkich lotow z podanego przez uzytkownika lotniska poczatkowego posortowanych wg godzin odlotu\n");
  249.         printf("4. wypisanie wszystkich lotow do podanego przez uztkownika lotniska koncowego posortowanych wg godzin przylotu\n");
  250.         printf("5. dodanie / usuniecie lotniska\n");
  251.         printf("6. dodanie / usuniecie lotu\n");
  252.         printf("7. wypisanie polaczenia z minimalna liczba przesiadek pomiedzy dwoma lotniskami\n");
  253.         printf("8. koniec programu\n");
  254.         cin >> wybor;
  255.         switch (wybor)
  256.         {
  257.         case 1:
  258.            
  259.                 break;
  260.         case 2:
  261.             //jakiś kod
  262.             break;
  263.         case 3:
  264.             //jakiś kod
  265.             break;
  266.         case 4:
  267.             //jakiś kod
  268.             break;
  269.         case 5:
  270.             cout << "Co chcesz zrobic?" << endl;
  271.             cout << "1.Dodaj lotnisko" << endl;
  272.             cout << "2.Usun lotnisko" << endl;
  273.             cin >> i;
  274.             while (!cin || i<0 || i>2) {
  275.                 cout << "Nieprawidlowa wartosc" << endl;
  276.                 cout << "Co chcesz zrobic?" << endl;
  277.                 cout << "1.Dodaj lotnisko" << endl;
  278.                 cout << "2.Usun lotnisko" << endl;
  279.                 cin.clear();
  280.                 cin.ignore(9999, '\n');
  281.                 cin >> i;
  282.             }
  283.             if (i % 2 == 1) {
  284.                 if (head_lotnisko == NULL) {
  285.                     head_lotnisko = wsk_lotnisko = new lotnisko(1);
  286.                     break;
  287.                 }
  288.                 else {
  289.                     wsk_lotnisko->next = new lotnisko(1);
  290.                     wsk_lotnisko = wsk_lotnisko->next;
  291.                 }
  292.                 break;
  293.             }
  294.             else {
  295.                 int k,l=1;
  296.                 cout << "Ktore lotnisko chcesz usunac?" << endl;
  297.                 wsk_lotnisko->wypisz(head_lotnisko);
  298.                 cin >> k;
  299.                 while (!cin || k<0 || k>lotnisko::ilosc_lotnisk) {
  300.                     cout << "W bazie nie istnieje taka ilosc lotnisk" << endl;
  301.                     cout << "Podaj ktore lotnisko chcesz usunac?" << endl;
  302.                     wsk_lotnisko->wypisz(head_lotnisko);
  303.                     cin.clear();
  304.                     cin.ignore(9999, '\n');
  305.                     cin >> k;
  306.                 }
  307.                 lotnisko *usuwanie;
  308.                 for (usuwanie = head_lotnisko;usuwanie!=NULL; l++,usuwanie = usuwanie->next) {
  309.                     if (l == 1) {
  310.                         head_lotnisko = head_lotnisko->next;
  311.                         delete usuwanie;
  312.                     }
  313.                     if (l == k && l!=1) {
  314.                         //if (wsk->nast != NULL) { // znaleziono!
  315.                         //  usuw = wsk->nast;
  316.                         //  wsk->nast = wsk->nast->nast;
  317.                         //  free(usuw);
  318.                         //};
  319.                     }
  320.                 }
  321.                 //tu usuwanie lotniska
  322.             }
  323.         case 6:
  324.         /*  if (head_lotnisko == NULL) {
  325.                 cout << "nie mozna wprowadzic lotu poniewaz baza lotnisk jest pusta" << endl;
  326.                 break;
  327.             }*/
  328.             cout << "Co chcesz zrobic?" << endl;
  329.             cout << "1. Dodac lot" << endl;
  330.             cout << "2. Usunac lot" << endl;
  331.             cin >> i;
  332.             while (!cin || i<0 || i>2) {
  333.                 cout << "Nieprawidlowa wartosc\n" << endl;
  334.                 printf("Jaki typ lotu chcesz dodac?\n");
  335.                 printf("1. osobowy\n");
  336.                 printf("2. towarowy\n");
  337.                 cin.clear();
  338.                 cin.ignore(9999, '\n');
  339.                 cin >> i;
  340.             }
  341.             if (i % 2 == 1) {
  342.                 printf("Jaki typ lotu chcesz dodac?\n");
  343.                 printf("1. osobowy\n");
  344.                 printf("2. towarowy\n");
  345.                 cin >> i;
  346.                 while (!cin || i < 0 || i>2) {
  347.                     cout << "Nieprawidlowa wartosc\n" << endl;
  348.                     printf("Jaki typ lotu chcesz dodac?\n");
  349.                     printf("1. osobowy\n");
  350.                     printf("2. towarowy\n");
  351.                     cin.clear();
  352.                     cin.ignore(9999, '\n');
  353.                     cin >> i;
  354.                 }
  355.                 if (i % 2 == 1) {
  356.                     if (head_lot == NULL) {
  357.                         lotnisko *wybrane_poczatkowe, *wybrane_docelowe;
  358.                         cout << "Lista dostepnych lotnisk" << endl;
  359.                         wsk_lotnisko->wypisz(head_lotnisko);
  360.                         head_lot = wsk_lot = new lot_osobowy();
  361.                         wsk_lot->poczatkowe.nazwa = wybrane_poczatkowe->nazwa;
  362.                         wsk_lot->poczatkowe.nazwa_kraju = wybrane_poczatkowe->nazwa_kraju;
  363.                         wsk_lot->docelowe.nazwa = wybrane_docelowe->nazwa;
  364.                         wsk_lot->poczatkowe.nazwa_kraju = wybrane_docelowe->nazwa_kraju;
  365.                         break;
  366.                     }
  367.                     else {
  368.                         cout << "Lista dostepnych lotnisk" << endl;
  369.                         wsk_lotnisko->wypisz(head_lotnisko);
  370.                         wsk_lot->next = new lot_osobowy();
  371.                         wsk_lot = wsk_lot->next;
  372.                         break;
  373.                     }
  374.                     break;
  375.                 }
  376.                 else {
  377.                     if (head_lot == NULL) {
  378.                         head_lot = wsk_lot = new lot_towarowy();
  379.                         break;
  380.                     }
  381.                     else {
  382.                         wsk_lot->next = new lot_towarowy();
  383.                         wsk_lot = wsk_lot->next;
  384.                         break;
  385.                     }
  386.                     break;
  387.                 }
  388.             }
  389.             else {
  390.                 int k, l = 1;
  391.                 cout << "Ktory lot chcesz usunac?" << endl;
  392.                 wsk_lot->wypisz(head_lot);
  393.                 cin >> k;
  394.                 while (!cin || k<0 || k>lot::ilosc_lotow) {
  395.                     cout << "W bazie nie istnieje taka ilosc lotow" << endl;
  396.                     cout << "Podaj ktory lot chcesz usunac?" << endl;
  397.                     wsk_lot->wypisz(head_lot);
  398.                     cin.clear();
  399.                     cin.ignore(9999, '\n');
  400.                     cin >> k;
  401.                 }
  402.                 //TU USUWANKO ELEMENTU
  403.             }
  404.             break;
  405.  
  406.         case 7:
  407.             //jakiś kod
  408.             break;
  409.  
  410.         case 8:
  411.             head_lot->zapisz(head_lot);
  412.             exit(0);
  413.             break;
  414.         default:
  415.             cout << "nieprawidlowa wartosc" << endl;
  416.             cin.clear();
  417.             cin.ignore(9999, '\n');
  418.             break;
  419.         }
  420.     }
  421. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement