#include "ds.h" //自定义的头文件
using namespace std; //c++中指定命名空间
文件名称:职工管理系统
描述:职工信息管理
姓名:王灿灿
完成时间:2023.03.16
#include "ds.h" //自定义的头文件
using namespace std; //c++中指定命名空间
/***********************
调试问题及解决方案:
1. 结构体的定义问题,如果定义的是一个职工的结构体,则需要专门定义一个数组或者再定义一个职工表
2.return退出程序,break退出函数
修改记录:
1.无
*************************/
struct staf //定义一种结构体类型
{
int num; //职工号
char name[20]; //姓名
char part[20]; //部门
char sex[2]; //性别
int money; //工资
char tel[11]; //电话
int age; //年龄
};
struct employee //定义一种结构体类型
{
struct staf sta[100];
int n;
};
//菜单
void menu()
{
cout<<"\n";
cout<<"******************************************************************\n";
cout<<"\t-----欢迎进入职工管理系统!您可以进行以下操作-----\n";
cout<<"\t--------------------0.退出系统--------------------\n";
cout<<"\t-----------------1.职工信息的输入-----------------\n";
cout<<"\t-----------------2.职工信息的输出-----------------\n";
cout<<"\t-----------------3.职工信息的插入-----------------\n";
cout<<"\t-----------------4.职工信息的删除-----------------\n";
cout<<"\t-----------------5.职工信息的修改-----------------\n";
cout<<"\t-----------------6.职工信息的查询-----------------\n";
cout<<"\t-------------7.按部门计算职工平均工资-------------\n";
cout<<"\t--------------------8.职工排序--------------------\n";
cout<<"******************************************************************\n";
}
//职工信息的输入
void input(employee &st) //数组数据的输入
{
int i;
cout<<"请输入职工人数n(0<n<40):"; //提示信息
cin>>st.n; //输入职工个数st.n
if(st.n<0||st.n>40)
{
cout<<"ERROR!Please input a number(0<n<40)"; //保证职工人数不超过提前预定的人数
}
else
{
for(i=0;i<st.n;i++)
{
cout<<"职工号:";
cin>>st.sta[i].num;
cout<<"姓名:";
cin>>st.sta[i].name;
cout<<"部门:";
cin>>st.sta[i].part;
cout<<"性别:";
cin>>st.sta[i].sex;
cout<<"工资:";
cin>>st.sta[i].money;
cout<<"电话:";
cin>>st.sta[i].tel;
cout<<"年龄:";
cin>>st.sta[i].age;
cout<<"\n";
}
}
}
//职工信息的输出
void output(employee st)
{
int i;
cout<<"职工号\t"<<" "<<"姓名\t"<<" "<<"部门\t"<<"性别\t"<<"工资\t"<<" 电话 "<<" 年龄\n";
for(i=0;i<st.n;i++)
{
cout<<" "<<st.sta[i].num<<"\t"<<st.sta[i].name<<"\t"<<st.sta[i].part<<"\t"<<" "<<st.sta[i].sex<<"\t"<<st.sta[i].money<<"\t"<<" "<<st.sta[i].tel<<"\t"<<" "<<st.sta[i].age<<"\n";
cout<<"\n"; //每两个职工间有空行
}
}
//职工信息的插入
void insert(employee &st,int m) //最后依次插入m个学生的成绩
{
int i;
cout<<"请输入需要插入的"<<m<<"个职工的信息:\n";
for(i=0;i<m;i++)
{
cout<<endl;
cout<<"职工号:";
cin>>st.sta[i+st.n].num;
cout<<"姓名:";
cin>>st.sta[i+st.n].name;
cout<<"部门:";
cin>>st.sta[i+st.n].part;
cout<<"性别:";
cin>>st.sta[i+st.n].sex;
cout<<"工资:";
cin>>st.sta[i+st.n].money;
cout<<"电话:";
cin>>st.sta[i+st.n].tel;
cout<<"年龄:";
cin>>st.sta[i+st.n].age;
}
st.n=st.n+m;
cout<<"-----------------------插入后------------------------------ \n";
output(st);
}
void charu(employee &st)
{
int m; //为了方便switch的使用,单独一个函数输入插入职工的个数
cout<<"请输入需要插入的学生个数m:";
cin>>m;
insert(st,m);
}
//按职工姓名删除
void dename(employee &st)
{
char name[NUM]; //职工姓名
int i=0;
int j=0;
cout<<"请输入职工姓名:";
cin>>name;
for(i=0;i<st.n;i++)
{
if(strcmp(name,st.sta[i].name)==0) //判断要删除的名字是否在职工表里
{
for(j=i;j<st.n-1;j++)
{
st.sta[j] =st.sta[j+1]; //如果查到了。所有信息前移一个单位
}
st.n=st.n-1; //相应的职工个数减一
cout<<"------------------------按姓名删除后------------------------ \n";
output(st);
return; //如果查到了,则退出函数
}
}
cout<<"未找到该员工,请重新输入\n";
dename(st); //如果没查到,再次输入名字
}
//按职工工号删除
void denum(employee &st)
{
int num; //职工工号
int i=0;
int j=0;
cout<<"请输入职工工号:";
cin>>num;
for(i=0;i<st.n;i++)
{
if(num==st.sta[i].num) //判断要删除的工号是否在职工表里
{
for(j=i;j<st.n-1;j++)
{
st.sta[j] =st.sta[j+1]; //如果查到了。所有信息前移一个单位
}
st.n=st.n-1;
}
cout<<"-----------------------按工号删除后-------------------- \n";
output(st);
return;
}
cout<<"未找到该员工,请重新输入\n";
denum(st); //如果没查到,再次输入名字
}
//职工信息的删除
void del(employee &st)
{
int i=0;
cout<<"1 按姓名删除\n"; // 通过12选择自己需要的功能
cout<<"2 按工号删除\n";
cin>>i;
switch(i)
{
case 1:dename(st);break;
case 2:denum(st);break;
}
system("pause"); //暂停
}
//按职工姓名修改
void moxm(employee &st) //相同功能同上
{
char name[NUM]; //职工姓名
int i=0;
int j=0;
cout<<"按职工姓名修改";
cout<<"请输入需要修改的职工姓名:";
cin>>name;
for(i=0;i<st.n;i++)
{
if(strcmp(name,st.sta[i].name)==0)
{
cout<<"请重新输入该职工信息\n";
cout<<"职工号:";
cin>>st.sta[i].num;
cout<<"部门:";
cin>>st.sta[i].part;
cout<<"性别:";
cin>>st.sta[i].sex;
cout<<"工资:";
cin>>st.sta[i].money;
cout<<"电话:";
cin>>st.sta[i].tel;
cout<<"年龄:";
cin>>st.sta[i].age;
}
cout<<"-------------------------修改后-------------------- \n";
output(st);
return;
}
cout<<"未找到该员工,请重新输入\n";
moxm(st);
}
//按职工工号修改
void mogh(employee &st)
{
int num; //职工工号
int i=0;
int j=0;
cout<<"按职工工号修改";
cout<<"请输入需要修改的职工工号:";
cin>>num;
for(i=0;i<st.n;i++)
{
if(num==st.sta[i].num)
{
cout<<"请重新输入该职工信息\n";
cout<<"姓名:";
cin>>st.sta[i].name;
cout<<"部门:";
cin>>st.sta[i].part;
cout<<"性别:";
cin>>st.sta[i].sex;
cout<<"工资:";
cin>>st.sta[i].money;
cout<<"电话:";
cin>>st.sta[i].tel;
cout<<"年龄:";
cin>>st.sta[i].age;
}
cout<<"-------------------------修改后-------------------- \n";
output(st);
return;
}
cout<<"未找到该员工,请重新输入\n";
mogh(st);
}
//职工信息的修改
void modify(employee &st)
{
int i=0;
cout<<"1 按姓名修改\n";
cout<<"2 按工号修改\n";
cin>>i;
switch(i)
{
case 1:moxm(st);break;
case 2:mogh(st);break;
}
}
//按职工姓名查找
void sename(employee st)
{
char name[NUM]; //职工姓名
int i=0;
cout<<"请输入需要查找的职工姓名:";
cin>>name;
for(i=0;i<st.n;i++)
{
if(strcmp(name,st.sta[i].name)==0)
{
cout<<"-----------------------该职工的信息为------------------------- \n";
cout<<"职工号\t"<<" "<<"姓名\t"<<" "<<"部门\t"<<"性别\t"<<"工资\t"<<" 电话 "<<" 年龄\n";
cout<<" "<<st.sta[i].num<<"\t"<<st.sta[i].name<<"\t"<<st.sta[i].part<<"\t"<<" "<<st.sta[i].sex<<"\t"<<st.sta[i].money<<"\t"<<" "<<st.sta[i].tel<<"\t"<<" "<<st.sta[i].age<<"\n";
cout<<"\n";
return;
}
}
cout<<"未找到该员工,请重新选择\n";
sename(st);
}
//按职工工号查找
void senum(employee st)
{
int num; //职工姓名
int i=0;
cout<<"请输入需要查找的职工工号:";
cin>>num;
for(i=0;i<st.n;i++)
{
if(num==st.sta[i].num)
{
cout<<"-------------------------该职工的信息为-------------------- \n";
cout<<"职工号\t"<<" "<<"姓名\t"<<" "<<"部门\t"<<"性别\t"<<"工资\t"<<" 电话 "<<" 年龄\n";
cout<<" "<<st.sta[i].num<<"\t"<<st.sta[i].name<<"\t"<<st.sta[i].part<<"\t"<<" "<<st.sta[i].sex<<"\t"<<st.sta[i].money<<"\t"<<" "<<st.sta[i].tel<<"\t"<<" "<<st.sta[i].age<<"\n";
cout<<"\n";
return;
}
}
cout<<"未找到该员工,请重新输入\n";
senum(st);
}
//职工信息信息查找
void search(employee st)
{
int i=0;
cout<<"1 按姓名查找\n";
cout<<"2 按工号查找\n";
cin>>i;
switch(i)
{
case 1:sename(st);break;
case 2:senum(st);break;
}
}
//按部门统计职工工资
float bmtj(employee st)
{
char part[20]; //输入查找的部门
int sum=0;
float avg;
int i=0,j=0;
cout<<"请输入需要计算平均工资的部门名称: ";
cin>>part;
for(i=0;i<st.n;i++)
{
if(strcmp(part,st.sta[i].part)==0)
{
sum=sum+st.sta[i].money;
j++; //计算该部门有几个员工
}
}
avg=(float)sum/j;
cout<<"该部门的平均工资为:"<<avg<<endl;
return avg;
}
//按工号降序;
void ghjx(employee &st)
{
int i,j;
struct staf t;
for(i=0;i<st.n-1;i++)
{
for(j=st.n-1;j>i;j--) //num-1趟,因为最后只剩一个数,无需比较
{
if(st.sta[j].num>st.sta[j-1].num) //两两比较,逆序交换
{
t=st.sta[j];
st.sta[j]=st.sta[j-1];
st.sta[j-1]=t;
}
}
}
cout<<"-------------------------按工号降序后----------------------- \n";
cout<<"\n";
output(st);
}
//按工资降序;
void gzjx(employee &st)
{
int i,j;
struct staf t;
for(i=0;i<st.n-1;i++)
{
for(j=st.n-1;j>i;j--) //num-1趟,因为最后只剩一个数,无需比较
{
if(st.sta[j].money>st.sta[j-1].money) //两两比较,逆序交换
{
t=st.sta[j];
st.sta[j]=st.sta[j-1];
st.sta[j-1]=t;
}
}
}
cout<<"-------------------------按工资降序后------------------------ \n";
cout<<"\n";
output(st);
}
//按工资升序;
void gzsx(employee &st) //升序
{
int i,j;
struct staf t;
for(i=0;i<st.n-1;i++)
{
for(j=st.n-1;j>i;j--) //num-1趟,因为最后只剩一个数,无需比较
{
if(st.sta[j].money<st.sta[j-1].money) //两两比较,逆序交换
{
t=st.sta[j];
st.sta[j]=st.sta[j-1];
st.sta[j-1]=t;
}
}
}
cout<<"-------------------------按工资升序后------------------------ \n";
cout<<"\n";
output(st);
}
//按工号升序;
void ghsx(employee &st) //升序
{
int i,j;
struct staf t;
for(i=0;i<st.n-1;i++)
{
for(j=st.n-1;j>i;j--) //num-1趟,因为最后只剩一个数,无需比较
{
if(st.sta[j].num<st.sta[j-1].num) //两两比较,逆序交换
{
t=st.sta[j];
st.sta[j]=st.sta[j-1];
st.sta[j-1]=t;
}
}
}
cout<<"-------------------------按工号升序后------------------------ \n";
cout<<"\n";
output(st);
}
//排序应用
void px(employee &st)
{
int i=0;
cout<<"1 按工资升序\n";
cout<<"2 按工号升序\n";
cout<<"3 按工资降序\n";
cout<<"4 按工号降序\n";
cin>>i;
switch(i)
{
case 1:gzsx(st);break;
case 2:ghsx(st);break;
case 3:gzjx(st);break;
case 4:ghjx(st);break;
}
}
int main()
{
cout<<"220812049"<<"王灿灿 完成本程序时间:200分钟\n";
system("date /t"); //显示系统当前日期
system("time /t"); //显示系统当前时间
struct employee s1;
int choose=0;
while(1)
{
menu();
cout<<"请选择:";
cout<<"\n";
cin>>choose;
switch(choose)
{
case 0:exit(0);break;
case 1:input(s1);break; //1.职工信息的输入
case 2:output(s1);break; //2.职工信息的输出
case 3:charu(s1);break; //3.职工信息的插入
case 4:del(s1);break; //4.职工信息的删除
case 5:modify(s1);break; //5.职工信息的修改
case 6:search(s1);break; //6.职工信息的查询
case 7:bmtj(s1);break; //7.按部门计算职工平均工资
case 8:px(s1);break; //8.职工排序
default: cout<<"ERROR,Please input again";
}
}
}