Advertisement
Guest User

gsgsfa

a guest
Jan 18th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement