#include <stdio.h>
// constants
#define SIZE 5
#define OVERTIME_RATE 1.5f
#define STD_WORK_WEEK 40.0f
// function prototypes
float getHours(long int clockNumber);
void calculateOvertime(float hoursWorked, float *overtimeHrs);
void calculateGrossPay(float hours, float overtimeHrs, float wageRate, float *grossPay);
void printHeader(void);
void printEmp(long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay);
int main() {
/* Variable Declarations */
long int clockNumber[SIZE] = {98401, 526488, 765349, 34645, 127615}; // ID
float grossPay[SIZE]; // gross pay
float hours[SIZE]; // hours worked in a given week
float overtimeHrs[SIZE]; // overtime hours
float wageRate[SIZE] = {10.60, 9.75, 10.50, 12.25, 8.35}; // hourly wage rate
// process each employee
for (int i = 0; i < SIZE; ++i) {
// Read in hours for employee
hours[i] = getHours(clockNumber[i]);
// Calculate overtime hours
calculateOvertime(hours[i], &overtimeHrs[i]);
// Calculate gross pay
calculateGrossPay(hours[i], overtimeHrs[i], wageRate[i], &grossPay[i]);
}
// print the header info
printHeader();
// print out each employee
for (int i = 0; i < SIZE; ++i) {
// Print all the employees
printEmp(clockNumber[i], wageRate[i], hours[i], overtimeHrs[i], grossPay[i]);
}
return 0;
}
// Function to obtain input from the user, the number of hours worked per employee.
float getHours(long int clockNumber) {
float hoursWorked;
printf("\nEnter hours worked by emp # %06li: ", clockNumber
); scanf("%f", &hoursWorked
); return hoursWorked;
}
// Function to calculate overtime hours
void calculateOvertime(float hoursWorked, float *overtimeHrs) {
if (hoursWorked > STD_WORK_WEEK) {
*overtimeHrs = hoursWorked - STD_WORK_WEEK;
} else {
*overtimeHrs = 0.0;
}
}
// Function to calculate gross pay
void calculateGrossPay(float hours, float overtimeHrs, float wageRate, float *grossPay) {
*grossPay = (hours * wageRate) + (overtimeHrs * wageRate * OVERTIME_RATE);
}
// Function to print the initial table header information.
void printHeader(void) {
printf("---------------------------------------------\n"); printf("| Clock# | Wage | Hours | OT | Gross |\n"); printf("---------------------------------------------\n"); }
// Function to print out all the information for an employee in a table format.
void printEmp(long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) {
printf("| %8li | %6.2f | %5.1f | %4.1f | %6.2f |\n", clockNumber
, wageRate
, hours
, overtimeHrs
, grossPay
); printf("---------------------------------------------\n"); }
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBjb25zdGFudHMKI2RlZmluZSBTSVpFIDUKI2RlZmluZSBPVkVSVElNRV9SQVRFIDEuNWYKI2RlZmluZSBTVERfV09SS19XRUVLIDQwLjBmCgovLyBmdW5jdGlvbiBwcm90b3R5cGVzCmZsb2F0IGdldEhvdXJzKGxvbmcgaW50IGNsb2NrTnVtYmVyKTsKdm9pZCBjYWxjdWxhdGVPdmVydGltZShmbG9hdCBob3Vyc1dvcmtlZCwgZmxvYXQgKm92ZXJ0aW1lSHJzKTsKdm9pZCBjYWxjdWxhdGVHcm9zc1BheShmbG9hdCBob3VycywgZmxvYXQgb3ZlcnRpbWVIcnMsIGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCAqZ3Jvc3NQYXkpOwp2b2lkIHByaW50SGVhZGVyKHZvaWQpOwp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSk7CgppbnQgbWFpbigpIHsKICAgIC8qIFZhcmlhYmxlIERlY2xhcmF0aW9ucyAqLwogICAgbG9uZyBpbnQgY2xvY2tOdW1iZXJbU0laRV0gPSB7OTg0MDEsIDUyNjQ4OCwgNzY1MzQ5LCAzNDY0NSwgMTI3NjE1fTsgLy8gSUQKICAgIGZsb2F0IGdyb3NzUGF5W1NJWkVdOyAgIC8vIGdyb3NzIHBheQogICAgZmxvYXQgaG91cnNbU0laRV07IC8vIGhvdXJzIHdvcmtlZCBpbiBhIGdpdmVuIHdlZWsKICAgIGZsb2F0IG92ZXJ0aW1lSHJzW1NJWkVdOyAvLyBvdmVydGltZSBob3VycwogICAgZmxvYXQgd2FnZVJhdGVbU0laRV0gPSB7MTAuNjAsIDkuNzUsIDEwLjUwLCAxMi4yNSwgOC4zNX07IC8vIGhvdXJseSB3YWdlIHJhdGUKCiAgICAvLyBwcm9jZXNzIGVhY2ggZW1wbG95ZWUKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0laRTsgKytpKSB7CiAgICAgICAgLy8gUmVhZCBpbiBob3VycyBmb3IgZW1wbG95ZWUKICAgICAgICBob3Vyc1tpXSA9IGdldEhvdXJzKGNsb2NrTnVtYmVyW2ldKTsKCiAgICAgICAgLy8gQ2FsY3VsYXRlIG92ZXJ0aW1lIGhvdXJzCiAgICAgICAgY2FsY3VsYXRlT3ZlcnRpbWUoaG91cnNbaV0sICZvdmVydGltZUhyc1tpXSk7CgogICAgICAgIC8vIENhbGN1bGF0ZSBncm9zcyBwYXkKICAgICAgICBjYWxjdWxhdGVHcm9zc1BheShob3Vyc1tpXSwgb3ZlcnRpbWVIcnNbaV0sIHdhZ2VSYXRlW2ldLCAmZ3Jvc3NQYXlbaV0pOwogICAgfQoKICAgIC8vIHByaW50IHRoZSBoZWFkZXIgaW5mbwogICAgcHJpbnRIZWFkZXIoKTsKCiAgICAvLyBwcmludCBvdXQgZWFjaCBlbXBsb3llZQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyArK2kpIHsKICAgICAgICAvLyBQcmludCBhbGwgdGhlIGVtcGxveWVlcwogICAgICAgIHByaW50RW1wKGNsb2NrTnVtYmVyW2ldLCB3YWdlUmF0ZVtpXSwgaG91cnNbaV0sIG92ZXJ0aW1lSHJzW2ldLCBncm9zc1BheVtpXSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCi8vIEZ1bmN0aW9uIHRvIG9idGFpbiBpbnB1dCBmcm9tIHRoZSB1c2VyLCB0aGUgbnVtYmVyIG9mIGhvdXJzIHdvcmtlZCBwZXIgZW1wbG95ZWUuCmZsb2F0IGdldEhvdXJzKGxvbmcgaW50IGNsb2NrTnVtYmVyKSB7CiAgICBmbG9hdCBob3Vyc1dvcmtlZDsKICAgIHByaW50ZigiXG5FbnRlciBob3VycyB3b3JrZWQgYnkgZW1wICMgJTA2bGk6ICIsIGNsb2NrTnVtYmVyKTsKICAgIHNjYW5mKCIlZiIsICZob3Vyc1dvcmtlZCk7CiAgICByZXR1cm4gaG91cnNXb3JrZWQ7Cn0KCi8vIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBvdmVydGltZSBob3Vycwp2b2lkIGNhbGN1bGF0ZU92ZXJ0aW1lKGZsb2F0IGhvdXJzV29ya2VkLCBmbG9hdCAqb3ZlcnRpbWVIcnMpIHsKICAgIGlmIChob3Vyc1dvcmtlZCA+IFNURF9XT1JLX1dFRUspIHsKICAgICAgICAqb3ZlcnRpbWVIcnMgPSBob3Vyc1dvcmtlZCAtIFNURF9XT1JLX1dFRUs7CiAgICB9IGVsc2UgewogICAgICAgICpvdmVydGltZUhycyA9IDAuMDsKICAgIH0KfQoKLy8gRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGdyb3NzIHBheQp2b2lkIGNhbGN1bGF0ZUdyb3NzUGF5KGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycywgZmxvYXQgd2FnZVJhdGUsIGZsb2F0ICpncm9zc1BheSkgewogICAgKmdyb3NzUGF5ID0gKGhvdXJzICogd2FnZVJhdGUpICsgKG92ZXJ0aW1lSHJzICogd2FnZVJhdGUgKiBPVkVSVElNRV9SQVRFKTsKfQoKLy8gRnVuY3Rpb24gdG8gcHJpbnQgdGhlIGluaXRpYWwgdGFibGUgaGVhZGVyIGluZm9ybWF0aW9uLgp2b2lkIHByaW50SGVhZGVyKHZvaWQpIHsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgIHByaW50ZigifCAgIENsb2NrIyAgfCAgV2FnZSAgfCBIb3VycyB8ICBPVCAgfCAgR3Jvc3MgfFxuIik7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Cn0KCi8vIEZ1bmN0aW9uIHRvIHByaW50IG91dCBhbGwgdGhlIGluZm9ybWF0aW9uIGZvciBhbiBlbXBsb3llZSBpbiBhIHRhYmxlIGZvcm1hdC4Kdm9pZCBwcmludEVtcChsb25nIGludCBjbG9ja051bWJlciwgZmxvYXQgd2FnZVJhdGUsIGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycywgZmxvYXQgZ3Jvc3NQYXkpIHsKICAgIHByaW50ZigifCAlOGxpIHwgJTYuMmYgfCAlNS4xZiB8ICU0LjFmIHwgJTYuMmYgfFxuIiwgY2xvY2tOdW1iZXIsIHdhZ2VSYXRlLCBob3Vycywgb3ZlcnRpbWVIcnMsIGdyb3NzUGF5KTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKfQoK