-1

私のC++プログラミングクラスでは、私は5人の従業員の給与計算機を作成することになっています。要件の1つにグローバル変数がないため、個々の関数内で変数をローカルに宣言して渡す必要があると思います。私はエラーの意味を知っていますが、私はそれらに解決策を実装する方法を知らないので、助けてください。参照渡し/値渡しのパスがパラメータでも意味をなさないかどうかはわかりませんが、doCalculations()、displayPayrollSummaryResults()、displayEmployeeResults()に関する3つのエラーが原因でコンパイルできません。 ()。ここにdoCalculations()があります。非常にC++プログラミングの新機能 - C++関数は0引数を取らない

この前にgetInputという別の関数があります。ここでempID、payrollType ....のユーザー入力を受け取り、それらをpayrollArrayに入れます。残りの配列は、この関数の計算データを格納するために使用されます。後で結果を表示するための2つ以上の関数があります(最後に完全なコードを参照してください)。 newPayroll.doCalculationsをどうするか

メインで
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; 
    } 

()( "何をここに置くには?")、私はちょうど(ダブルpayrollArray [12] [5]、int型を置くことで裁判&エラーを経る& empID ....)、C++レッスンのコンストラクタや関数プロトタイプをあまり保持していない場合は、コードのブロックが不足している可能性があります。ご協力ありがとうございました。

ここでは、プログラムの完全なコードです:ありがとうございました、お手伝いください。

#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

あなたのクラスのために勉強する本を持っていますか? –

+2

それはたくさんのコードです。私はあなたの問題を示す簡単な例を提供することをお勧めします。 – juanchopanza

+0

あなた、親切な、いくつかの基本的な概念が欠落しています。関数とメソッドの仕組みを見てみることをお勧めします。 – ScarletAmaranth

答えて

1

これは、関数の呼び出し引数が関数の定義と一致しないためです。 例:

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

あなたの定義には6つのパラメータがあります。この関数を呼び出すには引数が必要です。 しかし、その代わりに、あなたが0の引数

newPayroll.doCalculations(); 

でそれを呼び出すと、あなたのdisplayEmployeeResultsも3つのパラメータが必要です。私はあなたがC++に新しいだけでなく、プログラミングに新しいじゃない参照

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

を。 何かの前に、あなたがプログラミングの初心者であれば - プログラミングにようこそ -

世界のほとんどすべてのプログラミング言語で、関数がパラメータを必要とするときは、毎回書く必要がありますそれを呼びたい

機能がこのように見えるとき - >hello(int t) < - それを呼び出すときは、 - >hello([number here]) < - を使用します。

私はいつもあなたが店に行くように想像して、何かを買うように頼んでいます。

想像:

あなたが鍛冶屋に行き、そしてあなたのアイアンソードを作るために彼に尋ねます。

これは、要件は次のとおりです。makeIronSword(int lenght, int money, bool handle) これは、あなたが彼に言うことである:makeIronSword(5, 250, true);