//********************************************************
//
// Assignment 6 - Structures
//
// Name: Fisher Brown
//
// Class: C Programming, Spring 2025
//
// Date: March 9th 2025
//
// Description: Program which determines overtime and
// gross pay for a set of employees with outputs sent
// to standard output (the screen).
//
// Call by reference design
//
//********************************************************
#include <stdio.h>
#define SIZE 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
struct employee {
long clockNumber;
float wageRate;
float hours;
float overtimeHrs;
float grossPay;
} ;
void getHours( struct employee employeeData[ ] , int theSize) ;
void calculateOvertime( struct employee employeeData[ ] , int theSize) ;
void calculateGrossPay( struct employee employeeData[ ] , int theSize) ;
void printHeader( void ) ;
void printEmp( struct employee employeeData[ ] , int theSize) ;
int main( ) {
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 }
} ;
getHours( employeeData, SIZE) ;
calculateOvertime( employeeData, SIZE) ;
calculateGrossPay( employeeData, SIZE) ;
printHeader( ) ;
printEmp( employeeData, SIZE) ;
return 0 ;
}
void getHours( struct employee employeeData[ ] , int theSize) {
for ( int i = 0 ; i < theSize; ++ i) {
printf ( "\n Enter hours worked by emp # %06li: " , employeeData
[ i
] .
clockNumber ) ; scanf ( "%f" , & employeeData
[ i
] .
hours ) ; }
}
void calculateOvertime( struct employee employeeData[ ] , int theSize) {
for ( int i = 0 ; i < theSize; ++ i) {
if ( employeeData[ i] .hours > STD_HOURS) {
employeeData[ i] .overtimeHrs = employeeData[ i] .hours - STD_HOURS;
} else {
employeeData[ i] .overtimeHrs = 0 ;
}
}
}
void calculateGrossPay( struct employee employeeData[ ] , int theSize) {
for ( int i = 0 ; i < theSize; ++ i) {
float normalPay = ( employeeData[ i] .hours - employeeData[ i] .overtimeHrs ) * employeeData[ i] .wageRate ;
float overtimePay = employeeData[ i] .overtimeHrs * ( employeeData[ i] .wageRate * OT_RATE) ;
employeeData[ i] .grossPay = normalPay + overtimePay;
}
}
void printHeader( void ) {
printf ( "\n \n *** Pay Calculator ***\n " ) ; printf ( "\n Clock# Wage Hours OT Gross\n " ) ; printf ( "------------------------------------------------\n " ) ; }
void printEmp( struct employee employeeData[ ] , int theSize) {
for ( int i = 0 ; i < theSize; ++ i) {
printf ( "\n %06li %6.2f %6.1f %6.1f %8.2f" , employeeData[ i] .clockNumber , employeeData[ i] .wageRate , employeeData[ i] .hours ,
employeeData[ i] .overtimeHrs , employeeData[ i] .grossPay ) ;
}
}
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyBBc3NpZ25tZW50IDYgLSBTdHJ1Y3R1cmVzCi8vCi8vIE5hbWU6IEZpc2hlciBCcm93bgovLwovLyBDbGFzczogQyBQcm9ncmFtbWluZywgU3ByaW5nIDIwMjUKLy8KLy8gRGF0ZTogTWFyY2ggOXRoIDIwMjUKLy8KLy8gRGVzY3JpcHRpb246IFByb2dyYW0gd2hpY2ggZGV0ZXJtaW5lcyBvdmVydGltZSBhbmQgCi8vIGdyb3NzIHBheSBmb3IgYSBzZXQgb2YgZW1wbG95ZWVzIHdpdGggb3V0cHV0cyBzZW50IAovLyB0byBzdGFuZGFyZCBvdXRwdXQgKHRoZSBzY3JlZW4pLgovLwovLyBDYWxsIGJ5IHJlZmVyZW5jZSBkZXNpZ24KLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKI2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgNQojZGVmaW5lIFNURF9IT1VSUyA0MC4wCiNkZWZpbmUgT1RfUkFURSAxLjUKCnN0cnVjdCBlbXBsb3llZSB7CiAgICBsb25nIGNsb2NrTnVtYmVyOwogICAgZmxvYXQgd2FnZVJhdGU7CiAgICBmbG9hdCBob3VyczsKICAgIGZsb2F0IG92ZXJ0aW1lSHJzOwogICAgZmxvYXQgZ3Jvc3NQYXk7Cn07Cgp2b2lkIGdldEhvdXJzKHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbXSwgaW50IHRoZVNpemUpOwp2b2lkIGNhbGN1bGF0ZU92ZXJ0aW1lKHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbXSwgaW50IHRoZVNpemUpOwp2b2lkIGNhbGN1bGF0ZUdyb3NzUGF5KHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbXSwgaW50IHRoZVNpemUpOwp2b2lkIHByaW50SGVhZGVyKHZvaWQpOwp2b2lkIHByaW50RW1wKHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbXSwgaW50IHRoZVNpemUpOwoKaW50IG1haW4oKSB7CiAgICBzdHJ1Y3QgZW1wbG95ZWUgZW1wbG95ZWVEYXRhW1NJWkVdID0gewogICAgICAgIHsgOTg0MDEsIDEwLjYwLCAwLCAwLCAwIH0sCiAgICAgICAgeyA1MjY0ODgsIDkuNzUsIDAsIDAsIDAgfSwKICAgICAgICB7IDc2NTM0OSwgMTAuNTAsIDAsIDAsIDAgfSwKICAgICAgICB7IDM0NjQ1LCAxMi4yNSwgMCwgMCwgMCB9LAogICAgICAgIHsgMTI3NjE1LCA4LjM1LCAwLCAwLCAwIH0KICAgIH07CgogICAgZ2V0SG91cnMoZW1wbG95ZWVEYXRhLCBTSVpFKTsKICAgIGNhbGN1bGF0ZU92ZXJ0aW1lKGVtcGxveWVlRGF0YSwgU0laRSk7CiAgICBjYWxjdWxhdGVHcm9zc1BheShlbXBsb3llZURhdGEsIFNJWkUpOwogICAgcHJpbnRIZWFkZXIoKTsKICAgIHByaW50RW1wKGVtcGxveWVlRGF0YSwgU0laRSk7CgogICAgcmV0dXJuIDA7Cn0KCnZvaWQgZ2V0SG91cnMoc3RydWN0IGVtcGxveWVlIGVtcGxveWVlRGF0YVtdLCBpbnQgdGhlU2l6ZSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGVTaXplOyArK2kpIHsKICAgICAgICBwcmludGYoIlxuRW50ZXIgaG91cnMgd29ya2VkIGJ5IGVtcCAjICUwNmxpOiAiLCBlbXBsb3llZURhdGFbaV0uY2xvY2tOdW1iZXIpOwogICAgICAgIHNjYW5mKCIlZiIsICZlbXBsb3llZURhdGFbaV0uaG91cnMpOwogICAgfQp9Cgp2b2lkIGNhbGN1bGF0ZU92ZXJ0aW1lKHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbXSwgaW50IHRoZVNpemUpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhlU2l6ZTsgKytpKSB7CiAgICAgICAgaWYgKGVtcGxveWVlRGF0YVtpXS5ob3VycyA+IFNURF9IT1VSUykgewogICAgICAgICAgICBlbXBsb3llZURhdGFbaV0ub3ZlcnRpbWVIcnMgPSBlbXBsb3llZURhdGFbaV0uaG91cnMgLSBTVERfSE9VUlM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW1wbG95ZWVEYXRhW2ldLm92ZXJ0aW1lSHJzID0gMDsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgY2FsY3VsYXRlR3Jvc3NQYXkoc3RydWN0IGVtcGxveWVlIGVtcGxveWVlRGF0YVtdLCBpbnQgdGhlU2l6ZSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGVTaXplOyArK2kpIHsKICAgICAgICBmbG9hdCBub3JtYWxQYXkgPSAoZW1wbG95ZWVEYXRhW2ldLmhvdXJzIC0gZW1wbG95ZWVEYXRhW2ldLm92ZXJ0aW1lSHJzKSAqIGVtcGxveWVlRGF0YVtpXS53YWdlUmF0ZTsKICAgICAgICBmbG9hdCBvdmVydGltZVBheSA9IGVtcGxveWVlRGF0YVtpXS5vdmVydGltZUhycyAqIChlbXBsb3llZURhdGFbaV0ud2FnZVJhdGUgKiBPVF9SQVRFKTsKICAgICAgICBlbXBsb3llZURhdGFbaV0uZ3Jvc3NQYXkgPSBub3JtYWxQYXkgKyBvdmVydGltZVBheTsKICAgIH0KfQoKdm9pZCBwcmludEhlYWRlcih2b2lkKSB7CiAgICBwcmludGYoIlxuXG4qKiogUGF5IENhbGN1bGF0b3IgKioqXG4iKTsKICAgIHByaW50ZigiXG5DbG9jayMgICBXYWdlICAgSG91cnMgIE9UICAgIEdyb3NzXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKfQoKdm9pZCBwcmludEVtcChzdHJ1Y3QgZW1wbG95ZWUgZW1wbG95ZWVEYXRhW10sIGludCB0aGVTaXplKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoZVNpemU7ICsraSkgewogICAgICAgIHByaW50ZigiXG4lMDZsaSAlNi4yZiAlNi4xZiAlNi4xZiAlOC4yZiIsCiAgICAgICAgICAgICAgIGVtcGxveWVlRGF0YVtpXS5jbG9ja051bWJlciwgZW1wbG95ZWVEYXRhW2ldLndhZ2VSYXRlLCBlbXBsb3llZURhdGFbaV0uaG91cnMsCiAgICAgICAgICAgICAgIGVtcGxveWVlRGF0YVtpXS5vdmVydGltZUhycywgZW1wbG95ZWVEYXRhW2ldLmdyb3NzUGF5KTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKfQ==