人事信息管理系统.docx
《人事信息管理系统.docx》由会员分享,可在线阅读,更多相关《人事信息管理系统.docx(32页珍藏版)》请在冰豆网上搜索。
人事信息管理系统
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012年春季学期
C程序设计课程设计
题目:
人事信息管理系统
专业班级:
姓名:
人才v
学号:
指导教师:
成绩:
_______________
摘要
企业的人设管理系统是运用于Windows系统下的应用软件,主要用于对企业人事基本管理,包括工人基本信息如工号,姓名以及职称,工资进行增加,删除,修改,查询,插入,统计,存盘等基本操作。
本程序实现了所有设计要求。
关键词:
人事信息,排序,统计
目录
摘要I
1题目要求a
1.1要求a
2需求分析:
a
3总体设计a
4详细设计b
4.1主函数b
4.2各功能模块设计:
c
5总结d
参考文献e
致谢e
附录-1-
1题目要求
1.1要求
人事信息管理系统
某高校主要人员有:
在职人员(行政人员、教师、一般员工)、退休人员和临时工。
现在,需要存储这些人员的人事档案信息:
编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中,人员编号唯一,不能重复。
(1)添加删除功能:
能根据学院人事的变动情况,添加删除记录;
(2)查询功能:
能根据编号和姓名进行查询;
(3)编辑功能(高级):
根据查询对相应的记录进行修改,并存储;
(4)统计功能:
能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息;
(5)排序功能:
按照年龄、来院时间进行排序;
(6)保存功能:
能对输入的数据进行相应的存储;
2需求分析:
根据题目要求,职工信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加删除,查询,编辑,统计,排序,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。
另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件存贮,这样的方法在一定程度上提高了对数据处理的灵活性,较容易理解,但存在处理中遇到以外情况而丢失数据的风险,另外当文件中的数据量很大时,这种方法也存在一定的难度,在本程序中将N定为100,基本上能满足要求。
3总体设计
一、总体设计:
根据以上需求分析,将程序分成以下几个模块:
1、新建数据文件(buildnewdata);
2、添加记录(adddata);
3、删除记录(deletedata);
4、按工号搜索(searchbynumber);
5、按姓名搜索(searchbyname);
6、浏览全部数据(browseall);
7、修改数据(modifythedata);
8、排序功能(orderthevolume);
9、统计功能(dataavolume);
系统功能模块图如下:
4详细设计
4.1主函数
为使系统执行完每部分功能后能够方便的回到系统主界面,main()函数设计的较简单,只包含一个menu()函数,其余的全部功能都通过menu()函数调用来实现,并通过menu()函数的递归调用实现返回主界面的功能。
main()函数定义如下:
main()
{menu();}
而menu()定义如下:
voidMenu()/********************菜单函数***************/
{
intnSelectNum,nWhileFlag;
do{
printf("\n\t\t\t\tMENU\n");
printf("\t\t0\tBuildnewdata\n\n");
printf("\t\t1\tDeletedata\n\n");
printf("\t\t2\tAdddata\n\n");
printf("\t\t3\tSearchbyNumber\n\n");
printf("\t\t4\tSearchbyName\n\n");
printf("\t\t5\tBrowseall\n\n");
printf("\t\t6\tModifythedata\n\n");
printf("\t\t7\tOrderthevolume\n\n");
printf("\t\t8\tDataavolume\n\n");
printf("\t\t9\tExit\n\n");
printf("\tPleasechoiceandenteranumber[]\b\b");
scanf("%d",&nSelectNum);
if(nSelectNum<0||nSelectNum>9)
{
nWhileFlag=1;
}
elsenWhileFlag=0;
}while(nWhileFlag==1);
switch(nSelectNum)
{
case0:
Build();break;
case1:
Del();break;
case2:
Add();break;
case3:
SNum();break;
case4:
Sname();break;
case5:
Browse();break;
case6:
Modify();break;
case7:
Order();break;
case8:
Data();break;
case9:
exit(0);break;//正常退出
default:
printf("inputerror!
!
pleaseinputacArrNumberbetween0and8");
Menu();
}
}
4.2各功能模块设计:
(1)、新建数据文件模块:
<1>、数据结构;
看各个数据信息,编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别,均为字符串类型,在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。
定义如下:
structworker
{
charcArrNum[11];
charcArrName[10];
charcArrSex[2];
charcArrAge[3];
charcArrZhiwu[15];
charcArrZhengzhi[15];
charcArrXueli[15];
charcArrZhicheng[15];
charcArrRenzhisj[8];
charcArrLaiyuansj[8];
charcArrLeibie[15];
}structWk[MAX_WORKER_NUM];
其中N是宏定义形式定义的字符,临时定义为100,wk[N],为存放人员信息的结构体数组,而S为临时的结构体,用来保存信息处理过程中的临时数据。
(2)浏览模块;
a)需求分析:
该模块的功能是显示所有保存在文件中的记录,考虑到记录较多,采用分屏显示的方式;
〈1〉程序:
voidBrowse()
{
inti,nWorkerNum;
nWorkerNum=Load();
Printf_face();
for(i=0;i<=nWorkerNum;i++)
{
Printf_one(i);
}
printf("\tThereare%drecord.\n",nWorkerNum+1);
printf("pressanykeytocontinue...");
getch();
Menu();
}
b)上机操作:
下面是部分模块的运行结果的界面图:
输入模块:
新建文件和添加模块的输入界面设计基本相同:
编辑模块:
5总结
通过这次C程序设计,我掌握了模块化设计方法,能够深入的理解结构化程序设计思想,熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。
参考文献
1C/C++程序设计,王连相等,中国科学技术出版社,2004
2C语言程序设计,谭浩强,清华大学出版社,1999
3C程序设计题解与上机指导,谭浩强,清华大学出版社,1999
4C语言实用程序荟萃,西安电子科技大学出版社,1993
5C语言函数手册,机械工业出版社,1999
6C语言的实际应用,安徽科学技术出版社,2000
致谢
首先要感谢张宪立老师的授课与指导!
感谢所有支持我完成C程序设计论文的老师和同学们!
在这次课程设计中老师给了我很大的帮助,帮我解答疑难问题,给我提供资料,给我提供查阅资料的信息,引导我该如何去思考问题,教会我解决问题的方法.同时又鼓励我自己学习,老师给我的不仅是知识,时帮助,更是学习的信心和智慧,在这里衷心感谢老师的耐心细心一丝不苟的帮助.同时也感谢和我一起走过的同学,这是我们共同努力地结果,衷心的感谢大家对我的帮助和支持。
附录
#defineMAX_WORKER_NUM100
#include
#include
#include
#include
voidMenu();//菜单函数
voidBuild();//新建文件
voidAdd();
voidDel();//删除记录函数
voidBrowse();
voidModify();
voidOrder();//排序函数
intLoad();
voidCheckNum(int,int);//检查编号
voidData();//统计函数
voidSname();//按姓名搜索
voidSNum();//按学号搜索
voidPrintf_face();//显示数据结构
voidPrintf_one(int);//输出一条记录
voidInput(int,int);//输入一个记录
voidPrintf_one(int);//显示一条记录
voidSave(int);//保存函数
intModify_data(int,int);//修改数据函数
voidNumDuty();
voidNumPM();
voidNumWM();
voidHiedcation();
structworker
{
charcArrNum[11];
charcArrName[10];
charcArrSex[2];
charcArrAge[3];
charcArrZhiwu[15];
charcArrZhengzhi[15];
charcArrXueli[15];
charcArrZhicheng[15];
charcArrRenzhisj[8];
charcArrLaiyuansj[8];
charcArrLeibie[15];
}structWk[MAX_WORKER_NUM];
voidMenu()/********************菜单函数***************/
{
intnSelectNum,nWhileFlag;
do{
printf("\n\t\t\t\tMENU\n");
printf("\t\t0\tBuildnewdata\n\n");
printf("\t\t1\tDeletedata\n\n");
printf("\t\t2\tAdddata\n\n");
printf("\t\t3\tSearchbyNumber\n\n");
printf("\t\t4\tSearchbyName\n\n");
printf("\t\t5\tBrowseall\n\n");
printf("\t\t6\tModifythedata\n\n");
printf("\t\t7\tOrderthevolume\n\n");
printf("\t\t8\tDataavolume\n\n");
printf("\t\t9\tExit\n\n");
printf("\tPleasechoiceandenteranumber[]\b\b");
scanf("%d",&nSelectNum);
if(nSelectNum<0||nSelectNum>9)
{
nWhileFlag=1;
}
elsenWhileFlag=0;
}while(nWhileFlag==1);
switch(nSelectNum)
{
case0:
Build();break;
case1:
Del();break;
case2:
Add();break;
case3:
SNum();break;
case4:
Sname();break;
case5:
Browse();break;
case6:
Modify();break;
case7:
Order();break;
case8:
Data();break;
case9:
exit(0);break;//正常退出
default:
printf("inputerror!
!
pleaseinputacArrNumberbetween0and8");
Menu();
}
}
/**************************新建文件*********************/
voidBuild()
{
intnInputWkNum,nWorkerNum,p;
FILE*fp;
if((fp=fopen("worker00.txt","w"))==NULL)
{
printf("cannotbuildfile\n");
Menu();
}
printf("howmanyworkersdoyouwanttoinput(0-%d)?
:
",MAX_WORKER_NUM);
scanf("%d",&nWorkerNum);
for(nInputWkNum=0;nInputWkNum{
printf("\nInput%dthworkerrecord.\n",nInputWkNum+1);
Input(nInputWkNum,nInputWkNum);
}
for(p=0;p<=nInputWkNum;p++)
if((fprintf(fp,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",structWk[p].cArrNum,structWk[p].cArrName,structWk[p].cArrSex,structWk[p].cArrAge,structWk[p].cArrZhiwu,structWk[p].cArrZhicheng,structWk[p].cArrZhengzhi,structWk[p].cArrXueli,structWk[p].cArrRenzhisj,structWk[p].cArrLaiyuansj,structWk[p].cArrLeibie))!
=1)
printf("cannotwritethedata\n\n");
fclose(fp);
Menu();
}
voidAdd()/*****************增加人员***********************/
{
inti,nAddNum,nExistNum,nAftAddNum,p;
FILE*fp;
nExistNum=Load();
if(nExistNum==-1)
Menu();
printf("Howmanyworkersdoyouwanttoadd(0-%d)?
:
[]\b\b\b",MAX_WORKER_NUM-nExistNum);
scanf("%d",&nAddNum);
nAftAddNum=nAddNum+nExistNum;
for(i=nExistNum+1;i<=nAftAddNum;i++)
{
printf("\nInput%dthworkerrecord.\n",i-nExistNum+1);
Input(i,nExistNum);}
if((fp=fopen("worker00.txt","a+"))==NULL)
{printf("cannotopenfile\n");
Menu();}
for(p=0;pfprintf(fp,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",structWk[p].cArrNum,structWk[p].cArrName,structWk[p].cArrSex,structWk[p].cArrAge,structWk[p].cArrZhiwu,structWk[p].cArrZhicheng,structWk[p].cArrZhengzhi,structWk[p].cArrXueli,structWk[p].cArrRenzhisj,structWk[p].cArrLaiyuansj,structWk[p].cArrLeibie);
fclose(fp);
Menu();
}
voidInput(inti,intn)/*********************输入一个记录************************/
{
CheckNum(i,n);
printf("\nentertheAge:
\t[]\b\b\b\b");
scanf("%s",structWk[i].cArrAge);
printf("\nentertheSex[MformanandWforwoman]:
\t[]\b\b");
scanf("%1s",structWk[i].cArrSex);
printf("\nentertheZhiwu:
\t[]\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",structWk[i].cArrZhiwu);
printf("\nentertheZhicheng:
\t[]\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",structWk[i].cArrZhicheng);
printf("\nenterthezhengzhimiannao:
\t[]\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",structWk[i].cArrZhengzhi);
printf("\nentertheXueli:
\t[]\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",structWk[i].cArrXueli);
printf("\nentertherenzhishijian:
\t[]\b\b\b\b\b\b\b\b\b");
scanf("%s",structWk[i].cArrRenzhisj);
printf("\nenterthelaiyanshijian:
\t[]\b\b\b\b\b\b\b\b\b");
scanf("%s",structWk[i].cArrLaiyuansj);
printf("\nentertheLeibie:
\t[]\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",structWk[i].cArrLeibie);
}
/****************加载函数**********************/
intLoad()
{
FILE*fp;
inti;
if((fp=fopen("worker00.txt","r"))==NULL)
{
printf("cannotopenfile\n");
returnNULL;
}
else
{
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",structWk[i].cArrNum,structWk[i].cArrName,structWk[i].cArrSex,structWk[i].cArrAge,structWk[i].cArrZhiwu,structWk[i].cArrZhicheng,structWk[i].cArrZhengzhi,structWk[i].cArrXueli,structWk[i].cArrRenzhisj,structWk[i].cArrLaiyuansj,structWk[i].cArrLeibie);
return(i-1);
}
}
voidCheckNum(inti,intnWkNum)/*************检查输入号码************/
{
intj,k,nIllegalNum;
workertempWk;
do{
nIllegalNum=0;
printf("EntertheNumber:
[]\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",tempWk.cArrNum);
for(j=0;tempWk.cArrNum[j]!
='\0';j++)
{
if((tempWk.cArrNum[j]<'0')||(tempWk.cArrNum[j]>'9'))
{
printf("Inputerror!
Onlybemadeupof(0-9).Pleaseinputagain!
\n\n");
nIllegalNum=1;
break;
}
}
if(nIllegalNum==0)
{
for(k=0;k{
if(k!
=i&&strcmp(structWk[k].cArrNum,tempWk.cArrNum)==0)
{
printf("thisrecord