1、人事信息管理系统*实践教学* 兰州理工大学计算机与通信学院2012年春季学期 C程序设计 课程设计题 目:人事信息管理系统专业班级: 姓 名: 人才v 学 号: 指导教师: 成 绩:_摘 要企业的人设管理系统是运用于Windows系统下的应用软件,主要用于对企业人事基本管理,包括工人基本信息如工号,姓名以及职称,工资进行增加,删除,修改,查询,插入,统计,存盘等基本操作。本程序实现了所有设计要求。关键词:人事信息,排序,统计目 录 摘 要 I1 题目要求 a1.1要求 a2 需求分析: a3 总体设计 a4 详细设计 b4.1主函数 b4.2各功能模块设计: c5 总结 d参考文献 e致 谢
2、e附 录 - 1 -1 题目要求1.1要求人事信息管理系统 某高校主要人员有:在职人员(行政人员、教师、一般员工)、退休人员和临时工。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。其中,人员编号唯一,不能重复。(1) 添加删除功能:能根据学院人事的变动情况,添加删除记录;(2) 查询功能:能根据编号和姓名进行查询;(3) 编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4) 统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数(硕士学位以上或者副教授以上),统计要求同时显示
3、被统计者的信息;(5) 排序功能:按照年龄、来院时间进行排序;(6) 保存功能:能对输入的数据进行相应的存储;2 需求分析:根据题目要求,职工信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加删除,查询,编辑,统计,排序,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件存贮,这样的方法在一定程度上提高了对数据处理的灵活性,较容易理解,但存在处理中遇到以外情况而丢失数据的风险,另外当文件中的数据量很大时,这种方法也存在一定的难度,在本程
4、序中将N定为100,基本上能满足要求。 3 总体设计一、 总体设计:根据以上需求分析,将程序分成以下几个模块:1、 新建数据文件(build new data);2、 添加记录(add data);3、 删除记录(delete data);4、 按工号搜索(search by number);5、 按姓名搜索(search by name);6、 浏览全部数据(browse all);7、 修改数据(modify the data);8、 排序功能(order the volume);9、 统计功能(data a volume);系统功能模块图如下:4 详细设计4.1主函数为使系统执行完每部分
5、功能后能够方便的回到系统主界面,main()函数设计的较简单,只包含一个menu()函数,其余的全部功能都通过menu()函数调用来实现,并通过menu()函数的递归调用实现返回主界面的功能。main()函数定义如下:main() menu();而menu()定义如下:void Menu() /*菜单函数*/ int nSelectNum,nWhileFlag; do printf(nttttMENUn); printf(tt0tBuild new datann); printf(tt1tDelete datann); printf(tt2tAdd datann); printf(tt3tSe
6、arch by Numbernn); printf(tt4tSearch by Namenn); printf(tt5tBrowse allnn); printf(tt6tModify the datann); printf(tt7tOrder the volumenn); printf(tt8tData a volumenn); printf(tt9tExitnn); printf(tPlease choice and enter a number bb); scanf(%d,&nSelectNum); if(nSelectNum9) nWhileFlag=1; else nWhileFla
7、g=0; while(nWhileFlag=1);switch(nSelectNum) case 0:Build();break; case 1:Del();break; case 2:Add();break; case 3:SNum();break; case 4:Sname();break; case 5:Browse();break; case 6:Modify();break; case 7:Order();break; case 8:Data();break; case 9:exit(0);break;/正常退出 default: printf(input error! please
8、 input a cArrNumber between 0 and 8); Menu(); 4.2各功能模块设计:(1)、新建数据文件模块:、数据结构;看各个数据信息,编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别,均为字符串类型,在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。定义如下:struct worker char cArrNum11; char cArrName10; char cArrSex2; char
9、cArrAge3; char cArrZhiwu15; char cArrZhengzhi15; char cArrXueli15; char cArrZhicheng15; char cArrRenzhisj8; char cArrLaiyuansj8; char cArrLeibie15;structWkMAX_WORKER_NUM;其中N是宏定义形式定义的字符,临时定义为100,wkN,为存放人员信息的结构体数组,而S为临时的结构体,用来保存信息处理过程中的临时数据。(2)浏览模块;a) 需求分析:该模块的功能是显示所有保存在文件中的记录,考虑到记录较多,采用分屏显示的方式;1程序:vo
10、id Browse() int i,nWorkerNum; nWorkerNum=Load(); Printf_face(); for(i=0;i=nWorkerNum;i+) Printf_one(i); printf(tThere are %d record.n,nWorkerNum+1); printf(press any key to continue.); getch(); Menu();b)上机操作:下面是部分模块的运行结果的界面图:输入模块:新建文件和添加模块的输入界面设计基本相同:编辑模块:5 总结 通过这次C程序设计,我掌握了模块化设计方法,能够深入的理解结构化程序设计思想,
11、熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。参考文献1 C/C+程序设计,王连相等,中国科学技术出版社,20042 C语言程序设计,谭浩强,清华大学出版社,19993 C程序设计题解与上机指导,谭浩强,清华大学出版社,19994 C语言实用程序荟萃,西安电子科技大学出版社,19935 C语言函数手册,机械工业出版社,19996 C语言的实际应用,安徽科学技术出版社,2000致 谢首先要感谢张宪立老师的授课与指导!感谢所有支持我完成C程序设计论文的老师和同学们!在这次课程设计中老师给了我很大的帮助,帮我解答疑难问题,给我提供资料,给我提供查阅资料的信息,引导我该如何去思考问题
12、,教会我解决问题的方法.同时又鼓励我自己学习,老师给我的不仅是知识,时帮助,更是学习的信心和智慧,在这里衷心感谢老师的耐心细心一丝不苟的帮助.同时也感谢和我一起走过的同学,这是我们共同努力地结果,衷心的感谢大家对我的帮助和支持。附 录#define MAX_WORKER_NUM 100#include #include #include #include void Menu();/菜单函数void Build();/新建文件void Add();void Del();/删除记录函数void Browse();void Modify();void Order();/排序函数int Load();
13、void CheckNum(int,int);/检查编号void Data();/统计函数void Sname();/按姓名搜索void SNum();/按学号搜索void Printf_face();/显示数据结构void Printf_one(int);/输出一条记录void Input(int,int);/输入一个记录void Printf_one(int);/显示一条记录void Save(int);/保存函数int Modify_data(int,int);/修改数据函数void NumDuty();void NumPM();void NumWM();void Hiedcation(
14、);struct worker char cArrNum11; char cArrName10; char cArrSex2; char cArrAge3; char cArrZhiwu15; char cArrZhengzhi15; char cArrXueli15; char cArrZhicheng15; char cArrRenzhisj8; char cArrLaiyuansj8; char cArrLeibie15;structWkMAX_WORKER_NUM;void Menu() /*菜单函数*/ int nSelectNum,nWhileFlag; do printf(ntt
15、ttMENUn); printf(tt0tBuild new datann); printf(tt1tDelete datann); printf(tt2tAdd datann); printf(tt3tSearch by Numbernn); printf(tt4tSearch by Namenn); printf(tt5tBrowse allnn); printf(tt6tModify the datann); printf(tt7tOrder the volumenn); printf(tt8tData a volumenn); printf(tt9tExitnn); printf(tP
16、lease choice and enter a number bb); scanf(%d,&nSelectNum); if(nSelectNum9) nWhileFlag=1; else nWhileFlag=0; while(nWhileFlag=1); switch(nSelectNum) case 0:Build();break; case 1:Del();break; case 2:Add();break; case 3:SNum();break; case 4:Sname();break; case 5:Browse();break; case 6:Modify();break;
17、case 7:Order();break; case 8:Data();break; case 9:exit(0);break;/正常退出 default: printf(input error! please input a cArrNumber between 0 and 8); Menu(); /*新建文件*/void Build() int nInputWkNum, nWorkerNum,p; FILE *fp; if(fp=fopen(worker00.txt,w)=NULL) printf(can not build filen); Menu(); printf(how many
18、workers do you want to input(0-%d)?:,MAX_WORKER_NUM); scanf(%d,&nWorkerNum); for(nInputWkNum=0;nInputWkNumnWorkerNum;nInputWkNum+) printf(nInput %dth worker record.n,nInputWkNum+1); Input(nInputWkNum,nInputWkNum); for(p=0;p=nInputWkNum;p+) if(fprintf(fp,%st%st%1st%st%st%st%st%st%st%st%sn,structWkp.c
19、ArrNum,structWkp.cArrName,structWkp.cArrSex,structWkp.cArrAge,structWkp.cArrZhiwu,structWkp.cArrZhicheng ,structWkp.cArrZhengzhi,structWkp.cArrXueli,structWkp.cArrRenzhisj,structWkp.cArrLaiyuansj,structWkp.cArrLeibie)!=1) printf(cannot write the datann); fclose(fp); Menu(); void Add() /*增加人员*/ int i
20、,nAddNum,nExistNum,nAftAddNum,p; FILE *fp; nExistNum=Load(); if(nExistNum=-1) Menu(); printf(How many workers do you want to add(0-%d)?: bbb,MAX_WORKER_NUM-nExistNum); scanf(%d,&nAddNum); nAftAddNum=nAddNum+nExistNum; for(i=nExistNum+1;i=nAftAddNum;i+) printf(nInput %dth worker record.n,i-nExistNum+
21、1); Input(i,nExistNum); if(fp=fopen(worker00.txt,a+)=NULL) printf(can not open filen); Menu(); for(p=0;pnAftAddNum;p+) fprintf(fp,%st%st%1st%st%st%st%st%st%st%st%sn,structWkp.cArrNum,structWkp.cArrName,structWkp.cArrSex,structWkp.cArrAge,structWkp.cArrZhiwu,structWkp. cArrZhicheng,structWkp.cArrZhen
22、gzhi,structWkp.cArrXueli,structWkp.cArrRenzhisj,structWkp.cArrLaiyuansj,structWkp.cArrLeibie); fclose(fp); Menu();void Input(int i,int n) /*输入一个记录*/ CheckNum(i,n); printf(nenter the Age:t bbbb); scanf(%s,structWki.cArrAge); printf(nenter the SexM for man and W for woman:t bb); scanf(%1s,structWki.cA
23、rrSex); printf(nenter the Zhiwu:t bbbbbbbbbbbbbbbb); scanf(%s,structWki.cArrZhiwu); printf(nenter the Zhicheng:t bbbbbbbbbbbbbbbb); scanf(%s,structWki.cArrZhicheng); printf(nenter the zhengzhimiannao:t bbbbbbbbbbbbbbbb); scanf(%s,structWki.cArrZhengzhi); printf(nenter the Xueli:t bbbbbbbbbbbbbbbb);
24、scanf(%s,structWki.cArrXueli); printf(nenter the renzhishijian:t bbbbbbbbb); scanf(%s,structWki.cArrRenzhisj); printf(nenter the laiyanshijian:t bbbbbbbbb); scanf(%s,structWki.cArrLaiyuansj); printf(nenter the Leibie:t bbbbbbbbbbbbbbbb); scanf(%s,structWki.cArrLeibie);/*加载函数*/ int Load() FILE *fp; i
25、nt i; if(fp=fopen(worker00.txt,r)=NULL) printf(cannot open filen); return NULL; else for(i=0;!feof(fp);i+) fscanf(fp,%st%st%1st%st%st%st%st%st%st%st%sn,structWki.cArrNum,structWki.cArrName,structWki.cArrSex,structWki.cArrAge,structWki.cArrZhiwu,structWki. cArrZhicheng,structWki.cArrZhengzhi,structWk
26、i.cArrXueli,structWki.cArrRenzhisj,structWki.cArrLaiyuansj,structWki.cArrLeibie); return(i-1); void CheckNum(int i,int nWkNum) /*检查输入号码*/ int j,k,nIllegalNum; worker tempWk; do nIllegalNum=0; printf(Enter the Number: bbbbbbbbbbbb); scanf(%s,tempWk.cArrNum); for(j=0; tempWk.cArrNumj!=0; j+) if(tempWk.cArrNumj9) printf(Input error!Only be made up of (0-9).Please input again!nn); nIllegalNum=1; break; if(nIllegalNum=0) for(k=0;knWkNum;k+) if(k!=i&strcmp(structWkk.cArrNum,tempWk.cArrNum)=0) printf(this record
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1