【数据结构实训】员工管理系统

[问题描述]

每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。

[基本要求]

(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;
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值