📄 salarymanager.cpp
字号:
#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 + -