工资信息管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【提示】
1.文件中一行数据对应一个职工工资信息
2.工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录
3.工资单信息包括工资卡号、姓名、月份、应发工资、水费、电费、税金、实发工资等
4.实发工资=应发工资-水费-电费-税金,其中税金的计算方法为
a.应发工资<800元,税金=0
b. 800<应发工资<1400元,税金=(应发工资-800)*5%
puts("\t\t\t\t 4.Search by name");
puts("\t\t\t\t 5.Search by num");
puts("\t\t\t\t 6.Count gongzi");
puts("\t\t\t\t 7.Exit");
puts("\n\n\t\t**********************************\n");
n=load();
do
{ k=-1;
printf("\n\nEnter number that you want to search! number");
scanf("%d",&s.num);
printf_face();
for(i=0;i<n;i++)
if(s.num==g[i].num)
{k=i; printf_one(k);}
printf("Choice your number(1-7):[ ]\b\b");
scanf("%d",&n);
if(n<1||n>7) {w=1;getchar();}/*对选择的数字作判断*/
else w=0;}
while (w==1);
switch(n)
{ case 1: enter();break;/*输入模块*/
for(i=0;i<n;i++)
if(strcmp(name,g[i].name)==0&&g[i].month>=j&&g[i].month<=k)
{printf_one(i);
sum=sum+g[i].ss;}
printf("\nthe result of count: sum=%d\n",sum);
}
(2)输入函数input (int i)
【程序】
input (int i)
{ 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(int n)
printf_face();
for(i=0;i<n;i++)
if(strcmp(s.name,g[i].name)==0)
{k=i; printf_one(k);}
if(k==-1)
{printf("\n\nNo exist!please");
printf("\n\nAre you again?\n\t 1).Again 2)No and back [ ]\b\b ");
case 7: exit(0);break;/*退出*/
}/*其中4和5两个模块式在查询要求的基础上加上的模块*/
}
2.各功能模块设计
(1)输入函数
【分析】
单独看各数据信息,姓名是字符型,可以采用字符型数组;工资卡号和月份是整数,采用整型;实发工资,水费,电费,税金,应发工资有可能是小数可采用实型。数据信息存放在文件中,一条记录对应一个职工的工资单信息,既符合习惯也方便信息管理。同时把职工的工资卡号,姓名,月份,应发工资,水费,电费,税金,实发工资作为结构体成员,用结构体数组存放若干个职工的工资信息。
else g[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;
int i;
if((fp=fopen("salary.txt","r"))==NULL)
printf_one(i); printf("\n");
}
printf("\tThere are %d record.\n",n);
printf("\nPass any key to back....");
getch();
menu();
}
(4)按姓名查找模块
【分析】
该模块的功能是根据输入的职工姓名查找对应的工资信息记录。
【程序】
save(int n)
{ FILE *fp;
int i;
if((fp=fopen("salary.txt","w"))==NULL)
{ printf("\nCanHale Waihona Puke Baiduot open file\n");
return NULL;}
for(i=0;i<n;i++)
if(g[i].num!=0)
if(fwrite(&g[i],sizeof(struct gz),1,fp)!=1)
do{ puts("\t\t**********MENU*************************\n\n");
puts("\t\t\t\t 1.Enter new data");
puts("\t\t\t\t 2.add new data");
puts("\t\t\t\t 3.Browse all");
struct gz
{ int num;
char name[20];
int month;
long ys;
long ss;
long wf;
long ef;
long tax;
} g[N];/*g[N]中每个数组元素对应一个职工*/
【流程图】
图三 输入模块流程图
【程序】
enter()
{ int i,n;
printf("How many gongzixinxi (0-%d)?:",N-1);
scanf("%d",&n);
printf("\n Enter data now \n\n");
for(i=0;i<n;i++)
{printf("\nInput %dth gongzi record.\n",i+1);
input(i);}
sort();
if(i!=0) save(n);
printf_back();
printf("file write error\n");
fclose(fp);
}
(4)税金计算函数tax( int i)
【程序】
tax( int i)
{
if(g[i].ys<800) g[i].tax=0;
else if(800<g[i].ys&&g[i].ys<1400) g[i].tax=((g[i].ys-800)*5/100);
scanf("%d",&m);
k=m+n;
for(i=n;i<k;i++)
{printf("\ninput %dth salary record.\n",i-n+1);
input(i);
}
sort();
save(k);
printf_back();
}
(3)浏览模块
【分析】
该模块的功能是显示所有职工工资信息记录。
case 2: add();break;/*添加模块*/
case 3: browse();break;/*浏览模块*/
case 4: search_name();break;/*查询模块*/
case 5: search_num();break;/*查询模块*/
case 6: count();break;/*统计模块*/
【流程图】
图五 浏览模块流程图
【程序】
browse()
{ int i,n;
n=load();
printf_face();
for(i=0;i<n;i++)
{ if(i%10==0) {printf("\n\nPass any key to contiune...");
getch(); puts("\n\n");}
c.应发工资>1400元,税金=(应发工资-1400)*10%
另:课程实习报告的参考格式
1.题目编号
2.写出系统总设计的思路、功能模块划分。给出合理的测试数据及运行结果,要求能够体现程序的正确性和完备性及对错误输入的处理。总结算法或系统的优缺点,给出算法或系统进一步改进的设想。在附录中给出源代码,
3.附录
{printf("\nCannot open file\n");
return NULL;}
for(i=0;!feof(fp);i++)
fread(&g[i],sizeof(struct gz),1,fp);
fclose(fp);
return(i-1);
}
(2)添加模块
【分析】
该模块的功能是用户需要增加新的职工工资信息记录,从键盘输入并逐条写入到原来的输入文件中,注意采用追加而不是覆盖的方式。
【流程图】
图四 添加模块流程图
【程序】
add()
{ int i,n,m,k;
FILE *fp;
n=load();
printf("Hoe mang people are you want to add(0-%d):",N-n-1);
一、题目要求
工资信息管理系统
【要求】
该系统能够实现工资信息管理。系统包括录入、浏览、查询、统计等功能。其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号、姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。
二、需求分析
根据题目要求,由于工资单信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览学生的信息,应提供录入、浏览、查询、统计等操作;另外还应提供键盘式选择菜单实现功能选择。
三、 总体设计
根据上面的需求分析,可以将这个系统的设计分为以下几个模块:数据输入,数据添加,数据浏览,数据查询,数据统计。
【流程图】
图六 按姓名查找模块流程图
【程序】
search_name()
{ int i,n,k,w1=1;
struct gz s;
n=load();
do
{ k=-1;
printf("\n\nEnter name that you want to search! name");
scanf("%s",s.name);
scanf("%d",&w1);}
}while(k==-1&&w1==1);
menu();
}
(5)按工资卡号查找模块
【分析】
该模块的功能是根据输入的职工工资卡号查找对应的工资信息记录。
【流程图】
图七 按工资卡号查找模块流程图
【程序】
search_num()
{ int i,n,k,w1=1;
struct gz s;
scanf("%s",name);
printf("\nEnter the first month to count! month: [ ]\t\t");
scanf("%d",&j);
printf("\nEnter the last month to count! month: [ ]\t\t");
scanf("%d",&k);
menu();
}
3.公共函数
(1)排序函数sort()
【程序】
sort()
{
int i,j,n;
struct gz t;
n=load();
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(g[i].num>g[j].num)
{t=g[i];
g[i]=g[j];
g[j]=t;}
}
(6)统计模块
【分析】
该模块的功能是根据用户输入的职工姓名和所统计的月份来计算得出某个时间段的工资总额。
【流程图】
图八 统计模块流程图
【程序】
count()
{int i,j,k,n,sum=0;
char name[20];
n=load();
printf("\nEnter the enployer's name: [ ]\t\t");
if(k==-1)
{printf("\n\nNo exist!please");
printf("\n\nAre you again?\n\t 1).Again 2)No and back [ ]\b\b ");
scanf("%d",&w1);}
}while(k==-1&&w1==1);
menu();
图一 系统功能模块图
四、详细设计
1.主函数
主函数提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。
[流程图]
图二 主函数模块功能流程图
[程序]
main()/********************主函数**********************/
{
int n,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单应对数字的范围内*/
相关文档
最新文档