Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.63 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.  
  7. typedef enum weekday
  8. {
  9.     PON,
  10.     WTO,
  11.     SRO,
  12.     CZW,
  13.     PIA,
  14.     SOB,
  15.     NIE
  16. } Weekday;
  17.  
  18. typedef struct czas_t
  19. {
  20.     int godzina;
  21.     int minuta;
  22. } Czas;
  23.  
  24. typedef struct przerwa_t
  25. {
  26.     Czas start;
  27.     Czas koniec;
  28.     struct przerwa_t* next;
  29. } Przerwa;
  30.  
  31. typedef struct workday_t
  32. {
  33.     int data;
  34.     Weekday dzien;
  35.     Czas pocz;
  36.     Czas koniec;
  37.     Przerwa* przerwa;
  38.     struct workday_t* next;
  39. } Workday;
  40.  
  41. Workday* stworzyListeWorkday();
  42. Workday* dodajWorkday(int i);
  43. float licz(Workday* poczatek_listy);
  44. float liczwybr(Workday* poczatek_listy);
  45. int drukuj(Workday* poczatek_listy);
  46. void czytDay(Workday* poczatek_listy);
  47.  
  48. int main()
  49. {
  50.     czytDay(NULL);
  51.  
  52.     /*int x;
  53.     printf("Program obliczajacy ilosc godzin przepracowanych przez pracownika\n\n\n");
  54.     Workday* wskWorkday = dodajWorkday(3);
  55.     Workday* lista = stworzyListeWorkday();
  56.     printf("\nWitam w Menu programu wybierz\n 1:  dla wyswietlenia wszystkich przepracowanych godzin");
  57.     printf("\n 2:  Ilosc godzin w danym zakresie dni\n 3:  wyswietl wszystkie przepracowane dni\n");
  58.     scanf("%d", &x);
  59.     switch (x)
  60.     {
  61.     case 1: printf("Ilosc wszystkich godzin przepracowanych przez pracownika: %.2f\n\n", licz(lista));
  62.         break;
  63.     case 2: printf("ilosc godzin przepracowanych w zakresie:: %.2f\n\n", liczwybr(lista));
  64.         break;
  65.     case 3: drukuj(lista);
  66.         printf("\n");
  67.         break;
  68.     }
  69.     while (wskWorkday != NULL)
  70.     {
  71.         //petla s�uz�ca do zwalniania pami�ci:
  72.         while (wskWorkday->przerwa != NULL)
  73.         {
  74.             Przerwa* tmp = wskWorkday->przerwa;
  75.             wskWorkday->przerwa = wskWorkday->przerwa->next;
  76.             free(tmp);
  77.         }
  78.         Workday* tmp = wskWorkday;
  79.         wskWorkday = wskWorkday->next;
  80.         free(tmp);
  81.  
  82.         return 0;
  83.     }*/
  84. }
  85.  
  86.  
  87. Workday* dodajWorkday(int i)
  88. {
  89.     //funckja s�uzy do stworzenia i zalokowania dnia pracy
  90.     Workday* wskWorkday = (Workday *)malloc(sizeof(Workday));
  91.     wskWorkday->data = i;
  92.     wskWorkday->pocz.godzina = 8;
  93.     wskWorkday->pocz.minuta = 00;
  94.     wskWorkday->koniec.godzina = 16;
  95.     wskWorkday->koniec.minuta = 0;
  96.     wskWorkday->dzien = i % 7;
  97.     wskWorkday->przerwa = (Przerwa *)malloc(sizeof(Przerwa));
  98.     wskWorkday->przerwa->start.godzina = 12;
  99.     wskWorkday->przerwa->start.minuta = 10;
  100.     wskWorkday->przerwa->koniec.godzina = 12;
  101.     wskWorkday->przerwa->koniec.minuta = 35;
  102.     wskWorkday->next = NULL;
  103.     wskWorkday->przerwa->next = NULL;
  104.     return wskWorkday;
  105. }
  106.  
  107. Workday* stworzyListeWorkday()
  108. {
  109.     //funkcja tworz�ca liste
  110.     Workday* workday = dodajWorkday(1);
  111.     Workday* poczatek_listy = workday;
  112.     for (int i = 2; i < 20; ++i)
  113.     {
  114.         workday->next = dodajWorkday(i);
  115.         workday = workday->next;
  116.     }
  117.  
  118.     return poczatek_listy;
  119. }
  120.  
  121. float licz(Workday* poczatek_listy)
  122. {
  123.     //funkcja liczaczaca caly dzien pracy
  124.     float ilosc = 0.0f;
  125.     Workday* tmp = poczatek_listy;
  126.     while (tmp != NULL)
  127.     {
  128.         ilosc += tmp->koniec.godzina - tmp->pocz.godzina;
  129.         ilosc += ((tmp->koniec.minuta - tmp->pocz.minuta) / 60.0f);
  130.         Przerwa* tmp_przerwa = tmp->przerwa;
  131.         while (tmp_przerwa != NULL)
  132.         {
  133.             ilosc -= tmp_przerwa->koniec.godzina - tmp_przerwa->start.godzina;
  134.             ilosc -= ((tmp_przerwa->koniec.minuta - tmp_przerwa->start.minuta) / 60.0f);
  135.             tmp_przerwa = tmp_przerwa->next;
  136.         }
  137.         tmp = tmp->next;
  138.     }
  139.  
  140.     return ilosc;
  141. }
  142.  
  143. int drukuj(Workday* poczatek_listy)
  144. {
  145.     //funckja wyswietlajaca dzien pracy
  146.     Workday* tmp = poczatek_listy; //1 wiersz-1 dzien kazdy element po znaku tabulacji
  147.     while (tmp != NULL)
  148.     {
  149.         if (tmp->data < 10)
  150.         {
  151.             printf("data:  %d\t", tmp->data);
  152.         }
  153.         else
  154.         {
  155.             printf("data: %d\t", tmp->data);
  156.         }
  157.         printf("poczatek pracy: %02d:%02d \t", tmp->pocz.godzina, tmp->pocz.minuta);
  158.         printf("koniec pracy: %02d:%02d \t", tmp->koniec.godzina, tmp->koniec.minuta);
  159.         printf("poczatek przerwy %02d:%02d\t", tmp->przerwa->start.godzina, tmp->przerwa->start.minuta);
  160.         printf("koniec przerwy %02d:%02d\n", tmp->przerwa->koniec.godzina, tmp->przerwa->koniec.minuta);
  161.  
  162.  
  163.         tmp = tmp->next;
  164.     }
  165.     return 0;
  166. }
  167.  
  168. float liczwybr(Workday* poczatek_listy)
  169. {
  170.     //funkcja liczaca ilosc godzin przepracowanych przez pracownika
  171.     int i, x; //w zakresie od jednej daty do drugiej
  172.     printf("podaj pierwsza date:");
  173.     scanf("%d", &i);
  174.     printf("podaj drug� date:"); //pobieran dane od uzytkownika i, x jako data pracay
  175.     scanf("%d", &x);
  176.     float ilosc = 0.0f;
  177.     Workday* tmp = poczatek_listy;
  178.     while (tmp != NULL)
  179.     {
  180.         if (tmp->data >= i && tmp->data <= x)
  181.         {
  182.             ilosc += tmp->koniec.godzina - tmp->pocz.godzina;
  183.             ilosc += ((tmp->koniec.minuta - tmp->pocz.minuta) / 60.0f);
  184.         }
  185.         Przerwa* tmp_przerwa = tmp->przerwa;
  186.         while (tmp_przerwa != NULL)
  187.         {
  188.             if (tmp->data >= i && tmp->data <= x)
  189.             {
  190.                 ilosc -= tmp_przerwa->koniec.godzina - tmp_przerwa->start.godzina;
  191.                 ilosc -= ((tmp_przerwa->koniec.minuta - tmp_przerwa->start.minuta) / 60.0f);
  192.             }
  193.             tmp_przerwa = tmp_przerwa->next;
  194.         }
  195.         tmp = tmp->next;
  196.     }
  197.  
  198.     return ilosc;
  199. }
  200.  
  201. void czytDay(Workday* poczatek_listy)
  202. {
  203.     FILE* fp;
  204.     char* str = NULL;
  205.     size_t len = 70;
  206.     int i = 0;
  207.     int data, s_h, e_h, s_m, e_m, break_s_h, break_s_m, break_e_h, break_e_m;
  208.     char dzien[4];
  209.     char Break[7];
  210.     char znaki[10];
  211.     char line[1000];
  212.  
  213.     if ((fp = fopen("C:\\Users\\adam_\\source\\repos\\tygodnie\\Debug\\week2.txt", "r")) == NULL)
  214.     {
  215.         printf("Nie moge otworzyc!\n");
  216.         exit(1);
  217.     }
  218.     // "%s %s %s %d", str1, str2, str3, &year
  219.     //fscanf(fp, "%[^\n]", line);
  220.     char day[10];
  221.     char day_name[10];
  222.     char start[10];
  223.     char start_time[10];
  224.     char end[10];
  225.     char end_time[10];
  226.     char break_command[10];
  227.     char break_time[10];
  228.  
  229.      fscanf(fp, "%s %s %s %s %s %s %s %s\n",day, day_name, start, start_time, end, end_time, break_command, break_time);
  230.     printf("End");
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement