C语言编写的学生考勤信息管理系统

						录入信息需要先后顺序,不然可能有BUG
#include 
#include 
#include 
#include
#include 
struct  student
{
	char name[16];            //姓名
	char ID[10];              //学号
	int classes;              //班级 
	char speciality[16];      //专业 
	char phone[16];           //电话
	int age;                  //年龄 
	int year;                 //出生日期--年
	int month;                //出生日期--月
	int day;                  //出生日期--日
	char dormitory[10];       //宿舍
	int QQ;                   //QQ 
	int math[10];			  //下标决定第几次考勤,数组内容是考勤情况(1-正常 2-迟到 3-早退 4-旷课)
	int english[10];
	int c[10];
}stu[100];
struct subject
{
	char course_number[10];   //课程编号  
	char course_name[10];     //课程名称
	int course_score;         //课程学分
	char teacher_name[10];    //任课教师 
	char time[16];           //上课时间 
	int class_times;          //上课次数
	char class_place[10];     //上课地点 
	struct student Student;
}sub[100];
int e=0; 
int main();
void backup();
void student();
void student_information();
void student_information_enter();
void student_information_search();
void student_information_delete();
void student_information_enter_1();
void student_information_enter_2();
void student_information_search_all();
void student_information_search_ID();
void student_information_search_name();
void student_information_delete_ID();
void student_information_delete_name();
void student_attendance();
void student_attendance_enter();
void student_attendance_search();
void student_attendance_search_name();
void student_attendance_search_ID();
void course();
void course_enter();
void course_search();
void course_search_all();
void course_search_coursename();
void course_search_teachername();
void color(short x);
void color(short x) //自定义函根据参数改变颜色   
{  
    if(x>=0 && x<=15)//参数在0-15的范围颜色  
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);    //只有一个参数,改变字体颜色   
    else//默认的颜色白色  
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);  
}  
int main()
{
	if(e==0)
	{
		e++;
		printf("\n\n\n\n\n\t\t         ※欢迎进入学生考勤系统             \n");
color(10);
		printf("\n\n\n\t\t\t\t\t\t\t\tby 广东工业大学19级计科3班");color(16);
		Sleep(2000);
	}
	system("cls");
	char i;
	while(1)
	{
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           1.学生           丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           2.课程           丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           3.备份           丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           4.退出           丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
 		switch (i)
		{
			case '1': student(); 									    break;
			case '2': course();	    						        	break;
			case '3': backup(); 	     							    break;
			case '4':				 									break;		
			default: printf("\t\t你输入的数字错误,	请重新输入!\n");   break;
		}		
		if (i=='4')
		{
			system("cls");
			color(7);
			printf("\n\n\n\n\n\n\n\n\t\t\t即将退出退出系统,欢迎下次使用!\n");
			break;
		}
	}
	Sleep(1500);
	system("pause");
	exit(0);
	return 0;
}
void student()
{
	system("cls");
	char i;
	while(1)
	{
color(15);		
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         1.学生信息         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         2.学生考勤         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         3.主菜单           丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
			case '1':student_information();   		   		      break;//学生信息操作 
			case '2':student_attendance();    		 		      break;//学生考勤操作
			case '3':                        						  break;//返回主菜单
			default:printf("\t\t您输入的数字错误,请重新输入!\n");	  break; //出错提示
		}
		if(i=='3')	
			break;
	}
	main();
}
void student_information()
{
	system("cls");
	char i;
	while(1)
	{
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        1.学生信息录入      丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        2.学生信息查询      丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        3.学生信息删除      丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        4.上一级菜单        丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
			case '1':student_information_enter();   		   	   break;//学生信息录入 
			case '2':student_information_search();    		   break;//学生信息查询 
			case '3':student_information_delete();               break;//学生信息删除
			case '4': 										   break;//返回上一级菜单 
			default:printf("\t\t您输入的数字错误,请重新输入!\n"); break;//出错提示 
		}
		if(i=='4')	
			break;
	}
	student();
}
void student_information_enter()
{
	char i;
	system("cls");
	while(1)
	{
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨  1.学生信息全部清零再录入  丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨  2.学生信息追加录入        丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨  3.上一级菜单              丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
			case '1':student_information_enter_1();   		   		  break;//生信息全部清零再录入 
			case '2':student_information_enter_2();    		 		  break;//学生信息追加录入
			case '3':                        							  break;//回上一级菜单 
			default:printf("\t\t您输入的数字错误,请重新输入!\n");		  break;//出错提示
		}
		if(i=='3')	
			break;
	}
	student_information();
}
void student_information_enter_1()
{
	int i;
	char k,j;
	FILE *fp;
	system("cls");
	printf("\n\n\n\n\n");
	if((fp=fopen("ARecord.txt","w"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_enter();
	}
	for(i=0,k='1';k=='1';i++)//k来判断是否继续录入学生信息 
	{
color(11);		
		for(j='0';j=='0';)//j来判断是否确定学生信息 
		{	
				printf("\t\t请输入第%d个学生的姓名:",i+1);
				scanf("%s",&stu[i].name);
				printf("\t\t请输入第%d个学生的学号:",i+1);
				scanf("%s",&stu[i].ID);
				printf("\t\t请输入第%d个学生的班级:",i+1);
				scanf("%d",&stu[i].classes);
				printf("\t\t请输入第%d个学生的专业:",i+1);
				scanf("%s",&stu[i].speciality);
				printf("\t\t请输入第%d个学生的电话:",i+1);
				scanf("%s",&stu[i].phone);
				printf("\t\t请输入第%d个学生的年龄:",i+1);
				scanf("%d",&stu[i].age);
				printf("\t\t请输入第%d个学生的出生日期(格式:年-月-日例如:2020 2 2):", i + 1);
				scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day);
				printf("\t\t请输入第%d个学生的宿舍:",i+1);
				scanf("%s",&stu[i].dormitory);
				printf("\t\t请输入第%d个学生的QQ:",i+1);
				scanf("%d",&stu[i].QQ);
color(14);
				printf("\t\t请确定信息 (重输-0 确定-1):\n");
color(16);
				j=getch();
		}
		if(fwrite(&stu[i], sizeof(struct student),1,fp)!=1)
		{
			printf("文件写入错误\n");
			system("pause");
			student_information_enter();
		}
color(14);
		printf("\t\t是否继续输入下一个学生的信息  终止-0 继续-1:\n\n");
color(16);
		k=getch();
	}
color(16);
	fclose(fp);
color(4);
	printf("\n\t\t保存成功\n");
color(16);
	Sleep(1000);
	student_information_enter();
}
void student_information_enter_2()
{
	int i,t,x,m,f;
	char j,k;
	char student_name[16];
	FILE *fp;
	system("cls");
	printf("\n\n\n\n\n");
	if((fp=fopen("ARecord.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_enter();
	}
	for (m=0;feof(fp)==0;m++)
	{
		fread(&stu[m], sizeof(struct student), 1, fp);  //读取文件内容
	}
color(11);
	for(i=m-1,k='1';k=='1';i++)//k来判断是否继续输入学生信息,i是读取数据之后数组的最后一个+1 
	{
		for(j='0',t=1;j=='0';)//j来判断是否确定学生信息 
		{	
				printf("\t\t请输入第%d个学生的姓名:",i+1);
				scanf("%s",&student_name);
				for(x=0;x<m;x++)
				{
					t=strcmp(stu[x].name,student_name);//对输入的学生姓名进行比较,得到下标 
					if(t==0)
					{
						printf("该生已存在!\n");//该学生已存在,返回 
						break;
					}			
				}
				strcpy(stu[i].name,student_name);
				printf("\t\t请输入第%d个学生的学号:",i+1);
				scanf("%s",&stu[i].ID);
				printf("\t\t请输入第%d个学生的班级:",i+1);
				scanf("%d",&stu[i].classes);
				printf("\t\t请输入第%d个学生的专业:",i+1);
				scanf("%s",&stu[i].speciality);
				printf("\t\t请输入第%d个学生的电话:",i+1);
				scanf("%s",&stu[i].phone);
				printf("\t\t请输入第%d个学生的年龄:",i+1);
				scanf("%d",&stu[i].age);
				printf("\t\t请输入第%d个学生的出生日期(格式:年-月-日例如:2020 2 2):", i + 1);
				scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day);
				printf("\t\t请输入第%d个学生的宿舍:",i+1);
				scanf("%s",&stu[i].dormitory);
				printf("\t\t请输入第%d个学生的QQ:",i+1);
				scanf("%d",&stu[i].QQ);
color(14);
				printf("\t\t请确定信息 (重输-0 确定-1):\n");
color(16);
				j=getch();
		}
		if(t!=0)
		{
			if((fp=fopen("ARecord.txt","w"))==NULL)
			{
				printf("\t\t文件打开失败!\n");
				system("pause");			
				student_information_enter();
			}
			for(f=0;f<i;f++)
			{
				if(fwrite(&stu[f], sizeof(struct student),1,fp)!=1)
				{
					printf("\t\t文件写入错误\n");
					system("pause");
					student_information_enter();
				}
			}
		}
color(14);
		printf("\t\t是否继续输入下一个学生的信息  终止-0 继续-1:\n\n");
		k=getch();
color(16);
	}
color(16);
	fclose(fp);
color(4);
	printf("\n\t\t保存成功\n");
color(16);
	Sleep(1000);
	student_information_enter();
}
void student_information_search()
{
	char i;
	system("cls");
	while(1)
	{
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       1.按学号查询         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       2.按姓名查询         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       3.查询所有人         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       4.上一级菜单         丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)	
		{
			case '1':student_information_search_ID();   		   break;//按学号查询 
			case '2':student_information_search_name();    	   	   break;//按姓名查询 
			case '3':student_information_search_all();             break;//查询所有人
			case '4': 										       break;//返回上一级菜单 
			default:printf("\t\t您输入的数字错误,请重新输入!\n");     break;//出错提示 
		}
		if(i=='4')	
			break;
	}
	student_information();
}
void student_information_search_name()
{
	system("cls");
	printf("\n\n\n\n\n");
	int i=0,j=0,t=1,k;
	char x='1';
	FILE *fp;
	char student_name[16] = { 0 };
	if ((fp = fopen("ARecord.txt", "r")) == NULL)   //将文件内容读入内存
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
	}
	while(x!='0')
	{
color(6);
		printf("\t\t请输入需要查询学生的姓名:");
		scanf("%s", &student_name);
		for (j=0,t=1;j<i;j++)
		{
			t=strcmp(stu[j].name,student_name);
			if(t==0)
			{
				break;	
			}	
		}
		if (t==0)   //查询成功
		{
			printf("姓名\t\t学号\t\t班级\t\t专业\t\t电话\t\t年龄\t\t生日\t\t宿舍\t\tQQ\n");
			printf("%s     \t%s \t%d \t\t%s \t\t%s \t%d \t\t%d.%d.%d \t%s \t%d\n",stu[j].name,stu[j].ID,stu[j].classes,stu[j].speciality,stu[j].phone,stu[j].age,stu[j].year,stu[j].month,stu[j].day,stu[j].dormitory,stu[j].QQ);
		}
		else
		{
color(12);
			printf("\t\t未找到该学生信息!\n");
color(16);
		}
color(14);
		printf("\t\t继续-1,退出-0\n");
color(16);
		x=getch(); 
	}
color(16);
	fclose(fp);
	student_information_search();
}
void student_information_search_ID()
{
	system("cls");
	printf("\n\n\n\n\n");
	int i=0,j=0,t=1;
	char x='1';
	FILE *fp;
	char student_ID[10] = { 0 };
	if ((fp = fopen("ARecord.txt", "r")) == NULL)   //将文件内容读入内存
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
	}
	while(x!='0')
	{
color(6);
		printf("\t\t请输入需要查询学生的学号:");
		scanf("%s", &student_ID);
		for (j=0,t=1;j<i;j++)
		{
			t=strcmp(stu[j].ID,student_ID); 
			if(t==0)
			{
				break;	
			}	
		}
		if (t==0)   //查询成功
		{
			printf("姓名\t\t学号\t\t班级\t\t专业\t\t电话\t\t年龄\t\t生日\t\t宿舍\t\tQQ\n");
			printf("%s     \t%s \t%d \t\t%s \t\t%s \t%d \t\t%d.%d.%d \t%s \t%d\n",stu[j].name,stu[j].ID,stu[j].classes,stu[j].speciality,stu[j].phone,stu[j].age,stu[j].year,stu[j].month,stu[j].day,stu[j].dormitory,stu[j].QQ);
		}
		else
		{
color(12);
			printf("\t\t未找到该学生信息!\n");
color(16);
		}
color(14);
		printf("\t\t继续-1,退出-0\n");
color(16);
		x=getch();
	}
color(16);
	fclose(fp);
	student_information_search();
}
void student_information_search_all()
{
	system("cls");
	printf("\n\n\n\n\n");
	int i,j;
	FILE *fp;
	if ((fp = fopen("ARecord.txt", "r")) == NULL)   //将文件内容读入内存
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
	}
color(6);
	printf("姓名\t\t学号\t\t班级\t\t专业\t\t电话\t\t年龄\t\t生日\t\t宿舍\t\tQQ\n");
	for(j=0;j<i;j++)
		printf("%s     \t%s \t%d \t\t%s \t\t%s \t%d \t\t%d.%d.%d \t%s \t%d\n",stu[j].name,stu[j].ID,stu[j].classes,stu[j].speciality,stu[j].phone,stu[j].age,stu[j].year,stu[j].month,stu[j].day,stu[j].dormitory,stu[j].QQ);
color(16);
	system("pause");
	student_information_search();
}

void student_information_delete()
{
	system("cls");
	char i;
	while(1)
	{
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        1.按姓名删除        丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        2.按学号删除        丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        3.上一级菜单        丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
			case '1':student_information_delete_name();   		  		break;//按姓名删除
			case '2':student_information_delete_ID();    		 	    break;//按学号删除  
			case '3':                        						    break;//返回上一级菜单 
			default:printf("\t\t您输入的数字错误,请重新输入!\n");	  		break; //出错提示
		}
		if(i=='3')	
			break;
	}
	student_information();
}
void student_information_delete_name()
{
	system("cls");
	printf("\n\n\n\n\n");
	FILE *fp;
	int i,j,t,f;
	char p,x;
	char student_name[16];
	while(1)
	{
		if((fp=fopen("ARecord.txt","r"))==NULL)
		{
			printf("\t\t文件打开失败!\n");
			system("pause");
			student_information_delete();
		}
		for(i=0;feof(fp)==0;i++)
		{
			fread(&stu[i],sizeof(struct student),1,fp);
		}
		
color(11);
		printf("\t\t请输入要删除信息的学生姓名:");
color(16);
		scanf("%s",&student_name);
		for(j=0,t=1;j<i;j++)
		{
			t=strcmp(stu[j].name,student_name);
			if(t==0)
			{
				break;
			}
		}
		if(t==0)
		{
color(12);
			printf("\t\t请确认你是否要删除信息 确定-1 取消-0\n");
color(16);
			p=getch();
			if(p=='1')
			{
				for(;j<i-1;j++)
				{
					stu[j]=stu[j+1];  
				}
				if((fp=fopen("ARecord.txt","w"))==NULL)
				{
					printf("\t\t文件打开失败!\n");
					system("pause");
					student_information();
				}
				for(f=0;f<i-2;f++)
				{
					if(fwrite(&stu[f], sizeof(struct student),1,fp)!=1)
					{
						printf("\t\t文件写入错误\n");
						system("pause");
						student_information_delete();
					}
						
				}
color(12);
				printf("\t\t信息删除成功\n");

			}
			else
			{
				printf("\t\t你取消了删除操作\n");
color(16);
			} 
		}
		else
		{
color(11);
			printf("\t\t该生不存在\n");
color(16);
		}
color(14);
		printf("\t\t是否继续删除信息 继续-1 退出-0\n");
color(16);
		x=getch();
		if(x=='0')
			break;
	}
	fclose(fp);
	student_information_delete();
}
void student_information_delete_ID()
{
	system("cls");
	printf("\n\n\n\n\n");
	FILE *fp;
	int i,j,t,f;
	char x,p;
	char student_ID[16];
	while(1)
	{
		if((fp=fopen("ARecord.txt","r"))==NULL)
		{
			printf("\t\t文件打开失败!\n");
			system("pause");
			student_information_delete();
		}
		for(i=0;feof(fp)==0;i++)
		{
			fread(&stu[i],sizeof(struct student),1,fp);
		}
color(11);
		printf("\t\t请输入要删除信息的学生学号:");
color(16);
		scanf("%s",&student_ID);
		for(j=0,t=1;j<i;j++)
		{
			t=strcmp(stu[j].ID,student_ID);
			if(t==0)
			{
				break;
			}
		}
		if(t==0)
		{
color(12);
			printf("\t\t请确认你是否要删除信息 确定-1 取消-0\n");
color(26);
			p=getch();
			if(p=='1')
			{
				for(;j<i-1;j++)
					stu[j]=stu[j+1];    
				if((fp=fopen("ARecord.txt","w"))==NULL)
				{
					printf("\t\t文件打开失败!\n");
					system("pause");
					student_information_delete();
				}
				for(f=0;f<i-2;f++)
				{
					if(fwrite(&stu[f], sizeof(struct student),1,fp)!=1)
					{
						printf("\t\t文件写入错误\n");
						system("pause");
						student_information_delete();
					}
						
				}
color(12);
				printf("\t\t信息删除成功\n");
			}
			else
			{
				printf("\t\t你取消了删除操作\n");
color(16);
			} 
		}
		else
		{
color(11);
			printf("\t\t该生不存在\n");
color(16);
		}
color(14);
		printf("\t\t是否继续删除信息 继续-1 退出-0\n");
color(16);
		x=getch();
		if(x=='0')
			break;
	}
	fclose(fp);
	student_information_delete();
}
void student_attendance()
{
	system("cls");
	char i;
	while(1)
	{
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         1.考勤录入         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         2.考勤查询         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         3.上一级菜单       丨\n");
		printf("\t\t丨                            丨\n");	
color(16);
		i=getch();
		switch(i)
		{
			case '1':student_attendance_enter();   		   		     	  break;//考勤录入 
			case '2':student_attendance_search();    		 		      break;//考勤查询
			case '3':													  break;//上一级菜单
			default:printf("\t\t您输入的数字错误,请重新输入!\n");	 	  break;//出错提示
		}
		if(i=='3')	
			break;
	}
	student();
}
void student_attendance_enter()
{
	int i,j,k,l,t,f,s;
	char h,g,n,x='1';
	FILE *fp;
	char student_name[16]; 
	if((fp=fopen("ARecord.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_attendance();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
	}
	while(1)
	{
		system("cls");
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨          1.高数            丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨          2.英语            丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨          3.c程序           丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨          4.上一级菜单      丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		n=getch();
			switch(n)
			{
				case '1':
color(11);
					printf("\t\t请输入学生姓名:");
color(16);
					scanf("%s",&student_name);
					for (j=0,t=1;j<i;j++)
					{
						t=strcmp(stu[j].name,student_name);
						if(t==0)
						{
							break;	
						}	
					}
					if (t==0)   //查询成功
					{
						for(h='1';h=='1';)
						{
							for(g='0';g=='0';)
							{
color(11);
								printf("\t\t请输入这是第几次考勤:");
								scanf("%d",&l);
								printf("\t\t请输入考勤情况(1-正常 2-迟到 3-早退 4-旷课):");
color(16);
								scanf("%d",&stu[j].math[l-1]);
color(14);
								printf("\t\t重输-0 确定-1\n");
								g=getch();
							}
							printf("\t\t是否继续该生的考勤记录(继续-1 退出-0)\n");
color(16);
							h=getch();
			  			}
			  		}
					else
					{
color(11);
						printf("\t\t未找到该学生信息!\n");
color(16);
					}
					if(t==0)
					{
						if((fp=fopen("ARecord.txt","w"))==NULL)
						{
							printf("\t\t文件打开失败!\n");
							system("pause");
							student_attendance();
						}
						for(f=0;f<i;f++)
						{
							if(fwrite(&stu[f], sizeof(struct student),1,fp)!=1)
							{
								printf("\t\t文件写入错误\n");
								system("pause");
								student_attendance();
							}
						}
					}
				break;
				case '2':
color(11);
					printf("\t\t请输入学生姓名:");
color(16);
					scanf("%s",&student_name);
					for (j=0,t=1;j<i;j++)
					{
						t=strcmp(stu[j].name,student_name);
						if(t==0)
						{
							break;	
						}	
					}
					if (t==0)   //查询成功
					{
						for(h='1';h=='1';)
						{
							for(g='0';g=='0';)
							{
color(11);
								printf("\t\t请输入这是第几次考勤:");
								scanf("%d",&l);
								printf("\t\t请输入考勤情况(1-正常 2-迟到 3-早退 4-旷课):");
color(16);
								scanf("%d",&stu[j].english[l-1]);
color(14);
								printf("\t\t重输-0 确定-1\n");
								g=getch();
							}
							printf("\t\t是否继续该生的考勤记录(继续-1 退出-0)\n");
color(16);
							h=getch();
			  			}
			  		}
					else
					{
color(11);
						printf("\t\t未找到该学生信息!\n");
color(16);
					}
					if(t==0)
					{
						if((fp=fopen("ARecord.txt","w"))==NULL)
						{
							printf("\t\t文件打开失败!\n");
							system("pause");
							student_attendance();
						}
						for(f=0;f<i;f++)
						{
							if(fwrite(&stu[f], sizeof(struct student),1,fp)!=1)
							{
								printf("\t\t文件写入错误\n");
								system("pause");
								student_attendance();
							}
						}
					}
				break;
				case '3':
color(11);
					printf("\t\t请输入学生姓名:");
color(16);
					scanf("%s",&student_name);
					for (j=0,t=1;j<i;j++)
					{
						t=strcmp(stu[j].name,student_name);
						if(t==0)
						{
							break;	
						}	
					}
					if (t==0)   //查询成功
					{
						for(h='1';h=='1';)
						{
							for(g='0';g=='0';)
							{
color(11);
								printf("\t\t请输入这是第几次考勤:");
								scanf("%d",&l);
								printf("\t\t请输入考勤情况(1-正常 2-迟到 3-早退 4-旷课):");
color(16);
								scanf("%d",&stu[j].c[l-1]);
color(14);
								printf("\t\t重输-0 确定-1\n");
								g=getch();
							}
							printf("\t\t是否继续该生的考勤记录(继续-1 退出-0)\n");
color(16);
							h=getch();
			  			}
			  		}
					else
					{
color(11);
						printf("\t\t未找到该学生信息!\n");
color(16);
					}
					if(t==0)
					{
						if((fp=fopen("ARecord.txt","w"))==NULL)
						{
							printf("\t\t文件打开失败!\n");
							system("pause");
							student_attendance();
						}
						for(f=0;f<i;f++)
						{
							if(fwrite(&stu[f], sizeof(struct student),1,fp)!=1)
							{
								printf("\t\t文件写入错误\n");
								system("pause");
								student_attendance();
							}
						}
					}
				break;
				case '4':break;	
				default:printf("\t\t你输入的数字错误,请重新输入!\n");
			}
		if(n=='4')
			break;
	}
	fclose(fp);
	student_attendance();
}
void student_attendance_search()
{
	char i;
	system("cls");
	while(1)
	{
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        1.按姓名查询        丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        2.按学号查询        丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        3.上一级菜单        丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
			case '1':student_attendance_search_name();   		   		      break;//学生信息操作 
			case '2':student_attendance_search_ID();    		 		      break;//学生考勤操作
			case '3':                        						  	 	  break;//返回上一级菜单
			default:printf("\t\t您输入的数字错误,请重新输入!\n");	 	 		  break; //出错提示
		}
		if(i=='3')	
			break;
	}
	student_attendance();
}
void student_attendance_search_name()
{
	int i,j,m,t;
	char l,n,x='1';
	int a,b,c,d;
	FILE *fp;
	char student_name[16]; 
	int classes;
		if((fp=fopen("course.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_attendance_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&sub[i], sizeof(struct subject), 1, fp);  //读取文件内容
	}
	if((fp=fopen("ARecord.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_attendance_search();;
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
	}	
	while(x!=0)
	{
		system("cls");
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨 1.显示某人某门考勤信息     丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨 2.显示某人所有课程考勤信息 丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨 3.显示某班所有人考勤情况   丨\n"); 
		printf("\t\t丨                            丨\n");   
		printf("\t\t丨 0.返回上一级菜单           丨\n");
		printf("\t\t丨                            丨\n"); 
color(16);
		n=getch();
		switch(n)	
		{
			case '1':
color(15);
				system("cls");
				loop:printf("\n\n\n\n\n");
				printf("\t\t丨                            丨\n"); 
				printf("\t\t丨           1.高数           丨\n"); 
				printf("\t\t丨                            丨\n"); 
				printf("\t\t丨           2.英语           丨\n"); 
				printf("\t\t丨                            丨\n"); 
				printf("\t\t丨           3.c程序          丨\n"); 
				printf("\t\t丨                            丨\n");   
				printf("\t\t丨      0.返回上一级菜单      丨\n");
				printf("\t\t丨                            丨\n"); 
color(16);
				l=getch();
				switch(l)
				{
					case '1':
						a=0;b=0;c=0;d=0;
color(6);
						printf("\t\t请输入该生姓名:");
						scanf("%s",&student_name);
						for (j=0,t=1;j<i;j++)
						{
							t=strcmp(stu[j].name,student_name);
							if(t==0)
							{
								break;	
							}	
						}
						if (t==0)   //查询成功
						{
							getchar();
							if(stu[j].math[0]=='\0')
								{
									printf("\t\t该生暂无考勤记录\n");
									break;
								}
							printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
							for(m=0;stu[j].math[m]!='\0';m++)
							{
								if(stu[j].math[m]==1)
									printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
								if(stu[j].math[m]==2)
									printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
								if(stu[j].math[m]==3)
									printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
								if(stu[j].math[m]==4)
									printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
						}
						else
						{
							printf("\t\t未找到该学生信息!\n");
						}
					break;
						case '2':
						a=0;b=0;c=0;d=0;
						printf("\t\t请输入该生姓名:");
						scanf("%s",&student_name);
						for (j=0,t=1;j<i;j++)
						{
							t=strcmp(stu[j].name,student_name);
							if(t==0)
							{
								break;	
							}	
						}
						if (t==0)   //查询成功
						{
							getchar();
							if(stu[j].math[0]=='\0')
								{
									printf("\t\t该生暂无考勤记录\n");
									break;
								}
							printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
							for(m=0;stu[j].english[m]!='\0';m++)
							{
								if(stu[j].english[m]==1)
								{
									a++;
									printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
								if(stu[j].english[m]==2)
								{
									b++;
									printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
								if(stu[j].english[m]==3)
								{
									c++;
									printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
								if(stu[j].english[m]==4)
								{
									d++;
									printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
							}
							printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
						}
						else
						{
							printf("\t\t未找到该学生信息!\n");
						}
					break;
						case '3':
						a=0;b=0;c=0;d=0;
						printf("\t\t请输入该生姓名:");
						scanf("%s",&student_name);
						for (j=0,t=1;j<i;j++)
						{
							t=strcmp(stu[j].name,student_name);
							if(t==0)
							{
								break;	
							}	
						}
						if (t==0)   //查询成功
						{
							getchar();
							if(stu[j].math[0]=='\0')
								{
									printf("\t\t该生暂无考勤记录\n");
									break;
								}
							printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
							for(m=0;stu[j].c[m]!='\0';m++)
							{
								if(stu[j].c[m]==1)
								{
									a++;
									printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
								if(stu[j].c[m]==2)
								{
									b++;
									printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
								if(stu[j].c[m]==3)
								{
									c++;
									printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
								if(stu[j].c[m]==4)
								{
									d++;
									printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
							}
							printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
						}
						else
						{
							printf("\t\t未找到该学生信息!\n");
						}
					break;
					case '0':goto loop;break;
					default:printf("\t\t你输入的课程名称错误!\n");break;
				}
			break;
			case '2':
				printf("\t\t请输入该生姓名:");
				scanf("%s",&student_name);
				for (j=0,t=1;j<i;j++)
				{
					t=strcmp(stu[j].name,student_name);
					if(t==0)
					{
						break;	
					}	
				}
				if (t==0)   //查询成功
				{
					getchar();
					if(stu[j].math[0]=='\0')
					{
						printf("\t\t该生暂无考勤记录\n");
						break;
					}
					a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].math[m]!='\0';m++)
					{
						if(stu[j].math[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
						if(stu[j].math[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
						if(stu[j].math[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
						if(stu[j].math[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n\n",a+b+c+d,a,b,c,d);
					a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].english[m]!='\0';m++)
					{
						if(stu[j].english[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n\n",a+b+c+d,a,b,c,d);
					a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].c[m]!='\0';m++)
					{
						if(stu[j].c[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
				}
				else
				{
					printf("\t\t未找到该学生信息!\n");
				}	
			break;
			case '3':
				printf("\t\t请输入查询班级:");
				scanf("%d",&classes);
				for (j=0,t=0;j<i;j++)
				{
					if(stu[j].classes==classes)
					{
						t++;
						a=0;b=0;c=0;d=0;
						printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
						for(m=0;stu[j].math[m]!='\0';m++)
						{
							if(stu[j].math[m]==1)
							{
								a++;
								printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
							if(stu[j].math[m]==2)
							{
								b++;
								printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
							if(stu[j].math[m]==3)
							{
								c++;
								printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
							if(stu[j].math[m]==4)
							{
								d++;
								printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
						a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].english[m]!='\0';m++)
					{
						if(stu[j].english[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
						a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].c[m]!='\0';m++)
					{
						if(stu[j].c[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
					}
				}
				if(t==0)
					printf("\t\t暂无该班级\n");
			break;
			case '0':break;
			default:printf("\t\t你输入的数字错误!\n");break;
color(16);
		}
		if(n=='0')
			break;
color(14);
		printf("\t\t继续-1  退出-0");
color(16);
		x=getch();
	}
	fclose(fp);
	student_attendance_search();
}
void student_attendance_search_ID()
{
	int i,j,m,t;
	char l,n,x='1';
	int a,b,c,d;
	FILE *fp;
	char student_number[16];
	int classes; 
		if((fp=fopen("course.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_attendance_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&sub[i], sizeof(struct subject), 1, fp);  //读取文件内容
	}
	if((fp=fopen("ARecord.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_attendance_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
	}
	
	while(x!='0')
	{
		a=0;b=0;c=0;d=0;
		system("cls");
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨 1.显示某人某门考勤信息     丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨 2.显示某人所有课程考勤信息 丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨 3.显示某班所有人考勤情况   丨\n"); 
		printf("\t\t丨                            丨\n");   
		printf("\t\t丨 0.返回上一级菜单           丨\n");
		printf("\t\t丨                            丨\n"); 
color(16);
		n=getch();
		switch(n)
		
		{
			case '1':
color(15);
				system("cls");
				loop:printf("\n\n\n\n\n");
				printf("\t\t丨                            丨\n"); 
				printf("\t\t丨           1.高数           丨\n"); 
				printf("\t\t丨                            丨\n"); 
				printf("\t\t丨           2.英语           丨\n"); 
				printf("\t\t丨                            丨\n"); 
				printf("\t\t丨           3.c程序          丨\n"); 
				printf("\t\t丨                            丨\n");   
				printf("\t\t丨      0.返回上一级菜单      丨\n");
				printf("\t\t丨                            丨\n"); 
color(16);
				l=getch();
				switch(l)
				{
					case '1':
						a=0;b=0;c=0;d=0;
color(6);
						printf("\t\t请输入该生学号:");
						scanf("%s",&student_number);
						for (j=0,t=1;j<i;j++)
						{
							t=strcmp(stu[j].ID,student_number);
							if(t==0)
							{
								break;	
							}	
						}
						if (t==0)   //查询成功
						{
							getchar();
							if(stu[j].math[0]=='\0')
								{
									printf("\t\t该生暂无考勤记录\n");
									break;
								}
							printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
							for(m=0;stu[j].math[m]!='\0';m++)
							{
								if(stu[j].math[m]==1)
								{
									a++;
									printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
								}
								if(stu[j].math[m]==2)
								{
									b++;
									printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
								}
								if(stu[j].math[m]==3)
								{
									c++;
									printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
								}
								if(stu[j].math[m]==4)
								{
									d++;
									printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
								}
							}
							printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
						}
						else
						{
							printf("\t\t未找到该学生信息!\n");
						}
					break;
					case '2':
						a=0;b=0;c=0;d=0;
						printf("\t\t请输入该生学号:");
						scanf("%s",&student_number);
						for (j=0,t=1;j<i;j++)
						{
							t=strcmp(stu[j].ID,student_number);
							if(t==0)
							{
								break;	
							}	
						}
						if (t==0)   //查询成功
						{
							getchar();
							if(stu[j].math[0]=='\0')
								{
									printf("\t\t该生暂无考勤记录\n");
									break;
								}
							printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
							for(m=0;stu[j].english[m]!='\0';m++)
							{
								if(stu[j].english[m]==1)
								{
									a++;
									printf("%s\t%\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
								if(stu[j].english[m]==2)
								{
									b++;
									printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
								if(stu[j].english[m]==3)
								{
									c++;
									printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
								if(stu[j].english[m]==4)
								{
									d++;
									printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
								}
							}
							printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
						}
						else
						{
							printf("\t\t未找到该学生信息!\n");
						}
					break;
					case '3':
						a=0;b=0;c=0;d=0;
						printf("\t\t请输入该生学号:");
						scanf("%s",&student_number);
						for (j=0,t=1;j<i;j++)
						{
							t=strcmp(stu[j].ID,student_number);
							if(t==0)
							{
								break;	
							}	
						}
						if (t==0)   //查询成功
						{
							getchar();
							if(stu[j].math[0]=='\0')
								{
									printf("\t\t该生暂无考勤记录\n");
									break;
								}
							printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
							for(m=0;stu[j].c[m]!='\0';m++)
							{
								if(stu[j].c[m]==1)
								{
									a++;
									printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
								if(stu[j].c[m]==2)
								{
									b++;
									printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
								if(stu[j].c[m]==3)
								{
									c++;
									printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
								if(stu[j].c[m]==4)
								{
									d++;
									printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
								}
							}
							printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
						}
						else
						{
							printf("\t\t未找到该学生信息!\n");
						}
					break;
					case 0:goto loop;break;
					default:printf("\t\t你输入的课程名称错误!\n");break;
				}
			break;
			case '2':	
				printf("\t\t请输入该生学号:");
				scanf("%s",&student_number);
				for (j=0,t=1;j<i;j++)
				{
					t=strcmp(stu[j].ID,student_number);
					if(t==0)
					{
						break;	
					}	
				}
				if (t==0)   //查询成功
				{
					getchar();
					if(stu[j].math[0]=='\0')
					{
						printf("\t\t该生暂无考勤记录\n");
						break;
					}
					a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].math[m]!='\0';m++)
					{
						if(stu[j].math[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
						if(stu[j].math[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
						if(stu[j].math[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
						if(stu[j].math[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n\n",a+b+c+d,a,b,c,d);
					a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].english[m]!='\0';m++)
					{
						if(stu[j].english[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
						if(stu[j].english[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n\n",a+b+c+d,a,b,c,d);
					a=0;b=0;c=0;d=0;
					printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
					for(m=0;stu[j].c[m]!='\0';m++)
					{
						if(stu[j].c[m]==1)
						{
							a++;
							printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==2)
						{
							b++;
							printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==3)
						{
							c++;
							printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
						if(stu[j].c[m]==4)
						{
							d++;
							printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
						}
					}
					printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
				}
				else
				{
					printf("\t\t未找到该学生信息!\n");
				}	
			break;
			case '3':
				printf("\t\t请输入查询班级:");
				scanf("%d",&classes);
				for (j=0,t=0;j<i;j++)
				{
					if(stu[j].classes==classes)
					{
						t++;
						a=0;b=0;c=0;d=0;
						printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
						for(m=0;stu[j].math[m]!='\0';m++)
						{
							if(stu[j].math[m]==1)
							{
								a++;
								printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
							if(stu[j].math[m]==2)
							{
								b++;
								printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
							if(stu[j].math[m]==3)
							{
								c++;
								printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
							if(stu[j].math[m]==4)
							{
								d++;
								printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[0].course_number,sub[0].course_name,m+1);
							}
						}
						printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n\n",a+b+c+d,a,b,c,d);
						a=0;b=0;c=0;d=0;
						printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
						for(m=0;stu[j].english[m]!='\0';m++)
						{
							if(stu[j].english[m]==1)
							{
								a++;
								printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
							}
							if(stu[j].english[m]==2)
							{
								b++;
								printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
							}
							if(stu[j].english[m]==3)
							{
								c++;
								printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
							}
							if(stu[j].english[m]==4)
							{
								d++;
								printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[1].course_number,sub[1].course_name,m+1);
							}
						}
						printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n\n",a+b+c+d,a,b,c,d);
						a=0;b=0;c=0;d=0;
						printf("姓名\t学号\t\t课程编号\t课程名称\t考勤违纪\t第几次课 \n");
						for(m=0;stu[j].c[m]!='\0';m++)
						{
							if(stu[j].c[m]==1)
							{
								a++;
								printf("%s\t%s\t%s\t\t%s\t\t正常\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
							}
							if(stu[j].c[m]==2)
							{
								b++;
								printf("%s\t%s\t%s\t\t%s\t\t迟到\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
							}
							if(stu[j].c[m]==3)
							{
								c++;
								printf("%s\t%s\t%s\t\t%s\t\t早退\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
							}
							if(stu[j].c[m]==4)
							{
								d++;
								printf("%s\t%s\t%s\t\t%s\t\t旷课\t\t第%d次课\n",stu[j].name,stu[j].ID,sub[2].course_number,sub[2].course_name,m+1);
							}
						}
						printf("各类违规记录:总考勤次数:%d  正常:%d 迟到:%d 早退:%d 旷课:%d\n",a+b+c+d,a,b,c,d);
					}
				}
				if(t==0)
					printf("\t\t暂无该班级\n");
			break;	
			case '4':break;
			default:printf("\t\t你输入的数字错误!\n");break;
color(16);
		}
		if(n=='4')	
			break;
color(14);
		printf("\t\t继续-1  退出-0");
color(16);
		x=getch();
	}
	fclose(fp);
	student_attendance_search();
}
void course()
{
	char i;
	while(1)
	{	
color(15);
		system("cls");
		printf("\n\n\n\n\n");			
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨          1.课程录入        丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨          2.课程查询        丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨          3.主菜单          丨\n"); 
		printf("\t\t丨                            丨\n");   
color(16);
		i=getch();
		switch(i)
		{
			case '1':course_enter();   		   		     		  	  break;//课程录入 
			case '2':course_search();    		 		     		  break;//课程查询
			case '3':                        						  break;//返回主菜单
			default:printf("\t\t您输入的数字错误,请重新输入!\n");	  break;//出错提示
		}
		if(i=='3')	
			break;
	}
	main();
}
void course_enter()
{
	int i,f,x;
	char j,k;
	FILE *fp;
	system("cls");
	if((fp=fopen("course.txt","w"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		course();
	}
	printf("\n\n\n\n\n");
	for(j='1',x=0;j=='1';x++)
	{
color(11);
		for(k=0;k==0;)
		{
			printf("\t\t请输入课程的编号:");
			scanf("%s",&sub[x].course_number);
			printf("\t\t请输入课程的名称:");
			scanf("%s",&sub[x].course_name);
			printf("\t\t请输入课程的学分:");
			scanf("%d",&sub[x].course_score);
			printf("\t\t请输入课程的任课教师:");
			scanf("%s",&sub[x].teacher_name);
			printf("\t\t请输入课程的上课时间(例如:周1上午10.00-12.00):");
			scanf("%s",&sub[x].time);
			printf("\t\t请输入课程的上课次数:");
			scanf("%d",&sub[x].class_times);
			printf("\t\t请输入课程的上课地点(例如:教1-101):");
			scanf("%s",&sub[x].class_place);
			printf("\t\t请确定信息(确定-1,重输-0):\n");
			k=getch();
		}
		if(fwrite(&sub[x], sizeof(struct subject),1,fp)!=1)
		{
			printf("\t\t文件写入错误\n");
			system("pause");
			course();
		}
color(16);
color(14);
		printf("\t\t是否继续输入下一个课程 继续-1 终止-0:\n");
color(16);
		j=getch();
	}
	fclose(fp);
	course();
}
void course_search()
{
	char i;
	while(1)
	{
color(15);
		system("cls");
		printf("\n\n\n\n\n");			
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨      1.按课程名称查询      丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨      2.按任课教师查询      丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨      3.显示所有课程        丨\n"); 
		printf("\t\t丨                            丨\n"); 
		printf("\t\t丨      4.上一级菜单          丨\n");  
		printf("\t\t丨                            丨\n");    
color(16);
		i=getch();
		switch(i)
		{
			case '1':course_search_coursename();   		   		 break;//按课程名称查询 
			case '2':course_search_teachername();    		 		 break;//按任课教师查询
			case '3':course_search_all();                     	 break;//显示所有课程
			case '4':											break;
			default:printf("\t\t您输入的数字错误,请重新输入!\n");	 break; //出错提示
		}
		if(i=='4')	
			break;
	}
	course();
}
void course_search_coursename()
{
	system("cls");
	printf("\n\n\n\n\n");
	int i=0,j=0,t=1;
	char x='1';
	FILE *fp;
	char course_name[10]; 
	if((fp=fopen("course.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		course_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&sub[i], sizeof(struct subject), 1, fp);  //读取文件内容
	}
	while(x!='0')
	{
color(6);
		printf("\t\t请输入需要查询课程名称:");
		scanf("%s", &course_name);
		for (j=0,t=1;j<i;j++)
		{
			t=strcmp(sub[j].course_name,course_name);
			if(t==0)
			{
				break;	
			}	
		}
		if (t==0)   //查询成功
		{
			printf("课程编号\t课程名称\t课程学分\t任课教师\t     上课时间\t\t上课次数\t上课地点\n");
			printf("%s\t\t  %s\t\t   %d\t\t  %s\t\t%s\t   %d\t\t%s\n",sub[j].course_number,sub[j].course_name,sub[j].course_score,sub[j].teacher_name,sub[j].time,sub[j].class_times,sub[j].class_place);
		}
		else
		{
			printf("\t\t未找到该课程信息!\n");
		}
color(16);
color(14);
		printf("\t\t继续-1,退出-0\n");
color(16);
		x=getch(); 
	}
	fclose(fp);
	course_search();
}
void course_search_teachername()
{
	system("cls");
	printf("\n\n\n\n\n");
	int i=0,j=0,t=1;
	char x='1';
	FILE *fp;
	char teacher_name[10]; 
	if((fp=fopen("course.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		course_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
		fread(&sub[i], sizeof(struct subject), 1, fp);  //读取文件内容
	}
		while(x!='0')
	{
color(6);
		printf("\t\t请输入任课教师名称:");
		scanf("%s", &teacher_name);
		for (j=0,t=1;j<i;j++)
		{
			t=strcmp(sub[j].teacher_name,teacher_name);
			if(t==0)
			{
				break;	
			}	
		}
		if (t==0)   //查询成功
		{
			printf("课程编号\t课程名称\t课程学分\t任课教师\t     上课时间\t\t上课次数\t上课地点\n");
			printf("%s\t\t  %s\t\t   %d\t\t  %s\t\t%s\t   %d\t\t%s\n",sub[j].course_number,sub[j].course_name,sub[j].course_score,sub[j].teacher_name,sub[j].time,sub[j].class_times,sub[j].class_place);
		}
		else
		{
			printf("\t\t未找到该课程信息!\n");
		}
color(16);
color(14);
		printf("\t\t继续-1,退出-0\n");
color(16);
		x=getch(); 
	}
	fclose(fp);
	course_search();
}
void course_search_all()
{
	system("cls");
	printf("\n\n\n\n\n");
	int j;
	FILE *fp;
	if((fp=fopen("course.txt","r"))==NULL)
	{
		printf("文件打开失败!\n");
		system("pause");
		course_search();
	}
color(6);
	printf("课程编号\t课程名称\t课程学分\t任课教师\t     上课时间\t\t上课次数\t上课地点\n");
	for (j=0;feof(fp)==0;j++)
	{
		fread(&sub[j], sizeof(struct subject), 1, fp);  //读取文件内容
		printf("%s\t\t  %s\t\t   %d\t\t  %s\t\t%s\t   %d\t\t%s\n",sub[j].course_number,sub[j].course_name,sub[j].course_score,sub[j].teacher_name,sub[j].time,sub[j].class_times,sub[j].class_place);
	}
	fclose(fp);
color(16);
	system("pause");
	course_search();
}
void backup()
{
	system("cls");
	printf("\n\n\n\n\n");
	FILE *source,*end;
	char ch;
	if((source=fopen("ARecord.txt","r"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		main();
	}
	if((end=fopen("backup.txt","w"))==NULL)
	{
		printf("\t\t文件打开失败!\n");
		system("pause");
		main();
	}
color(4);
	printf("\t\t文件备份中....!\n\n\n");
color(16);
	Sleep(1500);
	 for ( ch=fgetc(source); ch != EOF; ch=fgetc(source) )
    {
        fputc(ch,end);
    }
    system("cls");
color(3);
	printf("\n\n\n\n\n\n\n\n\t\t文件备份成功!");
color(16);
	Sleep(1000);
    fclose(source);
    fclose(end);
    puts("ok");
    main();
}

你可能感兴趣的:(C语言编写的学生考勤信息管理系统)