工资管理系统实验任务书.docx
《工资管理系统实验任务书.docx》由会员分享,可在线阅读,更多相关《工资管理系统实验任务书.docx(21页珍藏版)》请在冰豆网上搜索。
工资管理系统实验任务书
一、实验名称《工资管理系统》
二、实验目的
了解管理信息系统的开发流程,熟悉C语言的文件和结构数组的各种基本操作。
程序涉及结构体、数组、文件等方面知识,掌握利用数组存储结构实现工资管理的原理,为进一步开发出高质量的信息管理系统打下基础。
三、实验内容
工资管理系统主要实现以下几种功能:
1、输入记录功能模块:
完成将工资数据存入数组中的工作。
2、查询记录功能模块:
完成在数组中查找满足相关条件的工资数据记录,并显示。
3、更新记录功能模块。
完成对工资数据记录的修改、删除、插入和排序操作。
4、统计记录功能模块。
完成对公司员工的工资在各等级的人数统计。
5、输出记录功能模块。
实现对工资数据记录的存盘操作。
实现将数组中存储的工资数据记录信息以表格的形式在屏幕上打印出来。
6、提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。
三、实验要求
1、对实验程序进行分析,完成主程序及每个子程序功能说明、参数说明和流程图。
例如:
1:
函数:
voidModify(ZGGZtp[],intn)
输入参数:
ZGGZtp[]参数概念:
职工数据结构数组
intn参数概念:
第n条记录
输出参数:
无返回参数
函数功能:
完成在数组tp中修改职工工资记录的功能。
在修改记录操作中,系统会先按用户输入的职工编号查找到该记录,然后提示用户修改职工编职工工资记录的总数
号之外的值,但职工编号不能修改。
函数流程图:
2:
函数:
intLocate(ZGGZtp[],intn,charfindmess[],charnameornum[])
输入参数:
ZGGZtp[]参数概念:
职工数据结构数组
Intn参数概念:
职工工资记录的总数
charfindmess[]参数概念:
保存要查找的内容
charnameornum[]参数概念:
按照名字和工号在数组中查找
输出参数:
return-1;
函数功能:
定位数组中符合要求的元素,并返回下标值
函数流程图
3函数:
voidDisp(ZGGZtp[],intn)
输入参数:
ZGGZtp[]:
参数概念:
职工数据结构数组
intn参数概念:
职工工资记录的总数
输出参数:
无返回值
函数功能:
用于显示数组中的N条记录
函数流程图
4:
函数:
intAdd(ZGGZtp[],intn)
输入参数:
ZGGZtp[]参数概念:
职工数据结构数组
intn参数概念:
第n条记录
输出函数;returnn
函数功能:
在数组中增加工资记录,并返回数组当前值,且显示出来
函数流程:
函数intDel(ZGGZtp[],intn)
输入参数:
ZGGZtp[]参数概念:
职工数据结构数组
intn参数概念:
第n条记录
输出参数:
returnn
函数功能:
找到符合条件的记录,然后删除,
用后一个数据代替前一个数据从而达到删除数据的目的
函数流程图
6:
函数voidQur(ZGGZtp[],intn)
输入参数
ZGGZtp[]:
参数概念:
职工数据结构数组
intn:
参数概念:
第n条记录
输出参数:
无返回值
函数功能:
记录数组中按职工编号或姓名查找所满足的条件,并显示出来
函数流程图
7:
函数:
intInsert(ZGGZtp[],参数intn)
输入参数
ZGGZtp[]:
参数概念:
职工数据结构数组
intn参数概念:
第n条记录
输出参数returnn
函数功能:
用于在数组中插入记录,并返回数组当前记录
函数流程图
Disp[tp,n]
8函数;voidTongji(ZGGZtp[],intn)
输入参数
ZGGZtp[]:
参数概念:
职工数据结构数组
intn:
职工工资记录的总数
输出参数;无输出参数
函数功能:
用于完成数组中记录统计工作,统计该公司职工工资的整体分布情况。
函数流程图
9函数;voidSort(ZGGZtp[],intn)
输入参数
ZGGZtp[]参数概念:
职工数据结构数组
intn参数概念:
第n条记录
输出参数;无返回值
函数功能:
在数组中利用冒泡排序算法实现数组的按实发工资字段的降序排序。
函数流程图
10函数:
voidSave(ZGGZtp[],intn)
输入参数
ZGGZtp[]:
参数概念:
职工数据结构数组
intn:
职工工资记录的总数
输出参数无返回值
函数功能:
用来保存数组中的n个元素写入磁盘的数据文件中。
函数流程图
11主函数main()
函数功能:
用来控制整个工资管理系统
主流程图
2、编写补充完成部分不全程序代码,调试程序使其能正确运行
(1)
/*
删除记录:
先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素
*/
intDel(ZGGZtp[],intn)
{intsel;
charfindmess[20];
intp=0,i=0;
if(n<=0)
{system("cls");
printf("\n=====>Noemployeerecord!
\n");
getchar();
returnn;
}
system("cls");
Disp(tp,n);
printf("\n=====>1Deletebynumber=====>2Deletebyname\n");
printf("pleasechoice[1,2]:
");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"inputtheexistingemployeenumber:
");
p=Locate(tp,n,findmess,"num");
getchar();
if(p!
=-1)
{
for(i=p+1;i{
strcpy(tp[i-1].num,tp[i].num);
strcpy(tp[i-1].name,tp[i].name);
tp[i-1].jbgz=tp[i].jbgz;
tp[i-1].jj=tp[i].jj;
tp[i-1].kk=tp[i].kk;
tp[i-1].yfgz=tp[i].yfgz;
tp[i-1].jbgz=tp[i].sk;
tp[i-1].sfgz=tp[i].sfgz;
}
printf("\n==>deletesuccess!
\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
elseif(sel==2)
{
stringinput(findmess,15,"inputtheexistingemployeename:
");
p=Locate(tp,n,findmess,"name");
getchar();
if(p!
=-1)
{
for(i=p+1;i{
strcpy(tp[i-1].num,tp[i].num);
strcpy(tp[i-1].name,tp[i].name);
tp[i-1].jbgz=tp[i].jbgz;
tp[i-1].jj=tp[i].jj;
tp[i-1].kk=tp[i].kk;
tp[i-1].yfgz=tp[i].yfgz;
tp[i-1].jbgz=tp[i].sk;
tp[i-1].sfgz=tp[i].sfgz;
}
printf("\n=====>deletesuccess!
\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
returnn
(2)
/*统计公司的员工的工资在各等级的人数*/
voidTongji(ZGGZtp[],intn)
{
intcount10000=0,count5000=0,count2000=0,count0=0;
inti=0;
if(n<=0)
{
system("cls");
printf("\n=====>Notemployeerecord!
\n");
getchar();
return;
}
system("cls");
Disp(tp,n);
i=0;
while(i{
if(tp[i].sfgz>=10000){count10000++;i=i+1;continue;}/*实发工资>10000*/
if(tp[i].sfgz>=5000){count5000++;i=i+1;continue;}/*5000<=实发工资<10000*/
if(tp[i].sfgz>=2000){count2000++;i=i+1;continue;}/*2000<=实发工资<5000*/
if(tp[i].sfgz<2000){count0++;i=i+1;continue;}/*实发工资<2000*/
}
printf("\n------------------------------theTongJiresult--------------------------------\n");
printf("sfgz>=10000:
%d(ren)\n",count10000);
printf("5000<=sfgz<10000:
%d(ren)\n",count5000);
printf("2000<=sfgz<5000:
%d(ren)\n",count2000);
printf("sfgz<2000:
%d(ren)\n",count0);
printf("-------------------------------------------------------------------------------\n");
printf("\n\npressanykeytoreturn");
getchar();
}/
}
(3)
/*
数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统时,会提示用户存盘
*/
voidSave(ZGGZtp[],intn)
{FILE*fp;
inti=0;
fp=fopen("c:
\\zggz","wb")
if(fp==NULL)
{
printf("\n=====>openfileerror!
\n");
getchar();
return;
}
for(i=0;i{
if(fwrite(&tp[i],sizeof(ZGGZ),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n=====>savefilecomplete,totalsaved'srecordnumberis:
%d\n",i);
getchar();
saveflag=0;
}
else
{system("cls");
printf("thecurrentlinkisempty,noemployeerecordissaved!
\n");
getchar();
}
fclose(fp);}