新教务管理系统——实时设计

当前的教务管理系统已基本实现,但在功能上存在一些小问题,如删除操作不够完善,需要进一步优化以提供更稳定的使用体验。
摘要由CSDN通过智能技术生成

已经大体实现了,就是可能还有些小毛病。比如删除的不完善等等。

//头文件区上分界线 
#include<cstdio>
#include<cstring>
#include<conio.h>
#include<cstdlib>
#include<iostream>
#include<windows.h>
using namespace std;
#define true 1
#define false 0
//头文件区下分界线 

//缺乏:开始读入文件,中途读入文件,结束读入文件。管理员id查找学生的操作 有待完善。管理员id查找老师的操作有待完善。 
//测试刚做完管理员的模糊查询 
//管理员端查成绩。删除操作没有时间了,在做完这些测试改一些就开始加文件 
//goto: A,B,C,D,E,F,G,H,I,J,K,M,N,O,R,S,T,U,V,W,X,Y
//goto out1,out2,out3,out4,out5,out6,out7,out8,out9,out10,out11
// 结构体区上分界线 
//成绩 
typedef struct GPA{
	char uaual_score[10];     //平时成绩 
	char test_score[10];      //期末成绩 
	char rate[10];            //期末成绩占比0到1 
	char overall_score[10];   //综合成绩 
} GPA,*Ptr_GPA; 

//主干学生节点,这个学生节点是作为主干来的 
typedef struct STU1{
	char id[50];      				//学号:统一12位,考虑到现实情况学号没有过长的。
	char code[50];              	//密码用字符型方便隐私,开始为666666。 
	char clname[100];           	//班级:全称。 
	char name[50];    				//姓名:汉字,一个汉字占两个字节 。 
	char sex[10];                   //性别:男表示男性,女表示女性 
	char age[100];                  //出生年月 
	char dorid[50];                 //宿舍号:一般不会太长。 
	char pnum[50];                  //电话号码:电话号码统一11位。 
	struct STU1 *next;              //学生指针,指向下一个节点。 
	struct CLASS2 *cla;             //课程节点指向课程 。   
	                                //还有各种各样的功能,如平均成绩已经等等待补充的 
} STU1,*Ptr_STU1;

//分支学生节点,这个学生节点是作为分支来的。 
typedef struct STU2{
	char id[50];      				//学号:统一12位,考虑到现实情况学号没有过长的。 
	char name[50];    				//姓名:汉字,一个汉字占两个字节 
	char clname[100];           	//班级:全称。 
	GPA gpa;                  		//最新分数:包含3种分数 
	char rebuild[10];               //重修次数:0表示没有,非0表示次数 
	char pnum[50];                  //电话号码:电话号码统一11位。
	struct STU2 *next;              //学生指针,指向下一个节点学生节点 
} STU2,*Ptr_STU2;

//主干课程节点,这个课程节点是作为主干来的 
typedef struct CLASS1{
	char id[100];               //课程编号:统一15位
	char name[100];             //课程名称
	char test_aver_score[50];   //考试平均成绩
	char is_nessary[50];        //必修还是选修 
	char credit[10];            //学分 
	char rebuild[10];           //重修人数,重修人名以后写,是一个函数 
	struct STU2 *stu;           //选课学生,可以做很多事通过这个
	struct CLASS1 *next;        //课程指针,指向其他课程 
	struct TEACH1 *teach;       //老师节点 
} CLASS1,*Ptr_CLA1;
//分支课程节点,这个课程节点是作为分支来的
typedef struct CLASS2{
	char id[100];                //课程编号:统一15位
	char name[100];             //课程名称
	char is_nessary[50];        //必修还是选修 
	GPA gpa;                    //最新分数:包含3种分数 
	char credit[10];            //学分 
	char rebuild[10];           //重修次数:0表示没有,非0表示次数
	struct CLASS2 *next;        //课程指针,指向其他课程 
	struct TEACH1 *teach;       //老师节点
} CLASS2,*Ptr_CLA2;

//主干教师节点,用于教师端登入
typedef struct TEACH1{
	char id[100];              	    //老师工号:统一18位
	char code[50];              	//密码用字符型方便隐私,开始为666666。 
	char name[100];             	//老师名称
	char sex[10];                   //性别:男表示男性,女表示女性  
	char age[10];                   //年龄: 
	struct TEACH1 *next;            //老师指针,指向其他老师
	struct CLASS1 *cla;             //课程指针,指向老师的教授课程 
} TEACH1,*Ptr_TEA1;
//结构体区下分界线 

//全局变量上分界区 
Ptr_STU1 L1=(Ptr_STU1)malloc(sizeof(STU1));   	  //学生主干链表,最后应该要在运行前从文件中读取初始化,带头节点。 

Ptr_TEA1 L2=(Ptr_TEA1)malloc(sizeof(TEACH1));                                 //老师链表,带头节点,用一个函数初始化尾指针 

Ptr_CLA1 L3=(Ptr_CLA1)malloc(sizeof(CLASS1));                                 //课程链表,带头节点 

char Initdorid[50]={"未填写"};                    //初始化的宿舍号

char Initcode[50]={"666666"};                     //初始化密码

char Initpnum[50]={"未填写"};                     //初始化电话 

char Initrebuild[10]={"未统计"};                  //重修人数 

char Inittest_aver_score[50]={"未统计"};          //课程平均分数 

char Select_class_stu[10]={"关闭"};               //学生学课关闭,之后从文件读取状态

char Select_class_teach[10]={"关闭"};             //老师开课关闭 

char Init_do_not_konw[12]={"未填写"};             //初始化为未填写 
// 全局变量下分界区 

//函数声明区上分界线

void Page1();                              //起始界面 

Ptr_STU1 Page1_1_regist();                 //学生登录页面 

void Page1_1_page(Ptr_STU1 p);             //学生界面 

void Page1_1_1_watch__or_change(Ptr_STU1 p);  //学生查改信息 

void Page1_1_2_score(Ptr_STU1 p);          //将成绩分为3类,及格,不及格,未登分3类,全部输出 

void Page1_1_3_Search_page();              //学生查询课程界面 

void Page1_1_3_1_Search_all();             //输出全部课程信息

void page1_1_3_2_id();                     //通过id查找

void page1_1_3_2_id_Print(Ptr_CLA1 p);     //通过id查找课程信息,具体实现

void Page1_1_4_Search_added_class(Ptr_STU1 p); //查看已添加课程 

void Page1_1_5_add(Ptr_STU1 stud1);        //添加课程页面 

void Page1_1_5_add_choice_teach_page(Ptr_STU1 stud1,Ptr_CLA1 cla);  //添加课程页面 ,查找老师 

void Page1_1_5_add_choice_teach_page(Ptr_STU1 stud1,Ptr_CLA1 cla,Ptr_TEA1 teach1);  //添加学生和老师信息,而且要同时改三个内容,而且要有副节点 

void Page1_1_6_change_code(Ptr_STU1 p);    //学生改密码 

Ptr_TEA1 Page1_2_regist();                 //老师登录页面 

void Page1_2_page(Ptr_TEA1 p);             //老师界面 

void Page1_2_1_watch__or_change(Ptr_TEA1 p);   //老师查看自己的信息

void Page1_2_3_teaching(Ptr_TEA1 p);       //老师查看在教课程:1,查改分数,2,id查看课程 3,输出全部课程 

void Page1_2_3_1_all(Ptr_TEA1 p);          //查看全部在教课程 

void Page1_2_3_2_id(Ptr_TEA1 p);          //按课程号查看课程 

void Page1_2_3_3_grade(Ptr_TEA1 p);        //老师给成绩
 
void Page1_2_3_3_grade_choose(Ptr_CLA1 cla1); //老师给成绩的两种选择

void Page1_2_3_3_grade_all(Ptr_CLA1 cla1);     //依次登分 

void Page1_2_3_3_grade_id(Ptr_CLA1 cla1);      //id号查询登分

void Page1_2_4_add(Ptr_TEA1 p);            //老师添加课程 

void Page1_2_2_Search_page();              //老师查询课程界面

void Page1_2_2_1_Search_all();             //输出全部课程 

void Page1_2_5_change_code(Ptr_TEA1 p);    //老师改密码 

void Page1_3_regist();                     //管理员登录页面 

void Page1_3_page(char id[]);              //管理员操作页面

void Page1_3_1_page();                     //管理员操作学生的界面 

void page1_3_1_1_change();                 //管理员添加学生信息 

void page1_3_1_2_search_or_change();       //管理员查找学生信息的界面

void page1_3_1_2_2_all();                  //管理员查看所有学生的信息 

void page1_3_1_2_2_id();                   //管理员通过id查找学生信息 

void page1_3_1_2_2_id_Print(Ptr_STU1 p);   //管理员通过id查改学生信息的主干 

void page1_3_1_2_3_key_find();             //管理员通过模糊查询查看学生信息 

void Page1_3_2_page(); 					   //管理员操作老师的界面

void Page1_3_2_1_change();                 //管理员添加老师信息 

void page1_3_2_2_search_or_change();       //管理员查找老师信息的界面

void page1_3_2_2_2_all();                  //管理员查看所有老师的信息

void page1_3_2_2_2_id(); 				   //管理员通过id查找老师信息

void page1_3_2_2_2_id_Print(Ptr_TEA1 p);   //管理员通过id查改老师信息 

void page1_3_2_2_3_key_find();             //管理员模糊查找老师信息 

void Page1_3_3_page();                     //管理员管理选课信息 

void Page1_3_3_1_change();                 //管理员添加课程信息 

void Page1_3_3_2_search_or_change();       //管理员查看选课信息 

void Page1_3_3_2_1_all();                  //输出全部课程信息,课程名称,课程号码,选修还是必修,学分

void Page1_3_3_2_2_id();                   //id查找某课程某老师的学生信息pand1 

void page1_3_3_2_2_id_in(Ptr_CLA1 p);      //id查找某课程某老师的学生信息pand2 

void page1_3_3_2_2_id_Print(Ptr_TEA1 tea1,Ptr_CLA1 p);//id查找某课程某老师的学生信息pand2

void Page1_3_3_2_3_key_find();             //管理员模糊查找课程 

void Page1_3_3_3_open_or_close();          //选课开启与关闭,包括教师开课 

void Page1_4();                            //关于教务管理系统页面 

void Page1_5();                            //帮助页面 

void Page1_end();                          //结束图片 

void Init_link();                          //初始化链表 

Ptr_STU1 Insert1(Ptr_STU1 stud1);          //按学号顺序插入学生节点 

Ptr_TEA1 Insert2(Ptr_TEA1 teach1);         //按工号顺序插入教师节点 

Ptr_CLA1 Insert3(Ptr_CLA1 cla1);           //按课号顺序插入课程节点 

Ptr_STU1 Delete_student(Ptr_STU1 stud1);   //删除学生节点

Ptr_TEA1 Delete_teacher(Ptr_TEA1 teach1);  //删除该老师的节点

Ptr_STU1 Search_stud1(char id[]);          //在链表中查找学生账号 

Ptr_TEA1 Search_teach1(char id[]); 		   //在链表中查找老师账号 

Ptr_CLA1 Search_cla1(char id[]);           //在链表中查找课程账号 

bool Search_class_in_teach(Ptr_TEA1 tea,Ptr_CLA1 cla); 		//找某个老师的课程,成功返回1,失败返回0 

Ptr_CLA1 Search_class_in_teach_id(Ptr_TEA1 tea,char id[]);  //找到老师的课程,并返回 

Ptr_TEA1 Search_teach_in_class_id(Ptr_CLA1 p,char id[]);    //查找老师是否在该课程中 

Ptr_STU2 Search_stud_in_class_id(Ptr_CLA1 p,char id[]);     //判断该学生是不是在该老师的课里 

bool Search_class_in_stud(Ptr_STU1 stud1,Ptr_CLA1 cla);     //判断该课程是否被该学生选,是返回1,不是返回0 

void Add_class_to_teach(Ptr_TEA1 teach,Ptr_CLA1 cla);       //添加课程给老师 

void Init_link_student(Ptr_STU1 L1);                        //建立学生主链

void Init_link_teacher(Ptr_TEA1 L2);                        //建立老师主链

void Init_link_class(Ptr_CLA1 L3);                          //建立课程主链

void Init_link_combine_student(Ptr_STU1 L1);                //链接学生课程信息 

void Init_link_combine_teacher(Ptr_TEA1 L2);                //链接老师和课程的信息 

void Init_link_combine_class(Ptr_CLA1 L3);                  //链接学生和课程的信息 

void Init_choice_class();                                   //从文件中写出是否选课

void Write_to_file_student(Ptr_STU1 L1);                    //读出信息到学生文件中  

void Write_to_file_teacher(Ptr_TEA1 L2);                    //读出信息到教师文件中 

void Write_to_file_class(Ptr_CLA1 L3);                      //读出信息到课程文件中 

void Write_to_file_combine_student(Ptr_STU1 L1);            //保存学生和课程的信息 

void Write_to_file_combine_teacher(Ptr_TEA1 L2);            //保存老师和课程的信息 

void Write_to_file_combine_class(Ptr_CLA1 L3);              //保存课程和老师的信息

void Write_to_file_choice_class();                          //将是否选课写到文件 

void Page1_6();                                             //通知(关于选课) 
//函数声明区下分界线 

//页面区上分界线 
//主页面,起始页面(已完成) 
void Page1(){               
	printf("***********************************************************************************************************************\n");
	printf("*                                                                                                                     *\n");
	printf("*                                   欢迎使用华南农业大学教务管理系统                                                  *\n");
	printf("*                                                --设计师:陈绪栋                                                     *\n");
	printf("*                                                                                                                     *\n");
	printf("***********************************************************************************************************************\n");
	printf("*                                              请您选择需要的操作                                                     *\n");
	printf("*                                                                                                                     *\n");
	printf("*                                 ---------------------------------------                                             *\n");
    printf("*                                *|                                     |*                                            *\n");
    printf("*                                *|                                     |*                                            *\n");
	printf("*                                *|            1:学生账号登录           |*                                            *\n");
	printf("*                                *|                                     |*                                            *\n");
	printf("*                                *|            2:教师账号登录           |*                                            *\n");
	printf("*                                *|                                     |*                                            *\n");
	printf("*                                *|            3:管理员账号登录         |*                                            *\n");
	printf("*                                *|                                     |*                                            *\n");
	printf("*                                *|            4:关于新教务系统         |*                                            *\n");
	printf("*                                *|                                     |*                                            *\n");
	printf("*                                *|            5:帮助                   |*                                            *\n");
	printf("*                                *|                                     |*                                            *\n");
	printf("*                                *|            6:通知                   |*                                            *\n");
	printf("*                                 ---------------------------------------                                             *\n");
	printf("*                                                                                                                     *\n");
	printf("*                                请按菜单前的数字选择,或按其余键退出选择                                             *\n");
	printf("*                                                                                                                     *\n");
	printf("***********************************************************************************************************************\n");
} 

//学生登录页面(已完成) 
Ptr_STU1 Page1_1_regist(){
char id[50]={'\0'};                    //暂时存储id 
char name[50]={'\0'};                  //暂时存储name 
char code[50]={'\0'};                 //暂时存储code
Ptr_STU1 p;                           //保存查找的该学生的信息 
char ch;
int pand1=0,pand2=0;                  //用pand1和pand2分别表示账号和密码是否读取成功 
F:
	system("CLS");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("**********************************************************************************************************************\n");
	printf("*                                             学生登录页面                                                           *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	printf("        请输入12位真实学号:");
	if(pand1==0)scanf("%s",id);
	else printf("%s\n",id);
	p=Search_stud1(id);
	if(p==NULL){
		printf("\n\n\n\n没有找到该学号信息,请确认或联系管理员进行添加!\n");
		printf("\n                             按空格键回到主页面,按其余键继续登录。\n"); 
		ch=getch();
		if(ch==' '){
			printf("\n返回主页面...");
			Sleep(1000);
			return NULL;
		}
		printf("\n重新登录...");
		Sleep(500); 
		goto F;
	}else{
		pand1=1;
	}
	printf("\n\n        请输入密码:");
	scanf("%s",code);
	if(strcmp(code,p->code)!=0){
		printf("\n\n\n\n密码不正确,请重新输入!");
		printf("\n\n\n\n\n                             按空格键回到主页面,按其余键继续登录。\n"); 
		ch=getch();
		if(ch==' '){
			printf("\n返回主页面...");
			Sleep(1000);
			return NULL;
		}
		printf("\n重新登录...");
		Sleep(500); 
		goto F;
	}
	printf("\n");
	printf("\n\n        登入成功,即将进入学生页面...                                                                                 \n");
	Sleep(1000);
	Page1_1_page(p); 
	return p;
}

//学生操作页面(已完成) 
void Page1_1_page(Ptr_STU1 p){   
    system("CLS");       
	printf("\n\n\n\n\n\n\n\n\n\n                                             欢迎回来,%s同学                              \n",p->name);
	Sleep(1000);
H:
	char choice;
	system("CLS");
	printf("**********************************************************************************************************************\n");
	printf("*                                                                                                                    *\n");
	printf("*                                                学生端界面                                                          *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	printf("*                                              请您选择需要的操作                                                    *\n");
	printf("*                                 ---------------------------------------                                            *\n");
    printf("*                                *|                                     |*                                           *\n");
    printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            1:完善个人信息           |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            2:查看成绩               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            3:查询课程               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            4:查看已添加课程         |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            5:添加课程               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            6:修改密码               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            7:帮助                   |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                 ---------------------------------------                                            *\n");
	printf("*                                请按菜单前的数字选择,或按其余键退出选择                                            *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_1_1_watch__or_change(p);
			goto H; 
			break;
		}
		case '2':{
			Page1_1_2_score(p);
			goto H; 
			break;
		}
		case '3':{
			Page1_1_3_Search_page();
			goto H; 
			break;
		}
		case '4':{
			Page1_1_4_Search_added_class(p);
			goto H; 
			break;
		}
		case '5':{
			if(strcmp(Select_class_stu,"关闭")==0){
				system("CLS"); 
				printf("\n\n\n\n\n\n不在开课时间!");
				Sleep(1000);
			}else{
					Page1_1_5_add(p);	
			}
			goto H; 
			break;
		}
		case '6':{
			Page1_1_6_change_code(p);  //学生改密码 
			goto H; 
			break;
		}
		case '7':{
			Page1_5();                 //这个调用的就是主页面显示的帮助页面 
			goto H; 
			break;
		}
		default:{
			system("CLS");
			printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n回到主页面...");
			Sleep(1000); 
			break;
		}
	}
	//还未联系起来Page1_1_choice(L);  //学生界面功能选择 
}  

//学生查看自己的信息或者改自己的信息(已完成) 
void Page1_1_1_watch__or_change(Ptr_STU1 p){
	char ch;
O:
	system("CLS");
	printf("\n\n\n\n\n");
	printf("          1:学号:%s",p->id);
	printf("\n\n          2:姓名:%s",p->name);
	printf("\n\n          3:班级:%s",p->clname);
	printf("\n\n          4:性别:%s",p->sex);
	printf("\n\n          5:出生年月:%s",p->age);
	printf("\n\n          6:宿舍号:%s",p->dorid);
	printf("\n\n          7:电话号码:%s",p->pnum);
	printf("\n\n                       请选择序号进行修改,按其余键返回");
	printf("\n                         注:1~5项不能修改,若有误,联系管理员进行修改!");
	ch=getch();
	switch(ch){
		case '1':{
			printf("\n\n学号不可修改,如有误,请于帮助页面寻找管理员进行修改.");
			Sleep(1000);
			goto O;
			break;
		}
		case '2':{
			printf("\n\n姓名不可修改,如有误,请于帮助页面寻找管理员进行修改.");
			Sleep(1000);
			goto O;
			break;
		}
		case '3':{
			printf("\n\n班级不可修改,如有误,请于帮助页面寻找管理员进行修改.");
			Sleep(1000);
			goto O;
			break;
		}
		case '4':{
			printf("\n\n性别不可修改,如有误,请于帮助页面寻找管理员进行修改.");
			Sleep(1000);
			goto O;
			break;
		}
		case '5':{
			printf("\n\n出生年月不可修改,如有误,请于帮助页面寻找管理员进行修改.");
			Sleep(1000);
			goto O;
			break;
		}
		case '6':{
			printf("\n\n宿舍号:");
			scanf("%s",p->dorid);
			goto O;
			break;
		}
		case '7':{
			printf("\n\n电话号码:");
			scanf("%s",p->pnum);
			goto O;
			break;
		}
		default:{
			break;
		}
		
	} 
}

//将成绩分为3类,及格,不及格,未登分3类,全部输出 
void Page1_1_2_score(Ptr_STU1 p){
	char ch;
	Ptr_CLA2 cla2=p->cla;
	//及格
	system("CLS");
	printf("及格成绩:\n");
	while(cla2!=NULL){
		if(atof(cla2->gpa.overall_score)>=60.0){
			printf("/ 课程号:%s/ 课程名:%s / 授课老师:%s / 平时成绩:%s / 期末成绩:%s / 综合成绩:%s /,\n\n",cla2->id,cla2->name,cla2->teach->name,cla2->gpa.uaual_score,cla2->gpa.test_score,cla2->gpa.overall_score);
		}
		cla2=cla2->next;
	} 
	printf("不及格成绩:\n");
	cla2=p->cla;
	while(cla2!=NULL){
		if(atof(cla2->gpa.overall_score)<60.0&&(strcmp(cla2->gpa.overall_score,Init_do_not_konw)!=0)){
			printf("/ 课程号:%s/ 课程名:%s / 授课老师:%s / 平时成绩:%s / 期末成绩:%s / 综合成绩:%s /,\n\n",cla2->id,cla2->name,cla2->teach->name,cla2->gpa.uaual_score,cla2->gpa.test_score,cla2->gpa.overall_score);
		}
		cla2=cla2->next;
	} 
	printf("未登分成绩:\n");
	cla2=p->cla;
	while(cla2!=NULL){
		if(strcmp(cla2->gpa.overall_score,Init_do_not_konw)==0){
			printf("/ 课程号:%s/ 课程名:%s / 授课老师:%s / 平时成绩:%s / 期末成绩:%s / 综合成绩:%s /,\n\n",cla2->id,cla2->name,cla2->teach->name,cla2->gpa.uaual_score,cla2->gpa.test_score,cla2->gpa.overall_score);
		}
		cla2=cla2->next;
	} 
	printf("\n\n按任意键退出");
	ch=getch(); 
}

//查询课程界面 
void Page1_1_3_Search_page(){
	char ch;
out1:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                               课程信息查看                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,输出全部课程信息                                                     \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,通过id查找                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               3,组合关键词查找                                                       \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	ch=getch();
	switch(ch){
		case '1':{
			Page1_1_3_1_Search_all();
			goto out1;
			break;
		}
		case '2':{
			page1_1_3_2_id(); 
			goto out1;
			break;
		}
		case '3':{
			Page1_3_3_2_3_key_find();                //这是管理员端的,盗用过来了,哈哈哈 
			goto out1;
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n正在返回上一界面...");
			Sleep(1000);
			break;
		}
	}
} 

//输出全部课程信息,课程名称,课程号码,选修还是必修,学分
void Page1_1_3_1_Search_all(){
	char ch;
	system("CLS");
	Ptr_CLA1 p=L3->next;
	while(p!=NULL){
		printf("\n        / 课程号:%s / 课程名:%s / 性质:%s / 学分:%s /\n\n",p->id,p->name,p->is_nessary,p->credit);
		p=p->next;
	}
	printf("/n----------------------------------------------------------------------------------------/n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
} 

//通过id查找
void page1_1_3_2_id(){
	char id[100];
	Ptr_CLA1 p;
	system("CLS");
	printf("\n\n\n\n\n       请输入要查找课程的课程号:");
	scanf("%s",id);
	p=Search_cla1(id);
	if(p==NULL){
		printf("\n\n\n\n\n\n无该课程信息!"); 
		Sleep(1000);
	}else{
		page1_1_3_2_id_Print(p);                  
	}
} 

//通过id查找课程信息 
void page1_1_3_2_id_Print(Ptr_CLA1 p){
	char ch;
	Ptr_TEA1 teach1=p->teach;
	system("CLS");
	printf("\n\n\n\n\n");
	printf("          课程号:%s",p->id);
	printf("\n\n          课程名:%s",p->name);
	printf("\n\n          课程性质:%s",p->is_nessary);
	printf("\n\n          学分:%s",p->credit);
	printf("\n\n          开课老师");
	while(teach1!=NULL){
		printf("\n        / 工号:%s / 老师名:%s / 年龄:%s / 性别:%s /\n\n",teach1->id,teach1->name,teach1->age,teach1->sex);
		teach1=teach1->next;
	} 
	printf("\n----------------------------------------------------------------------------------------\n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
}

//查看已添加课程
void Page1_1_4_Search_added_class(Ptr_STU1 p){
	char ch;
	system("CLS");
	Ptr_CLA2 cla2=p->cla;
	Ptr_TEA1 tea1;
	while(cla2!=NULL){
		tea1=cla2->teach;
		printf("\n        / 课程编号:%s / 课程名称:%s / 课程性质:%s / 学分:%s / 重修次数:%s /\n",cla2->id,cla2->name,cla2->is_nessary,cla2->credit,cla2->rebuild);
		printf("        /授课老师:%s /授课老师工号:%s /\n\n",tea1->name,tea1->id);
		cla2=cla2->next;
	}
	printf("\n----------------------------------------------------------------------------------------\n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
}

//添加课程,检查是否有,检查是否已添加 
void Page1_1_5_add(Ptr_STU1 stud1){
	char x[100]={'\0'};
	char ch;
	Ptr_CLA1 cla;
	system("CLS");
	printf("\n\n\n\n                  请输入要添加的课程号码:");
	scanf("%s",&x);
	cla=Search_cla1(x);
	if(cla==NULL){
		printf("\n\n\n\n\n\n未查到该课程");
		Sleep(1000);
	}else if(Search_class_in_stud(stud1,cla)==true){
		printf("\n\n\n\n\n\n已添加该课程");
		Sleep(1000);
	}else{
		Page1_1_5_add_choice_teach_page(stud1,cla);
	}
}

//添加课程页面,查找老师 
void Page1_1_5_add_choice_teach_page(Ptr_STU1 stud1,Ptr_CLA1 cla){
	char x[100]={'\0'};
	char ch;
	Ptr_TEA1 teach1;
out3:
	system("CLS");
	printf("\n\n\n\n你正在添加的是:%s课程\n\n\n\n\n",cla->name);
	printf("请输入要添加的授课老师的工号:");
	scanf("%s",&x);
	teach1=Search_teach_in_class_id(cla,x);
	if(teach1==NULL){
		printf("\n\n\n\n\n\n未查到该授课老师");
		printf("\n\n\n按空格键返回,按其他键重新填写");
		ch=getch();
		if(ch!=' '){
			goto out3;
		} 
	}else {
		teach1=Search_teach1(x);
		Page1_1_5_add_choice_teach_page(stud1,cla,teach1);
		printf("\n\n\n\n添加课程成功");
		Sleep(1000);
	}
}

//添加学生和老师信息,而且要同时改三个内容,而且要有副节点 
void Page1_1_5_add_choice_teach_page(Ptr_STU1 stud1,Ptr_CLA1 cla1,Ptr_TEA1 teach1){
	Ptr_CLA2 cla2=(Ptr_CLA2)malloc(sizeof(CLASS2));
	Ptr_STU2 stud2=(Ptr_STU2)malloc(sizeof(STU2));
	Ptr_CLA1 cla=Search_class_in_teach_id(teach1,cla1->id);
	Ptr_CLA2 pcla=stud1->cla;
	Ptr_STU2 pstu2=cla->stu;
	//先复制课程的信息 
	strcpy(cla2->credit,cla->credit);
	strcpy(cla2->gpa.overall_score,Init_do_not_konw);
	strcpy(cla2->gpa.rate,Init_do_not_konw);
	strcpy(cla2->gpa.test_score,Init_do_not_konw);
	strcpy(cla2->gpa.uaual_score,Init_do_not_konw);
	strcpy(cla2->name,cla->name); 
	strcpy(cla2->is_nessary,cla->is_nessary);
	strcpy(cla2->id,cla->id);
	cla2->teach=teach1;
	cla2->next=NULL;
	cla2->teach=teach1;
	//有时间再考虑重修 
	strcpy(cla2->rebuild,"0");
	if(pcla==NULL){
		stud1->cla=cla2;
	}else{
		while(pcla->next!=NULL){
			pcla=pcla->next;
		}
		pcla->next=cla2;
	}
	//然后复制学生信息
	strcpy(stud2->clname,stud1->clname);
	strcpy(stud2->id,stud1->id);
	strcpy(stud2->gpa.overall_score,Init_do_not_konw);
	strcpy(stud2->gpa.rate,Init_do_not_konw);
	strcpy(stud2->gpa.test_score,Init_do_not_konw);
	strcpy(stud2->gpa.uaual_score,Init_do_not_konw);
	stud2->next=NULL;
	strcpy(stud2->name,stud1->name);
	strcpy(stud2->pnum,stud1->pnum);
	strcpy(stud2->rebuild,"0"); 
	if(pstu2==NULL){
		cla->stu=stud2;
	}else{
		while(pstu2->next!=NULL){
			pstu2=pstu2->next;
		}
		pstu2->next=stud2;
	}
}

//学生改密码 (已完成) 
void Page1_1_6_change_code(Ptr_STU1 p) {
	char code1[100]={'\0'},code2[100]={'\0'},code[100]={'\0'},pand=0;
	char ch; 
N:
	system("CLS");
	printf("\n\n\n\n\n\n            请输入原密码:%s",code);  
	if(pand==0)scanf("%s",code);
	if(pand==0&&strcmp(code,p->code)!=0){
		printf("\n\n\n\n\n\n\n\n\n\n原密码输入错误!");
		memset(code,0,sizeof(code));
		printf("\n\n\n\n\n                             按空格键回到上页面,按其余键继续修改。\n"); 
		ch=getch();
		if(ch==' ');
		else goto N;
	}else{
		pand=1;
		printf("\n\n\n\n\n\n            请输入新密码:");
		scanf("%s",code1);
		printf("\n\n\n            请确认新密码:");
		scanf("%s",code2);
		if(strcmp(code1,code2)!=0){
		printf("\n\n\n\n\n\n两次设置密码不一致,请重新设置!");
		memset(code1,0,sizeof(code1));
		memset(code2,0,sizeof(code2));
		Sleep(1500); 
		goto N;
	}else{
		strcpy(p->code,code1);
		printf("\n\n\n\n\n\n密码设置成功");
		Sleep(1000); 
		return;
	}
	}
	system("CLS");
	printf("\n\n\n\n\n\n\n\n\n\n\n\n\n正在回到上页面....."); 
	Sleep(1000);
}

//老师登录页面 
Ptr_TEA1 Page1_2_regist(){
	
char id[50]={'\0'};                    //暂时存储id 
char name[50]={'\0'};                  //暂时存储name 
char code[50]={'\0'};                 //暂时存储code
Ptr_TEA1 p;                           //保存查找的该老师的信息 
char ch;
int pand1=0,pand2=0;                  //用pand1和pand2分别表示账号和密码是否读取成功 
K:
	system("CLS");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("**********************************************************************************************************************\n");
	printf("*                                             老师登录页面                                                           *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	printf("        请输入18位真实工号:");
	if(pand1==0)scanf("%s",id);
	else printf("%s\n",id);
	p=Search_teach1(id);
	if(p==NULL){
		printf("\n\n\n\n没有找到该工号信息,请确认或联系管理员进行添加!\n");
		printf("\n                             按空格键回到主页面,按其余键继续登录。\n");
		ch=getch();
		if(ch==' '){
			printf("\n返回主页面...");
			Sleep(1000);
			return NULL;
		}
		printf("\n重新登录...");
		Sleep(500); 
		goto K;
	}else{
		pand1=1;
	}
	printf("\n\n        请输入密码:");
	scanf("%s",code);
	if(strcmp(code,p->code)!=0){
		printf("密码不正确,请重新输入!");
		printf("\n\n\n\n\n                             按空格键回到主页面,按其余键继续登录。\n"); 
		ch=getch();
		if(ch==' '){
			printf("\n返回主页面...");
			Sleep(1000);
			return NULL;
		}
		printf("\n重新登录...");
		Sleep(500); 
		goto K;
	}
	printf("\n");
	printf("        登入成功,即将进入老师页面...                                                                                 \n");
	Sleep(1000);
	Page1_2_page(p);
	return p;
}

//老师操作页面
void Page1_2_page(Ptr_TEA1 p){              
    system("CLS");       
	printf("\n\n\n\n\n\n\n\n\n\n                                          欢迎回来,尊敬的%s老师                              \n",p->name);
	Sleep(1000);
M:
	char choice;
	system("CLS");
	printf("**********************************************************************************************************************\n");
	printf("*                                                                                                                    *\n");
	printf("*                                                老师端界面                                                          *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	printf("*                                              请您选择需要的操作                                                    *\n");
	printf("*                                 ---------------------------------------                                            *\n");
    printf("*                                *|                                     |*                                           *\n");
    printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            1:完善个人信息           |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            2:查询课程               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            3:查看在教课程           |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            4:添加课程               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            5:修改密码               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            6:帮助                   |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                 ---------------------------------------                                            *\n");
	printf("*                                请按菜单前的数字选择,或按其余键退出选择                                            *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_2_1_watch__or_change(p); 
			goto M; 
			break;
		}
		case '2':{
			Page1_2_2_Search_page();
			goto M; 
			break;
		}
		case '3':{
			Page1_2_3_teaching(p);
			goto M; 
			break;
		}
		case '4':{
			if(strcmp(Select_class_teach,"关闭")==0){
				printf("\n\n\n\n\n\n不在开课时间!");
				Sleep(1000);
			}else{
					Page1_2_4_add(p);	
			}
			goto M; 
			break;
		}
		case '5':{
			Page1_2_5_change_code(p); 
			goto M; 
			break;
		}
		case '6':{
			Page1_5();                 //这个调用的就是主页面显示的帮助页面 
			goto M; 
			break;
		}
		default:{
			system("CLS");
			printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n回到主页面...");
			Sleep(1000); 
			break;
		} 
	}
}

//老师查看自己的信息 
void Page1_2_1_watch__or_change(Ptr_TEA1 p){
	char ch;
	system("CLS");
	printf("\n\n\n\n\n");
	printf("          1:工号:%s",p->id);
	printf("\n\n          2:姓名:%s",p->name);
	printf("\n\n          3:性别:%s",p->sex);
	printf("\n\n          4:年龄:%s",p->age);
	printf("\n                         注:不能修改,若有误,联系管理员进行修改!");
	printf("\n\n\n\n按任意键返回");
	ch=getch();
}

//查询课程界面 
void Page1_2_2_Search_page(){
	char ch;
out2:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                               课程信息查看                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,输出全部课程信息                                                     \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,通过id查找                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               3,组合关键词查找                                                       \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	ch=getch();
	switch(ch){
		case '1':{
			Page1_2_2_1_Search_all();
			goto out2;
			break;
		}
		case '2':{
			page1_1_3_2_id();                   //将学生端的用过来 
			goto out2;
			break;
		}
		case '3':{
			Page1_3_3_2_3_key_find();          //将选课端的用过来 
			goto out2;
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n正在返回上一界面...");
			Sleep(1000);
			break;
		}
	}
}

//输出全部课程信息,课程名称,课程号码,选修还是必修,学分
void Page1_2_2_1_Search_all(){
	char ch;
	system("CLS");
	Ptr_CLA1 p=L3->next;
	while(p!=NULL){
		printf("\n        / 课程号:%s / 课程名:%s / 性质:%s / 学分:%s /\n\n",p->id,p->name,p->is_nessary,p->credit);
		p=p->next;
	}
	printf("/n----------------------------------------------------------------------------------------/n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
} 

//老师查看在教课程:1,查改分数,2,id查看课程 3,输出全部课程 
void Page1_2_3_teaching(Ptr_TEA1 p){
	char choice;
out3:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                                 课程信息                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,查看所有课程                                                         \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,查看课程详细信息                                                     \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               3,课程登分                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_2_3_1_all(p);
			goto out3;
			break;
		}
		case '2':{
			Page1_2_3_2_id(p);  
			goto out3;
			break;
		}
		case '3':{
			Page1_2_3_3_grade(p);
			goto out3;
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n\n\n\n返回原页面中....."); 
			Sleep(1000);
			break;
		}
	}
}

//查看全部在教课程 
void Page1_2_3_1_all(Ptr_TEA1 p){
	Ptr_CLA1 x=p->cla;
	char ch;
	system("CLS");
	while(x!=NULL){
		printf("\n        / 课程号:%s / 课程名:%s / 课程性质:%s / 课程学分:%s /\n\n",x->id,x->name,x->is_nessary,x->credit);
		x=x->next;
	}
	printf("/n----------------------------------------------------------------------------------------/n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
}

// id查看在教课程
void Page1_2_3_2_id(Ptr_TEA1 p){
	char id[50]={'\0'};
	char ch1,ch2;
	Ptr_CLA1 cla1;
	Ptr_STU2 stud2;
out4:
	system("CLS");
	printf("\n\n\n\n\n\n\n                        请输入课程的课程号:");
	scanf("%s",&id);
	cla1=Search_class_in_teach_id(p,id);
	if(cla1==NULL){
		printf("\n\n\n\n\n\n未查询到该课程,按空格键返回上一界面,其余键继续查询");
		ch1=getch();
		if(ch1!=' '){
			goto out4;
		}
	}else{
		printf("\n        / 课程号:%s / 课程名:%s / 课程性质:%s / 课程学分:%s /\n\n",cla1->id,cla1->name,cla1->is_nessary,cla1->credit);
		stud2=cla1->stu;
		while(stud2!=NULL){
			printf("\n   /学号:%s /姓名:%s /班级:%s /平时成绩:%s /期末成绩:%s /综合成绩:%s \n",stud2->id,stud2->name,stud2->clname,stud2->gpa.uaual_score,stud2->gpa.test_score,stud2->gpa.overall_score); 
			 stud2=stud2->next;
		}
		printf("\n\n-----------------------------------------------------------\n查询完毕,按任意键返回上一界面");
		ch2=getch();
	}
}

//老师给成绩
void Page1_2_3_3_grade(Ptr_TEA1 p){
	Ptr_CLA1 cla1;
	char id[50]={'\0'};
	char ch1,ch2,ch3,ch4;
out9:
	system("CLS");
	printf("\n\n\n\n\n\n请输入要登分课程的课程号:");
	scanf("%s",id);
	cla1=Search_class_in_teach_id(p,id);
	if(cla1==NULL){
	printf("\n\n\n\n输入课程码错误,按空格键退出,其余键继续");
	ch1=getch();
	if(ch1!=' '){
		
		goto out9;
	} 
	}else{
		Page1_2_3_3_grade_choose(cla1); 
	}
}

//老师给成绩的两种选择 
void Page1_2_3_3_grade_choose(Ptr_CLA1 cla1){
	char choice;
out10:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                                 课程登分                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,依次登分                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,id号查询登分                                                         \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_2_3_3_grade_all(cla1);
			goto out10;
			break;
		}
		case '2':{
			Page1_2_3_3_grade_id(cla1);
			goto out10;
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n返回原页面中....."); 
			Sleep(1000);
			break;
		}
	}
}

//依次登分 
void Page1_2_3_3_grade_all(Ptr_CLA1 cla1){
	Ptr_STU2 stu2=cla1->stu;
	Ptr_STU1 stu1;
	Ptr_CLA2 cla2;
	char ch1,ch2;
	char all[50]={'\0'};
	double rate=0,s1=0,s2=0,s3=0;
	system("CLS");
	if(stu2==NULL){
		printf("\n\n\n\n                                            无选该课学生!"); 
	}
	printf("\n\n\n");
	while(stu2!=NULL){
		printf("/ 学号:%s / 姓名:%s / 班级:%s / 平时成绩:%s / 期末成绩:%s / 期末成绩占比:%s / 总成绩:%s /",stu2->id,stu2->name,stu2->clname,stu2->gpa.uaual_score,stu2->gpa.test_score,stu2->gpa.rate,stu2->gpa.overall_score);
		printf("\n\n按1进行登分,按其他键退出登分\n"); 
		ch1=getch();
		if(ch1=='1'){
			printf("平时成绩:");
			scanf("%s",stu2->gpa.uaual_score);
			printf("\n\n期末成绩:");
			scanf("%s",stu2->gpa.test_score);
			printf("\n\n期末成绩占比(0~1):"); 
			scanf("%s",stu2->gpa.rate);
			rate=atof(stu2->gpa.rate);
			s1=atof(stu2->gpa.uaual_score);
			s2=atof(stu2->gpa.test_score);
			s3=s2*rate+s1*(1-rate);
			sprintf(stu2->gpa.overall_score,"%lf",s3);
			printf("按回车键继续");
			ch2=getch();
			//现在同时要改变学生应该看到的成绩
			stu1=Search_stud1(stu2->id);
			cla2=stu1->cla;
			strcpy(cla2->gpa.overall_score,stu2->gpa.overall_score);
			strcpy(cla2->gpa.rate,stu2->gpa.rate);
			strcpy(cla2->gpa.test_score,stu2->gpa.test_score);
			strcpy(cla2->gpa.uaual_score,stu2->gpa.uaual_score); 
			while(ch2!='\r'){
				ch2=getch();
			}
		}else{
			break;
		}
		stu2=stu2->next;
	}
	printf("\n\n\n\n\n\n返回上一界面...");
	Sleep(1000);
}

//id号查询登分
void Page1_2_3_3_grade_id(Ptr_CLA1 cla1){
	Ptr_STU2 stu2;
	Ptr_STU1 stu1;
	Ptr_CLA2 cla2;
	char ch1,ch2;
	char id[50]={'\0'};
	double rate=0,s1=0,s2=0,s3=0;
out11:
	system("CLS");
	printf("\n\n\n                请输入要查找学生的id:");
	scanf("%s",id);
	stu2=Search_stud_in_class_id(cla1,id);
	if(stu2==NULL){
		printf("该课程下无该学员信息!");
		Sleep(1000);
		goto out11;
	}else{
		printf("/ 学号:%s / 姓名:%s / 班级:%s / 平时成绩:%s / 期末成绩:%s / 期末成绩占比:%s / 总成绩:%s /",stu2->id,stu2->name,stu2->clname,stu2->gpa.uaual_score,stu2->gpa.test_score,stu2->gpa.rate,stu2->gpa.overall_score);
		printf("\n\n按1进行登分,按其他键退出登分\n\n\n"); 
		ch1=getch();
		if(ch1=='1'){
			printf("平时成绩:");
			scanf("%s",stu2->gpa.uaual_score);
			printf("\n\n期末成绩:");
			scanf("%s",stu2->gpa.test_score);
			printf("\n\n期末成绩占比(0~1):"); 
			scanf("%s",stu2->gpa.rate);
			rate=atof(stu2->gpa.rate);
			s1=atof(stu2->gpa.uaual_score);
			s2=atof(stu2->gpa.test_score);
			s3=s2*rate+s1*(1-rate);
			sprintf(stu2->gpa.overall_score,"%lf",s3);               //字符串转浮点数 
			printf("按回车键继续,按空格键退出");
			ch2=getch();
			//现在同时要改变学生应该看到的成绩
			stu1=Search_stud1(stu2->id);
			cla2=stu1->cla;
			strcpy(cla2->gpa.overall_score,stu2->gpa.overall_score);
			strcpy(cla2->gpa.rate,stu2->gpa.rate);
			strcpy(cla2->gpa.test_score,stu2->gpa.test_score);
			strcpy(cla2->gpa.uaual_score,stu2->gpa.uaual_score); 
			while(ch2!='\r'){
				if(ch2==' ')break; 
				ch2=getch();
				if(ch2==' ')break; 
			}
			
	}
	
}
}

//添加课程,检查是否有,检查是否已添加 
void Page1_2_4_add(Ptr_TEA1 p){
	char x[100]={'\0'};
	char ch;
	Ptr_CLA1 cla;
	system("CLS");
	printf("\n\n\n\n                  请输入要添加的课程号码:");
	scanf("%s",&x);
	cla=Search_cla1(x);
	if(cla==NULL){
		printf("\n\n\n\n\n\n未查到该课程");
		Sleep(1000);
	}else if(Search_class_in_teach(p,cla)==true){
		printf("\n\n\n\n\n\n已添加该课程");
		Sleep(1000);
	}else{
		Add_class_to_teach(p,cla);
		printf("\n\n\n\n\n\n添加课程成功!"); 
		printf("\n\n\n按任意键退出"); 
		ch=getch();
	}
}

//老师改密码 
void Page1_2_5_change_code(Ptr_TEA1 p) {
	char code1[100]={'\0'},code2[100]={'\0'},code[100]={'\0'},pand=0;
	char ch; 
U:
	system("CLS");
	printf("\n\n\n\n\n\n            请输入原密码:%s",code);  
	if(pand==0)scanf("%s",code);
	if(pand==0&&strcmp(code,p->code)!=0){
		printf("\n\n\n\n\n\n\n\n\n\n原密码输入错误!");
		memset(code,0,sizeof(code));
		printf("\n\n\n\n\n                             按空格键回到上页面,按其余键继续登录。\n"); 
		ch=getch();
		if(ch==' ');
		else goto U;
	}else{
		pand=1;
		printf("\n\n\n\n\n\n            请输入新密码:");
		scanf("%s",code1);
		printf("\n\n\n            请确认新密码:");
		scanf("%s",code2);
		if(strcmp(code1,code2)!=0){
		printf("两次设置密码不一致,请重新设置!");
		memset(code1,0,sizeof(code1));
		memset(code2,0,sizeof(code2));
		Sleep(1500); 
		goto U;
	}else{
		strcpy(p->code,code1);
		printf("\n\n\n\n\n\n密码设置成功");
		Sleep(1000); 
	}
	}
	system("CLS");
}

//管理员登录页面,含判断是否登录成功,但账号设置较为简单(已完成) 
void Page1_3_regist(){
	//原来正常管理员是有结构体的,为了方便,后面录入,这里仅设计一个账号为Jcdoing,密码为13141718的管理员账号 
	char id[100],code[100],m[100]; 
	char ch1,ch2,id1[100]={'\0'},code1[100]={'\0'};
	int i=0,j=-1,k,n,pand=1;
	strcpy(id,"Jcdoing");
	strcpy(code,"13141718");
B:
	system("CLS");	
	printf("\n\n                                          尊敬的管理员,请先登录账号");
	printf("\n\n\n\n           账号:%s",id1);
	if(pand==1)scanf("%s",id1);
	else printf("\n");
	pand=2;
	printf("\n\n\n\n           密码:");
	n=strlen(code1);
	for(k=0;k<n;k++)printf("*");
	ch2=getch();
	if(ch2=='\r'){
		
	}else if(ch2=='\b'){
		if(j>=0){
		code1[j]='\0';
		j--;
		}
		goto B;
	}else{
		j++;
		code1[j]=ch2;
		goto B;
	}
	if(strcmp(id,id1)==0&&strcmp(code,code1)==0){
		Page1_3_page(id);
	}else{
		system("CLS");
		printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n账号或密码错误,正在返回主页面....."); 
		Sleep(1000);
	}
}

//管理员操作页面,分支处(已完成) 
void Page1_3_page(char id[]){
	char choice;
	system("CLS");
	printf("\n\n                                          尊敬的%s管理员,欢迎回来",id);
	Sleep(1000);
C:
	system("CLS");
	printf("**********************************************************************************************************************\n");
	printf("*                                                                                                                    *\n");
	printf("*                                                管理员界面                                                          *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	printf("*                                              请您选择需要的操作                                                    *\n");
	printf("*                                 ---------------------------------------                                            *\n");
    printf("*                                *|                                     |*                                           *\n");
    printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            1:学生信息               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            2:老师信息               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|            3:课程信息               |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                *|                                     |*                                           *\n");
	printf("*                                 ---------------------------------------                                            *\n");
	printf("*                                请按菜单前的数字选择,或按其余键退出选择                                            *\n");
	printf("*                                                                                                                    *\n");
	printf("**********************************************************************************************************************\n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_3_1_page();
			goto C;
			break;
		}
		case '2':{
			Page1_3_2_page();
			goto C;
			break;
		}
		case '3':{
			Page1_3_3_page();
			goto C;
			break;
		}
		default :{
			printf("\n\n\n返回主页面....."); 
			Sleep(1000);
			break;
		}
	}
}

//管理员管理学生信息(已完成) 
void Page1_3_1_page(){
	char choice;
E: 
	system("CLS");
	printf("\n\n\n\n");
	printf("                                                 学生信息                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,添加新学生                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,查改学生信息                                                         \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			page1_3_1_1_change(); 
			goto E;
			break;
		}
		case '2':{
			page1_3_1_2_search_or_change();
			goto E;
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n\n\n\n\n\n\n返回管理员页面中....."); 
			Sleep(1000);
			break;
		}
	}
}

//管理员添加学生信息(已完成) 
void page1_3_1_1_change(){                                     
	char id[50]={'\0'},clname[100]={'\0'},name[50]={'\0'},sex[10]={'\0'},age[100]={'\0'},x[100]={'\0'};
	char choice;
	int pand1=0,pand2=0,pand3=0,pand4=0,pand5=0,sum;
	Ptr_STU1 stud1=(Ptr_STU1)malloc(sizeof(STU1));
D:
	system("CLS");
	printf("\n\n\n\n                                   1,学号:%s                                    \n\n",id);
	printf("                                   2,班级: %s                                    \n\n",clname);
	printf("                                   3,姓名: %s                                    \n\n",name);
	printf("                                   4,性别: %s                                    \n\n",sex);
	printf("                                   5,出生日期: %s                                \n\n",age);
	printf("                                   6,确认创建\n\n");
	printf("                                   7,放弃创建"); 
	printf("\n\n\n\n\n\n\n\n\n                     请选择数字符号进行修改创建或放弃创建\n\n"); 
	choice=getch();
	switch(choice){                                                                          //有点缺陷,就是如果选错了,就无法重新选过 
		case '1':{
			printf("学号:");
			scanf("%s",x);
			if(strlen(x)!=12){
				memset(x,0,sizeof(x));
				printf("请输入12位学号");
				Sleep(1000); 
			}else if(Search_stud1(x)!=NULL){
				memset(x,0,sizeof(x));
				printf("该学号已存在,请勿重复添加!");
				Sleep(1000);
			}else{
				strcpy(id,x);
				pand1=1;
			}
			goto D;
			break;
		}
		case '2':{
			printf("班级:");
			scanf("%s",clname);
			pand2=1;
			goto D;
			break;
		}
		case '3':{
			printf("姓名:");
			scanf("%s",name);
			pand3=1;
			goto D;
			break;
		}
		case '4':{
			printf("性别:");
			scanf("%s",x);
			if(strcmp(x,"男")!=0&&strcmp(x,"女")!=0){
				memset(x,0,sizeof(x));
				printf("性别请输男或女!");
				Sleep(1000); 
			}else{
				strcpy(sex,x);
				pand4=1;
			}
			goto D; 
			break;
		}
		case '5':{
			printf("出生日期:");
			scanf("%s",age);
			pand5=1;
			goto D;
			break;
		}
		case '6':{
			sum=pand1+pand2+pand3+pand4+pand5;
			if(sum<5){
				printf("信息未填完整,请补充");
				Sleep(1000);
				goto D;
			}else {
				strcpy(stud1->id,id);
				strcpy(stud1->clname,clname);
				strcpy(stud1->name,name);
				strcpy(stud1->sex,sex);
				strcpy(stud1->age,age);
				Insert1(stud1); 
				printf("创建成功!");
				Sleep(1000);
			}
			break;
		}
		case '7':{
			printf("放弃创建");
			Sleep(1000);
			break;
		}
		default:{
			goto D;
			break;
		}
	}
}

//管理员查找学生信息的页面(已完成) 
void page1_3_1_2_search_or_change(){
	char choice;
G:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                               学生信息查改                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,输出全部学生信息                                                     \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,通过id查找                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               3,组合关键词查找                                                       \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			page1_3_1_2_2_all();
			goto G; 
			break;
		}
		case '2':{
			page1_3_1_2_2_id();                            //可以进化为二分查找的,有时间再搞。 
			goto G;
			break;
		}
		case '3':{
			page1_3_1_2_3_key_find(); 
			goto G; 
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n返回主页面");
			Sleep(1000); 
			break;
		}
	}
} 

//输出所有学生的账号,密码,姓名和班级(已完成)
void page1_3_1_2_2_all(){
	char ch;
	system("CLS");
	Ptr_STU1 p=L1->next;
	while(p!=NULL){
		printf("\n        / 学号:%s / 姓名:%s / 班级:%s / 密码:%s /\n\n",p->id,p->name,p->clname,p->code);
		p=p->next;
	}
	printf("\n----------------------------------------------------------------------------------------\n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
}

//通过id查找,并可以修改 
void page1_3_1_2_2_id(){
	char id[100];
	Ptr_STU1 p;
	system("CLS");
	printf("\n\n\n\n\n       请输入要查找学生的id:");
	scanf("%s",id);
	p=Search_stud1(id);
	if(p==NULL){
		printf("\n\n\n\n\n\n无该学生信息!"); 
		Sleep(1000);
	}else{
		page1_3_1_2_2_id_Print(p);                 //还差课程信息 
	}
} 

//管理员通过id查改学生信息(当然我这里有很大的问题,就是我这里虽然改了主链表上数据的信息,但其他造成的后续影响没有改,那样有些复制,而我没时间了) 
void page1_3_1_2_2_id_Print(Ptr_STU1 p){
	char ch;
	char x[50];
R:
	system("CLS");
	printf("\n\n\n\n\n");
	printf("          1:学号:%s",p->id);
	printf("\n\n          2:姓名:%s",p->name);
	printf("\n\n          3:班级:%s",p->clname);
	printf("\n\n          4:性别:%s",p->sex);
	printf("\n\n          5:出生年月:%s",p->age);
	printf("\n\n          6:宿舍号:%s",p->dorid);
	printf("\n\n          7:电话号码:%s",p->pnum);
	printf("\n\n          8:密码:%s",p->code);
	printf("\n\n          9:选课信息");     //这里先用学生端的,正常是可以改的 
	printf("\n\n          A:删除该学生信息"); 
	printf("\n\n                       请选择序号进行修改,按其余键返回");
	ch=getch();
	switch(ch){
		case '1':{
			printf("\n\n学号:");
			scanf("%s",p->id);
			goto R;
			break;
		}
		case '2':{
			printf("\n\n姓名:");
			scanf("%s",p->name);
			goto R;
			break;
		}
		case '3':{
			printf("\n\n班级:");
			scanf("%s",p->clname);
			goto R;
			break;
		}
		case '4':{
			printf("\n\n性别:");
			scanf("%s",p->sex);
			goto R;
			break;
		}
		case '5':{
			printf("\n\n出生年月:");
			scanf("%s",p->age);
			goto R;
			break;
		}
		case '6':{
			printf("\n\n宿舍号:");
			scanf("%s",p->dorid);
			goto R;
			break;
		}
		case '7':{
			printf("\n\n电话号码:");
			scanf("%s",p->pnum);
			goto R;
			break;
		}
		case '8':{
			printf("\n\n密码:");
			scanf("%s",p->code);
			goto R;
			break;
		}
		case '9':{
			Page1_1_4_Search_added_class(p); 
			goto R;
			break;
		}
		case 'A':{
			system("CLS");
			printf("\n\n\n\n\n                                         确认删除该学生节点?");
			printf("\n\n        请再次输入待删除学生的学号:");
			scanf("%s",x);
			if(strcmp(x,p->id)==0){
				Delete_student(p);
				printf("删除成功!");
				Sleep(1000); 
				return;
			}else{
				printf("学号输入错误"); 
				Sleep(1000);
				goto R;
			}
			break;
		}
		default:{
			printf("\n\n返回主页面!");
			Sleep(1000);
			break;
		}
		
	}
}

//管理员模糊查找学生信息(已完成) 
void page1_3_1_2_3_key_find(){
	char id[50]={'\0'},clname[100]={'\0'},name[50]={'\0'},sex[10]={'\0'},age[100]={'\0'},x[100]={'\0'};
	char choice;
	char ch; 
	Ptr_STU1 stud1=(Ptr_STU1)malloc(sizeof(STU1));
out5:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                   1,班级: %s                                    \n\n",clname);
	printf("                                   2,姓名: %s                                    \n\n",name);
	printf("                                   3,性别: %s                                    \n\n",sex);
	printf("                                   4,出生日期: %s                                \n\n",age);
	printf("                                   5,确认查询\n\n");
	printf("                                   6,放弃查询\n\n");
	printf("\n\n                     请选择数字符号进行修改查询条件或放弃查询"); 
	printf("\n\n                     请选择性的填写光键词于恰当序号后,关键词不必完整但一定要连续且无误,也可以不填\n\n"); 
	choice=getch();
	switch(choice){                                                                          //有点缺陷,就是如果选错了,就无法重新选过 
		case '1':{
			printf("班级:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(clname,x);
			goto out5;
			break;
		}
		case '2':{
			printf("姓名:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(name,x);
			goto out5;
			break;
		}
		case '3':{
			printf("性别:");
			scanf("%s",x);
			if(strcmp(x,"男")!=0&&strcmp(x,"女")!=0){
				memset(x,0,sizeof(x));
				printf("性别请输男或女!");
				Sleep(1000); 
			}else{
				strcpy(sex,x);
			}
			goto out5; 
			break;
		}
		case '4':{
			printf("出生日期:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(age,x);
			goto out5;
			break;
		}
		case '5':{
			system("CLS");
			printf("\n\n");
			for(stud1=L1->next;stud1!=NULL;stud1=stud1->next){
				if(strcmp(clname,"\0")!=0&&strstr(stud1->clname,clname)==NULL)continue;
				if(strcmp(name,"\0")!=0&&strstr(stud1->name,name)==NULL)continue;
				if(strcmp(sex,"\0")!=0&&strstr(stud1->sex,sex)==NULL)continue;
				if(strcmp(age,"\0")!=0&&strstr(stud1->age,age)==NULL)continue;
				printf("\n     / 学号:%s / 姓名:%s / 性别:%s / 班级:%s / 密码:%s /\n\n",stud1->id,stud1->name,stud1->sex,stud1->clname,stud1->code);
			}
				printf("\n----------------------------------------------------------------------------------------\n");
				printf("显示完毕,按空格键返回");
				while(1){
					ch=getch();
					if(ch==' ')break;
					}	
		}
		case '6':{
			break;
		}
		default:{
			goto out5;
			break;
		}
	}
}

//管理员查改老师信息(已完成) 
void Page1_3_2_page(){
	char choice;
J: 
	system("CLS");
	printf("\n\n\n\n");
	printf("                                                 老师信息                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,添加新老师                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,查改老师信息                                                         \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_3_2_1_change();
			goto J;
			break;
		}
		case '2':{
			page1_3_2_2_search_or_change();
			goto J;
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n\n\n\n\n\n\n返回管理员页面中.....");  
			Sleep(1000);
			break;
		}
	}
}

//管理员添加老师信息(已完成) 
void Page1_3_2_1_change(){
	char id[50]={'\0'},name[50]={'\0'},sex[10]={'\0'},age[100]={'\0'},x[100]={'\0'};
	char choice;
	int pand1=0,pand2=0,pand3=0,pand4=0,sum;
	Ptr_TEA1 teach1=(Ptr_TEA1)malloc(sizeof(TEACH1));
I:
	system("CLS");
	printf("\n\n\n\n                                   1,工号:%s                                    \n\n",id);
	printf("                                   2,姓名: %s                                    \n\n",name);
	printf("                                   3,性别: %s                                    \n\n",sex);
	printf("                                   4,年龄: %s                                \n\n",age);
	printf("                                   5,确认添加\n\n");
	printf("                                   6,放弃添加"); 
	printf("\n\n\n\n\n\n\n\n\n                     请选择数字符号进行修改创建或放弃创建\n\n"); 
	choice=getch();
	switch(choice){                                                                          //有点缺陷,就是如果选错了,就无法重新选过 
		case '1':{
			printf("工号:");
			scanf("%s",x);
			if(strlen(x)!=18){
				memset(x,0,sizeof(x));
				printf("请输入18位工号");
				Sleep(1000); 
			}else if(Search_teach1(x)!=NULL){
				memset(x,0,sizeof(x));
				printf("该工号已被添加,请勿重复添加!");
				Sleep(1000); 
			}else{
				strcpy(id,x);
				pand1=1;
			}
			goto I;
			break;
		}
		case '2':{
			printf("姓名:");
			scanf("%s",name);
			pand2=1;
			goto I;
			break;
		}
		case '3':{
			printf("性别:");
			scanf("%s",x);
			if(strcmp(x,"男")!=0&&strcmp(x,"女")!=0){
				memset(x,0,sizeof(x));
				printf("性别请输男或女!");
				Sleep(1000); 
			}else{
				strcpy(sex,x);
				pand3=1;
			}
			goto I; 
			break;
		}
		case '4':{
			printf("年龄:");
			scanf("%s",age);
			pand4=1;
			goto I;
			break;
		}
		case '5':{
			sum=pand1+pand2+pand3+pand4;
			if(sum<4){
				printf("信息未填完整,请补充");
				Sleep(1000);
				goto I;
			}else {
				strcpy(teach1->id,id);
				strcpy(teach1->name,name);
				strcpy(teach1->sex,sex);
				strcpy(teach1->age,age);
				Insert2(teach1);
				printf("创建成功!");
				Sleep(1000);
			}
			break;
		}
		case '6':{
			printf("放弃创建");
			Sleep(1000);
			break;
		}
		default:{
			goto I;
			break;
		}
	}
}

//管理员查找老师信息的页面 (已完成) 
void page1_3_2_2_search_or_change(){
	char choice;
S:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                               老师信息查改                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,输出全部老师信息                                                     \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,通过id查找                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               3,组合关键词查找                                                       \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			page1_3_2_2_2_all();                             //输出所有老师的信息 
			goto S; 
			break;
		}
		case '2':{
			page1_3_2_2_2_id();                            //可以进化为二分查找的,有时间再搞。 
			goto S;
			break;
		}
		case '3':{
			page1_3_2_2_3_key_find(); 
			goto S; 
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n返回主页面");
			Sleep(1000); 
			break;
		}
	}
} 

//输出所有老师的账号,密码,姓名和班级(已完成) 
void page1_3_2_2_2_all(){
	char ch;
	system("CLS");
	Ptr_TEA1 p=L2->next;
	while(p!=NULL){
		printf("\n        / 工号:%s / 姓名:%s / 性别:%s /年龄:%s / 密码:%s /\n\n",p->id,p->name,p->sex,p->age,p->code);
		p=p->next;
	}
	printf("\n----------------------------------------------------------------------------------------\n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
}

//通过id查找,并可以修改 
void page1_3_2_2_2_id(){
	char id[100];
	Ptr_TEA1 p;
	system("CLS");
	printf("\n\n\n\n\n       请输入要查找老师的工号:");
	scanf("%s",id);
	p=Search_teach1(id);
	if(p==NULL){
		printf("\n\n\n\n\n\n无该老师信息!"); 
		Sleep(1000);
	}else{
		page1_3_2_2_2_id_Print(p);                 //还差课程信息 
	}
} 

//管理员通过id查改老师信息 
void page1_3_2_2_2_id_Print(Ptr_TEA1 p){
	char x[100];
	char ch;
T:
	system("CLS");
	printf("\n\n\n\n\n");
	printf("          1:工号:%s",p->id);
	printf("\n\n          2:姓名:%s",p->name);
	printf("\n\n          3:性别:%s",p->sex);
	printf("\n\n          4:年龄:%s",p->age);
	printf("\n\n          5:密码:%s",p->code);
	printf("\n\n          6:选课信息");
	printf("\n\n          7:删除该老师信息"); 
	printf("\n\n                       请选择序号进行修改,按其余键返回");
	ch=getch();
	switch(ch){
		case '1':{
			printf("\n\n工号:");
			scanf("%s",p->id);
			goto T;
			break;
		}
		case '2':{
			printf("\n\n姓名:");
			scanf("%s",p->name);
			goto T;
			break;
		}
		case '3':{
			printf("\n\n性别:");
			scanf("%s",p->sex);
			goto T;
			break;
		}
		case '4':{
			printf("\n\n年龄:");
			scanf("%s",p->age);
			goto T;
			break;
		}
		case '5':{
			printf("\n\n密码:");
			scanf("%s",p->code);
			goto T;
			break;
		}
		case '6':{
			Page1_2_3_1_all(p);
			goto T;
			break;
		}
		case '7':{
			system("CLS");
			printf("\n\n\n\n\n                                         确认删除该老师节点?");
			printf("\n\n        请再次输入待删除老师的工号:");
			scanf("%s",x);
			if(strcmp(x,p->id)==0){
				Delete_teacher(p);
				printf("删除成功!");
				Sleep(1000); 
				return;
			}else{
				printf("工号输入错误"); 
				Sleep(1000);
				goto T;
			}
			break;
		}
		default:{
			printf("\n\n返回主页面!");
			Sleep(1000);
			break;
		}
		
	}
}

//管理员模糊查找老师信息 (已完成) 
void page1_3_2_2_3_key_find(){
	char name[50]={'\0'},sex[10]={'\0'},age[100]={'\0'},x[100]={'\0'};
	char choice;
	char ch; 
	Ptr_TEA1 teach1=(Ptr_TEA1)malloc(sizeof(TEACH1));
out6:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                   1,姓名: %s                                    \n\n",name);
	printf("                                   2,性别: %s                                    \n\n",sex);
	printf("                                   3,年龄: %s                                \n\n",age);
	printf("                                   4,确认查询\n\n");
	printf("                                   5,放弃查询\n\n");
	printf("\n\n\n\n\n                     请选择数字符号进行修改查询条件或放弃查询\n\n"); 
	printf("                     请选择性的填写光键词于恰当序号后,关键词不必完整但一定要连续且无误,也可以不填\n\n"); 
	choice=getch();
	switch(choice){                                                                          //有点缺陷,就是如果选错了,就无法重新选过 
		case '1':{
			printf("姓名:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(name,x);
			goto out6;
			break;
		}
		case '2':{
			printf("性别:");
			scanf("%s",x);
			if(strcmp(x,"男")!=0&&strcmp(x,"女")!=0){
				memset(x,0,sizeof(x));
				printf("性别请输男或女!");
				Sleep(1000); 
			}else{
				strcpy(sex,x);
			}
			goto out6; 
			break;
		}
		case '3':{
			printf("年龄:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(age,x);
			goto out6;
			break;
		}
		case '4':{
			system("CLS");
			printf("\n\n");
			for(teach1=L2->next;teach1!=NULL;teach1=teach1->next){
				if(strcmp(name,"\0")!=0&&strstr(teach1->name,name)==NULL)continue;
				if(strcmp(sex,"\0")!=0&&strstr(teach1->sex,sex)==NULL)continue;
				if(strcmp(age,"\0")!=0&&strstr(teach1->age,age)==NULL)continue;
						printf("\n        / 工号:%s / 姓名:%s / 性别:%s /年龄:%s / 密码:%s /\n\n",teach1->id,teach1->name,teach1->sex,teach1->age,teach1->code);
			}
				printf("/n----------------------------------------------------------------------------------------/n");
				printf("显示完毕,按空格键返回");
				while(1){
					ch=getch();
					if(ch==' ')break;
					}	
		}
		case '5':{
			break;
		}
		default:{
			goto out6;
			break;
		}
	}
}

//管理员管理选课信息 
void Page1_3_3_page(){
	char choice;
X:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                                 课程信息                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,添加新的选课                                                         \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,查改课程信息                                                         \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               3,开启选课时间                                                         \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_3_3_1_change(); 
			goto X;
			break;
		}
		case '2':{
			Page1_3_3_2_search_or_change();
			goto X;
			break;
		}
		case '3':{
			Page1_3_3_3_open_or_close(); 
			goto X;
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n\n\n\n返回管理员页面中....."); 
			Sleep(1000);
			break;
		}
	}
}

//管理员添加选课息 
void Page1_3_3_1_change(){
	char id[100]={'\0'},name[50]={'\0'},is_nessary[50]={'\0'},credit[10]={'\0'},x[100]={'\0'};
	char choice;
	int pand1=0,pand2=0,pand3=0,pand4=0,sum;
	Ptr_CLA1 cla1=(Ptr_CLA1)malloc(sizeof(CLASS1));
W:
	system("CLS");
	printf("\n\n\n\n                                   1,课程编号:%s                                    \n\n",id);
	printf("                                   2,课程名称: %s                                    \n\n",name);
	printf("                                   3,是否必修: %s                                    \n\n",is_nessary);
	printf("                                   4,学分: %s                                \n\n",credit);
	printf("                                   5,确认添加\n\n");
	printf("                                   6,放弃添加"); 
	printf("\n\n\n\n\n\n\n\n\n                     请选择数字符号进行修改创建或放弃创建\n\n"); 
	choice=getch();
	switch(choice){                                                                          //有点缺陷,就是如果选错了,就无法重新选过 
		case '1':{
			printf("课程编号:");
			scanf("%s",x);
			if(strlen(x)!=15){
				memset(x,0,sizeof(x));
				printf("请输入15位课程编号");
				Sleep(1000); 
			}else if(Search_cla1(x)!=NULL){
				memset(x,0,sizeof(x));
				printf("该课程编号已被添加,请勿重复添加!");
				Sleep(1000); 
			}else{
				strcpy(id,x);
				pand1=1;
			}
			goto W;
			break;
		}
		case '2':{
			printf("课程名称:");
			scanf("%s",name);
			pand2=1;
			goto W;
			break;
		}
		case '3':{
			printf("是否必修:");
			scanf("%s",x);
			if(strcmp(x,"必修")!=0&&strcmp(x,"选修")!=0){
				memset(x,0,sizeof(x));
				printf("是否必修请输必修或选修!");
				Sleep(1000); 
			}else{
				strcpy(is_nessary,x);
				pand3=1;
			}
			goto W; 
			break;
		}
		case '4':{
			printf("学分:");
			scanf("%s",credit);
			pand4=1;
			goto W;
			break;
		}
		case '5':{
			sum=pand1+pand2+pand3+pand4;
			if(sum<4){
				printf("信息未填完整,请补充");
				Sleep(1000);
				goto W;
			}else {
				strcpy(cla1->id,id);
				strcpy(cla1->name,name);
				strcpy(cla1->is_nessary,is_nessary);
				strcpy(cla1->credit,credit);
				Insert3(cla1);
				printf("添加成功!");
				Sleep(1000);
			}
			break;
		}
		case '6':{
			printf("放弃添加");
			Sleep(1000);
			break;
		}
		default:{
			goto W;
			break;
		}
	}
}

//管理员查看选课信息 
void Page1_3_3_2_search_or_change(){
	char choice;
out7:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                               选课信息查改                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               1,输出全部选课信息                                                     \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
 	printf("                                               2,通过id查找                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                               3,组合名字关键词模糊查找                                               \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                请按菜单前的数字选择,或按其余键退出选择                                              \n");
	printf("                                                                                                                      \n");
	choice=getch();
	switch(choice){
		case '1':{
			Page1_3_3_2_1_all();
			goto out7; 
			break;
		}
		case '2':{
			Page1_3_3_2_2_id();
			goto out7;
			break;
		}
		case '3':{
			Page1_3_3_2_3_key_find();
			goto out7; 
			break;
		}
		default:{
			printf("\n\n\n\n\n\n\n返回主页面");
			Sleep(1000); 
			break;
		}
	}
}

//输出全部课程信息,课程名称,课程号码,选修还是必修,学分
void Page1_3_3_2_1_all(){
	char ch;
	system("CLS");
	Ptr_CLA1 p=L3->next;
	Ptr_TEA1 tea1;
	while(p!=NULL){
		printf("\n        / 课程号:%s / 课程名:%s / 性质:%s / 学分:%s /\n\n",p->id,p->name,p->is_nessary,p->credit);
		for(tea1=p->teach;tea1!=NULL;tea1=tea1->next){
			printf("\n        / 授课老师工号:%s / 老师名:%s /\n",tea1->id,tea1->name);
		}
		printf("\n\n");
		p=p->next;
	}
	printf("\n----------------------------------------------------------------------------------------\n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
} 

//id查找某课程某老师的学生信息pand1 
void Page1_3_3_2_2_id(){
	char id[100];
	Ptr_CLA1 p;
	system("CLS");
	printf("\n\n\n\n\n       请输入要查找课程的课程号:");
	scanf("%s",id);
	p=Search_cla1(id);
	if(p==NULL){
		printf("\n\n\n\n\n\n无该课程信息!"); 
		Sleep(1000);
	}else{
		page1_3_3_2_2_id_in(p);                  
	}
}

//id查找某课程某老师的学生信息pand2 
void page1_3_3_2_2_id_in(Ptr_CLA1 p){
	char id[100];
	Ptr_TEA1 teach1,teach;
	system("CLS");
	printf("\n\n\n\n\n       请输入要查找老师的工号:");
	scanf("%s",id);
	teach1=Search_teach_in_class_id(p,id);
	if(teach1==NULL){
		printf("\n\n\n\n\n\n无该课程信息!"); 
		Sleep(1000);
	}else{
		teach=Search_teach1(teach1->id);
		page1_3_3_2_2_id_Print(teach,p);                  
	}
}

//id查找某课程某老师的学生信息pand3
void page1_3_3_2_2_id_Print(Ptr_TEA1 tea1,Ptr_CLA1 p){
	char ch;
	Ptr_CLA1 cla1;
	cla1=Search_class_in_teach_id(tea1,p->id);
	Ptr_STU2 stu2=cla1->stu;
	system("CLS");
	printf("\n\n\n\n\n");
	printf("          课程工号:%s",cla1->id);
	printf("\n\n          课程名:%s",cla1->name);
	printf("\n\n          课程性质:%s",cla1->is_nessary);
	printf("\n\n          学分:%s",cla1->credit);
	printf("\n\n          开课老师");
	printf("\n        / 工号:%s / 老师名:%s / 年龄:%s / 性别:%s /\n\n",tea1->id,tea1->name,tea1->age,tea1->sex);
	while(stu2!=NULL){
		printf("\n        / 学号:%s / 姓名:%s / 班级:%s / 重修次数:%s / 电话号码:%s /\n",stu2->id,stu2->name,stu2->clname,stu2->rebuild,stu2->pnum);
		printf("        / 平时分:%s / 期末分:%s / 比例:%s / 综合分:%s /\n\n",stu2->gpa.uaual_score,stu2->gpa.test_score,stu2->gpa.rate,stu2->gpa.overall_score);
		stu2=stu2->next;
	} 
	printf("\n----------------------------------------------------------------------------------------\n");
	printf("显示完毕,按空格键返回");
	while(1){
	ch=getch();
	if(ch==' ')break;
}
}

//管理员模糊查找课程 
void Page1_3_3_2_3_key_find(){
	char key1[100]={'\0'},key2[100]={'\0'},key3[100]={'\0'},key4[100]={'\0'},key5[100]={'\0'},x[100];
	char choice;
	char ch; 
	Ptr_CLA1 cla1=(Ptr_CLA1)malloc(sizeof(CLASS1));
	Ptr_TEA1 tea1;
out8:
	system("CLS");
	printf("\n\n\n\n");
	printf("                                   1,关键词1: %s                                    \n\n",key1);
	printf("                                   2,关键词2: %s                                    \n\n",key2);
	printf("                                   3,关键词3: %s                                    \n\n",key3);
	printf("                                   4,关键词4: %s                                    \n\n",key4);
	printf("                                   5,确认查询\n\n");
	printf("                                   6,放弃查询\n\n");
	printf("\n\n\n\n                     请选择数字符号进行修改查询条件或放弃查询\n\n"); 
	printf("                     请选择性的填写光键词于恰当序号后,关键词不必完整但一定要连续且无误,也可以不填\n\n"); 
	choice=getch();
	switch(choice){                                                                          //有点缺陷,就是如果选错了,就无法重新选过 
		case '1':{
			printf("关键词1:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(key1,x);
			goto out8;
			break;
		}
		case '2':{
			printf("关键词2:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(key2,x);
			goto out8;
			break;
		}
		case '3':{
			printf("关键词3:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(key3,x);
			goto out8;
			break;
		}
		case '4':{
			printf("关键词4:");
			memset(x,0,sizeof(x));
			scanf("%s",x);
			strcpy(key4,x);
			goto out8;
			break;
		}
		case '5':{
			system("CLS");
			printf("\n\n");
			for(cla1=L3->next;cla1!=NULL;cla1=cla1->next){
				if(strcmp(key1,"\0")!=0&&strstr(cla1->name,key1)==NULL)continue;
				if(strcmp(key2,"\0")!=0&&strstr(cla1->name,key2)==NULL)continue;
				if(strcmp(key3,"\0")!=0&&strstr(cla1->name,key3)==NULL)continue;
				if(strcmp(key4,"\0")!=0&&strstr(cla1->name,key4)==NULL)continue;
				printf("\n        / 课程号:%s / 课程名:%s / 性质:%s / 学分:%s /\n\n",cla1->id,cla1->name,cla1->is_nessary,cla1->credit);
				for(tea1=cla1->teach;tea1!=NULL;tea1=tea1->next){
					printf("\n        / 授课老师工号:%s / 老师名:%s /\n",tea1->id,tea1->name);
				}
				printf("\n\n\n\n");
				}
				printf("\n----------------------------------------------------------------------------------------\n");
				printf("显示完毕,按空格键返回");
				while(1){
					ch=getch();
					if(ch==' ')break;
					}	
		}
		case'6':{
			break;
		}
		default:{
			goto out8;
			break;
		}
	}
}

//选课开启管理 
void Page1_3_3_3_open_or_close(){
	char ch;
Y:
	system("CLS");
	printf("\n\n\n\n\n\n\n       1:学生选课状态:%s",Select_class_stu);
	printf("\n\n\n       2:老师开课状态:%s",Select_class_teach);
	printf("\n\n\n                 选择状态前的序号进行状态切换,或按空格键退出");
	ch=getch();
	switch(ch){
		case '1':{
			if(strcmp(Select_class_stu,"关闭")==0){
				strcpy(Select_class_stu,"开启"); 
			}else{
				strcpy(Select_class_stu,"关闭");
			}
			printf("\n\n\n学生选课状态%s",Select_class_stu);
			Sleep(1000);
			goto Y;
			break;
		}
		case '2':{
			if(strcmp(Select_class_teach,"关闭")==0){
				strcpy(Select_class_teach,"开启"); 
			}else{
				strcpy(Select_class_teach,"关闭");
			}
			printf("\n\n\n老师开课状态%s",Select_class_teach);
			Sleep(1000);
			goto Y;
			break;
		}
		case ' ':{
			printf("\n\n\n正在返回上一界面");
			Sleep(1000);
			break;
		}
		default:{
			goto Y;
			break;
		}
	}
}

//关于教务管理系统页面(已完成) 
void Page1_4(){
	system("CLS");
	char ch;
	printf("\n\n\n");
	printf("                                                                                                                      \n");
	printf("                                     欢迎使用华南农业大学教务管理系统                                                 \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("           该教务系统是由智慧帅气的陈老师引导,并由陈绪栋同学设计新型管理系统,功能多,性能优。                       \n");
	printf("           不仅如此,还有感谢大家在制作过程中的帮助,才能有如此好的新型教务管理系统!                                 \n");
	printf("                                                                                                                      \n");
	printf("                                         总设计师:陈老师                                                             \n");
	printf("                                                                                                                      \n");
	printf("                                          设计师:陈绪栋                                                              \n");
	printf("                                                                                                                      \n");
	printf("           鸣谢嘉宾:罗泽华,张洪,叶繁,蔡俊毅,余嘉琪等等人士                                                        \n");
	printf("                                                                                                                      \n");
	printf("\n\n\n\n\n\n\n\n\n\n\n");
	printf("按任意键返回主页面                                                                                                    \n");
	ch=getch();
} 

//帮助页面(已完成) 
void Page1_5(){
	system("CLS");
	char ch;
	printf("\n\n\n");
	printf("                                                                                                                      \n");
	printf("                                     欢迎使用华南农业大学教务管理系统                                                 \n");
	printf("                                                                                                                      \n");
	printf("           如果您在操作过程中发现了一些无法解决的问题,请及时向我们反馈,我们将尽快回复!您的反馈就是对我们最好的帮助。\n");
	printf("                                                                                                                      \n");
	printf("                                                                                                                      \n");
	printf("                                       反馈电话:18938536892                                                          \n");
	printf("                                                                                                                      \n");
	printf("                                       反馈QQ:  2201961842                                                           \n");
	printf("                                                                                                                      \n");
	printf("                                       反馈邮箱:2201961842@qq.com                                                    \n");
	printf("                                                                                                                      \n");
	printf("            工作时间 :                                                                                               \n");
	printf("                      周一到周五 :上午8:00---下午5:00                                                              \n");
	printf("                      周末:       上午9:00---下午4:00                                                              \n");
	printf("                                                                                                                      \n");
	printf("\n\n\n\n\n\n\n\n\n");
	printf("按任意键返回                                                                                                          \n");
	ch=getch();
}

//提示选课是否开启 
void Page1_6(){
	char ch;
	system("CLS");
	printf("\n\n\n\n\n                                                 学生选课:%s",Select_class_stu);
	printf("\n\n\n                                                 老师选课:%s",Select_class_teach);
	printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n按任意键退出"); 
	ch=getch();
}

//离开系统时的图片界面(已完成) 
void Page1_end(){
char ch;
system("CLS");  
printf("\n\n\n\n\n\n                                    即将退出程序,请放大页面欣赏退出形式!");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n按任意键继续");
ch=getch();
system("CLS");  
cout<<"                                                          "<<endl;
cout<<"                                              您已成功退出程序!                                         "<<endl;
cout<<"                                                            "<<endl;
cout<<"                                    欢迎您的再次使用,若有建议欢迎提出!                                 "<<endl;                              
cout<<"                                                                               .ZBBQ                                               "<<endl;                       
cout<<"                                                                              JBBBBBr                                              "<<endl;                        
cout<<"                                                                             XBQBQBBI                                              "<<endl;           
cout<<"                                                                           :DQgggQBBK                                              "<<endl;   
cout<<"                                                                          1MMbDEMQBBP                                              "<<endl;           
cout<<"                                                                         PBgPEdDMQQBd                                              "<<endl;          
cout<<"                                                                       .BBBMRggggMBQZ                                              "<<endl;           
cout<<"                                                                      5BQBBBQBBBMQQBd                                              "<<endl;          
cout<<"                                                                     bB1.  .71QBBQBBd                                              "<<endl;           
cout<<"                                                                    bZ.  .    .5BBBBq                                              "<<endl;           
cout<<"                                                                   qP  ...:.... LBBQ1                                              "<<endl;           
cout<<"                                                                  5b ..:...:..:i vBB.                                              "<<endl;          
cout<<"                                                                 sd. .........ri: bQ                                               "<<endl;           
cout<<"                                                                sg. .........ii::.Eg                                               "<<endl;          
cout<<"                                                               uQi .....:...iii::iMJ                                               "<<endl;           
cout<<"                                                   .:...:iYKEdEMBL .....:.:.:ii:r:vBv                                              "<<endl;           
cout<<"                                                 .KPririiivLjUB5 .....::...irr77:1QU2UJr:.                                         "<<endl;           
cout<<"                                             JPrir::.....    .:....:.....:rvvv7rrEJrr::r7J17:.      .rYJ7ririrrrri::...::...       "<<endl;           
cout<<"                                           iruSi....................:...iYs777ri1QBBQEXLi...rs2r.iI5Lri::::::...:.::::i:irrv17sJ   "<<endl;           
cout<<"                                         .PZv:...:.............:.......:iv7Lr7rJZq5gQBBBQZu: .:YSbL::::i:iii::::...:...::rr7v1PE.. "<<endl;           
cout<<"                             .r7v7552uqqPZq:.:............................:i7rYSKu.  .L1bRBgPr..::v77:::::::::iiiiri7rvr77LsXqXi:. "<<endl;          
cout<<"                    .7s2XPEggQdUriii::...:.:.......................:........:irL:jgMSv   .rUSY.....irvriirrrrv7rirr7777vLU5P2:     "<<endl;          
cout<<"             iKqgDQQBQgZZKP5qs  ..........:::.......................:.:......:rir:2QBQBD2    .....:.:r27ivqKPXXI52SSS5X5PKS.       "<<endl;           
cout<<"             gQBBBBQggqKII5bPv.........:............................:....:....:i::rJ..vXKi...:::.::i:.iJLXdJLvr7ri::iv77:.         "<<endl;           
cout<<"              SBBBBBQgDEEERBgi7:..:ir:ii:.........................:.:.:.......:.:.:..    .:.::::::::::.rK1v::::::.                 "<<endl;           
cout<<"                iPBBBBBBBBBBE:r7rrii::::.........................:.:....  ...:.................::i:i::::YSi..:::.. .               "<<endl;           
cout<<"                   sEBBBBBBBD.:irii.:7s..............................   ... ....................::::::::.IqJ:                      "<<endl;           
cout<<"                      rPBBBBBU...::::Ss.:....................:.::... .XQBBd1 ....:...:.:.......:::::::::.riY5X.                    "<<endl;           
cout<<"                          JPBBQdq1siiSv.i::.......:.............::: .MBBBPrZq ..:.....:.....:::::::::::::r:::1b:    ..... .        "<<endl;           
cout<<"                              7SPRRMED7.:i::.:...........:.:....:.. uBRRgMgBQ. ............:::::::::::::rviri.rXirYIUJLvi::::      "<<endl;          
cout<<"                                   .uP7.:::::.:...:.............:.. sBDKZgQQB:  .  ........:::iiiir7rriiYvrrvv7KXir::......        "<<endl;           
cout<<"                                     Xr..i::::::.:::...:...:........ gQI2KEBK r1juY7.......i:i7Y777v77iJuvvsvjSZi                  "<<endl;           
cout<<"                                     S2.:::::::.::::..................KPKXb2.sqIUu12I.....:ii:iv7rrrrL5ddKPZEPdj:.::.              "<<endl;           
cout<<"                                     .5.::::::::::......:..........:.       vZuusJuIr.....:i:::r7ir5KbIvrLv7r:                     "<<endl;           
cout<<"                                      2Y:::::...  . ..:::..Jv...:..::.......1dqIXqD1..:...::i:iiv1EXjrv7ri:...                     "<<endl;          
cout<<"                           .:i::.:... 7di.::. .rL2SSi..:.:iUr  ..:.:.:..:::r7KPEEb1. ..:.::irivSdPJiirvYuUjY77rri:.                "<<endl;           
cout<<"                           .iirrs12j7jSPK...7PBMd5Iu7:ii777iLs7:7I:::::.:ir7i7K2Y. ...::::7rrLQqJ..:........::iirri.               "<<endl;           
cout<<"                                .:::sKr.uu.:iYLLr:.:irrv7uS5UUj1JJirrr:::i7rrIY. ..::::::rrr7gP:..             ..iii.              "<<endl;           
cout<<"                                  ..Sv..7SJ7ii:.ir7r7rv7v7Y7777rrr7r7rrr7riiIY....::iirrriirERi .  ..                              "<<endl;           
cout<<"                                   .2. .LqJJJU2ILrr7r77vr7irrLv7rrr77v7i::i5s.:iii:irrr7iisgZY. ......                             "<<endl;          
cout<<"                                   :E5uiLZbSSI5Sqvri7r7r7rriririi:::i:rY5PBQv.::ii::iir7UPDU:........ .                            "<<endl;           
cout<<"                               :7vr75ERgDBQRgMEdZIvJLLvYLsLJLsJ11SKZDRQBQgSPgPSIs1jsjI5KU7   . .                                   "<<endl;           
cout<<"                              .i:..r7::r:  .:vuJ25qqPqbPbqdPbPZZDbPPqIUr:...71u2UYI1UYi                                            "<<endl;           
cout<<"                                   ..              . .                   . .                                                       "<<endl;
Sleep(2000);
}
//页面区下分界线

//功能函数上分界线 

//初始化链表 
void Init_link(){
	L1->next=NULL;
	L2->next=NULL;
	L3->next=NULL;
} 

//按学号顺序插入学生节点(已完成) 
Ptr_STU1 Insert1(Ptr_STU1 stud1){
	Ptr_STU1 p=L1->next,pre=L1; 
	stud1->cla=NULL;
	stud1->next=NULL;
	strcpy(stud1->dorid,Initdorid);
	strcpy(stud1->code,Initcode);
	strcpy(stud1->pnum,Initpnum);
	while((p!=NULL)&&(strcmp(p->id,stud1->id)<0)){
		pre=p;
		p=p->next;
	}
		stud1->next=pre->next;
		pre->next=stud1;
	return L1;
}

//按工号顺序插入老师节点(已完成)
Ptr_TEA1 Insert2(Ptr_TEA1 teach1){
	Ptr_TEA1 p=L2->next,pre=L2; 
	teach1->cla=NULL;
	teach1->next=NULL;
	strcpy(teach1->code,Initcode);
	while((p!=NULL)&&(strcmp(p->id,teach1->id)<0)){
		pre=p;
		p=p->next;
	}
		teach1->next=pre->next;
		pre->next=teach1;
	return L2;
}

//按课程号插入课程 
Ptr_CLA1 Insert3(Ptr_CLA1 cla1){
	Ptr_CLA1 p=L3->next,pre=L3; 
	cla1->next=NULL;
	cla1->stu=NULL;
	cla1->teach=NULL;
	strcpy(cla1->rebuild,Initrebuild);
	strcpy(cla1->test_aver_score,Inittest_aver_score); 
	while((p!=NULL)&&(strcmp(p->id,cla1->id)<0)){
		pre=p;
		p=p->next;
	}
		cla1->next=pre->next;
		pre->next=cla1;
	return L3;
}

//删除该学生的节点
Ptr_STU1 Delete_student(Ptr_STU1 stud1){
	Ptr_STU1 p=L1->next,pre=L1,t;
	while((p!=NULL)&&(strcmp(p->id,stud1->id)!=0)){
		pre=p;
		p=p->next;
	}
	if(p!=NULL){
		pre->next=p->next;
		free(p);
	}
	return L1; 
} 

//删除该老师的节点
Ptr_TEA1 Delete_teacher(Ptr_TEA1 teach1){
	Ptr_TEA1 p=L2->next,pre=L2,t;
	while((p!=NULL)&&(strcmp(p->id,teach1->id)!=0)){
		pre=p;
		p=p->next;
	}
	if(p!=NULL){
		pre->next=p->next;
		free(p);
	}
	return L2; 
} 

//查找是否有学生账号信息(已完成) 
Ptr_STU1 Search_stud1(char id[]){
	Ptr_STU1 p=L1->next;
	while(p!=NULL){
		if(strcmp(p->id,id)==0)break;
		p=p->next;
	}
	return p;
}

//查找是否有老师账号信息(已完成) 
Ptr_TEA1 Search_teach1(char id[]){
	Ptr_TEA1 p=L2->next;
	while(p!=NULL){
		if(strcmp(p->id,id)==0)break;
		p=p->next;
	}
	return p;
}

//查找是否有该课程的信息信息(已完成) 
Ptr_CLA1 Search_cla1(char id[]){
	Ptr_CLA1 p=L3->next;
	while(p!=NULL){
		if(strcmp(p->id,id)==0)break;
		p=p->next;
	}
	return p;
}

//找某个老师的课程,成功返回1,失败返回2 
bool Search_class_in_teach(Ptr_TEA1 tea,Ptr_CLA1 cla){
	Ptr_CLA1 p=tea->cla;
	while(p!=NULL){
		if(strcmp(p->id,cla->id)==0)break;
		p=p->next;
	}
	if(p==NULL)return false;
	else return true;
}

//找某个老师的课程,并返回该课程 
Ptr_CLA1 Search_class_in_teach_id(Ptr_TEA1 tea,char id[]){
	Ptr_CLA1 p=tea->cla;
	while(p!=NULL){
		if(strcmp(p->id,id)==0)break;
		p=p->next;
	}
	return p;
}

//查找老师是否在该课程中 
Ptr_TEA1 Search_teach_in_class_id(Ptr_CLA1 p,char id[]){
	Ptr_TEA1 teach1=p->teach;
	while(teach1!=NULL){
		if(strcmp(teach1->id,id)==0)break;
		teach1=teach1->next;
	}
	return teach1;
}

//查看学生是否在课程中 
Ptr_STU2 Search_stud_in_class_id(Ptr_CLA1 p,char id[]){
	Ptr_STU2 stu2=p->stu;
	while(stu2!=NULL){
		if(strcmp(stu2->id,id)==0)break;
		stu2=stu2->next;
	}
	return stu2;
}

//判断该课程是否被该学生选 
bool Search_class_in_stud(Ptr_STU1 stud1,Ptr_CLA1 cla){
	Ptr_CLA2 p=stud1->cla;
	while(p!=NULL){
		if(strcmp(p->id,cla->id)==0)break;
		p=p->next;
	}
	if(p==NULL)return false;
	else return true;
}

//添加课程 给老师 
void Add_class_to_teach(Ptr_TEA1 teach,Ptr_CLA1 cla){
	Ptr_TEA1 newteach=(Ptr_TEA1)malloc(sizeof(TEACH1));
	Ptr_CLA1 newclass=(Ptr_CLA1)malloc(sizeof(CLASS1));
	Ptr_TEA1 ptea=(Ptr_TEA1)malloc(sizeof(TEACH1));
	Ptr_CLA1 pcla=(Ptr_CLA1)malloc(sizeof(CLASS1));
	ptea=cla->teach;
	pcla=teach->cla;
	*newteach=*teach;
	newteach->next=NULL;
	*newclass=*cla;
	newclass->next=NULL;
	if(ptea==NULL){
	cla->teach=newteach;
	}else{
		while(ptea->next!=NULL)ptea=ptea->next;
		ptea->next=newteach;
	}
	if(pcla==NULL){
		teach->cla=newclass;
	}else{
		while(pcla->next!=NULL)pcla=pcla->next;
		pcla->next=newclass;
	}
	
	
}
//功能函数下分界线

//文件操作上分界线

//建立学生主链
void Init_link_student(Ptr_STU1 L1){
	FILE*fp;
	char ch,ch2;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\student.txt","r"); 
	Ptr_STU1 p=L1->next,pre=L1,stu1=(Ptr_STU1)malloc(sizeof(STU1));
	stu1->next=NULL;
	stu1->cla=NULL; 
	while(fscanf(fp,"%s %s %s %s %s %s %s %s",stu1->id,stu1->code,stu1->clname,stu1->name,stu1->sex,stu1->age,stu1->dorid,stu1->pnum)!=EOF){
		ch=fgetc(fp);
		pre->next=stu1;
		pre=pre->next;
		stu1=(Ptr_STU1)malloc(sizeof(STU1));
		stu1->next=NULL;
		stu1->cla=NULL; 
	}
} 

//建立老师主链
void Init_link_teacher(Ptr_TEA1 L2){
	FILE*fp;
	char ch,ch2;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\teacher.txt","r"); 
	Ptr_TEA1 p=L2->next,pre=L2,teach1=(Ptr_TEA1)malloc(sizeof(TEACH1));
	teach1->cla=NULL;
	teach1->next=NULL;
	while(fscanf(fp,"%s %s %s %s %s",teach1->id,teach1->code,teach1->name,teach1->sex,teach1->age)!=EOF){
		ch=fgetc(fp);
		pre->next=teach1;
		pre=pre->next;
		teach1=(Ptr_TEA1)malloc(sizeof(TEACH1));
		teach1->cla=NULL;
		teach1->next=NULL;
	}
} 

//建立课程主链
void Init_link_class(Ptr_CLA1 L3){
	FILE*fp;
	char ch,ch2;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\class.txt","r"); 
	Ptr_CLA1 p=L3->next,pre=L3,cla1=(Ptr_CLA1)malloc(sizeof(CLASS1));
	cla1->next=NULL;
	cla1->stu=NULL;
	cla1->teach=NULL;
	while(fscanf(fp,"%s %s %s %s %s %s",cla1->id,cla1->name,cla1->test_aver_score,cla1->is_nessary,cla1->credit,cla1->rebuild)!=EOF){
		ch=fgetc(fp);
		pre->next=cla1;
		pre=pre->next;
		cla1=(Ptr_CLA1)malloc(sizeof(CLASS1));
		cla1->next=NULL;
		cla1->stu=NULL;
		cla1->teach=NULL;
	}
} 

//链接学生和课程的信息 
void Init_link_combine_student(Ptr_STU1 L1){
	FILE*fp;
	char ch1,ch2,ch3,ch4,ch;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\combinestudent.txt","r"); 
	Ptr_STU1 p;
	Ptr_CLA2 cla2=(Ptr_CLA2)malloc(sizeof(CLASS2)),list;
	cla2->next=NULL;
	cla2->teach=NULL;
	Ptr_TEA1 tea1=(Ptr_TEA1)malloc(sizeof(TEACH1));
	tea1->cla=NULL;
	tea1->next=NULL;
	char id[100]={'\0'};
	while(1){
		if((ch1=fgetc(fp))==EOF)return;
		if(ch1=='S'){
			ch=fgetc(fp);
			fscanf(fp,"%s",id);
			p=Search_stud1(id);
			list=p->cla;
			ch=fgetc(fp);
		while(1){
		if((ch1=fgetc(fp))==EOF)return;
			if(ch1=='C'){
				ch=fgetc(fp);
				fscanf(fp,"%s %s %s %s %s %s %s %s %s",cla2->id,cla2->name,cla2->is_nessary,cla2->gpa.uaual_score,cla2->gpa.test_score,cla2->gpa.rate,cla2->gpa.overall_score,cla2->credit,cla2->rebuild);
				ch=fgetc(fp);
				ch=fgetc(fp);
				ch=fgetc(fp);
				fscanf(fp,"%s %s %s %s %s",tea1->id,tea1->code,tea1->name,tea1->sex,tea1->age);
				ch=fgetc(fp);
				cla2->teach=tea1;
				if(p->cla==NULL){
				p->cla=cla2;
				list=p->cla;	
				}else{
					list->next=cla2;
					list=list->next;
				}
				cla2=(Ptr_CLA2)malloc(sizeof(CLASS2));
				cla2->next=NULL;
				cla2->teach=NULL;
				tea1=(Ptr_TEA1)malloc(sizeof(TEACH1));
				tea1->cla=NULL;
				tea1->next=NULL;
			}else if(ch1=='S'){
				fseek(fp,-1L,SEEK_CUR);
				break;
			}
		}
	}
	}
} 
 
//链接老师和课程的信息 
void Init_link_combine_teacher(Ptr_TEA1 L2){
	FILE*fp;
	char ch1,ch2,ch3,ch4,ch;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\combineteacher.txt","r"); 
	Ptr_TEA1 p;
	Ptr_CLA1 cla1=(Ptr_CLA1)malloc(sizeof(CLASS1)),list1;
	cla1->next=NULL;
	cla1->teach=NULL;
	cla1->stu=NULL;
	Ptr_STU2 stu2=(Ptr_STU2)malloc(sizeof(STU2)),list2;
	stu2->next=NULL;
	char id[100]={'\0'};
	while(1){
		if((ch1=fgetc(fp))==EOF)return;
		if(ch1=='T'){
			ch=fgetc(fp);
			fscanf(fp,"%s",id);
			p=Search_teach1(id);
			//if(p==NULL)printf("ok");
			list1=p->cla;
			ch=fgetc(fp);
		while(1){
		if((ch1=fgetc(fp))==EOF)return;
			if(ch1=='C'){
				ch=fgetc(fp);
				fscanf(fp,"%s %s %s %s %s %s",cla1->id,cla1->name,cla1->test_aver_score,cla1->is_nessary,cla1->credit,cla1->rebuild);
				list2=cla1->stu;
				ch=fgetc(fp);
				if(p->cla==NULL){
				p->cla=cla1;
				list1=p->cla;	
				}else{
					list1->next=cla1;
					list1=list1->next;
				}
				while(1){
				if((ch1=fgetc(fp))==EOF)return;
				if(ch1=='S'){
					ch=fgetc(fp);
					fscanf(fp,"%s %s %s %s %s %s %s %s %s",stu2->id,stu2->name,stu2->clname,stu2->gpa.uaual_score,stu2->gpa.test_score,stu2->gpa.rate,stu2->gpa.overall_score,stu2->rebuild,stu2->pnum);
					ch=fgetc(fp);
					if(cla1->stu==NULL){
						cla1->stu=stu2;
						list2=cla1->stu;
					}else{
						list2->next=stu2;
					}
						stu2=(Ptr_STU2)malloc(sizeof(STU2));
						stu2->next=NULL;
				}else if(ch1=='C'){
					cla1=(Ptr_CLA1)malloc(sizeof(CLASS1));
					cla1->next=NULL;
					cla1->teach=NULL;
					cla1->stu=NULL;
					fseek(fp,-1L,SEEK_CUR);
					break;
				}else if(ch1=='T'){
					cla1=(Ptr_CLA1)malloc(sizeof(CLASS1));
					cla1->next=NULL;
					cla1->teach=NULL;
					cla1->stu=NULL;
					fseek(fp,-1L,SEEK_CUR);
					break;
				}
			}
			}else if(ch1=='T'){
				fseek(fp,-1L,SEEK_CUR);
				break;
			}
		}
	}
	}
} 
 
//链接课程和老师的信息 
void Init_link_combine_class(Ptr_CLA1 L3){
	FILE*fp;
	char ch1,ch2,ch3,ch4,ch;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\combineclass.txt","r"); 
	Ptr_CLA1 p;
	Ptr_TEA1 tea1=(Ptr_TEA1)malloc(sizeof(TEACH1)),list;
	tea1->cla=NULL;
	tea1->next=NULL;
	char id[100]={'\0'};
	while(1){
		if((ch1=fgetc(fp))==EOF)return;
		if(ch1=='C'){
			ch=fgetc(fp);
			fscanf(fp,"%s",id);
			p=Search_cla1(id);
			list=p->teach;
			ch=fgetc(fp);
		while(1){
		if((ch1=fgetc(fp))==EOF)return;
			if(ch1=='T'){
				ch=fgetc(fp);
				fscanf(fp,"%s %s %s %s %s",tea1->id,tea1->code,tea1->name,tea1->sex,tea1->age);
				ch=fgetc(fp);
				if(p->teach==NULL){
				p->teach=tea1;
				list=p->teach;	
				}else{
					list->next=tea1;
					list=list->next;
				}
				tea1=(Ptr_TEA1)malloc(sizeof(TEACH1));
				tea1->cla=NULL;
				tea1->next=NULL;
			}else if(ch1=='C'){
				fseek(fp,-1L,SEEK_CUR);
				break;
			}
		}
	}
	}
} 
 
//从文件中写出是否选课
void Init_choice_class(){
	FILE*fp;
	char ch,ch1;
	char a[10]={'\0'},b[10]={'\0'};
	int t=2;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\choiceclass.txt","r"); 
	while(t--){
		//printf("a");
	if((ch1=fgetc(fp))==EOF)return;
	else if(ch1=='S'){
		ch=fgetc(fp);
		fscanf(fp,"%s",Select_class_stu);
		ch=fgetc(fp);
	}else if(ch1=='T'){
		ch=fgetc(fp);
		fscanf(fp,"%s",Select_class_teach);
		ch=fgetc(fp);
	}
}
	fclose(fp);
}   
 
//读出信息到学生文件中 
void Write_to_file_student(Ptr_STU1 L1){
	FILE*fp;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\student.txt","w"); 
	Ptr_STU1 p=L1->next,pre=L1;
	while(p!=NULL){
		fprintf(fp,"%s %s %s %s %s %s %s %s\n",p->id,p->code,p->clname,p->name,p->sex,p->age,p->dorid,p->pnum);
		p=p->next;
	}
	fclose(fp);
}

//读出信息到教师文件中 
void Write_to_file_teacher(Ptr_TEA1 L2){
	FILE*fp;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\teacher.txt","w"); 
	Ptr_TEA1 p=L2->next,pre=L2;
	while(p!=NULL){
		fprintf(fp,"%s %s %s %s %s\n",p->id,p->code,p->name,p->sex,p->age);
		p=p->next;
	}
	fclose(fp);
}

//读出信息到课程文件中 
void Write_to_file_class(Ptr_CLA1 L3){
	FILE*fp;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\class.txt","w"); 
	Ptr_CLA1 p=L3->next,pre=L3;
	while(p!=NULL){
		fprintf(fp,"%s %s %s %s %s %s\n",p->id,p->name,p->test_aver_score,p->is_nessary,p->credit,p->rebuild);
		p=p->next;
	}
	fclose(fp);
}

//保存学生和课程的信息 
void Write_to_file_combine_student(Ptr_STU1 L1){
	FILE*fp;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\combinestudent.txt","w"); 
	Ptr_STU1 p=L1->next,pre=L1;
	Ptr_CLA2 cla2;
	Ptr_TEA1 tea1;
	while(p!=NULL){
		fprintf(fp,"S %s\n",p->id);
		for(cla2=p->cla;cla2!=NULL;cla2=cla2->next){
			fprintf(fp,"C %s %s %s %s %s %s %s %s %s\n",cla2->id,cla2->name,cla2->is_nessary,cla2->gpa.uaual_score,cla2->gpa.test_score,cla2->gpa.rate,cla2->gpa.overall_score,cla2->credit,cla2->rebuild);
			tea1=cla2->teach;
			fprintf(fp,"T %s %s %s %s %s\n",tea1->id,tea1->code,tea1->name,tea1->sex,tea1->age);
		} 
		p=p->next;
	}
	fclose(fp);
}

//保存老师和课程的信息 
void Write_to_file_combine_teacher(Ptr_TEA1 L2){
	FILE*fp;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\combineteacher.txt","w"); 
	Ptr_TEA1 p=L2->next,pre=L2;
	Ptr_CLA1 cla1;
	Ptr_STU2 stu2;
	while(p!=NULL){
		fprintf(fp,"T %s\n",p->id);
		for(cla1=p->cla;cla1!=NULL;cla1=cla1->next){
			fprintf(fp,"C %s %s %s %s %s %s\n",cla1->id,cla1->name,cla1->test_aver_score,cla1->is_nessary,cla1->credit,cla1->rebuild);
			for(stu2=cla1->stu;stu2!=NULL;stu2=stu2->next){
			fprintf(fp,"S %s %s %s %s %s %s %s %s %s\n",stu2->id,stu2->name,stu2->clname,stu2->gpa.uaual_score,stu2->gpa.test_score,stu2->gpa.rate,stu2->gpa.overall_score,stu2->rebuild,stu2->pnum);	
			}
		} 
		p=p->next;
	}
	fclose(fp);
}

//保存课程和老师的信息
void Write_to_file_combine_class(Ptr_CLA1 L3){
	FILE*fp;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\combineclass.txt","w"); 
	Ptr_CLA1 p=L3->next,pre=L3;
	Ptr_TEA1 tea1;
	while(p!=NULL){
		fprintf(fp,"C %s\n",p->id);
		for(tea1=p->teach;tea1!=NULL;tea1=tea1->next){
			fprintf(fp,"T %s %s %s %s %s\n",tea1->id,tea1->code,tea1->name,tea1->sex,tea1->age);
		} 
		p=p->next;
	}
	fclose(fp);
}
//文件操作下分界线 

//将是否选课写到文件 
void Write_to_file_choice_class(){
	FILE*fp;
	fp=fopen("C:\\Users\\jackc\\Desktop\\教务管理系统文件\\choiceclass.txt","w"); 
	fprintf(fp,"S %s\n",Select_class_stu);
	fprintf(fp,"T %s\n",Select_class_teach);
	fclose(fp);
}

//主函数区上分界线 
int main(){
	Init_link();
	Init_link_student(L1);
	Init_link_teacher(L2);
	Init_link_class(L3);
	Init_link_combine_student(L1); 
	Init_link_combine_teacher(L2);
	Init_link_combine_class(L3); 
	Init_choice_class(); 
	char choice;       							 
A:
	system("CLS");                                
	Page1();                                     //2:起始进入页面(已完成) 
	choice=getch();   							 //通过输入字符来选择功能 
	switch(choice){                              //主分支 
	case '1':{
		Page1_1_regist();                        //学生登录,还有点问题,先做好管理员查学生端再看 
		goto A;                                  //执行完学生操作后回到主页面 
		break;
	}
	case '2':{
		Page1_2_regist();                        //老师登录 
		goto A;
		break;
	}
	case '3':{
		Page1_3_regist();                         //5:管理员的一系列操作 
		goto A;                                    
		break;
	}
	case '4':{                                   //3:关于新教务管理系统(已完成) 
		Page1_4();
		goto A;
		break;
	}	
	case '5':{                                   //4:帮助页面(已完成) 
		Page1_5();
		goto A;
		break;
	}
	case '6':{                                    //计划是由管理员发的一些通知可以在这看 
		Page1_6();
		goto A;
		break;
	}
	default:{                                     //退出程序(已完成)
		Write_to_file_student(L1);                //读出学生信息到文件中  
		Write_to_file_teacher(L2);                //读出老师信息到文件中 
		Write_to_file_class(L3);                  //读出课程信息到文件中 
		Write_to_file_combine_student(L1);        //保存老师和课程的信息 
		Write_to_file_combine_teacher(L2);        //保存课程和老师的信息
		Write_to_file_combine_class(L3);          //保存学生和课程的信息 
		Write_to_file_choice_class();             //是否开启选课 
		Page1_end();
		system("CLS");
		break;
	}
	} 
	return 0;
} 
//主函数区下分界线 
 

 

 


评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值