#include <stdio.h>
// Define constants for the program
#define NUM_EMPL 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
// Define a struct for storing employee data
struct employee
{
long int clockNumber; // employee ID number
float wageRate; // hourly wage rate
float hours; // hours worked in a week
float overtimeHrs; // overtime hours worked in a week
float grossPay; // gross pay for the week
} ;
// Declare functions used in the program
float getHours( long int clockNumber) ; // gets the number of hours worked by an employee
void printHeader( void ) ; // prints a header for the table of employee data
void printEmp( struct employee emp) ; // prints a row of data for a single employee
int main( )
{
// Declare an array of employee structs and initialize with data
struct employee employees[ NUM_EMPL] = {
{ 98401 , 10.60 } ,
{ 526488 , 9.75 } ,
{ 765349 , 10.50 } ,
{ 34645 , 12.25 } ,
{ 127615 , 8.35 }
} ;
// Loop through each employee, get their hours worked, and calculate their gross pay
for ( int i = 0 ; i < NUM_EMPL; ++ i)
{
employees[ i] .hours = getHours( employees[ i] .clockNumber ) ;
// If the employee worked overtime, calculate the overtime pay
if ( employees[ i] .hours > STD_HOURS)
{
employees[ i] .overtimeHrs = employees[ i] .hours - STD_HOURS;
employees[ i] .grossPay = STD_HOURS * employees[ i] .wageRate
+ employees[ i] .overtimeHrs * employees[ i] .wageRate * OT_RATE;
}
// If the employee did not work overtime, calculate regular pay only
else
{
employees[ i] .overtimeHrs = 0.0 ;
employees[ i] .grossPay = employees[ i] .hours * employees[ i] .wageRate ;
}
}
// Print a header for the table of employee data
printHeader( ) ;
// Loop through each employee and print their data
for ( int i = 0 ; i < NUM_EMPL; ++ i)
{
printEmp( employees[ i] ) ;
}
return 0 ;
}
// Function to get the number of hours worked by an employee
float getHours( long int clockNumber)
{
float hoursWorked;
// Prompt the user to enter the number of hours worked by the employee
printf ( "Enter hours worked by emp # %06li: " , clockNumber
) ; scanf ( "%f" , & hoursWorked
) ;
return hoursWorked;
}
// Function to print a header for the table of employee data
void printHeader( void )
{
printf ( "\n *** Pay Calculator ***\n \n " ) ; printf ( "Clock# Wage Hours OT Gross\n " ) ; printf ( "--------------------------------------\n " ) ; }
// Function to print a row of data for a single employee
void printEmp( struct employee emp)
{
// Print the employee's ID number, wage rate, hours worked, overtime hours worked, and gross pay
printf ( "%06li %5.2f %5.1f %5.1f %7.2f\n " , emp.clockNumber , emp.wageRate , emp.hours ,
emp.overtimeHrs , emp.grossPay ) ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBEZWZpbmUgY29uc3RhbnRzIGZvciB0aGUgcHJvZ3JhbQojZGVmaW5lIE5VTV9FTVBMIDUKI2RlZmluZSBTVERfSE9VUlMgNDAuMAojZGVmaW5lIE9UX1JBVEUgMS41CgovLyBEZWZpbmUgYSBzdHJ1Y3QgZm9yIHN0b3JpbmcgZW1wbG95ZWUgZGF0YQpzdHJ1Y3QgZW1wbG95ZWUKewogICAgbG9uZyBpbnQgY2xvY2tOdW1iZXI7IC8vIGVtcGxveWVlIElEIG51bWJlcgogICAgZmxvYXQgd2FnZVJhdGU7IC8vIGhvdXJseSB3YWdlIHJhdGUKICAgIGZsb2F0IGhvdXJzOyAvLyBob3VycyB3b3JrZWQgaW4gYSB3ZWVrCiAgICBmbG9hdCBvdmVydGltZUhyczsgLy8gb3ZlcnRpbWUgaG91cnMgd29ya2VkIGluIGEgd2VlawogICAgZmxvYXQgZ3Jvc3NQYXk7IC8vIGdyb3NzIHBheSBmb3IgdGhlIHdlZWsKfTsKCi8vIERlY2xhcmUgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIHByb2dyYW0KZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpOyAvLyBnZXRzIHRoZSBudW1iZXIgb2YgaG91cnMgd29ya2VkIGJ5IGFuIGVtcGxveWVlCnZvaWQgcHJpbnRIZWFkZXIodm9pZCk7IC8vIHByaW50cyBhIGhlYWRlciBmb3IgdGhlIHRhYmxlIG9mIGVtcGxveWVlIGRhdGEKdm9pZCBwcmludEVtcChzdHJ1Y3QgZW1wbG95ZWUgZW1wKTsgLy8gcHJpbnRzIGEgcm93IG9mIGRhdGEgZm9yIGEgc2luZ2xlIGVtcGxveWVlCgppbnQgbWFpbigpCnsKICAgIC8vIERlY2xhcmUgYW4gYXJyYXkgb2YgZW1wbG95ZWUgc3RydWN0cyBhbmQgaW5pdGlhbGl6ZSB3aXRoIGRhdGEKICAgIHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZXNbTlVNX0VNUExdID0gewogICAgICAgIHs5ODQwMSwgMTAuNjB9LAogICAgICAgIHs1MjY0ODgsIDkuNzV9LAogICAgICAgIHs3NjUzNDksIDEwLjUwfSwKICAgICAgICB7MzQ2NDUsIDEyLjI1fSwKICAgICAgICB7MTI3NjE1LCA4LjM1fQogICAgfTsKCiAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBlbXBsb3llZSwgZ2V0IHRoZWlyIGhvdXJzIHdvcmtlZCwgYW5kIGNhbGN1bGF0ZSB0aGVpciBncm9zcyBwYXkKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0VNUEw7ICsraSkKICAgIHsKICAgICAgICBlbXBsb3llZXNbaV0uaG91cnMgPSBnZXRIb3VycyhlbXBsb3llZXNbaV0uY2xvY2tOdW1iZXIpOwoKICAgICAgICAvLyBJZiB0aGUgZW1wbG95ZWUgd29ya2VkIG92ZXJ0aW1lLCBjYWxjdWxhdGUgdGhlIG92ZXJ0aW1lIHBheQogICAgICAgIGlmIChlbXBsb3llZXNbaV0uaG91cnMgPiBTVERfSE9VUlMpCiAgICAgICAgewogICAgICAgICAgICBlbXBsb3llZXNbaV0ub3ZlcnRpbWVIcnMgPSBlbXBsb3llZXNbaV0uaG91cnMgLSBTVERfSE9VUlM7CiAgICAgICAgICAgIGVtcGxveWVlc1tpXS5ncm9zc1BheSA9IFNURF9IT1VSUyAqIGVtcGxveWVlc1tpXS53YWdlUmF0ZQogICAgICAgICAgICAgICAgKyBlbXBsb3llZXNbaV0ub3ZlcnRpbWVIcnMgKiBlbXBsb3llZXNbaV0ud2FnZVJhdGUgKiBPVF9SQVRFOwogICAgICAgIH0KICAgICAgICAvLyBJZiB0aGUgZW1wbG95ZWUgZGlkIG5vdCB3b3JrIG92ZXJ0aW1lLCBjYWxjdWxhdGUgcmVndWxhciBwYXkgb25seQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGVtcGxveWVlc1tpXS5vdmVydGltZUhycyA9IDAuMDsKICAgICAgICAgICAgZW1wbG95ZWVzW2ldLmdyb3NzUGF5ID0gZW1wbG95ZWVzW2ldLmhvdXJzICogZW1wbG95ZWVzW2ldLndhZ2VSYXRlOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBQcmludCBhIGhlYWRlciBmb3IgdGhlIHRhYmxlIG9mIGVtcGxveWVlIGRhdGEKICAgIHByaW50SGVhZGVyKCk7CgogICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZW1wbG95ZWUgYW5kIHByaW50IHRoZWlyIGRhdGEKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0VNUEw7ICsraSkKICAgIHsKICAgICAgICBwcmludEVtcChlbXBsb3llZXNbaV0pOwogICAgfQoKICAgIHJldHVybiAwOwp9CgovLyBGdW5jdGlvbiB0byBnZXQgdGhlIG51bWJlciBvZiBob3VycyB3b3JrZWQgYnkgYW4gZW1wbG95ZWUKZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpCnsKICAgIGZsb2F0IGhvdXJzV29ya2VkOwoKICAgIC8vIFByb21wdCB0aGUgdXNlciB0byBlbnRlciB0aGUgbnVtYmVyIG9mIGhvdXJzIHdvcmtlZCBieSB0aGUgZW1wbG95ZWUKICAgIHByaW50ZigiRW50ZXIgaG91cnMgd29ya2VkIGJ5IGVtcCAjICUwNmxpOiAiLCBjbG9ja051bWJlcik7CiAgICBzY2FuZigiJWYiLCAmaG91cnNXb3JrZWQpOwoKICAgIHJldHVybiBob3Vyc1dvcmtlZDsKfQoKLy8gRnVuY3Rpb24gdG8gcHJpbnQgYSBoZWFkZXIgZm9yIHRoZSB0YWJsZSBvZiBlbXBsb3llZSBkYXRhCnZvaWQgcHJpbnRIZWFkZXIodm9pZCkKewogICAgcHJpbnRmKCJcbioqKiBQYXkgQ2FsY3VsYXRvciAqKipcblxuIik7CiAgICBwcmludGYoIkNsb2NrIyAgIFdhZ2UgIEhvdXJzICAgICAgT1QgICAgIEdyb3NzXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwp9CgovLyBGdW5jdGlvbiB0byBwcmludCBhIHJvdyBvZiBkYXRhIGZvciBhIHNpbmdsZSBlbXBsb3llZQp2b2lkIHByaW50RW1wKHN0cnVjdCBlbXBsb3llZSBlbXApCnsKICAgIC8vIFByaW50IHRoZSBlbXBsb3llZSdzIElEIG51bWJlciwgd2FnZSByYXRlLCBob3VycyB3b3JrZWQsIG92ZXJ0aW1lIGhvdXJzIHdvcmtlZCwgYW5kIGdyb3NzIHBheQogICAgcHJpbnRmKCIlMDZsaSAgJTUuMmYgICU1LjFmICAlNS4xZiAgJTcuMmZcbiIsCiAgICAgICAgICAgZW1wLmNsb2NrTnVtYmVyLCBlbXAud2FnZVJhdGUsIGVtcC5ob3VycywKICAgICAgICAgICBlbXAub3ZlcnRpbWVIcnMsIGVtcC5ncm9zc1BheSk7Cn0KCg==