题目要求:
[要求]
人事管理管理系统
员工包括总经理、经理、雇员,信息包括工号、姓名、职务、身份证号、籍贯、工资(实
发工资)等。
人事工资管理:
职工工资的主要属性如下:基本工资、岗位工资、奖金、应发工资、医疗住房基金、税
金、实发工资;其中应发工资等于基本工资与岗位工资之和,而实发工资等于应发工资减去
医疗住房基金和税金。部门暂时分为设备处、人事处、学工处、计算机学院,利用文本文件
存储职工工资信息;实现工资的录入、统计(统计整个单位的平均工资、最高工资和最低工
资、工资均方差等信息;各部门的平均工资、最高工资和最低工资、工资均方差等信息)、
查询(根据工号或姓名查询)、修改、删除等功能。
一、需求分析:
根据题目要求,人事信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,
在程序中应该有添加删除,查询,编辑,统计,排序,保存,排序等程序实现相应的操作,
另外菜单式的选择方式选择程序的功能也是必须需的。另外程序中要求存储的模块,采用的
方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件存贮,
这样的方法在一定程度上提高了对数据处理的灵活性,将各个功能分模块设计分别写成各个
函数,在调用函数。基本上能满足要求;
二、概要设计:
根据以上需求分析,将程序分成以下几个模块:
1、 输入人事信息;
2、 增加人事信息;
3、 查找人事信息;
4、 删除人事信息;
5、 统计人事信息;
6、 人事职工公资排列:
7、 修改信息;
8、 保存信息;
9、 显示信息;
三、详细设计;
1、 主函数:
〈1〉需求分析:
为使系统执行完每部分功能后能够方便的回到系统主界面,main()函数设计的较简单,只包
含一个 menu()函数,其余的全部功能都通过 menu()函数调用来实现,并通过 menu()函数的
递归调用实现返回主界面的功能。
main()函数定义如下:
main()
{menu();}
而 menu()定义如下:
〈2〉流程图:
void menu()
{
人事信息管理系统
system("cls");
printf("\t****************************************************************\n");
*\n");
printf("\t*
*\n");
printf("\t*
printf("\t*
*\n");
printf("\t*
printf("\t*
printf("\t*
printf("\t*
printf("\t*
*\n");
printf("\t*
printf("\t****************************************************************\n");
printf("\t*
南昌航空大学软件学院 102041 班
增加人事信息 *\n");
删除人事信息 *\n");
人事工资排列 *\n");
保存人事信息 *\n");
退出管理系统 *\n");
[1] 输入人事信息
[3] 查找人事信息
[5] 统计人事信息
[7] 修改人事信息
[9] 显示人事信息
[2]
[4]
[6]
[8]
[0]
学号 10204127*\n”);
文啸制作*\n”);
指导老师王老师*\n”);
*\n”);
printf("\t*
printf("\t*
printf("\t*
}
while(1)
{
menu();
printf("\t====>请选择:");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case
0:
exit(0); /*退出*/
break;
case
1:
input();
fh();/*增加职工信息*/
break;
case
2:
add();
fh();/*查看职工信息*/
break;
case
3:
zc_query();
fh();/*查找*/
break;
case
4:
num_del();
fh();/*删除*/
break;
case
5:
tongji();
fh();/*统计*/
break;
case
6:
sort();
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)、新建数据文件模块:
<1>、数据结构;
看各个数据信息,编号、姓名、性别、部门、职称、学历、工资、均为字符串类型,在文件
中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;而数据读进内存
中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组
成了一个结构体数组。定义如下:
struct employee
{
char num[10];
char name[15];
char sex[5];
char age[10];
char bm[20];
char zc[20];
char xueli[10];
int gz;
};
(2)修改职工信息:
〈1〉 需求分析:
该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由
用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部
分记录,根据用户选择修改相应的信息,然后保存修改后的结果;
〈2〉 流程图
〈3〉 程序;
void num_modify() //修改职工信息
{
FILE *fp=NULL;
char gh[60];
int i=0;
int changeIndex=0; /*/changeIndex 改变标记*/
int index=0;
printf("请输入要修改的人事工号:");
scanf("%s",gh);
for (i=0;i
printf("\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[changeIndex].num,em[changeIndex].name,e
m[changeIndex].sex,em[changeIndex].age,em[changeIndex].bm,em[changeIndex].zc,em[changeI
ndex].xueli,em[changeIndex].gz);
printf("请重新输入该人事信息");
printf("工号:");
scanf("%s",em[changeIndex].num);
printf("姓名:");
scanf("%s",em[changeIndex].name);
printf("性别:");
scanf("%s",em[changeIndex].sex);
printf("年龄: ");
scanf("%s",em[changeIndex].age);
printf("部门:");
scanf("%d",em[changeIndex].bm);
printf("职称:");
scanf("%s",em[changeIndex].zc);
printf("学历:");
scanf("%s",em[changeIndex].xueli);
printf("工资:");
scanf("%d",&em[changeIndex].gz);
/*信息修改后重新更新文件里面的数据 以保持数据一致性*/
fp=fopen("employee1.txt","wb+");
for (i=0;i修改成功\n");
}
(3)删除模块;
〈1〉需求分析:
该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,
由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认
后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将
删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存;
〈2〉流程图:
Y
〈3〉程序;
void num_del()/*按工号删除*/
{
FILE *fp=NULL;
char gh[60];
int i=0;
int j=0;
printf("请输入要删除的人事工号:");
scanf("%s",gh);
for(i=0;i