2022年C语言课程设计人事管理系统 2.pdf
《2022年C语言课程设计人事管理系统 2.pdf》由会员分享,可在线阅读,更多相关《2022年C语言课程设计人事管理系统 2.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言课程设计实验报告第 1 页共 17 页C 语言课程设计实验报告班级姓名学号实验课程C 实验名称人事管理系统实验成绩实验日期任课教师一、 目的( 本次 课程设计所涉及并要求掌握的知识点。 )本次课程设计主要涉及c 语言的基础语法,以及指针、文件函数、结构体、函数调用等知识点。二、使用环境(本次上机实践所使用的平台和相关软件。)主要采用 windows xp 系统环境 +visual c+6.0编译环境三、内容与设计思想(1 设计思路 2 主要数据结构 3 主要代码结构 4 主要代码段分析。 )设计思路1、需求分析人事档案信息采用文件存储,因而要提供文件的输入输出操作;根据学院人事的变动情
2、况, 添加删除记录, 因而要提供文件的添加删除操作;根据编号和姓名进项查询,所以要提供文件的查找操作;高级编辑功能,就是提供文件的修改操作;统计功能要提供统计操作;排序功能要提供用排序算法对文件记录的排序;另外还要提供键盘式选择菜单以实现功能选择。2、总体设计整体设计为数据输入模块、数据添加模块、数据删除模块、数据查询模块、数据修改模块、数据统计模块、数据排序模块。主要数据结构数据结构采用结构体:Struct personnelArchiveInfo Char No10; /编号Char name10; /姓名Int sex; /性别Int age; /年龄Char job10; /职务Cha
3、r post10; /职称Char politic10; /政治面貌Char edu_level10; /最高学历Char period10; /任职时间Char start_time10; /来院时间Char type10; /人员类别名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - C 语言课程设计实验报告第 2 页共 17 页PAInfo; 主要代码结构1. 主函数为使系统执行完每部分功能后能够方便的回到系统主界面,mai
4、n()函数设计的较简单,只包含一个menu()函数,其余的全部功能都通过menu()函数调用来实现,并通过 menu()函数的递归调用实现返回主界面的功能。void main() int flag=0; int choose=0; FILE *fp=NULL; char yesorno; system(color B9); if(fp=fopen(employee1.txt,rb+)=NULL) printf(n=提示:文件不存在,是否要创建一个?(y)n); scanf(%c,&yesorno); if(yesorno=y|yesorno=Y) /这里仅为了建立文件 fp=fopen(emp
5、loyee1.txt,wb+); fclose(fp); /关闭 fp 所指的文件,释放文件缓冲区 else exit(0); else Number=read_file(PAInfo); /要是文件已经有数据将数据初始化到数组中 system(cls); system(color B9); while(1) menu(); system(color 20); printf(t=请选择: ); scanf(%d,&choose); system(cls); switch(choose) case 0: exit(0); /退出 break; case 1: input(); fh();/增加职
6、工信息 break; case 2: add(); fh();/查看职工信息 break; case 3: zc_query(); fh();/ 查找 break; case 4: num_del(); fh();/删除 break; case 5: tongji(); fh();/统计 break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - C 语言课程设计实验报告第 3 页共 17 页 case 6: sort();
7、 fh();/排序 break; case 7: num_modify(); fh();/修改后返回 break; case 8: save(); fh();/保存 break; case 9: disp(); fh(); break;/显示 default: break; fflush(stdin); getchar(); system(cls); 2. 各功能模块设计(1)数据输入模块看各个数据信息,编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别,在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;而数据读进内存中时,可以以结构体的
8、形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。定义如下: char NO10; char name15; char sex5; int age; char job20; char post20; char edu_level10; char politic20; /政治面貌char period10; /任职时间 char start_time10; /来院时间 char type10; /人员类别(2)数据添加模块该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入。为方便用户管
9、理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入。void add()/增加职工 int numberTemp=0; int i=0; struct personnelArchiveInfo temp; /临时保存信息 printf(请输入要增加人事信息的个数:); scanf(%d,&numberTemp); for(i=0;inumberTemp;i+) printf(输入第 %d个人事信息 n,i+1); printf(编号: ); scanf(%s,temp.NO); print
10、f(姓名: ); scanf(%s,temp.name); printf(性别: ); scanf(%s,temp.sex); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - C 语言课程设计实验报告第 4 页共 17 页 printf(年龄: ); scanf(%d,&temp.age); printf(部门: ); scanf(%s,temp.job); printf(职称: ); scanf(%s,temp.post);
11、 printf(学历: ); scanf(%s,temp.edu_level); printf(政治面貌: ); scanf(%s,&temp.politic); printf(任职时间: ); scanf(%s,&temp.period); printf(来院时间: ); scanf(%s,&temp.start_time); printf(人员类别: ); scanf(%s,&temp. type); PAInfoNumber+=temp; /将刚添加的写入到数组 write_file(&temp); /将刚添加的写入到文件 printf(添加成功 n); (3)数据删除模块该模块的运行方
12、式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存;void num_del()/按编号删除 FILE *fp=NULL; char gh60; int i=0; int j=0; printf(请输入要删除的人事编号:); scanf(%s,gh); for(i=0;iNumber;i+) if (strcmp(gh,PAInfoi.NO)=0) /如果查找
13、到就删除 for (j=i;jNumber-1;j+) PAInfoj=PAInfoj+1; Number-; /将剩余数据写入文件重新一写的方式打开文件把以前的数据擦除了 fp=fopen(employee1.dat,wb); for (i=0;iNumber;i+) fwrite(&PAInfoi,sizeof(struct personnelArchiveInfo),1,fp); fclose(fp); printf(删除成功 ;n); (4)数据查询模块void zc_query()/按职称查找 char post20; int i=0; printf(请输入要查找人事职称:); sc
14、anf(%s,post); system(cls); printf(t编号t姓名t性别t年龄 t部门 t职称t学历t政治面貌 t任职时间 t来院时间 t人员类别 n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - C 语言课程设计实验报告第 5 页共 17 页 for (i=0;iNumber;i+) if (strcmp(post,PAInfoi.post)=0) printf(t%st%st%st%dt%st%st%s
15、t%st%st%st%snn,PAInfoi.NO,PAInfoi.name,PAInfoi.sex,PAInfoi.age,PAInfoi.job,PAInfoi.post,PAInfoi.edu_level,PAInfoi.politic,PAInfoi.period,PAInfoi.start_time,PAInfoi.type); (5)数据修改模块该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示, 显示完所有的记录后, 由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果:void num_
16、modify() /修改职工信息 FILE *fp=NULL; char gh60; int i=0; int changeIndex=0; /changeIndex 改变标记 int index=0; printf(请输入要修改的人事编号:); scanf(%s,gh); for (i=0;iNumber;i+) if (strcmp(gh,PAInfoi.NO)=0) /比较输入编号和数组中已有编号 changeIndex=i; /保存要修改的人的下标 break; printf(t编号t姓名t性别t年龄 t部门 t职称t学历t政治面貌 t任职时间 t来院时间 t人员类别 n); prin
17、tf(nn); printf(t%st%st%st%dt%st%st%st%st%st%st%snn,PAInfochangeIndex.NO,PAInfochangeIndex.name,PAInfochangeIndex.sex,PAInfochangeIndex.age,PAInfochangeIndex.job,PAInfochangeIndex.post,PAInfochangeIndex.edu_level,PAInfochangeIndex.politic,PAInfochangeIndex.period,PAInfochangeIndex.start_time,PAInfoch
18、angeIndex.type); printf(请重新输入该人事信息); printf(编号: ); scanf(%s,PAInfochangeIndex.NO); printf(姓名: ); scanf(%s,PAInfochangeIndex.name); printf(性别: ); scanf(%s,PAInfochangeIndex.sex); printf(年龄: ); scanf(%d,&PAInfochangeIndex.age); printf(部门: ); scanf(%d,PAInfochangeIndex.job); printf(职称: ); scanf(%s,PAIn
19、fochangeIndex.post); printf(学历: ); scanf(%s,PAInfochangeIndex.edu_level); printf(政治面貌: ); scanf(%s,&PAInfochangeIndex.politic); printf(任职时间: ); scanf(%s,&PAInfochangeIndex.period); printf(来院时间: ); scanf(%s,&PAInfochangeIndex.start_time); printf(人员类别: ); scanf(%s,&PAInfochangeIndex. type); /信息修改后重新更新
20、文件里面的数据以保持数据一致性 fp=fopen(employee1.txt,wb+); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - C 语言课程设计实验报告第 6 页共 17 页 for (i=0;i修改成功 n); (6)数据统计模块该模块的功能是按照用户的要求统计出满足符合条件的所有记录的个数,并将满足条件的记录显示出来。该模块没有涉及到文件的保存,所以将文件用只读的方式打开,可以防止操作过程中数据的丢失:void
21、tongji()/统计 int i,m,k,max,min; double sum=0.0; for(i=0;iNumber;i+) sum=sum+PAInfoi.age; printf(全体人事总年龄为:%fn,sum); printf(平均年龄为: %fn,sum/Number); i=0;m=0;max=0; max=PAInfom.age; for(i=1;imax) m=i; max=PAInfom.age; printf(最高年龄为: %dn,max); printf(t%st%st%st%dt%st%st%st%st%st%st%snn,PAInfom.NO,PAInfom.n
22、ame,PAInfom.sex,PAInfom.age,PAInfom.job,PAInfom.post,PAInfom.edu_level,PAInfom.politic,PAInfom.period,PAInfom.start_time,PAInfom.type); i=0;k=0;min=0; min=PAInfo0.age; for(i=1;iNumber;i+) if (PAInfoi.agemin) k=i; min=PAInfok.age; printf(最低年龄: %dn,min); printf(t%st%st%st%dt%st%st%st%st%st%st%snn,PAIn
23、fok.NO,PAInfok.name,PAInfok.sex,PAInfok.age,PAInfok.job,PAInfok.post,PAInfok.edu_level,PAInfom.politic,PAInfom.period,PAInfom.start_time,PAInfom.type); (7)数据排序模块该模块的功能是要求将记录按照年龄或者来院时间进行排序,总体结构是先用 sort()函数将文件中的数据调入内存,然后按照选择法排序,并将结果显示出来,然后将排序后的结果保存:void sort()/排序 struct personnelArchiveInfo t; int wan
24、tNUmber=0; int i=0; int j=0; int k=0; for(i=0;iNumber-1;i+) k=i; for(j=i+1;jPAInfok.age) k=j; if(k!=i) t=PAInfoi; PAInfoi=PAInfok; PAInfok=t; printf(你想输出前几名人事信息:); scanf(%d,&wantNUmber); if (wantNUmberNumber) wantNUmber=Number; printf(t编号t姓名t性别t年龄 t部门 t职称t学历t政治面貌 t任职时间 t来院时间 t人员类别 n); for(i=0;iwantN
25、Umber;i+) printf(t%st%st%st%dt%st%st%st%st%st%st%snn,PAInfoi.NO,PAInfoi.name,PAInfoi.sex,PAInfoi.age,PAInfoi.job,PAInfoi.post,PAInfoi.edu_level,PAInfoi.politic,PAInfoi.period,PAInfoi.start_time,PAInfoi.type); 四、调试过程(1 测试数据设计 2 测试结果分析)主界面:选择 1:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言课程设计人事管理系统 2022 语言 课程设计 人事管理系统
限制150内