员工管理系统

来源:互联网 发布:深圳网络诈骗案 编辑:程序博客网 时间:2024/06/10 03:31

【员工管理系统】

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

基本要求:排序:按不同关键字,对所有员工的信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工的信息;删除,按编号删除已离职的员工的信息。

选作内容:实现图形用户界面。

通过链表实现

数据结构:

struct workers

{

     char name[15];//姓名

char  department[18];//单位

char gender;//性别

     unsigned int age;//年龄

      unsigned long telephone;//电话

unsigned long wage;//工资

unsigned long num;//职工号

     struct workers *next;

};

操作实现:

/*插入职工信息,通过链表实现  */

/*具体实现职工信息的插入*/

/*对职工信息的删除操作*/

/*修改操作*/

/*实现对员工信息的查找*/

/*排序*/

/* 输出员工信息 */

/* 显示职工工资情况 计算平均工资  */



#include<stdio.h>#include<stdlib.h>#include<string.h>#include <iostream>using namespace std;struct workers{    char name[15];//姓名    char  department[18];//单位    char gender;//性别    unsigned int age;//年龄    unsigned long long telephone;//电话    unsigned long wage;//工资    unsigned long num;//职工号    struct workers *next;    char xueli[20];//学历    char zhiwu[20];//职务    char zhuzhi[20];//住址 workers operator=(workers &b)    {        strcpy(name,b.name);        strcpy(department,b.department);        strcpy(xueli,b.xueli);        strcpy(zhiwu,b.zhiwu);        strcpy(zhuzhi,b.zhuzhi);        age=b.age;        num=b.num;        wage=b.wage;        gender=b.gender;        telephone=b.telephone;    }};workers *creat_list(workers *head,int n)//创建一个长度为n的链表{    workers *p,*q;    int i;    q=head;    for(i=0; i<n; i++)    {        p=(workers *)malloc(sizeof(workers));//开辟一个新结点        if(p!=NULL)        {            q->next=p;            q=p;        }    }    p->next=NULL;    return head;//返回头指针,这样就可以对链表进行操作}void output(workers *head)//输出函数,从链表头部输到尾部{    workers *p=head;    if(head->next==NULL)    {printf("链表为空!\n");return;}    else    {        cout<<"现存员工信息为:\n";    printf("姓名            单位                 性别 年龄      电话");    printf("      工资   职工号      学历            职务             住址\n");    while(1)    {   p=p->next;       printf("%-15s ",p->name);       printf("%-20s ",p->department);       printf("  %c  ",p->gender);       printf("%-5d ",p->age);       printf("%-13lld ",p->telephone);       printf("%-6ld ",p->wage);       printf("%-12ld ",p->num);       printf("%-15s ",p->xueli);       printf("%-15s ",p->zhiwu);       printf("%-15s ",p->zhuzhi);       printf("\n");        if(p->next==NULL)            break;    }    }}void input(workers *head,int n)//输入员工信息{    workers *p=head->next;    while(n>0)    {        cout<<"\n输入员工姓名:  ";cin>>p->name;        cout<<"输入员工单位:  ";cin>>p->department;        cout<<"输入员工职务: ";cin>>p->zhiwu;        cout<<"输入员工性别:  ";cin>>p->gender;        cout<<"输入员工年龄: ";cin>>p->age;        cout<<"输入员工电话: ";cin>>p->telephone;        cout<<"输入员工工资:  ";cin>>p->wage;        cout<<"输入员工职工号: ";cin>>p->num;        cout<<"输入员工学历: ";cin>>p->xueli;        cout<<"输入员工住址: ";cin>>p->zhuzhi;        //system("pause");        cout<<endl;        p=p->next;        n--;    }}workers *shanchu(workers *head,unsigned long num)//按照职工号删除{  workers temp;  workers *p=head->next,*q,*ans=head;  if(p->num==num)      head->next=p->next;  else  for(p=head->next;p->next!=NULL;p=p->next)   {    if(p->next->num==num)        {            q=p->next->next;           p->next=q;            break;        }    }    cout<<"删除成功\n";    return ans;}void Sortbyage(workers *head)//排序函数,年龄升序{  workers temp;  workers *p,*q,*max;  for(p=head->next;p->next!=NULL;p=p->next)   {    max=p;    for(q=p->next;q!=NULL;q=q->next)      if(q->age< max->age)        max=q;    if(max!=p)      //交换结点的数据域内容,指针内容没变。     {     temp=*p;     *p=*max;     *max=temp;     }   }}void SortbyWage(workers *head)//排序函数,工资升序{  workers temp;  workers *p,*q,*max;  for(p=head->next;p->next!=NULL;p=p->next)   {    max=p;    for(q=p->next;q!=NULL;q=q->next)      if(q->wage <max->wage)        max=q;    if(max!=p)      //交换结点的数据域内容,指针内容没变。     {     temp=*p;     *p=*max;     *max=temp;     }   }}void SortbyNum(workers *head)//排序函数,工号升序{  workers temp;  workers *p,*q,*max;  for(p=head->next;p->next!=NULL;p=p->next)   {    max=p;    for(q=p->next;q!=NULL;q=q->next)      if(q->num< max->num)        max=q;    if(max!=p)      //交换结点的数据域内容,指针内容没变。     {     temp=*p;     *p=*max;     *max=temp;     }   }}void SearchbyNum(workers *head,unsigned long num)//按职工号查询,职工号唯一{    workers *p=head;    int f=0;    while(1)    {   p=p->next;        if(p->num==num)        {   f=1;            printf("%-15s ",p->name);       printf("%-20s ",p->department);       printf("  %c  ",p->gender);       printf("%d ",p->age);       printf("%lld ",p->telephone);       printf("%ld ",p->wage);       printf("%ld ",p->num);       printf("%-15s ",p->xueli);       printf("%-15s ",p->zhiwu);       printf("%-15s ",p->zhuzhi);       printf("\n");break;}        if(p->next==NULL)            break;    }if(f==0)cout<<"查无此人\n";}bool check(workers *head,unsigned long num){    workers *p=head;    while(1)    {   p=p->next;        if(p->num==num)         return true;         if(p->next==NULL)            break;    }    return false;}void SearchbyName(workers *head,char name[20])//按名字查询,可查重名的{    workers *p=head;    int f=0;    while(1)    {   p=p->next;        if(strcmp(p->name,name)==0)        {   f=1;            printf("%-15s ",p->name);       printf("%-20s ",p->department);       printf("  %c  ",p->gender);       printf("%d ",p->age);       printf("%lld ",p->telephone);       printf("%ld ",p->wage);       printf("%ld ",p->num);       printf("%-15s ",p->xueli);       printf("%-15s ",p->zhiwu);       printf("%-15s ",p->zhuzhi);       printf("\n");}        if(p->next==NULL)            break;    }    if(f==0)cout<<"查无此人\n";}void charu(workers *head){    workers *p=(workers *)malloc(sizeof(workers));    workers *q=head->next;    head->next=p;    p->next=q;    cout<<"\n输入员工姓名:  ";cin>>p->name;        cout<<"输入员工单位:  ";cin>>p->department;        cout<<"输入员工职务: ";cin>>p->zhiwu;        cout<<"输入员工性别:  ";cin>>p->gender;        cout<<"输入员工年龄: ";cin>>p->age;        cout<<"输入员工电话: ";cin>>p->telephone;        cout<<"输入员工工资:  ";cin>>p->wage;        cout<<"输入员工职工号: ";cin>>p->num;        cout<<"输入员工学历: ";cin>>p->xueli;        cout<<"输入员工住址: ";cin>>p->zhuzhi;        cout<<"插入完成\n";}void xiugai(workers *head,unsigned long num){        SearchbyNum(head,num);       shanchu(head,num);       charu(head);}void title(){    printf("*****************员工管理系统********************\n");    printf("*                                               *\n");    printf("*       功能说明:                              *\n");    printf("*       按下 0 输出员工信息                     *\n");    printf("*       按下 1 新建一个链表存储员工信息         *\n");    printf("*       按下 2 按照职工号查询员工信息           *\n");    printf("*       按下 3 按照 姓名 查询员工信息           *\n");    printf("*       按下 4 按照职工号删除员工信息           *\n");    printf("*       按下 5 按照职工号对员工信息进行排序     *\n");    printf("*       按下 6 按照 年龄 对员工信息进行排序     *\n");    printf("*       按下 7 按照 工资 对员工信息进行排序     *\n");    printf("*       按下 8 输入工号可对员工信息进行修改     *\n");    printf("*       按下 9 可新增一个员工的信息             *\n");    printf("*       按下 10 退出系统                        *\n");    printf("*                                               *\n");    printf("*************************************************\n");}void solve(){    workers *head=(workers *)malloc(sizeof(workers));    head->next=NULL;    int m;    while(1)    {        title();        int n;        cin>>n;        int flag=0;       switch(n)    {        case 0:output(head);break;        case 1:cout<<"请输入要存储的员工信息的个数\n";cin>>m;creat_list(head,m);input(head,m);break;        case 2:cout<<"请输入要查询的工号\n";int num;cin>>num;SearchbyNum(head,num);break;        case 3:cout<<"请输入要查询的姓名\n";char name[20];cin>>name;SearchbyName(head,name);break;        case 4:cout<<"请输入要删除的职工号\n";unsigned long hao;cin>>hao;if(check(head,hao))shanchu(head,hao);else cout<<"查无此人\n";break;        case 5:cout<<"按照职工号对员工信息进行排序后结果如下:\n";SortbyNum(head);output(head);break;        case 6:cout<<"按照 年龄 对员工信息进行排序后结果如下:\n";Sortbyage(head);output(head);break;        case 7:cout<<"按照 工资 对员工信息进行排序后结果如下:\n";SortbyWage(head);output(head);break;        case 8:cout<<"请输入要修改信息的员工的职工号\n";int aaa;cin>>aaa;xiugai(head,aaa);break;        case 9:cout<<"新增一个员工信息\n";charu(head);break;        case 10:flag=1;break;        default: cout<<"输入有误,重新输入\n";    }    if(flag==1)break;    }}int main(){    solve();    return 0;}



测试数据:


5zhangsanjiaowuchu zhuzhen m 39 18846795237 5000 11101 shuoshi jiashuqu#1*1lisibangongshizhiyuanf3218846789454450011505benkejiashuqu#2*8wangwu  yanjiushi caozuoyuan f 28 18867887854 4750 11809 benke jiashuqu#3*5zhaoliu  baoweichu baoan m 42 18564973854 3750 11209 gaozhong jiashuqu#7*4zhangsan  jiaowuchu chuzhang m 45 13345671238 6600 11001 yanjiusheng jiashuqu#4*3



原创粉丝点击