⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 salarysys.cpp

📁 工厂设计一个简单的当前周的工资管理信息系统
💻 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 + -