C语言教师工资管理课设 求助

课程名称:程序设计基础(课程设计)
实验学时:一周
适用专业:计算机类
信息管理与信息系统
开设学院:信息学院

一、总体介绍

  1. 项目名称:高校教师工资管理系统

  2. 项目简介:
    完成高等院校教师工资管理软件开发。教师的基本信息包括:工号、姓名、学院、职称,职称分为:教授、副教授、讲师、助教。教师的工资信息包括:工号、月份、基本工资、业绩津贴、扣除费用、应发工资、实发工资,不同职称教师的基本工资、业绩津贴、扣除费用不同。
    二、具体要求

  3. 系统功能要求
    以菜单的方式完成以下功能。
    高校教师工资管理系统
    1 录入 并保存 录入教师的基本信息
    录入教师的工资信息
    2 修改数据并保存
    (难点) 根据工号修改某位教师的基本信息和工资信息
    根据姓名修改某位教师的基本信息和工资信息
    删除某一工号的教师的所有信息
    3 查询显示 显示所有教师的基本信息(以工号为序)
    根据月份显示所有教师当月工资信息(以工号为序)
    根据工号查询某位教师某一月份的基本信息和工资信息
    根据姓名查询某位教师某一月份的基本信息和工资信息
    4 统计分析 根据月份,统计不同学院教师的平均应发工资和平均实发工资(以实发工资为序显示)
    根据月份,统计不同职称教师的平均应发工资和平均实发工资(以应发工资为序显示)
    5 退出 提示退出

  4. 各项功能要求
    (1)录入数据并保存
    进入二级菜单:
    (a)录入教师基本信息:提示用户输入基本信息,并保存。注意要有查重,同一工号的教师不能出现两次。(查重是难点)
    (b)录入教师工资信息:显示所有教师基本信息。提示用户输入已有教师工号,然后提示输入月份等工资信息,并计算应发工资和实发工资后保存。注意要有查重,同一工号的教师不能出现两次。(判断是否为已有教师信息,查重是难点。)
    (2)修改数据并保存
    进入二级菜单:
    (a)提示输入工号:显示该工号教师的所有信息。提示输入要修改的月份和信息,输入新数据后,保存数据,并替换掉旧数据。
    (b)提示输入姓名:显示所有该同名教师的所有信息。提示输入要修改的教师工号和月份,提示输入要修改的信息,输入新数据后,保存数据,并替换掉旧数据。
    (c)提示输入要删除的工号,两次确认后删除该工号教师的基本信息和工资数据,并更新数据文件。
    (3)查询显示
    进入二级菜单:
    (a)显示所有教师的基本信息,按照工号从小到大列表显示。
    (b)提示输入月份,显示当月所有教师的工资信息,按照工号从小到大列表显示。
    (c)提示输入工号和月份,显示该工号教师的基本信息和当月工资信息。
    (d)提示输入姓名和月份,显示所有同名教师的基本信息和当月工资信息。
    (4)统计分析
    进入二级菜单:
    (a)提示输入月份,根据月份,统计不同学院教师的平均应发工资和平均实发工资(以实发工资为序显示)。
    (b)提示输入月份,根据月份,统计不同职称教师的平均应发工资和平均实发工资(以应发工资为序显示)。
    (5)退出
    提示用户确实要退出?y/n
    用户输入y后退出。

  5. 程序设计要求
    (1)要合理使用枚举(选)、结构体、结构体数组、结构体指针访问数组。
    (2)逻辑独立的功能定义在函数中。
    (3)要有合理提示,例如修改、删除需提示确认。
    (4)考虑程序鲁棒性,对不合法数据要有错误处理机制。
    (5)所有数据保存在文件中。
    二、课程设计报告
    课程设计报告请参照“实习报告书模板.docx”填写。
    三、提交时间与地址

  6. 截止时间:第十四周周五晚20:00。

  7. 完成后,将源文件、设计报告压缩后,重命名为学号_姓名_课程设计.zip(或.rar)。

  8. 提交地址:课程作业/程序设计基础/课程设计中的各班文件夹。
    四、时间安排
    第1天 分析与设计
    根据课程设计的要求,理解项目任务,明确相关算法,搜集可用资源,熟悉开发环境。
    设计包括逻辑设计和详细设计,在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试。
    (1)数据结构设计:将工程问题涉及的数据抽象出来,选取合适的数据类型与数据结构。
    (2)模块设计:自顶向下,将工程问题对应的功能抽象成模块,定义各模块涉及的函数,定义函数的功能、参数、返回值及类型等。
    (3)算法设计:复杂问题需选取合适的算法,必要时查阅文献,分析并给出合理的算法解决方案。
    第2-3天 代码编写
    熟练使用开发环境,把详细设计的结果进一步求精为程序设计语言程序,同时加入一些注解,使程序的逻辑概念清楚。
    第4天 代码调试与测试
    (1)设计测试用例,用以验证程序逻辑结构正确性与程序鲁棒性。
    (2)熟练掌握调试工具的各种功能,确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。
    第5天 结果分析
    程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。撰写课程设计报告,提交源程序和报告。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct Month
{	
	int months[13];
	float basic_salary;//基本工资 
	float allowance;//业绩津贴 
	float deducting;//扣除费用 
	float total;//应发工资 
	float actual;//实发工资 
};
struct Teacher//声明存储教师的基本信息 
{
	int gh;//工号
	struct Month month;//月份 
	char name[20];//姓名 
	char address[20];//学院 
	char title[20];//职称
}; 

	int num=0;
	FILE *fp;
	void main_menu(struct Teacher tea[],int io);//第一栏目——录入保存 
	void read_from_file(struct Teacher tea[],int io);
	void input_t(struct Teacher tea[],int io);
	void xg_menu(struct Teacher tea[],int io);//第二栏目——修改 
	void xgbygh(struct Teacher tea[],int io);
	void xgbyname(struct Teacher tea[],int io);
	void delete_all(struct Teacher tea[],int io);
	void search_menu(struct Teacher tea[],int io);//第三栏目——查询显示 
	void show_all(struct Teacher tea[],int io);
	void show_allbm(struct Teacher tea[],int io);
	void search_gh(struct Teacher tea[],int io);
	void search_name(struct Teacher tea[],int io);
	void cout_menu(struct Teacher tea[],int io);//第四栏目——统计分析 
	void coutbyaddress(struct Teacher tea[],int io);
	void coutbytitle(struct Teacher tea[],int io);
	void saveae_file(struct Teacher tea[],int io);//第五栏目——保存、退出 


int main()
{
	struct Teacher tea[130];
	struct Teacher *t;
	t=tea;
	read_from_file(tea,130);
	while(1)
	{
		main_menu(tea,130);
	}
	return 0;
} 

void main_menu(struct Teacher tea[],int io)//目录 
{
	char choice;
	system("cls");
	printf("\n\t***************欢迎来到教师工资管理系统***************\t\n");
	printf("\n\t请您输入菜单之前的数字跳转进入子菜单\t\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请选择:");
	choice=getch();
	switch(choice)
	{
		case'1':input_t(tea,130);break;
        case'2':xg_menu(tea,130);break;
		case'3':search_menu(tea,130);;break;
		case'4':cout_menu(tea,130);break;
        case'5':saveae_file(tea,130);break;
        default:main_menu(tea,130);
	} 
}

void read_from_file(struct Teacher tea[],int io)//建立数据文件 
{
	
	if((fp=fopen("F:\\teacher.txt","r"))==NULL)
	{
		printf("\n教师工资信息文件不存在!\n");	
		exit(0);
		if((fp=fopen("F:\\teacher.txt","w"))==NULL)
		{
			printf("\t建立失败\n");
			exit(0);
		}
		else
		{
			printf("\t建立成功!\n");
			printf("\t按任意键返回主菜单");
			getch();
			return;
		}
		
	}
	fseek(fp,0,0);
	if(ftell(fp)>0)      
	{	
		rewind(fp);
		for(num=0;!feof(fp)&&fread(&tea[num],sizeof(struct Teacher),1,fp);num++);
		{
		printf("\n\t文件导入成功\n");
    	printf("\t按任意键返回主菜单\n");
		}
		getch();
		return;
	}
	printf("\t------欢迎使用教师工资信息管理系统------\n");
	printf("\t      文件导入成功      \n");
	printf("\t      教师工资信息文件中无任何记录      \n");
	printf("\t      按任意键返回主菜单      \n");
	printf("\t----------------------------------\n");
	getch();
	return;
}


void saveae_file(struct Teacher tea[],int io)//第五 保存并退出文件 
{
	int i;
	if((fp=fopen("F:\\teacher.txt","r"))==NULL)
	printf("\t打开文件失败\n");
	for(i=0;i<=num;i++)
	{
		if(fwrite(&tea[i],sizeof(struct Teacher),1,fp)!=1)
		printf("\t文件写入错误!\n");
	} 
	fclose(fp);
	  printf("\n\t------------------------\n");
      printf("\t教师工资信息文件已保存\n");
	  printf("\t谢谢使用,欢迎再次使用!");
	  printf("\n\t按任意键退出程序\n\t");
	  exit(0);
	  printf("\n\t------------------------\n");
}


void input_t(struct Teacher tea[],int io)//第一 录入数据并保存
{
	FILE *fp1=fopen("F:\\teacher.txt","a+");
	
	
	printf("请输入教师的基本信息和工资信息:\n");
	printf("\n请输入教师的工号:");
	gets((char*)&tea[num].gh);
	fputs((char*)&tea[num].gh,fp1);
	
	printf("\n请输入教师的姓名:");
	gets(tea[num].name);
	fputs(tea[num].name,fp1);
	 

	printf("\n请输入教师的学院(信息学院1、工学院2、理学院3、人文学院4、生物学院5):");
	gets((char*)&tea[num].address);
	fputs((char*)&tea[num].address,fp1);
	
	printf("\n请输入教师的职称(教授1,副教授2,讲师3,助教4):");
	gets((char*)&tea[num].title);
	fputs((char*)&tea[num].title,fp1);

	printf("\n请输入月份:");
	gets((char*)&tea[num].month);
	fputs((char*)&tea[num].month,fp1);
	
	printf("\n请输入基本工资:");
	gets((char*)&tea[num].month.basic_salary);
	fputs((char*)&tea[num].month.basic_salary,fp1);
	
	printf("\n请输入业务津贴:");
	gets((char*)&tea[num].month.allowance);
	fputs((char*)&tea[num].month.allowance,fp1);
	
	printf("\n请输入扣除费用:");
	gets((char*)&tea[num].month.deducting);
	fputs((char*)&tea[num].month.deducting,fp1);
	
	tea[num].month.total=tea[num].month.basic_salary+tea[num].month.allowance;
	tea[num].month.actual=tea[num].month.total-tea[num].month.deducting;
	num++;
	printf("\n是否继续添加?(y/n)");
	if(getch()=='y')
		input_t(tea,130);
	fclose(fp1);
	
	return;
}

void search_menu(struct Teacher tea[],int io)//查询显示 
{
	char choice;
	system("cls");
	printf("\n\t------欢迎来到'查询显示'菜单------\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请选择:");
	choice=getch();
	switch(choice)
	{
		case'1':show_all(tea,130);break;
		case'2':show_allbm(tea,130);break;
		case'3':search_gh(tea,130);break;
		case'4':search_name(tea,130);break;
		case'5':main_menu(tea,130);break;
		default:printf("输入错误请重新输入\n"); 
	}
}



void show_all(struct Teacher tea[],int io)
{
	int q=0;
	FILE *fp1;
	if((fp1=fopen("F:\\teacher.txt","r+"))==NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	int i;
	int j;
	char xm,xy,zc;
	float jb,yw,kc,yf,sf;
	char k;
	char l;

	if(num!=0)
	{
		for(i=0;i<num;i++)
		{
			fread(&tea[q],sizeof(struct Teacher),1,fp1);
			if(tea[i].gh>tea[i+1].gh)
			{
				j=tea[i+1].gh;
				tea[i].gh=tea[i+1].gh;
				tea[i+1].gh=j;
				xm=*tea[i+1].name;
				*tea[i].name=*tea[i+1].name;
				*tea[i+1].name=xm;
				xy=*tea[i+1].address;
				*tea[i].address=*tea[i+1].address;
				*tea[i+1].address=xy;
				zc=*tea[i+1].title;
				*tea[i].title=*tea[i+1].title;
				*tea[i+1].title=zc;
				jb=tea[i+1].month.basic_salary;
				tea[i].month.basic_salary=tea[i+1].month.basic_salary;
				tea[i+1].month.basic_salary=jb;
				yw=tea[i+1].month.allowance;
				tea[i].month.allowance=tea[i+1].month.allowance;
				tea[i+1].month.allowance=yw;
				kc=tea[i+1].month.deducting;
				tea[i].month.deducting=tea[i+1].month.deducting;
				tea[i+1].month.deducting=kc;
				yf=tea[i+1].month.total;
				tea[i].month.total=tea[i+1].month.total;
				tea[i+1].month.total=yf;
				sf=tea[i+1].month.actual;
				tea[i].month.actual=tea[i+1].month.actual;
				tea[i+1].month.actual=sf;
			}
		}
		i=0;
		for(q=0;q<num;q++)//输出教师工号 
		{
			fread(&tea[q],sizeof(struct Teacher),1,fp1);
			printf("%d\t",tea[i].gh);
		}
		for(i=0;i<num;i++)//输出教师的学院和职称 
		{
			fread(&tea[q],sizeof(struct Teacher),1,fp1);
			k=*tea[i].address;
			l=*tea[i].title;
			printf("%d\n",tea[i].gh);
			printf("%s\n",tea[i].name);
			switch(k)
			{
			case '1':printf("信息学院\n");break;
			case '2':printf("工学院\n");break;
			case '3':printf("理学院\n");break;
			case '4':printf("人文学院\n");break;
			case '5':printf("生物学院\n");break;
			}
			switch(l)
			{
			case '1':printf("教授\n");break;
			case '2':printf("副教授\n");break;
			case '3':printf("讲师\n");break;
			case '4':printf("助教\n");break;
			}
		}
	}
	fclose(fp1);
	return; 
}	
	
void show_allbm(struct Teacher tea[],int io)//根据月份显示所有教师当月工资信息(以工号为序)
{
	int i;
	int j;
	int m;
	int pdm;
	char xm,xy,zc;
	float jb,yw,kc,yf,sf;
	char k,l;
	printf("请输入需要查询的月份:"); 
	scanf("%d",&m);
	printf("\n");
	if(num!=0)
	{
		for(i=0;i<num;i++)
		{
			if(tea[i].gh>tea[i+1].gh)
			{
				j=tea[i+1].gh;
				tea[i].gh=tea[i+1].gh;
				tea[i+1].gh=j;
				xm=*tea[i+1].name;
				*tea[i].name=*tea[i+1].name;
				*tea[i+1].name=xm;
				xy=*tea[i+1].address;
				*tea[i].address=*tea[i+1].address;
				*tea[i+1].address=xy;
				zc=*tea[i+1].title;
				*tea[i].title=*tea[i+1].title;
				*tea[i+1].title=zc;
				jb=tea[i+1].month.basic_salary;
				tea[i].month.basic_salary=tea[i+1].month.basic_salary;
				tea[i+1].month.basic_salary=jb;
				yw=tea[i+1].month.allowance;
				tea[i].month.allowance=tea[i+1].month.allowance;
				tea[i+1].month.allowance=yw;
				kc=tea[i+1].month.deducting;
				tea[i].month.deducting=tea[i+1].month.deducting;
				tea[i+1].month.deducting=kc;
				yf=tea[i+1].month.total;
				tea[i].month.total=tea[i+1].month.total;
				tea[i+1].month.total=yf;
				sf=tea[i+1].month.actual;
				tea[i].month.actual=tea[i+1].month.actual;
				tea[i+1].month.actual=sf;
			}
		}
	}
	for(i=0;i<num;i++)//输入信息 
	{
		printf("%d\n",tea[i].gh);
		printf("%s\n",tea[i].name);
		k=*tea[i].address;
		l=*tea[i].title;
		switch(k)
		{
		case '1':printf("%s来自信息学院\n",tea[i].name);break;
		case '2':printf("%s来自工学院\n",tea[i].name);break;
		case '3':printf("%s来自理学院\n",tea[i].name);break;
		case '4':printf("%s来自人文学院\n",tea[i].name);break;
		case '5':printf("%s来自生物学院\n",tea[i].name);break;
		}
		switch(l)
		{
		case '1':printf("%s职称是教授\n",tea[i].name);break;
		case '2':printf("%s职称是副教授\n",tea[i].name);break;
		case '3':printf("%s职称是讲师\n",tea[i].name);break;
		case '4':printf("%s职称是助教\n",tea[i].name);break;
		}
		printf("%d\n",m);
		pdm=*tea[i].month.months;//判断结构体数组的月份是否为输入月份 
		if(m==pdm)
		{
			printf("%s的基本工资是:%f\n",tea[i].name,tea[i].month.basic_salary);
			printf("%s的业务津贴是:%f\n",tea[i].name,tea[i].month.allowance);
			printf("%s的扣除费用是:%f\n",tea[i].name,tea[i].month.deducting);
			printf("%s的应发工资是:%f\n",tea[i].name,tea[i].month.total);
			printf("%s的实发工资是:%f\n",tea[i].name,tea[i].month.actual);
		}
	}
	return;
} 

void search_gh(struct Teacher tea[],int io)
{
	int mark=0;
	int i;
	int id; 
	char k,l; 
    printf("\t\t------按工号查询------\n");        
	printf("\n\t请输入工号:");
	scanf("%d",&id);
	for(i=0;i<num;i++)
	{
		if(id==tea[i].gh)
		{
			printf("\n\t******以下是你要查找的教师工资信息******\n");
			printf("%d\n",tea[i].gh);
			printf("%s\n",tea[i].name);
			k=*tea[i].address;
			l=*tea[i].title;
			switch(k)
			{
			case '1':printf("%s来自信息学院\n",tea[i].name);break;
			case '2':printf("%s来自工学院\n",tea[i].name);break;
			case '3':printf("%s来自理学院\n",tea[i].name);break;
			case '4':printf("%s来自人文学院\n",tea[i].name);break;
			case '5':printf("%s来自生物学院\n",tea[i].name);break;
			}
			switch(l)
			{
			case '1':printf("%s职称是教授\n",tea[i].name);break;
			case '2':printf("%s职称是副教授\n",tea[i].name);break;
			case '3':printf("%s职称是讲师\n",tea[i].name);break;
			case '4':printf("%s职称是助教\n",tea[i].name);break;
			}
			printf("%s的基本工资是:%f\n",tea[i].name,tea[i].month.basic_salary);
			printf("%s的业务津贴是:%f\n",tea[i].name,tea[i].month.allowance);
			printf("%s的扣除费用是:%f\n",tea[i].name,tea[i].month.deducting);
			printf("%s的应发工资是:%f\n",tea[i].name,tea[i].month.total);
			printf("%s的实发工资是:%f\n",tea[i].name,tea[i].month.actual);
		}
			printf("\t***********************************\n");
			getch();
			mark++;
			return;
	}
	if (mark==0)
	{	
		printf ("\n\t没有该教师的工资信息记录");
		printf ("\n\t按回车键回主菜单");
		getch();
		return;
	}
}

void search_name(struct Teacher tea[],int io)//根据姓名查找 
{
	int mark=0;
	int i;
	char k,l;
	char names[10];
	printf("\t\t------按姓名查询------\n");
	printf("\t\t请输入您要查找的姓名:\n");
	scanf("%s",names);
	for (i=0;i<num;i++)
	{
	    if(strcmp(tea[i].name,names)==0)
		{
			printf("\n\t******以下是你要查找的教师工资信息******\n");
	        printf("%d\n",tea[i].gh);
			printf("%s\n",tea[i].name);
			k=*tea[i].address;
			l=*tea[i].title;
			switch(k)
			{
			case '1':printf("%s来自信息学院\n",tea[i].name);break;
			case '2':printf("%s来自工学院\n",tea[i].name);break;
			case '3':printf("%s来自理学院\n",tea[i].name);break;
			case '4':printf("%s来自人文学院\n",tea[i].name);break;
			case '5':printf("%s来自生物学院\n",tea[i].name);break;
			}
			switch(l)
			{
			case '1':printf("%s职称是教授\n",tea[i].name);break;
			case '2':printf("%s职称是副教授\n",tea[i].name);break;
			case '3':printf("%s职称是讲师\n",tea[i].name);break;
			case '4':printf("%s职称是助教\n",tea[i].name);break;
			}
			printf("%s的基本工资是:%f\n",tea[i].name,tea[i].month.basic_salary);
			printf("%s的业务津贴是:%f\n",tea[i].name,tea[i].month.allowance);
			printf("%s的扣除费用是:%f\n",tea[i].name,tea[i].month.deducting);
			printf("%s的应发工资是:%f\n",tea[i].name,tea[i].month.total);
			printf("%s的实发工资是:%f\n",tea[i].name,tea[i].month.actual);  
		    printf("\n\t********************************");
		    mark++;
		    getch();
		    return;
		}
	}
	if (mark==0)
	{	
		printf ("\n\t没有该教师的工资信息记录");
		printf ("\n\t按回车键回主菜单");
		getch();
		return;
	}
}
        
void cout_menu(struct Teacher tea[],int io)//统计分析目录	
{
	char choice;
	system("cls");
	printf("\n\t------欢迎来到'统计分析'菜单------\n");
	printf("\t------[1]根据月份,统计不同学院教师的平均应发工资和平均实发工资--------\n");
	printf("\t------[2]根据月份,统计不同职称教师的平均应发工资和平均实发工资------\n");
	printf("\t------[3]返回主菜单------\n");
	printf("\t*****************************\n");
	printf("\t请选择:");
	choice=getch();
	switch(choice)
	{
		case'1':coutbyaddress(tea,130);break;
		case'2':coutbytitle(tea,130);break;
		case'3':main_menu(tea,130);break;
		default:printf("输入错误\n");break; 
	}
	return;	
}

void coutbyaddress(struct Teacher tea[],int io)
{
	int m;//声明定义月份
	int i,j;
	double xy[6]={0,0,0,0,0,0};
	double xya[6]={0,0,0,0,0,0};
	int xy1[6]={0,0,0,0,0,0};
	double avert[6]={0,0,0,0,0,0};
	double avera[6]={0,0,0,0,0,0};
	
	printf("请输入你想要统计的月份:");
	scanf("%d",&m);
	for(i=0;i<num;i++)//统计应发工资和实发工资 
	{
		if(m==*tea[i].month.months)
		{
			for(j=0;j<5;j++)
			{
				if(*tea[i].address==j+1)
				{
					xy[j+1]=xy[j+1]+tea[i].month.total;
					xya[j+1]=xya[j+1]+tea[i].month.actual;
					xy1[j+1]=xy1[j+1]+1;
				}
			}
		}		
	}
	for(j=0;j<5;j++)//统计平均工资并输出平均应发工资和实发工资 
	{
		if(xy[j+1]!=0)
		{
			avert[j+1]=xy[j+1]/xy1[j+1];
			avera[j+1]=xya[j+1]/xy1[j+1]; 
			switch(j+1)
			{
			case '1':printf("信息学院教师的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
			case '2':printf("工学院教师的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
			case '3':printf("理学院教师的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
			case '4':printf("人文学院教师的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
			case '5':printf("生物学院教师的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
			}		
		}	
		else
		{
			switch(j+1)
			{
			case '1':printf("抱歉,暂无信息学院教师平均应发工资和平均实发工资的数据!\n");break;
			case '2':printf("抱歉,暂无工学院教师平均应发工资和平均实发工资的数据!\n");break;
			case '3':printf("抱歉,暂无理学院教师平均应发工资和平均实发工资的数据!\n");break;
			case '4':printf("抱歉,暂无人文学院教师平均应发工资和平均实发工资的数据!\n");break;
			case '5':printf("抱歉,暂无生物学院教师平均应发工资和平均实发工资的数据!\n");break;
			}
		}
	}	
	return ;	
}

void coutbytitle(struct Teacher tea[],int io)
{
	int i,j,k,m,l; 
	int zc[5]={0,0,0,0,0};//声明定义不同职称的总人数 
	int salary[5]={0,0,0,0,0};//不同职称的总应发工资
	int salarye[5]={0,0,0,0,0};//
	float avert[4]={0,0,0,0};
	float avera[4]={0,0,0,0};
	printf("请输入你想要统计的月份:");
	scanf("%d",&m);
	for(i=0;i<num;i++)//不同职称的总人数和总成绩 
	{	
		if(m==*tea[i].month.months)
		{
			for(j=1;j<=4;j++)
			{
				if(*tea[i].title==j)
				{
					k=*tea[i].title;
					zc[k]++;
					salary[k]=salary[k]+tea[i].month.total;
					salarye[k]=salarye[k]+tea[i].month.actual;
				}
			}
		}
	}
	int max=0;
	for(j=0;j<4;j++)//统计平均工资并输出平均应发工资和实发工资 
	{
		if(zc[j+1]!=0)
		{
			avert[j+1]=salary[j+1]/zc[j+1];
			avera[j+1]=salarye[j+1]/zc[j+1]; 
		}
		else
		{
			switch(j+1)
			{
			case '1':printf("抱歉,暂无教授职称平均应发工资的数据!\n");break;
			case '2':printf("抱歉,暂无副教授职称平均应发工资的数据!\n");break;
			case '3':printf("抱歉,暂无讲师职称平均应发工资的数据!\n");break;
			case '4':printf("抱歉,暂无助教职称平均应发工资的数据!\n");break;
			}
		}
	}
			
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1; 
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	max=0;
	switch(l)
	{
		case '1':printf("教授的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("讲师平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
	}
		
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1; 
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	switch(l)
	{
		case '1':printf("教授的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("讲师平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
	}
	
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1;
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	switch(l)
	{
		case '1':printf("教授的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("讲师平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
	}			
	
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1; 
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	switch(l)
	{
		case '1':printf("教授的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("讲师平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均应发和实发工资为%f,%f\n",avert[j+1],avera[j+1]);break;
	}							
	return ;		
}

void xg_menu(struct Teacher tea[],int io)//第二栏目——修改 
{
	char choice;
	system("cls");
	printf("\n\t------欢迎来到'修改'菜单------\n");
	printf("\t------[1]根据工号修改某位教师的基本信息和工资信息--------\n");
	printf("\t------[2]根据姓名修改某位教师的基本信息和工资信息-----\n");
	printf("\t------[3]删除某一工号的教师的所有信息------\n");
	printf("\t*****************************\n");
	printf("\t请选择:");
	choice=getch();
	switch(choice)
	{
		case'1':xgbygh(tea,130);break;
		case'2':xgbyname(tea,130);break;
		case'3':delete_all(tea,130);break;
		default:printf("输入错误请重新输入\n"); 
	}
	return; 
}

void delete_all(struct Teacher tea[],int io)
{
	int i,j;
	int deletemark=0;
	int id;
	printf("\t请输入想要删除教师的工号\n");
	scanf("%d",&id);
	if(num==0) 
	if(num==0)
	{
		printf ("\t对不起,文件中无任何教师工资信息记录\n");
		printf ("\t按回车键回到主菜单\n");
		getch();
		return;
	}
	for(i=0;i<num;i++)
	{
		if(id==tea[i].gh) 
		{
			printf("\t******以下是你要删除的教师的编号信息******\n");
			printf("\t工号:%d\n",tea[i].gh);
			printf("\t姓名:%s\n",tea[i].name);
			printf("\t是否删除?(y/n)\n");
			if(getch()=='y')
			{
				for(j=i;j<num-1;j++)
				{
					tea[j]=tea[j+1];
				}
				num--;
				deletemark++;
				printf("\t删除成功\n");
				printf("\t是否继续删除\n");
				if(getch()=='y')
					delete_all(tea,130);
				return;		
			}
			else
				return;
		} 
		continue;
	}
	if(deletemark==0)
	{
		printf("\t没有该教师工资信息的记录\n");
		printf("\t是否继续删除?(y/n)\n");
		if(getch()=='y')
		delete_all(tea,130);
	}
	return;
}

void xgbygh(struct Teacher tea[],int io)
{
	int changemark=0;
	int i;
	int id;
	int a=0;
	char k; 
	printf("\t请输入需要修改教师的工号\n");
	scanf("%d",&id);
	if(num==0)
	{
		printf("\t\t文件中无该教师的信息\n");
        printf("\t\t按任意键返回主菜单\n");
		getch();
		changemark++;
		return;
	}
	for(i=0;i<num;i++)
	{
		if(id==tea[i].gh)
		{
			printf("\t******以下是你要修改的教师工基本和资信息******\n");
			printf("\t工号:%d\n",tea[i].gh);
			printf("\t姓名:%s\n",tea[i].name);
			printf("\t是否修改?\n(y/n)");
			if(getch()=='y')
			{
				a=i;
				printf("\n");
				printf("\t请重新输入以下信息:\n");
				printf("\t请输入工号\n:");
				scanf("%d",tea[a].gh);
				printf("\t\n请输入教师姓名\n:");
				scanf("%s",tea[a].name);
				printf("\t\n请输入教师学院(信息学院1、工学院2、理学院3、人文学院4、生物学院5):");
           		scanf("%d",tea[a].address);
				printf("\t\n请输入教师职称(1.教授 2.副教授 3.讲师 4.助教):");
				scanf("%d",tea[a].title);
				printf("\t\n请输入教师基本工资:");
				scanf("%f",&tea[a].month.basic_salary);
				printf("\t\n请输入教师的业务津贴:");
				scanf("%f",&tea[a].month.allowance);
				printf("\t\n请输入教师的扣除费用:");
				scanf("%f",&tea[a].month.deducting);
				tea[num].month.total=tea[num].month.basic_salary+tea[num].month.allowance;
				tea[num].month.actual=tea[num].month.total-tea[num].month.deducting;
				printf("\t\n请输入教师的应发工资:");
				scanf("%f",&tea[a].month.total);
        	    printf("\t\n请输入教师的实发工资:");
				scanf("%f",&tea[a].month.actual);
				changemark++;
				printf("\n\t修改保存成功!");
	    	    if(changemark==0)
				printf("\n\t没有该编号的信息");
				printf("\n\t是否继续修改?(y/n)");
				if(getch()=='y')
				xgbygh(tea,130);
				return;
			}
		}	
	} 
	return;
} 

void xgbyname(struct Teacher tea[],int io)
{
	int changemark=0;
	int i;
	char name[50];
	int a=0;
	printf("\t请输入需要修改教师的姓名\n");
	scanf("%s",name);
	if(num==0)
	{
		printf("\t\t文件中无该教师的信息\n");
        printf("\t\t按任意键返回主菜单\n");
		getch();
		changemark++;
		return;
	}
	for(i=0;i<num;i++)
	{
		if(strcmp(name,tea[i].name)==0)
		{
			printf("\t******以下是你要修改的教师基本和工资信息******\n");
			printf("\t工号:%d\n",tea[i].gh);
			printf("\t姓名:%s\n",tea[i].name);
			printf("\t是否修改?\n(y/n)");
			if(getch()=='y')
			{
				a=i;
				printf("\n");
				printf("\t请重新输入以下信息:\n");
				printf("\t请输入工号\n:");
				scanf("%d",tea[a].gh);
				printf("\t\n请输入教师姓名\n:");
				scanf("%s",tea[a].name);
				printf("\t\n请输入教师学院(信息学院1、工学院2、理学院3、人文学院4、生物学院5):");
           		scanf("%d",tea[a].address);
				printf("\t\n请输入教师职称(1.教授 2.副教授 3.讲师 4.助教):");
				scanf("%d",tea[a].title);
				printf("\t\n请输入教师基本工资:");
				scanf("%f",&tea[a].month.basic_salary);
				printf("\t\n请输入教师的业务津贴:");
				scanf("%f",&tea[a].month.allowance);
				printf("\t\n请输入教师的扣除费用:");
				scanf("%f",&tea[a].month.deducting);
				tea[num].month.total=tea[num].month.basic_salary+tea[num].month.allowance;
				tea[num].month.actual=tea[num].month.total-tea[num].month.deducting;
				printf("\t\n请输入教师的应发工资:");
				scanf("%f",&tea[a].month.total);
        	    printf("\t\n请输入教师的实发工资:");
				scanf("%f",&tea[a].month.actual);
				changemark++;
				printf("\n\t修改保存成功!");
	    	    if(changemark==0)
				printf("\n\t没有该编号的信息");
				printf("\n\t是否继续修改?(y/n)");
				if(getch()=='y')
				xgbygh(tea,130);
				return;
			}
		}	
	}
} 

# 救救孩子吧,请大神帮我吧show_all函数看一下好吗,为什么我想查询所有信息却会跳转回目录啊?


上一篇:名古屋中部国际机场将从3月9日(周一)起展出利用现代技术描绘日本茶道精神世界的装置


下一篇:PHP数组_5_3_数组处理函数及其应用_1_快速创建数组的函数