C 教师工资管理系统.docx
《C 教师工资管理系统.docx》由会员分享,可在线阅读,更多相关《C 教师工资管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
![C 教师工资管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/2/d228984c-7bc5-4f3b-aee3-e90b62fccf96/d228984c-7bc5-4f3b-aee3-e90b62fccf961.gif)
C教师工资管理系统
封面
作者:
PanHongliang
仅供个人学习
课程设计报告
学院:
天津理工大学华信软件学院
专业名称:
软件工程
课程设计科目
C语言课程设计
所在班级:
学生学号:
学生姓名:
指导教师:
完成时间:
课程设计成绩评定表
对课程设计工作过程的简短介绍和自我评价
在工程设计中,我认真地翻阅了C语言学习教材,并在各大IT网站(csdn)搜寻源代码。
然后就是不断的改正编辑程序中的错误,不断的改正。
体会到了编程的艰辛。
看着编辑的程序完美的运行,心中的喜悦是不言而喻的。
学生签名:
2012年6月11日
(以下由评定教师填写)
质量评价指标(在相应栏目给分,优秀20-25分,良好15-20分,中等10-15分,及格5-10分,不及格0-5分)
评价项目
评价质量
优秀
良好
中等
及格
不及格
工作量和态度(25分)
实验、计算可靠性
(25分)
文字和图表质量
(25分)
总体评价
(25分)
评定成绩(百分制)
目录
设计任务与目标4
方案设计与论证6
程序框图或流程图,程序清单与调用关系9
全部源程序清单11
程序运行结果测试与分析
28
结论与心得参考资料
31
教师工资管理系统
一、设计任务与目标
任务:
教师工资管理系统
每个教师的信息为:
教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。
注:
应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资-合计扣款。
A、教师信息处理
(1)输入教师信息
(2)插入(修改)教师信息:
(3)删除教师信息:
(4)浏览教师信息:
提示:
具体功能及操作参考题1。
B、教师数据处理:
(1)按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2)教师实发工资、应发工资、合计扣款计算。
提示:
计算规则如题目。
(3)教师数据管理
提示:
输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件
(4)教师数据查询:
提示:
输入教师号或其他信息,即读出所有数据信息,并显示出来。
(5)教师综合信息输出
提示:
输出教师信息到屏幕。
案例论证:
1.完成此设计的目的意义
此题目能让我综合的考虑设计一个信息处理系统,要求设计出主函数,确定调用函数,成员的函数设计。
2.目标
教师数据处理:
(1)按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2)教师实发工资、应发工资、合计扣款计算。
计算规则如题目。
(3)教师数据管理
输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件
(4)教师数据查询:
输入教师号或其他信息,即读出所有数据信息,并显示出来。
(5)教师综合信息输出
输出教师信息到屏幕
二、方案设计与论证
(1)主函数的设计
编写主函数的主要任务就是确定调用函数以及控制屏幕显示。
1定调用的函数
根据要求,该系统至少应该实现五种基本功能:
输出工作信息,删除工资信息,修改工资信息,查找工资信息,列出所有信息。
实现以上任何一种功能都必须要调用一个函数,根据标识符的定义规则,分别命名为
原型voidshow_all。
功能展出所有录入文件
参数无
返回值无
工作方式调用charname[10]。
floatsalary。
floatallowance。
floatlife。
floattel。
floatutilities。
floatrent。
floatdue。
floathealth。
floatfund。
floattotal。
floatshould。
floatactual。
原型voidtea_new
功能创建新的信息录入
参数无
返回值无
工作方式创建file
原型voidsearchmenu。
功能查找菜单
参数无
返回值无
工作方式调用voidsearch_id。
voidsearch_name。
原型voidsearch_id。
功能查找信息按编号查找
参数无
返回值整个信息
工作方式调用number
原型voidsearch_name。
功能查找信息按姓名查找
参数无
返回值整个信息
工作方式调用charname
原型voiddelete_id
功能删除数据按编号删除
参数无
返回值无
工作方式调用id
原型voidchange_id。
功能改变数据按编号改
参数无
返回值整个录入信息
工作方式调用id
(2)函数的设计
编写函数的目的就是编写一个能实现某种功能的函数供主函数调用函数设计的主要任务是确定调用的成员函数以及屏幕显示。
1确定调用的成员函数。
不同的函数调用的成员函数是不尽相同的,基本上每个函数都有一个对应的成员函。
charname[10]。
floatsalary。
floatallowance。
floatlife。
floattel。
floatutilities。
floatrent。
floatdue。
floathealth。
floatfund。
floattotal。
floatshould。
floatactual。
(3)算法实现
链表是算法的关键。
在添加新的数据时,可以表头插入也可以表尾插入,这两种插入方法决定了其他成员函数数据的处理。
本系统中采取的是表尾插入的方法。
在删除某信息时需要判断数据是在表头,表中还是表尾,如果删除的是在表中,则需要将删除的前后链表连接起来。
统大量运用了链表的5种基本操作:
建立链表、链表的插入、删除、输入和查找。
三、程序框图或流程图,程序清单与调用关系
四、全部源程序清单
#include
#include
#include
#include
/*教师工资管理系统结构体定义*/
structteacher
{
intnumber。
charname[10]。
floatsalary。
floatallowance。
floatlife。
floattel。
floatutilities。
floatrent。
floatdue。
floathealth。
floatfund。
floattotal。
floatshould。
floatactual。
}tea[500]。
intnum=0。
FILE*fp。
voidmainmenu()。
voidreadfromfile()。
voidwritetofile()。
voidshow_all()。
voidtea_new()。
voidsearchmenu()。
voidsearch_id()。
voidsearch_name()。
voiddelete_id()。
voidchange_id()。
voidmain()
{
readfromfile()。
while
(1)
{
mainmenu()。
}
}
//主菜单
voidmainmenu()
{
charchoic。
system("cls")。
printf("\t-------------------WELCOME------------------------\n")。
printf("\t****************教师工资管理系统******************\n\n")。
printf("\t---------------[1]输入教师信息--------------------\n")。
printf("\t---------------[2]修改教师信息--------------------\n")。
printf("\t---------------[3]删除教师信息--------------------\n")。
printf("\t---------------[4]查询教师信息--------------------\n")。
printf("\t---------------[5]保存并退出----------------------\n")。
printf("\t**************************************************\n")。
printf("\t请选择:
\n")。
choic=getch()。
switch(choic)
{
case'1':
tea_new()。
break。
case'2':
change_id()。
break。
case'3':
delete_id()。
break。
case'4':
searchmenu()。
break。
case'5':
writetofile()。
break。
default:
mainmenu()。
}
}
//从文件导入
voidreadfromfile()
{
if((fp=fopen("teacher.bin","rb"))==NULL)
{
printf("\n\t教师工资信息文件不存在")。
if((fp=fopen("teacher.bin","wb"))==NULL)
{
printf("\n\t建立失败")。
exit(0)。
}
else
{
printf("\n\t教师工资信息文件已建立")。
printf("\n\t按回车键进入主菜单")。
getch()。
return。
}
exit(0)。
}
fseek(fp,0,2)。
if(ftell(fp)>0)
{
rewind(fp)。
for(num=0。
!
feof(fp)&&fread(&tea[num],sizeof(structteacher),1,fp)。
num++)。
printf("\n\t教师工资信息文件导入成功")。
printf("\n\t文件中无任何记录")。
printf("\n\t按回车键进入主菜单")。
getch()。
return。
}
}
//写入文件
voidwritetofile()
{
inti。
if((fp=fopen("teacher.bin","wb"))==NULL)
{
printf("\n\t打开文件失败")。
}
for(i=0。
ii++)
{
if(fwrite(&tea[i],sizeof(structteacher),1,fp)!
=1)
{
printf("\n\t文件写入错误!
\n")。
}
}
fclose(fp)。
printf("\n\t教师工资信息文件已保存")。
printf("\n\t按任意键退出程序\n\t")。
exit(0)。
}
//添加记录
voidtea_new()
{
printf("请输入教师号:
")。
scanf("%d",&tea[num].number)。
printf("请输入教师姓名:
")。
scanf("%s",tea[num].name)。
printf("请输入教师基本工资:
")。
scanf("%f",&tea[num].salary)。
printf("请输入教师的津贴:
")。
scanf("%f",&tea[num].allowance)。
printf("请输入教师的生活补贴:
")。
scanf("%f",&tea[num].life)。
printf("请输入教师的电话费:
")。
scanf("%f",&tea[num].tel)。
printf("请输入教师的水电费:
")。
scanf("%f",&tea[num].utilities)。
printf("请输入教师的房租:
")。
scanf("%f",&tea[num].rent)。
printf("请输入教师的所得税:
")。
scanf("%f",&tea[num].due)。
printf("请输入教师的卫生费:
")。
scanf("%f",&tea[num].health)。
printf("请输入教师的公积金:
")。
scanf("%f",&tea[num].fund)。
tea[num].should=tea[num].salary+tea[num].allowance+tea[num].life。
tea[num].total=tea[num].tel+tea[num].utilities+tea[num].rent+tea[num].due+tea[num].health+tea[num].fund。
tea[num].actual=tea[num].should-tea[num].total。
num++。
printf("是否继续添加?
(Y/N)")。
if(getch()=='y')
tea_new()。
return。
}
//查询菜单
voidsearchmenu()
{
charchoic。
system("cls")。
printf("\n\t------------查询-------------------")。
printf("\n\t--------[1]显示所有----------------")。
printf("\n\t--------[2]按编号查询--------------")。
printf("\n\t--------[3]按姓名查询--------------")。
printf("\n\t--------[4]返回主菜单--------------")。
printf("\n\t请选择:
\n")。
choic=getch()。
switch(choic)
{
case'1':
show_all()。
break。
case'2':
search_id()。
break。
case'3':
search_name()。
break。
case'4':
mainmenu()。
break。
}
}
//显示所有
voidshow_all()
{
inti。
system("cls")。
if(num!
=0)
{
for(i=0。
ii++)
{
printf("\n\t编号:
%d",tea[i].number)。
printf("\n\t姓名:
%s",tea[i].name)。
printf("\n\t基本工资:
%.5f",tea[i].salary)。
printf("\n\t津贴:
%.5f",tea[i].allowance)。
printf("\n\t生活补贴:
%.5f",tea[i].life)。
printf("\n\t电话费:
%.5f",tea[i].tel)。
printf("\n\t水电费:
%.5f",tea[i].utilities)。
printf("\n\t房租:
%.5f",tea[i].rent)。
printf("\n\t所得税:
%.5f",tea[i].due)。
printf("\n\t卫生费:
%.5f",tea[i].health)。
printf("\n\t公积金:
%.5f",tea[i].fund)。
printf("\n\t应发工资:
%.5f",tea[i].should)。
printf("\n\t合计扣款:
%.5f",tea[i].total)。
printf("\n\t实发工资:
%.5f",tea[i].actual)。
if(i+1{
printf("\n\t_____________________")。
system("pause")。
}
}
printf("\n\t*************************************")。
}
else
printf("\n\t文件中无记录")。
printf("\n\t按回车键回到主菜单")。
getch()。
return。
}
//按编号查询
voidsearch_id()
{
intmark=0。
inti,a=0。
intid。
printf("\n\t请输入编号:
")。
scanf("%d",&id)。
for(i=0。
ii++)
{
if(id==tea[i].number)
{
printf("\n\t******以下是你要查找的教师工资信息******\n")。
printf("\n\t编号:
%d",tea[i].number)。
printf("\n\t姓名:
%s",tea[i].name)。
printf("\n\t基本工资:
%.5f",tea[i].salary)。
printf("\n\t津贴:
%.5f",tea[i].allowance)。
printf("\n\t生活补贴:
%.5f",tea[i].life)。
printf("\n\t电话费:
%.5f",tea[i].tel)。
printf("\n\t水电费:
%.5f",tea[i].utilities)。
printf("\n\t房租:
%.5f",tea[i].rent)。
printf("\n\t所得税:
%.5f",tea[i].due)。
printf("\n\t卫生费:
%.5f",tea[i].health)。
printf("\n\t公积金:
%.5f",tea[i].fund)。
printf("\n\t应发工资:
%.5f",tea[i].should)。
printf("\n\t合计扣款:
%.5f",tea[i].total)。
printf("\n\t实发工资:
%.5f",tea[i].actual)。
printf("\n\t*************************************")。
printf("\n\t按回车键回到主菜单")。
mark++。
getch()。
return。
}
}
if(mark==0)
{
printf("\n\t没有该编号的信息")。
printf("\n\t按回车键返回主菜单")。
getch()。
return。
}
}
//按姓名查询
voidsearch_name()
{
intmark=0。
inti,a=0。
charname[10]。
printf("请输入姓名:
")。
scanf("%s",name)。
for(i=a。
ii++)
{
if(strcmp(tea[i].name,name)==0)
{
printf("\n\t******以下是你要查找的教师工资信息******\n")。
printf("\n\t编号:
%d",tea[i].number)。
printf("\n\t姓名:
%s",tea[i].name)。
printf("\n\t基本工资:
%.5f",tea[i].salary)。
printf("\n\t津贴:
%.5f",tea[i].allowance)。
printf("\n\t生活补贴:
%.5f",tea[i].life)。
printf("\n\t电话费:
%.5f",tea[i].tel)。
printf("\n\t水电费:
%.5f",tea[i].utilities)。
printf("\n\t房租:
%.5f",tea[i].rent)。
printf("\n\t所得税:
%.5f",tea[i].due)。
printf("\n\t卫生费:
%.5f",tea[i].health)。
printf("\n\t公积金:
%.5f",tea[i].fund)。
printf("\n\t应发工资:
%.5f",tea[i].should)。
printf("\n\t合计扣款:
%.5f",tea[i].total)。
printf("\n\t实发工资:
%.5f",tea[i].actual)。
printf("\n\t*************************************")。
mark++。
if((i+1){
printf("\t\n是否继续查找相同名字的教师信息:
(y/n)")。
if(getch()=='y')
{
a=i。
continue。
}
else
return。
}
else
{
printf("\n\t按回车键返回主菜单")。
getch()。
return。
}
}
}
if(mark!
=0)
{
printf("\n\t没有相同姓名的教师信息记录")。
printf("\n\t按回车键回到主菜单")。
getch()。
return。
}
else
{
printf("\n\t没有相同姓名的教师信息记录")。
printf("\n\t按回车键回到主菜单")。
getch()。
return。
}
}
//删除菜单
voiddelete_id()
{
inti,j。
intdeletemark=0。
intid。
printf("\n\t情输入要删除的编号:
")。
scanf("%d",&id)。
if(num==0)
{
printf("\n\t对不起,文件中无任何教师工资信息记录")。
printf("\n\t按回车键回到主菜单")。
getch()。
return。