-1

在我的C++编程类中,我负责为5名员工创建工资记录器。其中一个要求是没有全局变量,因此我认为这需要我在每个单独的函数中局部声明变量并将它们传递给它们。我知道错误意味着什么,但我不知道如何实施解决方案,请帮助。我甚至不确定是否通过引用传递/按值传递甚至对参数有意义,但由于关于doCalculations(),displayPayrollSummaryResults()和displayEmployeeResults()中有3个参数的3个错误, ()。这里是我有的doCalculations()。C++编程非常新 - C++函数不需要0个参数

在调用getInput之前还有另外一个函数,其中我接收用户输入的empID,payrollType ....并将它们放入payrollArray。数组的其余部分用于存储此函数的计算数据。并在之后添加更多功能来显示结果(请参阅最后的完整代码)。

void doCalculations(
     double payrollArray[12][5], 
     int &empID, 
     char &payrollType, 
     double &hoursWorked, 
     double &payRate, 
     int &unionCode 
     ) 
    { 
     // Defeind Variables - Calculations 
     int totalEmployee; 
     double totalGrossPay; 
     double totalNetPay; 
     double highestGrossPay; 
     double lowestGrossPay; 
     double idHighestGrossPay; 
     double idLowestGrossPay; 
     double averageGrossPay; 
     double averageNetPay; 

     // - Pay Calucations 
     double regularPay; 
     double overtimePay; 
     double grossPay; 
     // - Tax Calculations 
     double stateTax; 
     double federalTax; 
     double totalTax; 
     // - Union Dues 
     double unionDues; 
     // - Net Pay 
     double netPay; 

     //Pay Calucations - Work more than 40 hours 
     if(hoursWorked > 40){ 
      regularPay = payRate * 40; 
      overtimePay = (1.5 * payRate) * (hoursWorked - 40); 
      grossPay = regularPay + overtimePay; 
     } 
     //Pay Calucations - Work less than 40 hours 
     else{ 
      regularPay = payRate * hoursWorked; 
      overtimePay = 0; 
      grossPay = regularPay; 
     } 
     //Put pay calcuations into array 
     payrollArray[4][totalEmployee] = regularPay; 
     payrollArray[5][totalEmployee] = overtimePay; 
     payrollArray[6][totalEmployee] = grossPay; 

     //Taxes Calculations 
      // State Tax Calculations 
      if(grossPay < 500) 
       stateTax = 0; 
      else if (grossPay >= 500 && grossPay <= 1000) 
       stateTax = grossPay * 0.03; 
      else if (grossPay > 1000) 
       stateTax = grossPay * 0.05; 
      // Federal Tax Calculations 
      if(grossPay < 500) 
       federalTax = 0; 
      else if (grossPay >= 500 && grossPay <= 1000) 
       federalTax = grossPay * 0.05; 
      else if (grossPay > 1000) 
       federalTax = grossPay * 0.07; 
      totalTax = stateTax + federalTax; 
     // Put Taxes into array 
     payrollArray[7][totalEmployee] = stateTax; 
     payrollArray[8][totalEmployee] = federalTax; 
     payrollArray[9][totalEmployee] = totalTax; 

     // Define Variables - Union dues 
     if (unionCode = 1) 
      unionDues = 15.00; 
     else if (unionCode = 2) 
      unionDues = 25.00; 
     else if (unionCode = 3) 
      unionDues = 35.00; 

     // Net Pay Calculation 
     netPay = grossPay - totalTax - unionDues; 

     // Put unionDues & netPay into array 
     payrollArray[10][totalEmployee] = unionDues; 
     payrollArray[11][totalEmployee] = netPay; 

     // Add 1 to totalEmployee per calculation 
     totalEmployee += 1; 

     // Perpetual Summary Data Calculation 

     // Total Gross Pay (Category 6) 
     for (int i = 0; i < totalEmployee; ++i) 
     totalGrossPay += payrollArray[6][i]; 

     // Total Net Pay (Category 11) 
     for (int i = 0; i < totalEmployee; ++i) 
     totalNetPay += payrollArray[11][i]; 

     // Find Employee ID number of highest gross pay 
      // Compare and Find higest gross pay 
      highestGrossPay = 0; // assume highest gross pay is 0 for now 
      for (int grossPay = 0; grossPay < totalEmployee; ++grossPay) 
      { 
       if (payrollArray[6][grossPay] > highestGrossPay) 
        highestGrossPay = payrollArray[6][grossPay]; // new highestGrossPay, gross pay field is at 6. 
      } 
      // Using highest gross pay to find corresponding employee ID 
      for (int id = 0; id < totalEmployee; ++ id) 
      { 
       if (payrollArray[6][id] == highestGrossPay) 
        idHighestGrossPay = payrollArray[0][id]; // the empID field is at 0, 
      } 

     // Find Employee ID number of lowest gross pay 
      // Compare and Find lowest gross pay 
      lowestGrossPay = 3150; // assume lowest gross pay is maximum of 3150 for now 
      for (int grossPay = 0; grossPay < totalEmployee; ++grossPay) 
      { 
       if (payrollArray[6][grossPay] < lowestGrossPay) 
        lowestGrossPay = payrollArray[6][grossPay]; // new lowestGrossPay, gross pay field is at 6. 
      } 
      // Using highest gross pay to find corresponding employee ID 
      for (int id = 0; id < totalEmployee; ++ id) 
      { 
       if (payrollArray[6][id] == lowestGrossPay) 
        idLowestGrossPay = payrollArray[0][id]; // the empID field is at 0, 
      } 

     // Average Gross Pay 
     averageGrossPay = totalGrossPay/totalEmployee; 
     // Average Net Pay 
     averageNetPay = totalNetPay/totalEmployee; 
    } 

在main()做什么用newPayroll.doCalculations( “放什么在这里吗?”),我只是去通过试验&误差将(双payrollArray [12] [5],诠释& empID ....),不完全保留C++课程的构造函数或函数原型,也许我缺少一些代码块?感谢您的帮助。

int main() 
{ 
    // Introduction Message 
    cout << "WELCOME - EMPLOYEE PAYROLL RECORDER" << endl; 
    cout << endl; 
    Payroll newPayroll; 
    int employeeLimit = 0; // Employee limit counter 
    char addEmployee = 'y';// Initial Yes on Add Employee 

    do{ 
     newPayroll.getInput(); 
     newPayroll.doCalculations(); 
     cout << "Would you want to continue adding employees? Enter [Y] or [y] for Yes." << endl; 
     cout << "Otherwise Press Any Other Character to Stop adding more Records" << endl; 
     cin >> addEmployee; 
     ++employeeLimit; 
    }while((addEmployee == 'y' || addEmployee == 'Y') && employeeLimit < 5); 

    cout << endl; // blank line separator 

    newPayroll.displayEmployeeResults(); 

    cout << endl; // blank line separator 

    newPayroll.displayPayrollSummaryResults(); 

    cout << endl; // blank line separator 

    system("PAUSE"); 
    return 0; 
} 

下面是程序的完整代码:谢谢,请帮助。

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 

using namespace std; 

// Payroll class definition 
class Payroll 
{ 

public: 
    /* getInput(), Function to accept and validates data, stores valid input data in arrays */ 
    void getInput() 
    { 
     int empID; 
     char payrollType; 
     double hoursWorked; 
     double payRate; 
     int unionCode; 
     int totalEmployee; 

     double payrollArray[12][5]; // Initialize a 12 rows 5 coloums array for storing payroll data. 
     char payrollTypeArray[1][5]; // Initialize a separate array for storing payrollType char data. 

     cout << "Please Enter Employee ID: " << endl; 
     cin >> empID; 
     while(empID < 100 || empID > 800){ 
     cout << "The Employee ID Entered is Invalid, Please Enter Employee ID (100 - 800): " << endl; 
     cin >> empID; 
     } 
     //put employee id into array 
     payrollArray[0][totalEmployee] = empID; 

     cout << "Please Enter payroll type: " << endl; 
     cin >> payrollType; 
     while(payrollType != 'H' && payrollType != 'h'){ 
     cout << "The Payroll Type Entered is Invalid, Please Enter Payroll Type (H or h): " << endl; 
     cin >> payrollType; 
     } 
     //put payrollType into array 
     payrollTypeArray[1][totalEmployee] = payrollType; 

     cout << "Please Enter Hours Worked: " << endl; 
     cin >> hoursWorked; 
     while(hoursWorked < 0 || hoursWorked > 60.0){ 
     cout << "The Hours Worked Entered is Invalid, Please Enter Hours Worked (0 - 60): " << endl; 
     cin >> hoursWorked; 
     } 
     //put hoursWorked into array 
     payrollArray[2][totalEmployee] = hoursWorked; 

     cout << "Please Enter Pay Rate: " << endl; 
     cin >> payRate; 
     while(payRate < 8.50 || payRate > 45.00){ 
     cout << "The Hourly Pay Rate Entered is Invalid, Please Enter Pay Rate (8.50 - 45.00): " << endl; 
     cin >> payRate; 
     } 
     //put payRate into array 
     payrollArray[3][totalEmployee] = payRate; 

     cout << "Please Enter Union Code: " << endl; 
     cin >> unionCode; 
     while(unionCode !=1 && unionCode !=2 && unionCode !=3){ 
     cout << "The Union Code Entered is Invalid, Please Enter Union Code (1, 2 or 3): " << endl; 
     cin >> unionCode; 
     } 
    } 

    /* doCalculations(), performs calculations using data sotred in input arrays, store 
     calculation results in arrays, and accumulates totals */ 
    void doCalculations(
     double payrollArray[12][5], 
     int &empID, 
     char &payrollType, 
     double &hoursWorked, 
     double &payRate, 
     int &unionCode 
     ) 
    { 
     // Defeind Variables - Calculations 
     int totalEmployee; 
     double totalGrossPay; 
     double totalNetPay; 
     double highestGrossPay; 
     double lowestGrossPay; 
     double idHighestGrossPay; 
     double idLowestGrossPay; 
     double averageGrossPay; 
     double averageNetPay; 

     // - Pay Calucations 
     double regularPay; 
     double overtimePay; 
     double grossPay; 
     // - Tax Calculations 
     double stateTax; 
     double federalTax; 
     double totalTax; 
     // - Union Dues 
     double unionDues; 
     // - Net Pay 
     double netPay; 

     //Pay Calucations - Work more than 40 hours 
     if(hoursWorked > 40){ 
      regularPay = payRate * 40; 
      overtimePay = (1.5 * payRate) * (hoursWorked - 40); 
      grossPay = regularPay + overtimePay; 
     } 
     //Pay Calucations - Work less than 40 hours 
     else{ 
      regularPay = payRate * hoursWorked; 
      overtimePay = 0; 
      grossPay = regularPay; 
     } 
     //Put pay calcuations into array 
     payrollArray[4][totalEmployee] = regularPay; 
     payrollArray[5][totalEmployee] = overtimePay; 
     payrollArray[6][totalEmployee] = grossPay; 

     //Taxes Calculations 
      // State Tax Calculations 
      if(grossPay < 500) 
       stateTax = 0; 
      else if (grossPay >= 500 && grossPay <= 1000) 
       stateTax = grossPay * 0.03; 
      else if (grossPay > 1000) 
       stateTax = grossPay * 0.05; 
      // Federal Tax Calculations 
      if(grossPay < 500) 
       federalTax = 0; 
      else if (grossPay >= 500 && grossPay <= 1000) 
       federalTax = grossPay * 0.05; 
      else if (grossPay > 1000) 
       federalTax = grossPay * 0.07; 
      totalTax = stateTax + federalTax; 
     // Put Taxes into array 
     payrollArray[7][totalEmployee] = stateTax; 
     payrollArray[8][totalEmployee] = federalTax; 
     payrollArray[9][totalEmployee] = totalTax; 

     // Define Variables - Union dues 
     if (unionCode = 1) 
      unionDues = 15.00; 
     else if (unionCode = 2) 
      unionDues = 25.00; 
     else if (unionCode = 3) 
      unionDues = 35.00; 

     // Net Pay Calculation 
     netPay = grossPay - totalTax - unionDues; 

     // Put unionDues & netPay into array 
     payrollArray[10][totalEmployee] = unionDues; 
     payrollArray[11][totalEmployee] = netPay; 

     // Add 1 to totalEmployee per calculation 
     totalEmployee += 1; 

     // Perpetual Summary Data Calculation 

     // Total Gross Pay (Category 6) 
     for (int i = 0; i < totalEmployee; ++i) 
     totalGrossPay += payrollArray[6][i]; 

     // Total Net Pay (Category 11) 
     for (int i = 0; i < totalEmployee; ++i) 
     totalNetPay += payrollArray[11][i]; 

     // Find Employee ID number of highest gross pay 
      // Compare and Find higest gross pay 
      highestGrossPay = 0; // assume highest gross pay is 0 for now 
      for (int grossPay = 0; grossPay < totalEmployee; ++grossPay) 
      { 
       if (payrollArray[6][grossPay] > highestGrossPay) 
        highestGrossPay = payrollArray[6][grossPay]; // new highestGrossPay, gross pay field is at 6. 
      } 
      // Using highest gross pay to find corresponding employee ID 
      for (int id = 0; id < totalEmployee; ++ id) 
      { 
       if (payrollArray[6][id] == highestGrossPay) 
        idHighestGrossPay = payrollArray[0][id]; // the empID field is at 0, 
      } 

     // Find Employee ID number of lowest gross pay 
      // Compare and Find lowest gross pay 
      lowestGrossPay = 3150; // assume lowest gross pay is maximum of 3150 for now 
      for (int grossPay = 0; grossPay < totalEmployee; ++grossPay) 
      { 
       if (payrollArray[6][grossPay] < lowestGrossPay) 
        lowestGrossPay = payrollArray[6][grossPay]; // new lowestGrossPay, gross pay field is at 6. 
      } 
      // Using highest gross pay to find corresponding employee ID 
      for (int id = 0; id < totalEmployee; ++ id) 
      { 
       if (payrollArray[6][id] == lowestGrossPay) 
        idLowestGrossPay = payrollArray[0][id]; // the empID field is at 0, 
      } 

     // Average Gross Pay 
     averageGrossPay = totalGrossPay/totalEmployee; 
     // Average Net Pay 
     averageNetPay = totalNetPay/totalEmployee; 
    } 




    /* displayEmployeeResults(), displays employee IDs and calculations results that are stored in arrays.*/ 
    void displayEmployeeResults(
     double payrollArray[12][5], 
     char payrollTypeArray[1][5], 
     int &totalEmployee 
     ) 
    { 
     int employeeCount; 
     int arrayDataSetw = 5; 
     int arrayTitleSetw = 12; 

     //Display Data Array 
      cout << setw(50) <<"Individual Employee Payroll Record" << endl; 
      cout << endl; 
      // Employee ID title 
      cout << setw(arrayTitleSetw) << "Employee ID"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << payrollArray[0][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Payroll Type title 
      cout << setw(arrayTitleSetw) << "Payroll Type"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << payrollTypeArray[1][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Hours Worked title 
      cout << setw(arrayTitleSetw) << "Hours Worked"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << payrollArray[2][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Pay Rate title 
      cout << setw(arrayTitleSetw) << "Pay Rate"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[3][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Regular Pay title 
      cout << setw(arrayTitleSetw) << "Regular Pay"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[4][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Overtime Pay title 
      cout << setw(arrayTitleSetw) << "Overtime Pay"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[5][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Gross Pay title 
      cout << setw(arrayTitleSetw) << "Gross Pay"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[6][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // State Tax title 
      cout << setw(arrayTitleSetw) << "State Tax"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[7][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Federal Tax title 
      cout << setw(arrayTitleSetw) << "Federal Tax"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[8][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Total Tax title 
      cout << setw(arrayTitleSetw) << "Total Tax"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[9][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Union Dues title 
      cout << setw(arrayTitleSetw) << "Union Dues"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[10][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
      // Net Pay title 
      cout << setw(arrayTitleSetw) << "Net Pay"; 
       for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount) 
       cout << setw(arrayDataSetw) << "$" << payrollArray[11][employeeCount] << setw(arrayDataSetw); 
       cout << endl; 
    } 

    /* displayPayrollSummaryResults(), displays summary totals and averages */ 
    void displayPayrollSummaryResults(
     int &totalEmployee, 
     double &totalGrossPay, 
     double &totalNetPay, 
     double &idHighestGrossPay, 
     double &highestGrossPay, 
     double &idLowestGrossPay, 
     double &lowestGrossPay, 
     double &averageGrossPay, 
     double &averageNetPay 
     ) 
    { 
     int summaryDataSetw = 47; 
     // Display Summary Data 
     cout << setw(50) <<"Employee Payroll Summary" << endl; 
     cout << endl; 
     cout << setw(summaryDataSetw) << "Total Number of Employees on record is: " << totalEmployee << endl; 
     cout << setw(summaryDataSetw) << "Total Gross Pay is: $" << totalGrossPay << endl; 
     cout << setw(summaryDataSetw) << "Total Net Pay is: $" << totalNetPay << endl; 
     cout << setw(summaryDataSetw) << "Employee with the highest gross pay: Employee #" << idHighestGrossPay << " earned $" << highestGrossPay << endl; 
     cout << setw(summaryDataSetw) << "Employee with the lowest gross pay: Employee #" << idLowestGrossPay << " earned $" << lowestGrossPay << endl; 
     cout << setw(summaryDataSetw) << "Average gross pay is: $" << averageGrossPay << endl; 
     cout << setw(summaryDataSetw) << "Average net pay is: $" << averageNetPay << endl; 

    } 
}; 

int main() 
{ 
    // Introduction Message 
    cout << "WELCOME - EMPLOYEE PAYROLL RECORDER" << endl; 
    cout << endl; 
    Payroll newPayroll; 
    int employeeLimit = 0; // Employee limit counter 
    char addEmployee = 'y';// Initial Yes on Add Employee 

    do{ 
     newPayroll.getInput(); 
     newPayroll.doCalculations(); 
     cout << "Would you want to continue adding employees? Enter [Y] or [y] for Yes." << endl; 
     cout << "Otherwise Press Any Other Character to Stop adding more Records" << endl; 
     cin >> addEmployee; 
     ++employeeLimit; 
    }while((addEmployee == 'y' || addEmployee == 'Y') && employeeLimit < 5); 

    cout << endl; // blank line separator 

    newPayroll.displayEmployeeResults(); 

    cout << endl; // blank line separator 

    newPayroll.displayPayrollSummaryResults(); 

    cout << endl; // blank line separator 

    system("PAUSE"); 
    return 0; 
} 
+6

你有一本书,从你的班学习? – 2012-04-18 06:03:55

+2

这是很多代码。我建议你提供一个简短的例子来说明你的问题。 – juanchopanza 2012-04-18 06:08:46

+0

你,先生,缺少一些基本概念。我建议你简单看看函数和方法是如何工作的。 – ScarletAmaranth 2012-04-18 06:10:03

回答

1

这是因为您函数调用的参数错误你的函数定义相匹配。 例如:

void doCalculations(
     double payrollArray[12][5], 
     int &empID, 
     char &payrollType, 
     double &hoursWorked, 
     double &payRate, 
     int &unionCode 
     ) 

是你的定义,有6个参数。你需要参数来调用这个函数。 但是相反你0参数

newPayroll.doCalculations(); 

和你displayEmployeeResults调用它也需要3个参数:

void displayEmployeeResults(
     double payrollArray[12][5], 
     char payrollTypeArray[1][5], 
     int &totalEmployee 
     ) 
1

我看到你不仅新的C++,而且新的节目。 任何东西之前,如果我是正确的,你是新来编程, - 欢迎编程 -

在世界上几乎所有的编程语言,当一个函数需要的参数,你需要的所有每次他们写你想叫它。

用外行人的话说,当一个函数看起来像这样 - >hello(int t) < - 当你想调用它时,你可以使用 - >hello([number here]) < - 。

我一直认为这就像你去商店买东西一样。

试想:

你去铁匠,并要求他做你的铁剑。

这是要求:makeIronSword(int lenght, int money, bool handle) 这是你对他说的话:makeIronSword(5, 250, true);