//********************************************************
//
// Assignment 6 - Functions
//
// Name: Jesus Castillo
//
// Class: C Programming, Summer, 2025
//
// Date: 6/29/2025
//
// Description: Program which determines overtime and
// gross pay for a set of employees with outputs sent
// to standard output (the screen).
//
// All functions are called by value
//
//********************************************************
#include <stdio.h>
#include <string.h>
// constants
#define SIZE 5
#define OVERTIME_RATE 1.5f
#define STD_WORK_WEEK 40.0f
#define FED_TAX_RATE 0.12f
// function prototypes
struct employee {
char firstName [10];
char lastName [10];
char state[3];
float stateTax;
float fedTax;
float netPay;
long int clockNumber;
float wageRate;
float hours;
float overtimeHrs;
float grossPay;
};
float getHours(long int clockNumber);
float calcOvertimeHours(float hours);
float calcGrossPay(float hours, float wageRate);
void printHeader(void);
void printEmp(struct employee emp);
void calcTaxes(struct employee *emp);
// TODO: Add other function prototypes here as needed
/* Variable Declarations */
int main() {
struct employee employeeData[SIZE] = {
{"Connie", "Cobol", "MA", 0, 0, 98401, 10.60, 0, 0, 0},
{"Mary", "Apl", "NH", 0, 0, 526488, 9.75, 0, 0, 0},
{"Frank", "Fortran", "VT", 0, 0, 765349, 10.50, 0, 0, 0},
{"Jeff", "Ada", "NY", 0, 0, 34645, 12.25, 0, 0, 0},
{"Anton", "Pascal", "CA", 0, 0, 127615, 8.35, 0, 0, 0}
};
int i;
// function prototypes
// process each employee
for (i = 0; i < SIZE; ++i)
{
// Read in hours for employee
// employeeData[i].hours = getHours(employeeData[i].clockNumber);
// The code above didn't work
float testHours[] = {51, 42.5, 37.0, 45, 40};
employeeData[i].hours = testHours[i];
// TODO: Function call to calculate overtime hours
employeeData[i].overtimeHrs = calcOvertimeHours(employeeData[i].hours);
// TODO: Function call to calculate gross pay
employeeData[i].grossPay = calcGrossPay(employeeData[i].hours, employeeData[i].wageRate);
calcTaxes(&employeeData[i]);
}
// print the header info
printHeader(); {
printf ("\n\n*** Pay Calculator ***\n");
printf("\nName TaxS Clock# Wage Hours OT Gross Fed Net \n"); printf("----------------------------------------------------------------\n"); }
// Print employee data
for (i = 0; i < SIZE; ++i) {
printEmp(employeeData[i]);
}
return 0;
}
//**************************************************************
// Function: getHours
//
// Purpose: Obtains input from user, the number of hours worked
// per employee and stores the result in a local variable
// that is passed back to the calling function.
//
// Parameters: clockNumber - The unique employee ID
//
// Returns: hoursWorked - hours worked in a given week
//
//**************************************************************
float getHours (long int clockNumber) {
float hoursWorked; // hours worked in a given week
// Read in hours for employee
printf("\nEnter hours worked by emp # %06li: ", clockNumber
); scanf("%f", &hoursWorked
);
// return hours back to the calling function
return hoursWorked;
} // getHours
float calcOvertimeHours(float hours) {
if (hours > STD_WORK_WEEK)
return hours - STD_WORK_WEEK;
else
return 0.0f;
}
float calcGrossPay(float hours, float wageRate) {
float overtime = calcOvertimeHours(hours);
if (hours > STD_WORK_WEEK) {
return (STD_WORK_WEEK * wageRate) + (overtime * wageRate * OVERTIME_RATE);
} else {
return hours * wageRate;
}}
// overtime pay
void calcTaxes(struct employee *emp) {
if (strcmp(emp
->state
, "MA") == 0) emp->stateTax = emp->grossPay * 0.05f;
else if (strcmp(emp
->state
, "NH") == 0) emp->stateTax = 0.0f;
else if (strcmp(emp
->state
, "VT") == 0) emp->stateTax = emp->grossPay * 0.065f;
else if (strcmp(emp
->state
, "NY") == 0) emp->stateTax = emp->grossPay * 0.04f;
else if (strcmp(emp
->state
, "CA") == 0) emp->stateTax = emp->grossPay * 0.06f;
else
emp->stateTax = 0.0f;
emp->fedTax = emp->grossPay * FED_TAX_RATE;
emp->netPay = emp->grossPay - (emp->stateTax + emp->fedTax);
}
//**************************************************************
// Function: printHeader
//
// Purpose: Prints the initial table header information.
//
// Parameters: none
//
// Returns: void
//
//**************************************************************
void printHeader(void) {
printf("\n----------------------------------------"); }
//*************************************************************
// Function: printEmp
//
// Purpose: Prints out all the information for an employee
// in a nice and orderly table format.
//
// Parameters:
//
// clockNumber - unique employee ID
// wageRate - hourly wage rate
// hours - Hours worked for the week
// overtimeHrs - overtime hours worked in a week
// grossPay - gross pay for the week
//
// Returns: void
//
//**************************************************************
void printEmp(struct employee emp) {
printf("%-6s %-8s %-3s %06d %6.2f %6.1f %6.1f %9.2f %8.2f %8.2f\n", emp.firstName, emp.lastName, emp.state, emp.clockNumber,
emp.wageRate, emp.hours, emp.overtimeHrs, emp.grossPay,
emp.fedTax, emp.netPay);
}
// TODO: Add other functions here as needed
// ... remember your comment block headers for each function
CS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCS8vCgkvLyBBc3NpZ25tZW50IDYgLSBGdW5jdGlvbnMKCS8vCgkvLyBOYW1lOiBKZXN1cyBDYXN0aWxsbwoJLy8KCS8vIENsYXNzOiBDIFByb2dyYW1taW5nLCBTdW1tZXIsIDIwMjUKCS8vCgkvLyBEYXRlOiA2LzI5LzIwMjUKCS8vCgkvLyBEZXNjcmlwdGlvbjogUHJvZ3JhbSB3aGljaCBkZXRlcm1pbmVzIG92ZXJ0aW1lIGFuZCAKCS8vIGdyb3NzIHBheSBmb3IgYSBzZXQgb2YgZW1wbG95ZWVzIHdpdGggb3V0cHV0cyBzZW50IAoJLy8gdG8gc3RhbmRhcmQgb3V0cHV0ICh0aGUgc2NyZWVuKS4KCS8vCgkvLyBBbGwgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgdmFsdWUKCS8vCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkKCSNpbmNsdWRlIDxzdGRpby5oPgoJI2luY2x1ZGUgPHN0cmluZy5oPgoJCgkvLyBjb25zdGFudHMKCSNkZWZpbmUgU0laRSA1CgkjZGVmaW5lIE9WRVJUSU1FX1JBVEUgMS41ZgoJI2RlZmluZSBTVERfV09SS19XRUVLIDQwLjBmCgkjZGVmaW5lIEZFRF9UQVhfUkFURSAgIDAuMTJmIAoJCgkvLyBmdW5jdGlvbiBwcm90b3R5cGVzCgkKCQoJc3RydWN0IGVtcGxveWVlIHsKCQljaGFyIGZpcnN0TmFtZSBbMTBdOwoJICAgIGNoYXIgbGFzdE5hbWUgIFsxMF07CgkgICAgY2hhciBzdGF0ZVszXTsgCgkgICAgZmxvYXQgc3RhdGVUYXg7CgkgICAgZmxvYXQgZmVkVGF4OwoJICAgIGZsb2F0IG5ldFBheTsKCSAgICBsb25nIGludCBjbG9ja051bWJlcjsKCSAgICBmbG9hdCB3YWdlUmF0ZTsKCSAgICBmbG9hdCBob3VyczsKCSAgICBmbG9hdCBvdmVydGltZUhyczsKCSAgICBmbG9hdCBncm9zc1BheTsKCSAgICAKCX07CgkKCQoJZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpOwoJZmxvYXQgY2FsY092ZXJ0aW1lSG91cnMoZmxvYXQgaG91cnMpOwoJZmxvYXQgY2FsY0dyb3NzUGF5KGZsb2F0IGhvdXJzLCBmbG9hdCB3YWdlUmF0ZSk7Cgl2b2lkIHByaW50SGVhZGVyKHZvaWQpOwoJdm9pZCBwcmludEVtcChzdHJ1Y3QgZW1wbG95ZWUgZW1wKTsKCXZvaWQgY2FsY1RheGVzKHN0cnVjdCBlbXBsb3llZSAqZW1wKTsKCQoJLy8gVE9ETzogIEFkZCBvdGhlciBmdW5jdGlvbiBwcm90b3R5cGVzIGhlcmUgYXMgbmVlZGVkCgkKCQoJICAgIC8qIFZhcmlhYmxlIERlY2xhcmF0aW9ucyAqLwoJaW50IG1haW4oKSB7CgkgICAgc3RydWN0IGVtcGxveWVlIGVtcGxveWVlRGF0YVtTSVpFXSA9IHsKICAgIHsiQ29ubmllIiwgIkNvYm9sIiwgIk1BIiwgMCwgMCwgOTg0MDEsIDEwLjYwLCAwLCAwLCAwfSwKICAgIHsiTWFyeSIsICJBcGwiLCAiTkgiLCAwLCAwLCA1MjY0ODgsIDkuNzUsIDAsIDAsIDB9LAogICAgeyJGcmFuayIsICJGb3J0cmFuIiwgIlZUIiwgMCwgMCwgNzY1MzQ5LCAxMC41MCwgMCwgMCwgMH0sCiAgICB7IkplZmYiLCAiQWRhIiwgIk5ZIiwgMCwgMCwgMzQ2NDUsIDEyLjI1LCAwLCAwLCAwfSwKICAgIHsiQW50b24iLCAiUGFzY2FsIiwgIkNBIiwgMCwgMCwgMTI3NjE1LCA4LjM1LCAwLCAwLCAwfQp9OwoJCgkKCWludCBpOwoJLy8gZnVuY3Rpb24gcHJvdG90eXBlcwoJCgkgICAgCgkgICAgLy8gcHJvY2VzcyBlYWNoIGVtcGxveWVlCgkgICAgZm9yIChpID0gMDsgaSA8IFNJWkU7ICsraSkKCSAgICB7CgkgICAgLy8gUmVhZCBpbiBob3VycyBmb3IgZW1wbG95ZWUJCgkgICAgCgkgICAgCS8vIGVtcGxveWVlRGF0YVtpXS5ob3VycyA9IGdldEhvdXJzKGVtcGxveWVlRGF0YVtpXS5jbG9ja051bWJlcik7CgkgICAgCS8vIFRoZSBjb2RlIGFib3ZlIGRpZG4ndCB3b3JrCgkgICAgCWZsb2F0IHRlc3RIb3Vyc1tdID0gezUxLCA0Mi41LCAzNy4wLCA0NSwgNDB9OwoJCQllbXBsb3llZURhdGFbaV0uaG91cnMgPSB0ZXN0SG91cnNbaV07CgkgIAoJCgkgICAgICAgIC8vIFRPRE86IEZ1bmN0aW9uIGNhbGwgdG8gY2FsY3VsYXRlIG92ZXJ0aW1lIGhvdXJzCgkgICAgICAgIGVtcGxveWVlRGF0YVtpXS5vdmVydGltZUhycyA9IGNhbGNPdmVydGltZUhvdXJzKGVtcGxveWVlRGF0YVtpXS5ob3Vycyk7CgkKCSAgICAgICAgLy8gVE9ETzogRnVuY3Rpb24gY2FsbCB0byBjYWxjdWxhdGUgZ3Jvc3MgcGF5CgkgICAgICAgIGVtcGxveWVlRGF0YVtpXS5ncm9zc1BheSA9IGNhbGNHcm9zc1BheShlbXBsb3llZURhdGFbaV0uaG91cnMsIGVtcGxveWVlRGF0YVtpXS53YWdlUmF0ZSk7CgkJCQoJCQljYWxjVGF4ZXMoJmVtcGxveWVlRGF0YVtpXSk7CgoJfQoJICAgIC8vIHByaW50IHRoZSBoZWFkZXIgaW5mbwoJCXByaW50SGVhZGVyKCk7IHsKCSAgICAKCSAgICBwcmludGYgKCJcblxuKioqIFBheSBDYWxjdWxhdG9yICoqKlxuIik7CgkgICAgCgkgICAgcHJpbnRmKCJcbk5hbWUgIAkgCSAgIFRheFMgQ2xvY2sjICAgV2FnZSAgIEhvdXJzICAgT1QgICAgICAgR3Jvc3MgICAgRmVkICAgICAgTmV0IFxuIik7CgkgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKCSAgICB9IAoJCgkgICAgLy8gUHJpbnQgZW1wbG95ZWUgZGF0YQoJICAgIGZvciAoaSA9IDA7IGkgPCBTSVpFOyArK2kpIHsKCSAgICAgICAgcHJpbnRFbXAoZW1wbG95ZWVEYXRhW2ldKTsKCSAgICB9CgkgICAgcmV0dXJuIDA7CgkKCX0KCQoJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJLy8gRnVuY3Rpb246IGdldEhvdXJzIAoJLy8gCgkvLyBQdXJwb3NlOiBPYnRhaW5zIGlucHV0IGZyb20gdXNlciwgdGhlIG51bWJlciBvZiBob3VycyB3b3JrZWQgCgkvLyBwZXIgZW1wbG95ZWUgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGEgbG9jYWwgdmFyaWFibGUgCgkvLyB0aGF0IGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLiAKCS8vIAoJLy8gUGFyYW1ldGVyczogY2xvY2tOdW1iZXIgLSBUaGUgdW5pcXVlIGVtcGxveWVlIElECgkvLyAKCS8vIFJldHVybnM6IGhvdXJzV29ya2VkIC0gaG91cnMgd29ya2VkIGluIGEgZ2l2ZW4gd2VlawoJLy8gIAoJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJCglmbG9hdCBnZXRIb3VycyAobG9uZyBpbnQgY2xvY2tOdW1iZXIpIHsgCgkgICAgZmxvYXQgaG91cnNXb3JrZWQ7IC8vIGhvdXJzIHdvcmtlZCBpbiBhIGdpdmVuIHdlZWsKCSAgICAvLyBSZWFkIGluIGhvdXJzIGZvciBlbXBsb3llZQoJICAgIAoJICAgIHByaW50ZigiXG5FbnRlciBob3VycyB3b3JrZWQgYnkgZW1wICMgJTA2bGk6ICIsIGNsb2NrTnVtYmVyKTsKCSAgICBzY2FuZigiJWYiLCAmaG91cnNXb3JrZWQpOwoJCgkgICAgCgkgICAgLy8gcmV0dXJuIGhvdXJzIGJhY2sgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24KCSAgICByZXR1cm4gaG91cnNXb3JrZWQ7CgkKCX0gLy8gZ2V0SG91cnMKCQoJZmxvYXQgY2FsY092ZXJ0aW1lSG91cnMoZmxvYXQgaG91cnMpIHsKCSAgICBpZiAoaG91cnMgPiBTVERfV09SS19XRUVLKQoJICAgICAgICByZXR1cm4gaG91cnMgLSBTVERfV09SS19XRUVLOwoJICAgIGVsc2UKCSAgICAgICAgcmV0dXJuIDAuMGY7Cgl9CgkKCWZsb2F0IGNhbGNHcm9zc1BheShmbG9hdCBob3VycywgZmxvYXQgd2FnZVJhdGUpIHsKCSAgICBmbG9hdCBvdmVydGltZSA9IGNhbGNPdmVydGltZUhvdXJzKGhvdXJzKTsKCSAgICBpZiAoaG91cnMgPiBTVERfV09SS19XRUVLKSB7CgkgICAgICAgIHJldHVybiAoU1REX1dPUktfV0VFSyAqIHdhZ2VSYXRlKSArIChvdmVydGltZSAqIHdhZ2VSYXRlICogT1ZFUlRJTUVfUkFURSk7CgkgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIGhvdXJzICogd2FnZVJhdGU7CgkgICAgfX0KCSAgICAKCS8vIG92ZXJ0aW1lIHBheQoJCgkKCXZvaWQgY2FsY1RheGVzKHN0cnVjdCBlbXBsb3llZSAqZW1wKSB7CgkJCiAgICBpZiAoc3RyY21wKGVtcC0+c3RhdGUsICJNQSIpID09IDApCiAgICAgICAgZW1wLT5zdGF0ZVRheCA9IGVtcC0+Z3Jvc3NQYXkgKiAwLjA1ZjsKICAgIGVsc2UgaWYgKHN0cmNtcChlbXAtPnN0YXRlLCAiTkgiKSA9PSAwKQogICAgICAgIGVtcC0+c3RhdGVUYXggPSAwLjBmOwogICAgZWxzZSBpZiAoc3RyY21wKGVtcC0+c3RhdGUsICJWVCIpID09IDApCiAgICAgICAgZW1wLT5zdGF0ZVRheCA9IGVtcC0+Z3Jvc3NQYXkgKiAwLjA2NWY7CiAgICBlbHNlIGlmIChzdHJjbXAoZW1wLT5zdGF0ZSwgIk5ZIikgPT0gMCkKICAgICAgICBlbXAtPnN0YXRlVGF4ID0gZW1wLT5ncm9zc1BheSAqIDAuMDRmOwogICAgZWxzZSBpZiAoc3RyY21wKGVtcC0+c3RhdGUsICJDQSIpID09IDApCiAgICAgICAgZW1wLT5zdGF0ZVRheCA9IGVtcC0+Z3Jvc3NQYXkgKiAwLjA2ZjsKICAgIGVsc2UKICAgICAgICBlbXAtPnN0YXRlVGF4ID0gMC4wZjsgCgogICAgZW1wLT5mZWRUYXggPSBlbXAtPmdyb3NzUGF5ICogRkVEX1RBWF9SQVRFOwogICAgZW1wLT5uZXRQYXkgPSBlbXAtPmdyb3NzUGF5IC0gKGVtcC0+c3RhdGVUYXggKyBlbXAtPmZlZFRheCk7Cn0KCQoJCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkvLyBGdW5jdGlvbjogcHJpbnRIZWFkZXIKCS8vIAoJLy8gUHVycG9zZTogUHJpbnRzIHRoZSBpbml0aWFsIHRhYmxlIGhlYWRlciBpbmZvcm1hdGlvbi4KCS8vIAoJLy8gUGFyYW1ldGVyczogbm9uZQoJLy8gCgkvLyBSZXR1cm5zOiB2b2lkCgkvLyAgCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkKCXZvaWQgcHJpbnRIZWFkZXIodm9pZCkgewoJICAgIHByaW50ZigiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Cgl9CgkKCS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKCS8vIEZ1bmN0aW9uOiBwcmludEVtcCAKCS8vIAoJLy8gUHVycG9zZTogUHJpbnRzIG91dCBhbGwgdGhlIGluZm9ybWF0aW9uIGZvciBhbiBlbXBsb3llZQoJLy8gaW4gYSBuaWNlIGFuZCBvcmRlcmx5IHRhYmxlIGZvcm1hdC4KCS8vIAoJLy8gUGFyYW1ldGVyczogCgkvLwoJLy8gICAgIGNsb2NrTnVtYmVyIC0gdW5pcXVlIGVtcGxveWVlIElECgkvLyAgICAgd2FnZVJhdGUgLSBob3VybHkgd2FnZSByYXRlCgkvLyAgICAgaG91cnMgLSBIb3VycyB3b3JrZWQgZm9yIHRoZSB3ZWVrCgkvLyAgICAgb3ZlcnRpbWVIcnMgLSBvdmVydGltZSBob3VycyB3b3JrZWQgaW4gYSB3ZWVrCgkvLyAgICAgZ3Jvc3NQYXkgLSBncm9zcyBwYXkgZm9yIHRoZSB3ZWVrCgkvLyAKCS8vIFJldHVybnM6IHZvaWQKCS8vICAKCS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQoJdm9pZCBwcmludEVtcChzdHJ1Y3QgZW1wbG95ZWUgZW1wKSB7CiAgICBwcmludGYoIiUtNnMgJS04cyAlLTNzICUwNmQgJTYuMmYgJTYuMWYgJTYuMWYgJTkuMmYgJTguMmYgJTguMmZcbiIsCiAgICBlbXAuZmlyc3ROYW1lLCBlbXAubGFzdE5hbWUsIGVtcC5zdGF0ZSwgZW1wLmNsb2NrTnVtYmVyLAogICAgZW1wLndhZ2VSYXRlLCBlbXAuaG91cnMsIGVtcC5vdmVydGltZUhycywgZW1wLmdyb3NzUGF5LAogICAgZW1wLmZlZFRheCwgZW1wLm5ldFBheSk7Cn0KCQoJCgkvLyBUT0RPOiBBZGQgb3RoZXIgZnVuY3Rpb25zIGhlcmUgYXMgbmVlZGVkCgkvLyAuLi4gcmVtZW1iZXIgeW91ciBjb21tZW50IGJsb2NrIGhlYWRlcnMgZm9yIGVhY2ggZnVuY3Rpb24KCQoJ