2 qq 29120007 qq_29120007 于 2015.06.18 11:36 提问

C++类公司人员管理 运行报错
c++

#include
#include
using namespace std;
/*class Data
{
int year;
int month;
int day;
public:
void setyear(int year){ this->year=year; }void setmonth(int month){ this->month=month ; }void setday(int day){ this->day=day; }void getyear(){ cout << year; }
void getmonth(){ cout << month; }void getday( ){ cout << day; }
};*/
class employee
{
protected:
char name; //姓名
int individualEmpNo; //个人编号
int grade; //级别
float accumPay; //月薪总额
static int employeeNo; //本公司职员编号目前最大值
//Data data;
public:
employee(); //构造函数
~employee(); //析构函数
virtual void pay() = 0; //计算月薪函数(纯虚函数)
virtual void promote(int increment);
//升级函数(虚函数)
virtual void displayStatus() = 0;
//显示人员信息(纯虚函数)
};
class technician :public employee //兼职技术人员类
{
private:
float hourlyRate; //每小时酬金
int workHours; //当月工作时数
public:
technician(); //构造函数
void promote(int); //升级函数
void pay(); //计算月薪函数
void displayStatus(); //显示人员信息
};
class salesman :virtual public employee //兼职推销员类
{
protected:
float CommRate; //按销售额提取酬金的百分比
float sales; //当月销售额
public:
salesman(); //构造函数
void promote(int); //升级函数
void pay(); //计算月薪函数
void displayStatus(); //显示人员信息
};
class manager :virtual public employee //经理类
{
protected:
float monthlyPay; //固定月薪数
public:
manager(); //构造函数
void promote(int); //升级函数
void pay(); //计算月薪函数
void displayStatus(); //显示。人员信息
};
class salesmanager :public manager, public salesman
//销售经理类
{
public:
salesmanager(); //构造函数
void promote(int); //升级函数'
void pay(); //计算月薪函数
void displayStatus(); //显示人员信息
};
int employee::employeeNo = 1000;
//员工编号基数为
employee::employee( )
{
char namestr[50];
//输人雇员姓名时首先临时存放在namestr中
cout << "请输入下一个雇员的姓名:";
cin >> namestr; getchar();
name = new char[strlen(namestr) + 1];
//动态申请用于存放姓名的内存空间
strcpy_s(name,51, namestr); //将临时存放的姓名复制到name
/*int y, m, d;
cout << "请输入该雇员的生日" << endl;
cin >> y;
data.setyear(y);
cin >> m;
data.setmonth(m);
cin >> d;
data.setday(d);
/
individualEmpNo = employeeNo++;
//新输入的员工,其编号为目前最大编号加l
grade = 1; //级别初值为l
accumPay = 0.0; //月薪总额初值为
}
employee::~employee()
{
delete name;
//在析构函数中删除为存放姓名动态分配的内存空间
}
void employee::promote(int increment)
{
grade += increment; //升级,提升的级数由increment指定
}
technician::technician()
{
hourlyRate = 100; //每小时酬金元
}
void technician::promote(int)
{
employee::promote(2); //调用基类的升级函数,升级
}
void technician::pay()
{
cout << "请输入" << name << "本月的工作时数:";
cin >> workHours;
accumPay = hourlyRate*workHours;//计算月薪,按小时计酬
cout << "兼职技术人员" << name << "编号"
<< individualEmpNo << "本月工资" << accumPay << endl;
}
void technician::displayStatus()
{
cout << "兼职技术人员" << name << "编号"
<< individualEmpNo << "级别为" << grade
<< "级,已付本月工资" << accumPay;
/*cout << "出生日期为:";
data.getyear(); data.getmonth(); data.getday();*/
}
salesman::salesman()
{
CommRate = 0.04; //销售提成比例%
}
void salesman::promote(int)
{
employee::promote(0); //调用基类的升级函数,升级
}
void salesman::pay()
{
cout << "请输人" << name << "本月的销售额:";
cin >> sales;
accumPay = sales*CommRate; //月薪二销售提成
cout << "推销员" << name << "编号" << individualEmpNo
<< "本月工资" << accumPay << endl;
}
void salesman::displayStatus()
{
cout << "推销员" << name << "编号" << individualEmpNo
<< "级别为" << grade << "级,已付本月工资"
<< accumPay;
/*cout << "出生日期为:";
data.getyear(); data.getmonth(); data.getday();*/
}
manager::manager()
{
monthlyPay = 8000; //固定月薪元
}
void manager::promote(int)
{
employee::promote(3); //调用基类的升级函数,升级
}
void manager::pay()
{
accumPay = monthlyPay; //月薪总额即固定月薪数
cout << "经理" << name << "编号" << individualEmpNo
<< "本月工资" << accumPay << endl;
}
void manager::displayStatus()
{
cout << "经理" << name << "编号" << individualEmpNo
<< "级别为" << grade << "级,已付本月工资"
<< accumPay;
/*cout << "出生日期为:";
data.getyear(); data.getmonth(); data.getday();*/
}
salesmanager::salesmanager()
{
monthlyPay = 5000;
CommRate = 0.005;
}
void salesmanager::promote(int)
{
employee::promote(2); //调用基类的升级函数,升级
}
void salesmanager::pay()
{
cout << "请输入" << employee::name
<< "所管辖部门本月的销售总额:";
cin >> sales;
accumPay = monthlyPay + CommRate*sales;
//月薪二固定月薪+销售提成
cout << "销售经理" << name << "编号" << individualEmpNo
<< "本月工资" << accumPay << endl;
}
void salesmanager::displayStatus()
{
cout << "销售经理" << name << "编号" << individualEmpNo
<< "级别为" << grade << "级,已付本月工资"
<< accumPay;
/*cout << "出生日期为:";
data.getyear(); data.getmonth(); data.getday();*/
}
int main()
{
manager m1;
technician t1;
salesmanager sm1;
salesman s1;
employee emp[4] = { &m1, &t1, &sm1, &s1 };
//用指针数组的各元素存放各对象的地址
int i;
for (i = 0; i<4; i++)
{ /
依次调用各派生类对象的成员函数,完成各自不同的升
级、计算月薪、显示信息功能。*/
emp[i]->promote(0);
emp[i]->pay();
emp[i]->displayStatus();
}

return 0;

}

一运行 输入姓名之后就报错~我看半天了 都觉得挺对啊 求大神指点

4个回答

ycg514230
ycg514230   Rxr 2015.06.18 12:08

代码太多了,一下也不好定位,建议你用VS单步调试看看是什么问题吧

lx624909677
lx624909677   Ds   Rxr 2015.06.18 12:09

在输入姓名的地方添加一个断点,然后载入完姓名后回到代码中,按F10走下一步,看看是哪里出错了

lx624909677
lx624909677 回复qq_29120007: 在输入姓名的地方按F9设置断点,然后F5运行程序,输入完姓名后会回到断点处,然后按F10调试
2 年多之前 回复
qq_29120007
qq_29120007 用的VS2013 调试的看不懂呀- -
2 年多之前 回复
cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.06.18 19:03

最开始那两个#include引入的是谁啊。。

frank_20080215
frank_20080215   2015.06.18 12:08

咳,怎么有些属性不用类变量,静态Static?

lx624909677
lx624909677 用什么类型的变量取决于这个变量存什么,静态的和非静态的也取决于应用的场景,这些使用都没有规定说是必须的
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片