工资信息管理系统.docx
《工资信息管理系统.docx》由会员分享,可在线阅读,更多相关《工资信息管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
工资信息管理系统
一、题目要求
工资信息管理系统
【要求】
该系统能够实现工资信息管理。
系统包括录入、浏览、查询、统计等功能。
其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号、姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。
【提示】
1.文件中一行数据对应一个职工工资信息
2.工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录
3.工资单信息包括工资卡号、姓名、月份、应发工资、水费、电费、税金、实发工资等
4.实发工资=应发工资-水费-电费-税金,其中税金的计算方法为
a.应发工资<800元,税金=0
b.800<应发工资<1400元,税金=(应发工资-800)*5%
c.应发工资>1400元,税金=(应发工资-1400)*10%
另:
课程实习报告的参考格式
1.题目编号
2.写出系统总设计的思路、功能模块划分。
给出合理的测试数据及运行结果,要求能够体现程序的正确性和完备性及对错误输入的处理。
总结算法或系统的优缺点,给出算法或系统进一步改进的设想。
在附录中给出源代码,
3.附录
二、需求分析
根据题目要求,由于工资单信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览学生的信息,应提供录入、浏览、查询、统计等操作;另外还应提供键盘式选择菜单实现功能选择。
三、总体设计
根据上面的需求分析,可以将这个系统的设计分为以下几个模块:
数据输入,数据添加,数据浏览,数据查询,数据统计。
图一系统功能模块图
四、详细设计
1.主函数
主函数提供输入、处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
[流程图]
图二主函数模块功能流程图
[程序]
main()/********************主函数**********************/
{
intn,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单应对数字的范围内*/
do{puts("\t\t**********MENU*************************\n\n");
puts("\t\t\t\tnewdata");
puts("\t\t\t\tnewdata");
puts("\t\t\t\tall");
puts("\t\t\t\tbyname");
puts("\t\t\t\tbynum");
puts("\t\t\t\tgongzi");
puts("\t\t\t\t");
puts("\n\n\t\t**********************************\n");
printf("Choiceyournumber(1-7):
[]\b\b");
scanf("%d",&n);
if(n<1||n>7){w=1;getchar();}/*对选择的数字作判断*/
elsew=0;}
while(w==1);
switch(n)
{case1:
enter();break;/*输入模块*/
case2:
add();break;/*添加模块*/
case3:
browse();break;/*浏览模块*/
case4:
search_name();break;/*查询模块*/
case5:
search_num();break;/*查询模块*/
case6:
count();break;/*统计模块*/
case7:
exit(0);break;/*退出*/
}/*其中4和5两个模块式在查询要求的基础上加上的模块*/
}
2.各功能模块设计
(1)输入函数
【分析】
单独看各数据信息,姓名是字符型,可以采用字符型数组;工资卡号和月份是整数,采用整型;实发工资,水费,电费,税金,应发工资有可能是小数可采用实型。
数据信息存放在文件中,一条记录对应一个职工的工资单信息,既符合习惯也方便信息管理。
同时把职工的工资卡号,姓名,月份,应发工资,水费,电费,税金,实发工资作为结构体成员,用结构体数组存放若干个职工的工资信息。
structgz
{intnum;
charname[20];
intmonth;
longys;
longss;
longwf;
longef;
longtax;
}g[N];/*g[N]中每个数组元素对应一个职工*/
【流程图】
图三输入模块流程图
【程序】
enter()
{inti,n;
printf("Howmanygongzixinxi(0-%d):
",N-1);
scanf("%d",&n);
printf("\nEnterdatanow\n\n");
for(i=0;i{printf("\nInput%dthgongzirecord.\n",i+1);
input(i);}
sort();
if(i!
=0)save(n);
printf_back();
}
(2)添加模块
【分析】
该模块的功能是用户需要增加新的职工工资信息记录,从键盘输入并逐条写入到原来的输入文件中,注意采用追加而不是覆盖的方式。
【流程图】
图四添加模块流程图
【程序】
add()
{inti,n,m,k;
FILE*fp;
n=load();
printf("Hoemangpeopleareyouwanttoadd(0-%d):
",N-n-1);
scanf("%d",&m);
k=m+n;
for(i=n;i{printf("\ninput%dthsalaryrecord.\n",i-n+1);
input(i);
}
sort();
save(k);
printf_back();
}
(3)浏览模块
【分析】
该模块的功能是显示所有职工工资信息记录。
【流程图】
图五浏览模块流程图
【程序】
browse()
{inti,n;
n=load();
printf_face();
for(i=0;i{if(i%10==0){printf("\n\nPassanykeytocontiune...");
getch();puts("\n\n");}
printf_one(i);printf("\n");
}
printf("\tThereare%drecord.\n",n);
printf("\nPassanykeytoback....");
getch();
menu();
}
(4)按姓名查找模块
【分析】
该模块的功能是根据输入的职工姓名查找对应的工资信息记录。
【流程图】
图六按姓名查找模块流程图
【程序】
search_name()
{inti,n,k,w1=1;
structgzs;
n=load();
do
{k=-1;
printf("\n\nEnternamethatyouwanttosearch!
name");
scanf("%s",;
printf_face();
for(i=0;iif(strcmp,g[i].name)==0)
{k=i;printf_one(k);}
if(k==-1)
{printf("\n\nNoexist!
please");
printf("\n\nAreyouagain\n\t1).Again2)Noandback[]\b\b");
scanf("%d",&w1);}
}while(k==-1&&w1==1);
menu();
}
(5)按工资卡号查找模块
【分析】
该模块的功能是根据输入的职工工资卡号查找对应的工资信息记录。
【流程图】
图七按工资卡号查找模块流程图
【程序】
search_num()
{inti,n,k,w1=1;
structgzs;
n=load();
do
{k=-1;
printf("\n\nEnternumberthatyouwanttosearch!
number");
scanf("%d",&;
printf_face();
for(i=0;iif==g[i].num)
{k=i;printf_one(k);}
if(k==-1)
{printf("\n\nNoexist!
please");
printf("\n\nAreyouagain\n\t1).Again2)Noandback[]\b\b");
scanf("%d",&w1);}
}while(k==-1&&w1==1);
menu();
}
(6)统计模块
【分析】
该模块的功能是根据用户输入的职工姓名和所统计的月份来计算得出某个时间段的工资总额。
【流程图】
图八统计模块流程图
【程序】
count()
{inti,j,k,n,sum=0;
charname[20];
n=load();
printf("\nEntertheenployer'sname:
[]\t\t");
scanf("%s",name);
printf("\nEnterthefirstmonthtocount!
month:
[]\t\t");
scanf("%d",&j);
printf("\nEnterthelastmonthtocount!
month:
[]\t\t");
scanf("%d",&k);
for(i=0;iif(strcmp(name,g[i].name)==0&&g[i].month>=j&&g[i].month<=k)
{printf_one(i);
sum=sum+g[i].ss;}
printf("\ntheresultofcount:
sum=%d\n",sum);
menu();
}
3.公共函数
(1)排序函数sort()
【程序】
sort()
{
inti,j,n;
structgzt;
n=load();
for(i=0;ifor(j=i+1;jif(g[i].num>g[j].num)
{t=g[i];
g[i]=g[j];
g[j]=t;}
}
(2)输入函数input(inti)
【程序】
input(inti)
{scanf("%d%s%d%ld%ld%ld",&g[i].num,g[i].name,&g[i].month,&g[i].ys,&g[i].wf,&g[i].ef);
tax(i);
}
(3)保存函数save(intn)
【程序】
save(intn)
{FILE*fp;
inti;
if((fp=fopen("","w"))==NULL)
{printf("\nCannotopenfile\n");
returnNULL;}
for(i=0;iif(g[i].num!
=0)
if(fwrite(&g[i],sizeof(structgz),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
(4)税金计算函数tax(inti)
【程序】
tax(inti)
{
if(g[i].ys<800)g[i].tax=0;
elseif(800elseg[i].tax=((g[i].ys-1400)*5/100);
g[i].ss=g[i].ys-g[i].wf-g[i].ef-g[i].tax;
}
(5)加载函数load()
【程序】
load()
{FILE*fp;
inti;
if((fp=fopen("","r"))==NULL)
{printf("\nCannotopenfile\n");
returnNULL;}
for(i=0;!
feof(fp);i++)
fread(&g[i],sizeof(structgz),1,fp);
fclose(fp);
return(i-1);
}
(6)显示数据结构项目的函数printf_face()
printf_face()
{printf("\nnumnamemonthyswfefsstax\n");}
(7)显示一个记录的函数
printf_one(inti)
{printf("%5d%10s%5d%10ld%10ld%10ld%10ld%10ld",g[i].num,g[i].name,g[i].month,
g[i].ys,g[i].wf,g[i].ef,g[i].ss,g[i].tax);}
(8)一个任务结束时的选择浏览还是返回的函数
printf_back()
{intk,w;
printf("\n\n\tSuccessful.\n\n");
printf("Whatdoyouwanttodo\n\n\t1).Browseallnow2).Back;[]\b\b");
scanf("%d",&w);
elsemenu();
if(w==1)browse();
}
五、上机操作
1.数据源
2.编译、连接和运行
3.结果
下面是各个模块的界面图
(1)主菜单函数
(2)输入模块
在主界面出现后输入1回车看到下图
(3)添加模块
(4)浏览模块
(5)按姓名查找模块
(6)按工资卡号查找模块
(7)统计模块
六、总结
通过该实例的学习,可以进一步理解和运用结构化程序设计的思想和方法,初步掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。