C语言课程设计-高校人事管理系统设计.docx
一、 题目要求21、 系统功能的基本要求错误!未定义书签。2、 提示错误! 未定义书签。二、需求分析3三、总体设计3四、详细设计41、主函数42、各模块设计5(0)浏览模块6(1) 删除模块错误!未定义书签。(2) 查询模块8(2.1) 按编号查询模块9(2.2) 按姓名查询模块9(3) 编辑模块错误!未定义书签。(4) 统计模块错误!未定义书签。(4.1) 在职人数统计模块11(4.2) 党员人数统计模块11(4.3) 女工人数统计模块11(4.4) 高学历高职称人数统计模块11(5) 排序模块错误!未定义书签。(5.1)按年龄排序模块16(5.2)按来院时间模块16(6) 保存模块错误!未定义书签。五、上机操作18六、完整程序18七、运行结果截图33八、 总结与感想33一、题目要求某高校主要人员有:在职人员(行政人员、教师、一 般人员)、退休人员和临时工。现在需要储存这些人员 的人事档案信息,内容包括编号、姓名、性别、年龄、 职务、职称、政治面貌、最高学历、任职时间、来院 时间、人员类别。其中,人员编号唯一,不能重复。(1)添加删除功能:能根据学院人事的变动情 况,添加删除记录。(2)查询功能:能根据编号和姓名进行查询。(3)编辑功能(高级):根据查询对相应的记录 进行修改并储存。(4)统计功能:能根据多种参数进行人员的统计 (在职人数、党员人数、女工人数、高学历高 职称人数(硕士学位以上或者副教授以上), 统计要求同时显示被统计者的信息。(5)排序功能:按照年龄、来院时间进行排序。(6)保存功能:能对输入的数据进行相应的储存。二、需求分析根据题目要求,需要把仪器仪表信息的的数据存储在文件里,所以需要提供 文件的输入输出等操作;在程序中要提供修改,删除,查找等操作;另外还应该 提供键盘式选择菜单实现功能选择。三、总体设计四、详细设计1、主函数主函数只提供输入输出和功能处理的函数调用。其各功能模块用菜单方 式选择。将main()函数体内的界面选择部分语句单独抽取出来作为一 独立函数,目的在于系统执行完每部分功能模块后能够方便返回到系统 界面。【程序】*主函数*/int main() do int cz;uuts *n ;puts("* 人事管理系统 *n");puts("*请选择以下选项后面的数字输入以确定您要进行的操作*n");puts("选项:”);puts(-浏览:”);puts (-*浏览文件(0)");puts(-删除");puts("*删除记录(1)");puts("查询");puts("*按名称查询(2)”);puts("*按编号查询(3)”);puts("编辑");puts("*查询名称编辑信息(4)");puts("*查询编号编辑信息(5)");puts("统计");puts("*统计在职人数(6)");puts("*统计党员人数(7)”);puts("*统计女工人数(8)");puts("*统计硕士以上学历人数(9)");puts("*统计副教授以上职称人数(10)");puts("排序");puts("*按年龄进行排序(11)");puts("*按来院时间进行排序(12)");puts("保存");puts("*将输入的记录进行保存(13)");puts("退出");puts("*退出(14)");printf("请输入选项号:”);scanf("%d”,&cz);switch (cz) case 0:blose();break;case 1:dele();break;case 2:searname(); break;case 3:searnum(); break;case 4:channame(); break;case 5:channum(); break;case 6:sumzzrs(); break;case 7:sumdyrs(); break;case 8:sumngrs(); break;case 9:sumssysxlrs();break;case 10:sumfjsyszhichers();break;case 11:sortage();break;case 12:sortlysj();break;case 13:save(); break;case 14:return 0;default: printf("对不起,您没有按要求输入”);while (1);2、各模块设计(0)浏览模块void blose() int i=0,j;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb)i+;printf("nn当前文件内容是:nn");for(j=0;j<i;j+) printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);printf("n");printf("nnnpress any key to continuennn");getchar();printf("n"); void dele()(1)删除模块Hi'J'J int i=0,j,k=0;char num10;printf("请输入您要删除的记录的编号:”);scanf("%s”,num);if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb);i+;fclose(fp);if (fp=fopen("renshi.txt”, "w")=NULL) printf("cannot open this filen");return;for(j=0;j<i;j+) if(strcmp(perj.num,num)!=0)fprintf(fp,"%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age ,perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);trim();blose();printf("");getchar();(2)查询模块(2.1)按编号查询void searname() int i=0,j,k=0;char name8;printf("请输入您要查询的记录的姓名:”);scanf("%s”,name);if (fp=fopen("renshi.txt”, "r+")=NULL) printf("cannot open this filen");return;while(!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;printf("您要的信息如下:n");for(j=0;j<i;j+) if (strcmp(perj.name,name)=0) printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);k+;if(k=0) printf(-没有您要的信息");return;fclose(fp);blose();printf("");getchar();(2.2 )按姓名查询void searnum() int i=0,j,k=0;char num10;printf("请输入您要查询的记录的编号:”);scanf("%s”,num);if (fp=fopen("renshi.txt”, "r+")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb);i+;printf("您要的信息如下:n");for(j=0;j<i;j+) if(strcmp(perj.num,num)=0) printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);k+;if(k=0) printf(-没有您要的信息");return;fclose(fp);blose();printf("");getchar();(3)编辑模块 void channame() int i=0,j,k;char name8;printf("请输入您要编辑的记录的姓名:”);scanf("%s”,name);if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while(!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;fclose(fp);trim();if (fp=fopen("renshi.txt”, "w")=NULL) printf("cannot open this filen");return;printf (-请输入您要修改的项所对应的数字:(编号对应的数字为,其他项依次为,3,4.)”); scanf("%d”,&k);printf(-请输入这一项修改后的值");for(j=0;j<i;j+) if (strcmp(perj.name,name)=0) switch(k) case 1:scanf("%s”,perj.num);break;case 2:scanf("%s”,perj.name);break;case 3:scanf("%s”,perj.sex); break;case 4:scanf("%d”,&perj.age);break;case 5:scanf("%s”,perj.zhiwu); break;case 6:scanf("%d”,&perj.zhiche);break;case 7:scanf("%s”,perj.zzmm); break;case 8:scanf("%d”,&perj.zgxl);break;case 9:scanf("%s”,perj.rzsj);break;case 10:scanf("%d”,&perj.lysj);break;case 11:scanf("%s”,perj.rylb);break;case 12:return;default:printf("输入错误");for(j=0;j<i;j+) fprintf(fp,"%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj. age,perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);trim();blose();printf("");getchar();void channum() int i=0,j,k;char num10;printf("请输入您要编辑的记录的编号:”);scanf("%s”,num);if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;fclose(fp);if (fp=fopen("renshi.txt”, "w")=NULL) printf("cannot open this filen");return;printf (-请输入您要修改的项所对应的数字:(编号对应的数字为,其他项依次为,3,4.)”); scanf("%d”,&k);printf(-请输入这一项修改后的值");for(j=0;j<i;j+) if(strcmp(perj.num,num)=0) switch(k) case 1:scanf("%s”,perj.num);break;case 2:scanf("%s”,perj.name);break;case 3:scanf("%s”,perj.sex); break;case 4:scanf("%d”,&perj.age);break;case 5:scanf("%s”,perj.zhiwu); break;case 6:scanf("%d”,&perj.zhiche);break;case 7:scanf("%s”,perj.zzmm); break;case 8:scanf("%d”,&perj.zgxl);break;case 9:scanf("%s”,perj.rzsj);break;case 10:scanf("%d”,&perj.lysj);break;case 11:scanf("%s”,perj.rylb);break;case 12:return;default:printf("输入错误");for(j=0;j<i;j+) fprintf(fp,"%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age,perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);trim();blose();printf("");getchar();(4)统计模块(4.1)在职人数统计void sumzzrs() int i=0,j;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.age,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb)i+;if(i=0) printf("这是一个空文件");return;printf("在职人员数量是%d人n",i);for(j=0;j<i;j+) printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);trim();blose();printf("");getchar();(4.2)党员人数统计void sumdyrs() int i=0,j,count=0;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;if(i=0) printf("这是一个空文件");return;for(j=0;j<i;j+) if(strcmp(perj.zzmm,"党员")=0)count+; printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);printf("党员数量是 %d 人",count);trim();blose();printf("");getchar();(4.3)女工人数统计void sumngrs() int i=0,j,count=0;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while(!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb);i+;if(i=0) printf("这是一个空文件");return;for(j=0;j<i;j+) if(strcmp(perj.sex,"女”)=0) printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);count+;fclose(fp);printf("女工数量是 %d 人",count);trim();blose();printf("");getchar();(4.4)高学历高职称人数统计void sumssysxlrs() int i=0,j,count=0;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while(!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;if(i=0) printf("这是一个空文件");return;for(j=0;j<i;j+) if(perj.zgxl>=2) printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);count+;fclose(fp);printf("硕士以上学历人数是%d人",count);trim();blose();printf("");getchar();void sumfjsyszhichers() int i=0,j,count=0;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while(!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;if(i=0) printf("这是一个空文件");return;for(j=0;j<i;j+) if(perj.zhiche>=4) printf("%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj.age, perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);count+;fclose(fp);printf("副教授以上学历人数是%d人”,count);trim();blose();printf("");getchar();(5)排序模块(5.1)按年龄排序模块void sortage() int i=0,j,k;struct person a;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;fclose(fp);if (fp=fopen("renshi.txt”, "w")=NULL) printf("cannot open this filen");return;for(j=0;j<i;j+)for (k=0;k<i;k+) if(perj.age>perk.age) a=perk;perk=perj;perj=a;for(j=0;j<i;j+) fprintf(fp,"%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj. age,perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);trim();blose();printf("");getchar();(5.2)按来院时间void sortlysj() int i=0,j,k;struct person a;if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;fclose(fp);if (fp=fopen("renshi.txt”, "w")=NULL) printf("cannot open this filen");return;for(j=0;j<i;j+)for(k=0;k<i;k+) if(perj.lysj>perk.lysj) a=perk;perk=perj;perj=a;for(j=0;j<i;j+) fprintf(fp,"%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj. age,perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);trim();blose();printf("");getchar();(6)保存模块void save() int n,i=0,j,k;printf("您要输入几条记录:");scanf("%d”,&n);if (fp=fopen("renshi.txt”, "r")=NULL) printf("cannot open this filen");return;while (!feof(fp) fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s”,peri.num,peri.name,peri.sex,&peri.ag e,peri.zhiwu,&peri.zhiche,peri.zzmm,&peri.zgxl,peri.rzsj,&peri.lysj,peri.rylb) ;i+;fclose(fp);if (fp=fopen("renshi.txt”, "w")=NULL) printf("cannot open this filen");return;printf("请输入您的记录(以空格隔开)n");for(j=0;j<n;j+) scanf("%s %s %s %d %s %d %s %d %s %d %s”,peri+j.num,peri+j.name,peri+j.sex,&peri+j .age,peri+j.zhiwu,&peri+j.zhiche,peri+j.zzmm,&peri+j.zgxl,peri+j.rzsj,&peri+j.l ysj,peri+j.rylb);k=i+j;for(j=0;j<=k;j+) fprintf(fp,"%s %s %s %d %s %d %s %d %s %d %sn”,perj.num,perj.name,perj.sex,perj. age,perj.zhiwu,perj.zhiche,perj.zzmm,perj.zgxl,perj.rzsj,perj.lysj,perj.rylb);fclose(fp);trim();blose();printf("");getchar();五、上机操作1. 数据源:为了保存数据,需要建立一个data.txt文件2. 编译、连接和运行3. 结果六、完整程序#include <stdio.h>#include <string.h>#define RS 100struct person char num10;char name8;char sex4;int age;char zhiwu20;int zhiche;/*1=助理,2=讲师,3=教授,4=副教授,5=博导,6=院士 */char zzmm10;int zgxl; /*1=本科,2=硕士,3=博士 ,4=博士后 */char rzsj12;int lysj;char rylb10;perRS;void blose();/*:浏览文件 */void trim();/*:删除空行 */void dele();/*:删除函