C语言课设之人事管理系统.docx
- 文档编号:27486479
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:52
- 大小:258.28KB
C语言课设之人事管理系统.docx
《C语言课设之人事管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课设之人事管理系统.docx(52页珍藏版)》请在冰豆网上搜索。
C语言课设之人事管理系统
C语言课程设计
——人事管理系统
题目要求:
人事管理管理系统
[要求]
某高校主要人员有:
在职人员(行政人员、教师、一般员工)、退休人员和临时工。
现在,需要存储这些人员的人事档案信息:
编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中,人员编号唯一,不能重复。
(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\t%s\t%s\t%s\n",wk[p].num,wk[p].name,wk[p].sex,wk[p].age,wk[p].zhiwu,wk[p].zhic
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 人事管理系统