#include <stdio.h>
// constants
#define SIZE 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
// employee structure type
struct employee
{
long int clockNumber;
float wageRate;
float hours;
float overtimeHrs;
float grossPay;
} ;
// functions
float getHours( long int clockNumber) ;
float calcOT( float hours) ;
float calcGross( float wageRate, float hours, float overtimeHrs) ;
void printHeader( void ) ;
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) ;
int main( void )
{
// employee information
struct employee employeeData[ SIZE] = {
{ 98401 , 10.60 , 0.0 , 0.0 , 0.0 } ,
{ 526488 , 9.75 , 0.0 , 0.0 , 0.0 } ,
{ 765349 , 10.50 , 0.0 , 0.0 , 0.0 } ,
{ 34645 , 12.25 , 0.0 , 0.0 , 0.0 } ,
{ 127615 , 8.35 , 0.0 , 0.0 , 0.0 }
} ;
int i;
// hours worked, calculate overtime, and calculate gross pay for each employee
for ( i = 0 ; i < SIZE; ++ i)
{
employeeData[ i] .hours = getHours( employeeData[ i] .clockNumber ) ;
employeeData[ i] .overtimeHrs = calcOT( employeeData[ i] .hours ) ;
employeeData[ i] .grossPay = calcGross( employeeData[ i] .wageRate , employeeData[ i] .hours , employeeData[ i] .overtimeHrs ) ;
}
// header
printHeader( ) ;
// each employee's data formated
for ( i = 0 ; i < SIZE; ++ i)
{
printEmp( employeeData[ i] .clockNumber ,
employeeData[ i] .wageRate ,
employeeData[ i] .hours ,
employeeData[ i] .overtimeHrs ,
employeeData[ i] .grossPay ) ;
}
return 0 ;
}
// function: getHours
float getHours( long int clockNumber)
{
float hoursWorked;
printf ( "Enter number of hours worked for employee %06li: " , clockNumber
) ; scanf ( "%f" , & hoursWorked
) ;
return hoursWorked;
}
// function: calcOT
float calcOT( float hours)
{
float overtime;
if ( hours > STD_HOURS)
{
overtime = hours - STD_HOURS;
}
else
{
overtime = 0.0 ;
}
return overtime;
}
// function: calcGross
float calcGross( float wageRate, float hours, float overtimeHrs)
{
float normalPay;
float overtimePay;
float totalGross;
if ( hours > STD_HOURS)
{
normalPay = STD_HOURS * wageRate;
overtimePay = overtimeHrs * wageRate * OT_RATE;
}
else
{
normalPay = hours * wageRate;
overtimePay = 0.0 ;
}
totalGross = normalPay + overtimePay;
return totalGross;
}
// function: printHeader
void printHeader( void )
{
printf ( "Clock# Wage Hours OT Gross\n " ) ; printf ( "------------------------------------\n " ) ; }
// function: printEmp data
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay)
{
printf ( "%06ld %6.2f %5.1f %5.1f %8.2f\n " , clockNumber, wageRate, hours, overtimeHrs, grossPay) ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBjb25zdGFudHMKI2RlZmluZSBTSVpFIDUKI2RlZmluZSBTVERfSE9VUlMgNDAuMAojZGVmaW5lIE9UX1JBVEUgMS41CgovLyBlbXBsb3llZSBzdHJ1Y3R1cmUgdHlwZQpzdHJ1Y3QgZW1wbG95ZWUKewogICAgbG9uZyBpbnQgY2xvY2tOdW1iZXI7CiAgICBmbG9hdCB3YWdlUmF0ZTsKICAgIGZsb2F0IGhvdXJzOwogICAgZmxvYXQgb3ZlcnRpbWVIcnM7CiAgICBmbG9hdCBncm9zc1BheTsKfTsKCi8vIGZ1bmN0aW9ucwpmbG9hdCBnZXRIb3Vycyhsb25nIGludCBjbG9ja051bWJlcik7CmZsb2F0IGNhbGNPVChmbG9hdCBob3Vycyk7CmZsb2F0IGNhbGNHcm9zcyhmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzKTsKdm9pZCBwcmludEhlYWRlcih2b2lkKTsKdm9pZCBwcmludEVtcChsb25nIGludCBjbG9ja051bWJlciwgZmxvYXQgd2FnZVJhdGUsIGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycywgZmxvYXQgZ3Jvc3NQYXkpOwoKaW50IG1haW4odm9pZCkKewogICAgLy8gZW1wbG95ZWUgaW5mb3JtYXRpb24KICAgIHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbU0laRV0gPSB7CiAgICAgICAgeyA5ODQwMSwgMTAuNjAsIDAuMCwgMC4wLCAwLjAgfSwKICAgICAgICB7IDUyNjQ4OCwgOS43NSwgIDAuMCwgMC4wLCAwLjAgfSwKICAgICAgICB7IDc2NTM0OSwgMTAuNTAsIDAuMCwgMC4wLCAwLjAgfSwKICAgICAgICB7IDM0NjQ1LCAgMTIuMjUsIDAuMCwgMC4wLCAwLjAgfSwKICAgICAgICB7IDEyNzYxNSwgOC4zNSwgIDAuMCwgMC4wLCAwLjAgfQogICAgfTsKCiAgICBpbnQgaTsgCgogICAgLy8gaG91cnMgd29ya2VkLCBjYWxjdWxhdGUgb3ZlcnRpbWUsIGFuZCBjYWxjdWxhdGUgZ3Jvc3MgcGF5IGZvciBlYWNoIGVtcGxveWVlCiAgICBmb3IgKGkgPSAwOyBpIDwgU0laRTsgKytpKQogICAgewogICAgICAgIGVtcGxveWVlRGF0YVtpXS5ob3VycyA9IGdldEhvdXJzKGVtcGxveWVlRGF0YVtpXS5jbG9ja051bWJlcik7CiAgICAgICAgZW1wbG95ZWVEYXRhW2ldLm92ZXJ0aW1lSHJzID0gY2FsY09UKGVtcGxveWVlRGF0YVtpXS5ob3Vycyk7CiAgICAgICAgZW1wbG95ZWVEYXRhW2ldLmdyb3NzUGF5ID0gY2FsY0dyb3NzKGVtcGxveWVlRGF0YVtpXS53YWdlUmF0ZSwgZW1wbG95ZWVEYXRhW2ldLmhvdXJzLCBlbXBsb3llZURhdGFbaV0ub3ZlcnRpbWVIcnMpOwogICAgfQoKICAgIC8vIGhlYWRlcgogICAgcHJpbnRIZWFkZXIoKTsKCiAgICAvLyBlYWNoIGVtcGxveWVlJ3MgZGF0YSBmb3JtYXRlZAogICAgZm9yIChpID0gMDsgaSA8IFNJWkU7ICsraSkKICAgIHsKICAgICAgICBwcmludEVtcChlbXBsb3llZURhdGFbaV0uY2xvY2tOdW1iZXIsCiAgICAgICAgICAgICAgICAgZW1wbG95ZWVEYXRhW2ldLndhZ2VSYXRlLAogICAgICAgICAgICAgICAgIGVtcGxveWVlRGF0YVtpXS5ob3VycywKICAgICAgICAgICAgICAgICBlbXBsb3llZURhdGFbaV0ub3ZlcnRpbWVIcnMsCiAgICAgICAgICAgICAgICAgZW1wbG95ZWVEYXRhW2ldLmdyb3NzUGF5KTsKICAgIH0KCiAgICByZXR1cm4gMDsgCn0KCi8vIGZ1bmN0aW9uOiBnZXRIb3VycwpmbG9hdCBnZXRIb3Vycyhsb25nIGludCBjbG9ja051bWJlcikKewogICAgZmxvYXQgaG91cnNXb3JrZWQ7IAoKICAgIHByaW50ZigiRW50ZXIgbnVtYmVyIG9mIGhvdXJzIHdvcmtlZCBmb3IgZW1wbG95ZWUgJTA2bGk6ICIsIGNsb2NrTnVtYmVyKTsKICAgIHNjYW5mKCIlZiIsICZob3Vyc1dvcmtlZCk7CgogICAgcmV0dXJuIGhvdXJzV29ya2VkOwp9IAoKLy8gZnVuY3Rpb246IGNhbGNPVApmbG9hdCBjYWxjT1QoZmxvYXQgaG91cnMpCnsKICAgIGZsb2F0IG92ZXJ0aW1lOyAKCiAgICBpZiAoaG91cnMgPiBTVERfSE9VUlMpCiAgICB7CiAgICAgICAgb3ZlcnRpbWUgPSBob3VycyAtIFNURF9IT1VSUzsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBvdmVydGltZSA9IDAuMDsKICAgIH0KCiAgICByZXR1cm4gb3ZlcnRpbWU7Cn0gCgovLyBmdW5jdGlvbjogY2FsY0dyb3NzCmZsb2F0IGNhbGNHcm9zcyhmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzKQp7CiAgICBmbG9hdCBub3JtYWxQYXk7ICAgCiAgICBmbG9hdCBvdmVydGltZVBheTsgCiAgICBmbG9hdCB0b3RhbEdyb3NzOyAgCgogICAgaWYgKGhvdXJzID4gU1REX0hPVVJTKQogICAgewogICAgICAgIG5vcm1hbFBheSA9IFNURF9IT1VSUyAqIHdhZ2VSYXRlOwogICAgICAgIG92ZXJ0aW1lUGF5ID0gb3ZlcnRpbWVIcnMgKiB3YWdlUmF0ZSAqIE9UX1JBVEU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbm9ybWFsUGF5ID0gaG91cnMgKiB3YWdlUmF0ZTsKICAgICAgICBvdmVydGltZVBheSA9IDAuMDsKICAgIH0KCiAgICB0b3RhbEdyb3NzID0gbm9ybWFsUGF5ICsgb3ZlcnRpbWVQYXk7CgogICAgcmV0dXJuIHRvdGFsR3Jvc3M7Cn0gCgovLyBmdW5jdGlvbjogcHJpbnRIZWFkZXIKdm9pZCBwcmludEhlYWRlcih2b2lkKQp7CiAgICBwcmludGYoIlxuIik7CiAgICBwcmludGYoIkNsb2NrIyAgIFdhZ2UgICBIb3VycyAgICBPVCAgICBHcm9zc1xuIik7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Cn0gCgovLyBmdW5jdGlvbjogcHJpbnRFbXAgZGF0YQp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSkKewogICAgcHJpbnRmKCIlMDZsZCAlNi4yZiAlNS4xZiAlNS4xZiAlOC4yZlxuIiwKICAgICAgICAgICBjbG9ja051bWJlciwgd2FnZVJhdGUsIGhvdXJzLCBvdmVydGltZUhycywgZ3Jvc3NQYXkpOwp9IAogICA=