函数不将数据存储到结构数组

function does not store data to struct array

本文关键字:结构 数组 存储 数据 函数      更新时间:2023-10-16

我有一个函数,假设根据员工类型和工作时间计算员工时间。如果管理层不分时间直接支付工资,如果工会加班费。

我有两个结构数组,一个用于员工数据,另一个用于他们的时间表。我遇到的问题是我不认为我的函数正在存储计算的数据。就像我运行打印功能时一样,我得到零。

被困在这个上面一段时间了,我试图尽我所能调试我的代码,但我没有得到任何东西,它编译没有问题。

我的问题是什么?还是问题?

C++

//*********************************************************************************************
//         Structure to hold employee ID, Name, Pay rate per hour, Employee type
//*********************************************************************************************
struct employeeRecord {
    int IDnum;    // holds employee id number
    string name;    // holds employess name
    float payRate;    // holds employee pay rate
    int empType;    // holds employee type
};
//*********************************************************************************************
//                         structure to hold time sheet
//*********************************************************************************************
struct timeSheet{
    float hoursWorked;    //hours worked
    float grossPay;    // gross pay
    float netPay;    // net pay
    float taxAmount;    // tax amount deduction
};
//*********************************************************************************************
//                               function prototype
//*********************************************************************************************
void addEmployee(employeeRecord *employee, int &index);
void addTime(timeSheet *time, employeeRecord *employee, int &index);
void calcTime(timeSheet *time, employeeRecord *employee, int &index, float taxRate);
void outTime(timeSheet *time, employeeRecord *employee, int &index);
//*********************************************************************************************
//                                 main function
//*********************************************************************************************
int main(){

    float taxRate = .15;    // taxrate on pay
    char choice;    // holds user choice option
    int index = 0; // index of array
    // create struct arrays to hold data
    employeeRecord employee[2];
    timeSheet time[2];
//*********************************************************************************************
//                      ^^^^^^not my entire main function^^^^^Can post if needed^^^^^^
//*********************************************************************************************
/*********************************************************************************************
//                    function to to calculate timesheet
//*********************************************************************************************
void calcTime(timeSheet *time, employeeRecord *employee, int &index, float taxRate){
    index = 0;    // set index back to zero to start at first array index
    float tempHours;    //temp hour hold
    float overTime;    // overTime hours
    float hoursWorked = time[index].hoursWorked;    //hours worked 
    float grossPay = time[index].grossPay;    //employes's gross pay
    float netPay = time[index].netPay;    //employes's net pay
    float taxAmount = time[index].taxAmount;    ////employes's tax deduction
    int empType = employee[index].empType;    // employee type
    float payRate = employee[index].payRate;    // employes pay rate
    for (int i=0; i < 2; i++){
        if (empType == 0){
            if(hours > 40){
                tempHours = 40;
                overTime = hoursWorked - 40;
                grossPay = (overTime * (payRate * 1.5)) + (tempHours * payRate);
                taxAmount = grossPay * taxRate;
                netPay = grossPay - taxAmount;
            }
            else{
                grossPay = hoursWorked * payRate;
                taxAmount = grossPay * taxRate;
                netPay = grossPay - taxAmount;
            }
        }
        else{
            grossPay = hoursWorked * payRate;
            taxAmount = grossPay * taxRate;
            netPay = grossPay - taxAmount;
        }
        // increase index number
        index++;
    }
}

在计算时间中,您只将内容存储在局部变量中。

    float hoursWorked = time[index].hoursWorked;    //hours worked 

这将创建一个名为 hoursWorked 的局部变量,当它超出范围时,该变量会消失,它不会创建对 time[index].hoursWorked 的快捷方式引用。您所做的所有工作都发生在这些临时当地人身上,根本不影响时间或员工。

如果将其更改为:

    float& hoursWorked = time[index].hoursWorked;    //hours worked 

这使得hoursWorked成为time[index].hoursWorked的引用或别名,因此您对它所做的任何更改实际上都会更改time[index].hoursWorked

这应该使代码按预期工作。

您是否尝试过更改函数标头以将结构作为数组指针传递?

void addTime(timeSheet *time[], employeeRecord *employee[], int &index){

该函数calcTime()仅写入本地值,这些值是结构中这些值的副本。如果要对存储的值进行操作,则应使用引用:

// Assignments to netPay will modify timesheet[i]
float& netPay = timesheet[i].netPay
// netPay is a copy.
float netPay = timesheet[i].netPay

你已经有了基础,让我们改进你已经拥有的东西。我将把你的结构重命名employeeRecord EmployeeInfo,你会看到我为什么这样做。

stdafx.h应至少具有 iostream、string 和内存,以及您需要包含的任何其他 std 库容器、方法和算法。

员工记录.h

#ifndef EMPLOYEE_RECORD_H
#define EMPLOYEE_RECORD_H
struct EmployeeInfo {
    std::string name;
    unsigned    ID;
    unsigned    type;
    float       payRate;
}; // EmployeeInfo
struct TimeSheet {
    float hoursWorked;
    float grossPay;
    float netPay;
    float taxAmount;
}; // TimeSheet
class EmployeeRecord {
public:
    static const float m_fTaxRate;
    static const float m_fFullTimeHours;
    static const float m_fOverTimeRate;
    enum EmployeeType {
        ET_MANAGEMENT = 1,
        ET_UNION,
    }; // EmployeeType
private:
    std::shared_ptr<EmployeeInfo> m_pEmployeeInfo;
    std::shared_ptr<TimeSheet>    m_pTimeSheet;
public:
    EmployeeRecord();
    explicit EmployeeRecord( const std::string& strName );
    EmployeeRecord( const std::string& strName, const unsigned id );
    EmployeeRecord( const std::string& strName, const unsigned id, const EmployeeType type );
    EmployeeRecord( const std::string& strName, const unsigned id, const EmployeeType type, const float payRate );
    EmployeeRecord( const std::string& strName, const unsigned id, const EmployeeType type, const float payRate, const float hoursWorked );
    EmployeeRecord(const std::string& strName, const unsigned id, const unsigned type);
    EmployeeRecord(const std::string& strName, const unsigned id, const unsigned type, const float payRate);
    EmployeeRecord(const std::string& strName, const unsigned id, const unsigned type, const float payRate, const float hoursWorked);
    explicit EmployeeRecord( const EmployeeInfo& info );
    EmployeeRecord( const EmployeeInfo&, const float hours );
    ~EmployeeRecord();
    // To set Individual Parameters To The Employee Info Struct
    void setName( const std::string& strName );
    void setId( const unsigned id );
    void setType( const EmployeeType type );
    void setType( const unsigned type );
    void setPayRate( const float rate );
    // To Set A Fully Predefined EmployeeInfo
    void setEmployeeInfo( const EmployeeInfo& info );
    // To Retrieve Individual Parameters From EmpolyeeInfo
    std::string     getName() const;
    unsigned        getId() const;
    float           getPayRate() const;
    EmployeeType    getEmployeeType() const;
    unsigned        getEmployeeUType() const;
    // To Retrieve An Entire EmployeeInfo
    EmployeeInfo    getEmployeeInfo() const;
    // To Add Individual Parameters To The TimeSheet Struct
    void setHoursWorked( const float hours );
    // Calculate Values In Time Sheet
    void calculateWages();
    // To Get Individual Parameters From Time Sheet
    float getHoursWorked() const;
    float getGrossPay() const;
    float getNetPay() const;
    float getTaxAmount() const;
    // Retrieve An Entire Employee TimeSheet
    TimeSheet getTimeSheet() const;
}; // EmployeeRecord
#endif // EMPLOYEE_RECORD_H

员工记录.cpp

#include "stdafx.h"
#include "EmployeeRecord.h"
const float EmployeeRecord::m_fTaxRate = 0.15f;
const float EmployeeRecord::m_fFullTimeHours = 40.0f;
const float EmployeeRecord::m_fOverTimeRate = 1.5f;
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord() :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    // m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name    = std::string();
    m_pEmployeeInfo->ID      = 0;
    m_pEmployeeInfo->type    = 0;
    m_pEmployeeInfo->payRate = 0.0f;
    m_pTimeSheet = std::make_shared<TimeSheet>();
    //m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked  = 0.0f;
    m_pTimeSheet->grossPay     = 0.0f;
    m_pTimeSheet->netPay       = 0.0f;
    m_pTimeSheet->taxAmount    = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord( const std::string& name ) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    //m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name     = name;
    m_pEmployeeInfo->ID       = 0;  
    m_pEmployeeInfo->type     = 0;
    m_pEmployeeInfo->payRate  = 0.0f;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    //m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked = 0.0f;
    m_pTimeSheet->grossPay    = 0.0f;
    m_pTimeSheet->netPay      = 0.0f;
    m_pTimeSheet->taxAmount   = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord( const std::string& name, const unsigned id ) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    //m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name    = name;
    m_pEmployeeInfo->ID      = id;  
    m_pEmployeeInfo->type    = 0;
    m_pEmployeeInfo->payRate = 0.0f;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    //m_pTimeSheet.reset(new TimeSheet);
    m_pTimeSheet->hoursWorked = 0.0f;
    m_pTimeSheet->grossPay    = 0.0f;
    m_pTimeSheet->netPay      = 0.0f;
    m_pTimeSheet->taxAmount   = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord( const std::string& name, const unsigned id, const EmployeeType type ) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    //m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name    = name;
    m_pEmployeeInfo->ID      = id;
    m_pEmployeeInfo->type    = static_cast<unsigned>( type );
    m_pEmployeeInfo->payRate = 0.0f;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    //m_pTimeSheet.reset(new TimeSheet);
    m_pTimeSheet->hoursWorked = 0.0f;
    m_pTimeSheet->grossPay    = 0.0f;
    m_pTimeSheet->netPay      = 0.0f;
    m_pTimeSheet->taxAmount   = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord( const std::string& name, const unsigned id, const EmployeeType type, float rate ) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeRecord
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    //m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name    = name;
    m_pEmployeeInfo->ID      = id;
    m_pEmployeeInfo->type    = static_cast<unsigned>( type );
    m_pEmployeeInfo->payRate = rate;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    // m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked = 0.0f;
    m_pTimeSheet->grossPay    = 0.0f;
    m_pTimeSheet->netPay      = 0.0f;
    m_pTimeSheet->taxAmount   = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord(const std::string& name, const unsigned id, const EmployeeType type, const float rate, const float hours) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo 
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    // m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name    = name;
    m_pEmployeeInfo->ID      = id;
    m_pEmployeeInfo->type    = static_cast<unsigned>( type );
    m_pEmployeeInfo->payRate = rate;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    // m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked = hours;
    m_pTimeSheet->grossPay    = 0.0f;
    m_pTimeSheet->netPay      = 0.0f;
    m_pTimeSheet->taxAmount   = 0.0f;
    // Since We Have Enough Data Calculate Wages & Taxes Here
    calculateWages();
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord(const std::string& name, const unsigned id, const unsigned type) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    //m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name = name;
    m_pEmployeeInfo->ID = id;
    m_pEmployeeInfo->type = type;
    m_pEmployeeInfo->payRate = 0.0f;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    //m_pTimeSheet.reset(new TimeSheet);
    m_pTimeSheet->hoursWorked = 0.0f;
    m_pTimeSheet->grossPay = 0.0f;
    m_pTimeSheet->netPay = 0.0f;
    m_pTimeSheet->taxAmount = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord(const std::string& name, const unsigned id, const unsigned type, float rate) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeRecord
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    //m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name = name;
    m_pEmployeeInfo->ID = id;
    m_pEmployeeInfo->type = type;
    m_pEmployeeInfo->payRate = rate;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    // m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked = 0.0f;
    m_pTimeSheet->grossPay = 0.0f;
    m_pTimeSheet->netPay = 0.0f;
    m_pTimeSheet->taxAmount = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord(const std::string& name, const unsigned id, const unsigned type, const float rate, const float hours) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo 
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>();
    // m_pEmployeeInfo.reset( new EmployeeInfo );
    m_pEmployeeInfo->name = name;
    m_pEmployeeInfo->ID = id;
    m_pEmployeeInfo->type = type;
    m_pEmployeeInfo->payRate = rate;
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    // m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked = hours;
    m_pTimeSheet->grossPay = 0.0f;
    m_pTimeSheet->netPay = 0.0f;
    m_pTimeSheet->taxAmount = 0.0f;
    // Since We Have Enough Data Calculate Wages & Taxes Here
    calculateWages();
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord( const EmployeeInfo& info ) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>( info );
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    //m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked = 0.0f;
    m_pTimeSheet->grossPay    = 0.0f;
    m_pTimeSheet->netPay      = 0.0f;
    m_pTimeSheet->taxAmount   = 0.0f;
} // EmployeeRecord
// ----------------------------------------------------------------------------
// EmployeeRecord()
EmployeeRecord::EmployeeRecord( const EmployeeInfo& info, const float hours ) :
m_pEmployeeInfo( nullptr ),
m_pTimeSheet( nullptr ),
m_bCalcWagesHasBeenCalled( false ) {
    // EmployeeInfo
    m_pEmployeeInfo = std::make_shared<EmployeeInfo>( info );
    // TimeSheet
    m_pTimeSheet = std::make_shared<TimeSheet>();
    // m_pTimeSheet.reset( new TimeSheet );
    m_pTimeSheet->hoursWorked = hours;
    m_pTimeSheet->grossPay = 0.0f;
    m_pTimeSheet->netPay = 0.0f;
    m_pTimeSheet->taxAmount = 0.0f;
    // Since We Have Enough Data Calculate Wages & Taxes Here
    calculateWages();
} // EmployeeRecord
// ----------------------------------------------------------------------------
// ~EmployeeRecord()
EmployeeRecord::~EmployeeRecord() {
    m_pEmployeeInfo.reset();
    m_pEmployeeInfo = nullptr;
    m_pTimeSheet.reset();
    m_pTimeSheet = nullptr;
} // ~EmployeeRecord
// ----------------------------------------------------------------------------
// setName()
void EmployeeRecord::setName( const std::string& name ) {
    m_pEmployeeInfo->name = name;
} // setName
// ----------------------------------------------------------------------------
// setId()
void EmployeeRecord::setId( unsigned id ) {
    m_pEmployeeInfo->ID = id;
} // setId
// ----------------------------------------------------------------------------
// setType()
void EmployeeRecord::setType( const EmployeeType type ) {
    if ( m_bCalcWagesHasBeenCalled ) {
        if ( m_pEmployeeInfo->type != static_cast<unsigned>( type ) ) { 
            m_pEmployeeInfo->type = static_cast<unsigned>( type );
            calculateWages();
        }
    } else {
        m_pEmployeeInfo->type = static_cast<unsigned>( type );
    }
} // setType
// ----------------------------------------------------------------------------
// setType()
void EmployeeRecord::setType( const unsigned type ) {
    if ( m_bCalcWagesHasBeenCalled ) {
        if ( m_pEmployeeInfo->type != type ) {
            m_pEmployeeInfo->type = type;
            calculateWages();
        }
    } else {
        m_pEmployeeInfo->type = type;
    }
} // setType
// ----------------------------------------------------------------------------
// setPayRate()
void EmployeeRecord::setPayRate( const float rate ) {
    if ( m_bCalcWagesHasBeenCalled ) {
        if ( m_pEmployeeInfo->payRate != rate ) {
            m_pEmployeeInfo->payRate = rate;
            calculateWages();
        }
    } else {
        m_pEmployeeInfo->payRate = rate;
    }
} // setPayRate
// ----------------------------------------------------------------------------
// setEmployeeInfo()
void EmployeeRecord::setEmployeeInfo( const EmployeeInfo& info ) {
    if ( nullptr == m_pEmployeeInfo ) {
        m_pEmployeeInfo = std::make_shared<EmployeeInfo>( info );
    } else {
        m_pEmployeeInfo.reset();
        m_pEmployeeInfo = std::make_shared<EmployeeInfo>( info );
    }
} // setEmployeeInfo
// ----------------------------------------------------------------------------
// getName()
std::string EmployeeRecord::getName() const {
    return m_pEmployeeInfo->name;
} // getName
// ----------------------------------------------------------------------------
// getId()
unsigned EmployeeRecord::getId() const {
    return m_pEmployeeInfo->ID;
} // getId
// ----------------------------------------------------------------------------
// getPayRate()
float EmployeeRecord::getPayRate() const {
    return m_pEmployeeInfo->payRate;
} // getPayRate
// ----------------------------------------------------------------------------
// getEmployeeType()
EmployeeRecord::EmployeeType EmployeeRecord::getEmployeeType() const {
    return static_cast<EmployeeType>( m_pEmployeeInfo->type );
} // getEmployeeType
// ----------------------------------------------------------------------------
// getEmployeeUType()
unsigned EmployeeRecord::getEmployeeUType() const {
    return m_pEmployeeInfo->type;
} // getEmployeeUType
// ----------------------------------------------------------------------------
// getEmployeeInfo
EmployeeInfo EmployeeRecord::getEmployeeInfo() const {
    return *m_pEmployeeInfo.get();
} // getEmployeeInfo
// ----------------------------------------------------------------------------
// setHoursWorked()
void EmployeeRecord::setHoursWorked( const float hours ) {
    if ( m_bCalcWagesHasBeenCalled ) {
        if ( m_pTimeSheet->hoursWorked != hours ) {
            m_pTimeSheet->hoursWorked = hours;
            calculateWages();
        }
    } else {
        m_pTimeSheet->hoursWorked = hours;
    }
} // setHoursWorked
// ----------------------------------------------------------------------------
// calculateWages()
void EmployeeRecord::calculateWages() {
    // Error Cases
    if ( m_pEmployeeInfo == nullptr ) {
        std::cout << "Error: m_pEmployeeInfo = nullptr; not enough information to calculate wages and taxes." << std::endl;
        return;
    }
    if ( m_pEmployeeInfo->payRate == 0.0f ) {
        std::cout << "Error: payRate = " << m_pEmployeeInfo->payRate << " can not caculate wages and taxes." << std::endl;
        return;
    }
    if ( m_pEmployeeInfo->type == 0 ) {
        std::cout << "Error: EmployeeType = " << m_pEmployeeInfo->type << " can not determine which pay scale to use." << std::endl;
        return;
    }   
    // Warning Cases
    if ( m_pEmployeeInfo->name.empty() ) {
        std::cout << "Warning: It is possible to calculate wages and taxes, but no name available to assign it to." << std::endl;
    }
    if ( m_pEmployeeInfo->ID == 0 || m_pEmployeeInfo->ID == -1 ) {
        std::cout << "Warning: It is possible to calculate wages and taxes, but current employeeID is invalid." << std::endl;
    }
    if ( m_pTimeSheet->hoursWorked == 0 ) {
        std::cout << "Warning: hours worked = " << m_pTimeSheet->hoursWorked << " it is possible that this employee worked 0 hours." << std::endl;
    }
    switch ( static_cast<EmployeeType>( m_pEmployeeInfo->type ) ) {
        case ET_MANAGEMENT: {
            m_pTimeSheet->grossPay  = m_pEmployeeInfo->payRate * m_pTimeSheet->hoursWorked;
            m_pTimeSheet->taxAmount = m_pTimeSheet->grossPay * m_fTaxRate;
            m_pTimeSheet->netPay    = m_pTimeSheet->grossPay - m_pTimeSheet->taxAmount;
            break;
        }
        case ET_UNION: {
            float overTimeHours = 0.0f;
            if ( m_pTimeSheet->hoursWorked > m_fFullTimeHours ) {
                overTimeHours = m_pTimeSheet->hoursWorked - m_fFullTimeHours;
            }
            m_pTimeSheet->grossPay  = (m_pEmployeeInfo->payRate * m_fFullTimeHours) + (overTimeHours * m_fOverTimeRate);
            m_pTimeSheet->taxAmount = m_pTimeSheet->grossPay * m_fTaxRate;
            m_pTimeSheet->netPay    = m_pTimeSheet->grossPay - m_pTimeSheet->taxAmount;
            break;
        }
    }
    m_bCalcWagesHasBeenCalled = true;
} // calculateWages
// ----------------------------------------------------------------------------
// getHoursWorked()
float EmployeeRecord::getHoursWorked() const {
    return m_pTimeSheet->hoursWorked;
} // getHoursWorked
// ----------------------------------------------------------------------------
// getGrossPay()
float EmployeeRecord::getGrossPay() const {
    return m_pTimeSheet->grossPay;
} // getGrossPay
// ----------------------------------------------------------------------------
// getNetPay()
float EmployeeRecord::getNetPay() const {
    return m_pTimeSheet->netPay;
} // getNetPay
// ----------------------------------------------------------------------------
// getTaxAmount()
float EmployeeRecord::getTaxAmount() const {
    return m_pTimeSheet->taxAmount;
} // getTaxAmount
// ----------------------------------------------------------------------------
// getTimeSheet()
TimeSheet EmployeeRecord::getTimeSheet() const {
    return *m_pTimeSheet.get();
} // getTimeSheet

此类有几个构造函数:一个是默认的,它将创建一个空实例,稍后需要通过传入单个字段或传入所需的结构来填充该实例。它有部分构造函数,其余的必须在以后填写。它有几个完整的构造函数,如果成功构造,它们将自动调用该方法来计算工资和税款。以下是一些设置函数,它们将检查是否已调用calculateWages()以及传递的值是否存在差异,如果两种情况都为 true,那么它将更新该字段并再次调用calculateWages(),如果没有,它只会添加值。