教师工资管理系统C实现(共19页).docx
精选优质文档-倾情为你奉上教师工资管理系统一选题背景二需求分析 一、设计选题与目标1.选题要求:教师工资管理系统每个教师的信息为:教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。注:应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资合计扣款。A、教师信息处理(1)输入教师信息(2) 插入(修改)教师信息:(3) 删除教师信息:(4) 浏览教师信息:提示:具体功能及操作参考题1。B、教师数据处理:(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。(2) 教师实发工资、应发工资、合计扣款计算。提示:计算规则如题目。(3) 教师数据管理提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件(4) 教师数据查询:提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。(5) 教师综合信息输出提示:输出教师信息到屏幕。2.目标 教师数据处理:(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。(2) 教师实发工资、应发工资、合计扣款计算。 计算规则如题目。(3) 教师数据管理 输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件(4) 教师数据查询:输入教师号或其他信息,即读出所有数据信息,并显示出来。(5) 教师综合信息输出输出教师信息到屏幕三总体设计利用六个模块分别实现教师信息的输入,修改,删除,查询,保存以及信息文件的读入功能。并使用不同的函数实现不同的功能。使用链表存储及处理数据。程序流程图如下:输出界面选择操作选择1输入数据Break选择2修改数据break选择3删除数据Break选择4选择5查询数据保存退出数据BreakBreak输出:无效选项Break结束四详细设计1.功能模块共分为六个模块:(1) 输入教师信息模块 在主菜单中运用结构体teacher,输入教师信息,首先建立链表,将用户信息储存到链表中,输入完成后提示用户是否继续输入,如果用户输入“Y”,则再次调用,实现继续输入教师信息的操作。如果用户输入”NO“,则返回主菜单界面。(2) 修改教师信息模块 在主函数中调用void change_id(),修改记录操作需要对数组中目标元素的数据域中的值进行操作。首先请用户输入要修改的教师编号,然后若找到该记录就提示用户输入各个信息。(3) 删除教师信息模块 在主函数中调用void delete_id(),以删除教师信息,首先按学号查询教师信息,如果没有找到教师信息,给出提示。如果找到教师信息,将教师信息显示出来,提示用户删除。(4) 查询教师信息 查询分三种,调用void show_all()显示所有教师信息;调用void search_id()按编号查询教师信息;调用void search_name()按姓名查询教师信息。(5) 读入教师信息文件模块 调用void readfromfile()函数从文件导入教师信息(6) 保存并退出模块调用void writetofile()写入文件。2函数的设计与调用(1)主函数的设计编写主函数的主要任务就是确定调用函数以及控制屏幕显示。(2)其他函数1)原型void show_all;功能 展出所有录入文件参数 无 返回值 无 工作方式 调用 char name10; float salary;float allowance; float life; float tel;float utilities;float rent;float due; float health; float fund; float total; float should; float actual; 2)原型void tea_new功能 创建新的信息录入参数 无返回值 无工作方式 创建file 3)原型void searchmenu;功能 查找菜单参数 无返回值 无工作方式 调用void search_id;void search_name;4)原型void search_id;功能 查找信息 按编号查找参数 无返回值 整个信息工作方式 调用 number5)原型void search_name;功能 查找信息 按姓名查找参数 无返回值 整个信息工作方式 调用char name6)原型void delete_id功能 删除数据 按编号删除参数 无返回值 无工作方式 调用 id 7)原型 void change_id; 功能 改变数据 按编号改参数 无返回值 整个录入信息工作方式 调用 idshow_allreadfromfilesearchmenuMainmenusearch_idsearch_namewritetofiletea_newdelete_id(change_id3.数据结构的设计定义结构体teacher,用于存放教师的信息。struct teacherint number; 教师编号char name10; 教师姓名 float salary; 教师基本工资 float allowance; 教师津贴 float life; 教师生活补贴 float tel; 教师电话费 float utilities; 教师水电费 float rent; 教师房租 float due; 教师所得税 float health; 教室卫生费 float fund; 教师公积金float total; 教师合计扣款 float should; 教师应发工资 float actual; 教师实发工资 tea500;4.算法实现链表是算法的关键。在添加新的数据时,可以表头插入也可以表尾插入,这两种插入方法决定了其他成员函数数据的处理。本系统中采取的是表尾插入的方法。在删除某信息时需要判断数据是在表头,表中还是表尾,如果删除的是在表中,则需要将删除的前后链表连接起来。统大量运用了链表的5种基本操作:建立链表、链表的插入、删除、输入和查找。5.程序清单#include<stdio.h>#include<string.h>#include <stdlib.h>#include<conio.h>/*教师工资管理系统结构体定义*/struct teacherint number; char name10; float salary; float allowance; float life; float tel; float utilities; float rent; float due; float health; float fund; float total; float should; float actual; tea500;int num=0; FILE *fp; void mainmenu(); void readfromfile(); void writetofile(); void show_all(); void tea_new (); void searchmenu(); void search_id(); void search_name(); void delete_id(); void change_id(); void main()readfromfile();while(1) mainmenu();/主菜单void mainmenu()char choic; system("cls");printf("t-欢迎使用(o)/-n");printf("t*教师工资管理系统*nn");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(); /从文件导入void readfromfile()if(fp=fopen("teacher.bin","rb")=NULL)printf("nt教师工资信息文件不存在哟(*/*)");if(fp=fopen("teacher.bin","wb")=NULL)printf("nt建立失败");exit(0);elseprintf("nt教师工资信息文件已建立(o3)");printf("nt按回车键进入主菜单");getch();return;exit(0);fseek(fp,0,2); if(ftell(fp)>0) rewind(fp); for(num=0;!feof(fp) && fread(&teanum,sizeof(struct teacher),1,fp);num+); printf("nt教师工资信息文件导入成功(*3)");printf("nt文件中无任何记录(=_=)");printf("nt按回车键进入主菜单");getch(); return; /写入文件void writetofile()int i; if(fp=fopen("teacher.bin","wb")=NULL)printf("nt打开文件失败(*/*)");for(i=0;i<num;i+)if(fwrite(&teai,sizeof(struct teacher),1,fp)!=1)printf("nt文件写入错误!()n");fclose(fp);printf("nt教师工资信息文件已保存");printf("nt按任意键退出程序(*)nt"); exit(0);/添加记录void tea_new()printf("请输入教师号:");scanf("%d",&teanum.number);printf("请输入教师姓名:");scanf("%s",teanum.name);printf("请输入教师基本工资:");scanf("%f",&teanum.salary);printf("请输入教师的津贴:");scanf("%f",&teanum.allowance);printf("请输入教师的生活补贴:");scanf("%f",&teanum.life);printf("请输入教师的电话费:");scanf("%f",&teanum.tel);printf("请输入教师的水电费:");scanf("%f",&teanum.utilities);printf("请输入教师的房租:");scanf("%f",&teanum.rent);printf("请输入教师的所得税:");scanf("%f",&teanum.due);printf("请输入教师的卫生费:");scanf("%f",&teanum.health);printf("请输入教师的公积金:");scanf("%f",&teanum.fund);teanum.should =teanum.salary +teanum.allowance +teanum.life;teanum.total=teanum.tel+teanum.utilities +teanum.rent+teanum.due+teanum.health+teanum.fund;teanum.actual=teanum.should-teanum.total; num+;printf("是否继续添加?(Y/N)"); if(getch()='y') tea_new (); return;/查询菜单void searchmenu() char choic; system("cls"); printf("nt-查询-"); printf("nt-1显示所有-"); printf("nt-2按编号查询-"); printf("nt-3按姓名查询-"); printf("nt-4返回主菜单-"); printf("nt请选择:n"); choic=getch(); switch(choic) case'1':show_all();break; case'2':search_id();break; case'3':search_name();break; case'4':mainmenu();break; /显示所有void show_all() int i; system("cls"); if(num!=0) for(i=0;i<num;i+) printf("nt编号: %d",teai.number); printf("nt姓名: %s",teai.name); printf("nt基本工资: %.5f",teai.salary); printf("nt津贴: %.5f",teai.allowance); printf("nt生活补贴: %.5f",teai.life); printf("nt电话费: %.5f",teai.tel); printf("nt水电费: %.5f",teai.utilities); printf("nt房租: %.5f",teai.rent); printf("nt所得税: %.5f",teai.due); printf("nt卫生费: %.5f",teai.health); printf("nt公积金: %.5f",teai.fund); printf("nt应发工资: %.5f",teai.should); printf("nt合计扣款: %.5f",teai.total); printf("nt实发工资: %.5f",teai.actual); if(i+1<num) printf("nt_"); system("pause"); printf("nt*"); else printf("nt文件中无记录"); printf("nt按回车键回到主菜单"); getch(); return;/按编号查询void search_id() int mark=0; int i,a=0; int id; printf("nt请输入编号:"); scanf("%d",&id); for(i=0;i<num;i+) if(id=teai.number) printf("nt*以下是你要查找的教师工资信息*n"); printf("nt编号: %d",teai.number); printf("nt姓名: %s",teai.name); printf("nt基本工资: %.5f",teai.salary); printf("nt津贴: %.5f",teai.allowance); printf("nt生活补贴: %.5f",teai.life); printf("nt电话费: %.5f",teai.tel); printf("nt水电费: %.5f",teai.utilities); printf("nt房租: %.5f",teai.rent); printf("nt所得税: %.5f",teai.due); printf("nt卫生费: %.5f",teai.health); printf("nt公积金: %.5f",teai.fund); printf("nt应发工资: %.5f",teai.should); printf("nt合计扣款: %.5f",teai.total); printf("nt实发工资: %.5f",teai.actual); printf("nt*"); printf("nt按回车键回到主菜单"); mark+; getch(); return; if(mark=0) printf("nt没有该编号的信息"); printf("nt按回车键返回主菜单"); getch(); return;/按姓名查询void search_name() int mark=0; int i,a=0; char name10; printf("请输入姓名:"); scanf("%s",name); for(i=a;i<num;i+) if(strcmp(teai.name,name)=0) printf("nt*以下是你要查找的教师工资信息*n"); printf("nt编号: %d",teai.number); printf("nt姓名: %s",teai.name); printf("nt基本工资: %.5f",teai.salary); printf("nt津贴: %.5f",teai.allowance); printf("nt生活补贴: %.5f",teai.life); printf("nt电话费: %.5f",teai.tel); printf("nt水电费: %.5f",teai.utilities); printf("nt房租: %.5f",teai.rent); printf("nt所得税: %.5f",teai.due); printf("nt卫生费: %.5f",teai.health); printf("nt公积金: %.5f",teai.fund); printf("nt应发工资: %.5f",teai.should); printf("nt合计扣款: %.5f",teai.total); printf("nt实发工资: %.5f",teai.actual); printf("nt*"); mark+; if(i+1)<num) printf("tn是否继续查找相同名字的教师信息:(y/n)"); if(getch()='y') a=i;continue; else return; else printf("nt按回车键返回主菜单"); getch(); return; if(mark!=0) printf("nt没有相同姓名的教师信息记录"); printf("nt按回车键回到主菜单"); getch(); return; else printf("nt没有相同姓名的教师信息记录"); printf("nt按回车键回到主菜单"); getch(); return; /删除菜单void delete_id() int i,j; int deletemark=0; int id; printf("nt情输入要删除的编号:"); scanf("%d",&id); if(num=0) printf("nt对不起,文件中无任何教师工资信息记录"); printf("nt按回车键回到主菜单"); getch(); return; for(i=0;i<num;i+) if(id=teai.number) printf("nt*以下是你要删除的教师工资信息*n"); printf("nt编号: %d",teai.number); printf("nt姓名: %s",teai.name); printf("nt基本工资: %.5f",teai.salary); printf("nt津贴: %.5f",teai.allowance); printf("nt生活补贴: %.5f",teai.life); printf("nt电话费: %.5f",teai.tel); printf("nt水电费: %.5f",teai.utilities); printf("nt房租: %.5f",teai.rent); printf("nt所得税: %.5f",teai.due); printf("nt卫生费: %.5f",teai.health); printf("nt公积金: %.5f",teai.fund); printf("nt应发工资: %.5f",teai.should); printf("nt合计扣款: %.5f",teai.total); printf("nt实发工资: %.5f",teai.actual); printf("nt是否删除?(y/n)"); if(getch()='y') for(j=i;j<num-1;j+) teaj=teaj+1; num-; deletemark+; printf("nt删除成功"); printf("nt是否继续删除?(y/n)"); if(getch()='y') delete_id(); return; else return; continue; if(deletemark=0) printf("nt没有该教师的记录"); printf("nt是否继续删除?(y/n)"); if(getch()='y') delete_id(); /修改菜单void change_id() int a=0,findmark=0; int i; int id; printf("nt请输入要修改教师的编号:"); scanf("%d",&id); for(i=a;i<num;i+) if(id=teai.number) printf("nt*以下是你要修改的教师工资信息*