Program menghitung Gaji Pegawai Berdasarkan Durasi Kerja

Maret 14, 2013

Langsung saja, ini saya share source code bahasa C buat program menghitung gaji pegawai berdasarkan lamanya waktu pegawai bekerja (Jam Pulang-Jam Datang).
Program ini dibuat dalam satu project yaa :) 
So, compile directly on your compiler guyss! <If you need it>  ^_^

 Untuk drivernya <main.c>
#include <stdio.h>
#include <stdlib.h>
#include "upah.h"
#include "boolean.h"

int main()
{
  /*Kamus*/
  int N,i;
 
 
  printf("Masukan jumlah pegawai: ");
  scanf("%d",&N);
  int NIP[N];
  Jam Datang[N];
  Jam Pulang[N];
  Jam SelisihJam[N];
  int Upah[N];
  int TotalUpah;
 
  for(i=0;i<N;i++)
  {
   printf("\n\nMasukan NIP Pegawai ke [%d]: ",i);
   scanf("%d",&NIP[i]);
   do{
      printf("\n\tMasukan jam Datang [%d] <HH:MM:SS>: ",i);
      bacaJam(&Datang[i]);
      printf("\tMasukan jam pulang [%d] <HH:MM:SS>: ",i);
      bacaJam(&Pulang[i]);
      }while(JLT(Datang[i],Pulang[i])==0);
  
    SelisihJam[i]=JMinus(Pulang[i],Datang[i]);
    Upah[i]=getHour(SelisihJam[i])*5000;
    TotalUpah= TotalUpah+ Upah[i];
  }
 
  for(i=0;i<N;i++)
  {
     printf("\n\nNIP pegawai [%d] ", NIP[i]);
     printf("\nJam Datang: "); tulisJam(Datang[i]);
     printf("\nJam Pulang: "); tulisJam(Pulang[i]);
     printf("\nUpah Pegawai= %d", Upah[i]);
  }
  printf("\n\nTotal Gaji= %d", TotalUpah);
  getch();   
  return 0;
}

Untuk  Upah.c:
#ifndef _Jam_H
#define _Jam_H
#include <stdio.h>
#include "boolean.h"

typedef struct{
    int HH;
    int MM;
    int SS;
}Jam;

Jam JPlus(Jam J1, Jam J2);

Jam JMinus(Jam J1, Jam J2);


boolean isJValid(int H, int M, int S){
    return ((H<24)&&(M<60)&&(S<60)&&(H>=0)&&(M>=0)&&(S>=0)); }


Jam makeJam(int HH, int MM, int SS){
    Jam JTemp;
    if (isJValid){
        JTemp.HH=HH;
        JTemp.MM=MM;
        JTemp.SS=SS;
        return JTemp; } }

int getHour(Jam J){
    return J.HH; }
int getMinute(Jam J){
    return J.MM; }
int getSecond(Jam J){
    return J.SS; }
void setHour(Jam *J, int HH){
    if (HH<24){
        (*J).HH=HH; } }
void setMinute(Jam *J, int MM){
    if (MM<60){
        (*J).MM=MM; } }
void setSecond(Jam *J, int SS){
    if (SS<60){
        (*J).SS=SS; } }

void bacaJam(Jam *J){
    scanf("%d:%d:%d",&(*J).HH,&(*J).MM,&(*J).SS);
    }
void tulisJam(Jam J){
    printf("%d:%d:%d",J.HH,J.MM,J.SS); }
long jamToDetik(Jam J){
    return (((J.HH)*3600)+(J.SS)+((J.MM)*60)); }
Jam detikToJam(long Detik){
    Jam JTemp;
    if (Detik<60){
        return makeJam(0,0,Detik); }
    else if (Detik<3600){
        return makeJam(0,(Detik/60),(Detik%60)); }
    else{
        return makeJam(Detik/3600,(Detik%3600)/60,(Detik%3600)%60); } }
       
Jam nextDetik(Jam J){
    if (J.SS==59){
        if (J.MM==59){
            if (J.HH==23){
                J=makeJam(0,0,0); }
            else{
                J=makeJam((J.HH+1),0,0); } }
        else{
            J=makeJam((J.HH),(J.MM+1),(0)); } }
    else{
        J.SS=J.SS+1; }
    return J; }
   
Jam nextNDetik(Jam J, int N){
    return JPlus(J,(detikToJam(N))); }
   
Jam prevDetik(Jam J){
    if (J.SS==0){
        if (J.MM==0){
            J=makeJam((J.HH-1),59,59); }
        else{
        J=makeJam(J.HH,(J.MM-1),59); } }
    else{
        J.SS=J.SS-1;}
    return J;}
   
Jam prevNDetik(Jam J, int N){
    return JMinus(J,(detikToJam(N))); }
   
   boolean JEQ(Jam J1, Jam J2){
    return ((J1.HH==J2.HH)&&(J1.MM==J2.MM)&&(J1.SS==J2.SS)); }
   

boolean JNEQ(Jam J1, Jam J2){
    return !JEQ(J1,J2); }

boolean JLT(Jam J1, Jam J2){
    if (J1.HH<J2.HH){
        return true; }
    else if (J1.MM<J2.MM){
        return true; }
    else if (J1.SS<J2.SS){
        return true; }
    else {
        return false; } }

boolean JGT(Jam J1, Jam J2){
    if (JNEQ(J1,J2)){
        return !JLT(J1,J2); } }

long durasi(Jam Jaw, Jam Jakh){
    return ((jamToDetik(Jakh))-(jamToDetik(Jaw))); }

Jam JPlus(Jam J1, Jam J2){
    return (detikToJam((jamToDetik(J1))+(jamToDetik(J2)))); }

Jam JMinus(Jam J1, Jam J2){
    return detikToJam((jamToDetik(J1))-(jamToDetik(J2))); }
#endif

Untuk Upah.h:
/*File: Jam.h*/
/*Prototype ADT Jam*/
#ifndef _Jam_H
#define _Jam_H

#include "boolean.h"

typedef struct{
    int HH; /*Jam*/
    int MM; /*Menit*/
    int SS; /*Detik*/
}Jam;

boolean isJValid(int H, int M, int S);
Jam makeJam(int HH, int MM, int SS);
int getHour(Jam J);
int getMinute(Jam J);
int getSecond(Jam J);
void setHour(Jam *J, int HH);
void setMinute(Jam *J, int MM);
void setSecond(Jam *J, int SS);
void bacaJam(Jam *J);
void tulisJam(Jam J);
long jamToDetik(Jam J);
Jam detikToJam(long Detik);
Jam nextDetik(Jam J);
Jam nextNDetik(Jam J, int N);
Jam prevDetik(Jam J);
Jam prevNDetik(Jam J, int N);
boolean JEQ(Jam J1, Jam J2);
boolean JNEQ(Jam J1, Jam J2);
boolean JLT(Jam J1, Jam J2);
boolean JGT(Jam J1, Jam J2);
long durasi(Jam Jaw, Jam Jakh);
Jam JPlus(Jam J1, Jam J2);
Jam JMinus(Jam J1, Jam J2);
#endif











Untuk boolean.h:
#ifndef _Boolean_H
#define _Boolean_H
#define true 1
#define false 0
#define boolean unsigned char
#endif
 

You Might Also Like

0 komentar