已經大體實現了,就是可能還有些小毛病。比如刪除的不完善等等。
//頭文件區上分界線
#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(" 反饋郵箱:[email protected] \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;
}
//主函數區下分界線