2014-04-07 20 views
0

我做我的程序如下:我不斷收到-2作爲我的更新工資

1)寫出與姓名和工資作爲員工的對象類名爲Employee類定義。該類包含兩個成員函數:構造函數和允許程序爲數據成員分配值的函數。

2)將兩個成員函數添加到Employee類。一個成員函數應該允許任何使用僱員對象的程序查看工資數據成員的內容。另一個成員函數應該允許程序查看員工姓名數據成員的內容。

3)將另一個成員函數添加到Employeeclass。成員函數應根據程序使用該對象提供的提高百分比來計算員工對新薪水的對象。在計算加權之前,成員函數應驗證加註百分比大於或等於零。如果提高百分比小於零,則成員函數應顯示錯誤消息。

4)編寫一個主函數,該函數將創建一個員工對象數組,向對象賦值,顯示所有對象的名稱和當前工資,詢問用戶提高百分比,然後計算並顯示所有對象的新薪水對象。

不過,我收到-2作爲我的新的工資後,我輸入的數據從鍵盤。我想另外一雙眼睛可以看到我不能做的事情,並且非常感謝有人能伸出援助之手,或者至少引導我走向正確的方向。也許這是一個邏輯錯誤,或者我的聲明有問題。感謝您的時間。

#include <iostream> 
#include <cstdlib> 
#include <string> 

using namespace std; 



class EMPLOYEE 
{ 
public: 
    EMPLOYEE();// 
    EMPLOYEE(string name, int salary);// 


public: 
    string name;//name to be input 
    int salary;//salary to be input 
    int percentage_raise; 
    int updated_salary; 



public: 
int enter_values(); 
int output_values(); 
int NEW_SALARY(); 


}; 


//default constructor 
EMPLOYEE::EMPLOYEE() 
{ 
    name = ""; 
    salary = 0; 
} 

//constructor with name/salary variables 
EMPLOYEE::EMPLOYEE(string NAME, int SALARY) 
{ 
    name= NAME; 
    salary= SALARY; 
} 

//name and salary to be input... 
int EMPLOYEE::enter_values() 
{ cout<<"Enter name and salary: "; 
    cin>> name; 
    cin>>salary; 


    return 0; 
} 

//output 

int EMPLOYEE::output_values() 
{ cout<<"Name: "<<name<<endl; 
    cout<<"Salary: "<<salary<<endl; 

    return 0; 
} 


// 
int EMPLOYEE::NEW_SALARY() 
{ 

    if (percentage_raise >= 0) 
    { int updated_salary; 

     int raise= (salary *percentage_raise)/100; 
    updated_salary += raise; 

} 

else if(percentage_raise< 0) 
{ cout<<"Error Message"<<endl; 

} 

return 0; 
} 



int main() 
{ 
    EMPLOYEE employees[100]; 
    EMPLOYEE percent_to_be_raised; 


    int i; 
    for(i =0 ;i<100 ; i++) 
    { employees[i]=EMPLOYEE(); 
    employees[i].enter_values(); 
    employees[i].name; 
    employees[i].salary; 
    // employees[i].NEW_SALARY(); 
    employees[i].output_values(); 



cout<<"How much should the salary be raised by?"<<endl; 
     cin>>percent_to_be_raised.percentage_raise; 

    cout<<"-----------------------------"<<endl; 

    cout<<employees[i].name <<"'s new salary is "<<percent_to_be_raised.updated_salary<<endl; 


    } 








} 
+0

請調試程序來縮小[詢問這裏]之前發生了什麼功問心無愧錯誤代碼(http://stackoverflow.com/help/dont-ask)! –

+1

這裏有幾件事要修復。如果下面的答案不能指導OP,那麼我將刪除它。 –

+1

@CPlusPlusOOAandD OP應該遵循我的建議,並逐步修復所有錯誤。你的答案可能會導致置於由OP評論無盡的後續問題: -/... –

回答

1

請注意,OP編碼風格約定用於協助OP。我知道類,成員函數和類數據成員的正確命名約定(例如,請參閱長頸鹿隊隊長的更多答案)。

的內幕:

int EMPLOYEE::NEW_SALARY() 
{ 

    if (percentage_raise >= 0) 
    { int updated_salary; 

     int raise= (salary *percentage_raise)/100; 
     updated_salary += raise; 

    } 
} // added this to close the function properly 

有一個局部聲明的變量,這是相同類型的同名public訪問數據成員。這裏有什麼意圖?


最有可能的應該像這樣編碼:

int EMPLOYEE::NEW_SALARY() 
{ 

    if (percentage_raise >= 0) 
    { 

     int raise = (salary *percentage_raise)/100; 
     updated_salary += raise; 

    } 
} // added this to close the function properly 


有設計考慮其所有類成員的數據公開,以及具有一定百分比的整數。從上面的計算看來,百分比數字只允許一個,兩個,三個等的值。如果加薪是3.75%,班級應該怎麼做?

構造函數必須將所有類數據成員設置爲有意義的東西。例如,percentage_raiseupdated_salary變量將被忽略。最有可能的默認構造函數已經被更新爲:

//default constructor 
EMPLOYEE::EMPLOYEE() 
{ 
    name = ""; 
    salary = 0; 
    percentage_raise = 0; 
    updated_salary = 0; 
} 


名稱和薪水的構造函數,必須得更新。它應該看起來像(使用OP發佈的樣式慣例):

//constructor with name/salary variables 
EMPLOYEE::EMPLOYEE(string NAME, int SALARY) 
{ 
    name = NAME; 
    salary = SALARY; 
    percentage_raise = 0; 
    updated_salary = salary; 
} 
+1

OP的示例中永遠不會調用NEW_SALARY()。 –

+0

@CaptainGiraffe它在for的主體中被註釋掉了。 –

1

您需要重新編寫它。

幾個要點:

EMPLOYEE percent_to_be_raised; 

完全大錯特錯。該任務指出,此計算應在員工成員函數中完成。即應該執行加註

Employee alfred; 
std::cin>> alfred.salary; 
double raise; 
std::cin>> raise; 
alfred.raise_salary(raise); // this is what the task asks for. 

使用命名約定。

Employee 

適用於帶有大寫的類名約定的C++類。 EMPLOYEE不是;這看起來像一個宏名稱。

成員函數通常與非大寫 僱員:: new_salary(the_salary)開始;

按照你提供課程材料的例子。

當然

employees[i].name; 
employees[i].salary; 

沒有做任何事情。請仔細閱讀您的代碼,並從您不明白的第一個地方開始。

相關問題