SHARE
TWEET

gsgsfa

a guest Jan 18th, 2019 61 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #include "pch.h"
  3. #include <iostream>
  4. #include <fstream>
  5. #include <string>
  6. using namespace std;
  7.  
  8.  
  9. struct dane
  10. {
  11.     int godzina1;///<godziny trwania zajęć
  12.     int minuta1;///<godziny trwania zajęć
  13.     int godzina2;///<godziny trwania zajęć
  14.     int minuta2;///<godziny trwania zajęć
  15.     string dzien;///<dzień tygodnia
  16.     string grupa;///<numer grupy
  17.     string nazwisko;
  18.     string przedmiot;///<przedmiot prowadzącego
  19.     dane *nastepny;
  20.     dane();
  21. };
  22. struct prowadzacy
  23. {
  24.     string nazwisko;
  25.     prowadzacy *next;
  26.     dane *pierwszy;
  27.     prowadzacy();
  28. };
  29. dane::dane() {
  30.     nastepny = nullptr;
  31. }
  32.  
  33. prowadzacy::prowadzacy() {
  34.     pierwszy = nullptr;
  35.     next = nullptr;
  36. }
  37. // rozbija na godziny i minuty
  38. //converty działają poprawnie
  39. int convert1(string s1)
  40. {
  41.     string temp = s1.erase(2, 9);
  42.     int i = atoi(temp.c_str());
  43.     return i;
  44. }
  45. int convert2(string s1)
  46. {
  47.     string temp = s1.erase(0, 3);
  48.     temp = temp.erase(2, 6);
  49.     int i = atoi(temp.c_str());
  50.     return i;
  51. }
  52. int convert3(string s1)
  53. {
  54.     string temp = s1.erase(0, 6);
  55.     temp = temp.erase(2, 3);
  56.     int i = atoi(temp.c_str());
  57.     return i;
  58. }
  59. int convert4(string s1)
  60. {
  61.     string temp = s1.erase(0, 9);
  62.     int i = atoi(temp.c_str());
  63.     return i;
  64. }
  65. //to jest do sortowania(póki co nie ważne)
  66. int convert5(string s1)
  67. {
  68.     if (s1 == "pn") s1 = "1";
  69.     if (s1 == "wt") s1 = "2";
  70.     if (s1 == "sr") s1 = "3";
  71.     if (s1 == "cz") s1 = "4";
  72.     if (s1 == "pt") s1 = "5";
  73.     if (s1 == "sb") s1 = "6";
  74.     if (s1 == "nd") s1 = "7";
  75.     cout << "convert5" << endl;
  76.     int i = atoi(s1.c_str());
  77.     return i;
  78. }
  79. //jeżeli nazwisko z listy prowadzących jest takie samo jak nazwisko z pliku zwraca true, jak nie to false
  80. bool przeszukaj_prowadzacy1(prowadzacy*head_prow,string nazwisko)
  81. {
  82.     while(head_prow)
  83.     {
  84.         if(head_prow->nazwisko==nazwisko)
  85.         {
  86.             cout << "Return true" << endl;
  87.             return true;
  88.         }
  89.         else
  90.             head_prow = head_prow->next;
  91.     }
  92.     cout << "Return false" << endl;
  93.     return false;
  94. }
  95. //przeszukuje listę prowadzących, jak nazwisko prowadzącego jest takie samo jak nazwisko z pliku zwraca wskaźnik na ten element(head)
  96. prowadzacy *przeszukaj_prowadzacy2(prowadzacy*head_prow, string nazwisko)
  97. {
  98.     while (head_prow)
  99.     {
  100.         if (head_prow->nazwisko ==nazwisko)
  101.         {
  102.             cout << "Return head_prow" << endl;
  103.             return head_prow;
  104.         }
  105.         else
  106.             head_prow = head_prow->next;
  107.     }
  108.     cout << "Return nullptr" << endl;
  109.     return nullptr;
  110. }
  111. //dodaje na poczatek dane, tu się pewnie sypie
  112. dane* dodaj_dane(/*head_prow->pierwszy*/dane*&glowa_dane,int godzina1,int minuta1,int godzina2,int minuta2,string dzien,string grupa,string przedmiot)
  113. {
  114.     //gdzies tu lezy problem - możliwe że glowa_dane
  115.     //nowe dane
  116.     dane*nowy = new dane;
  117.     nowy->godzina1 = godzina1;
  118.     nowy->minuta1 = minuta1;
  119.     nowy->godzina2 = godzina2;
  120.     nowy->minuta2= minuta2;
  121.     nowy->dzien = dzien;
  122.     nowy->grupa = grupa;
  123.     nowy->przedmiot = przedmiot;
  124.     if (glowa_dane==nullptr)
  125.     {
  126.         nowy->nastepny = nullptr;
  127.         glowa_dane = nowy;
  128.     }
  129.     else
  130.     {
  131.         nowy->nastepny = glowa_dane;
  132.         glowa_dane = nowy;
  133.     }
  134.     cout << "Dodaj dane" << endl;
  135.     return nowy;
  136. }
  137. //dodaje prowadzącego na początek listy, dla prowadzących działa ok, dla danych nie
  138. void dodaj_prowadzacego(prowadzacy*&head_prow/*,dane*&glowa_dane*/, int godzina1, int minuta1, int godzina2, int minuta2,string dzien,string grupa,string nazwisko,string przedmiot)
  139. {
  140.     prowadzacy *nowy = new prowadzacy;//nowy prowadzacy
  141.     nowy->nazwisko = nazwisko;//nowe nazwisko
  142.     nowy->pierwszy = dodaj_dane(/*glowa_dane,*/ godzina1, minuta1, godzina2, minuta2, dzien, grupa, przedmiot);
  143.     if (head_prow == nullptr)
  144.     {
  145.         nowy->next = nullptr;
  146.         head_prow = nowy;
  147.     }
  148.     else
  149.     {
  150.         nowy->next = head_prow;
  151.         head_prow = nowy;
  152.     }
  153.     cout << "Dodaj prowadzacego" << endl;
  154. }
  155. //sprawdzałem czy dobrze czytało z pliku do tablicy
  156. void wyswietlanie(string tabword[])
  157. {
  158.     for (int i = 0; i < 5; i++)
  159.     {
  160.        
  161.         cout<<i<<"  "<< tabword[i] << endl;
  162.     }
  163. }
  164. //to wiadomo
  165. void wyswietlanie_danych(dane*glowa_dane)
  166. {
  167.     while (glowa_dane)
  168.     {
  169.         cout << "***" << glowa_dane->godzina1 << ":" << glowa_dane->minuta1 << "-" << glowa_dane->godzina2 << ":" << glowa_dane->minuta2;
  170.         cout << "***" << glowa_dane->dzien;
  171.         cout << "***" << glowa_dane->grupa;
  172.         cout << "***" << glowa_dane->przedmiot << endl;
  173.         glowa_dane = glowa_dane->nastepny;
  174.     }
  175. }
  176. //to wiadomo
  177. void wyswietlanie_listy(prowadzacy*head_prow,dane*glowa_dane)
  178. {
  179.     while(head_prow)
  180.     {
  181.         cout <<'*'<< head_prow->nazwisko << endl;
  182.         wyswietlanie_danych(glowa_dane);
  183.         head_prow = head_prow->next;
  184.     }
  185. }
  186. //to wiadomo
  187. void usun_dane(dane*&glowa_dane)
  188. {
  189.     while(glowa_dane)
  190.     {
  191.         dane*nast = glowa_dane->nastepny;
  192.         delete glowa_dane;
  193.         glowa_dane = nast;
  194.     }
  195. }
  196. //to wiadomo
  197. void usun_prowadzacego(prowadzacy*&head_prow)
  198. {
  199.     while (head_prow)
  200.     {
  201.         prowadzacy*nast = head_prow->next;
  202.         delete head_prow;
  203.         head_prow = nast;
  204.     }
  205. }
  206. //czyta z pliku
  207. void czytaj(prowadzacy *&head_prow/*,dane*&glowa_dane*/)
  208. {
  209.     fstream file;
  210.     file.open("dane.txt", ios::in);
  211.     if (!file.is_open())
  212.     {
  213.         cout << "Nie mozna otworzyc pliku." << endl;
  214.     }
  215.     string word;
  216.     string tabword[5];//tablica stringów
  217.     int licznik_odczyt=0;
  218.     while (file >> word)//póki w pliku istnieje słowo do odczytania
  219.     {
  220.         tabword[licznik_odczyt] = word;//przypisuje sobie słowo
  221.         licznik_odczyt++;//inkrementuje licznik
  222.         if (licznik_odczyt % 5 == 0)//jeśli będzie 5 słów(tyle jest w lini), przejdź dalej
  223.         {
  224.             //wyswietlanie(tabword);
  225.             cout << "_____________Czytaj" << endl;
  226.             licznik_odczyt = 0;
  227.             if (head_prow == nullptr)//jesli nic w niej nie ma
  228.             {
  229.                 //tu jest tak dużo zmiennych bo rozbijam osobno na godziny i miunty
  230.                  dodaj_prowadzacego(head_prow/*,glowa_dane*/,convert1(tabword[0]), convert2(tabword[0]), convert3(tabword[0]), convert4(tabword[0]),tabword[1],tabword[2],tabword[3],tabword[4]);
  231.                  cout << "Pierwsze nazwisko" << endl;
  232.             }
  233.             else if (przeszukaj_prowadzacy1(head_prow, tabword[3]) == false)//jesli nazwiska tam nie ma
  234.             {
  235.                 dodaj_prowadzacego(head_prow, /*glowa_dane,*/ convert1(tabword[0]), convert2(tabword[0]), convert3(tabword[0]), convert4(tabword[0]), tabword[1], tabword[2], tabword[3], tabword[4]);
  236.                 cout << "Nowe nazwisko niepowtorzone" << endl;
  237.             }
  238.             else if (przeszukaj_prowadzacy1(head_prow, tabword[3]) == true) //jesli nazwisko tam jest
  239.             {
  240.                 prowadzacy*pom = head_prow;
  241.                 przeszukaj_prowadzacy2(head_prow, tabword[3])->pierwszy=glowa_dane;
  242.                 dodaj_dane(glowa_dane, convert1(tabword[0]), convert2(tabword[0]), convert3(tabword[0]), convert4(tabword[0]), tabword[1], tabword[2], tabword[4]);
  243.                 head_prow = pom;
  244.                 cout << "Nazwisko jest w liscie" << endl;
  245.             }
  246.         }
  247.     }
  248.     file.close();
  249. }
  250. //póki co nie działa dobrze
  251. void zapisz(prowadzacy*&head_prow,dane*&glowa_dane)// to sie nie wykonuje
  252. {
  253.     fstream plik;
  254.     while(head_prow)
  255.     {
  256.         dane*temp = glowa_dane;
  257.         plik.open(head_prow->nazwisko + " .txt", ios::out | ios::trunc);
  258.         while (temp)
  259.         {
  260.             plik << temp->godzina1 << ":";
  261.             plik << temp->minuta1 << "-";
  262.             plik << temp->godzina2 << ":";
  263.             plik << temp->minuta2 << " ";
  264.             plik << temp->dzien << " ";
  265.             plik << temp->grupa << " ";
  266.             plik << temp->przedmiot << endl;
  267.             temp = temp ->nastepny;
  268.             cout << "Ciach" << endl;
  269.         }
  270.         glowa_dane = temp;
  271.         plik.close();
  272.         head_prow=head_prow->next;
  273.         cout << "Mach" << endl;
  274.     }
  275. }
  276.  
  277. int main()
  278. {
  279.     //wydaje mi się że mi tworzy 1 listę danych, a wskaźnik prowadzącego na 1 element danych się nadpisuje z każdym dodanym elementem
  280.     prowadzacy*phead_prow = nullptr;
  281.     dane*pglowa_dane = nullptr;
  282.     czytaj(phead_prow, pglowa_dane);
  283.     wyswietlanie_listy(phead_prow,pglowa_dane);
  284.     zapisz(phead_prow, pglowa_dane);
  285.     usun_dane(pglowa_dane);
  286.     usun_prowadzacego(phead_prow);
  287.     cout << "Koniec";
  288.     return 0;
  289. }
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