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

📄 menu.h

📁 用C++实现的一个职工工资管理系统
💻 H
📖 第 1 页 / 共 4 页
字号:
#ifndef MENU_H
#define MENU_H

#include "loginshow.h"
#include "Password.h"
#include "InitEmployee.h"
#include "SalaryManager.h"
#include "SystemManager.h"
#include <list>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>

using namespace std;

//定义一个全局链表模板
list<InforNode> myList ; 
list<InforNode>::iterator iter ;
//////////////////////////////////////////////////////////////////////////

//进入系统时从各文件中读入数据到全局链表中
void readInfo()
{
	ifstream  in ( "用户登录表.txt");
	ifstream  in1( "员工基本信息表.txt");
	ifstream  in2( "扣除费用信息表.txt");
	ifstream  in3( "员工工资信息表.txt");
	ifstream  in4( "工资体系表.txt");
	
	InforNode * oldEmployee = new InforNode();   //定义一个节点
//////////////////////////////////////////////////////////////////////////
	string str,ssalaid;	//ssalaid保存用户名
	string sid,sname,ssex,sdp,spos,sposid,shomep,smphone;	//保存员工基本信息
	double dwater,deletr,dclean,dtv;	//保存水费、电费、清洁费、闭路电视费
	double dbasesala,dpossala,dsub;  //基本工资、职务工资、各种补助
	double dsendsala,dsum,dtax,dgetsala,dprize;		//应发工资、扣除费用、税金、实发工资、特别奖励
	int nage,nwage;//保存年龄和工龄
	char passd[20];
	int i;				//i保存用户类型
//////////////////////////////////////////////////////////////////////////
	//空出属性行
	getline(in,str);
	getline(in1,str);
	getline(in2,str);
	getline(in3,str);
	getline(in4,str);
//////////////////////////////////////////////////////////////////////////
	
    while(getline(in,str))
	{

		istringstream line(str);
		line >> ssalaid >> i >> passd;
		//用户名  类型   密码
		oldEmployee->employee.setSalaryID(ssalaid);
		oldEmployee->employee.setUserType(i);
		oldEmployee->employee.setPassWord(passd);
		//读员工基本信息表

		getline(in1,str);
		istringstream line1(str);
		line1 >> ssalaid >> sid >> sname >> ssex >> nage >> nwage >> sdp >> spos >> sposid >> shomep >> smphone ;
		//工资卡号	身份证号	姓名	性别	年龄	工龄	部门	技术职称	技术职称编号	家庭电话号码	手机号码
		oldEmployee->employee.setSalaryID(ssalaid);
		oldEmployee->employee.setIDCard(sid);
		oldEmployee->employee.setName(sname);
		oldEmployee->employee.setSex(ssex);
		oldEmployee->employee.setAge(nage);
		oldEmployee->employee.setWAge(nwage);
		oldEmployee->employee.setDepartMent(sdp);
		oldEmployee->employee.setPos(spos);
		oldEmployee->employee.setPosID(sposid);
		oldEmployee->employee.setHomTel(shomep);
		oldEmployee->employee.setMobilePhone(smphone);

		//读扣除费用信息表
	
		getline(in2,str);
		istringstream line2(str);
		line2 >> ssalaid  >> dwater >> deletr >> dclean >> dtv;
		//工资卡号	水费	电费	清洁费	闭路电视费
		oldEmployee->deducted.setSalaryID(ssalaid);
		oldEmployee->deducted.setWaterFee(dwater);
		oldEmployee->deducted.setElectricFee(deletr);
		oldEmployee->deducted.setCleanFee(dclean);
		oldEmployee->deducted.setTVFee(dtv);
	
		//读员工工资信息表
	
		getline(in3,str);
		istringstream line3(str);
		line3 >> sposid >> spos >> dbasesala >> dpossala >> dsub ;
		//技术职称编号	技术职称	基本工资	职务工资	各种补助
		oldEmployee->salaryinfo.setpositionID(sposid);
		oldEmployee->salaryinfo.setPosition(spos);
		oldEmployee->salaryinfo.setBaseSalary(dbasesala);
		oldEmployee->salaryinfo.setPostionSalary(dpossala);
		oldEmployee->salaryinfo.setSubsidy(dsub);

		//读员工工资体系表	
		getline(in4,str);
		istringstream line4(str);
		line4 >> ssalaid >> sname >> dsendsala >> dsum >> dtax >> dgetsala >> dprize ;
		//工资卡号	姓名	应发工资	扣除费用	税金	实发工资	特别奖励

		oldEmployee->salary.setSalaryID(oldEmployee->employee.getSalaryID() );
		oldEmployee->salary.setName(oldEmployee->employee.getName() );	
		oldEmployee->salary.setSendSalary(oldEmployee->salaryinfo);//设置该员工应发工资
		oldEmployee->salary.setGetSalary(oldEmployee->deducted );   //设置该员工实发工资
		oldEmployee->salary.setTax();    //设置该员工交纳税金
		oldEmployee->salary.setPrize(dprize);
	
		//将读到的一行个人所有信息连入链表
		myList.push_back( * oldEmployee );
	}
}

//退出系统前保存当前链表到文件
void saveInfo()
{
	ofstream  out ( "用户登录表.txt" );
	ofstream  out1( "员工基本信息表.txt");
	ofstream  out2( "扣除费用信息表.txt" );
	ofstream  out3( "员工工资信息表.txt");
	ofstream  out4( "工资体系表.txt");
	
	//属性行
	out<<"用户名\t用户类型\t用户密码\n";
	out1<<"工资卡号\t身份证号\t姓名\t性别\t年龄\t工龄\t部门\t技术职称\t技术职称编号\t家庭电话号码\t手机号码\n";
	out2<<"工资卡号\t水费\t电费\t清洁费\t闭路电视费\n";
	out3<<"技术职称编号\t技术职称\t基本工资\t职务工资\t各种补助\n";
	out4<<"工资卡号\t姓名\t应发工资\t扣除费用\t税金\t实发工资\t特别奖励\n";
//////////////////////////////////////////////////////////////////////////
	
	//保存用户登录信息
	iter = myList.begin();
	for( iter ; iter != myList.end();iter++)
	{
		out << (*iter).employee.getSalaryID()<<"\t"<<(*iter).employee.getUserType()<<"\t"<<(*iter).employee.getPassWord()<<endl;
	} 
	//输出员工基本信息
	iter = myList.begin();
	for( iter ; iter != myList.end();iter++)
	{
					
		out1 << (*iter).employee.getSalaryID()<<"\t"<<(*iter).employee.getIDCard()<<"\t"<<(*iter).employee.getName()
			<<"\t"<<(*iter).employee.getSex()<<"\t"<<(*iter).employee.getAge()<<"\t"<<(*iter).employee.getWAge()
			<<"\t"<<(*iter).employee.getDepartment()<<"\t"<<(*iter).employee.getPos()<<"\t"<<(*iter).employee.getPosID()
			<<"\t"<<(*iter).employee.getHomTel()<<"\t"<<(*iter).employee.getMobilePhone()<<endl;

	} 
	//保存扣除费用信息
	iter = myList.begin();
	for( iter ; iter != myList.end();iter++)
	{
					
		out2 << (*iter).deducted.getSalaryID()<<"\t"<<(*iter).deducted.getWaterFee()<<"\t"<<(*iter).deducted.getElectricFee()
			<<"\t"<<(*iter).deducted.getCleanFee()<<"\t"<<(*iter).deducted.getTVFee()<<endl;
	} 
	//保存员工工资信息表
	iter = myList.begin();
	for( iter ; iter != myList.end();iter++)
	{
					
		out3 << (*iter).salaryinfo.getPositionID()<<"\t"<<(*iter).salaryinfo.getPosition()<<"\t"<<(*iter).salaryinfo.getBaseSalary()
			<<"\t"<<(*iter).salaryinfo.getPostionSalary()<<"\t"<<(*iter).salaryinfo.getSubsidy()<<endl;
	}
	//保存工资体系表
	iter = myList.begin();
	for( iter; iter != myList.end();iter++)
	{
					
		out4 << (*iter).salary.getSalaryID()<<"\t"<<(*iter).salary.getName()<<"\t"<<(*iter).salary.getSendSalary()
			<<"\t"<<(*iter).salary.getSumFee( (*iter).deducted )<<"\t"<<(*iter).salary.getTax()
			<<"\t"<<(*iter).salary.getGetSalary()<<"\t"<<(*iter).salary.getPrize()<<endl;
	}

}


//初始新用户信息
void initInfo( InforNode * aNewEmployee )
{
	
	cout<<"  ******** 初始化新员工基本信息 *********"<<endl;
		initEmployee( aNewEmployee );   //初始化员工基本信息
	cout<<"  ******** 初始化该员工扣除费用信息 *********"<<endl;
		initDeducted( aNewEmployee );	//初始化扣除费用信息
	cout<<"  ******** 初始化该员工工资信息 *********"<<endl;
		initSalaryInfo( aNewEmployee );	//初始化工资信息
	cout<<"  ******** 初始化该员工工资体系信息 *********"<<endl;
		initSalary( aNewEmployee );	//初始化工资体系信息

}
//创建新用户及其信息
void creatNewUser()
{
	User newUser;
	cout<<"    ****请输入新用户名(即工资卡号):";
		string newName;
		cin>>newName;
	newUser.setUserName(newName);
	cout<<"    ****请输入新用户密码:";
		char pad[20] = "";
		cin>>pad;
	newUser.setPassWord(pad);
	cout<<"    ****请输入新用户类型(1.工资管理员 2.普通员工):";
		int type;
		cin>>type;
		if(type == 1 || type == 2)
		{
			newUser.setUserType(type);
			InforNode * aNewEmployee = new InforNode();   //定义一个新节点
			aNewEmployee->employee.setSalaryID(newUser.getUserName());//得到新节点的用户名为该用户的工资卡号
			aNewEmployee->employee.setUserType(newUser.getUserType());//得到该用户的用户类型
			aNewEmployee->employee.setPassWord(newUser.getPassWord());//得到该用户的用户密码
			initInfo( aNewEmployee );    //创建各项信息
	
			myList.push_back( * aNewEmployee);   //将新建的用户插入全局链表
		}
		else
		{
			cout<<"您输入的用户类型错误!"<<endl;
			system("cls");
			creatNewUser();
		}
}


string emplogin()
{
	string strUserName;
	char ch_pasword[20] = "";
	SystemManager systManager;
	cout<<"   ****请输入用户名: ";
		cin>>strUserName;

	InputPassword(ch_pasword);
	cout<<endl;
	for(iter = myList.begin(); iter != myList.end();iter++)  //遍历链表
	{
		if( strUserName == (*iter).employee.getSalaryID() )
		{
			if( ! strcmp (ch_pasword,(*iter).employee.getPassWord() ) )
			{
				cout<<"         ******************您已经成功登录****************  "<<endl;
				return strUserName;
			}
			else
			{
				cout<<"    ************** 您输入了错误的用户名或密码 !  *************"<<endl;
			  return "";
			}
		}
		
	}
	cout<<"         ******************此用户不存在!****************  "<<endl;
	return "";

 }

string salalogin()
{
	string strUserName;
	char ch_pasword[20] = "";
	SystemManager systManager;
	cout<<"   ****请输入用户名: ";
		cin>>strUserName;

	InputPassword(ch_pasword);
	cout<<endl;
	for(iter = myList.begin(); iter != myList.end();iter++)  //遍历链表
	{
		if( strUserName == (*iter).employee.getSalaryID() )
		{
			if( ! strcmp (ch_pasword,(*iter).employee.getPassWord() ) )
			{
				if ( (*iter).employee.getUserType() == 1  ) 
				{
					cout<<"         ******************您已经成功登录****************  "<<endl;
					return strUserName;
				}
				else
				{
					cout<<"   ********* 对不起  ------  您没有权限 !!! *********   "<<endl;
					return "";
				}
			}
			else
			{
				cout<<"    ************** 您输入了错误的用户名或密码 !  *************"<<endl;
				return "";
			}
		}
		
	}
	cout<<"         ******************此用户不存在!****************  "<<endl;
	return "";
}

//用户登录函数,用户持有自己的用户名和密码,输入正确后方可登录,否则提示用户名或密码错!
int syslogin()
{
	string strUserName;
	char ch_pasword[20] = "";
	SystemManager systManager;
	cout<<"   ****请输入用户名: ";
		cin>>strUserName;

	InputPassword(ch_pasword);
	cout<<endl;
		
	if( strUserName == systManager.getUserName() )
	{	
		
		if(! strcmp (ch_pasword,systManager.getPassWord() ) )
		{
			cout<<"         ******************您已经成功登录****************  "<<endl;
			return 1;
		}
		else
		{
			cout<<"   ******** !!!  密码有误  !!! *******"<<endl;
			return 0;
		}
	}
	else
	{
		cout<<"    ************** 您输入了错误的用户名或密码 !  *************"<<endl;
	    return 0;
	}

}

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

//实现普通用户查看自己工资信息功能
int myselfCheck( string salaID )
{
	for(iter = myList.begin(); iter != myList.end();iter++)  //遍历链表
	{
		if( (*iter).employee.getSalaryID() == salaID )
		{
			(*iter).employee.lookup();
			(*iter).deducted.lookup();
			(*iter).salaryinfo.lookup();
			(*iter).salary.lookup();
			return 1;
		}
		
	}
	return 0;
}

//实现普通用户更改自己密码功能。
int changePassword( string salaID )
{
	char pasd[20];
	for(iter = myList.begin(); iter != myList.end();iter++)  //遍历链表
	{
		if( (*iter).employee.getSalaryID() == salaID )
		{
			cout<<"    ***** 请输入新密码:";
			cin >> pasd;
			(*iter).employee.changePwd( pasd );
			cout<<"    ***** 修改密码成功!"<<endl;
			return 1;
		}

	}
    return 0;
}


//普通员工函数,包含普通员工对自己信息的查询,自己密码的修改
int empl( string salaID )
{
	int flag = 1;
	while( flag != 0 )
	{
	cout<<"                           我是普通员工!"<<endl;
	cout<<"         ************************************************   "<<endl<<endl;

	cout<<"         ******        1. 【个人信息查询】         ****** "<<endl<<endl;

	cout<<"         ******        2. 【密码修改】             ****** "<<endl<<endl;

	cout<<"         ******        3. 【帮    助】             ******   "<<endl<<endl;

	cout<<"         ******        4. 【返回上一级菜单】       ****** "<<endl<<endl;

    cout<<"         ************************************************   "<<endl<<endl;
	char chose;
	cin>>chose;

		switch(chose)
		{	
		case '1':
				system("cls");
			    myselfCheck( salaID ); 
				break;
		case '2':
				system("cls");
				changePassword( salaID );
				break;

		case '3':
			cout<<" 选择1:员工对自己的工资信息进行查看 "<<endl;
			cout<<" 选择2:员工对自己密码进行修改"<<endl;
			cout<<" 选择4:返回上一级菜单。"<<endl;
			cout<<" [警告]请保证您输入的字符在1-4之内,否则后果自负!"<<endl;
			break;

		case '4':
			    return 0;
		default: 
				cout<<endl<<"                             你选择错误!      "<<endl;
		}

	flushall();
	cout<<"         ================================================"<<endl;
	cout<<"                             按回车健返回!         "<<endl;
	cout<<"         ================================================"<<endl;
	getchar();

⌨️ 快捷键说明

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