SHARE
TWEET

ProjektLoty

a guest Jan 18th, 2020 84 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Generalnie chodzi o dodanie w tych mniejszych plikach BER MAD LON AMS w pierwszym wierszu date lotu, lotnisko startowe i docelowe. Z while'a w mainie zrobić funkcje odczyt z pliku. Po prostu przerobić tego whilea na funkcje która odczytuje dane z pliku.
  2.  
  3. MAIN.CPP
  4.  
  5. #include <iostream>
  6. #include <fstream>
  7. #include <sstream>
  8. #include <iomanip>
  9. #include <cassert>
  10.  
  11. #include "struktury.h"
  12. #include "funkcje.h"
  13.  
  14. using namespace std;
  15.  
  16. int main(int argc, char* argv[])
  17. {
  18.     if (argc != 2)
  19.     {
  20.         cerr << "Podaj jeden Plik do odczytu!";
  21.         assert(0);
  22.     }
  23.     ifstream the_file(argv[1]);
  24.     if (!the_file.is_open())
  25.     {
  26.         cerr << "Nie mozna otowrzyc pliku! \n";
  27.         assert(0);
  28.     }
  29.    
  30.     LotListItem* head = new LotListItem;
  31.     head->symbol = "";
  32.     head->firstPasazer = nullptr;
  33.     head->nextLot = nullptr;
  34.  
  35.  
  36.     while (!the_file.eof())                         //ten cały blok while osobnej funkjcji "OdczytZPliku".Zrobic funkcje która odczytuje z pliku zamiast tego.
  37.     {
  38.         string linia;
  39.         getline(the_file, linia);
  40.         if (linia == "")
  41.             break;
  42.         const auto record = parse_record(linia);                          
  43.         add_lot_pasazerSorted(head, record);                      
  44.     }
  45.     the_file.close();
  46.  
  47.    
  48.     //zapisanie do plików posortowanego
  49.     ZapisdoPlikuPosortowanego(head);
  50.  
  51.    
  52.     //zwolnienie pamięci
  53.     usunListeLotow(head);
  54.  
  55.     return 0;
  56. }
  57.  
  58.  
  59. FUNKCJE.CPP
  60. //PROJEKT LOTY
  61.  
  62. #include <iostream>
  63. #include <fstream>
  64. #include <sstream>
  65. #include <iomanip>
  66. #include <cassert>
  67.  
  68. #include "struktury.h"
  69. #include "funkcje.h"
  70.  
  71. using namespace std;
  72.  
  73. Record parse_record(const string& str)
  74. {
  75.     Record record{};                    //tworzenie obiektu struktury o nazwie record
  76.     istringstream ss{ str };
  77.  
  78.     ss >> record.symbol
  79.         >> get_time(&(record.data), "%d.%m.%Y")
  80.         >> record.odlot
  81.         >> record.przylot
  82.         >> record.imie
  83.         >> record.nazwisko
  84.         >> record.numerMiejsca;
  85.  
  86.     if (!ss)
  87.     {
  88.         cerr << "Bledny rekord danych!";
  89.         assert(0);
  90.     }
  91.  
  92.     return record;
  93. }
  94.  
  95.  
  96.  
  97. //funkcja dodaje lot i pasażera do lotu oraz sortuje rosnąco
  98. void add_lot_pasazerSorted(LotListItem* head, const Record& record)
  99. {
  100.     LotListItem* itemLot = head;
  101.     LotListItem* nowyLot = nullptr;
  102.     PasazerListItem* itemPasazer = nullptr;
  103.     PasazerListItem* nowyPasazer = nullptr;
  104.  
  105.     if (itemLot->symbol == "")
  106.     {
  107.         itemLot->symbol = record.symbol;
  108.     }
  109.     else
  110.     {
  111.         while (itemLot->symbol != record.symbol)          
  112.         {
  113.             if (itemLot->nextLot == nullptr)
  114.             {
  115.                 nowyLot = new LotListItem;
  116.                 nowyLot->symbol = record.symbol;
  117.                 nowyLot->firstPasazer = nullptr;
  118.                 nowyLot->nextLot = nullptr;
  119.                 itemLot->nextLot = nowyLot;         //teraz  itemlot wskazuje na nowyLot
  120.                 itemLot = nowyLot;                  //itemlotem jest nowyLot
  121.             }
  122.             else
  123.             {
  124.                 itemLot = itemLot->nextLot;
  125.             }
  126.         }
  127.     }
  128.  
  129.     if (itemLot->firstPasazer == nullptr)
  130.     {
  131.         PasazerListItem* nowyPasazer = new PasazerListItem;
  132.         nowyPasazer->imie = record.imie;
  133.         nowyPasazer->nazwisko = record.nazwisko;
  134.         nowyPasazer->numerMiejsca = record.numerMiejsca;
  135.         nowyPasazer->nextPasazer = nullptr;
  136.         itemLot->firstPasazer = nowyPasazer;
  137.     }
  138.     else
  139.     {
  140.         PasazerListItem* nowyPasazer = new PasazerListItem;
  141.         nowyPasazer->imie = record.imie;
  142.         nowyPasazer->nazwisko = record.nazwisko;
  143.         nowyPasazer->numerMiejsca = record.numerMiejsca;
  144.         nowyPasazer->nextPasazer = nullptr;
  145.  
  146.  
  147.         if (nowyPasazer->numerMiejsca < itemLot->firstPasazer->numerMiejsca)            //jesli nowy pasazer ma numer miejsca mnijeszy niz pierwszy pasazer
  148.         {
  149.             nowyPasazer->nextPasazer = itemLot->firstPasazer;
  150.             itemLot->firstPasazer = nowyPasazer;
  151.         }
  152.         else
  153.         {
  154.             itemPasazer = itemLot->firstPasazer;
  155.            
  156.  
  157.             bool dodalemPasazeraDoListy=false;
  158.             while (itemPasazer->nextPasazer != nullptr)
  159.             {
  160.                 auto p = itemPasazer;
  161.                 itemPasazer = itemPasazer->nextPasazer;
  162.                 if (nowyPasazer->numerMiejsca < itemPasazer->numerMiejsca)
  163.                 {
  164.                     p->nextPasazer = nowyPasazer;
  165.                     nowyPasazer->nextPasazer = itemPasazer;
  166.                     dodalemPasazeraDoListy = true;
  167.                 }
  168.             }
  169.             if (dodalemPasazeraDoListy == false)
  170.             {
  171.                 itemPasazer->nextPasazer = nowyPasazer;
  172.             }
  173.  
  174.         }
  175.     }
  176. }
  177.  
  178.  
  179. //Zapisuje do pliku posortowane
  180. void ZapisdoPlikuPosortowanego(LotListItem* head)               //w pierwszym wierszu w pliku ma umiescic date lotu, lotnisko startowe i docelowe, dalej już jest dobrze :)
  181. {
  182.     LotListItem* itemLot = head;
  183.     PasazerListItem* itemPasazer = nullptr;
  184.     fstream plik;
  185.     if (itemLot->symbol != "")
  186.     {
  187.         do
  188.         {
  189.                 string nazwaPliku;
  190.                 nazwaPliku = itemLot->symbol + ".txt";
  191.                 plik.open(nazwaPliku, ios::out); //otworzenie pliku
  192.                 if (plik.is_open() == false)
  193.                 {
  194.                     return;
  195.                 }
  196.                 else
  197.                 {                                                               //próbowałem bawić się na sttrukturach tutaj i wpisać te dane ale cały czas jakieś błedy
  198.                         itemPasazer = itemLot->firstPasazer;
  199.                         while (itemPasazer != nullptr)
  200.                         {
  201.                             plik << itemPasazer->imie << " " << itemPasazer->nazwisko << " " << itemPasazer->numerMiejsca << endl;
  202.                             itemPasazer = itemPasazer->nextPasazer;
  203.                         }
  204.                         plik.close();
  205.                         itemLot = itemLot->nextLot;
  206.                 }
  207.            
  208.         } while (itemLot != nullptr);
  209.     }
  210. }
  211.  
  212.  
  213. //Blok dwoch funkcji odpowiedzialnych za zwalnianie pamieci
  214. void usunListePasazerow(PasazerListItem* head)  //usun liste pasazerow
  215. {
  216.     PasazerListItem* item = head;
  217.     while (item) {
  218.         auto p = item->nextPasazer;
  219.         delete item;
  220.         item = p;
  221.     }
  222. }
  223.  
  224. void usunListeLotow(LotListItem* head)  //usun liste lotow
  225. {
  226.     LotListItem* item = head;
  227.     while (item) {
  228.         auto p = item->nextLot;
  229.         usunListePasazerow(item->firstPasazer);
  230.         delete item;
  231.         item = p;
  232.     }
  233. }
  234.  
  235.  
  236. FUNKCJE.H
  237.  
  238.  
  239. #ifndef FUNKCJE_H
  240. #define FUNKCJE_H
  241.  
  242. #include <iostream>
  243.  
  244. #include "struktury.h"
  245.  
  246. using namespace std;
  247.  
  248. Record parse_record(const string& str);
  249.  
  250.  
  251.  
  252. void add_lot_pasazerSorted(LotListItem* head, const Record& record);
  253.  
  254.  
  255.  
  256.  
  257. void ZapisdoPlikuPosortowanego(LotListItem* head);
  258.  
  259.  
  260.  
  261.  
  262. void usunListePasazerow(PasazerListItem* head);
  263.  
  264.  
  265.  
  266. void usunListeLotow(LotListItem* head);
  267.  
  268.  
  269. #endif
  270.  
  271.  
  272. STRUKTURY.H
  273.  
  274.  
  275. //PROJEKT LOTY
  276.  
  277.  
  278. #ifndef STRUKTURY_H
  279. #define STRUKTURY_H
  280.  
  281. #include <iostream>
  282. #include <string>
  283.  
  284. using namespace std;
  285.  
  286. //pozycja na liście pasażerów
  287. struct PasazerListItem {
  288.     string imie;
  289.     string nazwisko;
  290.     unsigned numerMiejsca;
  291.     PasazerListItem* nextPasazer;
  292. };
  293.  
  294. //pozycja na liście lotów
  295. struct LotListItem {
  296.     string symbol;
  297.     PasazerListItem* firstPasazer;
  298.     LotListItem* nextLot;
  299. };
  300.  
  301. //dane z pliku
  302. struct Record {
  303.     string symbol;
  304.     tm data;
  305.     string odlot;
  306.     string przylot;
  307.     string imie;
  308.     string nazwisko;
  309.     unsigned numerMiejsca;
  310.     Record* next;                       //podobno niepotrzebne
  311. };
  312.  
  313. #endif
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top