员工管理系统

【员工管理系统】

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

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

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

通过链表实现

数据结构:

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;
}




测试数据:


5
zhangsan
jiaowuchu 
zhuzhen 
m 
39 
18846795237 
5000 
11101 
shuoshi 
jiashuqu#1*1

lisi
bangongshi
zhiyuan
f
32
18846789454
4500
11505
benke
jiashuqu#2*8

wangwu  
yanjiushi 
caozuoyuan 
f 
28 
18867887854 
4750 
11809 
benke 
jiashuqu#3*5

zhaoliu  
baoweichu 
baoan 
m 
42 
18564973854 
3750 
11209 
gaozhong 
jiashuqu#7*4

zhangsan  
jiaowuchu 
chuzhang 
m 
45 
13345671238 
6600 
11001 
yanjiusheng 
jiashuqu#4*3



  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
员工管理系统问题描述每个员工信息包括编号姓名性别出生年月历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。 基本要求:排序:按不同关键字,对所有员工信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工信息;删除,按编号删除已离职的员工信息。 选作内容:实现图形用户界面。 通过链表实现 数据结构: #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;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值