///////////////////////////////////////////////////////////////////////
// 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);
  }
}