员工管理系统

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

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

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

通过链表实现

数据结构:

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
#include
#include
#include
#include
using namespace std;

typedef 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;
}*Linklist,Lnode;

void  frist_print()
{
     printf("\t\t⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙  \n\n");
     printf("\t\t\t欢迎进入员工管理系统\n");
}

void menu()
{
     printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
     printf("\t\t  \t   ◎1.创建员工信息\t      \n");
     printf("\t\t  \t   ◎2.插入员工信息\t      \n");
     printf("\t\t  \t   ◎3.修改员工信息\t      \n");
     printf("\t\t  \t   ◎4.删除员工信息\t      \n");
     printf("\t\t  \t   ◎5.查询员工信息\t      \n");
     printf("\t\t  \t   ◎6.员工信息排序\t      \n");
     printf("\t\t  \t   ◎7.显示员工信息\t      \n");
     printf("\t\t  \t   ◎8.员工工资情况\t      \n");
     printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
     printf("注意:输入均以回车作为结束\n");
     printf("please choise 1--8:\t  ");
     //putchar(12);
}

void Inset(Linklist Head){
    Linklist s,L;
    unsigned int agee;
    unsigned long wagee,numm;
    unsigned long long telephonee;
    char namee[15],genderr,departmentt[18];
    if(Head==NULL){
        Head=(Linklist)malloc(sizeof(Lnode));
        Head->next=NULL;
    }
    L=Head;
    cout<<"  ----------请输入员工个人信息----------"<     cout<<"职工号  姓名  性别 年龄  单位    工资  电话号"<     cin>>numm>>namee>>genderr>>agee>>departmentt>>wagee>>telephonee;
    s=(Linklist)malloc(sizeof(Lnode));
    s->num=numm;
    s->wage=wagee;
    s->telephone=telephonee;
    s->age=agee;
    strcpy(s->name,namee);
    s->gender=genderr;
    strcpy(s->department,departmentt);
    s->next=L->next;
    L->next=s;
    cout<<"插入成功!"< }

Linklist Create(){
    Linklist L,s;
    int n;
    unsigned int agee;
    unsigned long wagee,numm;
    unsigned long long telephonee;
    char namee[15],genderr,departmentt[18];
    L=(Linklist)malloc(sizeof(Lnode));
    L->next=NULL;
    cout<<"请输入成员总人数:";
    cin>>n;
    cout<<"  ----------请输入员工个人信息----------"<     cout<<"职工号  姓名  性别 年龄  单位    工资  电话号"<     while(n>0){
        cin>>numm>>namee>>genderr>>agee>>departmentt>>wagee>>telephonee;
        s=(Linklist)malloc(sizeof(Lnode));
        s->num=numm;
        s->wage=wagee;
        s->telephone=telephonee;
        s->age=agee;
        strcpy(s->name,namee);
        s->gender=genderr;
        strcpy(s->department,departmentt);
        s->next=L->next;
        L->next=s;
        n--;
    }
    cout<<"创建成功!"<     return L;
}

void Dellist(Linklist Head,int n){
    Linklist p,q;
    p=Head;
    int flag=0;
    while(p->next!=NULL){
        q=p->next;
        if(q->num==n){
            flag=1;
            break;
        }
        p=p->next;
    }
    if(flag){
        q=p->next;
        p->next=q->next;
        free(q);
        cout<<"删除成功!"<     }
    else cout<<"删除失败!"< }

int Change(Linklist Head,unsigned long int n){
    Linklist p,q;
    p=Head;
    unsigned long long int flag=0,cc=0,ch;
    char sf[30],sc;
    while(p->next!=NULL){
        p=p->next;
        if(p->num==n){
            flag=1;
            break;
        }
    }
    if(flag){
        cout<<"查找成功!"<         cout<<"请选择修改内容:1(姓名)、2(性别)、3(年龄)、4(单位)、5(工资)、6(电话号) :"<         cin>>cc;
        if(cc==1){
            cout<<"请输入修改后的姓名:";
            cin>>sf;
            strcpy(p->name,sf);
        }
        if(cc==2){
            cout<<"请输入修改后的性别:";
            cin>>sc;
            p->gender=sc;
        }
        if(cc==3){
            cout<<"请输入修改后的年龄:";
            cin>>ch;
            p->age=ch;
        }
        if(cc==4){
            cout<<"请输入修改后的单位:";
            cin>>sf;
            strcpy(p->department,sf);
        }
        if(cc==5){
            cout<<"请输入修改后的工资:";
            cin>>ch;
            p->wage=ch;
        }
        if(cc==6){
            cout<<"请输入修改后的电话号:";
            cin>>ch;
            p->telephone=ch;
        }
        return 1;
    }
    return 0;
}

void Show(Linklist Head){
    Linklist p;
    p=Head;
    if(p!=NULL&&p->next!=NULL){
    cout<<"职工号  姓名  性别 年龄  单位    工资  电话号"<     while(p->next!=NULL){
        p=p->next;
        cout<num<name<gender<age<department<wage<telephone<     }}
    else
        cout<<"空表,请填补信息后再操作!"< }

void Showm(Linklist Head){
    Linklist p;
    p=Head;
    double sum=0;
    int nume=0;
    if(p!=NULL&&p->next!=NULL){
    cout<<"职工号  姓名    工资"<     while(p->next!=NULL){
        p=p->next;
        sum+=p->wage;nume++;
        cout<num<name<wage<     }
    cout<<"平均工资:";
    cout<     else
        cout<<"空表,请填补信息后再操作!"< }

void Search(Linklist Head){
    unsigned long long int sea,sead,flag=0;
    char seac[30];
    Linklist p;
    p=Head;
    cout<<"请选择查找方式:1(职工号)、2(姓名)、3(电话号):";
    cin>>sea;
    if(sea==1){
        cout<<"请输入该员工的职工号:";
        cin>>sead;
        while(p->next!=NULL){
            p=p->next;
            if(p->num==sead){
                flag=1;
                cout<<"查找成功!"<                 cout<<"职工号  姓名  性别 年龄  单位    工资  电话号"<                 cout<num<name<gender<age<department<wage<telephone<                 break;
            }
        }
    }
    if(sea==2){
        cout<<"请输入该员工的姓名:";
        cin>>seac;
        while(p->next!=NULL){
            p=p->next;
            if(strcmp(p->name,seac)==0){
                flag=1;
                cout<<"查找成功!"<                 cout<<"职工号  姓名  性别 年龄  单位    工资  电话号"<                 cout<num<name<gender<age<department<wage<telephone<                 break;
            }
        }
    }
    if(sea==3){
        cout<<"请输入该员工的电话号:";
        cin>>sead;
        while(p->next!=NULL){
            p=p->next;
            if(p->telephone==sead){
                flag=1;
                cout<<"查找成功!"<                 cout<<"职工号  姓名  性别 年龄  单位    工资  电话号"<                 cout<num<name<gender<age<department<wage<telephone<                 break;
            }
        }
    }
    if(!flag) cout<<"查找失败!"< }

void swapp(Lnode* a,Lnode* b){
    unsigned long long int tem;
    char temm[30],tt;
    tem=a->num;
    a->num=b->num;
    b->num=tem;
    tem=a->age;
    a->age=b->age;
    b->age=tem;
    tem=a->wage;
    a->wage=b->wage;
    b->wage=tem;
    tem=a->telephone;
    a->telephone=b->telephone;
    b->telephone=tem;
    strcpy(temm,a->name);
    strcpy(a->name,b->name);
    strcpy(b->name,temm);
    strcpy(temm,a->department);
    strcpy(a->department,b->department);
    strcpy(b->department,temm);
    tt=a->gender;
    a->gender=b->gender;
    b->gender=tt;
}

//找到分割点
Lnode* getSeparator_1(Lnode* pBegin,Lnode* pEnd){
    Lnode* p = pBegin;
    Lnode* q = pBegin->next;
    int key = p->num;
    while(q!=pEnd){
        if(q->num < key){
            p = p->next;
            swapp(p,q);
        }
        q = q->next;
    }
    swapp(pBegin,p);
    return p;
}

Lnode* getSeparator_2(Lnode* pBegin,Lnode* pEnd){
    Lnode* p = pBegin;
    Lnode* q = pBegin->next;
    char key[30];
    strcpy(key,p->name);
    while(q!=pEnd){
        if(strcmp(q->name,key)<0){
            p = p->next;
            swapp(p,q);
        }
        q = q->next;
    }
    swapp(pBegin,p);
    return p;
}

Lnode* getSeparator_3(Lnode* pBegin,Lnode* pEnd){
    Lnode* p = pBegin;
    Lnode* q = pBegin->next;
    int key = p->wage;
    while(q!=pEnd){
        if(q->wage < key){
            p = p->next;
            swapp(p,q);
        }
        q = q->next;
    }
    swapp(pBegin,p);
    return p;
}

//快速排序
void fastSort_1(Lnode* pBegin,Lnode* pEnd){
    if(pBegin != pEnd){
        Lnode* separator = getSeparator_1(pBegin,pEnd);
        fastSort_1(pBegin,separator);
        fastSort_1(separator->next,pEnd);
    }
}

void fastSort_2(Lnode* pBegin,Lnode* pEnd){
    if(pBegin != pEnd){
        Lnode* separator = getSeparator_2(pBegin,pEnd);
        fastSort_2(pBegin,separator);
        fastSort_2(separator->next,pEnd);
    }
}

void fastSort_3(Lnode* pBegin,Lnode* pEnd){
    if(pBegin != pEnd){
        Lnode* separator = getSeparator_3(pBegin,pEnd);
        fastSort_3(pBegin,separator);
        fastSort_3(separator->next,pEnd);
    }
}

void Sort(Linklist Head){
    Linklist p;
    p=Head;
    int sad=0;
    cout<<"请选择关键字排序:1(职工号)、2(姓名)、3(工资):"<     cin>>sad;
    if(sad==1){
        fastSort_1(p->next,NULL);
        cout<<"排序成功!"<     }
    if(sad==2){
        fastSort_2(p->next,NULL);
        cout<<"排序成功!"<     }
    if(sad==3){
        fastSort_3(p->next,NULL);
        cout<<"排序成功!"<     }
}

int main()
{
    int chol=0,num;
    Linklist Lhead=NULL,p=NULL;
    frist_print();
    menu();
    cin>>chol;
    while(1){
        switch(chol){
            case 1:
                Lhead=Create();
                p=Lhead;
                system("pause");
                system("cls");
                menu();
                break;
            case 2:
                Inset(p);
                system("pause");
                system("cls");
                menu();
                break;
            case 3:
                cout<<"请输入要修改的员工编号:";
                cin>>num;
                Change(p,num);
                system("pause");
                system("cls");
                menu();
                break;
            case 4:
                cout<<"请输入要删除的员工编号:";
                cin>>num;
                Dellist(p,num);
                system("pause");
                system("cls");
                menu();
                break;
            case 5:
                Search(p);
                system("pause");
                system("cls");
                menu();
                break;
            case 6:
                Sort(p);
                system("pause");
                system("cls");
                menu();
                break;
            case 7:
                Show(p);
                system("pause");
                system("cls");
                menu();
                break;
            case 8:
                Showm(p);
                system("pause");
                system("cls");
                menu();
                break;
        }
        cin>>chol;
    }
    return 0;
}
/*
6
201521 城市化  y    23  技术部  300000 15648573763
201423 大数据  y    27  管理部  500000 15648675762
201628 好美丽  M    20  生活部  300000 15345436543
201522 很年轻  M    22  人工部  100000 18845335725
201422 真有钱  y    25  资金部  400000 15634675125
201523 差不多  y    24  后勤部  200000 18834534211
*/

 

你可能感兴趣的:(数据结构)