首页新闻找找看学习计划

员工档案管理系统

0
悬赏园豆:50 [待解决问题]

程序基本写完,请高手帮修改:C语言

 

三、设计任务描述:

员工档案管理系统是对某单位员工的一些基本信息,如姓名、工号、性别、出身年月、籍贯、学历、职称等进行管理。主要包括信息录入、显示、修改、删除和排序等功能。

四、设计要求:

1、本程序要求通过文件完成所有的操作,开始运行程序时将文件读入结构体数组或链表,退出程序时再将结构体数组或链表内容全部写入文件保存;

2、进入程序时,先以菜单形式显示所有命令,然后用户通过菜单项选择操作;例如:

1   插入员工信息

2   查找员工信息

3   修改员工信息

4   删除员工信息

5   显示所有员工信息

6   员工信息排序

7   退出系统

请选择[1/2/3/4/5/6/7]:

3、在输入一条记录后,即显示提示信息,提示用户是否要求继续输入下一条记录,若回答“y”(大小写通用),则继续,否则退出;

4、查找记录时,可按姓名、工号、性别、学历、职称等多种形式进行;

5、在修改员工记录时,对每项数据先显示,然后询问是否修改,若回答“y”(大小写通用),则输入新值,否则不改;

6、删除记录时,先显示要删除的记录,并询问是否删除,若回答“y”(大小写通用),则删除,否则放弃删除;

7、可按员工姓名、学历或职称等进行排序;

8、显示数据时,若一屏显示不下,可以设置分屏显示;

9、采用模块化编程。系统的各项功能分别用函数编写,并通过主函数调用实现其功能;

10、界面尽可能友好、直观、易操作。应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#define N 100
struct stock    /*员工档案信息*/
{
 char name[20];   /*姓名*/
 char num[8];   /*工号*/
 char gender[8];   /*性别*/
 char birth[8];   /*出生年月*/
 char native[40];  /*籍贯*/
 char edu[8];   /*学历*/
 char title[8];   /*职称*/
}staff[N],c;
int n;
void insert();
void find();
void mod();
void del();
void show();
void sort();

void main()         /*主函数*/

 FILE *fp;
 int i;
 char a;
 printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");
 printf("\t\t\t*  欢迎进入员工档案管理系统   *\n\n");
 printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");
 printf("\n\t\t\t设计者:自动化122班 柴玮\n\n");
 printf("\t\t\t设计时间:2013年6月\n\n");
 printf("\t\t\t请输入回车进入主界面\n\n\n");
 getch();

  if((fp=fopen("test","rb+"))==NULL)
  {
   printf("Can not open this file\n");
   exit(1);
  }
   fread(&n,sizeof(struct stock),1,fp);
   fread(&staff,sizeof(struct stock),n,fp);


 do{
  system("cls");  /*清屏*/
  printf("\t\t\t* * * * * * * * * * * *\n\n");
  printf("\t\t\t*  员工档案管理系统   *\n\n");
  printf("\t\t\t* * * * * * * * * * * *\n\n");
  printf("\n\t\t\t1.插入员工信息");
  printf("\n\t\t\t2.查找员工信息");
  printf("\n\t\t\t3.修改员工信息");
  printf("\n\t\t\t4.删除员工信息");
  printf("\n\t\t\t5.显示所有员工信息");
  printf("\n\t\t\t6.员工信息排序");
  printf("\n\t\t\t7.退出系统");
  printf("\n\n\n\t\t请输入序号:1/2/3/4/5/6/7:");
  a=getch();
   switch(a)
   {
   case '1': insert();break;
   case '2': find();break;
   case '3': mod();break;
   case '4': del();break;
   case '5': show();break;
   case '6': sort();break;
   case '7': exit(0);
   default: break;
   }
  }while(8);
 if(fwrite(&n,sizeof(struct stock),1,fp)!=1)
  printf("file write error\n");
 for(i=0;i<n;i++)
 if(fwrite(&staff[i],sizeof(struct stock),1,fp)!=1)
  printf("file write error\n");
 fclose(fp);
}

void insert()  /*插入员工信息*/ 
{
 char a='y';
 while(a=='Y'||a=='y')
 {
  n++;
 system("cls");  /*清屏*/
 printf("请输入员工姓名:");
 scanf("%s",staff[n].name);
 printf("请输入员工工号:");
 scanf("%s",staff[n].num);
 printf("请输入员工性别:");
 scanf("%s",staff[n].gender);
 printf("请输入员工出生年月:");
 scanf("%s",staff[n].birth);
 printf("请输入员工籍贯:");
 scanf("%s",staff[n].native);
 printf("请输入员工学历:");
 scanf("%s",staff[n].edu);
 printf("请输入员工职称:");
 scanf("%s",staff[n].title);
 printf("是否继续输入下一条‘Y’or‘N’:");
 a=getch();
 }
}


void find()   /*查找员工信息*/
{
 int  i,j,m[N];
 j=0;
 flushall();
 system("cls");  /*清屏*/
 printf("请输入你要查询的姓名/工号/性别/学历/职称");
 gets(c.name);
 printf("  姓名         工号    性别   出生年月    籍贯         学历        职称\n");
 for(i=0;i<N;i++)
 {
  if((strcmp(c.name,staff[i].name))==0) {m[j++]=i;continue;}
  if((strcmp(c.name,staff[i].num))==0) {m[j++]=i;continue;}
  if((strcmp(c.name,staff[i].gender))==0) {m[j++]=i;continue;}
  if((strcmp(c.name,staff[i].edu))==0) {m[j++]=i;continue;}
  if((strcmp(c.name,staff[i].title))==0) {m[j++]=i;continue;}
 }
 if(j>0)
 {
  for(i=0;i<j;i++)
   printf(" %-15s %-4s\t     %s     %-8ls     %-20s %-6ls  %s\n",staff[m[i]].name,
                 staff[m[i]].num,staff[m[i]].gender,staff[m[i]].birth,
                 staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);
 getch();
 }
 if(j==0)
 {
  printf("找不到要查找的记录!\n");
  printf("按回车键返回");
  getch();
 }
}


void mod()   /*修改员工信息*/
{
 int i;
 char a,b;
 a='y';
 system("cls");  /*清屏*/
 while(a=='Y'||a=='y')
 {
 printf("\n请输入要修改记录的姓名:");
 flushall();
 gets(c.name);
 for(i=0;i<n;i++)
 {
  if((strcmp(c.name,staff[i].name))==0)                     /*修改*/
  {
  system("cls");  /*清屏*/
  printf("是否修改姓名:'Y'or'N'");
  b=getch();
  if(b=='Y'||b=='y')
  {
   printf("\n请输入修改后的姓名:");
   scanf("%s",staff[i].name);
  }
  system("cls");  /*清屏*/
  printf("是否修改工号:'Y'or'N'");
  b=getch();
  if(b=='Y'||b=='y')
  {
   printf("\n请输入修改后的工号:");
   scanf("%s",staff[i].num);
  }
  system("cls");  /*清屏*/
  printf("是否修改性别:'Y'or'N'");
  b=getch();
  if(b=='Y'||b=='y')
  {
   printf("\n请输入修改后的性别:");
   scanf("%s",&staff[i].gender);
  }
  system("cls");  /*清屏*/
  printf("是否修改出生年月:'Y'or'N'");
  b=getch();
  if(b=='Y'||b=='y')
  {
   printf("\n请输入修改后的出生年月:");
   scanf("%s",staff[i].birth);
  }
  system("cls");  /*清屏*/
  printf("是否修改籍贯:'Y'or'N'");
  b=getch();
  if(b=='Y'||b=='y')
  {
   printf("\n请输入修改后的籍贯:");
   scanf("%s",staff[i].native);
  }
  system("cls");  /*清屏*/
  printf("是否修改学历:'Y'or'N'");
  b=getch();
  if(b=='Y'||b=='y')
  {
   printf("\n请输入修改后的学历:");
   scanf("%s",staff[i].edu);
  }
  system("cls");  /*清屏*/
  printf("是否修改职称:'Y'or'N'");
  b=getch();
  if(b=='Y'||b=='y')
  {
   printf("\n请输入修改后的职称:");
   scanf("%s",staff[i].title);
  }
  break;
  }
  if(i>=n)
  {
  printf("找不到要修改的记录!\n");
  printf("按回车键返回主菜单:");
  getch();
  }
 }
  system("cls");  /*清屏*/
  printf("是否继续修改:'y'or'n'");
  a=getch();
 }
 }


void del()   /*删除员工信息*/
{
 int i,j;
 char b='y';
 while(b=='Y'||b=='y')
 {
 system("cls");  /*清屏*/
 printf("\n请输入要删除的员工姓名:");
 gets(c.name);
 for(i=0;i<n;i++)
 {
 if((strcmp(c.name,staff[i].name))==0)                    /*删除记录*/
 {
  for(j=i;j<n-1;j++)
  staff[j]=staff[j+1];
  n--;
 };
 if(i>=n)
 {
 printf("找不到要删除的记录!\n");
 printf("按回车键返回:");
 getch();
 }
 }
 system("cls");  /*清屏*/
 printf("是否继续删除下一个:是y/否n");
 flushall();
 b=getch();
 }
}


void show()   /*显示所有员工信息*/
{
 int i;
 flushall();
 system("cls");  /*清屏*/
 printf("姓名  工号  性别  出生年月  籍贯  学历  职称\n");
 for(i=0;i<=n;i++)
 {
 printf("%s %s %s %s %s %s %s\n",staff[i].name,staff[i].num,staff[i].gender,
  staff[i].birth,staff[i].native,staff[i].edu,staff[i].title);
 }
 printf("按回车键返回");
 getch();
}


void sort()   /*员工信息排序*/
{
 int i,j;
 char a='y',b;
 flushall();
 while(a=='Y'||a=='y')
 {
 system("cls");  /*清屏*/
 printf("请选择排序方式:1.姓名/2.学历/3.职称");
 b=getch();
 for(i=0;i<n;i++)
  for(j=0;j<=n;j++)
  switch(b)
  {
  case '1':if((strcmp(staff[i].name,staff[j].name))<0) { c=staff[i];
   staff[i]=staff[j];staff[j]=c;}break;
  case '2':if((strcmp(staff[i].edu,staff[j].edu))<0) { c=staff[i];
   staff[i]=staff[j];staff[j]=c;}break;
  case '3':if((strcmp(staff[i].title,staff[j].title))<0) { c=staff[i];
   staff[i]=staff[j];staff[j]=c;}break;
  }
  show();
  system("cls");  /*清屏*/
  printf("是否继续排序:是y/否n");
  a=getch();
 }
}

c
老柴柴的主页 老柴柴 | 初学一级 | 园豆:154
提问于:2013-06-22 12:45
< >
分享
所有回答(4)
0

程序进行优化?

二十三号同学 | 园豆:969 (小虾三级) | 2013-06-22 13:45

是啊

支持(0) 反对(0) 老柴柴 | 园豆:154 (初学一级) | 2013-06-22 13:48
0

好长时间没有搞过C,不过优化这种事,岂是发贴就能搞定的,付费请高人吧

SOUTHER | 园豆:825 (小虾三级) | 2013-06-22 17:21

我这程序基本没问题!就是无法存入数据!我文件这块比较弱!望指点!

支持(0) 反对(0) 老柴柴 | 园豆:154 (初学一级) | 2013-06-22 19:46
0

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<conio.h>

#define N 100

struct stock                /*员工档案信息*/

{

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

    char num[8];            /*工号*/

    char gender[8];         /*性别*/

    char birth[8];          /*出生年月*/

    char native[16];        /*籍贯*/

    char edu[8];            /*学历*/

    char title[8];          /*职称*/

}staff[N];

int n;

void insert();

void find();

void mod();

void del();

void show();

void sort();

 

void main()         /*主函数*/

{  

    FILE *fp;

    char a;

    printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");

    printf("\t\t\t*  欢迎进入员工档案管理系统   *\n\n");

    printf("\t\t\t* * * * * * * * * * * * * * * *\n\n");

    printf("\n\t\t\t设计者:自动化122班 柴玮\n\n");

    printf("\t\t\t设计时间:2013年6月\n\n");

    printf("\t\t\t请输入回车进入主界面\n\n\n");

    getch();

        if((fp=fopen("test","rb"))==NULL)

        {

            printf("Can not open this file\n");

            exit(1);

        }

            if(fread(&n,sizeof(int),1,fp)!=1) n=0;

            fread(staff,sizeof(struct stock),n,fp);

            fclose(fp);

        do{

        system("cls");  /*清屏*/

        printf("%d",n);

        printf("\t\t\t* * * * * * * * * * * *\n\n");

        printf("\t\t\t*  员工档案管理系统   *\n\n");

        printf("\t\t\t* * * * * * * * * * * *\n\n");

        printf("\n\t\t\t1.插入员工信息");

        printf("\n\t\t\t2.查找员工信息");

        printf("\n\t\t\t3.修改员工信息");

        printf("\n\t\t\t4.删除员工信息");

        printf("\n\t\t\t5.显示所有员工信息");

        printf("\n\t\t\t6.员工信息排序");

        printf("\n\t\t\t7.退出系统");

        printf("\n\n\n\t\t请输入序号:1/2/3/4/5/6/7:");

        a=getch();

            switch(a)

            {

            case '1': insert();break;

            case '2': find();break;

            case '3': mod();break;

            case '4': del();break;

            case '5': show();break;

            case '6': sort();break;

            case '7':{

                        if((fp=fopen("test","wb"))==NULL)

                        {

                            printf("Can not open this file\n");

                            exit(1);

                        };

                        if(fwrite(&n,sizeof(int),1,fp)!=1)

                        printf("file write error\n");

                        if(fwrite(staff,sizeof(struct stock),n,fp)!=(unsigned int)n)

                        printf("file write error\n");

                        fclose(fp);

                        exit(0);

                     }

            default: break;

            }

        }while(8);

   

}

 

void insert()       /*插入员工信息*/   

{

    char a='y';

    flushall();

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

    {

    system("cls");  /*清屏*/

    printf("请输入员工姓名:");

    scanf("%s",staff[n].name);

    printf("请输入员工工号:");

    scanf("%s",staff[n].num);

    printf("请输入员工性别:");

    scanf("%s",staff[n].gender);

    printf("请输入员工出生年月:");

    scanf("%s",staff[n].birth);

    printf("请输入员工籍贯:");

    scanf("%s",staff[n].native);

    printf("请输入员工学历:");

    scanf("%s",staff[n].edu);

    printf("请输入员工职称:");

    scanf("%s",staff[n].title);

    n++;

    printf("是否继续输入下一条‘Y’or‘N’:");

    a=getch();

    }

}

 

 

void find()         /*查找员工信息*/

{

    int  i,j=0,m[N];

    struct stock c;

    flushall();    

    system("cls");  /*清屏*/

    printf("请输入你要查询的姓名/工号/性别/学历/职称");

    gets(c.name);

    printf("    姓名      工号       性别   出生年月               籍贯      学历      职称\n");

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

    {

        if((strcmp(c.name,staff[i].name))==0) {m[j++]=i;continue;}

        if((strcmp(c.name,staff[i].num))==0) {m[j++]=i;continue;}

        if((strcmp(c.name,staff[i].gender))==0) {m[j++]=i;continue;}

        if((strcmp(c.name,staff[i].edu))==0) {m[j++]=i;continue;}

        if((strcmp(c.name,staff[i].title))==0) {m[j++]=i;continue;}

    }

    if(j>0)

    {

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

            printf("%8s  %8s  %8s    %8s  %16s  %8s  %8s\n",staff[m[i]].name,staff[m[i]].num,staff[m[i]].gender,

    staff[m[i]].birth,staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);

    }

    if(j==0)

    {

        printf("找不到要查找的记录!\n");

        printf("按回车键返回");

        getch();

    }

    printf("请按回车键返回");

    getch();

}

 

 

void mod()          /*修改员工信息*/

{

    int i,m[20],k,j;

    char a='y',b,c[20];

    system("cls");  /*清屏*/

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

    {

        k=0;

    printf("\n请输入要修改记录的姓名或工号:");

    flushall();

    gets(c);

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

    {

        if((strcmp(c,staff[i].name))==0||(strcmp(c,staff[i].num))==0)                     /*修改*/

        {

            m[k++]=i;

        }

    }

        if(k>0)

        {

        printf("编号     姓名      工号       性别   出生年月               籍贯      学历      职称\n");

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

        {

        printf("%d  %8s  %8s  %8s    %8s  %16s  %8s  %8s\n",i,staff[m[i]].name,staff[m[i]].num,staff[m[i]].gender,

        staff[m[i]].birth,staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);

        }

        printf("请输入你要修改的编号:(若退出请按%d)",k);

        flushall();

        scanf("%d",&j);

        system("cls");                      /*清屏*/

        if(j<k)

        {

        i=m[j];

        printf("当前姓名为:%s\n",staff[i].name);

        printf("是否修改姓名:'Y'or'N'");

        b=getch();

        if(b=='Y'||b=='y')

        {

            printf("\n请输入修改后的姓名:");

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

        }

        system("cls");  /*清屏*/

        printf("当前工号为:%s\n",staff[i].num);

        printf("是否修改工号:'Y'or'N'");

        b=getch();

        if(b=='Y'||b=='y')

        {

            printf("\n请输入修改后的工号:");

            scanf("%s",staff[i].num);

        }

        system("cls");  /*清屏*/

        printf("当前性别为:%s\n",staff[i].gender);

        printf("是否修改性别:'Y'or'N'");

        b=getch();

        if(b=='Y'||b=='y')

        {

            printf("\n请输入修改后的性别:");

            scanf("%s",&staff[i].gender);

        }

        system("cls");  /*清屏*/

        printf("当前出身年月为:%s\n",staff[i].birth);

        printf("是否修改出生年月:'Y'or'N'");

        b=getch();

        if(b=='Y'||b=='y')

        {

            printf("\n请输入修改后的出生年月:");

            scanf("%s",staff[i].birth);

        }

        system("cls");  /*清屏*/

        printf("当前籍贯为:%s\n",staff[i].native);

        printf("是否修改籍贯:'Y'or'N'");

        b=getch();

        if(b=='Y'||b=='y')

        {

            printf("\n请输入修改后的籍贯:");

            scanf("%s",staff[i].native);

        }

        system("cls");  /*清屏*/

        printf("当前学历为:%s\n",staff[i].edu);

        printf("是否修改学历:'Y'or'N'");

        b=getch();

        if(b=='Y'||b=='y')

        {

            printf("\n请输入修改后的学历:");

            scanf("%s",staff[i].edu);

        }

        system("cls");  /*清屏*/

        printf("当前职称为:%s\n",staff[i].title);

        printf("是否修改职称:'Y'or'N'");

        b=getch();

        if(b=='Y'||b=='y')

        {

            printf("\n请输入修改后的职称:");

            scanf("%s",staff[i].title);

        }

        system("cls");  /*清屏*/

        printf("······修改信息成功·····\n");

        }

        printf("···是否继续修改其它:'y'or'n'");

        a=getch();

        }

        else

        {

        printf("找不到要修改的记录!\n");

        printf("是否继续修改:'y'or'n'");

        a=getch();

        }

    }

 }

 

 

void del()          /*删除员工信息*/

{

    int i,j,m[20],k;

    char b='y',c[20],d;

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

    {

        k=0;

    system("cls");  /*清屏*/

    printf("\n请输入要删除的员工姓名或工号:");

    gets(c);

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

    {

    if((strcmp(c,staff[i].name))==0||(strcmp(c,staff[i].num))==0)       /*删除记录*/

    m[k++]=i;

    }

    if(k>0)

    {

    printf("编号     姓名      工号       性别   出生年月               籍贯      学历      职称\n");

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

    {

    printf("%d  %8s  %8s  %8s    %8s  %16s  %8s  %8s\n",i,staff[m[i]].name,staff[m[i]].num,staff[m[i]].gender,

        staff[m[i]].birth,staff[m[i]].native,staff[m[i]].edu,staff[m[i]].title);

    }

    printf("请输入你要删除的编号:(若退出请按%d)",k);

    scanf("%d",&d);

    system("cls");  /*清屏*/

    if(d<k)

    {

        for(j=m[d];j<n-1;j++)

        staff[j]=staff[j+1];

        n--;

        printf("·····删除信息成功·····\n");

    }

    printf("···是否继续删除下一个:是y/否n");

    flushall();

    b=getch();

    }

    else

    {

    printf("找不到要删除的记录!\n");

    printf("是否继续删除下一个:是y/否n");

    flushall();

    b=getch();

    }

   

    }

}

 

 

void show()         /*显示所有员工信息*/

{

    int i;

    flushall();

    system("cls");  /*清屏*/

    printf("    姓名      工号       性别   出生年月               籍贯      学历      职称\n");

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

    {

    printf("%8s  %8s  %8s    %8s  %16s  %8s  %8s\n",staff[i].name,staff[i].num,staff[i].gender,

        staff[i].birth,staff[i].native,staff[i].edu,staff[i].title);

    }

    printf("按回车键返回");

    getch();

}

 

 

void sort()         /*员工信息排序*/

{

    int i,j;

    char a='y',b;

    struct stock c;

    flushall();

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

    {

    system("cls");  /*清屏*/

    printf("请选择排序方式:1.姓名/2.工号/3.学历/4.职称");

    b=getch();

    for(i=0;i<n-1;i++)

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

        switch(b)

        {

        case '1':if((strcmp(staff[i].name,staff[j].name))<0) {  c=staff[i];

            staff[i]=staff[j];staff[j]=c;}break;

        case '2':if((strcmp(staff[i].num,staff[j].num))<0) {    c=staff[i];

            staff[i]=staff[j];staff[j]=c;}break;

        case '3':if((strcmp(staff[i].edu,staff[j].edu))<0) {    c=staff[i];

            staff[i]=staff[j];staff[j]=c;}break;

        case '4':if((strcmp(staff[i].title,staff[j].title))<0) {    c=staff[i];

            staff[i]=staff[j];staff[j]=c;}break;

        }

        show();

        system("cls");  /*清屏*/

        printf("是否继续排序:是y/否n");

        a=getch();

    }

}

老柴柴 | 园豆:154 (初学一级) | 2013-06-28 23:16
0

LZ  是不是足下软件学院的?  这个C的小东西N年前做过

落幕残情 | 园豆:9 (初学一级) | 2013-07-08 17:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册