qq_29120007 2015-06-18 03:36 采纳率: 0%
浏览 2041

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条回答

  • frank_20080215 2015-06-18 04:08
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿