1. Print the following heading at the top of the output page: Miser Corporation Payroll

2. Read an unknown number of employee data records as shown below. Each group of data will contain an employee's name, hours worked, rate of page and age. A typical group of data will be:

Duck, Donald
45 3.25 51

Print the data as it is read in, together with appropriate messages (e.g., the name is... the rate of pay is... etc.).

3. For each employee, compute and print the employee's base pay, which includes overtime (paid at one and a half times the normal rate) for each hour over 40. For example, if an employee earning $20.00 per hour works for 48 hours, then she will be paid for 40 hours at her normal rate plus 8 extra hours at $30.00 (one and a half times $20.00).

4. For each employee compute the tax paid by the employee, according to this formula: If the employee is 55 years old (or order), then the employee pays tax at a rate of 50% of the base pay; if the employee is below 55, then the tax is 10% of the base pay. Print the tax and the net pay after taxes.

5. Repeat this process until you have read the last employee. You must decide how to detect the end of the data (you should explain your method in a comment).

6. Print the name and age of the oldest employee. Do the same for the youngest employee.

7. Print the name and taxes of the employee who paid the most in taxes.

8. Print an alphabetically sorted list of all the company's employees.

9. Print a list of the employees sorted by net pay.

10. After all your results have been printed, print a message saying that the payroll program is complete.

How do I go about doing this/getting organized? I have a very vague starting point drafted here:

#include <iostream>
    #include <iomanip>
    #include <fstream>
    using namespace std;
     
    struct records {
    public:
    char name;
    int hours;
    float rate;
    int age;
    float basepay;
    float tax;
    float netpay;
    };
     
    int main() {
     
    cout << "\t\t\tMiser Corporation Payroll\n" << endl;
     
    ifstream datafile; // Declare input file
    datafile.open("datafile.txt", ios::in); // Open input file
     
    // Check for error opening input file
    if (datafile.fail())
    {
    cout << "Error opening file; program halted." << endl;
    return 0;
    }
     
    records employee;
     
    datafile.read(reinterpret_cast<char *>(&employee));
    while (!datafile.eof()){
    cout << "Name:\t" << employee.name << endl;
    cout << "Hours worked:\t" << employee.hours << endl;
    cout << "Rate of pay:\t" << employee.rate << endl;
    cout << "Age:\t" << employee.age << endl;
    cout << endl;
    datafile.read(reinterpret_cast<char *>(&employee));
    }
     
    datafile.close(); // Close input file
    cout << "The payroll program is complete.";
    return 0; // Close main program function
    }

...using an example from the textbook for struct instead of class but not in an identical context, so I'm getting errors on the datafile.read lines that say "no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::read(char*)'". So... I mean I gotta say I'm not familiar with using reinterpret_cast or whatever anyway, but it seems pretty crucial. I tried switching the name variable in the struct to type char (from string), but that didn't help either. How can I remedy this? because I think I should be onto something here.

The operations after reading in the data I should be able to sufficiently figure out on my own... It's that whole major first part (steps 2-5) that's got me all confused. Help please! THank you

What's wrong with the name variable? Specifically, how would you store Donald Duck in that variable?

struct records {
public:
**char name;**
int hours;
float rate;
int age;
float basepay;
float tax;
float netpay;
};

...using an example from the textbook for struct instead of class but not in an identical context, so I'm getting errors on the datafile.read lines that say "no matching function for call to 'std::basic_ifstream >::read(char*)'". So... I mean I gotta say I'm not familiar with using reinterpret_cast or whatever anyway, but it seems pretty crucial. I tried switching the name variable in the struct to type char (from string), but that didn't help either. How can I remedy this? because I think I should be onto something here.

You're missing an input to datafile.read. The size of the structure should also be passed to the read function

Input to datafile.read? How do I do that? And how do I pass the size of the structure to the read function....? Sorry, thank you.

Oops. My bad. My reply was a little ambiguous. I meant to say you're missing a second input to datafile.read. Buty anyway, it should look like this..

datafile.read(reinterpret_cast<char *>(&employee), sizeof (struct records));

Notice the sizeof (struct records).
This article has been dead for over six months. Start a new discussion instead.