//********************************************************
//
// Assignment 6 - Structures
//
// Name: Jalen Tam
//
// Class: C Programming, Fall 2025
//
// Date: October 17, 2025
//
// Description: Program which determines overtime and 
// gross pay for a set of employees with outputs sent 
// to standard output (the screen).
//
// Call by Value design
//
//********************************************************
 
#include <stdio.h>
 
//constants
#define SIZE 5
#define OVT_RATE 1.5
#define STD_HOURS 40
 
//struct format
struct employee {
	long int number;
	float wage;
	float totalHours;
	float regHours;
	float ovtHours;
	float regPay;
	float ovtPay;
	float grossPay;
};
 
//function prototypes
float getHours (int clockNumber);
float getRegularHours (float totalHours);
float calculateOvtHours (float hours);	
float calculateRegPay (float regHours, float wage);
float calculateOvtPay (float ovtHours, float wage);
float calculateGrossPay (float regPay, float overtimePay);	
 
// FUNCTION getHours
// Prompt for hours worked 
// Parameters: clockNumber - Employee clock number
// Returns: Hours worked
float getHours (int clockNumber){
 
	// Initialize hours variable
	float hours;
 
	// Prompt for hours work to be input
	//printf("Enter hours worked for %06i", clockNumber);
 
	// Return hours 
	return hours;
 
}
 
// FUNCTION getRegularHours
// Calculate regular hours worked
// Parameters: totalHours - total hours worked
// Returns: Regular hours worked
float getRegularHours (float totalHours) {
	float regHours;
 
	if (totalHours > STD_HOURS) {
		regHours = 40;
	} else {
		regHours = totalHours;
	}
 
	return regHours;
 
}
 
// FUNCTION calculateOvtHours
// Calculates overtime worked 
// Parameters: hours - total hours employee worked
// Returns: Overtime horus worked
float calculateOvtHours (float hours){
	float overtime;
 
	//calculate overtime hours from total hours
	if (hours > STD_HOURS) {
		overtime = hours - STD_HOURS;
	} else {
		overtime = 0;
	}
 
	//return amount of overtime hours
	return overtime;
}
 
// FUNCTION calculateRegPay
// Calculates the regular pay of employee
// Parameters: regHours - regular hours
//			   wage - rate of pay
// Returns: regular pay
float calculateRegPay (float regHours, float wage) {
 
	float regPay;
	regPay = regHours * wage;
	return regPay;
 
}
 
// FUNCTION calculateOvtgPay
// Calculates the overtime pay of employee
// Parameters: ovtHours - overtime hours
//			   wage - rate of pay
// Returns: overtime pay
float calculateOvtPay (float ovtHours, float wage) {
 
	float ovtPay;
	ovtPay = ovtHours * wage * OVT_RATE;
	return ovtPay;
 
}
 
// FUNCTION calculateGrossPay
// Calculates the gross pay of employee.  Regular pay + overtime pay 
// Parameters: regPay - regular pay
//			   overtimPay - overtime pay
// Returns: gross pay
float calculateGrossPay (float regPay, float overtimePay) {
 
	float gross;
	gross = regPay + overtimePay;
	return gross;
 
}
 
int main(void) {
	//scruct array initialization
	struct employee emps[SIZE] = {
		{98401, 10.60, 0, 0, 0, 0, 0, 0},
		{526488, 9.75, 0, 0, 0, 0, 0, 0},
		{765349, 10.50, 0, 0, 0, 0, 0, 0},
		{34645, 12.25, 0, 0, 0, 0, 0, 0},
		{127615, 8.35, 0, 0, 0, 0, 0, 0}
	};
 
	printf("Clock#	Wage	Hours	OT	GrossPay\n"); 	printf("---------------------------------------\n");  
	for (int i =0; i < SIZE; ++i) {
		emps[i].totalHours = getHours(emps[i].number);
		emps[i].regHours = getRegularHours(emps[i].totalHours);
		emps[i].ovtHours = calculateOvtHours(emps[i].totalHours);
		emps[i].regPay = calculateRegPay(emps[i].regHours, emps[i].wage);
		emps[i].ovtPay = calculateOvtPay(emps[i].ovtHours, emps[i].wage);
		emps[i].grossPay = calculateGrossPay(emps[i].regPay, emps[i].ovtPay);
 
		printf("%06li\t %.2f\t %.2f\t %.2f\t %.2f\t\n", emps
[i
].
number, emps
[i
].
wage, emps
[i
].
totalHours, emps
[i
].
ovtHours, emps
[i
].
grossPay); 	}
	return 0;
}
 
				Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8KLy8gQXNzaWdubWVudCA2IC0gU3RydWN0dXJlcwovLwovLyBOYW1lOiBKYWxlbiBUYW0KLy8KLy8gQ2xhc3M6IEMgUHJvZ3JhbW1pbmcsIEZhbGwgMjAyNQovLwovLyBEYXRlOiBPY3RvYmVyIDE3LCAyMDI1Ci8vCi8vIERlc2NyaXB0aW9uOiBQcm9ncmFtIHdoaWNoIGRldGVybWluZXMgb3ZlcnRpbWUgYW5kIAovLyBncm9zcyBwYXkgZm9yIGEgc2V0IG9mIGVtcGxveWVlcyB3aXRoIG91dHB1dHMgc2VudCAKLy8gdG8gc3RhbmRhcmQgb3V0cHV0ICh0aGUgc2NyZWVuKS4KLy8KLy8gQ2FsbCBieSBWYWx1ZSBkZXNpZ24KLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKI2luY2x1ZGUgPHN0ZGlvLmg+CgovL2NvbnN0YW50cwojZGVmaW5lIFNJWkUgNQojZGVmaW5lIE9WVF9SQVRFIDEuNQojZGVmaW5lIFNURF9IT1VSUyA0MAoKLy9zdHJ1Y3QgZm9ybWF0CnN0cnVjdCBlbXBsb3llZSB7Cglsb25nIGludCBudW1iZXI7CglmbG9hdCB3YWdlOwoJZmxvYXQgdG90YWxIb3VyczsKCWZsb2F0IHJlZ0hvdXJzOwoJZmxvYXQgb3Z0SG91cnM7CglmbG9hdCByZWdQYXk7CglmbG9hdCBvdnRQYXk7CglmbG9hdCBncm9zc1BheTsKfTsKCi8vZnVuY3Rpb24gcHJvdG90eXBlcwpmbG9hdCBnZXRIb3VycyAoaW50IGNsb2NrTnVtYmVyKTsKZmxvYXQgZ2V0UmVndWxhckhvdXJzIChmbG9hdCB0b3RhbEhvdXJzKTsKZmxvYXQgY2FsY3VsYXRlT3Z0SG91cnMgKGZsb2F0IGhvdXJzKTsJCmZsb2F0IGNhbGN1bGF0ZVJlZ1BheSAoZmxvYXQgcmVnSG91cnMsIGZsb2F0IHdhZ2UpOwpmbG9hdCBjYWxjdWxhdGVPdnRQYXkgKGZsb2F0IG92dEhvdXJzLCBmbG9hdCB3YWdlKTsKZmxvYXQgY2FsY3VsYXRlR3Jvc3NQYXkgKGZsb2F0IHJlZ1BheSwgZmxvYXQgb3ZlcnRpbWVQYXkpOwkKCi8vIEZVTkNUSU9OIGdldEhvdXJzCi8vIFByb21wdCBmb3IgaG91cnMgd29ya2VkIAovLyBQYXJhbWV0ZXJzOiBjbG9ja051bWJlciAtIEVtcGxveWVlIGNsb2NrIG51bWJlcgovLyBSZXR1cm5zOiBIb3VycyB3b3JrZWQKZmxvYXQgZ2V0SG91cnMgKGludCBjbG9ja051bWJlcil7CgkKCS8vIEluaXRpYWxpemUgaG91cnMgdmFyaWFibGUKCWZsb2F0IGhvdXJzOwoJCgkvLyBQcm9tcHQgZm9yIGhvdXJzIHdvcmsgdG8gYmUgaW5wdXQKCS8vcHJpbnRmKCJFbnRlciBob3VycyB3b3JrZWQgZm9yICUwNmkiLCBjbG9ja051bWJlcik7CglzY2FuZigiJWYiLCAmaG91cnMpOwoJCgkvLyBSZXR1cm4gaG91cnMgCglyZXR1cm4gaG91cnM7CgkKfQoKLy8gRlVOQ1RJT04gZ2V0UmVndWxhckhvdXJzCi8vIENhbGN1bGF0ZSByZWd1bGFyIGhvdXJzIHdvcmtlZAovLyBQYXJhbWV0ZXJzOiB0b3RhbEhvdXJzIC0gdG90YWwgaG91cnMgd29ya2VkCi8vIFJldHVybnM6IFJlZ3VsYXIgaG91cnMgd29ya2VkCmZsb2F0IGdldFJlZ3VsYXJIb3VycyAoZmxvYXQgdG90YWxIb3VycykgewoJZmxvYXQgcmVnSG91cnM7CgkKCWlmICh0b3RhbEhvdXJzID4gU1REX0hPVVJTKSB7CgkJcmVnSG91cnMgPSA0MDsKCX0gZWxzZSB7CgkJcmVnSG91cnMgPSB0b3RhbEhvdXJzOwoJfQoJCglyZXR1cm4gcmVnSG91cnM7CgkKfQoKLy8gRlVOQ1RJT04gY2FsY3VsYXRlT3Z0SG91cnMKLy8gQ2FsY3VsYXRlcyBvdmVydGltZSB3b3JrZWQgCi8vIFBhcmFtZXRlcnM6IGhvdXJzIC0gdG90YWwgaG91cnMgZW1wbG95ZWUgd29ya2VkCi8vIFJldHVybnM6IE92ZXJ0aW1lIGhvcnVzIHdvcmtlZApmbG9hdCBjYWxjdWxhdGVPdnRIb3VycyAoZmxvYXQgaG91cnMpewoJZmxvYXQgb3ZlcnRpbWU7CgkKCS8vY2FsY3VsYXRlIG92ZXJ0aW1lIGhvdXJzIGZyb20gdG90YWwgaG91cnMKCWlmIChob3VycyA+IFNURF9IT1VSUykgewoJCW92ZXJ0aW1lID0gaG91cnMgLSBTVERfSE9VUlM7Cgl9IGVsc2UgewoJCW92ZXJ0aW1lID0gMDsKCX0KCQoJLy9yZXR1cm4gYW1vdW50IG9mIG92ZXJ0aW1lIGhvdXJzCglyZXR1cm4gb3ZlcnRpbWU7Cn0KCi8vIEZVTkNUSU9OIGNhbGN1bGF0ZVJlZ1BheQovLyBDYWxjdWxhdGVzIHRoZSByZWd1bGFyIHBheSBvZiBlbXBsb3llZQovLyBQYXJhbWV0ZXJzOiByZWdIb3VycyAtIHJlZ3VsYXIgaG91cnMKLy8JCQkgICB3YWdlIC0gcmF0ZSBvZiBwYXkKLy8gUmV0dXJuczogcmVndWxhciBwYXkKZmxvYXQgY2FsY3VsYXRlUmVnUGF5IChmbG9hdCByZWdIb3VycywgZmxvYXQgd2FnZSkgewoJCglmbG9hdCByZWdQYXk7CglyZWdQYXkgPSByZWdIb3VycyAqIHdhZ2U7CglyZXR1cm4gcmVnUGF5OwoJCn0KCi8vIEZVTkNUSU9OIGNhbGN1bGF0ZU92dGdQYXkKLy8gQ2FsY3VsYXRlcyB0aGUgb3ZlcnRpbWUgcGF5IG9mIGVtcGxveWVlCi8vIFBhcmFtZXRlcnM6IG92dEhvdXJzIC0gb3ZlcnRpbWUgaG91cnMKLy8JCQkgICB3YWdlIC0gcmF0ZSBvZiBwYXkKLy8gUmV0dXJuczogb3ZlcnRpbWUgcGF5CmZsb2F0IGNhbGN1bGF0ZU92dFBheSAoZmxvYXQgb3Z0SG91cnMsIGZsb2F0IHdhZ2UpIHsKCQoJZmxvYXQgb3Z0UGF5OwoJb3Z0UGF5ID0gb3Z0SG91cnMgKiB3YWdlICogT1ZUX1JBVEU7CglyZXR1cm4gb3Z0UGF5OwoJCn0KCi8vIEZVTkNUSU9OIGNhbGN1bGF0ZUdyb3NzUGF5Ci8vIENhbGN1bGF0ZXMgdGhlIGdyb3NzIHBheSBvZiBlbXBsb3llZS4gIFJlZ3VsYXIgcGF5ICsgb3ZlcnRpbWUgcGF5IAovLyBQYXJhbWV0ZXJzOiByZWdQYXkgLSByZWd1bGFyIHBheQovLwkJCSAgIG92ZXJ0aW1QYXkgLSBvdmVydGltZSBwYXkKLy8gUmV0dXJuczogZ3Jvc3MgcGF5CmZsb2F0IGNhbGN1bGF0ZUdyb3NzUGF5IChmbG9hdCByZWdQYXksIGZsb2F0IG92ZXJ0aW1lUGF5KSB7CgkKCWZsb2F0IGdyb3NzOwoJZ3Jvc3MgPSByZWdQYXkgKyBvdmVydGltZVBheTsKCXJldHVybiBncm9zczsKCn0KCmludCBtYWluKHZvaWQpIHsKCS8vc2NydWN0IGFycmF5IGluaXRpYWxpemF0aW9uCglzdHJ1Y3QgZW1wbG95ZWUgZW1wc1tTSVpFXSA9IHsKCQl7OTg0MDEsIDEwLjYwLCAwLCAwLCAwLCAwLCAwLCAwfSwKCQl7NTI2NDg4LCA5Ljc1LCAwLCAwLCAwLCAwLCAwLCAwfSwKCQl7NzY1MzQ5LCAxMC41MCwgMCwgMCwgMCwgMCwgMCwgMH0sCgkJezM0NjQ1LCAxMi4yNSwgMCwgMCwgMCwgMCwgMCwgMH0sCgkJezEyNzYxNSwgOC4zNSwgMCwgMCwgMCwgMCwgMCwgMH0KCX07CgkKCXByaW50ZigiQ2xvY2sjCVdhZ2UJSG91cnMJT1QJR3Jvc3NQYXlcbiIpOwoJcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwoJCglmb3IgKGludCBpID0wOyBpIDwgU0laRTsgKytpKSB7CgkJZW1wc1tpXS50b3RhbEhvdXJzID0gZ2V0SG91cnMoZW1wc1tpXS5udW1iZXIpOwoJCWVtcHNbaV0ucmVnSG91cnMgPSBnZXRSZWd1bGFySG91cnMoZW1wc1tpXS50b3RhbEhvdXJzKTsKCQllbXBzW2ldLm92dEhvdXJzID0gY2FsY3VsYXRlT3Z0SG91cnMoZW1wc1tpXS50b3RhbEhvdXJzKTsKCQllbXBzW2ldLnJlZ1BheSA9IGNhbGN1bGF0ZVJlZ1BheShlbXBzW2ldLnJlZ0hvdXJzLCBlbXBzW2ldLndhZ2UpOwoJCWVtcHNbaV0ub3Z0UGF5ID0gY2FsY3VsYXRlT3Z0UGF5KGVtcHNbaV0ub3Z0SG91cnMsIGVtcHNbaV0ud2FnZSk7CgkJZW1wc1tpXS5ncm9zc1BheSA9IGNhbGN1bGF0ZUdyb3NzUGF5KGVtcHNbaV0ucmVnUGF5LCBlbXBzW2ldLm92dFBheSk7CgkJCgkJcHJpbnRmKCIlMDZsaVx0ICUuMmZcdCAlLjJmXHQgJS4yZlx0ICUuMmZcdFxuIiwgZW1wc1tpXS5udW1iZXIsIGVtcHNbaV0ud2FnZSwgZW1wc1tpXS50b3RhbEhvdXJzLCBlbXBzW2ldLm92dEhvdXJzLCBlbXBzW2ldLmdyb3NzUGF5KTsKCX0KCXJldHVybiAwOwp9Cg==