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

📄 salarymanager.cpp

📁 它是一个完整的工资管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <iomanip>
#include <vector>
#include "salary.h"
#include "salaryManager.h"
#include "employee.h"
#include "menu.h"

extern CEmployee *HeadEmployee;
extern int iNumNode;
extern CEmployee *HeadEmployee;////员工信息链表表头指针
extern int iNumNode;///////////////记录节点的个数
extern CSalaryManager *mUser;
vector<CEmployee *>user;

CSalaryManager::CSalaryManager(string m_sPasswd, string m_sUser):
                CSimpleUser(m_sPasswd, m_sUser){}
//CSalaryManager::~CSalaryManager(){}

//==============================修改员工信息=======================================
void CSalaryManager::ChangeBaseInfo()//============================zbh
{
	CMenu menu;
	string sChoose = "";
	string sSalaryCardId = "";
	cout<<"\t\t\t请输入要修改的员工的工资卡号:";
	cin>> sSalaryCardId;
	int iAge = 0;
	CEmployee *curNode = HeadEmployee->next;
	while( curNode != NULL && curNode->m_sSalaryCardId != sSalaryCardId )
	{/////////////////////////////////////找到对应的工资卡号
		curNode = curNode->next;
	}
	if( curNode == NULL )
	{
		cout<<"\t\t\t\t没有该员工的信息!请确认输入正确。"<<endl;
		return;
	}
	while( true )
	{
		cout<<"\n================================================================================"<<endl;
		cout<<"\n\t\t\t提示:你只能操作以下几项:"<<endl
			<<"\t\t\t\t[1]姓名"<<endl
			<<"\t\t\t\t[2]年龄"<<endl
			<<"\t\t\t\t[3]工龄"<<endl
			<<"\t\t\t\t[4]部门"<<endl
			<<"\t\t\t\t[5]家庭电话号"<<endl
			<<"\t\t\t\t[6]手机号码"<<endl
			<<"\t\t\t\t[7]职称"<<endl
			<<"\t\t\t\t[8]职称编号"<<endl
			<<"\t\t\t\t[#]返回上一层菜单"<<endl
			<<"\t\t\t\t[0]退出"<<endl;
		cout<<"\t\t\t\t你的选择是:";
		cin>>sChoose;
		if( !menu.IsDigit( sChoose ) )
		{
			cout<<"\t\t\t你的输入有错,请重新输入! "<<endl;
			continue;
		}
		switch( sChoose[0] )
		{
		case '1':
			cout<<"\t\t\t目前的姓名是:"<<curNode->m_sName<<endl;
			cout<<"\t\t\t修改为:  ";
			cin>>curNode->m_sName;
			cout<<"\t\t提示:姓名修改成功。"<<endl;
			break;
		case '2':
			cout<<"\t\t\t目前的年龄是:"<<curNode->m_iAge<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输入新的年龄:";
				if( (cin>>curNode->m_iAge) == 0 )
				{
					cout<<"\t\t\t输入年龄必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '3':
			cout<<"\t\t\t目前的工龄是:"<<curNode->m_iWorkAge<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输入新的工龄:";
				if( (cin>>curNode->m_iWorkAge) == 0 )
				{
					cout<<"\t\t\t输入工龄必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '4':
			cout<<"\t\t\t目前的部门是: "<<curNode->m_sDepartment<<endl;
			cout<<"\t\t\t修改为:";
			cin>>curNode->m_sDepartment;
			cout<<"\t\t提示:部门修改成功。"<<endl;
			break;
		case '5':
			cout<<"\t\t\t目前的家庭电话号是: "<<curNode->m_sHomePhone<<endl;
			cout<<"\t\t\t修改为:";
			cin>>curNode->m_sHomePhone;
			cout<<"\t\t提示:家庭电话修改成功。"<<endl;
			break;
		case '6':
			cout<<"\t\t\t目前的手机号码是: "<<curNode->m_sMobilePhone<<endl;
			cout<<"\t\t\t修改为:";
			cin>>curNode->m_sMobilePhone;
			cout<<"\t\t提示:手机号码修改成功。"<<endl;
			break;
		case '7':
			cout<<"\t\t\t目前的职称是: "<<curNode->m_sTechPost<<endl;
			cout<<"\t\t\t修改为:";
			cin>>curNode->m_sTechPost;
			cout<<"\t\t提示:职称修改成功。"<<endl;
			break;
		case '8':
			cout<<"\t\t\t目前的职称编号是: "<<curNode->m_sTechPostNum<<endl;
			cout<<"\t\t\t修改为:";
			cin>>curNode->m_sTechPostNum;
			cout<<"\t\t提示:职称编号修改成功。"<<endl;
			break; 
		case '#':
			return;
		case '0':
			menu.Exit();
		default:
			cout<<"\t\t\t你的输入有错,请重新输入! "<<endl;
			break;
		}
	}
}
//=================================修改工资信息====================================
void CSalaryManager::ChangeSalary()//============================zbh
{
	CMenu menu;
	string sChoose = "";
	string sSalaryCardId = "";
	cout<<"\t\t\t请输入要修改的员工的工资卡号:";
	cin>> sSalaryCardId;

	CEmployee *curNode = HeadEmployee->next;
	while( curNode != NULL && curNode->m_sSalaryCardId != sSalaryCardId )
	{
		curNode = curNode->next;
	}
	if( curNode == NULL )
	{
		cout<<"\t\t\t\t没有该员工的信息!请确认输入正确。"<<endl;
		return;
	}
	while( true )
	{
		cout<<"\n================================================================================"<<endl;
		cout<<"\n\t\t\t提示:你只能操作以下几项:"<<endl
			<<"\t\t\t\t[1]基本工资"<<endl
			<<"\t\t\t\t[2]职务工资"<<endl
			<<"\t\t\t\t[3]补助津贴"<<endl
			<<"\t\t\t\t[4]电费"<<endl
			<<"\t\t\t\t[5]水费"<<endl
			<<"\t\t\t\t[6]清洁费"<<endl
			<<"\t\t\t\t[7]闭路电视费"<<endl
			<<"\t\t\t\t[#]返回上一层菜单"<<endl
			<<"\t\t\t\t[0]退出"<<endl;
		cout<<"\t\t\t\t你的选择是:";
		cin>>sChoose;
		if( !menu.IsDigit( sChoose ) )
		{
			cout<<"\t\t\t你的输入有错,请重新输入! "<<endl;
			continue;
		}
		switch( sChoose[0] )
		{
		case '1':
			cout<<"\t\t\t目前的基本工资是:"<<curNode->m_cSalary.m_fBasePay<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输修改后的基本工资:";
				if( (cin>>curNode->m_cSalary.m_fBasePay) == 0 )
				{
					cout<<"\t\t\t输入基本工资必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '2':
			cout<<"\t\t\t目前的职务工资是:"<<curNode->m_cSalary.m_fDutyPay<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输修改后的职务工资:";
				if( (cin>>curNode->m_cSalary.m_fDutyPay) == 0 )
				{
					cout<<"\t\t\t输入职务工资必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '3':
			cout<<"\t\t\t目前的补助津贴是:"<<curNode->m_cSalary.m_fAssistance<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输修改后的补助津贴:";
				if( (cin>>curNode->m_cSalary.m_fAssistance) == 0 )
				{
					cout<<"\t\t\t输入补助津贴必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '4':
			cout<<"\t\t\t目前的电费是: "<<curNode->m_cSalary.m_fElecCost<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输修改后的电费:";
				if( (cin>>curNode->m_cSalary.m_fElecCost) == 0 )
				{
					cout<<"\t\t\t输入电费必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '5':
			cout<<"\t\t\t目前的水费是: "<<curNode->m_cSalary.m_fWaterRate<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输修改后的水费:";
				if( (cin>>curNode->m_cSalary.m_fWaterRate) == 0 )
				{
					cout<<"\t\t\t输入水费必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '6':
			cout<<"\t\t\t目前的清洁费是: "<<curNode->m_cSalary.m_iCleanCost<<endl;
			cout<<"\t\t\t修改为:";
			while(true)
			{
				cout<<"\n\n\t\t\t请输修改后的清洁费:";
				if( (cin>>curNode->m_cSalary.m_iCleanCost) == 0 )
				{
					cout<<"\t\t\t输入清洁费必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '7':
			cout<<"\t\t\t目前的闭路电视费是: "<<curNode->m_cSalary.m_iTVCost<<endl;
			while(true)
			{
				cout<<"\n\n\t\t\t请输修改后的闭路电视费:";
				if( (cin>>curNode->m_cSalary.m_iTVCost) == 0 )
				{
					cout<<"\t\t\t输入闭路电视费必须是数字"<<endl;
					cin.clear();
					fflush(stdin);
					continue;
				}
				break;
			}
			break;
		case '#':
			return;
		case '0':
			menu.Exit();
		default:
			cout<<"\t\t\t你的输入有错,请重新输入! "<<endl;
			break;
		}
		curNode->m_cSalary.AccountTax();
		curNode->m_cSalary.DeductSalary();
		curNode->m_cSalary.AccountSalary();
	}
}

void CSalaryManager::ChangeInfo()
{
	CMenu menu;
	string sChoose = "";
	string sPasswd = "";
	while( true )
	{
		cout<<"\n==============================================================================="<<endl;
		cout<<"\t\t\t[ 1 ]修改自己的密码"<<endl
			<<"\t\t\t[ 2 ]修改员工基本信息"<<endl
			<<"\t\t\t[ 3 ]修改员工工资信息"<<endl
			<<"\t\t\t[ # ]返回上一层菜单"<<endl
			<<"\t\t\t[ 0 ]退出"<<endl
			<<"\t\t\t请输入你的选择:";
		cin>> sChoose;
		if( !menu.IsDigit( sChoose ) )
		{
			cout<<"\t\t\t你的输入有错,请重新输入! "<<endl;
			continue;
		}
		switch( sChoose[0] )
		{
		case '1':
			cout<<"\t\t\t你目前的密码是: "<<GetPw()<<endl;
			cout<<"\t\t\t修改为:";
			cin>>sPasswd;
			SetPw( sPasswd );
			SaveCode("Secret\\SalaryManager.txt");
			cout<<"\t\t提示:密码修改成功。"<<endl;
			break;
		case '2':
			ChangeBaseInfo();
			break;
		case '3':
			ChangeSalary();
			break;
		case '#':
			return;
		case '0':
			menu.Exit();
		default:
			cout<<"\t\t\t你的输入有错,请重新输入! "<<endl;
			break;

		}
	}
}


//==========统计每个部门的员工工资、整个公司的员工工资、员工的信息=================
void CSalaryManager::CByDepSar()//============================zbh
{
	if( iNumNode == 0 )
	{
		cout<<"\n\t\t\t系统中没有任何信息。"<<endl;
		return;
	}
	float fTotalAmount = 0.0f;
	int iEmpNumOfDep = 0;
	string DepName = "";
	cout<<"\n\t\t\t请输入要统计的部门的名称,\n"<<
		  "\t\t\t如果统计整个公司的信息请输入“公司”"<<endl;
	cout<<"\t\t\t你要输入的是:  ";
    cin>> DepName;

	int iNumber = 0;
	CEmployee *curNode = HeadEmployee->next;
	cout<<"\n=============================你所统计的信息如下================================="<<endl;
	cout<<"\n姓名  性别 年龄 工龄  所属部门  职称  职称编号 身份证号码 手机号 工资  工资卡号"<<endl;
	if( DepName == "公司" )
	{
		while( curNode != NULL )
		{
			fTotalAmount += curNode->m_cSalary.m_fSalary;

			cout<<left<<setw(6)<<curNode->m_sName
				<<left<<setw(5)<<curNode->m_cSex
				<<left<<setw(5)<<curNode->m_iAge
				<<left<<setw(6)<<curNode->m_iWorkAge
				<<left<<setw(10)<<curNode->m_sDepartment
				<<left<<setw(6)<<curNode->m_sTechPost
				<<left<<setw(9)<<curNode->m_sTechPostNum
				<<left<<setw(11)<<curNode->m_sIdentityId
				<<left<<setw(7)<<curNode->m_sMobilePhone
				<<left<<setw(6)<<curNode->m_cSalary.m_fSalary
				<<left<<setw(8)<<curNode->m_sSalaryCardId<<endl;
			curNode = curNode->next;
		}
		cout<<"\n\t\t总金额为:  "<<fTotalAmount<<"\t\t平均工资为:  "
			<<fTotalAmount/iNumNode<<endl;

		fTotalAmount = 0.0f;
		curNode = HeadEmployee->next;
	}
	else
	{
		while( curNode != NULL )
		{
			if( DepName == curNode->m_sDepartment )
			{
				iNumber++;
				fTotalAmount += curNode->m_cSalary.m_fSalary;

				cout<<left<<setw(6)<<curNode->m_sName
					<<left<<setw(5)<<curNode->m_cSex
					<<left<<setw(5)<<curNode->m_iAge
					<<left<<setw(6)<<curNode->m_iWorkAge
					<<left<<setw(10)<<curNode->m_sDepartment
					<<left<<setw(6)<<curNode->m_sTechPost
					<<left<<setw(9)<<curNode->m_sTechPostNum
					<<left<<setw(11)<<curNode->m_sIdentityId
					<<left<<setw(7)<<curNode->m_sMobilePhone
					<<left<<setw(6)<<curNode->m_cSalary.m_fSalary
					<<left<<setw(8)<<curNode->m_sSalaryCardId<<endl;
				iEmpNumOfDep++;
			}
			curNode = curNode->next;
		}
		if( iNumber == 0 )
		{
			cout<<"\n\t\t\t没有该部门的信息。"<<endl;
			return;
		}

		cout<<"\n\t\t总金额为:  "<<fTotalAmount<<"\t\t平均工资为:  "
			<<fTotalAmount/iEmpNumOfDep<<endl;
		fTotalAmount = 0.0f;
	}
	cout<<"\n==============================================================================="<<endl;
}
//=================================================================================

//==========统计全公司总金额、每个部门的员工工资、扣税信息、=======================
//	           工资的扣除信息、奖金、特别奖金  
void CSalaryManager::CByComP()//============================zbh
{
	if( iNumNode == 0 )
	{
		cout<<"\n\t\t\t系统中没有任何信息。"<<endl;
		return;
	}
	float fTotalAmount = 0.0f;
	CEmployee *emp;/////////////////////////////////////////////中间变量
    throughList();//////////////////////////////////////////////遍历链表,并将节点地址存入待排序向量
    
	for(int sch_1=0; sch_1<iNumNode; sch_1++)
	{
		for(int sch_2=sch_1+1; sch_2<iNumNode; sch_2++)
		{
			if( user[sch_1]->m_sDepartment > user[sch_2]->m_sDepartment )
			{   
				emp=user[sch_1];
				user[sch_1]=user[sch_2];
				user[sch_2]=emp;	
			}
		}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -