用C++编一个职工工资管理系统 课程设计

1、 需求分析:
公司主要有4类人员:经理、技术员、销售员、销售经理。要求存储这些人的职工号、姓名、月工资、岗位、年龄、性别等信息。
2.程序的基本功能:
1.增加、修改、删除一个职工信息。
2.显示全部职工信息。
3.按条件显示职工信息(条件有按电话号码、姓名、职称或职工号等。
4.按条件显示工资信息(职工号,职称等)。
5.查找指定金额范围的职工职称。

采纳了有追加

/*
设计:
1.采用文件方式存储所有的员工;
2.使用C++的STL库进行查找功能;
*/

#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <string>
#include <vector>
#include <algorithm>//STL查找函数
using namespace std;

#define STROEFILE "Employ.txt"//存储雇员的文本文件名

//雇员类型枚举
enum Enum_EmployType
{
EmptyEmployType,//空类型
Manager,//普通经理
Technician,//技术员
Seller,//销售员
SalesManager,//销售经理
};

//性别枚举
enum Enum_Gender
{
EmptyGender,//空类型
Male,//男
Female,//女
};

//雇员类
class Employ
{
public:
Enum_EmployType m_Type;//雇员类型枚举
int m_Number;//工号
string m_Name;//姓名
float m_Salary;//月工资
string m_Post;//岗位
int m_Age;//年龄
Enum_Gender m_Gender;//性别
public:
//无参构造函数
Employ()
{
m_Type = EmptyEmployType;
m_Number = 0;
m_Name = "";
m_Salary = 0.0;
m_Post = "";
m_Age = 0;
m_Gender = EmptyGender;
}

//拷贝构造函数
Employ(const Employ &otherData)
{
this->m_Age = otherData.m_Age;
this->m_Gender = otherData.m_Gender;
this->m_Name = otherData.m_Name;
this->m_Number = otherData.m_Number;
this->m_Post = otherData.m_Post;
this->m_Salary = otherData.m_Salary;
this->m_Type = otherData.m_Type;
}

//将字符号串转化为类对象,以便从文件中读出员工信息
void FromString(const char *inStr)
{
if ( NULL == inStr )
{
return;
}

char seps[] = "|";
char *token = NULL;
int i = 0;
token = strtok( (char *)inStr, seps );
while( token != NULL )
{
switch(i)
{
case 0://第1个字段为 雇员类型枚举
{
m_Type = (Enum_EmployType)(atoi(token));
break;
}
case 1://第2个字段为 工号
{
m_Number = atoi(token);
break;
}
case 2://第3个字段为 姓名
{
m_Name = token;
break;
}
case 3://第4个字段为 月工资
{
m_Salary = atof(token);
break;
}
case 4://第5个字段为 岗位
{
m_Post = token;
break;
}
case 5://第6个字段为 年龄
{
m_Age = atoi(token);
break;
}
case 6://第7个字段为 性别
{
m_Gender = (Enum_Gender)(atoi(token));
break;
}
}
//获取下一个字段
token = strtok( NULL, seps ); // C4996
i++;
}

}

//将本类转化为字符串,以便记录到文件,各字段之间用|(竖线)分隔
void ToStringForSave(string *outStr)
{
if ( NULL == outStr )
{
return;
}

char tmpValue[1024];//定义一个临时字符串转换不是字符串型的数据到字符串

//员工类型
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"%d",m_Type);
*outStr = tmpValue;
*outStr += "|";

//员工工号
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"%d",m_Number);
*outStr += tmpValue;
*outStr += "|";

//员工姓名
*outStr += m_Name;
*outStr += "|";

//员工月工资
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"%.2f",m_Salary);
*outStr += tmpValue;
*outStr += "|";

//员工岗位
*outStr += m_Post;
*outStr += "|";

//员工年龄
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"%d",m_Age);
*outStr += tmpValue;
*outStr += "|";

//员工性别
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"%d",m_Gender);
*outStr += tmpValue;
}
//将本类转化为字符串,以变显示在屏幕上
void ToStringForShow(string *outStr)
{
if ( NULL == outStr )
{
return;
}

char tmpValue[1024];//定义一个临时字符串转换不是字符串型的数据到字符串

//员工类型
memset(tmpValue,0x0,1024);
switch(m_Type)
{
case 0:
sprintf(tmpValue,"员工类型:空类型");
break;
case 1:
sprintf(tmpValue,"员工类型:普通经理");
break;
case 2:
sprintf(tmpValue,"员工类型:技术员");
break;
case 3:
sprintf(tmpValue,"员工类型:销售员");
break;
case 4:
sprintf(tmpValue,"员工类型:销售经理");
break;
}
*outStr = tmpValue;
*outStr += "\n";

//员工工号
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"员工工号%d",m_Number);
*outStr += tmpValue;
*outStr += "\n";

//员工姓名
*outStr += "员工姓名:";
*outStr += m_Name;
*outStr += "\n";

//员工月工资
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"员工月工资:%.2f",m_Salary);
*outStr += tmpValue;
*outStr += "\n";

//员工岗位
*outStr += "员工岗位:";
*outStr += m_Post;
*outStr += "\n";

//员工年龄
memset(tmpValue,0x0,1024);
sprintf(tmpValue,"员工年龄:%d",m_Age);
*outStr += tmpValue;
*outStr += "\n";

//员工性别
memset(tmpValue,0x0,1024);
switch(m_Gender)
{
case 0:
sprintf(tmpValue,"员工性别:保密");
break;
case 1:
sprintf(tmpValue,"员工性别:男");
break;
case 2:
sprintf(tmpValue,"员工性别:女");
break;
}
*outStr += tmpValue;

*outStr += "\n---";
}
//手动输入员工信息
void HandEnterInfo()
{
char tmpInput[1024];

fflush(stdin);
memset(tmpInput,0x0,1024);
printf("员工类型(1-普通经理,2-技术员,3-销售员,4-销售经理,其他值-无类型) = ");
scanf("%s",tmpInput);
m_Type = (Enum_EmployType)(atoi(tmpInput));

fflush(stdin);
memset(tmpInput,0x0,1024);
printf("员工工号 = ");
scanf("%s",tmpInput);
m_Number = atoi(tmpInput);

fflush(stdin);
memset(tmpInput,0x0,1024);
printf("员工姓名 = ");
scanf("%s",tmpInput);
m_Name = tmpInput;

fflush(stdin);
memset(tmpInput,0x0,1024);
printf("员工月工资 = ");
scanf("%s",tmpInput);
m_Salary = atof(tmpInput);

fflush(stdin);
memset(tmpInput,0x0,1024);
printf("员工岗位 = ");
scanf("%s",tmpInput);
m_Post = tmpInput;

fflush(stdin);
memset(tmpInput,0x0,1024);
printf("员工年龄 = ");
scanf("%s",tmpInput);
m_Age = atoi(tmpInput);

fflush(stdin);
memset(tmpInput,0x0,1024);
printf("员工性别(1-男,2-女,其他值-保密) = ");
scanf("%s",tmpInput);
m_Gender = (Enum_Gender)(atoi(tmpInput));

fflush(stdin);
}
public:
//重载赋值操作符
Employ & operator = (const Employ &otherData)
{
this->m_Age = otherData.m_Age;
this->m_Gender = otherData.m_Gender;
this->m_Name = otherData.m_Name;
this->m_Number = otherData.m_Number;
this->m_Post = otherData.m_Post;
this->m_Salary = otherData.m_Salary;
this->m_Type = otherData.m_Type;
return *this;
}
//重载等于(判断相等)操作符
//我自己定义为如果工号相等或者名字相等即为等于
bool operator == (const Employ &otherData)
{
if ( this->m_Name == otherData.m_Name || this->m_Number == otherData.m_Number )
{
return true;
}

return false;
}
};

//显示菜单的函数,返回选择项
//type为 1-表示显示主菜单
int ShowMenu()
{
printf("\t\t***************************************\n");
printf("\t\t\t员工管理系统\n");
printf("\t\t***************************************\n");
printf("\t\t1.增加员工.\n");
printf("\t\t2.修改员工信息.\n");
printf("\t\t3.删除员工信息.\n");
printf("\t\t4.显示所有员工信息.\n");
printf("\t\t5.按条件查找员工.\n");
printf("\t\t0.退出.\n\n");
fflush(stdin);
char Choose[1024];
int iChose = -1;
memset(Choose,0x0,1024);
printf("选择 = ");
scanf("%s",Choose);

try
{
iChose = atoi(Choose);
if ( iChose < 0 || iChose > 5 )
{
return ShowMenu();
}
return iChose;
}
catch(...)
{
return ShowMenu();
}
}

//将所有员工数据从文件读到内存
void ReadEmployData(vector<Employ> *pInOutEmploys)
{
if ( NULL == pInOutEmploys )
{
return;
}

pInOutEmploys->clear();

FILE *pf = fopen(STROEFILE,"rt");
if ( NULL == pf )
{
if ( 2 == errno )//文件不存在
{
pf = fopen(STROEFILE,"wt");
if ( pf == NULL )
{
perror("打开员工存储文件失败:");
return;
}
}
else
{
perror("打开员工存储文件失败:");
return;
}
}

char tmpLineData[1024];
while ( ! feof(pf) )
{
//从文件中读取所有员工信息
memset(tmpLineData,0x0,1024);
fscanf(pf,"%s\n",tmpLineData);
if ( strlen(tmpLineData) < 1 )
{
break;
}
Employ aEmploy;//定义员工对象
aEmploy.FromString(tmpLineData);//调用将字符串转换为对象的函数
pInOutEmploys->push_back(aEmploy);//将获取到的一个员工信息添加到内存中
}

fclose(pf);
}

//将所有员工数据从内存写到文件
void WriteEmployData(const vector<Employ> *pInEmploys)
{
if ( NULL == pInEmploys )
{
return;
}

FILE *pf = fopen(STROEFILE,"wt");
if ( NULL == pf )
{
perror("打开员工存储文件失败:");
return;
}

for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
Employ tmpEmploy = pInEmploys->at(i);//此时调用拷贝构造函数
string tmpLine;
tmpEmploy.ToStringForSave(&tmpLine);//将对象转换为字符串
fprintf(pf,"%s\n",tmpLine.c_str());//将字符串写到文件
}

fclose(pf);
}

//增加员工的函数
void AddEmploy(vector<Employ> *pInEmploys)
{
if ( NULL == pInEmploys )
{
return;
}

Employ tmpEmploy;
tmpEmploy.HandEnterInfo();
//查找函数调用了Employ类的==操作符
vector<Employ>::iterator found = find(pInEmploys->begin(),pInEmploys->end(),tmpEmploy);
if ( found == pInEmploys->end() )//没找到相同名字或相同工号的员工
{
pInEmploys->push_back(tmpEmploy);
}
else
{
string tmpOut;
found->ToStringForShow(&tmpOut);
printf("您输入的新员工与如下员工的姓名或工号重复,因此,不能添加您输入的员工.\n%s",tmpOut.c_str());
}
}

//显示所有员工信息函数
void ShowAllEmploy(const vector<Employ> *pInEmploys)
{
if ( NULL == pInEmploys )
{
return;
}

printf("所有员工信息如下:\n===================================================\n");
if ( pInEmploys->size() < 1 )
{
printf("暂无信息\n");
}
else
{
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
Employ tmpEmploy = pInEmploys->at(i);
string tmpStr;
tmpEmploy.ToStringForShow(&tmpStr);
printf("%s\n",tmpStr.c_str());
}
}
printf("===================================================\n");
}

//按条件查找员工(ShowInFunc为真时在本函数内部显示找到的员工并忽略pInOutFound参数,为假时不显示找到的符合条件的员工由pInOutFound参数带回)
void FindEmploy(const vector<Employ> *pInEmploys,vector<int> *pInOutFound,bool ShowInFunc)
{
if ( NULL == pInEmploys)
{
return;
}

vector<int> ForShowInThisFunc;
if ( ! ShowInFunc )
{
if ( NULL == pInOutFound )
{
return;
}
else
{
pInOutFound->clear();
}
}
else
{
pInOutFound = &ForShowInThisFunc;
}

fflush(stdin);
char Choose[1024];
int iChose = -1;
memset(Choose,0x0,1024);

while ( iChose == -1 )
{
printf("请选择条件(1-按雇员类型,2-工号,3-姓名,4-月工资,5-岗位,6-年龄,7-性别) = ");
scanf("%s",Choose);
try
{
iChose = atoi(Choose);
}
catch(...)
{
iChose = -1;
}
}

switch( iChose )
{
case 1://按雇员类型
{
printf("请选择类型(1-普通经理,2-技术员,3-销售员,4-销售经理,其他值-无类型) = ");
memset(Choose,0x0,1024);
scanf("%s",Choose);
try
{
iChose = atoi(Choose);
}
catch(...)
{
iChose = 0;
}
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
if ( pInEmploys->at(i).m_Type == iChose )
{
pInOutFound->push_back(i);
}
}
break;
}
case 2://工号
{
printf("请输入工号 = ");
memset(Choose,0x0,1024);
scanf("%s",Choose);
try
{
iChose = atoi(Choose);
}
catch(...)
{
iChose = 0;
}
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
if ( pInEmploys->at(i).m_Number == iChose )
{
pInOutFound->push_back(i);
}
}
break;
}
case 3://姓名
{
printf("请输入姓名 = ");
memset(Choose,0x0,1024);
scanf("%s",Choose);
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
if ( pInEmploys->at(i).m_Name == Choose )
{
pInOutFound->push_back(i);
}
}
break;
}
case 4://月工资
{
printf("请输入月工资 = ");
memset(Choose,0x0,1024);
scanf("%s",Choose);
float gz = 0.0;
try
{
gz = atof(Choose);
}
catch(...)
{
gz = 0.0;
}
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
if ( pInEmploys->at(i).m_Salary == gz )
{
pInOutFound->push_back(i);
}
}
break;
}
case 5://岗位
{
printf("请输入岗位 = ");
memset(Choose,0x0,1024);
scanf("%s",Choose);
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
if ( pInEmploys->at(i).m_Post == Choose )
{
pInOutFound->push_back(i);
}
}
break;
}
case 6://年龄
{
printf("请输入年龄 = ");
memset(Choose,0x0,1024);
scanf("%s",Choose);
try
{
iChose = atoi(Choose);
}
catch(...)
{
iChose = -1;
}
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
if ( pInEmploys->at(i).m_Age == iChose )
{
pInOutFound->push_back(i);
}
}
break;
}
case 7://性别
{
printf("请选择类型(1-男,2-女,其他值-保密) = ");
memset(Choose,0x0,1024);
scanf("%s",Choose);
try
{
iChose = atoi(Choose);
}
catch(...)
{
iChose = 0;
}
for ( unsigned int i = 0 ; i < pInEmploys->size() ; i++ )
{
if ( pInEmploys->at(i).m_Gender == iChose )
{
pInOutFound->push_back(i);
}
}
break;
}
}

if ( ShowInFunc )
{
printf("找到如下员工符合条件:\n=================================================\n");
if ( pInOutFound->size() < 1 )
{
printf("无员工符合.\n");
}
else
{
for ( unsigned int i = 0 ; i < pInOutFound->size() ; i++ )
{
string tmpOut;
Employ tmpEpl = pInEmploys->at(pInOutFound->at(i));
tmpEpl.ToStringForShow(&tmpOut);
printf("%s\n",tmpOut.c_str());
}
}
printf("=================================================\n");
}
}
//主函数
int main(void)
{
//所有员工数据
vector<Employ> AllEmployDatas;

//程序启动时将所有员工数据从文件读到内存
ReadEmployData(&AllEmployDatas);

int Choose = ShowMenu();
while ( 0 != Choose )
{
switch( Choose )
{
case 1://增加员工
{
AddEmploy(&AllEmployDatas);
break;
}
case 2://修改员工信息
{
vector<int> FoundEmploysIndex;
FindEmploy(&AllEmployDatas,&FoundEmploysIndex,false);
if ( FoundEmploysIndex.size() > 1 )
{
printf("暂时不支持一次修改多个员工信息,请更改查询条件查询到一个员工再修改!\n");
break;
}
else if ( FoundEmploysIndex.size() == 0 )
{
printf("没找到你想修改的员工信息,请更改查询条件查询到一个员工再修改!\n");
break;
}
int index = FoundEmploysIndex[0];
string tmpFound;
AllEmployDatas[index].ToStringForShow(&tmpFound);
printf("已找到你想修改的员工信息为:\n%s\n请重新录入此员工的信息:\n",tmpFound.c_str());
AllEmployDatas[index].HandEnterInfo();
break;
}
case 3://删除员工信息
{
vector<int> FoundEmploysIndex;
FindEmploy(&AllEmployDatas,&FoundEmploysIndex,false);
if ( FoundEmploysIndex.size() > 1 )
{
printf("暂时不支持一次删除多个员工信息,请更改查询条件查询到一个员工再删除!\n");
break;
}
else if ( FoundEmploysIndex.size() == 0 )
{
printf("没找到你想删除的员工信息,请更改查询条件查询到一个员工再删除!\n");
break;
}
int index = FoundEmploysIndex[0];
string tmpFound;
AllEmployDatas[index].ToStringForShow(&tmpFound);
printf("已找到你想删除的员工信息为:\n%s\n请确认删除此员工的信息[y/n]: = ",tmpFound.c_str());

fflush(stdin);
char Choose[1024];
memset(Choose,0x0,1024);
scanf("%s",Choose);
if ( strcmp("Y",Choose) == 0 || strcmp("y",Choose) == 0 )
{
vector<Employ>::iterator pointer = AllEmployDatas.begin()+index;
AllEmployDatas.erase(pointer);
}
break;
}
case 4://显示所有员工信息
{
ShowAllEmploy(&AllEmployDatas);
break;
}
case 5://按条件查找员工
{
FindEmploy(&AllEmployDatas,NULL,true);
break;
}
}

fflush(stdin);
printf("操作完成,按回车键继续...");
getchar();
Choose = ShowMenu();
}

//程序结束时将所有员工数据从内存写到文件
WriteEmployData(&AllEmployDatas);
//写完后清理
AllEmployDatas.clear();

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-14
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define FILENAME "staff.txt" //数据文件
/////////////////////////////////////////////
struct Staff //职工机构体
{
char CarNumber[10]; //卡号
char Name[10]; //姓名
int Month; //月份
float SPWages; //应发工资
float APWages; //实发工资
float Water; //水费
float Electrical; //电费
float Tax; //税金
};
////////////////////////////////////////////// 文件操作模块
FILE *FP; //全局文件指针
FILE * FileOpen(char FileName[]) //文件打开函数
{
FILE *fp;
if((fp=fopen(FileName,"r"))==NULL)
{
fp=fopen(FileName,"w");
cout<<"文件打开失败重新创建记录文件";
return fp;
}
fp=fopen(FileName,"r+");
return fp;
}

void FileClose(FILE *fp)
{
if(fclose(fp)==0)
cout<<"安全关闭"<<endl;
else
cout<<"文件关闭失败"<<endl;
}
////////////////////////////////////////////////
void Increase() //添加职工信息
{
FP=FileOpen(FILENAME);
Staff temp;
cout<<endl;
cout<<"请输入姓名:";
cin>>temp.Name;
cout<<"请输入卡号:";
cin>>temp.CarNumber;
cout<<"请输入月份:";
cin>>temp.Month;
cout<<"请输入应发工资:";
cin>>temp.SPWages;
cout<<"请输入水费:";
cin>>temp.Water;
cout<<"请输入电费:";
cin>>temp.Electrical;
if(temp.SPWages<=800) temp.Tax=0;
if((temp.SPWages>800.0)&&(temp.SPWages<1400.0)) temp.Tax=(temp.SPWages-800)*0.05;
if(temp.SPWages>1400)
temp.APWages=temp.SPWages-temp.Water-temp.Electrical-temp.Tax;
fwrite(&temp,sizeof(temp),1,FP);
cout<<"信息添加成功,请选择浏览工资信息选项进行查看"<<endl;
FileClose(FP);
}
//////////////////////////////////////////////
void PrintInformation() //浏览工资信息
{
FP=FileOpen(FILENAME);
rewind(FP);
Staff temp;
while(fread(&temp,sizeof(Staff),1,FP)==1)
{
cout<<"姓名:"<<temp.Name<<endl;
cout<<"卡号:"<<temp.CarNumber<<endl;
cout<<"月份:"<<temp.Month<<endl;
cout<<"应发工资:"<<temp.SPWages<<endl;
cout<<"水费:"<<temp.Water<<endl;
cout<<"电费:"<<temp.Electrical<<endl;
cout<<"税金:"<<temp.Tax<<endl;
cout<<"实发工资:"<<temp.APWages<<endl;
cout<<endl;
}
FileClose(FP);
}
//////////////////////////////////////////////////
void Statistics() //统计工资信息
{
Staff temp;
char nametemp[10];
float sum=0;
int monthstart=0,monthover=0;
cout<<"请输入统计的人员姓名:"<<endl;
cin>>nametemp;
cout<<"请输入统计时间段的起始月份(如:3)";
cin>>monthstart;
cout<<"请输入统计时间段的终止月份(如:3)";
cin>>monthover;
FP=FileOpen(FILENAME);
while(fread(&temp,sizeof(Staff),1,FP)==1)
{
if(strcmp(temp.Name,nametemp)==0)
{
if(temp.Month>=monthstart&&temp.Month<=monthover)
{
sum=sum+temp.APWages;
}
}
}
cout<<"职工"<<nametemp<<"从"<<monthstart<<"月至"<<monthover<<"月合计"<<sum<<"元。"<<endl;

}
////////////////////////////////////////////////
void NameSearch()
{
char tempname[10];
Staff temp;
cout<<endl;
cout<<"请输入要查询的职工的名称:";
cin>>tempname;
FP=FileOpen(FILENAME);
while(fread(&temp,sizeof(Staff),1,FP)==1)
{
if(strcmp(temp.Name,tempname))
{
cout<<"姓名:"<<temp.Name<<endl;
cout<<"卡号:"<<temp.CarNumber<<endl;
cout<<"月份:"<<temp.Month<<endl;
cout<<"应发工资:"<<temp.SPWages<<endl;
cout<<"水费:"<<temp.Water<<endl;
cout<<"电费:"<<temp.Electrical<<endl;
cout<<"税金:"<<temp.Tax<<endl;
cout<<"实发工资:"<<temp.APWages<<endl;
cout<<endl;
}
}
FileClose(FP);
}
int Search()
{
int Choose=0;
while(1)
{
cout<<endl;
cout<<"请选择查询方式"<<endl;
cout<<"1、按照卡号查询"<<endl;
cout<<"2、按照姓名查询"<<endl;
cout<<"0、返回上级目录"<<endl;
cout<<"请输入查询方式:"<<endl;
cin>>Choose;
switch(Choose)
{
case 1:;break;
case 2:NameSearch();break;
case 0:return 0;break;
}
}
}
//////////////////////////////////////////////
void ShowMenu() //目录显示函数
{
int Choose=0;
while(1)
{
cout<<endl;
cout<<"工资信息管理系统"<<endl;
cout<<"1、添加工资信息。"<<endl;
cout<<"2、浏览工资信息。"<<endl;
cout<<"3、统计工资信息。"<<endl;
cout<<"4、查询工资信息。"<<endl;
cout<<"0、退出系统。"<<endl;
cout<<"请输入服务类型:";
cin>>Choose;
switch(Choose)
{
case 1:Increase();break;
case 2:PrintInformation();break;
case 3:Statistics();break;
case 4:Search();break;
case 0:exit(0);break;
}
}
}
void main()
{
ShowMenu();
}
第2个回答  2011-01-14
1 #include <string>
2 #include <iostream>
3 using namespace std;
4
5 class jober
6 {
7 public:
8 virtual jober(int , string, int , string, int, string);
9 virtual ~jober();
10 virtual void insert_joberinfo()const; //增加员工信息
11 virtual void update_joberinfo()const; //更改员工信息
12 virtual void delete_joberinfo()const; //删除员工信息
13 virtual void show_joberinfo()const; //显示职工信息 按条件
14 virtual void show_jobersalaryinfo()const; //显示职工工资信息 按
15 virtual void search_jobergrade()const; //查找指定金额范围的职工
16
17 private:
18 int jober_no; //职工号
19 string jober_name; //职工姓名
20 int month_salary; //月薪
21 string job_type; //岗位
22 int jober_age; //年龄
23 string jober_gender; //性别
24
25 };
26 class manager:public jober
27 {
28 public:
29 manager(int , string, int , string, int, string,int manager_num
30 private:
31 int managernum;
32 };
33 class technichian:public jober
34 {
35 public:
36 technichian(int , string, int , string, int, string,int tech_nu
37 private:
38 int technum;
39 };
40 class sales:public jober
41 {
42 public:
43 sales(int , string, int , string, int, string,int sales_num);
44 private:
45 int salesnum;
46 };
47 class salesmanger:public jober
48 {
49 public:
50 salesmanger(int , string, int , string, int, string,int salesma
51 private:
52 int salesmangernum;
53 };
class showinfo:public manager,
55 public technichian,
56 public sales,
57 public salesmanger
58 {
59 public:
60 void showallinfo();
61 };
62 virtual jober(int joberno, string jobername, int monthsalary,
63 string jobtype, int joberage, string jobergender)
64 {
65 jober_no = joberno;
66 jober_name = jobername;
67 month_salary = monthsalary;
68 jober_type = jobtype;
69 jober_age = joberage;
70 jober_gender = jobergender;
71 }
72 virtual manger(int manager_num):jober(int, string, int, string,int ,str
73 {
74
75 }
整体框架有了