#include <stdio.h> // Standard input-output header
// Define Constants
#define SIZE 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
// Define a structure to hold employee data
struct employee {
long int clockNumber;
float wageRate;
float hours;
float overtimeHrs;
float grossPay;
} ;
// Function Prototypes
float getHours( long int clockNumber) ;
void printHeader( void ) ;
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) ;
void calculateOvertime( struct employee * emp) ;
void calculateGrossPay( struct employee * emp) ;
int main( ) {
// Initialize employee data with clock number and wage rate
struct employee employeeData[ SIZE] = {
{ 98401 , 10.60 , 0 , 0 , 0 } ,
{ 526488 , 9.75 , 0 , 0 , 0 } ,
{ 765349 , 10.50 , 0 , 0 , 0 } ,
{ 34645 , 12.25 , 0 , 0 , 0 } ,
{ 127615 , 8.35 , 0 , 0 , 0 }
} ;
int i; // Loop index
// Loop through employees to get hours, calculate overtime & gross pay
for ( i = 0 ; i < SIZE; ++ i) {
employeeData[ i] .hours = getHours( employeeData[ i] .clockNumber ) ;
calculateOvertime( & employeeData[ i] ) ;
calculateGrossPay( & employeeData[ i] ) ;
}
// Print the column headers
printHeader( ) ;
// Print employee details
for ( i = 0 ; i < SIZE; ++ i) {
printEmp( employeeData[ i] .clockNumber , employeeData[ i] .wageRate , employeeData[ i] .hours , employeeData[ i] .overtimeHrs , employeeData[ i] .grossPay ) ;
}
return 0 ; // Program executed successfully
}
//**************************************************************
// Function: getHours
// Purpose: Gets user input for hours worked per employee
// Parameters: clockNumber - Unique employee ID
// Returns: hoursWorked - Hours worked in a given week
//**************************************************************
float getHours( long int clockNumber) {
float hoursWorked;
printf ( "Enter hours worked by emp #%06li: " , clockNumber
) ; scanf ( "%f" , & hoursWorked
) ; return hoursWorked;
}
//**************************************************************
// Function: calculateOvertime
// Purpose: Calculates overtime hours worked
// Parameters: emp - Pointer to an employee structure
// Returns: void (modifies structure directly)
//**************************************************************
void calculateOvertime( struct employee * emp) {
if ( emp-> hours > STD_HOURS) {
emp-> overtimeHrs = emp-> hours - STD_HOURS;
} else {
emp-> overtimeHrs = 0.0 ;
}
}
//**************************************************************
// Function: calculateGrossPay
// Purpose: Calculates gross pay for an employee
// Parameters: emp - Pointer to an employee structure
// Returns: void (modifies structure directly)
//**************************************************************
void calculateGrossPay( struct employee * emp) {
float regularPay, overtimePay;
if ( emp-> hours > STD_HOURS) {
regularPay = STD_HOURS * emp-> wageRate;
overtimePay = emp-> overtimeHrs * emp-> wageRate * OT_RATE;
} else {
regularPay = emp-> hours * emp-> wageRate;
overtimePay = 0.0 ;
}
emp-> grossPay = regularPay + overtimePay;
}
//**************************************************************
// Function: printHeader
// Purpose: Prints the table header
// Parameters: none
// Returns: void
//**************************************************************
void printHeader( void ) {
printf ( "\n *** Pay Calculator ***\n \n " ) ; printf ( "Clock# Wage Hours OT Gross\n " ) ; printf ( "----------------------------------\n " ) ; }
//**************************************************************
// Function: printEmp
// Purpose: Prints employee details in a tabular format
// Parameters:
// - clockNumber: Unique employee ID
// - wageRate: Hourly wage rate
// - hours: Hours worked in the week
// - overtimeHrs: Overtime hours worked
// - grossPay: Gross pay for the week
// Returns: void
//**************************************************************
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) {
printf ( "%06li %5.2f %5.1f %4.1f %8.2f\n " , clockNumber
, wageRate
, hours
, overtimeHrs
, grossPay
) ; }
I2luY2x1ZGUgPHN0ZGlvLmg+ICAvLyBTdGFuZGFyZCBpbnB1dC1vdXRwdXQgaGVhZGVyCgovLyBEZWZpbmUgQ29uc3RhbnRzCiNkZWZpbmUgU0laRSA1CiNkZWZpbmUgU1REX0hPVVJTIDQwLjAKI2RlZmluZSBPVF9SQVRFIDEuNQoKLy8gRGVmaW5lIGEgc3RydWN0dXJlIHRvIGhvbGQgZW1wbG95ZWUgZGF0YQpzdHJ1Y3QgZW1wbG95ZWUgewogICAgbG9uZyBpbnQgY2xvY2tOdW1iZXI7CiAgICBmbG9hdCB3YWdlUmF0ZTsKICAgIGZsb2F0IGhvdXJzOwogICAgZmxvYXQgb3ZlcnRpbWVIcnM7CiAgICBmbG9hdCBncm9zc1BheTsKfTsKCi8vIEZ1bmN0aW9uIFByb3RvdHlwZXMKZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpOwp2b2lkIHByaW50SGVhZGVyKHZvaWQpOwp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSk7CnZvaWQgY2FsY3VsYXRlT3ZlcnRpbWUoc3RydWN0IGVtcGxveWVlICplbXApOwp2b2lkIGNhbGN1bGF0ZUdyb3NzUGF5KHN0cnVjdCBlbXBsb3llZSAqZW1wKTsKCmludCBtYWluKCkgewogICAgLy8gSW5pdGlhbGl6ZSBlbXBsb3llZSBkYXRhIHdpdGggY2xvY2sgbnVtYmVyIGFuZCB3YWdlIHJhdGUKICAgIHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbU0laRV0gPSB7CiAgICAgICAgezk4NDAxLCAxMC42MCwgMCwgMCwgMH0sCiAgICAgICAgezUyNjQ4OCwgOS43NSwgMCwgMCwgMH0sCiAgICAgICAgezc2NTM0OSwgMTAuNTAsIDAsIDAsIDB9LAogICAgICAgIHszNDY0NSwgMTIuMjUsIDAsIDAsIDB9LAogICAgICAgIHsxMjc2MTUsIDguMzUsIDAsIDAsIDB9CiAgICB9OwoKICAgIGludCBpOyAvLyBMb29wIGluZGV4CgogICAgLy8gTG9vcCB0aHJvdWdoIGVtcGxveWVlcyB0byBnZXQgaG91cnMsIGNhbGN1bGF0ZSBvdmVydGltZSAmIGdyb3NzIHBheQogICAgZm9yIChpID0gMDsgaSA8IFNJWkU7ICsraSkgewogICAgICAgIGVtcGxveWVlRGF0YVtpXS5ob3VycyA9IGdldEhvdXJzKGVtcGxveWVlRGF0YVtpXS5jbG9ja051bWJlcik7CiAgICAgICAgY2FsY3VsYXRlT3ZlcnRpbWUoJmVtcGxveWVlRGF0YVtpXSk7CiAgICAgICAgY2FsY3VsYXRlR3Jvc3NQYXkoJmVtcGxveWVlRGF0YVtpXSk7CiAgICB9CgogICAgLy8gUHJpbnQgdGhlIGNvbHVtbiBoZWFkZXJzCiAgICBwcmludEhlYWRlcigpOwoKICAgIC8vIFByaW50IGVtcGxveWVlIGRldGFpbHMKICAgIGZvciAoaSA9IDA7IGkgPCBTSVpFOyArK2kpIHsKICAgICAgICBwcmludEVtcChlbXBsb3llZURhdGFbaV0uY2xvY2tOdW1iZXIsIGVtcGxveWVlRGF0YVtpXS53YWdlUmF0ZSwgZW1wbG95ZWVEYXRhW2ldLmhvdXJzLCBlbXBsb3llZURhdGFbaV0ub3ZlcnRpbWVIcnMsIGVtcGxveWVlRGF0YVtpXS5ncm9zc1BheSk7CiAgICB9CgogICAgcmV0dXJuIDA7IC8vIFByb2dyYW0gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Cn0KCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gRnVuY3Rpb246IGdldEhvdXJzCi8vIFB1cnBvc2U6IEdldHMgdXNlciBpbnB1dCBmb3IgaG91cnMgd29ya2VkIHBlciBlbXBsb3llZQovLyBQYXJhbWV0ZXJzOiBjbG9ja051bWJlciAtIFVuaXF1ZSBlbXBsb3llZSBJRAovLyBSZXR1cm5zOiBob3Vyc1dvcmtlZCAtIEhvdXJzIHdvcmtlZCBpbiBhIGdpdmVuIHdlZWsKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmbG9hdCBnZXRIb3Vycyhsb25nIGludCBjbG9ja051bWJlcikgewogICAgZmxvYXQgaG91cnNXb3JrZWQ7CiAgICBwcmludGYoIkVudGVyIGhvdXJzIHdvcmtlZCBieSBlbXAgIyUwNmxpOiAiLCBjbG9ja051bWJlcik7CiAgICBzY2FuZigiJWYiLCAmaG91cnNXb3JrZWQpOwogICAgcmV0dXJuIGhvdXJzV29ya2VkOwp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIEZ1bmN0aW9uOiBjYWxjdWxhdGVPdmVydGltZQovLyBQdXJwb3NlOiBDYWxjdWxhdGVzIG92ZXJ0aW1lIGhvdXJzIHdvcmtlZAovLyBQYXJhbWV0ZXJzOiBlbXAgLSBQb2ludGVyIHRvIGFuIGVtcGxveWVlIHN0cnVjdHVyZQovLyBSZXR1cm5zOiB2b2lkIChtb2RpZmllcyBzdHJ1Y3R1cmUgZGlyZWN0bHkpCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKdm9pZCBjYWxjdWxhdGVPdmVydGltZShzdHJ1Y3QgZW1wbG95ZWUgKmVtcCkgewogICAgaWYgKGVtcC0+aG91cnMgPiBTVERfSE9VUlMpIHsKICAgICAgICBlbXAtPm92ZXJ0aW1lSHJzID0gZW1wLT5ob3VycyAtIFNURF9IT1VSUzsKICAgIH0gZWxzZSB7CiAgICAgICAgZW1wLT5vdmVydGltZUhycyA9IDAuMDsKICAgIH0KfQoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBGdW5jdGlvbjogY2FsY3VsYXRlR3Jvc3NQYXkKLy8gUHVycG9zZTogQ2FsY3VsYXRlcyBncm9zcyBwYXkgZm9yIGFuIGVtcGxveWVlCi8vIFBhcmFtZXRlcnM6IGVtcCAtIFBvaW50ZXIgdG8gYW4gZW1wbG95ZWUgc3RydWN0dXJlCi8vIFJldHVybnM6IHZvaWQgKG1vZGlmaWVzIHN0cnVjdHVyZSBkaXJlY3RseSkKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgp2b2lkIGNhbGN1bGF0ZUdyb3NzUGF5KHN0cnVjdCBlbXBsb3llZSAqZW1wKSB7CiAgICBmbG9hdCByZWd1bGFyUGF5LCBvdmVydGltZVBheTsKCiAgICBpZiAoZW1wLT5ob3VycyA+IFNURF9IT1VSUykgewogICAgICAgIHJlZ3VsYXJQYXkgPSBTVERfSE9VUlMgKiBlbXAtPndhZ2VSYXRlOwogICAgICAgIG92ZXJ0aW1lUGF5ID0gZW1wLT5vdmVydGltZUhycyAqIGVtcC0+d2FnZVJhdGUgKiBPVF9SQVRFOwogICAgfSBlbHNlIHsKICAgICAgICByZWd1bGFyUGF5ID0gZW1wLT5ob3VycyAqIGVtcC0+d2FnZVJhdGU7CiAgICAgICAgb3ZlcnRpbWVQYXkgPSAwLjA7CiAgICB9CgogICAgZW1wLT5ncm9zc1BheSA9IHJlZ3VsYXJQYXkgKyBvdmVydGltZVBheTsKfQoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBGdW5jdGlvbjogcHJpbnRIZWFkZXIKLy8gUHVycG9zZTogUHJpbnRzIHRoZSB0YWJsZSBoZWFkZXIKLy8gUGFyYW1ldGVyczogbm9uZQovLyBSZXR1cm5zOiB2b2lkCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKdm9pZCBwcmludEhlYWRlcih2b2lkKSB7CiAgICBwcmludGYoIlxuKioqIFBheSBDYWxjdWxhdG9yICoqKlxuXG4iKTsKICAgIHByaW50ZigiQ2xvY2sjICAgV2FnZSAgSG91cnMgICBPVCAgIEdyb3NzXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Cn0KCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gRnVuY3Rpb246IHByaW50RW1wCi8vIFB1cnBvc2U6IFByaW50cyBlbXBsb3llZSBkZXRhaWxzIGluIGEgdGFidWxhciBmb3JtYXQKLy8gUGFyYW1ldGVyczogCi8vICAgLSBjbG9ja051bWJlcjogVW5pcXVlIGVtcGxveWVlIElECi8vICAgLSB3YWdlUmF0ZTogSG91cmx5IHdhZ2UgcmF0ZQovLyAgIC0gaG91cnM6IEhvdXJzIHdvcmtlZCBpbiB0aGUgd2VlawovLyAgIC0gb3ZlcnRpbWVIcnM6IE92ZXJ0aW1lIGhvdXJzIHdvcmtlZAovLyAgIC0gZ3Jvc3NQYXk6IEdyb3NzIHBheSBmb3IgdGhlIHdlZWsKLy8gUmV0dXJuczogdm9pZAovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCnZvaWQgcHJpbnRFbXAobG9uZyBpbnQgY2xvY2tOdW1iZXIsIGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBob3VycywgZmxvYXQgb3ZlcnRpbWVIcnMsIGZsb2F0IGdyb3NzUGF5KSB7CiAgICBwcmludGYoIiUwNmxpICAgJTUuMmYgICAlNS4xZiAgICU0LjFmICAgJTguMmZcbiIsIGNsb2NrTnVtYmVyLCB3YWdlUmF0ZSwgaG91cnMsIG92ZXJ0aW1lSHJzLCBncm9zc1BheSk7Cn0K