人事管理管理系统[要求]某高校主要人员有:在职人员(行政人员、教师、一般员工)、退休人员和临时工。
现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中,人员编号唯一,不能重复。
(1)添加删除功能:能根据学院人事的变动情况,添加删除记录;(2)查询功能:能根据编号和姓名进行查询;(3)编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息;(5)排序功能:按照年龄、来院时间进行排序;(6)保存功能:能对输入的数据进行相应的存储;一.需求分析:根据题目要求,人事信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加删除,查询,编辑,统计,排序,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。
另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件中重新储存,这样的方法容易理解、容易编写,但当文件中的数据量很大时,这种方法也存在一定的难度,在本程序中将RS定为100,也即最多可储存的职工人数为100;二总体设计:根据以上需求分析,将程序分成以下几个模块:1浏览:****浏览文件(0)2 删除****删除记录(1)3查询****按名称查询(2)****按编号查询(3)4 编辑****查询名称编辑信息(4)****查询编号编辑信息(5)5 统计****统计在职人数(6)****统计党员人数(7)****统计女工人数(8)****统计硕士以上学历人数(9)****统计副教授以上职称人数(10)6 排序****按年龄进行排序(11)****按来院时间进行排序(12)7 保存****将输入的记录进行保存(13)三详细设计;1、主函数:主函数设计的比较简单,只提供输入、处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
其流程图如下程序void main(){ do{ int n;puts("****************************************************\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",&n);switch(n){ case 0:browse();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;default: printf("输入错误");}}while(1);}2、各功能设计模块(0)浏览模块该模块的功能是显示文件的所有信息,流程图如下程序void browse(){ int i=0,j;if((fp=fopen("renshi.txt","r"))==NULL){ printf("cannot open this file\n");return;}while(!feof(fp)){ fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s",per[i].num,per[i].name,p er[i].sex,&per[i].age,per[i].zhiwu,&per[i].zhiche,per[i].zzmm,&per[i].zgxl,per[i].rzsj ,&per[i].lysj,per[i].rylb);i++;}printf("\n\n当前文件内容是:\n\n");for(j=0;j<i;j++){ printf("%s %s %s %d %s %d %s %d %s %d %s\n",per[j].num,per[j].name,pe r[j].sex,per[j].age,per[j].zhiwu,per[j].zhiche,per[j].zzmm,per[j].zgxl,per[j].rzsj,per[j] .lysj,per[j].rylb);}fclose(fp);printf("\n");printf("\n\n\npress any key to continue\n\n\n");getchar();printf("\n");}(1)删除模块该模块的功能是根据编号删除记录的信息,删除空行,后面的前移,浏览。
流程图如下程序void dele(){ int i=0,j,k=0;char num[10];printf("请输入您要删除的记录的编号: ");scanf("%s",num);if((fp=fopen("renshi.txt","r"))==NULL){ printf("cannot open this file\n");return;}while(!feof(fp)){ fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s",per[i].num,per[i].name,per[i] .sex,&per[i].age,per[i].zhiwu,&per[i].zhiche,per[i].zzmm,&per[i].zgxl,per[i].rzsj,&per[i]. lysj,per[i].rylb);i++;}fclose(fp);if((fp=fopen("renshi.txt","w"))==NULL){ printf("cannot open this file\n");return;}for(j=0;j<i;j++){ if(strcmp(per[j].num,num)!=0)fprintf(fp,"%s %s %s %d %s %d %s %d %s %d %s\n",per[j].num,per[j].name,per[j] .sex,per[j].age,per[j].zhiwu,per[j].zhiche,per[j].zzmm,per[j].zgxl,per[j].rzsj,per[j].lysj,pe r[j].rylb);}fclose(fp);trim();browse();printf("");getchar();}(2)按名称查询模块该模块的功能是根据名字查询记录。
流程如下void searname(){ int i=0,j,k=0;char name[8];printf("请输入您要查询的记录的姓名: ");scanf("%s",name);if((fp=fopen("renshi.txt","a+"))==0){ printf("cannot open this file\n");return;}while(!feof(fp)){ fscanf(fp,"%s %s %s %d %s %d %s %d %s %d %s",per[i].num,per[i].name,per[i] .sex,&per[i].age,per[i].zhiwu,&per[i].zhiche,per[i].zzmm,&per[i].zgxl,per[i].rzsj,&per[i]. lysj,per[i].rylb);i++;}printf("您要的信息如下:\n");for(j=0;j<i;j++){ if(strcmp(per[j].name,name)==0)sex,per[j].age,per[j].zhiwu,per[j].zhiche,per[j].zzmm,per[j].zgxl,per[j].rzsj,per[j].lysj,per [j].rylb);k++;}}if(k==0){ printf("没有您要的信息");return;}fclose(fp);browse();printf("");getchar();}(3)按编号查询模块该模块功能是根据记录编号查询记录。