我一直收到-2作为我的最新工资

时间:2014-04-07 21:55:39

标签: c++ arrays function class constructor

我正在使用我的程序执行以下操作:

  
    

1)为名为Employee的类编写类定义,其名称和工资作为员工对象。该类包含两个成员函数:构造函数和允许程序将值赋给数据成员的函数。

         

2)向Employee类添加两个成员函数。一个成员函数应该允许任何使用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;


   }








}

2 个答案:

答案 0 :(得分:1)

请注意,OP编码样式约定用于协助OP。我知道类,成员函数和类数据成员的正确命名约定(例如,请参阅Captain Giraffe的答案以获取更多信息)。

内部:

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%,那该课应该做什么?

构造函数必须将ALL类数据成员设置为有意义的内容。例如,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 :(得分: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不是;这看起来像一个宏名称。

会员功能通常以非大写字母开头     Employee :: new_salary(the_salary);

按照课程资料中提供的示例进行操作。

当然

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

什么都不做。请详细检查您的代码,并从您不了解的第一个地点开始。