最新教师工资管理系统C实现资料.docx
《最新教师工资管理系统C实现资料.docx》由会员分享,可在线阅读,更多相关《最新教师工资管理系统C实现资料.docx(23页珍藏版)》请在冰豆网上搜索。
![最新教师工资管理系统C实现资料.docx](https://file1.bdocx.com/fileroot1/2022-11/25/f938f985-9084-4482-aa73-e86c135d51a7/f938f985-9084-4482-aa73-e86c135d51a71.gif)
最新教师工资管理系统C实现资料
教师工资管理系统
一.选题背景
二.需求分析
一、设计选题与目标
1.选题要求:
教师工资管理系统
每个教师的信息为:
教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。
注:
应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资-合计扣款。
A、教师信息处理
(1)输入教师信息
(2)插入(修改)教师信息:
(3)删除教师信息:
(4)浏览教师信息:
提示:
具体功能及操作参考题1。
B、教师数据处理:
(1)按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2)教师实发工资、应发工资、合计扣款计算。
提示:
计算规则如题目。
(3)教师数据管理
提示:
输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件
(4)教师数据查询:
提示:
输入教师号或其他信息,即读出所有数据信息,并显示出来。
(5)教师综合信息输出
提示:
输出教师信息到屏幕。
2.目标
教师数据处理:
(1)按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2)教师实发工资、应发工资、合计扣款计算。
计算规则如题目。
(3)教师数据管理
输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件
(4)教师数据查询:
输入教师号或其他信息,即读出所有数据信息,并显示出来。
(5)教师综合信息输出
输出教师信息到屏幕
三.总体设计
利用六个模块分别实现教师信息的输入,修改,删除,查询,保存以及信息文件的读入功能。
并使用不同的函数实现不同的功能。
使用链表存储及处理数据。
程序流程图如下:
四.详细设计
1.功能模块
共分为六个模块:
(1)输入教师信息模块
在主菜单中运用结构体teacher,输入教师信息,首先建立链表,将用户信息储存到链表中,输入完成后提示用户是否继续输入,如果用户输入“Y”,则再次调用,实现继续输入教师信息的操作。
如果用户输入”NO“,则返回主菜单界面。
(2)修改教师信息模块
在主函数中调用voidchange_id(),修改记录操作需要对数组中目标元素的数据域中的值进行操作。
首先请用户输入要修改的教师编号,然后若找到该记录就提示用户输入各个信息。
(3)删除教师信息模块
在主函数中调用voiddelete_id(),以删除教师信息,首先按学号查询教师信息,如果没有找到教师信息,给出提示。
如果找到教师信息,将教师信息显示出来,提示用户删除。
(4)查询教师信息
查询分三种,调用voidshow_all()显示所有教师信息;调用voidsearch_id()按编号查询教师信息;调用voidsearch_name()按姓名查询教师信息。
(5)读入教师信息文件模块
调用voidreadfromfile()函数从文件导入教师信息
(6)保存并退出模块
调用voidwritetofile()写入文件。
2.函数的设计与调用
(1)主函数的设计
编写主函数的主要任务就是确定调用函数以及控制屏幕显示。
(2)其他函数
1)原型voidshow_all;
功能展出所有录入文件
参数无
返回值无
工作方式调用charname[10];floatsalary;floatallowance;floatlife;floattel;floatutilities;floatrent;floatdue;floathealth;floatfund;floattotal;floatshould;floatactual;
2)原型voidtea_new
功能创建新的信息录入
参数无
返回值无
工作方式创建file
3)原型voidsearchmenu;
功能查找菜单
参数无
返回值无
工作方式调用voidsearch_id;voidsearch_name;
4)原型voidsearch_id;
功能查找信息按编号查找
参数无
返回值整个信息
工作方式调用number
5)原型voidsearch_name;
功能查找信息按姓名查找
参数无
返回值整个信息
工作方式调用charname
6)原型voiddelete_id
功能删除数据按编号删除
参数无
返回值无
工作方式调用id
7)原型voidchange_id;
功能改变数据按编号改
参数无
返回值整个录入信息
工作方式调用id
3.数据结构的设计
定义结构体teacher,用于存放教师的信息。
structteacher
{
intnumber;教师编号
charname[10];教师姓名
floatsalary;教师基本工资
floatallowance;教师津贴
floatlife;教师生活补贴
floattel;教师电话费
floatutilities;教师水电费
floatrent;教师房租
floatdue;教师所得税
floathealth;教室卫生费
floatfund;教师公积金
floattotal;教师合计扣款
floatshould;教师应发工资
floatactual;教师实发工资
}tea[500];
4.算法实现
链表是算法的关键。
在添加新的数据时,可以表头插入也可以表尾插入,这两种插入方法决定了其他成员函数数据的处理。
本系统中采取的是表尾插入的方法。
在删除某信息时需要判断数据是在表头,表中还是表尾,如果删除的是在表中,则需要将删除的前后链表连接起来。
统大量运用了链表的5种基本操作:
建立链表、链表的插入、删除、输入和查找。
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----------------欢迎使用\(^o^)/~-------------------\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教师工资信息文件已建立(~o ̄3 ̄)~");
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教师工资信息文件导入成功(* ̄3 ̄)╭");
printf("\n\t文件中无任何记录(=@__@=)");
printf("\n\t按回车键进入主菜单");
getch();
return;
}
}
//写入文件
voidwritetofile()
{
inti;
if((fp=fopen("teacher.bin","wb"))==NULL)
{
printf("\n\t打开文件失败(*/ω╲*)");
}
for(i=0;i{
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;i{
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;i{
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;i{
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;
}
for(i=0;i{
if(id==tea[i].num