公司人事管理系统

来源:互联网 发布:苹果mac版办公软件 编辑:程序博客网 时间:2024/05/01 19:14

一、程序设计题目

    公司人事管理系统。能够实现对公司人员的基本档案的存储、编辑、查看,删除、统计、排序以及对该程序的保密等功能。

二、设计原理框图

三、程序源代码

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <conio.h>

#define N 100

struct employee/*职工基本情况*/

{

 int num;        /*工号*/

 int position;     /*职位1为董事长2为总经理3为副总经理等*/

 char name[8];   /*姓名*/

 char sex[2];     /*性别f为女m为男*/

 int age;         /*年龄*/

 int cult;         /*文化程度1为专家2为博士3为硕士4为学士5为其他*/

 int salary;       /*工资*/

 int state;        /*健康情况分为good,general,bad*/

}em[N];

 

struct empsalary   /*职工工资与姓名的文件*/

{

 char name[8];

 int salary;

}emps[N];

 

void manage();

void query();

void input();

void display();

void change();

void del();

void add();

void count();

int changeposition();

int changecult();

int changesalary();

int changestate();

void querysalary();

void creat();

 

char password[7]="123456";

void main()

{

 int choice;

 char s[7];

 int flag=0;

 int n=3;

 do

 {

  printf("请你输入密码:/n");

  scanf("%s",s);

  if(!strcmp(s,password)) /*若密码正确*/

  {

   printf("恭喜你登陆成功/n/n/n");

   flag=1;

   break;

  }

  else

  {

   printf("密码错误请重新输入:/n");

   n--;

  }

 }while(n>0);

 

 if(!flag)

 {

  printf("你的输入次数已超过限制次数,再见/n");

 }

 do

 {

  printf("~~~~~~~~~~/t/t/t~~~~~~~~~~~~/n");

  printf("/t/t欢迎进入人事管理系统中文版/n");

  printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%/n");

  printf("/t/t请你选择操作类型:/n");

  printf("==============/t/t==============/n");

  printf("/t/t1进入管理系统/n");

  printf("/t/t2进入查询系统/n");

  printf("/t/t0退出系统/n");

  printf("==============/t/t==============/n");

  scanf("%d",&choice);

  switch(choice)

  {

  case 1:

      manage();

   break;

  case 2:

      query();

   break;

  case 0:

   {

    printf("谢谢使用再见/n");

     exit(0);

   }

  default:

   {

       printf("输入错误请重新输入:/n");

    return;

   }

  }

 }while(1);

}

 

 

 

 

void manage()

{

 int choicemanage;

 char choice='y';

 while(choice=='y'||choice=='Y')

 {

  printf("/t/t欢迎进入管理系统/n");

  printf("===================/n");

  printf("/t/t请你选择操作类型:/n");

  printf("/t/t1输入职工信息/n");

  printf("/t/t2显示职工信息/n");

  printf("/t/t3修改职工信息/n");

  printf("/t/t4追加一个职工信息/n");

  printf("/t/t5删除一个职工信息/n");

  printf("/t/t6统计职工信息/n");

  printf("/t/t0返回/n");

  printf("=====================/n");

  scanf("%d",&choicemanage);

  switch(choicemanage)

  {

  case 1:

   input();/*输入职工信息*/

   break;

  case 2:

   display();/*显示职工信息*/

   break;

  case 3:

   change();/*修改职工信息*/

   break;

  case 4:

   add();/*追加一个职工信息*/

   break;

  case 5:

   del();/*删除一个职工信息*/

   break;

  case 6:

   count();/*统计职工信息*/

   break;

  case 0:

   printf("谢谢你的使用再见/n");

   return;

  default:

   printf("你的输入有错请重新输入/n");

  }

  printf("是否继续管理?(y/n)");

  scanf("%s",&choice);

 }

 if((choice)=='N'||(choice)=='n')

 {

     printf("输入完毕,任意键返回/n");

     getch();

     return;

 }

}

 

void input()

{

 FILE *fp;

 int i=0;

 char choiceinput='y';

 if((fp=fopen("employee.txt","w"))==NULL)

  return;

 while(choiceinput=='y'||choiceinput=='Y')

 {

  i++;

  printf("%d个职工/n",i);

  printf("/n");

  printf("请你输入工号:/n");/*输入工号*/

  scanf("%d",&em[i].num);

  printf("/n");

  printf("请你输入职位:/n");/*输入职位*/

  printf("1为董事长2为总经理3为副总经理/n");

  printf("4为经理5为副经理6为秘书/n");

  printf("7为技术员8为领班9为员工/n");

 

  scanf("%d",&em[i].position);

  printf("/n");

  printf("请你输入姓名:/n");/*输入姓名*/

  scanf("%s",em[i].name);

  printf("/n");

  printf("请你输入性别以m为男f为女:/n");/*输入性别*/

  scanf("%s",em[i].sex);

  printf("/n");

  printf("请你输入文化程度:/n");/*输入文化程度*/

  printf("1为专家2为博士3为硕士4为学士5为其他/n");

  scanf("%d",&em[i].cult);

  printf("/n");

  printf("请你输入工资:/n");/*输入工资*/

  scanf("%d",&em[i].salary);

  printf("/n");

  printf("请你输入身体情况:/n");/*身体情况*/

  printf("12为一般3为差/n");

        scanf("%d",&em[i].state);

  printf("/n");

  printf("是否继续输入?(y/n)/n");

  scanf("%s",&choiceinput);

  fwrite(&em[i],sizeof(struct employee),1,fp);

 }

 if((choiceinput)=='N')

       {

  fclose(fp);

  printf("输入完毕,任意键返回/n");

  getch();

  return;

       }

}

 

 

 

void display()/*显示职工信息*/

 

{

 FILE *fp;

 int i;

 if((fp=fopen("employee.txt","r"))==NULL)

  return;

 printf("输出结果:/n");

 printf("工号  职位  姓名  性别  文化程度  工资  身体情况/n");

 for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)

 {

  printf("工号%d/n",em[i].num);

  printf("职位为%d/n",em[i].position);

  printf("1为董事长2为总经理3为副总经理/n");

  printf("4为经理5为副经理6为秘书/n");

  printf("7为技术员8为领班9为员工/n");

  printf("姓名为%s/n",em[i].name);

  printf("性别为%s/n",em[i].sex);

  printf("其中m为男f为女/n");

  printf("文化程度为%d/n",em[i].cult);

  printf("1为专家2为博士3为硕士4为学士5为其他/n");

  printf("工资为%d/n",em[i].salary);

  printf("身体情况为%d/n",em[i].state);

  printf("1好2为一般3为差/n");

 }

 printf("完毕按任意键返回/n");

 getch();

    fclose(fp);

    return;

}

 

void change()

{

 FILE *fp;

 int i;

 char chname[8];

 int choicechange;

 printf("请你输入要修改的人的姓名:/n");

 scanf("%s",&chname);

 if((fp=fopen("employee.txt","w+"))==NULL)

 {

  printf("不能够打开这个文件/n");

  return;

 }

 for(i=0;i<N;i++)

 {

  if(strcmp(chname,em[i].name)==0)

  {

   printf("这是你要修改的人的信息/n");

   printf("工号为%d职位为%d姓名为%s性别为%s文化程度为%d工资为%d身体为%d/n",em[i].num,em[i].position,em[i].name,em[i].sex,em[i].cult,em[i].salary,em[i].state);

   printf("------------------------------------------------------------/n");

   printf("请你输入要修改的部分:/n");

   printf("======================/n");

   printf("1修改职位/n");

   printf("2修改文化程度/n");

   printf("3修改工资/n");

   printf("4修改身体情况/n");

   printf("0退出系统/n");

   printf("======================/n");

   printf("请选择/n");

   scanf("%d",&choicechange);

   switch(choicechange)

   {

   case 1:

    em[i].position=changeposition();

    break;

   case 2:

    em[i].cult=changecult();

    break;

   case 3:

    em[i].salary=changesalary();

    break;

   case 4:

    em[i].state=changestate();

    break;

   case 0:

    return;

   default :

    printf("输入有错误");

   }

   fwrite(&em[i],sizeof(struct employee),1,fp);

  }

 }

 fclose(fp);

 printf("操作完成按任意键返回/n");

 

 getch();

 return;

}

 

int changeposition()

{

 int newposition;

 printf("请你输入新职位:/n");

 printf("1为董事长2为总经理3为副总经理/n");

 printf("4为经理5为副经理6为秘书/n");

 printf("7为技术员8为领班9为员工/n");

 scanf("%d",&newposition);

 return(newposition);

}

 

int changecult()

{

 int newcult;

 printf("请你输入新的文凭:/n");

 printf("1为专家2为博士3为硕士4为学士5为其他/n");

 scanf("%d",&newcult);

 return(newcult);

}

 

int changesalary()

{

 int newsalary;

 printf("请你输入新的工资:/n");

 scanf("%d",&newsalary);

 return(newsalary);

}

 

int changestate()

{

 int newstate;

 printf("请你输入现在的身体情况:/n");

 printf("1好2为一般3为差/n");

 scanf("%d",&newstate);

 return(newstate);

}

 

void add()/*追加一个职工信息*/

{

 struct employee emp;

 FILE *fp;

 if((fp=fopen("employee.txt","ab+"))==NULL)

 {

  printf("不能够打开这个文件/n");

  getch();

  return;

 }

 printf("请你输入新人的内容:/n");

 printf("请你输入工号:/n");/*输入工号*/

 scanf("%d",&emp.num);

 printf("请你输入职位:/n");/*输入职位*/

 printf("1为董事长2为总经理3为副总经理/n");

 printf("4为经理5为副经理6为秘书/n");

 printf("7为技术员8为领班9为员工/n");

 scanf("%d",&emp.position);

 printf("请你输入姓名:/n");/*输入姓名*/

 scanf("%s",emp.name);

 printf("请你输入性别以m为男f为女:/n");/*输入性别*/

 scanf("%s",emp.sex);

 printf("请你输入文化程度:/n");/*输入文化程度*/

 printf("1为专家2为博士3为硕士4为学士5为其他/n");

 scanf("%d",&emp.cult);

 printf("请你输入工资:/n");/*输入工资*/

 scanf("%d",&emp.salary);

 printf("请你输入身体情况:/n");/*身体情况*/

 printf("1好2为一般3为差/n");

    scanf("%d",&emp.state);

 fwrite(&emp,sizeof(struct employee),1,fp);

 rewind(fp);

 printf("插入完毕,按任意键返回/n");

 getch();

 fclose(fp);

 return;

}

 

void del()/*删除一个职工信息*/

{

 int i=0;

  char delname[8];

 FILE *fp;

 if((fp=fopen("employee.txt","w"))==NULL)

 {

  printf("文件为空,不能够打开/n");

  printf("按任意键返回/n");

  getch();

  return;

 }

 printf("请你输入要删除的人的姓名:/n");/*删除的职工的信息*/

 scanf("%s",delname);

 for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)

 {

  if(strcmp(em[i].name,delname)!=0)

   fwrite(&em[i],sizeof(struct employee),1,fp);

 }

  fclose(fp);

  if((fp=fopen("employee.txt","r"))==NULL)/*显示新的职工的信息*/

   return;

  printf("新的职工的信息为:/n");

  for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)

  {

   printf("工号%d",em[i].num);

      printf("职位为%d",em[i].position);

      printf("1为董事长2为总经理3为副总经理/n");

      printf("4为经理5为副经理6为秘书/n");

      printf("7为技术员8为领班9为员工/n");

      printf("姓名为%s",em[i].name[8]);

      printf("性别为%s",em[i].sex[2]);

      printf("其中m为男f为女");

      printf("文化程度为%d",em[i].cult);

      printf("1为专家2为博士3为硕士4为学士5为其他/n");

      printf("工资为%d",em[i].salary);

      printf("身体情况为%d",em[i].state);

      printf("1好2为一般3为差/n");

      fclose(fp);

  }

}

 

 

void count()

{

 FILE *fp;

 int i=0;

 int num=0;/*总人数统计*/

 int mnum=0,fnum=0;/*性别人数统计*/

 int expernum=0,doctornum=0,masternum=0,bechelornum=0,othernum=0;/*学位人数统计*/

 int dsznum=0,zglnum=0,fzglnum=0,glnum=0,fglnum=0;/*职位人数统计*/

 int mishunum=0,jsynum=0,lbnum=0,ygnum=0;

 if((fp=fopen("employee.txt","r"))==NULL)

 {

  printf("不能够打开这个文件/n");

  printf("按任意键继续/n");

  getch();

  return;

 }

 do

 {

  fread(&em[i],sizeof(struct employee),1,fp);

  if(feof(fp))

   break;

  num++;

  if(strcmp(em[i].sex,"m")==0)

   mnum++;

  if(strcmp(em[i].sex,"f")==0)

   fnum++;

  if(em[i].cult==1)

   expernum++;

  if(em[i].cult==2)

   doctornum++;

  if(em[i].cult==3)

   masternum++;

  if(em[i].cult==4)

   bechelornum++;

  if(em[i].cult==5)

   othernum++;

  if(em[i].position==1)/*职位统计*/

   dsznum++;

  if(em[i].position==2)

   zglnum++;

  if(em[i].position==3)

   fzglnum++;

  if(em[i].position==4)

   glnum++;

  if(em[i].position==5)

   fglnum++;

  if(em[i].position==6)

   mishunum++;

  if(em[i].position==7)

   jsynum++;

  if(em[i].position==8)

   lbnum++;

  if(em[i].position==9)

   ygnum++;

  i++;

 }while(1);

 printf("总人数为%d/n",num);

 printf("====性别分类=====/n");

 printf("男人数为%d/n",mnum);

 printf("女人数为%d/n",fnum);

 printf("=====文凭分类=====/n");

 printf("专家数为%d/n",expernum);

 printf("博士数为%d/n",doctornum);

 printf("硕士数为%d/n",masternum);

 printf("学士数为%d/n",bechelornum);

 printf("其他的数为%d/n",othernum);

 printf("=====职位分类========/n");

 printf("董事长数为%d/n",dsznum);

 printf("总经理数为%d/n",zglnum);

 printf("副总经理数为%d",fzglnum);

 printf("经理数为%d",glnum);

 printf("副经理数为%d",fglnum);

 printf("秘书数为%d",mishunum);

 printf("技术员数为%d",jsynum);

 printf("领班人数为%d",lbnum);

 printf("员工数为%d",ygnum);

 fclose(fp);

 return;

}

 

 void query()

{

 FILE *fp;

 int i=0;

 char quename[8];

 if((fp=fopen("employee.txt","r"))==NULL)

 {

  printf("不能够打开文件,按任意键返回/n");

  getch();

  return;

 }

 printf("请你输入要查询的人的姓名/n");

 scanf("%s",quename);

 for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)

    {

      if(strcmp(em[i].name,quename)==0)  /*找到,并显示该职工记录*/

   {

       printf("/t/t/n查询到的职工号或姓名为的信息如下:/n");

          printf("以下是你要查询的人的信息/n");

    printf("工号%d",em[i].num);

    printf("职位为%d",em[i].position);

    printf("/t1为董事长2为总经理3为副总经理/n");

    printf("/t4为经理5为副经理6为秘书/n");

    printf("/t7为技术员8为领班9为员工/n");

    printf("姓名为%s",em[i].name);

    printf("性别为%s",em[i].sex);

    printf("/t其中m为男f为女");

    printf("文化程度为%d",em[i].cult);

    printf("/t1为专家2为博士3为硕士4为学士5为其他/n");

    printf("工资为%d",em[i].salary);

      printf("身体情况为%d",em[i].state);

    printf("/n");

    printf("查询完毕,按任意键返回/n");

    getch();

          fclose(fp);

    return;

   }

 }

 printf("没有这样的人,按任意键返回/n");

 getch();

    fclose(fp);

    return;

}

 

void querysalary()

{

 int i;

 FILE *fp1,*fp2;

 creat();

 if((fp1=fopen("employee.txt","w+"))==NULL)

  return;

 for(i=0;fread(&em[i],sizeof(struct employee),1,fp1)!=0;i++)

 {

     printf("输出结果为:/n");

     printf("工号%d",em[i].num);

        printf("职位为%d",em[i].position);

     printf("1为董事长2为总经理3为副总经理/n");

     printf("4为经理5为副经理6为秘书/n");

     printf("7为技术员8为领班9为员工/n");

     printf("姓名为%s",em[i].name[8]);

     printf("性别为%s",em[i].sex[2]);

            printf("其中m为男f为女");

     printf("文化程度为%d",em[i].cult);

     printf("1为专家2为博士3为硕士4为学士5为其他/n");

     printf("工资为%d",em[i].salary);

     printf("身体情况为%d",em[i].state);

     printf("1好2为一般3为差/n");

  strcpy(emps[i].name,em[i].name);

  emps[i].salary=em[i].salary;

 }

 if((fp2=fopen("empsalary.txt","w"))==NULL)

  return;

 for(i=0;i<N;i++)

  fwrite(&emps[i],sizeof(struct empsalary),1,fp2);

 fclose(fp1);

 fclose(fp2);

}

 void creat()

{

 FILE *fp;

 if((fp=fopen("employee.txt","w+"))==NULL)

  return;

 input();

 fclose(fp);

}

int INDEX[N];

void sort_it(char nn)

 {

      int n,m,p,x,t[N];

      for(n=0;n<N;n++)

       {

            switch(nn)

            {case'1':t[n]=em[n].num;break;

           case'2':t[n]=em[n].name;break;

           case'3':t[n]=em[n].sex;break;

           case'4':t[n]=em[n].position;break;

           case'5':t[n]=em[n].cult;break;

           case'6':t[n]=em[n].salary;break;

            }

       }

      for(n=0;n<N;n++)

      {

             x=0;

             p=-1;

             for(m=0;m<N;m++)

             {

                    if(t[m]>x)

                    {

                           x=t[m];p=m;

                    }

             }

             t[p]=-1;

             INDEX[n]=p;

      }

      }

                   

 void browser(void)

{

int x ,n;

char k;

sort_it('1');

while(1)

{

input("浏览");

printf("按数字键选择排序方式或按0返回/n");

printf("工号-1/t姓名/t性别/t年龄/t职位-2/t文化程度-3/t工资-4/n");

for(n=0;n<N;n++)

{

if(INDEX[n]!=-1)

  {

  x=INDEX[n];

  printf("%d/t%s/t",em[x].num,em[x].name);

  printf("%d/t%d/t",em[x].sex,em[x].age);

  printf("%d/t%d/t",em[x].position,em[x].cult);

  printf("%d/t%d/t",em[x].salary);

  }

 }

k=getch();

if(k<'6'&&k>'0')sort_it(k);

else if(k==0)break;

else continue;

}

}

 

 

 

四、运行结果

    开始程序,输入密码,进入程序

 

输入“1”,进入管理系统

 

输入“1”,开始输入职工信息

 

继续输入

 

继续输入

 

输入完毕,返回管理系统

 

输入“2”,使用功能——显示职工信息

 

返回后,输入“3”,修改职工信息

 

修改其“文凭”

 

返回,输入“6”,统计职工信息

 

输入“n”,返回主菜单,输入“2”,进入查询系统。输入要查询人姓名,可以得到其信息

 

使用完毕,输入“0”,退出系统

 

经过试验,程序可以有效的运行,并成功达到预期目的。