人事管理系统.docx

上传人:b****8 文档编号:10830185 上传时间:2023-02-23 格式:DOCX 页数:53 大小:258.37KB
下载 相关 举报
人事管理系统.docx_第1页
第1页 / 共53页
人事管理系统.docx_第2页
第2页 / 共53页
人事管理系统.docx_第3页
第3页 / 共53页
人事管理系统.docx_第4页
第4页 / 共53页
人事管理系统.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

人事管理系统.docx

《人事管理系统.docx》由会员分享,可在线阅读,更多相关《人事管理系统.docx(53页珍藏版)》请在冰豆网上搜索。

人事管理系统.docx

人事管理系统

 

C语言课程设计

 

——人事管理系统

学院:

工程学院

专业:

勘查技术与工程

班学号:

054073——03

学号:

20061044245

姓名:

巫增荣

日期:

2009-1-5

题目要求:

人事管理管理系统

[要求]

某高校主要人员有:

在职人员(行政人员、教师、一般员工)、退休人员和临时工。

现在,需要存储这些人员的人事档案信息:

编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。

其中,人员编号唯一,不能重复。

(1)添加删除功能:

能根据学院人事的变动情况,添加删除记录;

(2)查询功能:

能根据编号和姓名进行查询;

(3)编辑功能(高级):

根据查询对相应的记录进行修改,并存储;

(4)统计功能:

能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息;

(5)排序功能:

按照年龄、来院时间进行排序;

(6)保存功能:

能对输入的数据进行相应的存储;

一、需求分析:

根据题目要求,职工信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加删除,查询,编辑,统计,排序,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。

另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件存贮,这样的方法在一定程度上提高了对数据处理的灵活性,较容易理解,但存在处理中遇到以外情况而丢失数据的风险,另外当文件中的数据量很大时,这种方法也存在一定的难度,在本程序中将N定为100,基本上能满足要求;

二、总体设计:

根据以上需求分析,将程序分成以下几个模块:

1、新建数据文件(buildnewdata);

2、添加记录(adddata);

3、删除记录(deletedata);

4、按工号搜索(searchbynumber);

5、按姓名搜索(searchbyname);

6、浏览全部数据(browseall);

7、修改数据(modifythedata);

8、排序功能(orderthevolume);

9、统计功能(dataavolume);

系统功能模块图如下:

 

三、详细设计;

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");

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",&n);

if(n<0||n>8)

{w1=1;

getchar();}

elsew1=0;

}

while(w1==1);

switch(n)

{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);/*********退出*************************/

default:

{printf("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〉、流程图如下:

〈3〉、程序:

build(){inti,m,k,p;

FILE*fp;

if((fp=fopen("worker00.txt","w"))==NULL)

{printf("cannotbuildfile\n");

printf_back();}

printf("howmanyworkersdoyouwanttoinput(0-%d)?

:

",N);

scanf("%d",&m);

k=m;

for(i=0;i

{printf("\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)

printf("cannotwritethedata\n\n");

fclose(fp);

printf_back();

}

(2)、追加模块:

〈1〉[需求分析]

该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入。

为方便用户管理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入。

〈2〉流程图:

〈3〉程序:

add()

{inti,m,n,k,p;

FILE*fp;

n=load();

if(n==-1)

menu();

printf("howmanyworkersdoyouwanttoadd(0-%d)?

:

[]\b\b\b",N-n);

scanf("%d",&m);

k=m+n;

for(i=n+1;i<=k;i++)

{printf("\nInput%dthworkerrecord.\n",i-n+1);

input(i);

}

if((fp=fopen("worker00.txt","w"))==NULL)/*******将数据保存到文件********/

{printf("cannotopenfile\n");

printf_back();}

for(p=0;p

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);

fclose(fp);

printf_back();

}

(3)修改模块:

〈1〉[需求分析:

]

该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果;

〈2〉流程图

〈3〉程序;

modify()

{

inti,n,k,p,w0=1,w1,w2=0;

FILE*fp;

n=load();

do

{k=-1;

printf_face();

for(i=0;i<=n;i++)

{

if((i!

=0)&&(i%10==0))

{printf("\n\nRemembertheNo.whichneedmodify.\npressanykeytocontinue...");

getch();

puts("\n\n");

}

printf_one(i);

}

do

{

printf("\n\nEnterNO.thatyouwanttomodify!

\n\t\tNO.[]\b\b");

scanf("%s",s.num);

for(i=0;i

if(strcmp(s.num,wk[i].num)==0);

{k=i;

s=wk[i];

}

if(k==-1)

printf("\n\nNOexit!

pleaseagain");

}

while(k==-1);

printf_face();

printf_one(k);

w1=modify_data(k);

if(w1==1)

{printf("\nsuccessful!

!

\n\nDoyuowanttomodifyanother?

\n\n\t\t1\tYes\n\n\t\t2\tBackwithsave\n\t[]\b\b");

scanf("%d",&w0);

w2=1;

}

else

{w0=0;

if(w2==1)

wk[k]=s;}

wk[k]=s;

if(w0!

=1&&w2==1)

{fp=fopen("worker00.txt","w");

{for(p=0;p<=n;p++)

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);}

fclose(fp);}

}

while(w0==1);

menu();

}

修改数据函数如下:

modify_data(inti)

{intc,w1;

do

{printf("\nmodifyby=>\n\n\t\t1\tNO.\n\t\t2\tname\n\t\t3\tsex\n\t\t4\tage\n\t\t5\tzhiwu\n\t\t6\tzhicheng\n\t\t7

\tzhengzhimianmao\n\t\t8\txueli\n\t\t9\trenzhishijian\n\t\t10\tlaiyuanshijian\n\t\t11\trenyuanleibie\n\n\t\t\t[]\b\b");

scanf("%d",&c);

if(c>11||c<1)

printf("choiceerror!

pleasechooseagain!

");

getchar();

}

while(c>11||c<1);

do

{switch(c)

{case1:

printf("theoldnumberis%s,",wk[i].num);input_num(i,i-1);break;

case2:

printf("theoldnameis%s,enterthenewname:

",wk[i].name);scanf("%s",wk[i].name);break;

case3:

printf("theoldsexis%s,enterthenewsex:

",wk[i].sex);scanf("%1s",wk[i].sex);break;

case4:

printf("theoldageis%s,enterthenewage:

",wk[i].age);scanf("%s",wk[i].age);break;

case5:

printf("theoldzhiwuis%s,enterthenewzhiwu:

",wk[i].zhiwu);scanf("%s",wk[i].zhiwu);break;

case6:

printf("theoldzhichengis%s,enterthenewzhicheng:

",wk[i].zhicheng);scanf("%s",wk[i].zhicheng);break;

case7:

printf("theoldzhengzhimianmaois%s,enterthenewzhengzhimiainmao:

",wk[i].zhengzhi);scanf("%s",wk

[i].zhengzhi);break;

case8:

printf("theoldzuigaoxueliis%s,enterthenewzuigaoxueli:

",wk[i].xueli);scanf("%s",wk[i].xueli);break;

case9:

printf("theoldrenzhishijianis%s,enterthenewrenzhishijian:

",wk[i].renzhisj);scanf("%s",wk[i].renzhisj);break;

case10:

printf("theoldlaiyuanshijianis%s,enterthenewlaiyuanshijian:

",wk[i].laiyansj);scanf("%s",wk[i].laiyansj);break;

case11:

printf("theoldrenyuanleibieis%s,enterthenewrenyuanleibie:

",wk[i].leibie);scanf("%s",wk[i].leibie);break;

}

printf("now:

\n\n");

printf_face();

printf_one(i);

printf("\nareyousure?

\n\n\t\t1\tsure\n\t\t2\tNoandremodify\n\t\t3\tbackwithoutsaveinthistime\n\t\t\t[]\b\b\b");

scanf("%d",&w1);

}

while(w1==2);

return(w1);

}

(4)删除模块:

〈1〉[需求分析]:

该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存;

〈2〉流程图:

Y

〈3〉程序;

del()

{

charc;

inti,j,n,k,m,w0=1,w1=0,w2=0;

FILE*fpt;

n=load();

do

{k=-1;

printf_face();

for(i=0;i<=n;i++)

{

if((i!

=0)&&(i%10==0))

{printf("\n\nRemembertheNo.whichneeddelete.\npressanykeytocontinue...");

getch();

printf("\n\n");

}

printf_one(i);

}

do

{

printf("\n\nEnterNO.thatyouwanttodelete!

\n\t\tNO.[]\b\b");

scanf("%s",s.num);

for(i=0;i<=n;i++)

if(strcmp(s.num,wk[i].num)==0);

{k=i;

s=wk[i];

}

if(k==-1)

printf("\n\nNOexit!

pleaseagain");

}

while(k==-1);

printf_face();

printf_one(k);

printf("areyousuretodeletethedata?

\t[y/n]\n\t\t[]\b\b");

scanf("%1s",&c);

if(c=='y')

{

for(j=i;j<=n;j++)

wk[j]=wk[j+1];

w1=1;

}

elsemenu();

if(w1==1)

{printf("\nsuccessful!

!

\n\nDoyuowanttodeleteanother?

\n\n\t\t1\tYes\n\n\t\t2\tBackwithsave\n\t[]\b\b");

scanf("%d",&w0);

w2=1;

}

if(w0!

=1&&w2==1)

{fpt=fopen("worker00.txt","w");

for(m=0;m

fprintf(fpt,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[m].num,wk[m].name,wk[m].sex,wk[m].age,wk[m].zhiwu,wk[m].zhicheng,wk[m].zhengzhi,wk[m].xueli,wk[m].renzhisj,wk[m].laiyansj,wk[m].leibie);

fclose(fpt);

}}

while(w0==1);

menu();}

(5)、按号码搜索:

〈1〉[需求分析]:

该模块的功能是按照输入的人员的号码查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。

〈2〉流程图;

〈3〉、程序;

snum()

{FILE*fp;

inti,n,k,p,w1=1,w2,w3,w4;

n=load();

do

{do

{k=-1;

printf("\n\nEnterthenumberthatyouwanttosearch!

\n\t\tnumber:

[]\b\b\b\b\b");

scanf("%s",s.num);

for(i=0;i<=n;i++)

if(strcmp(s.num,wk[i].num)==0)

{k=i;

printf_one(k);break;

}

if(k==-1)

{

printf("\n\nNOexist!

please");

printf("\n\nAreyouagain?

\n\t\t1\tagain\n\t\t2\tNOandback\n\t\t[]\b\b");

scanf("%d",&w1);

if(w1==1)

{snum();

break;}

if(w1==2)menu();break;

}}

while(k==-1&&w1==1);

w4=0;w3=0;

if(k!

=-1);

printf("\n\nWhatdoyouwanttodo?

\n\t\t1\tsearchanother\n\t\t2\tmodify\n\t\t3\tDelete\n\t\t4\tbackmenu\n\t\t[]\b\b");

scanf("%d",&w2);

switch(w2)

{case1:

snum();break;

case2:

w3=modify_data(k);break;/****调用修改数据函数******/

case3:

{printf("\nAreyousure?

\n\t\t1\tsure\n\t\t2\tnoandback\n\t\t[]\b\b");

scanf("%d",&w4);

if(w4==1)

for(p=i;p<=n;p++)

wk[p]=wk[p+1];

break;}

case4:

menu();break;

}

if(w3==1||w4==1)

{fp=fopen("worker00.txt","w");

for(p=0;p<=n;p++)

fprintf(fp,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1