Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct Czas
- {
- int hour;
- int min;
- };
- typedef struct Przerwa
- {
- struct Czas start;
- struct Czas end;
- struct Przerwa *next;
- } Przerwa_type;
- enum weekday
- {
- Pon,
- Wto,
- Sro,
- Czw,
- Pia,
- Sob,
- Nie
- };
- char *days[] = {"Poniedzialek",
- "Wtorek",
- "Sroda",
- "Czwartek",
- "Piatek",
- "Sobota",
- "Niedziela"};
- typedef struct Workday
- {
- int data;
- enum weekday dzien;
- struct Czas pocz;
- struct Czas koniec;
- Przerwa_type *pBreak;
- struct Workday *next;
- } Workday_type;
- void dodaj_dzien(Workday_type **head, Workday_type workDay);
- void dodaj_przerwe(Przerwa_type **head, Przerwa_type przerwa);
- void pokazPodsumowanie(Workday_type *head);
- void zwolnijPamiec(Workday_type **head);
- void czytaniePliku(Workday_type **head);
- int main()
- {
- Workday_type *head = NULL;
- czytaniePliku(&head);
- pokazPodsumowanie(head);
- zwolnijPamiec(&head);
- getchar();
- return 0;
- }
- void zwolnijPamiec(Workday_type **head)
- {
- Workday_type *tmp;
- while ((*head) != NULL)
- {
- tmp = (*head)->next;
- Przerwa_type *tmpPrz;
- while ((*head)->pBreak != NULL)
- {
- tmpPrz = (*head)->pBreak->next;
- free((*head)->pBreak);
- (*head)->pBreak = tmpPrz;
- }
- free(*head);
- (*head) = tmp;
- }
- }
- void dodaj_dzien(Workday_type **head, Workday_type workDay)
- {
- if (*head == NULL)
- {
- *head = (Workday_type *)malloc(sizeof(Workday_type));
- (*head)->data = workDay.data;
- (*head)->dzien = workDay.dzien;
- (*head)->koniec = workDay.koniec;
- (*head)->pocz = workDay.pocz;
- (*head)->pBreak = workDay.pBreak;
- (*head)->next = NULL;
- }
- else
- {
- Workday_type *tmp = *head;
- while (tmp->next != NULL)
- {
- tmp = tmp->next;
- }
- tmp->next = (Workday_type *)malloc(sizeof(Workday_type));
- tmp->next->data = workDay.data;
- tmp->next->dzien = workDay.dzien;
- tmp->next->koniec = workDay.koniec;
- tmp->next->pocz = workDay.pocz;
- tmp->next->pBreak = workDay.pBreak;
- tmp->next->next = NULL;
- }
- }
- void dodaj_przerwe(Przerwa_type **head, Przerwa_type przerwa)
- {
- if (*head == NULL)
- {
- *head = (Przerwa_type *)malloc(sizeof(Przerwa_type));
- (*head)->start = przerwa.start;
- (*head)->end = przerwa.end;
- (*head)->next = NULL;
- }
- else
- {
- Przerwa_type *tmp = *head;
- while (tmp->next != NULL)
- {
- tmp = tmp->next;
- }
- tmp->next = (Przerwa_type *)malloc(sizeof(Przerwa_type));
- tmp->next->start = przerwa.start;
- tmp->next->end = przerwa.end;
- tmp->next->next = NULL;
- }
- }
- void czytaniePliku(Workday_type **head)
- {
- Workday_type tmpWorkday_data;
- int i;
- int licznikLinii = 0;
- int licznikZnakow = 0;
- FILE *fp;
- char ch;
- char str[30][70];
- int break_s_h, break_s_m, break_e_h, break_e_m;
- char dzien[4];
- char Break[7];
- char znaki[10];
- if ((fp = fopen("week1.txt", "r")) == NULL)
- {
- printf("Nie moge otworzyc!\n");
- exit(1);
- }
- while ((ch = fgetc(fp)) != EOF)
- {
- if (ch == ':' || ch == '-')
- {
- ch = ' ';
- }
- if (ch == '\n')
- {
- ch = '\0';
- str[licznikLinii][licznikZnakow] = ch;
- licznikLinii++;
- licznikZnakow = 0;
- }
- else
- {
- str[licznikLinii][licznikZnakow] = ch;
- licznikZnakow++;
- }
- }
- for (i = 0; i <= licznikLinii; i++)
- {
- tmpWorkday_data.data = 0;
- Break[0] = '\0';
- break_s_h = 0;
- break_s_m = 0;
- break_e_h = 0;
- break_e_m = 0;
- 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);
- if (tmpWorkday_data.data != 0)
- {
- if (!stricmp(dzien, "Pon"))
- tmpWorkday_data.dzien = 1;
- else if (!stricmp(dzien, "Wto"))
- tmpWorkday_data.dzien = 2;
- else if (!stricmp(dzien, "sro"))
- tmpWorkday_data.dzien = 3;
- else if (!stricmp(dzien, "Czw"))
- tmpWorkday_data.dzien = 4;
- else if (!stricmp(dzien, "Pia"))
- tmpWorkday_data.dzien = 5;
- else if (!stricmp(dzien, "Sob"))
- tmpWorkday_data.dzien = 6;
- else if (!stricmp(dzien, "Nie"))
- tmpWorkday_data.dzien = 7;
- Przerwa_type *headPrzerwa = NULL;
- Przerwa_type tmpPrzerwa_data;
- tmpPrzerwa_data.start.hour = break_s_h;
- tmpPrzerwa_data.start.min = break_s_m;
- tmpPrzerwa_data.end.hour = break_e_h;
- tmpPrzerwa_data.end.min = break_e_m;
- tmpWorkday_data.pBreak = NULL;
- if ((break_e_m - break_s_m) != 0 || (break_e_h - break_s_h) != 0)
- {
- dodaj_przerwe(&headPrzerwa, tmpPrzerwa_data);
- tmpWorkday_data.pBreak = headPrzerwa;
- }
- dodaj_dzien(head, tmpWorkday_data);
- }
- }
- fclose(fp);
- }
- void pokazPodsumowanie(Workday_type *head)
- {
- int Laczna_min = 0;
- int Laczna_min_przerw = 0;
- while (head != NULL)
- {
- int liczba_min = head->koniec.min - head->pocz.min;
- liczba_min += ((head->koniec.hour - head->pocz.hour) * 60);
- int liczba_min_przerwy = 0;
- while (head->pBreak != NULL)
- {
- liczba_min_przerwy += ((head->pBreak->end.hour - head->pBreak->start.hour) * 60);
- liczba_min_przerwy += (head->pBreak->end.min - head->pBreak->start.min);
- head->pBreak = head->pBreak->next;
- }
- Laczna_min += liczba_min;
- Laczna_min_przerw += liczba_min_przerwy;
- 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));
- liczba_min_przerwy = 0;
- head = head->next;
- }
- 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));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement