Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.06 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include "struktury2.h"
  6. #include "funkcje2.h"
  7. #include <crtdbg.h>
  8. #include <conio.h>
  9. #define _CRTDBG_MAP_ALLOC
  10. #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
  11. bool PorownywanieLekcji(lekcja* obecna, lekcja* nowa)
  12. {
  13.     if (obecna->dayofweek > nowa->dayofweek) return true;
  14.     else if (obecna->dayofweek < nowa->dayofweek) return false;
  15.     else // ten sam dzien tygodnia
  16.         if (obecna->godz_rozp > nowa->godz_rozp) return true;
  17.         else if (obecna->godz_rozp < nowa->godz_rozp) return false;
  18.         else // ta sama godzina rozpoczecia
  19.             if (obecna->min_rozp > nowa->min_rozp) return true;
  20.             else if (obecna->min_rozp < nowa->min_rozp) return false;
  21.             else return false;
  22.            
  23.                  
  24. }
  25. void Tworzenie_Lekcji(lekcja* &pHead2, int godz_rozp, int min_rozp, int godz_zak, int min_zak, dzien dzien_dzien, std::string grupa, std::string przedmiot)
  26. {
  27.     //wyciek pamieci
  28.     lekcja* nowa = new lekcja{ godz_rozp, min_rozp, godz_zak, min_zak, dzien_dzien, grupa, przedmiot, nullptr };
  29.     // dla pustej listy
  30.     if (pHead2 == nullptr)
  31.         pHead2 = nowa;
  32.     else {
  33.         lekcja* obecna = pHead2;
  34.         lekcja* poprzednia = nullptr;
  35.         while (obecna != nullptr)
  36.         {
  37.             if (PorownywanieLekcji(obecna, nowa))
  38.             {
  39.                 break;
  40.             }
  41.             else
  42.             {
  43.                 poprzednia = obecna;
  44.                 obecna = obecna->pNext2;
  45.             }
  46.         }
  47.             if (obecna == pHead2) // element jako pGlowa (gdzie lista niepusta)
  48.             {
  49.                 nowa->pNext2 = pHead2;
  50.                 pHead2 = nowa;
  51.             }
  52.             else // element po pGlowie (gdzie lista niepusta)
  53.             {
  54.                 nowa->pNext2 = obecna;
  55.                 poprzednia->pNext2= nowa;
  56.             }
  57.         }
  58. }
  59.  
  60. void DodajProwadzacych(prowadzacy*& pHead, std::string nameoffile)
  61. {
  62.     std::fstream plik;
  63.     char porzuc;
  64.     int hourofstart;
  65.     int minofstart;
  66.     int hourofend;
  67.     int minofend;
  68.     std::string surname;
  69.     std::string day;
  70.     std::string group;
  71.     std::string subject;
  72.     dzien dzien_dzien;
  73.     plik.open(nameoffile, std::ios::in);
  74.     if (plik.good() == true)
  75.     {
  76.         while (!plik.eof())
  77.         {
  78.             plik >> hourofstart;
  79.             plik >> porzuc;
  80.             plik >> minofstart;
  81.             plik >> porzuc;
  82.             plik >> hourofend;
  83.             plik >> porzuc;
  84.             plik >> minofend;
  85.             plik >> day;
  86.             if (day == "pn")
  87.                 dzien_dzien = dzien::pn;
  88.             else if (day == "wt")
  89.                 dzien_dzien = dzien::wt;
  90.             else if (day == "sr")
  91.                 dzien_dzien = dzien::sr;
  92.             else if (day == "cz")
  93.                 dzien_dzien = dzien::cz;
  94.             else if (day == "pt")
  95.                 dzien_dzien = dzien::pt;
  96.             else if (day == "sb")
  97.                 dzien_dzien = dzien::sb;
  98.             else if (day == "nd")
  99.                 dzien_dzien = dzien::nd;
  100.             else
  101.             {
  102.                 std::cout << "W pliku jest niepoprawna nazwa dnia tygodnia" << std::endl;
  103.                 break;
  104.             }
  105.             plik >> group;
  106.             plik >> surname;
  107.             plik >> subject;
  108.  
  109.             if (not pHead) // lista pusta
  110.             {
  111.                 pHead = new prowadzacy{ surname, nullptr, nullptr};
  112.  
  113.                 Tworzenie_Lekcji(pHead->pH, hourofstart, minofstart, hourofend, minofend, dzien_dzien, group, subject );
  114.             }
  115.             else
  116.             {
  117.                 int end = 1;
  118.                
  119.                 prowadzacy* temp = pHead;
  120.                 while (temp != nullptr)
  121.                 {
  122.                    
  123.                     if (temp->nazwisko == surname)
  124.                     {
  125.                         end = 0;
  126.                         break;
  127.                     }
  128.                     temp = temp->pNext;
  129.                 }
  130.                 if (end == 0)
  131.                 {
  132.                    Tworzenie_Lekcji(temp->pH, hourofstart, minofstart, hourofend, minofend, dzien_dzien, group, subject);
  133.                 }
  134.                 else {
  135.                     auto p = pHead;
  136.                     if (pHead) {
  137.                         while (p->pNext)
  138.                             p = p->pNext;
  139.                     }
  140.                     if (p) {
  141.                         p->pNext = new prowadzacy{ surname, nullptr, nullptr };
  142.                         Tworzenie_Lekcji(p->pNext->pH, hourofstart, minofstart, hourofend, minofend, dzien_dzien, group, subject);
  143.                     }
  144.                 }
  145.             }
  146.            
  147.         } plik.close();
  148.     }
  149.     else std::cout << "Nie udalo sie otworzyc pliku" << std::endl;
  150. }
  151.  
  152. void WpiszPlanDoPliku(prowadzacy* &pHead)
  153. {
  154.     prowadzacy* p = pHead;
  155.    
  156.     while (p)
  157.     {
  158.         lekcja* p2 = p->pH;
  159.         while (p2)
  160.         {
  161.             std::string nameoffile = p->nazwisko + ".txt";
  162.             std::ofstream plik;
  163.             plik.open(nameoffile, std::ios::app);
  164.             if (plik.good() == true)
  165.             {
  166.                 if (p2->godz_rozp < 10)
  167.                     plik << "0" << p2->godz_rozp << ":";
  168.                 else
  169.                     plik << p2->godz_rozp << ":";
  170.                 if (p2->min_rozp < 10)
  171.                     plik << "0" << p2->min_rozp << "-";
  172.                 else
  173.                     plik << p2->min_rozp << "-";
  174.                 if (p2->godz_zak < 10)
  175.                     plik << "0" << p2->godz_zak << ":";
  176.                 else
  177.                     plik << p2->godz_zak << ":";
  178.                 if (p2->min_zak < 10)
  179.                     plik << "0" << p2->min_zak << " ";
  180.                 else
  181.                     plik << p2->min_zak << " ";
  182.  
  183.                 if (p2->dayofweek == dzien::pn)
  184.                     plik << "pn" << " ";
  185.                 else if (p2->dayofweek == dzien::wt)
  186.                     plik << "wt" << " ";
  187.                 else if (p2->dayofweek == dzien::sr)
  188.                     plik << "sr" << " ";
  189.                 else if (p2->dayofweek == dzien::cz)
  190.                     plik << "cz" << " ";
  191.                 else if (p2->dayofweek == dzien::pt)
  192.                     plik << "pt" << " ";
  193.                 else if (p2->dayofweek == dzien::sb)
  194.                     plik << "sb" << " ";
  195.                 else if (p2->dayofweek == dzien::nd)
  196.                     plik << "nd" << " ";
  197.                 plik << p2->grupa << " " << p2->przedmiot << std::endl;
  198.                 p2 = p2->pNext2;
  199.                 plik.close();
  200.             }
  201.             else std::cout << "Nie udalo sie otworzyc pliku";
  202.         }
  203.         p = p->pNext;  
  204.     }  
  205. }
  206.  
  207. void UsunListy(prowadzacy*& pHead)
  208. {
  209.     while(pHead){
  210.         while (pHead->pH)
  211.         {
  212.             auto p = pHead->pH->pNext2;
  213.             delete pHead->pH;
  214.             pHead->pH = p;
  215.         }
  216.         auto p = pHead->pNext;
  217.         delete pHead;
  218.         pHead = p;
  219.     }
  220.    
  221. }
  222. int main(int argc, char** argv)
  223. {
  224.     std::string param = "-i";
  225.     std::string nazwaplikuwejsciowego;
  226.    // nazwaplikuwejsciowego = "plan2.txt";
  227.     int end = 0;
  228.     if (argc == 3)
  229.     {
  230.         for (int i = 0; i < argc; i++)
  231.         {
  232.             if (param == argv[i])
  233.             {
  234.                 i++;
  235.                 nazwaplikuwejsciowego = argv[i];
  236.                 end = 0;
  237.                 break;
  238.             }
  239.             else end = 1;
  240.         }
  241.         if (end)
  242.         {
  243.             std::cout << "podaj poprawne przelaczniki" << std::endl;
  244.             return 0;
  245.         }
  246.     }
  247.     else
  248.     {
  249.         std::cout << "podaj poprawna liczbe przelacznikow" << std::endl;
  250.         return 0;
  251.     }
  252.          prowadzacy* pGlowa = nullptr;
  253.          DodajProwadzacych(pGlowa, nazwaplikuwejsciowego);
  254.          WpiszPlanDoPliku(pGlowa);
  255.          UsunListy(pGlowa);
  256.          delete pGlowa;
  257.        
  258.          std::cout << "----" << std::endl;
  259.        std::cout<< _CrtDumpMemoryLeaks();
  260.  
  261.     return 0;
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement