员工管理

来源:互联网 发布:淘宝有电棍卖吗 编辑:程序博客网 时间:2024/04/27 14:03

问题描述:

每个员工的信息基本包括:编号,姓名,性别,单位,年龄,电话,工资。系统能够完成对员工信息的创建,插入,更新,排序,删除,平均工资计算,查找等。

源代码:(自己编的,不好请谅解!)

 

#include"stdio.h"
#include"stdlib.h"

typedef struct WorkNode
{
 char name[15];//员工名字
    char gender[7];//性别
 char department[20];//单位
 char telephone[12];//电话
    long age;//年龄
 long wage;//工资
 long num;//职工号
 struct WorkNode *next;
}Works;

void InitWorks(Works *wk)//初始化
{
 wk=(Works *)malloc(sizeof(Works));
 wk=NULL;
}

Works *CreatWorkList(Works *wk)
//按输入顺序创建职工表
{
 int n,i;
 Works *p=wk,*q=NULL,*head=NULL;
 
 head=p;
 printf("职工表为空,将创建职工表-----:/n");
 printf("请输入职工统计数:/n");
 scanf("%d",&n);
 if(n==0)
 {
  printf("----输入错误!/n");
  return (head);
 }
 printf("请依次输入职工信息:/n");
    printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
 for(i=0;i<n;i++)
 {
  q=(Works *)malloc(sizeof(Works));
  scanf("%ld%s%s%s%ld%s%ld",&(q->num),q->name,q->gender,
   q->department,&(q->age),q->telephone,&(q->wage));
        if(p==NULL)
   head=q;
  else 
   p->next=q;
  p=q;
 }
 p->next=NULL;
 printf("/n----创建完毕!/n/n");
 return (head);

}
Works *InsertWork(Works *wk)
//插入职工信息,按职工号顺序从小到大插入
{
 Works *q=NULL,*p=wk,*s=wk;
    printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
    q=(Works *)malloc(sizeof(Works));
 scanf("%ld%s%s%s%ld%s%ld",&(q->num),q->name,q->gender,
  q->department,&(q->age),q->telephone,&(q->wage));
    if(p==NULL)
 {
  printf("职工表为空,无法完成插入操作!/n");
  return wk;
 }
 else
 {
  while(s->num!=q->num&&s->next!=NULL)
   s=s->next;
  if(s->num==q->num)
  {
   printf("----职工号已存在,输入错误!!/n");
   return wk;
  }
         else
  {
   s=NULL;
   while(p!=NULL)
   {
          if(p->num>q->num&&s==NULL)
    {
           q->next=p;
           wk=q;
     break;
    }
    else if(p->num>q->num&&s!=NULL)
    {
     q->next=p;
     s->next=q;
     break;
    }
          else if(p->num<q->num)
    {
     s=p;
           p=p->next;
    }
   }
       if(p==NULL)
   {
    q->next=p;
    s->next=q;
   }
   return wk;
  }
 }
}


int Output(Works wk)
{
 Works *p=&wk;
 printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
 if(p==NULL)
 {
  printf("----职工表为空,请创建!/n");
  return 0;
 }
    while(p!=NULL)
 {
     printf("%ld  %s  %s  %s  %ld  %s  %ld  /n",p->num,p->name,p->gender,
      p->department,p->age,p->telephone,p->wage);
  p=p->next;
 }
 return 1;
}
 

Works *PaixuWork(Works *wk)
//按职工号给职工排序
{
 int flag;
 Works *p=wk,*r=wk,*s=NULL,*head=wk;
    flag=0;//如果有序列变化为1,否则为0
 do
 {
  flag=0;r=wk;p=wk;
  while(r->next!=NULL)
  {
   r=r->next;
   if(r->num<p->num&&s==NULL)
   {
                p->next=r->next;
    r->next=p;
    head=r;
                flag=1;
                s=r;
       r=p;
       p=s;
   }
      else if(r->num<p->num&&s!=NULL)
   {
       p->next=r->next;
    r->next=p;
    s->next=r;
       flag=1;
                s=r;
       r=p;
       p=s;
   }
   s=p;
   p=p->next;
   
  }
 }while(flag==1);
 printf("----排序完成!/n");
 return(head);
}

void IndexWork(Works wk)
{
 long hao;
 int i,n;
 Works *p=NULL;
 printf("请问需要查找几人?/n");
 scanf("%d",&n);
 printf("请依次输入被查找职工的职工号:/n");
 for(i=0;i<n;i++)
 {
  scanf("%ld",&hao);
  p=&wk;
  while(p!=NULL)
  {
   if(hao==p->num)
   {
       printf("职工号为%ld的人的信息为: %s  %s  %s  %ld  %s  %ld  /n",p->num,p->name,
     p->gender,p->department,p->age,p->telephone,p->wage);
    break;
   }
   else   
        p=p->next;
  }
        if(p==NULL)
      printf("没有找到职工号为%ld的职工的信息!/n",hao);
  printf("/n");
 }
}

 

Works *DeleteWork(Works *wk,int n)
{
 int i;
 long hao;
 Works *p=NULL,*q=NULL,*r=NULL;
 if(n<1)
 {
  printf("----输入为零,信息错误!/n");
  return(wk);
 }
 printf("请依次输入职工号:/n");
 for(i=0;i<n;i++)
 {
  scanf("%ld",&hao);
  p=wk;r=wk;
     if(hao==p->num)//第一个节点
  {
      wk=p->next;
   q=p;
   printf("已删除编号为%ld的职工信息!/n",q->num);
      free(q);
           
  }

  else
  {
   p=p->next;
   while(p!=NULL&&hao!=p->num)
   {
    r=r->next;
    p=p->next;
   }
   if(p==NULL)
    printf("/n----没有找到该员工的信息!/n");
   else
   {
    r->next=p->next;
    q=p;
    printf("已删除编号为%ld的职工!/n",hao);
    free(q);
   }
  }
 }
 return(wk);
}

void ChangeWork(Works *wk)
{
 int i,n,hao;
 Works *p=wk;
 printf("请输入需要改变信息的人数:/n");
 scanf("%d",&n);
 for(i=0;i<n;i++)
 { 
  p=wk;
     printf("请输入要改变信息的职工的编号:/n");
  scanf("%ld",&hao);
        while(p!=NULL)
  {
   if(hao==p->num)
   {
       printf("职工号为%ld的人的原始信息为: %s  %s  %s  %ld  %s  %ld  /n",p->num,p->name,
     p->gender,p->department,p->age,p->telephone,p->wage);
    break;
   }
   else   
        p=p->next;
  }
  printf("请依次输入更改信息:/n");
  printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
  scanf("%ld%s%s%s%ld%s%ld",&(p->num),p->name,p->gender,
      p->department,&(p->age),p->telephone,&(p->wage));
  printf("/n更改后职工号、姓名、性别、单位、年龄、电话、工资信息为:/n");
  printf("%ld  %s  %s  %s  %ld  %s  %ld  /n",p->num,p->name,
     p->gender,p->department,p->age,p->telephone,p->wage);
 }
}

 

 


void WageWork(Works wk)
{
 double total=0,count=0;
 double aver;
 Works *p=&wk;
 while(p!=NULL)
 {
  printf("%ld的工资是--%ld/n",p->num,p->wage);
  total=total+p->wage;
  ++count;
  p=p->next;
 }
 aver=total/count;
 printf("所有员工的平均工资为%lf",aver);
}

 

 


void main()
{
 int i,j,k,n;
 Works *w=NULL;
 InitWorks(w);
 
 do
 {
     printf("/t/t--------职工管理表--------/n/n");
     printf("/t---------------*****************-----------------/n/n");
     printf("/t/t/t创建职工管理表-----1/t/t/n/n");
     printf("/t/t/t插入新员工信息-----2/t/t/n/n");
  printf("/t/t/t按员工号查找员工信息-----3/t/t/n/n");
  printf("/t/t/t按员工号删除员工信息-----4/t/t/n/n");
  printf("/t/t/t按员工号排序员工信息----5/t/t/n/n");
  printf("/t/t/t输出所有员工信息----6/t/t/n/n");
  printf("/t/t/t输出所有员工工资和平均工资----7/t/t/n/n");
  printf("/t/t/t更改职工信息----8/t/t/n/n");
  printf("/t/t/t退出-----9/t/t/n/n");
  printf("/t---------------****************-----------------/n/n");
  printf("请输入要执行的操作序号:/n");
  scanf("%d",&i);
  switch(i)
  {
      case 1:
       w=CreatWorkList(w);
       break;
   case 2:
    printf("请输入要插入的员工数:/n");
    scanf("%d",&k);
    printf("自动按职工号大小插入:/n");
    for(j=0;j<k;j++)
        w=InsertWork(w);
    printf("/n插入完毕!/n");
    break;
   case 3:
    IndexWork(*w);
    break;
   case 4:
    printf("/n请输入要删除的职工信息的个数:/n");
    scanf("%ld",&n);
    w=DeleteWork(w,n);
    break;
   case 5:
    w=PaixuWork(w);
                Output(*w);
    break;
   case 6:
    Output(*w);
    break;
   case 7:
    WageWork(*w);
    break;
   case 8:
    ChangeWork(w);
    break;
   default:
    exit(0);
  }
 }while(i!=9);
}