Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.73 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <float.h>
  4. #include <math.h>
  5. #include <string.h>
  6. typedef enum weekday {
  7. PON, WTO, SRO, CZW, PIA, SOB, NIE
  8. } Weekday;
  9.  
  10. typedef struct czas_t {
  11. int godzina;
  12. int minuta;
  13. } Czas;
  14.  
  15. typedef struct przerwa_t {
  16. Czas start;
  17. Czas koniec;
  18. struct przerwa_t *next;
  19. } Przerwa;
  20.  
  21. typedef struct workday_t {
  22. int data;
  23. Weekday dzien;
  24. Czas pocz;
  25. Czas koniec;
  26. Przerwa *przerwa;
  27. struct workday_t *next;
  28. } Workday;
  29.  
  30. Workday *stworzyListeWorkday();
  31. Workday *dodajWorkday(int i);
  32. float licz(Workday *poczatek_listy);
  33. float liczwybr(Workday *poczatek_listy);
  34. int drukuj(Workday *poczatek_listy);
  35.  
  36.  
  37. int main() {
  38. int x;
  39. printf("Program obliczajacy ilosc godzin przepracowanych przez pracownika\n\n\n");
  40. Workday * wskWorkday=dodajWorkday(3);
  41. Workday *lista = stworzyListeWorkday();
  42. printf("\nWitam w Menu programu wybierz\n 1: dla wyswietlenia wszystkich przepracowanych godzin");
  43. printf("\n 2: Ilosc godzin w danym zakresie dni\n 3: wyswietl wszystkie przepracowane dni\n");
  44. scanf("%d",&x);
  45. switch ( x )
  46. {
  47. case 1:printf("Ilosc wszystkich godzin przepracowanych przez pracownika: %.2f\n\n", licz(lista));
  48. break;
  49. case 2:printf("ilosc godzin przepracowanych w zakresie:: %.2f\n\n", liczwybr(lista));
  50. break;
  51. case 3:drukuj(lista);printf("\n");
  52. break;
  53.  
  54. }
  55. while (wskWorkday != NULL) { //petla s³uz¹ca do zwalniania pamiêci:
  56. while (wskWorkday->przerwa != NULL) {
  57. Przerwa* tmp = wskWorkday->przerwa;
  58. wskWorkday->przerwa = wskWorkday->przerwa->next;
  59. free(tmp);
  60. }
  61. Workday* tmp = wskWorkday;
  62. wskWorkday = wskWorkday->next;
  63. free(tmp);
  64.  
  65. return 0;
  66. }}
  67.  
  68.  
  69. Workday *dodajWorkday(int i) { //funckja s³uzy do stworzenia i zalokowania dnia pracy
  70. Workday *wskWorkday = (Workday *) malloc(sizeof(Workday));
  71. wskWorkday->data = i;
  72. wskWorkday->pocz.godzina = 8;
  73. wskWorkday->pocz.minuta = 00;
  74. wskWorkday->koniec.godzina = 16;
  75. wskWorkday->koniec.minuta = 0;
  76. wskWorkday->dzien = i % 7;
  77. wskWorkday->przerwa = (Przerwa *) malloc(sizeof(Przerwa));
  78. wskWorkday->przerwa->start.godzina = 12;
  79. wskWorkday->przerwa->start.minuta = 10;
  80. wskWorkday->przerwa->koniec.godzina = 12;
  81. wskWorkday->przerwa->koniec.minuta = 35;
  82. wskWorkday->next=NULL;
  83. wskWorkday->przerwa->next=NULL;
  84. return wskWorkday;
  85. }
  86.  
  87. Workday *stworzyListeWorkday() { //funkcja tworz¹ca liste
  88. Workday *workday = dodajWorkday(1);
  89. Workday *poczatek_listy = workday;
  90. for (int i = 2; i < 20; ++i) {
  91. workday->next = dodajWorkday(i);
  92. workday = workday->next;
  93. }
  94.  
  95. return poczatek_listy;
  96. }
  97.  
  98. float licz(Workday *poczatek_listy) { //funkcja liczaczaca caly dzien pracy
  99. float ilosc = 0.0f;
  100. Workday *tmp = poczatek_listy;
  101. while (tmp != NULL) {
  102. ilosc += tmp->koniec.godzina - tmp->pocz.godzina;
  103. ilosc += ((tmp->koniec.minuta - tmp->pocz.minuta) / 60.0f);
  104. Przerwa *tmp_przerwa = tmp->przerwa;
  105. while (tmp_przerwa != NULL) {
  106. ilosc -= tmp_przerwa->koniec.godzina - tmp_przerwa->start.godzina;
  107. ilosc -= ((tmp_przerwa->koniec.minuta - tmp_przerwa->start.minuta) / 60.0f);
  108. tmp_przerwa = tmp_przerwa->next;
  109. }
  110. tmp = tmp->next;}
  111.  
  112. return ilosc;
  113. }
  114.  
  115. int drukuj(Workday *poczatek_listy) { //funckja wyswietlajaca dzien pracy
  116. Workday *tmp = poczatek_listy; //1 wiersz-1 dzien kazdy element po znaku tabulacji
  117. while (tmp != NULL ){
  118.  
  119. if (tmp->data<10){
  120. printf("data: %d\t",tmp->data);}
  121. else {
  122. printf("data: %d\t",tmp->data);
  123. }
  124. printf("poczatek pracy: %02d:%02d \t",tmp->pocz.godzina,tmp->pocz.minuta);
  125. printf("koniec pracy: %02d:%02d \t",tmp->koniec.godzina,tmp->koniec.minuta);
  126. printf("poczatek przerwy %02d:%02d\t", tmp->przerwa->start.godzina,tmp->przerwa->start.minuta);
  127. printf("koniec przerwy %02d:%02d\n", tmp->przerwa->koniec.godzina,tmp->przerwa->koniec.minuta);
  128.  
  129.  
  130. tmp = tmp->next;
  131. }
  132. return 0;
  133. }
  134.  
  135. float liczwybr(Workday *poczatek_listy) { //funkcja liczaca ilosc godzin przepracowanych przez pracownika
  136. int i, x; //w zakresie od jednej daty do drugiej
  137. printf("podaj pierwsza date:");
  138. scanf("%d",&i);
  139. printf("podaj drug¹ date:"); //pobieran dane od uzytkownika i, x jako data pracay
  140. scanf("%d",&x);
  141. float ilosc = 0.0f;
  142. Workday *tmp = poczatek_listy;
  143. while(tmp != NULL) {
  144. if (tmp->data >= i && tmp->data <=x) {
  145. ilosc += tmp->koniec.godzina - tmp->pocz.godzina;
  146. ilosc += ((tmp->koniec.minuta - tmp->pocz.minuta) / 60.0f);}
  147. Przerwa *tmp_przerwa = tmp->przerwa;
  148. while (tmp_przerwa != NULL) {
  149. if (tmp->data >= i && tmp->data <=x) {
  150. ilosc -= tmp_przerwa->koniec.godzina - tmp_przerwa->start.godzina;
  151. ilosc -= ((tmp_przerwa->koniec.minuta - tmp_przerwa->start.minuta) / 60.0f);}
  152. tmp_przerwa = tmp_przerwa->next;
  153. }
  154. tmp = tmp->next;}
  155.  
  156. return ilosc;
  157. }
  158.  
  159. void czytDay (Workday *poczatek_listy)
  160. {;
  161.  
  162. FILE *fp;
  163. char* str = NULL;
  164. size_t len = 70;
  165. int i = 0;
  166. int data, s_h, e_h,s_m,e_m ,break_s_h, break_s_m, break_e_h, break_e_m;
  167. char dzien[4];
  168. char Break[7];
  169. char znaki[10];
  170. if ((fp = fopen("week1.txt", "r")) == NULL)
  171. {
  172. printf("Nie moge otworzyc!\n");
  173. exit(1);
  174. }
  175.  
  176. while (getline(&str, &len, fp)!=-1)
  177. {}
  178.  
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement