c語言實現學生檔案管理系統
阿新 • • 發佈:2019-01-31
/* 課程設計專案名稱:學生檔案管理系統 作者:施瑞文 時間:2018.3.3 */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #define N sizeof(struct Student) #define M sizeof(struct Password) #define MAX 1000 struct Student { char number[10]; //學號 char name[10]; //姓名 char sex[2]; //性別 struct Birthday //出生日期 { int year; //年 int month; //月 int day; //日 }birtnday; struct Score //成績 { float c_language; //c語言 float math; //高數 float Russian;//俄語 float Russian_hearing; //俄語聽力 float professional; //專業導論 float politics; //政治 }score; char remark[100]; //備註 int num; struct Student *next; }; typedef struct Student Stu; typedef Stu *Stup; typedef struct Password { char password[18]; struct Password *next; }pass; typedef pass *passw; typedef struct TOTAL //總分 { char number[10]; char name[10]; char sex[2]; float c_language; //c語言 float math; //高數 float Russian;//俄語 float Russian_hearing; //俄語聽力 float professional; //專業導論 float politics; //政治 float sum; }Total; Total total[MAX]; //好多自定義函式 void color(short x);//設定顏色 void HideCursor(); //隱藏游標 void toxy(int x, int y); //將游標移動到X,Y座標處 void menu(); //主選單 void over(); //退出軟體 void signin(); //登陸 passw ff(); //將檔案中的內容讀入連結串列,返回值為表頭地址 void save_password(passw p);//儲存密碼 void amend_password(); //修改密碼 void input_information(); //資訊錄入 void amend_information(); //修改資訊 void delete_information(); //刪除資訊 void delete_number(); //按學號查詢刪除 void delete_name(); //按姓名查詢刪除 void save_information(Stup p); //儲存資訊 void print_information(); //資訊顯示 Stup ss(); //將檔案中的內容讀入連結串列,返回值為表頭地址 void find_information(); ///查詢資訊 void find_number_information(); //按學號查詢 void find_name_information(); //按姓名查詢 void statistics_information(); //資訊統計 void average_score(); //平均分 void total_score_ranked(); //總分排名 void fail_numbers(); //各科不及格人數 void assignment(); //將資訊賦值到一個結構體中 void grade_table(); //各科成績分佈 void analyze_c(); //c語言 void analyze_math();//高數 void analyze_Russian();//俄語 void analyze_Russian_hearing();//俄語聽力 void analyze_professional();//專業導論 void analyze_politics(); //政治 int cmp(const void *a,const void *b); int cmp1(const void *a,const void *b); //快速排序 int cmp2(const void *a,const void *b); int cmp3(const void *a,const void *b); int cmp4(const void *a,const void *b); int cmp5(const void *a,const void *b); int cmp6(const void *a,const void *b); char _password[18]; passw password_head; int len; void color(short x) //設定顏色 { if(x>=0&&x<=15) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x); } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x); } } void HideCursor() //隱藏游標 { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void toxy(int x, int y) //將游標移動到X,Y座標處 { COORD pos = { x , y }; HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(Out, pos); } int cmp(const void *a,const void *b) //快速排序 { return ((*(Total *)b).sum)-((*(Total *)a).sum); } int cmp1(const void *a,const void *b) //快速排序 { return ((*(Total *)b).c_language)-((*(Total *)a).c_language); } int cmp2(const void *a,const void *b) //快速排序 { return ((*(Total *)b).math)-((*(Total *)a).math); } int cmp3(const void *a,const void *b) //快速排序 { return ((*(Total *)b).Russian)-((*(Total *)a).Russian); } int cmp4(const void *a,const void *b) //快速排序 { return ((*(Total *)b).Russian_hearing)-((*(Total *)a).Russian_hearing); } int cmp5(const void *a,const void *b) //快速排序 { return ((*(Total *)b).professional)-((*(Total *)a).professional); } int cmp6(const void *a,const void *b) //快速排序 { return ((*(Total *)b).politics)-((*(Total *)a).politics); } void menu() //主選單 { do { system("cls"); //清屏 fflush(stdin); //清空快取 color(14); char t; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(45,7); printf("| |"); toxy(45,8); printf("| 1.資訊錄入 |"); toxy(45,9); printf("| |"); toxy(45,10); printf("| 2.資訊修改 |"); toxy(45,11); printf("| |"); toxy(45,12); printf("| 3.資訊刪除 |"); toxy(45,13); printf("| |"); toxy(45,14); printf("| 4.資訊顯示 |"); toxy(45,15); printf("| |"); toxy(45,16); printf("| 5.資訊查詢 |"); toxy(45,17); printf("| |"); toxy(45,18); printf("| 6.資訊統計 |"); toxy(45,19); printf("| |"); toxy(45,20); printf("| 7.修改密碼 |"); toxy(45,21); printf("| |"); toxy(45,22); printf("| 8.退出軟體 |"); toxy(45,23); printf("--------------------------"); t=getch(); switch(t) { case '1':input_information();break; case '2':amend_information();break; case '3':delete_information();break; case '4':print_information();break; case '5':find_information();break; case '6':statistics_information();break; case '7':amend_password();break; case '8':over();break; default :break; } }while(1);//永遠為真 } passw ff() //將檔案中的內容讀入連結串列,返回值為表頭地址 { FILE *fp; //檔案指標 passw password_head=NULL; fp=fopen("password","a+"); //以追加和讀的方式開啟名為password的檔案 if(fp==NULL) { printf("cannot open file"); } //printf("%p\n",password_head); password_head=(passw)malloc(M); //申請空間 strcpy(password_head->password," "); //初始化密碼 //printf("%s\n",password_head); fread(password_head,M,1,fp); fclose(fp); //關閉檔案 return password_head; //返回值表頭地址 } void signin() //登入 { do { system("cls"); color(13); //好看的顏色 passw p,head; int i=0; char k; head=ff(); //呼叫函式,返回值為表頭地址 p=head; //printf("%s\n",p->password); //printf("%p\n",p); char str[]="000000"; //初始密碼 toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(45,8); printf("請輸入管理者密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='\r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='\b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("\b"); printf(" "); printf("\b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是回車鍵 { _password[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } _password[i]='\0'; if(strcmp(p->password," ")==0) //判斷程式是否是第一次執行, { strcpy(p->password,str);//如果是,則將初始密碼000000賦值給p->password save_password(p); //儲存p } if(strcmp(head->password,_password)==0) //判斷密碼是否輸入正確 { system("cls"); toxy(45,8); printf("正在登陸...."); Sleep(500); menu(); } else { toxy(45,10); printf("密碼錯誤!"); Sleep(500); } }while(1); } void amend_password() //修改密碼 { system("cls"); //清屏 color(12); //看著舒服的顏色 passw p,head; //隱藏游標,看著更舒服 head=ff(); do { system("cls"); //清屏 p=head; char password[18],newpassword[18],t,k; int i=0; toxy(45,6); //將游標移動到座標為(50,5)的位置 printf("學生檔案管理系統"); toxy(48,8); printf("修改密碼"); toxy(45,10); printf("請輸入舊密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='\r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='\b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("\b"); printf(" "); printf("\b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是回車鍵 { password[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } password[i]='\0'; i=0; toxy(45,12); printf("請輸入新密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='\r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='\b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("\b"); printf(" "); printf("\b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是回車鍵 { newpassword[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } newpassword[i]='\0'; if(p!=NULL) //如果p不為空 { if(strcmp(p->password,password)==0) //如果舊密碼輸入正確 { strcpy(p->password,newpassword); //將舊密碼改為新密碼 break; //跳出迴圈 } else //如果舊密碼輸入錯誤 { system("cls"); toxy(46,8); printf("--------------------------"); toxy(46,9); printf("| |"); toxy(46,10); printf("| 密碼錯誤!是否繼續? |"); toxy(46,11); printf("| |"); toxy(46,12); printf("| 1.是 2.否 |"); toxy(46,13); printf("| |"); toxy(46,14); printf("--------------------------"); while(1) { t=getch(); //輸入t if(t=='1') { system("cls"); break; } else if(t=='2') menu(); } } } }while(1); save_password(p); //永遠為真 system("cls"); toxy(45,10); printf("修改成功!即將返回主選單...."); Sleep(500); menu(); } void save_password(passw p) //將p所指向的內容儲存到檔案中 { FILE *fp; fp=fopen("password","w"); //以只寫的方式開啟名為password的檔案 if(fp==NULL) { printf("cannot open file"); } if(fwrite(p,M,1,fp)!=1) //將p所指向的一段大小為M的內容寫入fp所指向的檔案中 { printf("write error!"); } fclose(fp); //關閉檔案 } Stup ss() //將檔案中的內容讀出到連結串列中 { FILE *fp; //檔案指標 Stup head=NULL,p,p1,pr=NULL; int n=0; fp=fopen("student","ab+"); if(fp==NULL) { printf("cannot open file"); } while(!feof(fp))// feof函式可以檢查檔案讀寫位置標誌是否移動到檔案末尾,feof(fp)檢查fp所指向的檔案是否結束,如果是 { //則函式值為真,否則為假,即“!feof(fp)”為真,在while迴圈中檢查 “!feof(fp)”為真,就執行迴圈體 n++; p=(Stup)malloc(N); //向記憶體申請一段空間 fread(p,N,1,fp); //從fp所指向的檔案讀入1個大小為M的資料,儲存到p所指向的空間中 if(n==1) { head=p; p1=p; } else { pr=p1; p1->next=p; p1=p; } } if(pr!=NULL) pr->next=NULL; else if(pr==NULL) head=NULL; fclose(fp); return head; } void input_information()//錄入資訊 { system("cls"); color(15); int i=0,n; Stup p; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("資訊錄入"); toxy(45,8); printf("你需要錄入多少個學生的資訊?請輸入:"); scanf("%d",&n);getchar(); while(i!=n) { system("cls"); i++; p=(Stup)malloc(N); toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("資訊錄入"); toxy(45,8); printf("請輸入學生學號:"); gets(p->number); toxy(45,9); printf("請輸入學生姓名:"); gets(p->name); toxy(45,10); printf("請輸入學生性別(男或女):"); gets(p->sex); toxy(45,11); printf("請輸入學生出生日期(年月日,以空格隔開):"); scanf("%d%d%d",&p->birtnday.year,&p->birtnday.month,&p->birtnday.day);getchar(); toxy(45,12); printf("請輸入c語言成績:"); scanf("%f",&p->score.c_language);getchar(); toxy(45,13); printf("請輸入高數成績:"); scanf("%f",&p->score.math);getchar(); toxy(45,14); printf("請輸入俄語成績:"); scanf("%f",&p->score.Russian);getchar(); toxy(45,15); printf("請輸入俄語聽力成績:"); scanf("%f",&p->score.Russian_hearing);getchar(); toxy(45,16); printf("請輸入專業導論成績:"); scanf("%f",&p->score.professional);getchar(); toxy(45,17); printf("請輸入政治成績:"); scanf("%f",&p->score.politics);getchar(); toxy(45,18); printf("請輸入備註:"); gets(p->remark); save_information(p); } toxy(48,19); printf("錄入完畢!按任意鍵返回主選單!"); getch(); } void amend_information() //修改資訊 { system("cls"); //清屏 color(11); Stup p,head; FILE *fp; int i=15,j=0,c; char number[10]; //學號 char name[10],_name[10]; //姓名 char sex[2]; //性別 int year; //年 int month; //月 int day; //日 float c_language; //c語言 float math; //高數 float Russian;//俄語 float Russian_hearing; //俄語聽力 float professional; //專業導論 float politics; //政治 char remark[100]; //備註 char ch,t; head=ss(); p=head; do { system("cls"); toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(45,7); printf("修改資訊"); toxy(40,9); printf("請輸入您要修改的資訊:"); gets(_name); toxy(20,8); printf("----------------------------------------------------------------------------------------------"); toxy(20,9); printf("學號 姓名 性別 出生--日期 c語言 高 數 俄 語 俄語聽力 專業導論 政 治 備註"); toxy(20,10); printf("----------------------------------------------------------------------------------------------"); i=11;j=0; while(p!=NULL) //將每個結點的p->num都賦為0,以免後面資料干擾 { p->num=0; p=p->next; } p=head; //重新讓p指向head while(p!=NULL) { if(strcmp(p->name,_name)==0) { toxy(18,i); j++; if(p->birtnday.month<10&&p->birtnday.day<10) printf("%d.%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month<10&&p->birtnday.day>=10) printf("%d.%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month>=10&&p->birtnday.day<10) printf("%d.%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else printf("%d.%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); i++; p->num=j; //給p->num賦值,即給滿足搜尋要求的結點編號 } p=p->next; } if(j==0) //如果j=0,即沒有進入前面的搜尋迴圈,也就是沒有找到相應的資訊 { toxy(50,i); printf("沒有找到相應的資訊!(按0返回,按1重新搜尋)"); while(1) //死迴圈是為了防止除0和1的其他按鍵干擾 { ch=getch(); if(ch=='0') { menu();break; } else if(ch=='1') { break; } } if(ch=='1') //如果輸入的ch等於1,則結束本次迴圈 continue; } while(1) { toxy(50,i); printf("請輸入您要修改的資訊的標號:"); scanf("%d",&c); getchar(); i++; if(c<=j) //如果c<=j,即輸入正確 break; else if(c>j) //否則,輸入錯誤 { toxy(50,i); printf("沒有找到您所要修改的資訊,請重新輸入!"); i++; Sleep(500); //暫停0.5秒 } } p=head; //讓p重新指向head,即第一個結點 while(p!=NULL&&p->num!=c) //遍歷連結串列,尋找滿足要求的結點 { p=p->next; } if(p!=NULL) //如果尋找成功,進入修改部分 { system("cls"); //清屏 toxy(45,8); printf("請輸入學生學號:"); gets(number); strcpy(p->number,number); toxy(45,9); printf("請輸入學生姓名:"); gets(name); strcpy(p->name,name); toxy(45,10); printf("請輸入學生性別(男或女):"); gets(sex); strcpy(p->sex,sex); toxy(45,11); printf("請輸入學生出生日期(年月日,以空格隔開):"); scanf("%d%d%d",&year,&month,&day);getchar(); p->birtnday.year=year; p->birtnday.month=month; p->birtnday.day=day; toxy(45,12); printf("請輸入c語言成績:"); scanf("%f",&c_language);getchar(); p->score.c_language=c_language; toxy(45,13); printf("請輸入高數成績:"); scanf("%f",&math);getchar(); p->score.math=math; toxy(45,14); printf("請輸入俄語成績:"); scanf("%f",&Russian);getchar(); p->score.Russian=Russian; toxy(45,15); printf("請輸入俄語聽力成績:"); scanf("%f",&Russian_hearing);getchar(); p->score.Russian_hearing=Russian_hearing; toxy(45,16); printf("請輸入專業導論成績:"); scanf("%f",&professional);getchar(); p->score.professional=professional; toxy(45,17); printf("請輸入政治成績:"); scanf("%f",&politics);getchar(); p->score.politics=politics; toxy(45,18); printf("請輸入備註:"); gets(remark); strcpy(p->remark,remark); toxy(46,16); printf("-------------------------"); toxy(46,17); printf("| |"); toxy(46,18); printf("| 是否確認修改? |"); toxy(46,19); printf("| 1.確認 2.取消 |"); toxy(46,20); printf("| |"); toxy(46,21); printf("-------------------------"); while(1) //死迴圈為防止其他按鍵干擾 { t=getch(); if(t=='1') break; else if(t=='2') { menu(); } } if(t=='1') //如果t等於1,則跳出迴圈 { break; } } }while(1); p=head; //p重新指向頭節點 system("cls"); toxy(44,12); printf("正在修改...."); fp=fopen("student","wb"); //開啟檔案的同時清除檔案內的內容 if(fp==NULL) { printf("cannot open file"); } while(p!=NULL) { if(fwrite(p,N,1,fp)!=1) //將p所指向的內容存入fp所指向的檔案中 { printf("file write error\n"); } p=p->next; } fclose(fp); //關閉檔案 Sleep(500); system("cls"); toxy(44,12); printf("修改成功!正在自動跳轉到主選單...."); Sleep(500); menu(); } void delete_information() //刪除資訊 { do { system("cls"); color(12); char t; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(48,7); printf("資訊刪除"); toxy(45,9); printf("1) 按學號查詢刪除"); toxy(45,11); printf("2) 按姓名查詢刪除"); toxy(48,13); printf("按0返回主選單"); t=getch(); switch(t) { case '0':menu();break; case '1':delete_number();break; case '2':delete_name();break; default :break; } }while(1); } void delete_number() //按學號查詢刪除 { do { system("cls"); color(10); char number[10]; char t,c; int i=11,j=0; Stup head,p,pre=NULL ; FILE *fp; toxy(48,9); printf("請輸入你要刪除的學生的學號:"); gets(number); head=ss(); p=head; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(20,8); printf("----------------------------------------------------------------------------------------------"); toxy(20,9); printf("學號 姓名 性別 出生--日期 c語言 高 數 俄 語 俄語聽力 專業導論 政 治 備註"); toxy(20,10); printf("----------------------------------------------------------------------------------------------"); while(p!=NULL&&strcmp(p->number,number)!=0) { pre=p; p=p->next; } if(p!=NULL) { toxy(20,i); if(p->birtnday.month<10&&p->birtnday.day<10) printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month<10&&p->birtnday.day>=10) printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month>=10&&p->birtnday.day<10) printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); toxy(45,i+1); printf("1.刪除 2.取消"); while(1) { c=getch(); if(c=='1') break; else if(c=='2') delete_number(); } if(pre==NULL) head=head->next; else pre->next=p->next; system("cls"); toxy(45,10); printf("正在刪除...."); p=head->next; fp=fopen("student","wb"); if(fp==NULL) { printf("cannot open file"); } if(fwrite(head,N,1,fp)!=1) { printf("write error"); } fclose(fp); fp=fopen("student","ab"); if(fp==NULL) { printf("cannot open file"); } while(p!=NULL) { if(fwrite(p,N,1,fp)!=1) { printf("write error"); } p=p->next; } fclose(fp); Sleep(500); system("cls"); toxy(45,10); printf("刪除成功!正在返回...."); Sleep(500); delete_information(); } else if(p==NULL) { toxy(48,i); printf("您輸入的資訊不存在!按0返回主選單,1返回上一級選單,2重新查詢"); while(1) { t=getch(); if(t=='0') { menu(); } else if(t=='1') { delete_information(); } else if(t=='2') { break; } } } free(p); }while(1); } void delete_name() //按姓名查詢刪除 { do { system("cls"); color(10); char name[10]; char t,c; int i=11,j=0,key; Stup head,p,pre; FILE *fp; toxy(48,9); printf("請輸入你要刪除的學生的姓名:"); gets(name); head=ss(); p=head; while(p!=NULL) { p->num=0; p=p->next; } p=head; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(20,8); printf("----------------------------------------------------------------------------------------------"); toxy(20,9); printf("學號 姓名 性別 出生--日期 c語言 高 數 俄 語 俄語聽力 專業導論 政 治 備註"); toxy(20,10); printf("----------------------------------------------------------------------------------------------"); while(p!=NULL) { if(strcmp(p->name,name)==0) { toxy(18,i); j++; if(p->birtnday.month<10&&p->birtnday.day<10) printf("%d.%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month<10&&p->birtnday.day>=10) printf("%d.%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month>=10&&p->birtnday.day<10) printf("%d.%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else printf("%d.%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); i++; p->num=j; } p=p->next; } if(j==0) { toxy(48,i); printf("您輸入的資訊不存在!按0返回主選單,1返回上一級選單,2重新查詢"); while(1) { t=getch(); if(t=='0') { menu(); } else if(t=='1') { delete_information(); } else if(t=='2') { break; } } if(t=='2') continue; } while(1) { toxy(50,i); printf("請輸入您要刪除的資訊的標號:"); scanf("%d",&key); getchar(); i++; if(key<=j) //如果c<=j,即輸入正確 break; else if(key>j) //否則,輸入錯誤 { toxy(50,i); printf("沒有找到您所要刪除的資訊,請重新輸入!"); i++; Sleep(500); //暫停0.5秒 } } toxy(46,16); printf("-------------------------"); toxy(46,17); printf("| |"); toxy(46,18); printf("| 確認刪除? |"); toxy(46,19); printf("| 1.確認 2.取消 |"); toxy(46,20); printf("| |"); toxy(46,21); printf("-------------------------"); while(1) { p=head; pre=NULL; c=getch(); if(c=='1') { while(p!=NULL&&p->num!=key) { pre=p; p=p->next; } if(p!=NULL) { if(pre==NULL) head=head->next; else pre->next=p->next; } free(p); break; } else if(c=='2') delete_number(); } system("cls"); toxy(45,10); printf("正在刪除...."); fp=fopen("student","wb"); if(fp==NULL) { printf("cannot open file"); } if(head!=NULL&&fwrite(head,N,1,fp)!=1) { printf("write error"); } fclose(fp); if(head!=NULL) { p=head->next; fp=fopen("student","ab"); if(fp==NULL) { printf("cannot open file"); } while(p!=NULL) { if(fwrite(p,N,1,fp)!=1) { printf("write error"); } p=p->next; } fclose(fp); } Sleep(500); system("cls"); toxy(45,10); printf("刪除成功!正在返回...."); Sleep(500); delete_information(); }while(1); } void print_information() //輸出資訊 { system("cls"); color(11); Stup head,p; int i=11; head=ss(); p=head; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(20,8); printf("----------------------------------------------------------------------------------------------"); toxy(20,9); printf("學號 姓名 性別 出生--日期 c語言 高 數 俄 語 俄語聽力 專業導論 政 治 備註"); toxy(20,10); printf("----------------------------------------------------------------------------------------------"); while(p!=NULL) { toxy(20,i); if(p->birtnday.month<10&&p->birtnday.day<10) printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month<10&&p->birtnday.day>=10) printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month>=10&&p->birtnday.day<10) printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); i++; p=p->next; } toxy(45,i); printf("按任意鍵返回主選單!"); getch(); } void find_information() //查詢資訊 { do { system("cls"); char t; color(10); toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("查詢資訊"); toxy(48,9); printf("1) 學號查詢"); toxy(48,11); printf("2) 姓名查詢"); toxy(48,13); printf("按0返回主選單"); t=getch(); switch(t) { case '0':menu();break; case '1':find_number_information();break; case '2':find_name_information();break; default :break; } }while(1); } void find_number_information() //按學號查詢 { do { system("cls"); color(10); char number[10]; char t; int i=11,j=0; Stup head,p; toxy(48,9); printf("請輸入你要查詢的學生的學號:"); gets(number); head=ss(); p=head; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(20,8); printf("----------------------------------------------------------------------------------------------"); toxy(20,9); printf("學號 姓名 性別 出生--日期 c語言 高 數 俄 語 俄語聽力 專業導論 政 治 備註"); toxy(20,10); printf("----------------------------------------------------------------------------------------------"); while(p!=NULL) { if(strcmp(p->number,number)==0) { toxy(20,i); if(p->birtnday.month<10&&p->birtnday.day<10) printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month<10&&p->birtnday.day>=10) printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month>=10&&p->birtnday.day<10) printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); i++; j++; } p=p->next; } if(j==0) { toxy(48,i); printf("您輸入的資訊不存在!"); } toxy(48,i+1); printf("按0繼續查詢,按1返回"); while(1) { t=getch(); if(t=='0') { break; } else if(t=='1') { find_information(); } } }while(1); } void find_name_information() //按姓名查詢 { do { system("cls"); color(10); char name[10]; char t; int i=11,j=0; Stup head,p; toxy(48,9); printf("請輸入你要查詢的學生的姓名:"); gets(name); head=ss(); p=head; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(20,8); printf("----------------------------------------------------------------------------------------------"); toxy(20,9); printf("學號 姓名 性別 出生--日期 c語言 高 數 俄 語 俄語聽力 專業導論 政 治 備註"); toxy(20,10); printf("----------------------------------------------------------------------------------------------"); while(p!=NULL) { if(strcmp(p->name,name)==0) { toxy(20,i); if(p->birtnday.month<10&&p->birtnday.day<10) printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month<10&&p->birtnday.day>=10) printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else if(p->birtnday.month>=10&&p->birtnday.day<10) printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); else printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark); i++; j++; } p=p->next; } if(j==0) { toxy(48,i); printf("您輸入的資訊不存在!"); } toxy(48,i+1); printf("按0繼續查詢,按1返回"); while(1) { t=getch(); if(t=='0') { break; } else if(t=='1') { find_information(); } } }while(1); } void assignment() //將連結串列的內容賦值給一個結構體陣列 { Stup head,p; head=ss(); p=head; int i=0; while(p!=NULL) { strcpy(total[i].number,p->number); strcpy(total[i].name,p->name); strcpy(total[i].sex,p->sex); total[i].c_language=p->score.c_language; total[i].math=p->score.math; total[i].Russian=p->score.Russian; total[i].Russian_hearing=p->score.Russian_hearing; total[i].professional=p->score.professional; total[i].politics=p->score.politics; total[i].sum=total[i].c_language+total[i].math+total[i].Russian+total[i].Russian_hearing+total[i].professional+total[i].politics; i++; p=p->next; } len=i; } void statistics_information() //資料統計 { do { system("cls"); color(6); char t; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("資料統計"); toxy(48,9); printf("1) 平均分"); toxy(48,11); printf("2) 總分排名"); toxy(48,13); printf("3) 各學科不及格人數"); toxy(48,15); printf("4) 各科成績分佈分析"); toxy(45,17); printf("按0返回主選單"); t=getch(); switch(t) { case '0':menu();break; case '1':average_score();break; case '2':total_score_ranked();break; case '3':fail_numbers();break; case '4':grade_table();break; default :break; } }while(1); } void average_score() //平均分 { system("cls"); color(10); float sum_c=0,sum_math=0,sum_Russian=0,sum_Russian_hearing=0,sum_professional=0,sum_politics=0; float average_c,average_math,average_Russian,average_Russian_hearing,average_professional,average_politics; int i=0; Stup head,p; head=ss(); p=head; while(p!=NULL) { sum_c+=p->score.c_language; sum_math+=p->score.math; sum_Russian+=p->score.Russian; sum_Russian_hearing+=p->score.Russian_hearing; sum_professional+=p->score.professional; sum_politics+=p->score.politics; p=p->next; i++; } average_c=sum_c*1.0/i; average_math=sum_math*1.0/i; average_Russian=sum_Russian*1.0/i; average_Russian_hearing=sum_Russian_hearing*1.0/i; average_professional=sum_professional*1.0/i; average_politics=sum_politics*1.0/i; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(48,7); printf("各學科平均分"); toxy(30,8); printf("----------------------------------------------------"); toxy(30,9); printf(" c語言 高數 俄語 俄語聽力 專業導論 政治"); toxy(30,10); printf("----------------------------------------------------"); toxy(30,11); printf(" %.2f %.2f %.2f %.2f %.2f %.2f",average_c,average_math,average_Russian,average_Russian_hearing,average_professional,average_politics); toxy(45,12); printf("總人數為:%d",i); toxy(50,13); printf("按任意鍵返回主選單"); getch(); } void total_score_ranked() //總分排名 { system("cls"); color(10); assignment(); int j,k=11; qsort(total,len,sizeof(Total),cmp); //快速排序 toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(48,7); printf("總分排名"); toxy(20,8); printf("--------------------------------------------------------------------------------------------"); toxy(20,9); printf("學號 姓名 性別 c語言 高 數 俄 語 俄語聽力 專業導論 政 治 總分 名次"); toxy(20,10); printf("--------------------------------------------------------------------------------------------"); for(j=0;j<len;j++) { toxy(20,k); printf("%s %s %s %.2f %.2f %.2f %.2f %.2f %.2f %.2f %d\n",total[j].number,total[j].name,total[j].sex,total[j].c_language,total[j].math,total[j].Russian,total[j].Russian_hearing,total[j].professional,total[j].politics,total[j].sum,j+1); k++; } toxy(45,k); printf("按任意鍵返回主選單"); getch(); } void fail_numbers() //各科不及格人數 { system("cls"); color(10); int fail_c=0,fail_math=0,fail_Russian=0,fail_Russian_hearing=0,fail_professional=0,fail_politics=0; int i; assignment(); for(i=0;i<len;i++) { if(total[i].c_language<60) fail_c++; if(total[i].math<60) fail_math++; if(total[i].Russian<60) fail_Russian++; if(total[i].Russian_hearing<60) fail_Russian_hearing++; if(total[i].professional<60) fail_professional++; if(total[i].politics<60) fail_politics++; } toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(48,7); printf("各科不及格人數"); toxy(30,8); printf("-----------------------------------------------------"); toxy(30,9); printf("c語言 高 數 俄 語 俄語聽力 專業導論 政 治"); toxy(30,10); printf("-----------------------------------------------------"); toxy(30,11); printf("%-10d%-10d%-10d%-10d%-10d%-10d",fail_c,fail_math,fail_Russian,fail_Russian_hearing,fail_professional,fail_politics); toxy(45,12); printf("請按任意鍵返回"); getch(); } void grade_table() //各科各分數段人數資訊統計 { do { system("cls"); color(10); char t; toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("各分數段統計"); toxy(48,9); printf("(1) c語言"); toxy(48,11); printf("(2) 高等數學"); toxy(48,13); printf("(3) 俄語"); toxy(48,15); printf("(4) 俄語聽力"); toxy(48,17); printf("(5) 專業導論"); toxy(48,19); printf("(6) 政治"); toxy(48,21); printf("按0返回上一級"); t=getch(); switch(t) { case '0':statistics_information();break; case '1':analyze_c();break; case '2':analyze_math();break; case '3':analyze_Russian();break; case '4':analyze_Russian_hearing();break; case '5':analyze_professional();break; case '6':analyze_politics();break; default :break; } }while(1); } void analyze_c() //c語言 { system("cls"); color(11); assignment(); qsort(total,len,sizeof(Total),cmp1); //快速排序 int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0; int i,j,k=12; for(i=0;i<len;i++) { switch((int)(total[i].c_language/10)) { case 10: case 9:numbers_A++;break; case 8:numbers_B++;break; case 7:numbers_C++;break; case 6:numbers_D++;break; default:numbers_E++;break; } } toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("c語言--各分數段統計"); toxy(36,9); printf("-------------------------------------------------"); toxy(36,10); printf("學號 姓名 性別 分數"); toxy(36,11); printf("-------------------------------------------------"); toxy(18,12); printf("90~100人數為:%d",numbers_A); for(j=0;j<numbers_A;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language); k++; } k++; toxy(18,k); printf("80~90人數為:%d",numbers_B); for(j=numbers_A;j<numbers_A+numbers_B;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language); k++; } k++; toxy(18,k); printf("70~80人數為:%d",numbers_C); for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language); k++; } k++; toxy(18,k); printf("60~70人數為:%d",numbers_D); for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language); k++; } k++; toxy(18,k); printf("0~60人數為:%d",numbers_E); for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language); k++; } toxy(48,k); printf("按任意鍵返回上一級"); getch(); } void analyze_math() //高數 { system("cls"); color(11); assignment(); qsort(total,len,sizeof(Total),cmp2); //快速排序 int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0; int i,j,k=12; for(i=0;i<len;i++) { switch((int)(total[i].math/10)) { case 10: case 9:numbers_A++;break; case 8:numbers_B++;break; case 7:numbers_C++;break; case 6:numbers_D++;break; default:numbers_E++;break; } } toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("高數--各分數段統計"); toxy(36,9); printf("-------------------------------------------------"); toxy(36,10); printf("學號 姓名 性別 分數"); toxy(36,11); printf("-------------------------------------------------"); toxy(18,12); printf("90~100人數為:%d",numbers_A); for(j=0;j<numbers_A;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math); k++; } k++; toxy(18,k); printf("80~90人數為:%d",numbers_B); for(j=numbers_A;j<numbers_A+numbers_B;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math); k++; } k++; toxy(18,k); printf("70~80人數為:%d",numbers_C); for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math); k++; } k++; toxy(18,k); printf("60~70人數為:%d",numbers_D); for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math); k++; } k++; toxy(18,k); printf("0~60人數為:%d",numbers_E); for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math); k++; } toxy(48,k); printf("按任意鍵返回上一級"); getch(); } void analyze_Russian() //俄語 { system("cls"); color(11); assignment(); qsort(total,len,sizeof(Total),cmp3); //快速排序 int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0; int i,j,k=12; for(i=0;i<len;i++) { switch((int)(total[i].Russian/10)) { case 10: case 9:numbers_A++;break; case 8:numbers_B++;break; case 7:numbers_C++;break; case 6:numbers_D++;break; default:numbers_E++;break; } } toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("俄語--各分數段統計"); toxy(36,9); printf("-------------------------------------------------"); toxy(36,10); printf("學號 姓名 性別 分數"); toxy(36,11); printf("-------------------------------------------------"); toxy(18,12); printf("90~100人數為:%d",numbers_A); for(j=0;j<numbers_A;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian); k++; } k++; toxy(18,k); printf("80~90人數為:%d",numbers_B); for(j=numbers_A;j<numbers_A+numbers_B;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian); k++; } k++; toxy(18,k); printf("70~80人數為:%d",numbers_C); for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian); k++; } k++; toxy(18,k); printf("60~70人數為:%d",numbers_D); for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian); k++; } k++; toxy(18,k); printf("0~60人數為:%d",numbers_E); for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian); k++; } toxy(48,k); printf("按任意鍵返回上一級"); getch(); } void analyze_Russian_hearing() //俄語聽力 { system("cls"); color(11); assignment(); qsort(total,len,sizeof(Total),cmp4); //快速排序 int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0; int i,j,k=12; for(i=0;i<len;i++) { switch((int)(total[i].Russian_hearing/10)) { case 10: case 9:numbers_A++;break; case 8:numbers_B++;break; case 7:numbers_C++;break; case 6:numbers_D++;break; default:numbers_E++;break; } } toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("俄語聽力--各分數段統計"); toxy(36,9); printf("-------------------------------------------------"); toxy(36,10); printf("學號 姓名 性別 分數"); toxy(36,11); printf("-------------------------------------------------"); toxy(18,12); printf("90~100人數為:%d",numbers_A); for(j=0;j<numbers_A;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing); k++; } k++; toxy(18,k); printf("80~90人數為:%d",numbers_B); for(j=numbers_A;j<numbers_A+numbers_B;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing); k++; } k++; toxy(18,k); printf("70~80人數為:%d",numbers_C); for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing); k++; } k++; toxy(18,k); printf("60~70人數為:%d",numbers_D); for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing); k++; } k++; toxy(18,k); printf("0~60人數為:%d",numbers_E); for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing); k++; } toxy(48,k); printf("按任意鍵返回上一級"); getch(); } void analyze_professional() //專業導論 { system("cls"); color(11); assignment(); qsort(total,len,sizeof(Total),cmp5); //快速排序 int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0; int i,j,k=12; for(i=0;i<len;i++) { switch((int)(total[i].professional/10)) { case 10: case 9:numbers_A++;break; case 8:numbers_B++;break; case 7:numbers_C++;break; case 6:numbers_D++;break; default:numbers_E++;break; } } toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("專業導論--各分數段統計"); toxy(36,9); printf("-------------------------------------------------"); toxy(36,10); printf("學號 姓名 性別 分數"); toxy(36,11); printf("-------------------------------------------------"); toxy(18,12); printf("90~100人數為:%d",numbers_A); for(j=0;j<numbers_A;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional); k++; } k++; toxy(18,k); printf("80~90人數為:%d",numbers_B); for(j=numbers_A;j<numbers_A+numbers_B;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional); k++; } k++; toxy(18,k); printf("70~80人數為:%d",numbers_C); for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional); k++; } k++; toxy(18,k); printf("60~70人數為:%d",numbers_D); for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional); k++; } k++; toxy(18,k); printf("0~60人數為:%d",numbers_E); for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional); k++; } toxy(48,k); printf("按任意鍵返回上一級"); getch(); } void analyze_politics() //政治 { system("cls"); color(11); assignment(); qsort(total,len,sizeof(Total),cmp6); //快速排序 int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0; int i,j,k=12; for(i=0;i<len;i++) { switch((int)(total[i].politics/10)) { case 10: case 9:numbers_A++;break; case 8:numbers_B++;break; case 7:numbers_C++;break; case 6:numbers_D++;break; default:numbers_E++;break; } } toxy(45,6); printf("-----學生檔案管理系統-----"); toxy(50,7); printf("政治--各分數段統計"); toxy(36,9); printf("-------------------------------------------------"); toxy(36,10); printf("學號 姓名 性別 分數"); toxy(36,11); printf("-------------------------------------------------"); toxy(18,12); printf("90~100人數為:%d",numbers_A); for(j=0;j<numbers_A;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics); k++; } k++; toxy(18,k); printf("80~90人數為:%d",numbers_B); for(j=numbers_A;j<numbers_A+numbers_B;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics); k++; } k++; toxy(18,k); printf("70~80人數為:%d",numbers_C); for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics); k++; } k++; toxy(18,k); printf("60~70人數為:%d",numbers_D); for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics); k++; } k++; toxy(18,k); printf("0~60人數為:%d",numbers_E); for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++) { toxy(36,k); printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics); k++; } toxy(48,k); printf("按任意鍵返回上一級"); getch(); } void save_information(Stup p) //將p所指向的內容寫入檔案中 { FILE *fp; fp=fopen("student","ab+"); if(fp==NULL) { printf("cannot open file"); } if(fwrite(p,N,1,fp)!=1) { printf("write error"); } fclose(fp); } void over() //退出軟體 { char t; toxy(45,11); printf("--------------------------"); toxy(45,12); printf("| 您確定要退出嗎? |"); toxy(45,14); printf("| 1.確定 2.取消 |"); toxy(45,15); printf("--------------------------"); while(1) { t=getch(); //輸入t switch(t) { case '1': system("cls"); color(6); toxy(48,10); printf("正在安全退出...."); Sleep(1000); //暫停1秒 system("cls"); color(8); toxy(48,10); printf("已安全退出軟體"); toxy(48,12); printf("謝謝使用!"); toxy(48,14); printf("by-by^_^"); free(password_head); exit(0); break; //終止程式 case '2': menu(); break; //呼叫函式,進入選單 default :break; } } } main() //簡單明瞭的主函式^_^ { HideCursor(); signin(); //登入介面 }