Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.75 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct Czas
  6. {
  7. int hour;
  8. int min;
  9. };
  10.  
  11. typedef struct Przerwa
  12. {
  13. struct Czas start;
  14. struct Czas end;
  15. struct Przerwa *next;
  16. } Przerwa_type;
  17.  
  18. enum weekday
  19. {
  20. Pon,
  21. Wto,
  22. Sro,
  23. Czw,
  24. Pia,
  25. Sob,
  26. Nie
  27. };
  28. char *days[] = {"Poniedzialek",
  29. "Wtorek",
  30. "Sroda",
  31. "Czwartek",
  32. "Piatek",
  33. "Sobota",
  34. "Niedziela"};
  35. typedef struct Workday
  36. {
  37. int data;
  38. enum weekday dzien;
  39. struct Czas pocz;
  40. struct Czas koniec;
  41. Przerwa_type *pBreak;
  42. struct Workday *next;
  43. } Workday_type;
  44.  
  45. void dodaj_dzien(Workday_type **head, Workday_type workDay);
  46. void dodaj_przerwe(Przerwa_type **head, Przerwa_type przerwa);
  47. void pokazPodsumowanie(Workday_type *head);
  48. void zwolnijPamiec(Workday_type **head);
  49. void czytaniePliku(Workday_type **head);
  50. int main()
  51. {
  52.  
  53. Workday_type *head = NULL;
  54. czytaniePliku(&head);
  55. pokazPodsumowanie(head);
  56. zwolnijPamiec(&head);
  57. getchar();
  58. return 0;
  59. }
  60.  
  61. void zwolnijPamiec(Workday_type **head)
  62. {
  63. Workday_type *tmp;
  64. while ((*head) != NULL)
  65. {
  66. tmp = (*head)->next;
  67.  
  68. Przerwa_type *tmpPrz;
  69. while ((*head)->pBreak != NULL)
  70. {
  71. tmpPrz = (*head)->pBreak->next;
  72.  
  73. free((*head)->pBreak);
  74. (*head)->pBreak = tmpPrz;
  75. }
  76. free(*head);
  77. (*head) = tmp;
  78. }
  79. }
  80. void dodaj_dzien(Workday_type **head, Workday_type workDay)
  81. {
  82.  
  83. if (*head == NULL)
  84. {
  85. *head = (Workday_type *)malloc(sizeof(Workday_type));
  86. (*head)->data = workDay.data;
  87. (*head)->dzien = workDay.dzien;
  88. (*head)->koniec = workDay.koniec;
  89. (*head)->pocz = workDay.pocz;
  90. (*head)->pBreak = workDay.pBreak;
  91. (*head)->next = NULL;
  92. }
  93. else
  94. {
  95. Workday_type *tmp = *head;
  96. while (tmp->next != NULL)
  97. {
  98. tmp = tmp->next;
  99. }
  100. tmp->next = (Workday_type *)malloc(sizeof(Workday_type));
  101. tmp->next->data = workDay.data;
  102. tmp->next->dzien = workDay.dzien;
  103. tmp->next->koniec = workDay.koniec;
  104. tmp->next->pocz = workDay.pocz;
  105. tmp->next->pBreak = workDay.pBreak;
  106. tmp->next->next = NULL;
  107. }
  108. }
  109.  
  110. void dodaj_przerwe(Przerwa_type **head, Przerwa_type przerwa)
  111. {
  112. if (*head == NULL)
  113. {
  114. *head = (Przerwa_type *)malloc(sizeof(Przerwa_type));
  115. (*head)->start = przerwa.start;
  116. (*head)->end = przerwa.end;
  117. (*head)->next = NULL;
  118. }
  119. else
  120. {
  121. Przerwa_type *tmp = *head;
  122. while (tmp->next != NULL)
  123. {
  124. tmp = tmp->next;
  125. }
  126. tmp->next = (Przerwa_type *)malloc(sizeof(Przerwa_type));
  127. tmp->next->start = przerwa.start;
  128. tmp->next->end = przerwa.end;
  129. tmp->next->next = NULL;
  130. }
  131. }
  132.  
  133. void czytaniePliku(Workday_type **head)
  134. {
  135. Workday_type tmpWorkday_data;
  136. int i;
  137. int licznikLinii = 0;
  138. int licznikZnakow = 0;
  139. FILE *fp;
  140. char ch;
  141. char str[30][70];
  142. int break_s_h, break_s_m, break_e_h, break_e_m;
  143. char dzien[4];
  144. char Break[7];
  145. char znaki[10];
  146. if ((fp = fopen("week1.txt", "r")) == NULL)
  147. {
  148. printf("Nie moge otworzyc!\n");
  149. exit(1);
  150. }
  151.  
  152. while ((ch = fgetc(fp)) != EOF)
  153. {
  154.  
  155. if (ch == ':' || ch == '-')
  156. {
  157. ch = ' ';
  158. }
  159. if (ch == '\n')
  160. {
  161. ch = '\0';
  162. str[licznikLinii][licznikZnakow] = ch;
  163. licznikLinii++;
  164. licznikZnakow = 0;
  165. }
  166. else
  167. {
  168. str[licznikLinii][licznikZnakow] = ch;
  169. licznikZnakow++;
  170. }
  171. }
  172. for (i = 0; i <= licznikLinii; i++)
  173. {
  174. tmpWorkday_data.data = 0;
  175. Break[0] = '\0';
  176. break_s_h = 0;
  177. break_s_m = 0;
  178. break_e_h = 0;
  179. break_e_m = 0;
  180. sscanf(str[i], "%d %s %s %d %d %s %d %d %s %d %d %d %d", &tmpWorkday_data.data, dzien, znaki, &tmpWorkday_data.pocz.hour, &tmpWorkday_data.pocz.min, znaki, &tmpWorkday_data.koniec.hour, &tmpWorkday_data.koniec.min, Break, &break_s_h, &break_s_m, &break_e_h, &break_e_m);
  181. if (tmpWorkday_data.data != 0)
  182. {
  183. if (!stricmp(dzien, "Pon"))
  184. tmpWorkday_data.dzien = 1;
  185. else if (!stricmp(dzien, "Wto"))
  186. tmpWorkday_data.dzien = 2;
  187. else if (!stricmp(dzien, "sro"))
  188. tmpWorkday_data.dzien = 3;
  189. else if (!stricmp(dzien, "Czw"))
  190. tmpWorkday_data.dzien = 4;
  191. else if (!stricmp(dzien, "Pia"))
  192. tmpWorkday_data.dzien = 5;
  193. else if (!stricmp(dzien, "Sob"))
  194. tmpWorkday_data.dzien = 6;
  195. else if (!stricmp(dzien, "Nie"))
  196. tmpWorkday_data.dzien = 7;
  197. Przerwa_type *headPrzerwa = NULL;
  198. Przerwa_type tmpPrzerwa_data;
  199. tmpPrzerwa_data.start.hour = break_s_h;
  200. tmpPrzerwa_data.start.min = break_s_m;
  201. tmpPrzerwa_data.end.hour = break_e_h;
  202. tmpPrzerwa_data.end.min = break_e_m;
  203. tmpWorkday_data.pBreak = NULL;
  204. if ((break_e_m - break_s_m) != 0 || (break_e_h - break_s_h) != 0)
  205. {
  206.  
  207. dodaj_przerwe(&headPrzerwa, tmpPrzerwa_data);
  208. tmpWorkday_data.pBreak = headPrzerwa;
  209. }
  210. dodaj_dzien(head, tmpWorkday_data);
  211. }
  212. }
  213. fclose(fp);
  214. }
  215.  
  216. void pokazPodsumowanie(Workday_type *head)
  217. {
  218.  
  219. int Laczna_min = 0;
  220. int Laczna_min_przerw = 0;
  221. while (head != NULL)
  222. {
  223.  
  224. int liczba_min = head->koniec.min - head->pocz.min;
  225. liczba_min += ((head->koniec.hour - head->pocz.hour) * 60);
  226. int liczba_min_przerwy = 0;
  227. while (head->pBreak != NULL)
  228. {
  229. liczba_min_przerwy += ((head->pBreak->end.hour - head->pBreak->start.hour) * 60);
  230. liczba_min_przerwy += (head->pBreak->end.min - head->pBreak->start.min);
  231.  
  232. head->pBreak = head->pBreak->next;
  233. }
  234. Laczna_min += liczba_min;
  235. Laczna_min_przerw += liczba_min_przerwy;
  236.  
  237. printf("\n%s %d : Czas spedzony w pracy: %dh %dmin || Czas przerwy: %dh %dmin \n", days[head->dzien - 1], head->data, (liczba_min / 60), (liczba_min % 60), (liczba_min_przerwy / 60), (liczba_min_przerwy % 60));
  238. liczba_min_przerwy = 0;
  239. head = head->next;
  240. }
  241.  
  242. printf("\n\t**********Pracowanik przepracowal lacznie: %dh %dmin w tym mial %dh %dmin przerwy**********\n\n\n", (Laczna_min / 60), (Laczna_min % 60), (Laczna_min_przerw / 60), (Laczna_min_przerw % 60));
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement