#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
#include <conio.h>
#define CLS() system("CLS");
#define CreE() p=new Employee[n];
#define Page_Count 10 // 查询全体职工时每页输出的人数
double monthlysales;
int im = 1;
class Employee // 职工基类
{
protected:
string employee_Address; // 住址
string employee_Telephone; // 联系电话
double employee_Pay; // 月薪
public:
string employee_Name; // 姓名
string employee_Birth; // 出生年月
string employee_Tech_Speciality; // 技术特长
string employee_Post; // 职位
string employee_Constellation; // 星座
string employee_Start_Work_Time; // 参与工作时间
string employee_Join_Company_Time; // 加入公司时间
int employee_Level; // 级别
string employee_Degree; // 学历
string employee_Blood_Type; // 血型
string employee_Sex; // 性别
int employee_Number; // 编号
~Employee(){};
int Add_Employee(Employee *,int); // 添加新职工信息
void Delete(Employee *,int); // 删除职工信息
void Display(); // 输出员工信息
void DisplayALL(); //输出所有员工信息时使用
void Calculate_Pay(); // 计算薪金
virtual void Promote(int increment=0); // 升级函数
string GetAddress(){return employee_Address;}
string GetTelephone(){return employee_Telephone;}
int GetPay(){return employee_Pay;}
void SetAddress(string a) {employee_Address=a;}
void SetTelephone(string a){employee_Telephone=a;}
void SetPay(double a) {employee_Pay=a;}
}*p1,*p2,*p3,*p4,*p5;
class Technician:virtual public Employee // 技术人员类
{
public:
Technician(){ monthlyPay=3000;};
double Calculate_Pay();
void Promote(int);
double Getaward(){return award;};
void SetAward(double a){award=a;};
protected:
double monthlyPay;
double award;
}a2;
class Manager:virtual public Employee // 经理类
{
public:
Manager(){monthlyPay=10000;};
double Calculate_Pay();
void Promote(int);
protected:
double monthlyPay;
}a5;
class Saleman:virtual public Employee // 销售人员类
{
public:
Saleman(){CommRate=0.01;};
double Calculate_Pay();
void Promote(int);
void SetCommRate(double);
protected:
double CommRate;
}a1;
class Technicial_Manager: public Technician, public Manager // 技术经理类
{
public:
Technicial_Manager(){monthlyPay=6000;};
double Calculate_Pay();
void Promote(int);
double Getaward(){return award;};
void SetAward(double a){award=a;};
protected:
double monthlyPay;
double award;
}a4;
class Sale_Manager : public Saleman, public Manager // 销售经理类
{
public:
Sale_Manager(){monthlyPay=4000;CommRate=0.005; };
double Calculate_Pay();
void Promote(int);
void SetCommRate(double);
protected:
double monthlyPay;
double CommRate;
}a3;
void Employee::Promote(int a) // 基类升级函数
{
employee_Level=a; }
void Technician::Promote(int a) // 技术人员类升级函数
{
Employee::Promote(a); }
void Saleman::Promote(int a) // 销售人员类升级函数
{
Employee::Promote(a); }
void Manager::Promote(int a) // 总经理类升级函数
{
Employee::Promote(a); }
void Technicial_Manager::Promote(int a) // 技术经理类升级函数
{
Employee::Promote(a); }
void Sale_Manager::Promote(int a) // 销售经理类升级函数
{
Employee::Promote(a); }
double Technician::Calculate_Pay() // 计算技术人员薪金
{
employee_Pay=monthlyPay+this->Getaward();
return employee_Pay;
}
double Saleman::Calculate_Pay() // 计算销售人员薪金
{
employee_Pay=monthlysales*CommRate;
return employee_Pay;
}
double Manager::Calculate_Pay() // 计算总经理薪金
{
employee_Pay=monthlyPay;
return employee_Pay;
}
double Technicial_Manager::Calculate_Pay() // 计算技术经理薪金
{
employee_Pay=monthlyPay+this->Getaward();
return employee_Pay;
}
double Sale_Manager::Calculate_Pay() // 计算销售经理薪金
{
employee_Pay=monthlyPay+monthlysales*CommRate;
return employee_Pay;
}
void Saleman::SetCommRate(double a) // 设置销售人员的提成百分比
{
CommRate=a; }
void Sale_Manager::SetCommRate(double a) // 设置销售经理的提成百分比
{
CommRate=a; }
void Employee::Delete(Employee *p,int n) // 删除职工信息
{
void OutNum(int);
string name;int j;
cout<<"\n"<<setw(52)<<">>>当前删除职工信息<<<\n\n";
cout<<setw(50)<<"请输入将删除职工姓名: ";
cin>>name;
int m=0;
for(int i=0;i<n;i++)
{
if(p[i].employee_Name==name)
{
cout<<"\n"<<setw(48)<<"确认职工身份(编号): "<<p[i].employee_Number<<endl;
cout<<setw(47)<<" 确认: 1 错误:0"<<endl;
cout<<setw(43)<<"请选择: ";
char ch=getche();
if(ch=='1')
{
cout<<"\n\n"<<setw(44)<<"删除成功!"<<endl;
cout<<"\n\n"<<setw(48)<<"任意键返回主菜单!";getche();CLS();
m=1;
OutNum(n-1);
if(i==0)
{
ofstream employee1("employee.dat",ios::out);
for(j=1;j<n;j++)
{
employee1<<p[j].employee_Number<<endl<<p[j].employee_Name<<endl<<p[j].employee_Sex<<endl<<p[j].employee_Post<<endl<<p[j].GetPay()<<endl<<p[j].employee_Level
<<endl<<p[j].employee_Birth<<endl<<p[j].GetTelephone()<<endl<<p[j].employee_Degree<<endl<<p[j].employee_Blood_Type<<endl<<p[j].employee_Start_Work_Time
<<endl<<p[j].employee_Join_Company_Time<<endl<<p[j].employee_Constellation<<endl<<p[j].employee_Tech_Speciality<<endl<<p[j].GetAddress()<<endl;
}
employee1.close();
}
else
{
ofstream employee2("employee.dat",ios::out);
for(j=0;j<i;j++)
{
employee2<<p[j].employee_Number<<endl<<p[j].employee_Name<<endl<<p[j].employee_Sex<<endl<<p[j].employee_Post<<endl<<p[j].GetPay()<<endl<<p[j].employee_Level
<<endl<<p[i].employee_Birth<<endl<<p[j].GetTelephone()<<endl<<p[j].employee_Degree<<endl<<p[j].employee_Blood_Type<<endl<<p[j].employee_Start_Work_Time
<<endl<<p[j].employee_Join_Company_Time<<endl<<p[j].employee_Constellation<<endl<<p[j].employee_Tech_Speciality<<endl<<p[j].GetAddress()<<endl;
}
employee2.close();
ofstream employee3("employee.dat",ios::app);
for(j=i+1;j<n;j++)
{
employee3<<p[j].employee_Number<<endl<<p[j].employee_Name<<endl<<p[j].employee_Sex<<endl<<p[j].employee_Post<<endl<<p[j].GetPay()<<endl<<p[j].employee_Level
<<endl<<p[i].employee_Birth<<endl<<p[j].GetTelephone()<<endl<<p[j].employee_Degree<<endl<<p[j].employee_Blood_Type<<endl<<p[j].employee_Start_Work_Time
<<endl<<p[j].employee_Join_Company_Time<<endl<<p[j].employee_Constellation<<endl<<p[j].employee_Tech_Speciality<<endl<<p[j].GetAddress()<<endl;
}
employee3.close();
}
break;
}
if(ch=='0') {cout<<endl;continue;}
if(ch!='0'&&ch!='1') cout<<"\n\n\n"<<setw(48)<<"输入有误取消删除!";cout<<"\n\n"<<setw(48)<<"任意键返回主菜单!";m=1;getche();CLS();break;
}
}
if(m==0) {cout<<"\n"<<setw(52)<<"无符合条件职工,删除失败!"<<endl;cout<<"\n\n"<<setw(49)<<"任意键返回主菜单!";getche();CLS();}
}
void Employee::Display() // 输出职工信息
{
cout<<" 职工信息如下:"<<endl;
cout<<" 编号:"<<employee_Number<<endl;
cout<<" 姓名:"<<employee_Name<<endl;
cout<<" 性别:"<<employee_Sex<<endl;
cout<<" 职位:"<<employee_Post<<endl;
cout<<" 出生年月:"<<employee_Birth<<endl;
cout<<" 学历:"<<employee_Degree<<endl;
cout<<" 血型:"<<employee_Blood_Type<<endl;
cout<<" 级别:"<<employee_Level<<endl;
cout<<" 参加工作时间:"<<employee_Start_Work_Time<<endl;
cout<<" 接入本公司时间:"<<employee_Join_Company_Time<<endl;
cout<<" 星座:"<<employee_Constellation<<endl;
cout<<" 技术特长:"<<employee_T