[问题描述]
每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。
[基本要求]
(1) 排序:按不同关键字,对所有员工的信息进行排序。
(2) 查询:按特定条件查找员工。
(3)更新:按编号对某个员工的某项信息进行修改。
(4) 插入:加入新员工的信息。
(5) 删除:按编号删除已离职的员工的信息。
[测试数据]
5
2020214111 王五 男 1998/01/03 大专 总裁 123456789 山东省
2020214115 赵四 女1995/04/13 小学 会计 152478963 云南省
2020214116 李三 女 1994/11/29 初中 保洁 198745632 贵州省
2020214125 钱六 女 1999/10/07 高中 厨师 157894632 陕西省
2020214128 丁二 男 2002/08/11 大学 秘书 134562789 山西省
[选作内容]
实现图形用户界面。
[代码实现]
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define scnaf scanf
const int N=1e4+50;
char xueli[][10]={"小学","初中","高中","大专","大学"};
int n;
struct ss
{
char hao[20],name[10],xing[5],sheng[15],xue[10],zhi[10],dian[15],zhu[40];
int a,b,c,d;//年月日 学历:1小学2初中3高中4大专5大学
}s[N];
void shengri(int k)
{
s[k].a=(s[k].sheng[0]-'0')*10+(s[k].sheng[1]-'0');
s[k].b=(s[k].sheng[3]-'0')*10+(s[k].sheng[4]-'0');
s[k].c=(s[k].sheng[6]-'0')*10+(s[k].sheng[7]-'0');
for(int i=0;i<=4;i++)
if(strcmp(s[k].xue,xueli[i])==0)
{
s[k].d=i;
break;
}
}
bool cmp1(struct ss a,struct ss b)//按年龄排序
{
if(a.a!=b.a)
return a.a<b.a;
else if(a.b!=b.b)
return a.b<b.b;
return a.c<b.c;
}
bool cmp2(struct ss a,struct ss b)//按编号排序
{
return a.hao<b.hao;
}
bool cmp3(struct ss a,struct ss b)//按学历排序
{
return a.d>b.d;
}
void paixu()//排序
{
int p;
printf("\n请输入排序方式(数字):\n 1.年龄\n 2.编号\n 3.学历\n");
scanf("%d",&p);
switch(p)
{
case 1:sort(s+1,s+n+1,cmp1);break;
case 2:sort(s+1,s+n+1,cmp2);break;
case 3:sort(s+1,s+n+1,cmp3);break;
}
}
int chabian(char cha[])//按照编号查询员工
{
for(int i=1;i<=n;i++)
if(strcmp(s[i].hao,cha)==0)
return i;
return 0;
}
int chaming(char cha[])
{
for(int i=1;i<=n;i++)
if(strcmp(s[i].name,cha)==0)
return i;
return 0;
}
void chaxun()//查询
{
int p,q;
char cha[40];
printf("\n请输入查询方式(数字):\n 1.编号\n 2.姓名\n");
scnaf("%d",&p);
switch(p)
{
case 1:
{
printf("\n请输入编号:\n");
scanf("%s",cha);
q=chabian(cha);
break;
}
case 2:
{
printf("\n请输入姓名:\n");
scanf("%s",cha);
q=chaming(cha);
break;
}
}//hao[20],name[10],xing[5],sheng[15],xue[10],zhi[10],dian[15],zhu[40]
int i=q;
if(!q)
printf("抱歉,没有找到相应员工.\n");
else printf("该员工信息: %s,%s,%s,%s, %s,%s,%s,%s\n",s[i].hao,s[i].name,s[i].xing,s[i].sheng,s[i].xue,s[i].zhi,s[i].dian,s[i].zhu);
}
void gengxin()
{
char cha[40],xin[40];
int p,q=0;
while(!q)//防止编号出错
{
printf("\n请输入员工有效编号:\n");
scnaf("%s",cha);
q=chabian(cha);
}
printf("\n请输入要修改的信息(数字):\n 1.名字\n 2.性别\n 3.出生日期\n");
scnaf("%d",&p);
printf("\n请输入修改内容:\n");
scanf("%s",xin);
switch(p)
{
case 1:strcpy(s[q].name,xin);break;
case 2:strcpy(s[q].xing,xin);break;
case 3:strcpy(s[q].sheng,xin);break;
}
}
void charu()
{
int i=++n;
printf("\n请输入新员工的信息(编号、姓名、性别、出生年月、学历、职务、电话、住址):\n");
scnaf("%s%s%s%s %s%s%s%s",&s[i].hao,&s[i].name,&s[i].xing,&s[i].sheng,&s[i].xue,&s[i].zhi,&s[i].dian,&s[i].zhu);
}
void shanchu()
{
char cha[20];
int q;
printf("\n请输入离职员工编号:\n");
scnaf("%s",cha);
q=chabian(cha);
swap(s[q],s[n]);
n--;
}
void printff()
{
for(int i=1;i<=n;i++)
printf("%s,%s,%s,%s,%s,%s,%s,%s\n",s[i].hao,s[i].name,s[i].xing,s[i].sheng,s[i].xue,s[i].zhi,s[i].dian,s[i].zhu);
}
int main()
{
int i,k;
printf("请输入职工人数\n");
scnaf("%d",&n);
printf("\n请输入职工信息(编号、姓名、性别、出生年月、学历、职务、电话、住址):\n");
for(i=1;i<=n;i++)
{
scnaf("%s%s%s%s%s%s%s%s",&s[i].hao,&s[i].name,&s[i].xing,&s[i].sheng,&s[i].xue,&s[i].zhi,&s[i].dian,&s[i].zhu);
shengri(i);
}
while(1)
{
printf("请输入:\n 1.排序\n 2.查询\n 3.更新\n 4.插入\n 5.删除\n 6.职工信息表\n 0.退出\n");
scnaf("%d",&k);
if(!k)break;
switch(k)
{
case 1:paixu();;break;
case 2:chaxun();break;
case 3:gengxin();break;
case 4:charu();break;
case 5:shanchu();break;
case 6:printff();break;
}
}
return 0;
}