Calculate gross pay
Write a C program that will calculate the gross pay of a set of employees.
WHAT YOU NEED TO DO:
The program should prompt the user to enter the number of hours each employee worked. The output should be similar to your previous homework.
The program determines the overtime hours (anything over 40 hours), the gross pay and then outputs a table in the following format. Column alignment, leading zeros in Clock#, and zero suppression in float fields is important. Use 1.5 as the overtime pay factor.
You should implement this program using the following structure to store the information for each employee.
struct employee
{
char first_name [10];
char last_name [10];
int id_number; /* use can use long int if you wish */
float wage;
float hours;
float overtime;
float gross;
struct employee *next;
};
Create a linked list of structures using the following data:
Connie Cobol 98401 10.60
Mary Apl 526488 9.75
Frank Fortran 765349 10.50
Jeff Ada 34645 12.25
Anton Pascal 127615 8.35
Unlike previous homework, you need to prompt the user for all of the above information, … and you still need to prompt for the hours worked for each employee.
Hint: Use one or two scanf statements to read in the first and last names with the %s format.
Get the data above from the terminal, and for each one:
- get dynamic memory, using malloc, for an employee node
- put the employee data in the dynamic memory node
- link the nodes with pointers in the above order
After the list pointers are in place you must get at the second and later instances of the structure by going from the first structure down the chain of list pointers.
Then, for each employee, read in the hours worked from the terminal. Do all appropriate computations, and write out the table.
You do not need an array of structures like you used in homework 6 and 7. Use the template and dynamically allocate linked list nodes as needed. Similar to the previous homework assignment:
a) Add a Total row at the end to sum up the hours, overtime, and gross columns
b) Add an Average row to print out the average of the hours, overtime, and gross columns.
Your code should work for any number of employees, and that is how the template is designed.
Tip: Use left justification to line up character array name values … for example: %-10.10s or %-10s
Remember: Use the Template!
I added comments in bold and purple below that start with TODO to indicate what needs to change.
_x000D_ #include <stdio.h>_x000D_ #include <stdlib.h> /* for malloc */_x000D_ #include <ctype.h> /* for toupper */_x000D_ _x000D_ struct employee_x000D_ {_x000D_ int id_number;_x000D_ float wage;_x000D_ _x000D_ /* TODO - Add other members */_x000D_ _x000D_ struct employee *next;_x000D_ };_x000D_
/* TODO - Add Function Prototypes as needed *//* TODO - Add Functions here as needed *//* Optional TODO - Add Challenge Functions here as needed */_x000D_ /*-----------------------------------------------------------------------------*/_x000D_ /* */_x000D_ /* FUNCTION: print_list */_x000D_ /* */_x000D_ /* DESCRIPTION: This function will print the contents of a linked */_x000D_ /* list. It will traverse the list from beginning to the */_x000D_ /* end, printing the contents at each node. */_x000D_ /* */_x000D_ /* PARAMETERS: emp1 - pointer to a linked list */_x000D_ /* */_x000D_ /* OUTPUTS: None */_x000D_ /* */_x000D_ /* CALLS: None */_x000D_ /* */_x000D_ /*-----------------------------------------------------------------------------*/_x000D_ void print_list(struct employee *emp1)_x000D_ {_x000D_ struct employee *tmp; /* tmp pointer value to current node */_x000D_ int i = 0; /* counts the nodes printed */_x000D_ _x000D_ /* Start a beginning of list and print out each value */_x000D_ /* loop until tmp points to null (remember null is 0 or false) */_x000D_ for(tmp = emp1; tmp ; tmp = tmp->next)_x000D_ {_x000D_ i++;_x000D_ _x000D_ /* TODO - print other members as well */_x000D_ printf("nEmployee ID: %6d, Wage: %8.2fn",tmp->id_number,_x000D_ tmp->wage);_x000D_ }_x000D_ _x000D_ printf("nnTotal Number of Employees = %dn", i);_x000D_ _x000D_ }_x000D_ _x000D_ /*----------------------------------------------------------------------------*/_x000D_ /* */_x000D_ /* FUNCTION: main */_x000D_ /* */_x000D_ /* DESCRIPTION: This function will prompt the user for an employee */_x000D_ /* id and wage until the user indicates they are finished. */_x000D_ /* At that point, a list of id and wages will be */_x000D_ /* generated. */_x000D_ /* */_x000D_ /* PARAMETERS: None */_x000D_ /* */_x000D_ /* OUTPUTS: None */_x000D_ /* */_x000D_ /* CALLS: print_list */_x000D_ /* */_x000D_ /*----------------------------------------------------------------------------*/_x000D_ int main ()_x000D_ {_x000D_ _x000D_ char answer[80]; /* to see if the user wants to add more employees */_x000D_ int more_data = 1; /* flag to check if another employee is to be processed */_x000D_ char value; /* gets the first character of answer */_x000D_ _x000D_ struct employee *current_ptr, /* pointer to current node */_x000D_ *head_ptr; /* always points to first node */_x000D_ _x000D_ /* Set up storage for first node */_x000D_ head_ptr = (struct employee *) malloc (sizeof(struct employee));_x000D_ current_ptr = head_ptr;_x000D_ _x000D_ while (more_data)_x000D_ {_x000D_ _x000D_ _x000D_ /* TODO - Prompt for Employee Name and Hours as well here */_x000D_ _x000D_ /* Read in Employee ID and Hourly Wage */_x000D_ printf("nEnter employee ID: ");_x000D_ scanf("%i", & current_ptr -> id_number);_x000D_ _x000D_ printf("nEnter employee hourly wage: ");_x000D_ scanf("%f", & current_ptr -> wage);/* TODO - Call Function(s) to calculate Overtime and Gross */
_x000D_ printf("Would you like to add another employee? (y/n): ");_x000D_ scanf("%s", answer);_x000D_ /* Ask user if they want to add another employee */_x000D_ if ((value = toupper(answer[0])) != 'Y')_x000D_ {_x000D_ current_ptr->next = (struct employee *) NULL;_x000D_ more_data = 0; _x000D_ }_x000D_ else_x000D_ {_x000D_ /* set the next pointer of the current node to point to the new node */_x000D_ current_ptr->next = (struct employee *) malloc (sizeof(struct employee));_x000D_ /* move the current node pointer to the new node */_x000D_ current_ptr = current_ptr->next;_x000D_ }_x000D_ } /* while */_x000D_/* TODO: Call Function(s) to determine totals and averages *//* Optional TODO: Call Challenge Functions to determine min and max values *//* print out listing of all employee id's and wages that were entered */_x000D_ print_list(head_ptr);printf ("nnEnd of programn");return (0);_x000D_ }
"You need a similar assignment done from scratch? Our qualified writers will help you with a guaranteed AI-free & plagiarism-free A+ quality paper, Confidentiality, Timely delivery & Livechat/phone Support.
Discount Code: CIPD30
Click ORDER NOW..


