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

📄 menu.cpp

📁 它是一个完整的工资管理系统
💻 CPP
字号:
#include "menu.h"
#include "salaryManager.h"
#include "simpleUser.h"
#include "salaryManager.h"
#include "administrator.h"

extern CSimpleUser *sUser;
extern CSalaryManager *mUser;
extern CAdministrator *aUser;

CMenu::CMenu()
{
	
}
//=====================================用户登录====================================
void CMenu::Login( void )
{
	cout<<"\n\n\t\t================欢迎使用职工工资管理系统==============="<<endl;
	while( true )
	{
		cout<<"\n\n\t\t^_^==================================================^_^";
		cout<<"\n\n\t\t\t\t[ 1 ]: 一般职工用户登陆"<<endl;
		cout<<"\t\t\t\t[ 2 ]: 工资管理员登陆"<<endl;
		cout<<"\t\t\t\t[ 3 ]: 系统管理员登陆"<<endl;
		cout<<"\t\t\t\t[ 4 ]: 帮助"<<endl;
		cout<<"\t\t\t\t[ 0 ]: 退出"<<endl;
		cout<<"\t\t\t\t请选择相应的操作:  ";

		string choose;
		cin >> choose;
		if( !IsDigit( choose ) )
		{
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl; 
			continue;
		}
		switch( choose[0] )
		{
		case '1':
			if(CheckUser( 1 ))
				Op_SimpleUser();///////////////////////////////普通用户的操作
			break;
		case '2':
			if(CheckUser( 2 ))
				Op_SalaryManager();////////////////////////////工资管理员的操作
			break;
		case '3':
			if(CheckUser( 3 ))
				Op_Administrator();////////////////////////////系统管理员的操作
			break;
		case '4':
		    Help();////////////////////////////////////////////帮助
 			break;
		case '0':
			Exit();////////////////////////////////////////////退出
		default:
			cout<<"\n\n\t\t\t输入有错,请重新选择!"<<endl;
			break;
		}
	}
}
//==============================================================================


//==========================普通用户的操作=======================================
void CMenu::Op_SimpleUser( void )
{
	while( true )
	{
		cout<<"\n\n\t\t^_^==================================================^_^";
		cout<<"\n\n\t\t\t\t[ 1 ]: 查看个人信息"<<endl;
		cout<<"\t\t\t\t[ 2 ]: 修改个人信息"<<endl;
		cout<<"\t\t\t\t[ 3 ]: 帮助"<<endl;
		cout<<"\t\t\t\t[ # ]: 返回上一层菜单"<<endl;
		cout<<"\t\t\t\t[ 0 ]: 退出"<<endl;
		cout<<"\t\t\t\t请选择相应的操作:  ";

		string choose;
		cin >> choose;
		if( !IsDigit( choose ) )
		{
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl; 
			continue;
		}
		switch( choose[0] )
		{
		case '1':  
			sUser->SearchInfo();//////////////////////////////////普通用户查看自己的信息
			break;
		case '2':
			sUser->ChangeInfo();//////////////////////////////////普通用户修改自己的信息
			break;
		case '3':
			Help();
			break;
		case '#':
			return;
		case '0':
			exit( 1 );
		default:
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl;
			break;
		}
	}
}
//================================================================================


//==========================工资管理员的操作======================================
void CMenu::Op_SalaryManager( void )
{
	while( true )
	{
		cout<<"\n\n\t\t^_^==================================================^_^";
		cout<<"\n\n\t\t\t\t[ 1 ]: 查找员工信息"<<endl;
		cout<<"\t\t\t\t[ 2 ]: 修改员工信息"<<endl;
		cout<<"\t\t\t\t[ 3 ]: 统计员工信息"<<endl;
		cout<<"\t\t\t\t[ 4 ]: 排序"<<endl;
		cout<<"\t\t\t\t[ 5 ]: 帮助"<<endl;
		cout<<"\t\t\t\t[ # ]: 返回上一层菜单"<<endl;
		cout<<"\t\t\t\t[ 0 ]: 退出"<<endl;
		cout<<"\t\t\t\t请选择相应的操作:  ";

		string choose;
		cin >> choose;
		if( !IsDigit( choose ) )
		{
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl; 
			continue;
		}
		switch( choose[0] )
		{
		case '1':
			Search_Menu();///////////////////////////调用搜索菜单
			break;
		case '2':
			mUser->ChangeInfo();/////////////////////工资管理员修改员工信息
			break;
		case '3':
			Count_Menu();////////////////////////////调用统计菜单
			break;
		case '4':
			Sort_Menu();/////////////////////////////调用排序菜单
			break;
		case '5':
			Help();
			break;
		case '#':
			return;
		case '0':
			Exit();
		default:
			cout<<"\n\n\t\t\t输入有错,请重新选择!"<<endl;
			break;
		}
	}
}
//================================================================================


//==========================系统管理员的操作======================================
void CMenu::Op_Administrator( void )
{
	while( true )
	{
		cout<<"\n\n\t\t^_^==================================================^_^";
		cout<<"\n\n\t\t\t\t[ 1 ]: 查找员工信息"<<endl;
		cout<<"\t\t\t\t[ 2 ]: 修改员工信息"<<endl;
		cout<<"\t\t\t\t[ 3 ]: 统计员工信息"<<endl;
		cout<<"\t\t\t\t[ 4 ]: 排序"<<endl;
		cout<<"\t\t\t\t[ 5 ]: 添加用户"<<endl;
		cout<<"\t\t\t\t[ 6 ]: 删除用户"<<endl;
		cout<<"\t\t\t\t[ 7 ]: 添加员工"<<endl;
		cout<<"\t\t\t\t[ 8 ]: 删除员工"<<endl;
		cout<<"\t\t\t\t[ 9 ]: 修改工资体系"<<endl;
		cout<<"\t\t\t\t[ # ]: 返回上一层菜单"<<endl;
		cout<<"\t\t\t\t[ 0 ]: 退出"<<endl;
		cout<<"\t\t\t\t请选择相应的操作:  ";

		string choose;
		cin >> choose;
		if( !IsDigit( choose ) )
		{
			cout<<"\n\n\t\t\t输入有错,请重新选择!"<<endl; 
			continue;
		}
		switch( choose[0] )
		{
		case '1':
			Search_Menu();
			break;
		case '2':
			aUser->ChangeInfo();/////////////////////////////系统管理员修改员工信息
			break;
		case '3':
			Count_Menu();
			break;
		case '4':
			Sort_Menu();
			break;
		case '5':
			aUser->AddUser();////////////////////////////////系统管理员添加用户
			break;
		case '6': 
			aUser->DelUser();////////////////////////////////系统管理员删除用户
			break;
		case '7':
			aUser->AddEmp();////////////////////////////////系统管理员添加员工
			break;
		case '8':
			aUser->DelEmp();
			break;
		case '9':
			aUser->ChangeSalarySys();
			break;
		case '#':
			return;
		case '0':
			Exit();
		default:
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl;
			break;
		}
	}
}
//===============================================================================



//==========================查找菜单======================================

void CMenu::Search_Menu()
{
	while( true )
	{
		cout<<"\n\n\t\t^_^==================================================^_^";
		cout<<"\n\n\t\t\t\t[ 1 ]: 按姓名查找员工基本信息"<<endl;
		cout<<"\t\t\t\t[ 2 ]: 按工资卡号查找员工基本信息"<<endl;
		cout<<"\t\t\t\t[ 3 ]: 按身份证查找员工基本信息"<<endl;
		cout<<"\t\t\t\t[ 4 ]: 按部门查找员工基本信息"<<endl;
		cout<<"\t\t\t\t[ 5 ]: 按技术职称查找员工基本信息"<<endl;
		cout<<"\t\t\t\t[ 6 ]: 按姓名查找工资细节"<<endl;
		cout<<"\t\t\t\t[ 7 ]: 按身份证查找工资细节"<<endl;
		cout<<"\t\t\t\t[ 8 ]: 按部门查找员工工资细节"<<endl;
		cout<<"\t\t\t\t[ # ]: 返回上一层菜单"<<endl;
		cout<<"\t\t\t\t[ 0 ]: 退出"<<endl;
		cout<<"\t\t\t\t请选择相应的操作:  ";

		string choose;
		cin >> choose;
		if( !IsDigit( choose ) )
		{
			cout<<"\n\n\t\t\t输入有错,请重新选择!"<<endl; 
			continue;
		}
		switch( choose[0] )
		{
		case '1':
			mUser->SchByName();
			break;
		case '2':
			mUser->SchBySarCardId();
			break;
		case '3':
			mUser->SchByIdentityId();
			break;
		case '4':
			mUser->SchByDep();
			break;
		case '5':
			mUser->SchByTechPost();
			break;
		case '6': 
			mUser->SchDetailByName();
			break;
		case '7':
			mUser->SchDetailById();
			break;
		case '8':
			mUser->SchDetailByDep();
			break;
		case '#':
			return;
		case '0':
			Exit();
		default:
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl;
			break;
		}
	}

}

//==========================================================================


//==========================排序菜单=======================================
void CMenu::Sort_Menu()
{
	while( true )
	{
		cout<<"\n\n\t\t^_^==================================================^_^";
		cout<<"\n\n\t\t\t\t[ 1 ]: 按基本工资排序"<<endl;
		cout<<"\t\t\t\t[ 2 ]: 按职务工资排序"<<endl;
		cout<<"\t\t\t\t[ 3 ]: 按扣除工资排序"<<endl;
		cout<<"\t\t\t\t[ 4 ]: 按缴税信息排序"<<endl;
		cout<<"\t\t\t\t[ 5 ]: 按姓名排序"<<endl;
		cout<<"\t\t\t\t[ 6 ]: 按职务排序"<<endl;
		cout<<"\t\t\t\t[ # ]: 返回上一层菜单"<<endl;
		cout<<"\t\t\t\t[ 0 ]: 退出"<<endl;
		cout<<"\t\t\t\t请选择相应的操作:  ";

		string choose;
		cin >> choose;
		if( !IsDigit( choose ) )
		{
			cout<<"\n\n\t\t\t输入有错,请重新选择!"<<endl; 
			continue;
		}
		switch( choose[0] )
		{
		case '1':
			mUser->SortByBasePay();
			break;
		case '2':
			mUser->SortByDutyPay();
			break;
		case '3':
			mUser->SortByDeductPay();
			break;
		case '4':
			mUser->SortByTax();
			break;
		case '5':
			mUser->SortByName();
			break;
		case '6': 
			mUser->SortByDuty();
			break;
		case '#':
			return;
		case '0':
			Exit();
		default:
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl;
			break;
		}
	}

}

//=========================================================================


//==========================统计菜单======================================

void CMenu::Count_Menu()
{
	while( true )
	{
		cout<<"\n\n\t\t^_^==================================================^_^";
		cout<<"\n\n\t\t\t\t[ 1 ]: 公司、部门员工工资和员工信息统计"<<endl;
		cout<<"\t\t\t\t[ 2 ]: 公司工资总额和部门员工工资详细信息统计"<<endl;
		cout<<"\t\t\t\t[ 3 ]: 查看公司最高工资前十名的员工信息"<<endl;
		cout<<"\t\t\t\t[ 4 ]: 按部门统计最高工资前十名的员工信息"<<endl;
		cout<<"\t\t\t\t[ 5 ]: 查看公司扣除工资最多的十个"<<endl;
		cout<<"\t\t\t\t[ # ]: 返回上一层菜单"<<endl;
		cout<<"\t\t\t\t[ 0 ]: 退出"<<endl;
		cout<<"\t\t\t\t请选择相应的操作:  ";

		string choose;
		cin >> choose;
		if( !IsDigit( choose ) )
		{
			cout<<"\n\n\t\t\t输入有错,请重新选择!"<<endl; 
			continue;
		}
		switch( choose[0] )
		{
		case '1':
			mUser->CByDepSar();
			break;
		case '2':
			mUser->CByComP();
			break;
		case '3':
			mUser->CTenAtFront_SalaryInComp();
			break;
		case '4':
			mUser->CTenAtFront_SalaryInDep();
			break;
		case '5':
			mUser->CTenAtFront_DeductSalary();
			break;
		case '#':
			return;
		case '0':
			Exit();
		default:
			cout<<"\t\t\t\t\t输入有错,请重新选择!"<<endl;
			break;
		}
	}

}

//==========================================================================

//============================处理密码======================================
string CMenu::GetUserInputPassword()
{ 	
	char p;
	char passwd[20];
	int i=0;
	p = _getch();
	while (p!='\r')
	{
		if(p=='\b')
		{
			while(p=='\b')
			{
				cout<<"\b \b";
				if(i>0)
					i--;
				else 
					i=0;
				passwd[i]='\0';
				p=_getch();
			}
			continue;
		}
		cout<<"*";
		passwd[i] = p;
		i++;
		p=_getch();
	
		if(i==10)
		{
			cout<<"\n你输入的字符串过长"<<endl;
			_getch();
			break;
		}
	}
	passwd[i] = '\0';
	return passwd;
}
//==============================核查用户身份=====================
bool CMenu::CheckUser(int identity)
{
	int i=0;
	string name="";
	string password="";
	while(i<3)
	{ 
		i++;
		cout<<"\n\n\t\t^_^==================================================^_^"<<endl;
		cout<<"\t\t\t\t请输入用户名:  ";
		cin>>name;
		switch (identity)
		{
		case 1:
            password=GetUserPW("Secret\\SimpleUser.txt",name);
			break;
		case 2:
			password=GetUserPW("Secret\\SalaryManager.txt",name);
			break;
		case 3:
			password=GetUserPW("Secret\\Administrator.txt",name);
			break;
		}
		if(password=="")
		{
			cout<<"\t\t\t\t用户名输入有错,请确认!\n\n";
			continue;
		}
			

		i=0;

       cout<<"\t\t\t\t请输入密码:  ";

	   while( i < 3 )
	   {
		   if( password==GetUserInputPassword() )
		   {
			   if( identity == 1)
				   sUser = new CSimpleUser(password,name);
			   if( identity == 2)
			       mUser = new CSalaryManager(password,name );
			   if( identity == 3)
				   aUser = new CAdministrator(password,name );
			   return true;
		   }
		   i++;
		   if( i == 3)
		   {
			   cout<<"\n\t\t\t非法操作超过规定次数,请按任意键退出。"<<endl;
			   _getch();
			   exit(0);
		   }
		   cout<<"\n\t\t\t\t密码输入错误,请重新输入密码:";  
	   }
	   
	}
	cout<<"\n\t\t\t非法操作超过规定次数,请按任意键退出。"<<endl;
	_getch();
	exit(0);
}

//===================================从数据文件获取用户密码=====================

string CMenu:: GetUserPW(char *filePath,string userName)
{  
	string pw="";
	ifstream in(filePath);
	if(!in)
	{
		cout<<"\t\t\tOpen file failure!\n";
		return pw;
	}
	for(string str;getline(in,str);)
	{
		istringstream sin(str);
		string name;
		sin>>name;

		if(name==userName)
		{
         sin>>pw;
		 in.close();
		 return pw;
		}
	}
	in.close();
	return pw;
}


//===================================判断输入是否为数字或“#”==================
bool CMenu::IsDigit( string choose)
{
	if( choose.length() != 1 )
		return false;
	else
	{
		if(choose[0]=='#')
			return true;
		if( choose[0] < '0' || choose[0] > '9' )
			return false;
	}
	return true;
}
void CMenu::Help()
{    
  	ifstream in("帮助.txt");
			for(string str;getline(in,str);)
				 cout<<str<<endl;
}
void CMenu::Exit()
{
	while( true )
	{
		cout<<"\n==============================================================================="<<endl;
		cout<<"\n\t\t\t即将退出系统,是否保存被修改的数据?"<<endl
			<<"\n\t\t\t[ 1 ] 保存  [ 2 ] 另存  [ 3 ] 不存"<<endl;
		cout<<"\t\t\t请选择:";
		string sFilePath;
		string sChoose;
		cin>> sChoose;

		if( !IsDigit( sChoose ) )
		{
			cout<<"\t\t\t你的输入有错,请确认!"<<endl;
			continue;
		}
		switch( sChoose[0] )
		{
		case '1':
			SaveFile( "EmployeeData");//////////////////////////默认保存到EmployeeData文件加下
			                          //////////////////////////的employee.txt和salary.txt里
			exit(1);
		case '2':
			cout<<"\t\t\t请输入文件的完全路径(不用写文件名):";
			
			cin>>sFilePath;//////////////////////////////////输入路径名
			SaveFile( sFilePath );
			exit(1);
		case '3':
			cout<<"\t\t\t你确定不保存修改过的数据?"<<endl;
			cout<<"\t\t\tY / y:不保存。 N / n:返回重新选择。"<<endl;
			char cP;
			cP = _getch();
			while( true )
			{
				if( cP == 'y' || cP == 'Y' )
					exit(1);
				else if( cP == 'n' || cP == 'N' )
					break;
				cP = _getch();
			}
			if( cP == 'n' )
				continue;
		}
	}
}

⌨️ 快捷键说明

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