?? 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 + -