C语言课程设计报告工资信息管理系统.docx
《C语言课程设计报告工资信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告工资信息管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告工资信息管理系统
C
语
言
程
序
设
计
学校:
中国地址大学
学院:
工程学院
班级序号:
05507101
学号:
20071000226
姓名:
王雷
指导老师:
刘文中
C语言程序设计
编程实践是学习C语言程序设计的一重要环节,为提高学生程序设计能力,通过课堂和上机实践练习使学生的程序设计能力上一台阶。
通过前四单元温顾而知新、庖丁解牛、举一反三、熟能生巧等过程的练习设计下面一个完整的程序。
1、题目要求
设计“工资信息管理系统”
要求:
该系统能够实现工资信息管理。
系统包括录入,浏览,查询,统计等功能。
录入功能要求:
能够添加新的工资信息到文件;
浏览功能要求:
能够按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;
查询功能要求:
能够按照工资卡号,姓名查询;
统计功能要求:
能够按照月份累计统计某职工在某时间段发工资总金额。
职工数据如下:
姓名银行卡号月份应发工资水费电费税金实发工资
wanglei0550710165000.0025.0035.00360.004580.00
wanglei0550710175100.0020.0040.00370.004670.00
2、分析:
根据题目要求,应当把职工工资信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;在程序中需实现职工工资浏览,查询,统计等功能的操作,所以需要建立相应的模块来实现;另外还需提供键盘式选择菜单实现功能,在运行时达到所要目的。
3、总体设计:
根据题目要求,可以将系统分为六个模块:
1)职工工资信息浏览模块;
2)添加工工资信息模块;
3)统计职工工资总合模块;
4)按名字查询职工工资信息模块;
5)按卡号查询职工工资信息模块;
6)功能选择
4、详细设计:
#include
#include
#include
#include//头函数名
/*********职员工资信息结构体*********/
/***包括职工的姓名、银行卡好、工作月份、应发工资、实发工资、水费、电费、税***/
structstaff//职员工资信息结构体
{
charName[10];
charCardNumber[10];
intMonth;
floatSPWages;
floatAPWages;
floatWater;
floatElectrical;
floatTax;
};
FILE*fp;//定义文件指针===全局变量
structstafftemp;
voidprintf_face()//输出函数
{
printf("\n姓名银行卡号月份应发工资水费电费税实发工资\n");
printf("%s%s%d%.2f%.2f%.2f%.2f%.2f\n",temp.Name,temp.CardNumber,temp.Month,
temp.SPWages,temp.Water,temp.Electrical,temp.Tax,temp.APWages);
}
一、
/**********浏览职工工资信息==模块*********/
voidPrintInformation()//浏览职工工资信息
{
structstafftemp;
if((fp=fopen("wages","rb"))==NULL)
{
printf("cannotopenthefile!
");
exit(0);
}
while(fread(&temp,sizeof(structstaff),1,fp)==1)printf_face();
fclose(fp);
}
二、
/**********添加职工工资信息==模块*********/
voidIncrease()//添加职工工资信息
{
if((fp=fopen("wages","ab+"))==NULL)
{
printf("cannotopenthefile!
");
exit(0);
}
printf("\n请输入要==添加的工资信息:
\n");
printf("\n姓名银行卡号月份应发工资水费电费\n");
scanf("%s%s%d%f%f%f",temp.Name,temp.CardNumber,
&temp.Month,&temp.SPWages,&temp.Water,
&temp.Electrical);
if(temp.SPWages<=800)temp.Tax=0;
if((temp.SPWages>800.0)&&(temp.SPWages<1400.0))
temp.Tax=(temp.SPWages-800)*0.05;
if(temp.SPWages>1400){temp.Tax=(temp.SPWages-1400)*0.1;}
temp.APWages=temp.SPWages-temp.Water-temp.Electrical-temp.Tax;
fwrite(&temp,sizeof(structstaff),1,fp);
fclose(fp);
}/***计算税金并添加到文件相应结构体中***/
三、
/*********统计某职工工资总合==模块*********/
voidStatistics()//统计某职工工资总合
{
structstafftemp;
chartempname[10];
floatsum=0;
intmonthstart=0,monthover=0;
printf("\n输入姓名起始月份终止月份\n:
");
scanf("%s%d%d",tempname,&monthstart,&monthover);
if((fp=fopen("wages","rb"))==NULL)
{
printf("cannotopenthefile!
")
exit(0);
}
while(fread(&temp,sizeof(structstaff),1,fp)==1)
{
if(strcmp(temp.Name,tempname)==0)/******判断是否是该职工******/
{
if(temp.Month>=monthstart&&temp.Month<=monthover)
{
sum+=temp.APWages;
}
}
}
printf("%d月到%d月的工资总和%f",monthstart,monthover,sum);
fclose(fp);
}
四、
/*********按名字查询某职工工资信息==模块********/
voidNameSearch()//按名字查询某职工工资信息
{
chartempname[10];
structstafftemp;
printf("\n输入姓名:
");
scanf("%s",tempname);
if((fp=fopen("wages","rb"))==NULL)
{
printf("cannotopenthefile!
");
exit(0);
}
while(fread(&temp,sizeof(structstaff),1,fp)==1)/***读文件中资料**/
{
if(strcmp(temp.Name,tempname)==0)/**判断是否是该姓名**/
{
printf_face();
}
}
fclose(fp);
}
五、
/********按卡号查询某职工工资信息==模块*******/
voidCardNumberSearch()//按卡号查询某职工工资信息
{
chartempCardNumber[10];
structstafftemp;
printf("\n输入卡号:
");
scanf("%s",tempCardNumber);
if((fp=fopen("wages","rb"))==NULL)
{
printf("cannotopenthefile!
");
exit(0);
}
while(fread(&temp,sizeof(structstaff),1,fp)==1)/***读文件中资料**/
{
if(strcmp(temp.CardNumber,tempCardNumber)==0)/**判断是否是该卡号**/
{
printf_face();
}
}
fclose(fp);
}
六、
/**********职工工资信息查询==模块********/
intSearch()
{
intn;
while
(1)
{
printf("\n1.按照卡号查询:
\n");
printf("\n2.按照姓名查询:
\n");
printf("\n0.返回上级目录:
\n");
scanf("%d",&n);
switch(n)
{
case1:
CardNumberSearch();break;
case2:
NameSearch();break;
case0:
return0;break;
}
}
}
七、
/***************功能选择==模块***********/
voidShowMenu()
{
intn;
while
(1)
{
printf("1.添加工资信息:
\n");
printf("2.浏览工资信息:
\n");
printf("3.统计工资信息:
\n");
printf("4.查询工资信息:
\n");
printf("0.退出系统:
");
scanf("%d",&n);
switch(n)
{
case1:
Increase();break;
case2:
PrintInformation();break;
case3:
Statistics();break;
case4:
Search();break;
case0:
exit(0);break;
}
}
}
/***************主函数*************/
voidmain()
{
ShowMenu();
}
运行结果可以达到要求的目的。
运行结果:
1.添加工资信息:
2.浏览工资信息:
3.统计工资信息:
4.查询工资信息:
0.退出系统:
1
请输入要==添加的工资信息:
姓名银行卡号月份应发工资水费电费
wanglei05507101650002535
1.添加工资信息:
2.浏览工资信息:
3.统计工资信息:
4.查询工资信息:
0.退出系统:
1
请输入要==添加的工资信息:
姓名银行卡号月份应发工资水费电费
wanglei05507101751002040
1.添加工资信息:
2.浏览工资信息:
3.统计工资信息:
4.查询工资信息:
0.退出系统:
2
姓名银行卡号月份应发工资水费电费税实发工资
wanglei0550710165000.0025.0035.00360.004580.00
姓名银行卡号月份应发工资水费电费税实发工资
wanglei0550710175100.0020.0040.00370.004670.00
1.添加工资信息:
2.浏览工资信息:
3.统计工资信息:
4.查询工资信息:
0.退出系统:
3
输入姓名起始月份终止月份
:
wanglei67
6月到7月的工资总和9250.0000001.添加工资信息:
2.浏览工资信息:
3.统计工资信息:
4.查询工资信息:
0.退出系统:
4
1.按照卡号查询:
2.按照姓名查询:
0.返回上级目录:
1
输入卡号:
05507101
姓名银行卡号月份应发工资水费电费税实发工资
wanglei0550710165000.0025.0035.00360.004580.00
姓名银行卡号月份应发工资水费电费税实发工资
wanglei0550710175100.0020.0040.00370.004670.00
1.按照卡号查询:
2.按照姓名查询:
0.返回上级目录:
2
输入姓名:
wanglei
姓名银行卡号月份应发工资水费电费税实发工资
wanglei0550710165000.0025.0035.00360.004580.00
姓名银行卡号月份应发工资水费电费税实发工资
wanglei0550710175100.0020.0040.00370.004670.00
1.按照卡号查询:
2.按照姓名查询:
0.返回上级目录:
0
1.添加工资信息:
2.浏览工资信息:
3.统计工资信息:
4.查询工资信息:
0.退出系统:
0
Pressanykeytocontinue
刚开始运行时出现的错误:
由于浏览和查询模块中多定义了局部变量,且与全局变量同名将全局变量屏蔽,以至于这些模块不能达到预期效果,总是只输出最近一次的数据,经过修改后将其删除,达到了所要的效果。
使程序得以执行。
到目前程序中还有一小毛病,就是计算税金是实数双精度与单精度转换存在不足。
做此C程序设计的体会:
通过学习和练习C程序的设计基础,了解了一些关于C的知识。
在设计过程中,好多处困惑、疑问,有是会很烦,甚至不想再做,但必须做好,所以耐着性子做好了。
此时感觉有一点点成就感,也学到了一些知识。