///////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
// https://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
//
// Primer: Program za evidenciju radnog vremena zaposlenih. Dolazak i odlazak sa
// posla se predstavlja unosom sati, minuta i sekundi. Na osnovu unetih vremena
// tabelarno obraèunati provedeno dnevno vreme na poslu u satima, minutima i
// sekundama. Uzeti u obzir moguænost dvokratnog radnog vremena.
///////////////////////////////////////////////////////////////////////
#include <stdio.h>
#define MAX 20 // maksimalan broj slova za ime, odnosno za prezime svakog zaposlenog
#define BROJ 10 // maksimalan broj zaposlenih
typedef struct _vreme
{
char ime[MAX];
char prezime[MAX];
int sat[4];
int min[4];
int sec[4];
int sat1, min1, sec1; // ove tri promenljive sluze za smestanje ukupnog dnevnog radnog vremena za svakog pojedinca
} vreme;
// funkcija koja izracunava ukupno vreme provedeno izmedju dolaska na posao
// i odlaska sa posla izrazeno u sekundama
int racunaj(int a, int b, int c, int a1, int b1, int c1)
{
int time=0;
time += (a1*3600 + b1*60 + c1 – a*3600 – b*60 – c);
return time;
}
main()
{
vreme r_vreme[BROJ];
char answer;
int resenje, i=0, j;
while(i!=BROJ)
{
resenje = 0;
// unos imena i prezimena zaposlenog
printf("Unesite ime i prezime zaposlenog.!nl!Unos u formi: ime(ENTER)prezime(ENTER)!nl!");
scanf("%s", &r_vreme[i].ime);
scanf("%s", &r_vreme[i].prezime);
// unos vremena dolaska na posao
printf("Unesite tacno vreme dolaska zaposlenog na posao.!nl!Unos vremena u formatu: sati(ENTER)minuta(ENTER)sekundi(ENTER)!nl!");
scanf("%d%d%d", &r_vreme[i].sat[0], &r_vreme[i].min[0], &r_vreme[i].sec[0]);
// unos vremena odlaska sa posla
printf("Unesite tacno vreme odlaska zaposlenog sa posla.!nl!Unos vremena u formatu: sati(ENTER)minuta(ENTER)sekundi(ENTER)!nl!");
scanf("%d%d%d", &r_vreme[i].sat[1], &r_vreme[i].min[1], &r_vreme[i].sec[1]);
printf("Da li se zaposleni vracao na posao istog dana? (Y/N)!nl!");
scanf("%s", &answer);
// izracunavanje rezultata preko poziva funkcije racunaj()
resenje += racunaj(r_vreme[i].sat[0], r_vreme[i].min[0], r_vreme[i].sec[0], r_vreme[i].sat[1], r_vreme[i].min[1], r_vreme[i].sec[1]);
if(answer=='Y' || answer=='y')
{
// unos vremena ponovnog dolaska na posao
printf("Unesite tacno vreme ponovnog dolaska zaposlenog na posao.!nl!Unos vremena u formatu: sati(ENTER)minuta(ENTER)sekundi(ENTER)!nl!");
scanf("%d%d%d", &r_vreme[i].sat[2], &r_vreme[i].min[2], &r_vreme[i].sec[2]);
// unos vremena odlaska sa posla
printf("Unesite tacno vreme odlaska zaposlenog sa posla.!nl!Unos vremena u formatu: sati(ENTER)minuta(ENTER)sekundi(ENTER)!nl!");
scanf("%d%d%d", &r_vreme[i].sat[3], &r_vreme[i].min[3], &r_vreme[i].sec[3]);
// izracunavanje rezultata preko poziva funkcije racunaj()
resenje += racunaj(r_vreme[i].sat[2], r_vreme[i].min[2], r_vreme[i].sec[2], r_vreme[i].sat[3], r_vreme[i].min[3], r_vreme[i].sec[3]);
}
// izracunavanje ukupnog radnog vremena u satima, minutima i sekundama
r_vreme[i].sat1 = resenje/3600;
r_vreme[i].min1 = (resenje%3600)/60;
r_vreme[i].sec1 = (resenje%3600)%60;
// poruka korisniku
printf("Da li zelite da unesete podatke za sledeceg zaposlenog? (Y/N)!nl!");
scanf("%s", &answer);
if(answer=='N' || answer=='n')
break; // uslov za izlazak iz petlje
i++;
}
// stampanje rezultata
printf("!nl!!nl! ime prezime sati minuta sekundi!nl!!nl!");
for(j=0; j<i+1; j++)
{
if(j==BROJ)break;
printf("%15s %15s %7dh %7dm %7ds!nl!!nl!", r_vreme[j].ime, r_vreme[j].prezime, r_vreme[j].sat1, r_vreme[j].min1, r_vreme[j].sec1);
}
}