用c++程序设计如下程序:

课程设计题目二:职工工资管理系统一、课程设计目的1.熟悉VisualC++6.0的集成开发环境。2.熟练掌握类、对象、构造函数和析构函数。3.熟练掌握继承和派生、多态性及... 课程设计题目二:职工工资管理系统
一、课程设计目的
1.熟悉Visual C++ 6.0的集成开发环境。
2.熟练掌握类、对象、构造函数和析构函数。
3.熟练掌握继承和派生、多态性及输入输出流的使用。
二、课程设计内容
1.程序中定义一个员工基类Employee和一个钱类Money。
员工基类中包含职工的最基本信息,如姓名、年龄、工龄、姓别、婚姻状态、等级、是否在职、工资和奖金等。
2.定义以员工基类Employee为基类派生的针对不同工作岗位的派生Worker工人类、Manager经理类和Saler销售员类。
3.定义以员工管理类EmployeeManage。
该类中包含的属性有指向员工信息的员工类数组指针、公司经理总数、公司销售人员总数和公司工人总数,完成的行为有增加、删除、修改、查询和保存员工信息,计算所有员工工资和奖金,定义系统界面。
4.设计用户界面。
***************************************************
* *
* 欢迎使用本职工信息管理系统 *
* 1.修改职工信息 2.查询职工信息 *
* 3.删除职工信息 4.添加职工信息 *
* 5.计算职工工资 6.计算职工奖金 *
* 7.保存工资信息 8.显示所有职工信息 *
* 9.退出系统 *
* *
* 请输入相应编号: *
***************************************************
三、课程设计要点提示
1.可参考的相关类定义,其中包括各个类的数据成员和成员函数。
2.员工类中,几种成员函数的定义方式。
员工的工资计算不受职工类型的影响,所以可定义在员工Employee类中。
职工的奖金由每月的工作情况确定,每种类型的员工有不同的计算方法,所以定义为纯虚函数。
print实现打印属性的功能,每种类型的职工属性不相同,需要定义为虚函数。
3.Money类中,计算工资和奖金的时候需要对该类进行各种运算,所以对Money类定义“+”和“=”运算符的重载。
4.新生成的各个派生类添加的新属性如下:
职工的Worker工人类中添加的新属性有月工作时间,完成的行为除了设置和获取属性值以外,还可以计算奖金。
Manager经理类中添加的新属性有月工作时间和部门利润,完成的行为是设置和获取各属性值以及计算奖金。
Saler销售员类中添加的新属性有销售利润,完成的行为是设置和获取新属性值以及计算奖金。
四、课程设计结果
1.提供源程序清单。
展开
 我来答
手机用户28bbe
2011-06-02 · TA获得超过7万个赞
知道大有可为答主
回答量:2.5万
采纳率:0%
帮助的人:3924万
展开全部
#include<iostream>
#include<string>
#include<fstream>
using namespace std;

const N=50; // 定义系统可录入的员工最大数值

string Ename[N];
long Enum[N];
char Esex[N];
int Eage[N];
char Emarriage[N];
int Edepart[N];
int Eposition[N];
int Edegree[50];
int Eworktime[N];
float Epay[N];

class Employee
{
public:
string Employeename;
long Employeenum;
char Employeesex;
int Employeeage;
char Employeemarriage;
int Employeedepart;
int Employeeposition;
int Employeedegree;
int Employeeworktime;
float Employeepay;

static long EmployeeMaxNum;
static float EmployeeBasePay;

void NewInfo();
void ShowInfo();
void showall();
void showdepart(int depart);
void showdegree(int degree);
void showage(int min,int max);
void shownum(long number);
void RefreshInfo();
void DeleteInfo();
float Pay(int Employeegrade);
static int MaxNum();
};

class DBOperate
{
public:
string Employeename;
long Employeenum;
char Employeesex;
int Employeeage;
char Employeemarriage;
int Employeedepart;
int Employeeposition;
int Employeedegree;
int Employeeworktime;
float Employeepay;

static long EmployeeMaxNum;
static float EmployeeBasePay;

void WriteIn(int iflag);
void ReadOut();
void RefreshMaxNum(int iflag); //i=1 or -1 or 0
};

long Employee::EmployeeMaxNum = 1000;
float Employee::EmployeeBasePay = 1500;

int Employee::MaxNum() //返回系统已经存储的人数
{
int MN = 0;
ifstream myf;
myf.open("EmployeeMaxNum.txt");
myf>>MN;
cout<<MN<<endl;
myf.close();
return MN;
}

void Employee::NewInfo() //添加新成员函数
{
cout<<"新员工姓名: ";
cin>>Employee::Employeename;

Employee::Employeenum = EmployeeMaxNum + Employee::MaxNum()+1;

cout<<"新员工性别 (F为女性,M为男性): ";
cin>>Employee::Employeesex;

cout<<"新员工年龄: ";
cin>>Employee::Employeeage;

cout<<"新员工婚姻状况(Y为已婚,N为未婚): ";
cin>>Employee::Employeemarriage;

cout<<"新员工学历,请输入相应学历的序号: "<<endl;
cout<<" [1:初中 2:高中 3:本科 4:硕士 5:博士] ";
cin>>Employee::Employeedegree;
while(Employee::Employeedegree !=1&&Employee::Employeedegree !=2&&Employee::Employeedegree !=3&&Employee::Employeedegree !=4&&Employee::Employeedegree !=5)
{
cout<<"输入有误,请重新输入:"<<endl;
cout<<" [1:初中 2:高中 3:本科 4:硕士 5:博士]";
cin>>Employee::Employeedegree;
}

cout<<"新员工所在部门,请输入相应部门的序号:"<<endl;
cout<<" [1:董事会 2:市场部 3:公关部 4:客服中心 5:信息中心] ";
cin>>Employee::Employeedepart;
while(Employee::Employeedepart !=1&&Employee::Employeedepart !=2&&Employee::Employeedepart !=3&&Employee::Employeedepart !=4&&Employee::Employeedepart!=5)
{
cout<<"输入有误,请重新输入:"<<endl;
cout<<" [1:董事会 2:市场部 3:公关部 4:客服中心 5:信息中心] ";
cin>>Employee::Employeedepart;
}

cout<<"新员工职位, 请输入相应职位的序号: "<<endl;
cout<<" [1:临时职员 2: 正式职员 3:主任 4:部门经理 5:董事长] ";
cin>>Employee::Employeeposition;
while(Employee::Employeeposition !=1&&Employee::Employeeposition !=2&&Employee::Employeeposition !=3&&Employee::Employeeposition !=4&&Employee::Employeeposition !=5)
{
cout<<"输入有误,请重新输入:"<<endl;
cout<<" [1:临时职员 2: 正式职员 3:主任 4:部门经理 5:董事长] ";
cin>>Employee::Employeeposition;
}

cout<<"新员工的工作时(不需要输入单位): ";
cin>>Employee::Employeeworktime;

Employee::Employeepay = Employee::Pay(Employee::Employeeposition);

DBOperate dbo;
dbo.ReadOut();

int MaxNum = Employee::MaxNum();

Enum[MaxNum] = Employee::Employeenum;
Ename[MaxNum] = Employee::Employeename;
Esex[MaxNum] = Employee::Employeesex;
Eage[MaxNum] = Employee::Employeeage;
Emarriage[MaxNum] = Employee::Employeemarriage;
Edegree[MaxNum] = Employee::Employeedegree;
Edepart[MaxNum] = Employee::Employeedepart;
Eposition[MaxNum] = Employee::Employeeposition;
Eworktime[MaxNum] = Employee::Employeeworktime;
Epay[MaxNum] = Employee::Employeepay;

dbo.WriteIn(1);
cout<<" 添加新成员成功!"<<endl;

return;
}

void Employee::ShowInfo() //程序主体 数据输出函数
{

int choice1,choice2,min,max;
long searchnum;
Employee e;

cout<<" 请选择查询方式:"<<endl;
cout<<"******************************************"<<endl;
cout<<"* 输出全体职工信息--------------------- 1"<<endl;
cout<<"* 按职工部门输出----------------------- 2"<<endl;
cout<<"* 按职工学历输出----------------------- 3"<<endl;
cout<<"* 按职工年龄输出----------------------- 4"<<endl;
cout<<"* 按职工编号输出----------------------- 5"<<endl;
cout<<"******************************************"<<endl;
cin>>choice1;

switch(choice1)
{
case 1: showall();break;
case 2: cout<<"请输入要查询职工的部门编号: [1:董事会 2:市场部 3:公关部 4:客服中心 5:信息中心] " ;
cin>>choice2;
e.showdepart(choice2);break;
case 3: cout<<"请输入要查询职工的学历编号: [1:初中 2:高中 3:本科 4:硕士 5:博士] ";
cin>>choice2;
e.showdegree(choice2);break;
case 4: cout<<"请输入要查询的年龄范围: ";
cout<<"最小值: ";
cin>>min;
cout<<"最大值: ";
cin>>max;
e.showage(min,max);break;
case 5: cout<<"请输入要查询的员工号: ";
cin>>searchnum;
e.shownum(searchnum);break;

default: cout<<"出错啦! "<<endl;break;

}

}

void Employee::showall() //全体员工输出函数
{ int i;
long number;
for(i=0;i<Employee::MaxNum();i++)
{
number = Enum[i];
shownum(number);
}
}

void Employee::showdepart(int depart) //按员工所在部门输出函数
{
int i;
switch(depart)
{
case 1: cout<<"董事会的成员有: >"<<endl; break;
case 2: cout<<"市场部的成员有: >"<<endl; break;
case 3: cout<<"公关部的成员有: >"<<endl; break;
case 4: cout<<"客服中心成员有: >"<<endl; break;
case 5: cout<<"信息中心成员有: >"<<endl; break;
default: cout<<"输入错误!>"<<endl; break;
}
for(i=0;i<Employee::MaxNum();i++)
{
if(Edepart[i] == depart)
{
long number = Enum[i];
shownum(number);
} else continue;

}
}

void Employee::showdegree(int degree) //按员工学历输出函数
{
int i;
switch(degree)
{
case 1:cout<<"初中学历的员工有:"<<endl;break;
case 2:cout<<"高中学历的员工有:"<<endl;break;
case 3:cout<<"本科学历的员工有:"<<endl;break;
case 4:cout<<"硕士学位的员工有:"<<endl;break;
case 5:cout<<"博士学位的员工有:"<<endl;break;
}
for(i=0;i<Employee::MaxNum();i++)
{
if(Edegree[i] == degree)
{
long number = Enum[i];
shownum(number);
} else continue;

}
}

void Employee::showage(int min,int max) //按员工年龄段输出函数
{
int i;
for(i=0;i<Employee::MaxNum();i++)
{
if(Eage[i]>=min&&Eage[i]<=max)
{
long number = Enum[i];
shownum(number);
}
else continue;
}
}

void Employee::shownum(long number) //按员工编号输出函数
{
int i;
for(i=0;i<Employee::MaxNum();i++)
{
if(Enum[i] == number)
{
cout<<"**********************************"<<endl;
cout<<"员工编号 >"<<Enum[i]<<endl;
cout<<"姓 名 >"<<Ename[i]<<endl;
cout<<"性 别 >";
if(Esex[i]=='F') cout<<"女 "<<endl;
else if(Esex[i]=='M') cout<<"男 "<<endl;
cout<<"年 龄 >"<<Eage[i]<<"岁"<<endl;
cout<<"婚姻情况 >";
if(Emarriage[i]=='Y') cout<<"已婚 "<<endl;
else if(Emarriage[i]=='N') cout<<"未婚 "<<endl;
cout<<"学 历 >";
switch (Edegree[i])
{
case 1:cout<<"初 中 "<<endl;break;
case 2:cout<<"高 中 "<<endl;break;
case 3:cout<<"本 科 "<<endl;break;
case 4:cout<<"硕 士 "<<endl;break;
case 5:cout<<"博 士 "<<endl;break;
}

cout<<"所在部门 >";
switch (Edepart[i])
{
case 1:cout<<"董事会 "<<endl;break;
case 2:cout<<"市场部 "<<endl;break;
case 3:cout<<"公关部 "<<endl;break;
case 4:cout<<"客服中心 "<<endl;break;
case 5:cout<<"信息中心 "<<endl;break;
}

cout<<"所任职务 >";
switch (Eposition[i])
{
case 1:cout<<"临时成员 "<<endl;break;
case 2:cout<<"正式员工 "<<endl;break;
case 3:cout<<"主任 "<<endl;break;
case 4:cout<<"部门经理 "<<endl;break;
case 5:cout<<"董事长 "<<endl;break;
}

cout<<"工作时长 >"<<Eworktime[i]<<"小时"<<endl;
cout<<"额定工资 >"<<Epay[i]<<"元"<<endl;
cout<<"**********************************"<<endl;
}
else continue;
}
}

void Employee::RefreshInfo() //修改员工信息的函数
{
int cNum = 1000;
DBOperate dbo;
dbo.ReadOut();
void Employee::shownum(long number);

cout<<"请输入您要修改的员工编号: >";
cin>>cNum;
int MN;
MN = Employee::MaxNum();

for(int i=0;i<MN;i++) //遍历数据文件,查找要修改的员工数据
{
if(Enum[i] == cNum)
{
Employee::shownum(cNum);

cout<<"请输入该员工的新信息: "<<endl;

cout<<"新员工姓名: "; //录入员工的新的数据,员工号保持不变
cin>>Employee::Employeename;
Ename[i] = Employee::Employeename;

cout<<"新员工性别: [F为女性,M为男性]: ";
cin>>Employee::Employeesex;
Esex[i] = Employee::Employeesex;

cout<<"新员工年龄: ";
cin>>Employee::Employeeage;
Eage[i] = Employee::Employeeage;

cout<<"新员工婚姻状况(Y为已婚,N为未婚): ";
cin>>Employee::Employeemarriage;
Emarriage[i] = Employee::Employeemarriage;

cout<<"新员工学历,请输入相应学历的序号:"<<endl;
cout<<" [1:初中 2:高中 3:本科 4:硕士 5:博士] ";
cin>>Employee::Employeedegree;
while(Employee::Employeedegree !=1&&Employee::Employeedegree !=2&&Employee::Employeedegree !=3&&Employee::Employeedegree !=4&&Employee::Employeedegree !=5)
{
cout<<"输入有误,请重新输入:"<<endl;
cout<<" [1:初中 2:高中 3:本科 4:硕士 5:博士] ";
cin>>Employee::Employeedegree;
}
Edegree[i] = Employee::Employeedegree;

cout<<"新员工所在部门,请输入相应部门的序号: "<<endl;
cout<<" [1:董事会 2:市场部 3:公关部 4:客服中心 5:信息中心] ";
cin>>Employee::Employeedepart;
while(Employee::Employeedepart !=1&&Employee::Employeedepart !=2&&Employee::Employeedepart !=3&&Employee::Employeedepart !=4&&Employee::Employeedepart!=5)
{
cout<<"输入有误,请重新输入:"<<endl;
cout<<" [1:董事会 2:市场部 3:公关部 4:客服中心 5:信息中心] ";
cin>>Employee::Employeedepart;
}
Edepart[i] = Employee::Employeedepart;

cout<<"新员工职位,请输入相应职位的序号:"<<endl;
cout<<" [1:临时职员 2: 正式职员 3:主任 4:部门经理 5:董事长] ";
cin>>Employee::Employeeposition;
while(Employee::Employeeposition !=1&&Employee::Employeeposition !=2&&Employee::Employeeposition !=3&&Employee::Employeeposition !=4&&Employee::Employeeposition !=5)
{
cout<<"输入有误,请重新输
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式