Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <float.h>
- #include <math.h>
- #include <string.h>
- typedef enum weekday
- {
- PON,
- WTO,
- SRO,
- CZW,
- PIA,
- SOB,
- NIE
- } Weekday;
- typedef struct czas_t
- {
- int godzina;
- int minuta;
- } Czas;
- typedef struct przerwa_t
- {
- Czas start;
- Czas koniec;
- struct przerwa_t* next;
- } Przerwa;
- typedef struct workday_t
- {
- int data;
- Weekday dzien;
- Czas pocz;
- Czas koniec;
- Przerwa* przerwa;
- struct workday_t* next;
- } Workday;
- Workday* stworzyListeWorkday();
- Workday* dodajWorkday(int i);
- float licz(Workday* poczatek_listy);
- float liczwybr(Workday* poczatek_listy);
- int drukuj(Workday* poczatek_listy);
- void czytDay(Workday* poczatek_listy);
- int main()
- {
- czytDay(NULL);
- /*int x;
- printf("Program obliczajacy ilosc godzin przepracowanych przez pracownika\n\n\n");
- Workday* wskWorkday = dodajWorkday(3);
- Workday* lista = stworzyListeWorkday();
- printf("\nWitam w Menu programu wybierz\n 1: dla wyswietlenia wszystkich przepracowanych godzin");
- printf("\n 2: Ilosc godzin w danym zakresie dni\n 3: wyswietl wszystkie przepracowane dni\n");
- scanf("%d", &x);
- switch (x)
- {
- case 1: printf("Ilosc wszystkich godzin przepracowanych przez pracownika: %.2f\n\n", licz(lista));
- break;
- case 2: printf("ilosc godzin przepracowanych w zakresie:: %.2f\n\n", liczwybr(lista));
- break;
- case 3: drukuj(lista);
- printf("\n");
- break;
- }
- while (wskWorkday != NULL)
- {
- //petla s�uz�ca do zwalniania pami�ci:
- while (wskWorkday->przerwa != NULL)
- {
- Przerwa* tmp = wskWorkday->przerwa;
- wskWorkday->przerwa = wskWorkday->przerwa->next;
- free(tmp);
- }
- Workday* tmp = wskWorkday;
- wskWorkday = wskWorkday->next;
- free(tmp);
- return 0;
- }*/
- }
- Workday* dodajWorkday(int i)
- {
- //funckja s�uzy do stworzenia i zalokowania dnia pracy
- Workday* wskWorkday = (Workday *)malloc(sizeof(Workday));
- wskWorkday->data = i;
- wskWorkday->pocz.godzina = 8;
- wskWorkday->pocz.minuta = 00;
- wskWorkday->koniec.godzina = 16;
- wskWorkday->koniec.minuta = 0;
- wskWorkday->dzien = i % 7;
- wskWorkday->przerwa = (Przerwa *)malloc(sizeof(Przerwa));
- wskWorkday->przerwa->start.godzina = 12;
- wskWorkday->przerwa->start.minuta = 10;
- wskWorkday->przerwa->koniec.godzina = 12;
- wskWorkday->przerwa->koniec.minuta = 35;
- wskWorkday->next = NULL;
- wskWorkday->przerwa->next = NULL;
- return wskWorkday;
- }
- Workday* stworzyListeWorkday()
- {
- //funkcja tworz�ca liste
- Workday* workday = dodajWorkday(1);
- Workday* poczatek_listy = workday;
- for (int i = 2; i < 20; ++i)
- {
- workday->next = dodajWorkday(i);
- workday = workday->next;
- }
- return poczatek_listy;
- }
- float licz(Workday* poczatek_listy)
- {
- //funkcja liczaczaca caly dzien pracy
- float ilosc = 0.0f;
- Workday* tmp = poczatek_listy;
- while (tmp != NULL)
- {
- ilosc += tmp->koniec.godzina - tmp->pocz.godzina;
- ilosc += ((tmp->koniec.minuta - tmp->pocz.minuta) / 60.0f);
- Przerwa* tmp_przerwa = tmp->przerwa;
- while (tmp_przerwa != NULL)
- {
- ilosc -= tmp_przerwa->koniec.godzina - tmp_przerwa->start.godzina;
- ilosc -= ((tmp_przerwa->koniec.minuta - tmp_przerwa->start.minuta) / 60.0f);
- tmp_przerwa = tmp_przerwa->next;
- }
- tmp = tmp->next;
- }
- return ilosc;
- }
- int drukuj(Workday* poczatek_listy)
- {
- //funckja wyswietlajaca dzien pracy
- Workday* tmp = poczatek_listy; //1 wiersz-1 dzien kazdy element po znaku tabulacji
- while (tmp != NULL)
- {
- if (tmp->data < 10)
- {
- printf("data: %d\t", tmp->data);
- }
- else
- {
- printf("data: %d\t", tmp->data);
- }
- printf("poczatek pracy: %02d:%02d \t", tmp->pocz.godzina, tmp->pocz.minuta);
- printf("koniec pracy: %02d:%02d \t", tmp->koniec.godzina, tmp->koniec.minuta);
- printf("poczatek przerwy %02d:%02d\t", tmp->przerwa->start.godzina, tmp->przerwa->start.minuta);
- printf("koniec przerwy %02d:%02d\n", tmp->przerwa->koniec.godzina, tmp->przerwa->koniec.minuta);
- tmp = tmp->next;
- }
- return 0;
- }
- float liczwybr(Workday* poczatek_listy)
- {
- //funkcja liczaca ilosc godzin przepracowanych przez pracownika
- int i, x; //w zakresie od jednej daty do drugiej
- printf("podaj pierwsza date:");
- scanf("%d", &i);
- printf("podaj drug� date:"); //pobieran dane od uzytkownika i, x jako data pracay
- scanf("%d", &x);
- float ilosc = 0.0f;
- Workday* tmp = poczatek_listy;
- while (tmp != NULL)
- {
- if (tmp->data >= i && tmp->data <= x)
- {
- ilosc += tmp->koniec.godzina - tmp->pocz.godzina;
- ilosc += ((tmp->koniec.minuta - tmp->pocz.minuta) / 60.0f);
- }
- Przerwa* tmp_przerwa = tmp->przerwa;
- while (tmp_przerwa != NULL)
- {
- if (tmp->data >= i && tmp->data <= x)
- {
- ilosc -= tmp_przerwa->koniec.godzina - tmp_przerwa->start.godzina;
- ilosc -= ((tmp_przerwa->koniec.minuta - tmp_przerwa->start.minuta) / 60.0f);
- }
- tmp_przerwa = tmp_przerwa->next;
- }
- tmp = tmp->next;
- }
- return ilosc;
- }
- void czytDay(Workday* poczatek_listy)
- {
- FILE* fp;
- char* str = NULL;
- size_t len = 70;
- int i = 0;
- int data, s_h, e_h, s_m, e_m, break_s_h, break_s_m, break_e_h, break_e_m;
- char dzien[4];
- char Break[7];
- char znaki[10];
- char line[1000];
- if ((fp = fopen("C:\\Users\\adam_\\source\\repos\\tygodnie\\Debug\\week2.txt", "r")) == NULL)
- {
- printf("Nie moge otworzyc!\n");
- exit(1);
- }
- // "%s %s %s %d", str1, str2, str3, &year
- //fscanf(fp, "%[^\n]", line);
- char day[10];
- char day_name[10];
- char start[10];
- char start_time[10];
- char end[10];
- char end_time[10];
- char break_command[10];
- char break_time[10];
- fscanf(fp, "%s %s %s %s %s %s %s %s\n",day, day_name, start, start_time, end, end_time, break_command, break_time);
- printf("End");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement