//********************************************************
//
// Assignment 7 - Structures and Strings
//
// Name: Jacquelin saint Lucien
//
// Class: C Programming, Fall 2025
//
// Date: <replace with the current date>
//
// Description: Program which determines overtime and
// gross pay for a set of employees with outputs sent
// to standard output (the screen).
//
// This assignment also adds the employee name, their tax state,
// and calculates the state tax, federal tax, and net pay. It
// also calculates totals, averages, minimum, and maximum values.
//
// Call by Reference design
//
//********************************************************
#include <stdio.h>
#include <string.h>
#define NAME_LEN 10
#define STATE_LEN 3
#define MAX_EMPLOYEES 5
// Structure to hold first and last name
struct name {
char firstName[ NAME_LEN] ;
char lastName[ NAME_LEN] ;
} ;
// Structure to hold employee info
struct employee {
struct name empName;
char taxState[ STATE_LEN] ;
long int clockNumber;
float wageRate;
float hours;
float overTimeHrs;
float grossPay;
float stateTax;
float fedTax;
float netPay;
} ;
// Function prototypes
float computeStateTaxRate( char state[ ] ) ;
float findMin( float values[ ] , int n) ;
float findMax( float values[ ] , int n) ;
float findAverage( float values[ ] , int n) ;
float findTotal( float values[ ] , int n) ;
int main( void )
{
struct employee employees[ MAX_EMPLOYEES] ;
int i, count;
printf ( "Enter number of employees (max %d): " , MAX_EMPLOYEES
) ;
// Input data
for ( i = 0 ; i < count; i++ )
{
printf ( "\n --- Employee %d ---\n " , i
+ 1 ) ; scanf ( "%s" , employees
[ i
] .
empName .
firstName ) ; scanf ( "%s" , employees
[ i
] .
empName .
lastName ) ; scanf ( "%ld" , & employees
[ i
] .
clockNumber ) ; printf ( "State (MA, NH, VT, CA, or other): " ) ; scanf ( "%s" , employees
[ i
] .
taxState ) ; scanf ( "%f" , & employees
[ i
] .
wageRate ) ; scanf ( "%f" , & employees
[ i
] .
hours ) ; scanf ( "%f" , & employees
[ i
] .
overTimeHrs ) ;
// Compute gross pay (normal + overtime)
employees[ i] .grossPay = ( employees[ i] .wageRate * employees[ i] .hours ) +
( employees[ i] .wageRate * 1.5 * employees[ i] .overTimeHrs ) ;
// State and federal taxes
float stateRate = computeStateTaxRate( employees[ i] .taxState ) ;
employees[ i] .stateTax = employees[ i] .grossPay * stateRate;
employees[ i] .fedTax = employees[ i] .grossPay * 0.25f ;
// Net pay
employees[ i] .netPay = employees[ i] .grossPay - ( employees[ i] .stateTax + employees[ i] .fedTax ) ;
}
// Display report
printf ( "\n \n ------------------------------------------------------------\n " ) ; printf ( "CLOCK# NAME STATE GROSS STATE TAX FED TAX NET PAY\n " ) ; printf ( "------------------------------------------------------------\n " ) ; for ( i = 0 ; i < count; i++ )
{
printf ( "%06ld %-10s %-10s %-3s %8.2f %8.2f %8.2f %8.2f\n " , employees[ i] .clockNumber ,
employees[ i] .empName .firstName ,
employees[ i] .empName .lastName ,
employees[ i] .taxState ,
employees[ i] .grossPay ,
employees[ i] .stateTax ,
employees[ i] .fedTax ,
employees[ i] .netPay ) ;
}
printf ( "------------------------------------------------------------\n " ) ;
// Summary statistics arrays
float grossArr[ MAX_EMPLOYEES] , stateArr[ MAX_EMPLOYEES] , fedArr[ MAX_EMPLOYEES] , netArr[ MAX_EMPLOYEES] ;
for ( i = 0 ; i < count; i++ )
{
grossArr[ i] = employees[ i] .grossPay ;
stateArr[ i] = employees[ i] .stateTax ;
fedArr[ i] = employees[ i] .fedTax ;
netArr[ i] = employees[ i] .netPay ;
}
// Display summary
printf ( "\n \n ==================== SUMMARY STATISTICS ====================\n " ) ; printf ( "Category TOTAL AVG MIN MAX\n " ) ; printf ( "------------------------------------------------------------\n " ) ; printf ( "Gross Pay %10.2f %8.2f %8.2f %8.2f\n " , findTotal( grossArr, count) , findAverage( grossArr, count) , findMin( grossArr, count) , findMax( grossArr, count) ) ;
printf ( "State Tax %10.2f %8.2f %8.2f %8.2f\n " , findTotal( stateArr, count) , findAverage( stateArr, count) , findMin( stateArr, count) , findMax( stateArr, count) ) ;
printf ( "Fed Tax %10.2f %8.2f %8.2f %8.2f\n " , findTotal( fedArr, count) , findAverage( fedArr, count) , findMin( fedArr, count) , findMax( fedArr, count) ) ;
printf ( "Net Pay %10.2f %8.2f %8.2f %8.2f\n " , findTotal( netArr, count) , findAverage( netArr, count) , findMin( netArr, count) , findMax( netArr, count) ) ;
printf ( "------------------------------------------------------------\n " ) ;
return 0 ;
}
// Function to compute state tax rate based on code
float computeStateTaxRate( char state[ ] )
{
if ( strcmp ( state
, "MA" ) == 0 ) return 0.05f ; else if ( strcmp ( state
, "NH" ) == 0 ) return 0.00f ; else if ( strcmp ( state
, "VT" ) == 0 ) return 0.06f ; else if ( strcmp ( state
, "CA" ) == 0 ) return 0.07f ; else return 0.08f ;
}
// Summary calculation functions
float findTotal( float values[ ] , int n)
{
float sum = 0.0f ;
for ( int i = 0 ; i < n; i++ )
sum += values[ i] ;
return sum;
}
float findAverage( float values[ ] , int n)
{
return findTotal( values, n) / n;
}
float findMin( float values[ ] , int n)
{
float min = values[ 0 ] ;
for ( int i = 1 ; i < n; i++ )
if ( values[ i] < min) min = values[ i] ;
return min;
}
float findMax( float values[ ] , int n)
{
float max = values[ 0 ] ;
for ( int i = 1 ; i < n; i++ )
if ( values[ i] > max) max = values[ i] ;
return max;
}
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyBBc3NpZ25tZW50IDcgLSBTdHJ1Y3R1cmVzIGFuZCBTdHJpbmdzCi8vCi8vIE5hbWU6IEphY3F1ZWxpbiBzYWludCBMdWNpZW4KLy8KLy8gQ2xhc3M6IEMgUHJvZ3JhbW1pbmcsIEZhbGwgMjAyNQovLwovLyBEYXRlOiA8cmVwbGFjZSB3aXRoIHRoZSBjdXJyZW50IGRhdGU+Ci8vCi8vIERlc2NyaXB0aW9uOiBQcm9ncmFtIHdoaWNoIGRldGVybWluZXMgb3ZlcnRpbWUgYW5kIAovLyBncm9zcyBwYXkgZm9yIGEgc2V0IG9mIGVtcGxveWVlcyB3aXRoIG91dHB1dHMgc2VudCAKLy8gdG8gc3RhbmRhcmQgb3V0cHV0ICh0aGUgc2NyZWVuKS4KLy8KLy8gVGhpcyBhc3NpZ25tZW50IGFsc28gYWRkcyB0aGUgZW1wbG95ZWUgbmFtZSwgdGhlaXIgdGF4IHN0YXRlLAovLyBhbmQgY2FsY3VsYXRlcyB0aGUgc3RhdGUgdGF4LCBmZWRlcmFsIHRheCwgYW5kIG5ldCBwYXkuICAgSXQKLy8gYWxzbyBjYWxjdWxhdGVzIHRvdGFscywgYXZlcmFnZXMsIG1pbmltdW0sIGFuZCBtYXhpbXVtIHZhbHVlcy4KLy8KLy8gQ2FsbCBieSBSZWZlcmVuY2UgZGVzaWduCi8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTkFNRV9MRU4gMTAKI2RlZmluZSBTVEFURV9MRU4gMwojZGVmaW5lIE1BWF9FTVBMT1lFRVMgNSAgIAoKLy8gU3RydWN0dXJlIHRvIGhvbGQgZmlyc3QgYW5kIGxhc3QgbmFtZQpzdHJ1Y3QgbmFtZSB7CiAgICBjaGFyIGZpcnN0TmFtZVtOQU1FX0xFTl07CiAgICBjaGFyIGxhc3ROYW1lW05BTUVfTEVOXTsKfTsKCi8vIFN0cnVjdHVyZSB0byBob2xkIGVtcGxveWVlIGluZm8Kc3RydWN0IGVtcGxveWVlIHsKICAgIHN0cnVjdCBuYW1lIGVtcE5hbWU7CiAgICBjaGFyIHRheFN0YXRlW1NUQVRFX0xFTl07CiAgICBsb25nIGludCBjbG9ja051bWJlcjsKICAgIGZsb2F0IHdhZ2VSYXRlOwogICAgZmxvYXQgaG91cnM7CiAgICBmbG9hdCBvdmVyVGltZUhyczsKICAgIGZsb2F0IGdyb3NzUGF5OwogICAgZmxvYXQgc3RhdGVUYXg7CiAgICBmbG9hdCBmZWRUYXg7CiAgICBmbG9hdCBuZXRQYXk7Cn07CgovLyBGdW5jdGlvbiBwcm90b3R5cGVzCmZsb2F0IGNvbXB1dGVTdGF0ZVRheFJhdGUoY2hhciBzdGF0ZVtdKTsKZmxvYXQgZmluZE1pbihmbG9hdCB2YWx1ZXNbXSwgaW50IG4pOwpmbG9hdCBmaW5kTWF4KGZsb2F0IHZhbHVlc1tdLCBpbnQgbik7CmZsb2F0IGZpbmRBdmVyYWdlKGZsb2F0IHZhbHVlc1tdLCBpbnQgbik7CmZsb2F0IGZpbmRUb3RhbChmbG9hdCB2YWx1ZXNbXSwgaW50IG4pOwoKaW50IG1haW4odm9pZCkKewogICAgc3RydWN0IGVtcGxveWVlIGVtcGxveWVlc1tNQVhfRU1QTE9ZRUVTXTsKICAgIGludCBpLCBjb3VudDsKCiAgICBwcmludGYoIkVudGVyIG51bWJlciBvZiBlbXBsb3llZXMgKG1heCAlZCk6ICIsIE1BWF9FTVBMT1lFRVMpOwogICAgc2NhbmYoIiVkIiwgJmNvdW50KTsKCiAgICAvLyBJbnB1dCBkYXRhCiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIlxuLS0tIEVtcGxveWVlICVkIC0tLVxuIiwgaSArIDEpOwogICAgICAgIHByaW50ZigiRmlyc3QgTmFtZTogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgZW1wbG95ZWVzW2ldLmVtcE5hbWUuZmlyc3ROYW1lKTsKICAgICAgICBwcmludGYoIkxhc3QgTmFtZTogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgZW1wbG95ZWVzW2ldLmVtcE5hbWUubGFzdE5hbWUpOwogICAgICAgIHByaW50ZigiQ2xvY2sgTnVtYmVyOiAiKTsKICAgICAgICBzY2FuZigiJWxkIiwgJmVtcGxveWVlc1tpXS5jbG9ja051bWJlcik7CiAgICAgICAgcHJpbnRmKCJTdGF0ZSAoTUEsIE5ILCBWVCwgQ0EsIG9yIG90aGVyKTogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgZW1wbG95ZWVzW2ldLnRheFN0YXRlKTsKICAgICAgICBwcmludGYoIkhvdXJseSBXYWdlIFJhdGU6ICIpOwogICAgICAgIHNjYW5mKCIlZiIsICZlbXBsb3llZXNbaV0ud2FnZVJhdGUpOwogICAgICAgIHByaW50ZigiSG91cnMgV29ya2VkOiAiKTsKICAgICAgICBzY2FuZigiJWYiLCAmZW1wbG95ZWVzW2ldLmhvdXJzKTsKICAgICAgICBwcmludGYoIk92ZXJ0aW1lIEhvdXJzOiAiKTsKICAgICAgICBzY2FuZigiJWYiLCAmZW1wbG95ZWVzW2ldLm92ZXJUaW1lSHJzKTsKCiAgICAgICAgLy8gQ29tcHV0ZSBncm9zcyBwYXkgKG5vcm1hbCArIG92ZXJ0aW1lKQogICAgICAgIGVtcGxveWVlc1tpXS5ncm9zc1BheSA9IChlbXBsb3llZXNbaV0ud2FnZVJhdGUgKiBlbXBsb3llZXNbaV0uaG91cnMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW1wbG95ZWVzW2ldLndhZ2VSYXRlICogMS41ICogZW1wbG95ZWVzW2ldLm92ZXJUaW1lSHJzKTsKCiAgICAgICAgLy8gU3RhdGUgYW5kIGZlZGVyYWwgdGF4ZXMKICAgICAgICBmbG9hdCBzdGF0ZVJhdGUgPSBjb21wdXRlU3RhdGVUYXhSYXRlKGVtcGxveWVlc1tpXS50YXhTdGF0ZSk7CiAgICAgICAgZW1wbG95ZWVzW2ldLnN0YXRlVGF4ID0gZW1wbG95ZWVzW2ldLmdyb3NzUGF5ICogc3RhdGVSYXRlOwogICAgICAgIGVtcGxveWVlc1tpXS5mZWRUYXggPSBlbXBsb3llZXNbaV0uZ3Jvc3NQYXkgKiAwLjI1ZjsKCiAgICAgICAgLy8gTmV0IHBheQogICAgICAgIGVtcGxveWVlc1tpXS5uZXRQYXkgPSBlbXBsb3llZXNbaV0uZ3Jvc3NQYXkgLSAoZW1wbG95ZWVzW2ldLnN0YXRlVGF4ICsgZW1wbG95ZWVzW2ldLmZlZFRheCk7CiAgICB9CgogICAgLy8gRGlzcGxheSByZXBvcnQKICAgIHByaW50ZigiXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICBwcmludGYoIkNMT0NLIyAgIE5BTUUgICAgICAgICAgICAgICAgU1RBVEUgIEdST1NTICAgICBTVEFURSBUQVggIEZFRCBUQVggICBORVQgUEFZXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgewogICAgICAgIHByaW50ZigiJTA2bGQgICAlLTEwcyAlLTEwcyAlLTNzICAgJTguMmYgICU4LjJmICAlOC4yZiAgJTguMmZcbiIsCiAgICAgICAgICAgICAgIGVtcGxveWVlc1tpXS5jbG9ja051bWJlciwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLmVtcE5hbWUuZmlyc3ROYW1lLAogICAgICAgICAgICAgICBlbXBsb3llZXNbaV0uZW1wTmFtZS5sYXN0TmFtZSwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLnRheFN0YXRlLAogICAgICAgICAgICAgICBlbXBsb3llZXNbaV0uZ3Jvc3NQYXksCiAgICAgICAgICAgICAgIGVtcGxveWVlc1tpXS5zdGF0ZVRheCwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLmZlZFRheCwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLm5ldFBheSk7CiAgICB9CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgogICAgLy8gU3VtbWFyeSBzdGF0aXN0aWNzIGFycmF5cwogICAgZmxvYXQgZ3Jvc3NBcnJbTUFYX0VNUExPWUVFU10sIHN0YXRlQXJyW01BWF9FTVBMT1lFRVNdLCBmZWRBcnJbTUFYX0VNUExPWUVFU10sIG5ldEFycltNQVhfRU1QTE9ZRUVTXTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgIHsKICAgICAgICBncm9zc0FycltpXSA9IGVtcGxveWVlc1tpXS5ncm9zc1BheTsKICAgICAgICBzdGF0ZUFycltpXSA9IGVtcGxveWVlc1tpXS5zdGF0ZVRheDsKICAgICAgICBmZWRBcnJbaV0gPSBlbXBsb3llZXNbaV0uZmVkVGF4OwogICAgICAgIG5ldEFycltpXSA9IGVtcGxveWVlc1tpXS5uZXRQYXk7CiAgICB9CgogICAgLy8gRGlzcGxheSBzdW1tYXJ5CiAgICBwcmludGYoIlxuXG49PT09PT09PT09PT09PT09PT09PSBTVU1NQVJZIFNUQVRJU1RJQ1MgPT09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgcHJpbnRmKCJDYXRlZ29yeSAgICAgIFRPVEFMICAgICAgIEFWRyAgICAgICAgTUlOICAgICAgICBNQVhcbiIpOwogICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgcHJpbnRmKCJHcm9zcyBQYXkgICUxMC4yZiAgJTguMmYgICU4LjJmICAlOC4yZlxuIiwKICAgICAgICAgICBmaW5kVG90YWwoZ3Jvc3NBcnIsIGNvdW50KSwgZmluZEF2ZXJhZ2UoZ3Jvc3NBcnIsIGNvdW50KSwgZmluZE1pbihncm9zc0FyciwgY291bnQpLCBmaW5kTWF4KGdyb3NzQXJyLCBjb3VudCkpOwogICAgcHJpbnRmKCJTdGF0ZSBUYXggICUxMC4yZiAgJTguMmYgICU4LjJmICAlOC4yZlxuIiwKICAgICAgICAgICBmaW5kVG90YWwoc3RhdGVBcnIsIGNvdW50KSwgZmluZEF2ZXJhZ2Uoc3RhdGVBcnIsIGNvdW50KSwgZmluZE1pbihzdGF0ZUFyciwgY291bnQpLCBmaW5kTWF4KHN0YXRlQXJyLCBjb3VudCkpOwogICAgcHJpbnRmKCJGZWQgVGF4ICAgICUxMC4yZiAgJTguMmYgICU4LjJmICAlOC4yZlxuIiwKICAgICAgICAgICBmaW5kVG90YWwoZmVkQXJyLCBjb3VudCksIGZpbmRBdmVyYWdlKGZlZEFyciwgY291bnQpLCBmaW5kTWluKGZlZEFyciwgY291bnQpLCBmaW5kTWF4KGZlZEFyciwgY291bnQpKTsKICAgIHByaW50ZigiTmV0IFBheSAgICAlMTAuMmYgICU4LjJmICAlOC4yZiAgJTguMmZcbiIsCiAgICAgICAgICAgZmluZFRvdGFsKG5ldEFyciwgY291bnQpLCBmaW5kQXZlcmFnZShuZXRBcnIsIGNvdW50KSwgZmluZE1pbihuZXRBcnIsIGNvdW50KSwgZmluZE1heChuZXRBcnIsIGNvdW50KSk7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgogICAgcmV0dXJuIDA7Cn0KCi8vIEZ1bmN0aW9uIHRvIGNvbXB1dGUgc3RhdGUgdGF4IHJhdGUgYmFzZWQgb24gY29kZQpmbG9hdCBjb21wdXRlU3RhdGVUYXhSYXRlKGNoYXIgc3RhdGVbXSkKewogICAgaWYgKHN0cmNtcChzdGF0ZSwgIk1BIikgPT0gMCkgcmV0dXJuIDAuMDVmOwogICAgZWxzZSBpZiAoc3RyY21wKHN0YXRlLCAiTkgiKSA9PSAwKSByZXR1cm4gMC4wMGY7CiAgICBlbHNlIGlmIChzdHJjbXAoc3RhdGUsICJWVCIpID09IDApIHJldHVybiAwLjA2ZjsKICAgIGVsc2UgaWYgKHN0cmNtcChzdGF0ZSwgIkNBIikgPT0gMCkgcmV0dXJuIDAuMDdmOwogICAgZWxzZSByZXR1cm4gMC4wOGY7Cn0KCi8vIFN1bW1hcnkgY2FsY3VsYXRpb24gZnVuY3Rpb25zCmZsb2F0IGZpbmRUb3RhbChmbG9hdCB2YWx1ZXNbXSwgaW50IG4pCnsKICAgIGZsb2F0IHN1bSA9IDAuMGY7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICBzdW0gKz0gdmFsdWVzW2ldOwogICAgcmV0dXJuIHN1bTsKfQoKZmxvYXQgZmluZEF2ZXJhZ2UoZmxvYXQgdmFsdWVzW10sIGludCBuKQp7CiAgICByZXR1cm4gZmluZFRvdGFsKHZhbHVlcywgbikgLyBuOwp9CgpmbG9hdCBmaW5kTWluKGZsb2F0IHZhbHVlc1tdLCBpbnQgbikKewogICAgZmxvYXQgbWluID0gdmFsdWVzWzBdOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICAgICAgaWYgKHZhbHVlc1tpXSA8IG1pbikgbWluID0gdmFsdWVzW2ldOwogICAgcmV0dXJuIG1pbjsKfQoKZmxvYXQgZmluZE1heChmbG9hdCB2YWx1ZXNbXSwgaW50IG4pCnsKICAgIGZsb2F0IG1heCA9IHZhbHVlc1swXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKQogICAgICAgIGlmICh2YWx1ZXNbaV0gPiBtYXgpIG1heCA9IHZhbHVlc1tpXTsKICAgIHJldHVybiBtYXg7Cn0K