📄 menu.h
字号:
#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 + -