C ++多态性员工项目

时间:2017-04-04 01:27:51

标签: c++

对于课程,我必须调整我上周为多态性编写的程序。上周它为员工使用了一组特定的信息,但现在我必须使用多态性以及从文件中读/写数据,我完全迷失了我应该做的事情,如果有人能够做到的话指出我正确的方向,这将是如此多的帮助。我可以发布我当前的.h和.cpp文件,看看我有什么以及我应该做的指示。

·H

#pragma once

#include <string>

using namespace std;
class Employee {
    private:
        int employeeNumber; // Employee's employee number
        string employeeName; //Employee's name
        string streetAddress; //Employee's street address
        string phoneNumber; //Employee's phone number
        double hourlyWage; //Employee's hourly wage
        double hoursWorked; //Employee's hours worked
        double netPay; //Net pay
        double grossPay; //Gross pay
    public:

Employee();
Employee(int, string, string, string, double, double);



    int getEmployeeNumber();
    void setEmployeeNumber(int);

    string getEmployeeName();
    void setEmployeeName(string);

    string getStreetAddress();
    void setStreetAddress(string);

    string getPhoneNumber();
    void setPhoneNumber(string);

    double getHourlyWage();
    void setHourlyWage(double);

    double getHoursWorked();
    void setHoursWorked(double);



double calcPay()
{
    const int OVER = 40;
    double federal = 0.20;
    double state = 0.075;
    double timeHalf = 1.5;
    double grossPay;
    double netPay;
    if (getHoursWorked() < OVER)
    {
        grossPay = getHoursWorked() * getHourlyWage();
        netPay = grossPay - (grossPay * federal) - (grossPay * state);
    }

    if (getHoursWorked() >= OVER)
    {
        grossPay = getHoursWorked() * ((getHourlyWage() * timeHalf));
        netPay = grossPay - (grossPay * federal) - (grossPay * state);

    }
    return netPay;
}




};

的.cpp

#include <iostream>
#include <string>
#include <fstream>
#include "Employee.h"
#include <iomanip>

using namespace std;

Employee::Employee()
{
    employeeNumber = 0; // Employee's employee number
    employeeName = ""; //Employee's name
    streetAddress = ""; //Employee's street address
    phoneNumber = ""; //Employee's phone number
    hourlyWage = 0; //Employee's hourly wage
    hoursWorked = 0;
    grossPay = 0;
    netPay = 0;
}


Employee::Employee(int empNum, string empName, string streetAddress,
string phoneNumber, double hourlyWage, double hoursWorked)
{

    employeeNumber = empNum;
    employeeName = empName;
    this->streetAddress = streetAddress;
    this->phoneNumber = phoneNumber;
    this->hourlyWage = hourlyWage;
    this->hoursWorked = hoursWorked;
    grossPay = 0;
    netPay = 0;
}

int Employee::getEmployeeNumber()
{
    return employeeNumber;
}

void Employee::setEmployeeNumber(int empNum)
{
    employeeNumber = empNum;
}

string Employee::getEmployeeName()
{
    return employeeName;
}

void Employee::setEmployeeName(string empName)
{
    employeeName = empName;
}


string Employee::getStreetAddress()
{
    return streetAddress;
}

void Employee::setStreetAddress(string strtAddrs)
{
    streetAddress = strtAddrs;
}

string Employee::getPhoneNumber()
{
    return phoneNumber;
}

void Employee::setPhoneNumber(string phnNum)
{
    phoneNumber = phnNum;
}

double Employee::getHourlyWage()
{
    return hourlyWage;
}

void Employee::setHourlyWage(double hrWage)
{
    hourlyWage = hrWage;
}

double Employee::getHoursWorked()
{
    return hoursWorked;
}

void Employee::setHoursWorked(double hrWorked)
{
    hoursWorked = hrWorked;
}

void printCheck(Employee ee)
{
cout << "\n\n--------------------- Fluff Shuffle Electronics -------------------------------- \n";
cout << " Pay to the order of " << ee.getEmployeeName() << "...........................$" << ee.calcPay();
cout << "\n\n United Bank of Eastern Orem \n";
cout << "------------------------------------------------------------------------------- \n";
cout << " Hours Worked: " << ee.getHoursWorked();
cout << "\n Hourly Wage: " << ee.getHourlyWage();
cout << endl << endl;

}//End of function

void read(ifstream &in)
{

    Employee employees[10];
    int counter = 0;
    while (in.read((char *)&employees[counter++], sizeof(Employee)))
    for (int i = 0; i<counter; i++)
        {
            printCheck(employees[i]);
        }
    in.close();
}

void write(ofstream &out)
{
    Instantiate your employees here first, then call their functions.
    Employee joe(37, "Joe Brown", "123 Main St.", "123-6788", 10.00,
45.00);
    printCheck(joe);
    Employee sam(21, "Sam Jones", "45 East State", "661-9000", 12.00,
30.00);
    printCheck(sam);
Employee mary(15, "Mary Smith", "12 High Street", "401-8900", 15.00, 40.00);
printCheck(mary);
out.write((char *)(&joe), sizeof(Employee));
out.write((char *)(&sam), sizeof(Employee));
out.write((char *)(&mary), sizeof(Employee));
out.close();
}

//Main function
int main()
{
    int choice;
    string filename;
    while (true)
    {
        cout << "\nThis program has two options:\n";
        cout << "1 - Create a data file, or\n";
        cout << "2 - Read data from a file and print paychecks\n";
        cout << "\n Press any other key to quit..........\n";
        cout << "Please enter <1> to create a file or <2> to print
        checks: ";
        cin >> choice;

    if (choice == 1)
    {
        cout << "Enter the file name: ";
        cin >> filename;
        ofstream out(filename);
        out.open(filename.c_str(), ios::binary);
        write(out);
    }
    else if (choice == 2)
    {
        cout << "Enter the file name: ";
        cin >> filename;
        ifstream in(filename);
        in.open(filename.c_str(), ios::binary);
        read(in);

    }
    else break;
    //Calls function to displays information


}
}//End of main

These are the instructions for the project

这是它所引用的图表

diagram

1 个答案:

答案 0 :(得分:1)

开始:创建两个派生自Employee的类:

class HourlyEmployee: public Employee
{
};

class SalariedEmployee: public Employee
{
}

并将与Houree工作相关的成员从Employee移至HourlyEmployee,然后将与Salary相关的成员添加到SalariedEmployee(WeeklySalary)。

通过这种方式(删除与每小时工作相关的属性),您可以使Employee类更加通用,可以作为其他类型员工的基础(SalariedEmployee)。

当您从Employee派生HourlyEmployee或SalariedEmployee时,您的意思是他们是员工,所以员工拥有的成员,他们将自动继承。