人事管理系统Word文件下载.docx
《人事管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《人事管理系统Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件存贮,这样的方法在一定程度上提高了对数据处理的灵活性,较容易理解,但存在处理中遇到以外情况而丢失数据的风险,当文件中的数据量很大时,这种方法也存在一定的难度,在本程序中将N定为100,基本上能满足要求;
二、总体设计:
根据以上需求分析,将程序分成以下几个模块:
1、新建数据文件(buildnewdata);
2、删除记录(deletedata);
3、添加记录(adddata)
4、按工号搜索(searchbynumber);
5、按姓名搜索(searchbyname);
6、浏览全部数据(browseall);
7、修改数据(modifythedata);
8、排序功能(orderthevolume);
9、统计功能(dataavolume);
9、退出(exit)
系统功能模块图如下:
三、详细设计;
1、主函数:
〈1〉需求分析:
为使系统执行完每部分功能后能够方便的回到系统主界面,main()函数设计的较简单,只包含一个menu()函数,其余的全部功能都通过menu()函数调用来实现,并通过menu()函数的递归调用实现返回主界面的功能。
main()函数定义如下:
main()
{menu();
}
而menu()定义如下:
〈2〉流程图:
menu()
{intn,w1;
do
{printf("
\n\t\t\t\tMENU\n"
);
printf("
\t\t0\tbuildnewdata\n\n"
\t\t1\tdeletedata\n\n"
\t\t2\tadddata\n\n"
\t\t3\tsearchbynumber\n\n"
\t\t4\tsearchbyname\n\n"
\t\t5\tbrowseall\n\n"
\t\t6\tmodifythedata\n\n"
\t\t7\torderthevolume\n\n"
\t\t8\tdataavolume\n\n"
\t\t9\texit\n\n"
\tpleasechoiceandenteranumber[]\b\b"
scanf("
%d"
&
n);
if(n<
0||n>
8)
{w1=1;
getchar();
elsew1=0;
while(w1==1);
switch(n)
{case0:
build();
break;
/*********调用新建数据文件函数*******/
case1:
del();
/*********调用删除数据函数***********/
case2:
add();
/*********调用添加数据函数***********/
case3:
snum();
/*********调用按工号搜索函数*********/
case4:
sname();
/*********调用按姓名搜索函数*********/
case5:
browse();
/*********调用浏览数据函数************/
case6:
modify();
/*********调用修改数据函数************/
case7:
order();
/*********调用排序函数函数************/
case8:
data();
/*********调用统计函数****************/
case9:
exit(0);
/*********退出*************************/
default:
inputerror!
!
pleaseinputanumberbetween0and8"
menu();
}}
2、各功能模块设计:
(1)、新建数据文件模块:
<
1>
、数据结构;
看各个数据信息,编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别,均为字符串类型,在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;
而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。
定义如下:
structworker
{charnum[11];
charname[10];
charsex[2];
charage[3];
charzhiwu[15];
charzhicheng[15];
charzhengzhi[15];
charxueli[15];
charrenzhisj[8];
charlaiyansj[8];
charleibie[15];
}wk[N],s;
其中N是宏定义形式定义的字符,临时定义为100,wk[N],为存放人员信息的结构体数组,而S为临时的结构体,用来保存信息处理过程中的临时数据。
〈2〉、流程图如下:
(2)、追加模块:
〈1〉[需求分析]
该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入。
为方便用户管理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入。
(3)修改模块:
〈1〉[需求分析:
]
该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果;
〈2〉流程图
(4)删除模块:
〈1〉[需求分析]:
该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存;
Y
(5)、按号码搜索:
该模块的功能是按照输入的人员的号码查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。
〈2〉流程图;
(7)按姓名搜索。
该模块的结构与按号码查询的结构基本相同;
(8)浏览模块;
〈1〉需求分析:
该模块的功能是显示所有保存在文件中的记录,考虑到记录较多,采用分屏显示的方式;
〈2〉、流程图;
(9)、排序模块;
〈1〉、[需求分析];
该模块的功能是要求将记录按照年龄或者来院时间进行排序,总体结构是先用n=load()函数将文件中的数据调入内存,然后按照选择法排序,并将结果显示出来,然后将排序后的结果保存。
〈2〉流程图;
(10)、统计模块
该模块的功能是按照用户的要求统计出满足符合条件的所有记录的个数,并将满足条件的记录显示出来。
该模块没有涉及到文件的保存,所以将文件用只读的方式打开,可以防止操作过程中数据的丢失。
}
该过程中调用了四个函数,numduty()(统计在职人员人数),numpm()(统计党员人数),numwm()(统计女工人数),hieduction()(统计高学历高职称人数),函数的具体定义见后面附录源程序。
并通过在四个函数中调用menu()函数返回到主菜单。
上机操作:
1:
数据源
2:
编译,连接和运行
下面是各个模块的运行结果的界面图:
1、主菜单函数界面:
2、输入模块:
新建文件和添加模块的输入界面基本相同:
3、删除模块;
4、浏览模块;
5、编辑模块:
6、统计模块:
7、排序模块:
附所有源程序:
#defineN100
#include<
stdio.h>
structworker
{
charnum[11];
}wk[N],s,h;
menu()/********************菜单函数***************/
{
intn,w1;
w1=1;
case0:
build()/**************************新建文件*********************/
{inti,m,k,p;
FILE*fp;
if((fp=fopen("
worker00.txt"
"
w"
))==NULL)
cannotbuildfile\n"
printf_back();
howmanyworkersdoyouwanttoinput(0-%d)?
:
"
N);
m);
k=m;
for(i=0;
i<
k;
i++)
\nInput%dthworkerrecord.\n"
i+1);
input(i);
for(p=0;
p<
=i;
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"
wk[p].num,wk[p].name,wk[p].sex,wk[p].age,wk[p].zhiwu,wk[p].zhicheng,wk[p].zhengzhi,wk[p].xueli,wk[p].renzhisj,wk[p].laiyansj,wk[p].leibie))!
=1)
cannotwritethedata\n\n"
fclose(fp);
add()/*****************add***********************/
{inti,m,n,k,p;
n=load();
if(n==-1)
howmanyworkersdoyouwanttoadd(0-%d)?
[]\b\b\b"
N-n);
k=m+n;
for(i=n+1;
=k;
i-n+1);
a+"
cannotopenfile\n"
printf_back();
fprintf(fp,"
wk[p].num,wk[p].name,wk[p].sex,wk[p].age,wk[p].zhiwu,wk[p].zhicheng,wk[p].zhengzhi,wk[p].xueli,wk[p].renzhisj,wk[p].laiyansj,wk[p].leibie);
input(inti)/*********************输入一个记录************************/
{input_num(i,i-1);
\nenterthename:
\t[]\b\b\b\b\b\b\b\b\b\b\b"
%s"
wk[i].name);
\nentertheage:
\t[]\b\b\b\b"
wk[i].age);
\nenterthesex[MformanandWforwoman]:
\t[]\b\b"
%1s"
wk[i].sex);
\nenterthezhiwu:
\t[]\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
wk[i].zhiwu);
\nenterthezhicheng:
wk[i].zhicheng);
\nenterthezhengzhimiannao:
wk[i].zhengzhi);
\nenterthexueli:
wk[i].xueli);
\nentertherenzhishijian:
\t[]\b\b\b\b\b\b\b\b\b"
wk[i].renzhisj);
\nenterthelaiyanshijian:
wk[i].laiyansj);
\nentertheleibie:
wk[i].leibie);
load()/****************加载函数**********************/
{FILE*fp;
inti;
r"
cannotopenfile\n"
returnNULL;
else
{for(i=0;
feof(fp);
fscanf(fp,"
wk[i].num,wk[i].name,wk[i].sex,wk[i].age,wk[i].zhiwu,wk[i].zhicheng,wk[i].zhengzhi,wk[i].xueli,wk[i].renzhisj,wk[i].laiyansj,wk[i].leibie);
return(i-1);
input_num(inti,intn)/*************输入号码************/
intj,k,w1;
do
w1=0;
printf("
enterthenumber:
[]\b\b\b\b\b\b\b\b\b\b\b\b"
scanf("
wk[i].num);
for(j=0;
wk[i].num[j]!
='
\0'
;
j++)
if((wk[i].num[j]<
'
0'
)||(wk[i].num[j]>
9'
))
{printf("
Inputerror!
Onlybemadeupof(0-9).Pleaseinputagain!
\n\n"
if(w1!
for(k=0;
k<
n;
k++)
if(k!
=i&
&
strcmp(wk[k].num,wk[i].num)==0)
thisrecordisexit.pleaseinputagain!
while(w1==1);
printf_back()/***************函数printf_back******************/
{intw;
\n\n\tsuccessful.\n\n"
Whatdoyouwanttodo?
\n\n\t\t1\tBrowseallnow\n\n\t\t2\tback\n\n\t\t[]\b\b"
w);
if(w==1)
elsemenu();
browse()/***********************浏览函数************************/
{inti,j,n;
n=load();
printf_face();
=n;
if((i!
=0)&
(i%10==0))
\n\nRemembertheNo.whichneedmodify.\npressanykeytocontinue..."
getch();
puts("
\tThereare%drecord.\n"
n+1);
pressanykeytocontinue..."
printf_face()/***************显示数据结构***********/
number\tname\tsex\tage\tzhiwu\tzhicheng\tzhengzhi\txueli\trenzhisj\tlayuanshijian\tleibie\n"
printf_one(intI)/*******************显示一个记录*************************/
wk[i].num,wk[i].name,wk[i].sex,wk[i].age,wk[i].zhiwu,wk[i].zhicheng,wk[i].zhengzhi,wk[i].xueli,wk[i].renzhisj,wk[i].laiyansj,wk[i].leibie);
save(intn/**********************保存函数**********************/
w+"
\n\t\tcannotopenfile\n"
i++);
if(wk[i].num!
=0)
if(fprintf(fp,"
wk[i].num,wk[i].name,wk[i].sex,wk[i