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);
- int main() {
- 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];
- if ((fp = fopen("week1.txt", "r")) == NULL)
- {
- printf("Nie moge otworzyc!\n");
- exit(1);
- }
- while (getline(&str, &len, fp)!=-1)
- {}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement