📄 salarysys.cpp
字号:
#include<iostream>
#include<string>
using namespace std;
/***************************
* 工资标准
***************************/
const int HWRMB=10; //小时工每小时工资
const int PWRMB=20; //计件工每件工资
const double CWRMBPERCENT=0.2; //销售员固定工资提成比例
/***************************
* 模式判断
***************************/
enum Lable{A,B,C,D,E,F,G,H,I,J};
void Mode(Lable &_Lable)
{
string str;
cout<<"请输入你的选择:";
cin>>str;
if(str=="1")_Lable = A;
else if(str=="2")_Lable = B;
else if(str=="3")_Lable = C;
else if(str=="4")_Lable = D;
else if(str=="5")_Lable = E;
else if(str=="6")_Lable = F;
else if(str=="7")_Lable = G;
else if(str=="8")_Lable = H;
else if(str=="9")_Lable = I;
else _Lable = J;
}
/***************************
* 雇员类
***************************/
class Employee
{
private:
int workNo;//工号
string firstName;
string lastName;
public:
Employee(int iworkNo,string cfirstName,string clastName);
~Employee();
virtual void Show();//显示员工信息
virtual double Salary()=0;//员工工资计算
virtual void ModifySpecial()=0;//不同员工特有的参数
void Modify(Lable _Lable);
int RworkNo(int workno);//工号配对
};
/****************************
* 工厂类
****************************/
class Factory
{
private:
string factoryName;
int employeeNum; //包括老板
Employee* pEmployee[1000]; // 存放工厂所有员工信息
public:
Factory(string cfactoryName);
~Factory();
void AddWorker(Lable _Lable); //增加一个员工
void DeleteWorker(int workno); //删除一个员工
void ModifyWorker(int workno); //修改员工信息
void ShowInfo(); //显示员工信息
void TotalSalary(); //计算总工资
void HighSalary(); //最高工资
void LowSalary(); //最低工资
void AverageSalary(); //平均工资
};
/******************************
* 派生的类
******************************/
class HourlyWorker:public Employee
{
private:
int Time; //小时工工作时间
public:
HourlyWorker(int time, int workno,string firstrname,string lastname);
void Show(); //显示员工信息
double Salary();
void ModifySpecial();
};
class PieceWorker:public Employee
{
private:
int Pieces; //计件工计件个数
public:
PieceWorker(int pieces, int workno,string firstrname,string lastname);
void Show(); //显示员工信息
double Salary();
void ModifySpecial();
};
class CommissionWorker:public Employee
{
private:
int iCWRMB; //销售员一周销售额
public:
CommissionWorker(int icwrmb, int workno,string firstrname,string lastname);
void Show(); //显示员工信息
double Salary();
void ModifySpecial();
};
class Boss:public Employee
{
private:
int Brmb;
public:
Boss(int brmb, int workno,string firstrname,string lastname);
void Show(); //显示员工信息
double Salary();
void ModifySpecial();
};
///////////////////////////////////////////////////////////////////////
//注意:AddWorker时要提供员工的信息,包括薪水的一系列参数
/*****************************
*雇员类函数的实现
*****************************/
Employee::Employee(int iworkNum, string cfirstName, string clastName)
{
// 最好使用成员初始化列表
workNo = iworkNum;
firstName = cfirstName;
lastName = clastName;
}
Employee::~Employee()
{
}
void Employee::Show()
{
cout<<"\n工号:"<<workNo<<"\nFirstName:"<<firstName<<"\nLastName:"<<lastName;
}
void Employee::Modify(Lable _Lable)
{
int No;
string first;
string last;
switch(_Lable){
case A:
cout<<"原来的工号:"<<workNo<<"\n输入新的工号:";
cin>>No;
workNo=No;
break;
case B:
cout<<"原来的FirstName:"<<firstName<<"\n输入新的FirstName:";
cin>>first;
firstName=first;
break;
case C:
cout<<"原来的LastName:"<<lastName<<"\n输入新的LastName:";
cin>>last;
lastName=last;
break;
}
}
int Employee::RworkNo(int workno)
{
if(workNo==workno)return 1;
return 0;
}
/*****************************
*工厂类函数的实现
*****************************/
Factory::Factory(string cfactoryName)
{
// 最好使用成员初始化列表
cfactoryName = factoryName;
employeeNum = 0;
// 这个就在这里初始化吧,1000个元素,初始化列表要很长
for(int i = 0; i < 1000; i++)
{
pEmployee[i] = NULL;
}
}
#define SAFE_DELETE(p) {if(p) {delete p; p = NULL;}}
Factory::~Factory()
{
// 最后要释放掉动态申请的内存空间
for(int i = 0; i < 1000; i++)
{
SAFE_DELETE(pEmployee[i]);
}
}
void Factory::AddWorker(Lable _Lable)
{
int workno,i=0;
string firstname,lastname;
int time;
int pieces;
int icwrmb;
int brmb;
switch(_Lable){
case A:
cout<<"请输入小时工的工作时间:";
cin>>time;
while(time<40)
{
cout<<"Time<40,请重新输入:";
cin>>time;
}
cout<<"\n工号:";
cin>>workno;
cout<<"\n请输入FirstName:";
cin>>firstname;
cout<<"\n请输入LastName:";
cin>>lastname;
while(pEmployee[i]!=NULL)i++;
pEmployee[i] = new HourlyWorker(time,workno,firstname,lastname);
break;
case B:
cout<<"请输计件工计件个数:";
cin>>pieces;
cout<<"\n工号:";
cin>>workno;
cout<<"\n请输入FirstName:";
cin>>firstname;
cout<<"\n请输入LastName:";
cin>>lastname;
while(pEmployee[i]!=NULL)i++;
pEmployee[i] = new PieceWorker(pieces,workno,firstname,lastname);
break;
case C:
cout<<"请输销售员基本工资:";
cin>>icwrmb;
cout<<"\n工号:";
cin>>workno;
cout<<"\n请输入FirstName:";
cin>>firstname;
cout<<"\n请输入LastName:";
cin>>lastname;
while(pEmployee[i]!=NULL)i++;
pEmployee[i] = new CommissionWorker(icwrmb,workno,firstname,lastname);
break;
case D:
cout<<"请输入经理固定薪水:";
cin>>brmb;
cout<<"\n工号:";
cin>>workno;
cout<<"\n请输入FirstName:";
cin>>firstname;
cout<<"\n请输入LastName:";
cin>>lastname;
while(pEmployee[i]!=NULL)i++;
pEmployee[i] = new Boss(brmb,workno,firstname,lastname);
break;
}
}
void Factory::DeleteWorker(int workno)
{
int i=0;
for(; i < 1000; i++)
{
// 保证员工指针的合法性
if(pEmployee[i] && pEmployee[i]->RworkNo(workno))
{
break;
}
}
// while(pEmployee[i]->RworkNo(workno))i++;
// 保证该员工存在,才可以删除
if(i < 1000)
{
SAFE_DELETE(pEmployee[i]);
}
else
{
cout<<"不存在这个员工";
}
}
void Factory::ModifyWorker(int workno)
{
int i=0;
Lable _Lable;
for(; i < 1000; i++)
{
// 保证员工指针的合法性
if(pEmployee[i] && pEmployee[i]->RworkNo(workno))
{
break;
}
}
// while(pEmployee[i]->RworkNo(workno))i++;
// 保证该员工存在,才可以修改
if(i < 1000)
{
cout<<"----------------\n1.修改工号\n2.修改FirstName\n3.修改LastName\n4.修改工作时间或固定薪水或基本工资或工件个数\n----------------\n";
Mode(_Lable);
while(_Lable==J)
{
cout<<"选号错误";
Mode(_Lable);
}
cout<<"\n>>>=============================<<<\n";
if(_Lable==D)
{
pEmployee[i]->ModifySpecial();
}
else
{
pEmployee[i]->Modify(_Lable);
}
}
else
{
cout<<"没找到这个工号的员工!";
}
}
void Factory::ShowInfo()
{
int i=0;
// while(pEmployee[i]!=NULL){
// pEmployee[i]->Show();
// i++;
// }
for(; i < 1000; i++)
{
// 保证员工指针的合法性
if(pEmployee[i])
{
pEmployee[i]->Show();
cout<<"员工报酬:"<<pEmployee[i]->Salary()<<'\n';
cout<<"========================\n";
}
}
}
void Factory::TotalSalary()
{
int i=0;
double totalSalary=0;
for(;i<1000;i++)
{
if(pEmployee[i])
{
totalSalary+=pEmployee[i]->Salary();
}
}
cout<<"总工资:"<<totalSalary<<'\n';
}
void Factory::HighSalary()
{
int i=0;
double highSalary=pEmployee[i]->Salary();
for(i=1;i<1000;i++)
{
if(pEmployee[i])
{
if(pEmployee[i]->Salary()>highSalary)
{
highSalary=pEmployee[i]->Salary();
}
}
}
cout<<"最高工资:"<<highSalary<<'\n';
}
void Factory::LowSalary()
{
int i=0;
double lowSalary=pEmployee[i]->Salary();
for(i=1;i<1000;i++)
{
if(pEmployee[i])
{
if(pEmployee[i]->Salary()<lowSalary)
{
lowSalary=pEmployee[i]->Salary();
}
}
}
cout<<"最低工资"<<lowSalary<<'\n';
}
void Factory::AverageSalary()
{
int i=0,count=0;
double averageSalary=0;
for(;i<1000;i++)
{
if(pEmployee[i])
{
++count;
averageSalary+=pEmployee[i]->Salary();
}
}
averageSalary=averageSalary/count;
cout<<"平均工资:"<<averageSalary<<'\n';
}
/*****************************
* 派生类函数的实现
*****************************/
HourlyWorker::HourlyWorker(int time, int workno,string firstname,string lastname1):Time(time),Employee(workno,firstname,lastname1)
{
}
void HourlyWorker::Show()
{
cout<<"========================";
Employee::Show();
cout<<"\n工作时间:"<<Time<<'\n';
}
double HourlyWorker::Salary()
{
return (1.5*Time-20)*HWRMB;
}
void HourlyWorker::ModifySpecial()
{
cout<<"请输入新的工作时间:";
cin>>Time;
while(Time<40)
{
cout<<"Time<40,请重新输入:";
cin>>Time;
}
}
///////////////////////////////////
PieceWorker::PieceWorker(int pieces,int workno,string firstname,string lastname1):Pieces(pieces),Employee(workno,firstname,lastname1)
{
}
void PieceWorker::Show()
{
cout<<"========================";
Employee::Show();
cout<<"\n计件数:"<<Pieces<<'\n';
}
double PieceWorker::Salary()
{
return PWRMB*Pieces;
}
void PieceWorker::ModifySpecial()
{
cout<<"请输入新的工件个数:";
cin>>Pieces;
}
////////////////////////////////////
CommissionWorker::CommissionWorker(int icwrmb,int workno,string firstname,string lastname1):iCWRMB(icwrmb),Employee(workno,firstname,lastname1)
{
}
void CommissionWorker::Show()
{
cout<<"========================";
Employee::Show();
cout<<"\n基本工资:"<<iCWRMB<<'\n';
}
double CommissionWorker::Salary()
{
return iCWRMB*(1+CWRMBPERCENT);
}
void CommissionWorker::ModifySpecial()
{
cout<<"请输入新的基本工资:";
cin>>iCWRMB;
}
////////////////////////////////////
Boss::Boss(int brmb,int workno,string firstname,string lastname1):Brmb(brmb),Employee(workno,firstname,lastname1)
{
}
void Boss::Show()
{
cout<<"========================";
Employee::Show();
cout<<"\n固定工资:"<<Brmb<<'\n';
}
double Boss::Salary()
{
return Brmb;
}
void Boss::ModifySpecial()
{
cout<<"请输入新的固定薪水";
cin>>Brmb;
}
/********************************
* 主函数测试
*********************************/
int main(){
string factoryname;
Lable _Lable;
cout<<"请输入工厂的名字:";
cin>>factoryname;
cout<<"\n>>>=============================<<<\n";
Factory BELL(factoryname);
cout<<"您要做什么?\n----------------\n1.增加一名员工\n2.修改一名员工\n3.删除一名员工\n4.显示所有员工信息\n5.显示总工资\n6.显示最高工资\n7.显示最低工资\n8.显示平均工资\n9.EXIT\n----------------\n";
Mode(_Lable);
while(_Lable==J)
{
cout<<"选择错误";
Mode(_Lable);
}
cout<<"\n>>>=============================<<<\n";
while (I!= _Lable) {
switch(_Lable){
int no;
case A:
cout<<"\n----------------\n请选择员工类型:\n1.小时工\n2.计件工\n3.销售员\n4.经理\n----------------\n";
Mode(_Lable);
while(_Lable==J)
{
cout<<"选项错误";
Mode(_Lable);
}
cout<<"\n>>>=============================<<<\n";
BELL.AddWorker(_Lable);
break;
case B:
cout<<"请输入修改员工的工号:\n";
cin>>no;
BELL.ModifyWorker(no);
break;
case C:
cout<<"请输入删除员工的工号:\n";
cin>>no;
BELL.DeleteWorker(no);
break;
case D:
BELL.ShowInfo();
break;
case E:
BELL.TotalSalary();
break;
case F:
BELL.HighSalary();
break;
case G:
BELL.LowSalary();
break;
case H:
BELL.AverageSalary();
break;
}
cout<<"\n>>>=============================<<<\n";
cout<<"\n您要做什么?\n"<<"----------------\n1.增加一名员工\n2.修改一名员工\n3.删除一名员工\n4.显示所有员工信息.\n5.显示总工资\n6.显示最高工资\n7.显示最低工资\n8.显示平均工资\n9.EXIT\n----------------\n";
Mode(_Lable);
while(_Lable==J)
{
cout<<"选择错误";
Mode(_Lable);
}
cout<<"\n>>>=============================<<<\n";
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -