已经大体实现了,就是可能还有些小毛病。比如删除的不完善等等。
//头文件区上分界线
#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;
}
//主函数区下分界线