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
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