數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-學(xué)生成績管理系統(tǒng).doc
目 錄 一、問題描述.2 二、基本要求.3三、數(shù)據(jù)結(jié)構(gòu)設(shè)計.4 四、軟件模塊結(jié)構(gòu)圖.5五、程序設(shè)計思想.7六、程序流程圖.117、 源程序.16 八、調(diào)試分析.30 九、測試數(shù)據(jù).31 十、用戶使用手冊.34 十一、心得體會.35一、問題描述在學(xué)生成績管理中,經(jīng)常會遇到求平均成績,統(tǒng)計不及格學(xué)生成績,統(tǒng)計優(yōu)秀學(xué)生人數(shù),以及按成績對學(xué)生進(jìn)行排名等。現(xiàn)假設(shè)有某個班級的若干名學(xué)生,每個學(xué)生都考試完成了4門課程,試對所有學(xué)生的成績完成以下工作:(1)求每門課程的平均成績。(2)輸出所有有不及格課程的學(xué)生的學(xué)號、姓名、全部課程的成績、平均成績。(3)輸出所有平均分在90分以上(含90分)的學(xué)生學(xué)號、姓名。(4)對4門課程中的任何一門,可隨意抽取1門按學(xué)生成績進(jìn)行排序。二、基本要求對學(xué)生信息的輸入完成后,實(shí)現(xiàn)如下功能:1、對學(xué)生信息的查找、插入、刪除、修改。2、分別輸出優(yōu)秀學(xué)生和不及格學(xué)生的信息。3、顯示每們課程的平均成績。4、任意抽取一門課程后,可以按該課程學(xué)生成績對學(xué)生信息進(jìn)行排序。三、數(shù)據(jù)結(jié)構(gòu)的設(shè)計為了對學(xué)生信息進(jìn)行統(tǒng)一操作,使用了結(jié)構(gòu)體這一數(shù)據(jù)結(jié)構(gòu),學(xué)生的各項數(shù)據(jù)信息都能用結(jié)構(gòu)體來表示,具體如下:struct stuint num;/*學(xué)號,整型變量*/ char name50;/*姓名,長度為50的字符串?dāng)?shù)組*/ char classes50/*班級名稱,長度為50的字符串?dāng)?shù)組*/; double gsps_score;/*高等數(shù)學(xué)平時成績,雙精度實(shí)型變量*/ double gsks_score;/*高等數(shù)學(xué)考試成績,雙精度實(shí)型變量*/ double gszh_score;/*高等數(shù)學(xué)綜合成績,雙精度實(shí)型變量*/ double dlps_score;/*電路理論平時成績,雙精度實(shí)型變量*/ double dlks_score;/*電路理論考試成績,雙精度實(shí)型變量*/ double dlzh_score;/*電路理論綜合成績,雙精度實(shí)型變量*/ double yyps_score;/*英語平時成績,雙精度實(shí)型變量*/ double yyks_score;/*英語考試成績,雙精度實(shí)型變量*/ double yyzh_score;/*英語綜合成績,雙精度實(shí)型變量*/ double wlps_score;/*物理平時成績,雙精度實(shí)型變量*/ double wlks_score;/*物理考試成績,雙精度實(shí)型變量*/ double wlzh_score;/*物理綜合成績,雙精度實(shí)型變量*/double pj_score;/*平均成績,雙精度實(shí)型變量*/student1000;/*最多存儲1000個學(xué)生數(shù)據(jù)*/該結(jié)構(gòu)體數(shù)據(jù)定義為全局變量。四、軟件模塊結(jié)構(gòu)圖每門課程的平均成績主菜單控制模塊學(xué)生信息錄入模塊學(xué)生信息查詢模塊學(xué)生信息修改模塊學(xué)生信息刪除模塊學(xué)生信息插入模塊學(xué)生信息輸出模塊按學(xué)號查詢學(xué)生信息按姓名查詢學(xué)生信息輸出優(yōu)秀學(xué)生相關(guān)信息輸出不及格學(xué)生信息課程成績統(tǒng)計模塊按單科成績排名次模塊功能描述:a.主菜單控制模塊:主菜單直接控制七個模塊(學(xué)生信息輸出模塊的兩個子模塊直接歸主菜單控制),在各模塊間起到紐帶的作用。在主菜單,可以通過選擇進(jìn)入其他模塊,其他模塊運(yùn)行結(jié)束后也可回到主菜單繼續(xù)選擇。b.學(xué)生信息錄入模塊:循環(huán)輸入學(xué)生信息,建立臨時的學(xué)生信息數(shù)據(jù)庫。c.學(xué)生信息查詢模塊:可選擇按學(xué)號或者按姓名查詢學(xué)生信息,如學(xué)生信息不存在則給出提示。d.學(xué)生信息修改模塊:查找到要修改的學(xué)生信息后,可對該學(xué)生的信息進(jìn)行逐項修改。e.學(xué)生信息刪除模塊:查找到要刪除的學(xué)生信息后,可對其進(jìn)行刪除操作。f.學(xué)生信息插入模塊:在數(shù)據(jù)庫末尾插入學(xué)生信息,逐項輸入要插入的學(xué)生信息即可。g.學(xué)生信息輸出模塊:輸出優(yōu)秀學(xué)生信息模塊能夠輸出優(yōu)秀學(xué)生(平均成績大于等90分)的學(xué)號和姓名;輸出不及格學(xué)生信息模塊能夠輸出不及格學(xué)生的相關(guān)信息。h.課程成績統(tǒng)計模塊:可以得到每門課程的平均成績,還可以任意抽取一門課按單科成績排定學(xué)生名次。五、程序設(shè)計思想結(jié)構(gòu)化的程序設(shè)計主要靠設(shè)計和調(diào)用各模塊的函數(shù)來實(shí)現(xiàn)。本程序設(shè)計了多個函數(shù),每個函數(shù)自身能完成一個任務(wù),有的函數(shù)和別的函數(shù)結(jié)合能完成更大的任務(wù)。每一個模塊功能的實(shí)現(xiàn)其實(shí)就是對函數(shù)的調(diào)用,本說明首先介紹本程序所涉及的子函數(shù),再介紹主函數(shù),最后介紹程序整體的實(shí)現(xiàn)過程。1.void Inputfun() 此函數(shù)較特別,它只進(jìn)行輸入操作,但由于此函數(shù)所包含的語句較長且需要被其他三個函數(shù)使用,為方便調(diào)用單寫了一個函數(shù)。此函數(shù)在源程序中放在最前,所以在此先作說明。此函數(shù)可細(xì)分為11個小塊,用來輸入學(xué)生的基本數(shù)據(jù)。每小塊的結(jié)構(gòu)基本相同即for(;)基本語句 +一個continue語句+基本語句+一個break語句之所以用這個結(jié)構(gòu)為了使輸入的數(shù)據(jù)更加正規(guī)。比如在分?jǐn)?shù)的輸入中就限定了只能輸入0至100之間的數(shù)值,這也符合分?jǐn)?shù)錄入規(guī)則。需要特別注意的是,這個函數(shù)完成了本程序中要做的兩個計算。其一是在每門課的考試試成績輸入后完成了對這門課的綜合成績的加權(quán)計算(考試成績*0.7+平時成績*0.3);其二是在最后一門課程的綜合成績算出后,計算了該學(xué)生四門課的平均成績。2.void Getinformation() 此函數(shù)用來錄入學(xué)生信息。它調(diào)用了void Inputfun()函數(shù),其實(shí)它的主體部分就是void Inputfun()函數(shù)。這函數(shù)還用了一個for循環(huán)以達(dá)到循環(huán)輸入的目的。3.int Searchbynum (int no)int Searchbyname (char na50) 這是兩個“兄弟函數(shù)”,是按學(xué)號查找和按姓名查詢模塊中的兩個重要函數(shù)。主要功能是根據(jù)用戶輸入的學(xué)號姓名返回改學(xué)生所在的的數(shù)組下標(biāo)。利用for循環(huán)嵌套一個if語句實(shí)現(xiàn),若找到學(xué)生該學(xué)生信息就返回數(shù)組下標(biāo),若找不到就返回-1。4.void Seekinformation()void Printinformation(int x) 這兩個函數(shù)關(guān)系緊密,所以一起介紹。void Seekinformation()函數(shù)利用for循環(huán)和if語句使查找中能夠使用學(xué)號和姓名兩種方式。如源程序所示,在用if語句確定了查找方式后先后調(diào)用了int Searchbynum (int no)int Searchbyname (char na50)和void Printinformation(int x)兩個函數(shù),根據(jù)int Searchbynum (int no)int Searchbyname (char na50)返回的數(shù)組下標(biāo),運(yùn)用void Printinformation(int x)輸出所查詢的內(nèi)容。所以int Searchbynum (int no)int Searchbyname (char na50)void Seekinformation()void Printinformation(int x)這四個函數(shù)是查詢模塊的四個聯(lián)系緊密的重要函數(shù),在它們的共同作用下查詢模塊的功能得以實(shí)現(xiàn)。5.void Modifyinformation() 此函數(shù)用于修改學(xué)生信息?;驹砭褪怯幂斎氲男聰?shù)據(jù)覆蓋原來的老數(shù)據(jù),達(dá)到修改的目的。本函數(shù)還調(diào)用了查找模塊的函數(shù),使修改前能按學(xué)號或姓名找到要修改的學(xué)生信息。修改過程中調(diào)用了Inputfun()函數(shù)6.void Deleteinformation() 此函數(shù)用于刪除學(xué)生信息。同樣調(diào)用了查找模塊的函數(shù)。刪除模塊的關(guān)鍵語句是for (i=x;i<999;i+) studenti=studenti+1;從要刪除的那一個數(shù)據(jù)開始,用后一個數(shù)據(jù)覆蓋它,一直循環(huán)到最后,相當(dāng)于把開始的第一個數(shù)據(jù)刪除了。7.void Insertinformaton() 此函數(shù)用于插入學(xué)生數(shù)據(jù)。由于沒有用鏈表,所以選擇插入在最后一個有效數(shù)據(jù)之后。本函數(shù)運(yùn)用if(studentj.num=0)這個語句找到了最后一個有效數(shù)據(jù)之后的數(shù)組下標(biāo)j,然后將數(shù)據(jù)輸入到studentj中,便完成的了插入。插入過程中,調(diào)用了Inputfun()函數(shù)。8.void Showthefail() 此函數(shù)用于顯示不及格學(xué)生的信息。能夠按要求輸出不及格學(xué)生的學(xué)號、姓名、各科成績以及平均成績。首先用這條if語句搜索該學(xué)生是否有成績不及格,當(dāng)四門課中至少有一門不及格時會輸出該學(xué)生的相關(guān)信息。9.void Stu_p() 此函數(shù)用于輸出優(yōu)秀學(xué)生(平均成績大于90分)的信息,利用for循環(huán)和條件判斷句輸出找出相應(yīng)的學(xué)生輸出相關(guān)信息。10.void Chengjitongji()此函數(shù)用于按要求統(tǒng)計成績。有分別統(tǒng)計每門課的平均成績的功能;還能夠按每門課程的成績對學(xué)生進(jìn)行排序,使學(xué)生在該門課的表現(xiàn)一目了然。排序中用到了冒泡排序的方法。9. void main() 下面對主函數(shù)作簡要說明。Switch語句是函數(shù)的主體:switch(c)/*利用switch語句集成各個功能函數(shù)*/case 1 : Getinformation();break;/*獲得學(xué)生信息*/case 2 : Seekinformation();break;/*查找學(xué)生信息*/case 3 : Modifyinformation();break;/*修改學(xué)生信息*/case 4 : Deleteinformation();break;/*刪除學(xué)生信息*/case 5 : Insertinformaton();break;/*插入學(xué)生信息*/case 6 : Stu_p();break;/*顯示優(yōu)秀學(xué)生信息*/case 7 : Showthefail();break;/*顯示不及格學(xué)生信息*/case 8 : Chengjitongji();break;/*課程成績的統(tǒng)計*/case 0 : exit(0);/*退出*/default: break;default: break;通過一個數(shù)值輸入函數(shù),使用戶在簡單的數(shù)值輸入后就可輕松調(diào)用各模塊。還使用了for (;)使各模塊能夠循環(huán)調(diào)用。11.最后對程序的整體實(shí)現(xiàn)過程作個簡要說明。源程序中多處運(yùn)用continue和break語句,同時配合scanf函數(shù)和if條件判斷語句,使用戶能夠根據(jù)提示通過簡單的數(shù)值輸入來選擇下一步該做什么。中文界面,用戶很容易根據(jù)提示上手,簡單易用。六、程序流程圖開始系統(tǒng)啟動口令輸入a=? a=1? N 口令錯誤,系統(tǒng)即將關(guān)閉! Y進(jìn)入選擇菜單 N c=1? Y 錄入學(xué)生信息 c=2? N Y查找學(xué)生信息c=3? N Y修改學(xué)生信息 Nc=4? 刪除學(xué)生信息c=5? Y N c=6? N Y插入學(xué)生信息 c=7? Y 優(yōu)秀學(xué)生信息 N 不及格學(xué)生信息c=8? N Y Y N課程成績統(tǒng)計 N結(jié)束以上為主函數(shù)流程圖,主函數(shù)下八個供選擇的模塊只是簡單的用一個執(zhí)行框表示?,F(xiàn)分別畫出八個模塊的流程圖:1、 錄入學(xué)生成績:開始輸入學(xué)生信息及成績是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0結(jié)束開始2、查找學(xué)生信息:按學(xué)號查找請按1,按姓名查找請按2 2 1輸出相應(yīng)姓名所對應(yīng)的信息輸出相應(yīng)學(xué)號所對應(yīng)的信息是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0結(jié)束 03、修改學(xué)生信息:開始調(diào)用查找函數(shù)找到要修改的信息輸入修改后的信息是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0結(jié)束4、刪除學(xué)生信息:開始調(diào)用查找函數(shù)找到要刪除的信息是否刪除?是按1,否按0 1 刪除成功 是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 結(jié)束 0開始5、插入學(xué)生信息:輸入要插入的信息是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0 結(jié)束 6、優(yōu)秀學(xué)生信息:開始學(xué)生平均成績是否大于等于90? N Y輸出該生學(xué)號和姓名 Y 檢索完畢? N 結(jié)束 Y 7、 不及格學(xué)生信息:開始判斷該生是否有不及格科目 N Y 輸出該該生學(xué)信息 檢索完畢? N Y結(jié)束8、 成績統(tǒng)計模塊:開始每門課程平均成績請按1,單科成績排名請按2 1 2 輸出每門課程平均成績選擇要排名的科目輸出該科成績排名結(jié)束七、源程序#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>struct stu/*定義結(jié)構(gòu)體*/int num; char name50; char classes50; double gsps_score; double gsks_score; double gszh_score; double dlps_score; double dlks_score; double dlzh_score; double yyps_score; double yyks_score; double yyzh_score; double wlps_score; double wlks_score; double wlzh_score; double pj_score;student1000;int a,b,c,d,x,i,j,k,s,y,flag;char s150,c1;double f,t,gp,dp,yp,wp;/*錄入、修改、插入學(xué)生信息三個模塊調(diào)用了輸入模塊*/void Inputfun()/*輸入學(xué)生信息模塊*/for(; ;)/*設(shè)計死循環(huán)以至于在輸入格式錯誤時可以再次輸入*/ printf("請輸入班級名稱:t"); /*輸入班級名稱*/ scanf("%s",&s1); if(strlen(s1)>20) printf("您輸入的班級名稱過長!n"); continue; strcpy(studenti.classes,s1); break; /*格式正確后跳出死循環(huán)*/ for(; ;) printf("請輸入學(xué)號:t");/*輸入學(xué)號*/ scanf("%d",&b); if(studenti.num<0) printf("您輸入的學(xué)號錯誤!n"); continue; studenti.num=b; break; for(; ;) printf("請輸入姓名:t");/*輸入姓名*/ scanf("%s",&s1); if(strlen(s1)>20) printf("您輸入的姓名過長!n"); continue; strcpy(studenti.name,s1); break; for(; ;) printf("請輸入該生高等數(shù)學(xué)平時成績:t");/*輸入各科平時成績和考試成績*/ scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.gsps_score=f; break; for(; ;) printf("請輸入該生高等數(shù)學(xué)考試成績:t"); scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.gsks_score=f; studenti.gszh_score=studenti.gsks_score*0.7+studenti.gsps_score*0.3;/*按考試成績70%平時成績30%算該門課程的最終成績*/ break; for(; ;) printf("請輸入該生電路理論平時成績:t"); scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.dlps_score=f; break; for(; ;) printf("請輸入該生電路理論考試成績:t"); scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.dlks_score=f; studenti.dlzh_score=studenti.dlks_score*0.7+studenti.dlps_score*0.3; break; for(; ;) printf("請輸入該生英語平時成績:t"); scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.yyps_score=f; break; for(; ;) printf("請輸入該生英語考試成績:t"); scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.yyks_score=f; studenti.yyzh_score=studenti.yyks_score*0.7+studenti.yyps_score*0.3; break;for(; ;) printf("請輸入該生物理平時成績:t"); scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.wlps_score=f; break; for(; ;) printf("請輸入該生物理考試成績:t"); scanf("%lf",&f); if(f>100|f<0) printf("成績不合理!請您輸入合理的成績.n"); continue; studenti.wlks_score=f; studenti.wlzh_score=studenti.wlks_score*0.7+studenti.wlps_score*0.3; studenti.pj_score=(studenti.yyzh_score+studenti.dlzh_score+studenti.gszh_score+studenti.wlzh_score)/4;/*計算每個學(xué)生的平均成績*/ break; /*錄入學(xué)生信息模塊*/void Getinformation() /*獲得學(xué)生信息*/ for (i=0;i<1000;i+)/*利用循環(huán)連續(xù)輸入學(xué)生信息*/ if(i=0) system("cls"); printf("請根據(jù)提示輸入學(xué)生的信息nn"); else printf("請輸入下一個學(xué)生的信息nn"); Inputfun();printf("繼續(xù)請按1,返回主菜單請按0.n"); scanf("%d",&a); if(a=0) break;/*查詢模塊:包含四個函數(shù),函數(shù)間有聯(lián)系*/ int Searchbynum (int no) /*按學(xué)號查找*/for (j=0;j<1000;j+) if (studentj.num=no) return j; return -1;int Searchbyname (char na50)/*按姓名查找*/for (k=0;k<1000;k+) if (strcmp(studentk.name,na)=0) return k; return -1; void Printinformation(int x)/*輸出學(xué)生信息*/ if (x=-1)printf("該學(xué)生信息不存在!n");elseprintf("班級:%sn",studentx.classes); printf("學(xué)號:%dn",studentx.num);printf("姓名:%snn",studentx.name);printf("高數(shù)平時成績:%5.2fn",studentx.gsps_score);printf("高數(shù)考試成績:%5.2fn",studentx.gsks_score);printf("高數(shù)綜合成績:%5.2fnn",studentx.gszh_score);printf("電路平時成績:%5.2fn",studentx.dlps_score);printf("電路考試成績:%5.2fn",studentx.dlks_score);printf("電路綜合成績:%5.2fnn",studentx.dlzh_score);printf("英語平時成績:%5.2fn",studentx.yyps_score);printf("英語考試成績:%5.2fn",studentx.yyks_score);printf("英語綜合成績:%5.2fnn",studentx.yyzh_score);printf("物理平時成績:%5.2fn",studentx.wlps_score);printf("物理考試成績:%5.2fn",studentx.wlks_score);printf("物理綜合成績:%5.2fnn",studentx.wlzh_score);printf("平均成績:%5.2fn",studentx.pj_score); void Seekinformation()/*查詢學(xué)生信息*/for(; ;)system("cls");printf("按學(xué)號查找請按1,按姓名查找請按2n");/*提供兩種查找方式*/scanf("%d",&a);if(a=1)system("cls");printf("請輸入要查找的學(xué)生的學(xué)號n");scanf("%d",&d);x=Searchbynum (d);/*調(diào)用按學(xué)號查找函數(shù)*/Printinformation(x);else if (a=2)system("cls");printf("請輸入要查找的學(xué)生的姓名n");scanf("%s",&s1);x=Searchbyname (s1);/*調(diào)用按姓名查找函數(shù)*/Printinformation(x);printf("繼續(xù)請按1,返回主菜單請按0.n"); scanf("%d",&a); if(a=0) break;/*學(xué)生信息刪改:包含三個相互獨(dú)立的函數(shù)*/void Modifyinformation() /*修改學(xué)生信息*/for(; ;) system("cls");printf("請先查找要修改的學(xué)生信息!nn");printf("按學(xué)號查找請按1,按姓名查找請按2n");/*先查找后修改*/scanf("%d",&a);if(a=1)system("cls");printf("請輸入要查找的學(xué)生的學(xué)號n");scanf("%d",&d);x=Searchbynum (d);else if (a=2)system("cls");printf("請輸入要查找的學(xué)生的姓名n");scanf("%s",&s1);x=Searchbyname (s1);if (x=-1) printf("學(xué)生信息不存在!n"); else printf("您要修改的學(xué)生信息為:n"); Printinformation(x);printf("請您輸入新值n"); i=x;Inputfun();printf("繼續(xù)請按1,返回主菜單請按0.n"); scanf("%d",&a); if(a=0) break;void Deleteinformation() /*刪除學(xué)生信息*/for (;)system("cls");printf("請先查找要刪除的學(xué)生信息!nn");printf("按學(xué)號查找請按1,按姓名查找請按2n");scanf("%d",&a);if(a=1)system("cls");printf("請輸入要查找的學(xué)生的學(xué)號n");scanf("%d",&d);x=Searchbynum (d);else if (a=2)system("cls");printf("請輸入要查找的學(xué)生的姓名n");scanf("%s",&s1);x=Searchbyname (s1);if (x=-1) printf("學(xué)生信息不存在!n"); else printf("您要刪除的學(xué)生信息為:n"); Printinformation(x);printf("是否真的要刪除該生信息?是請按1,否請按0.n");scanf("%d",&a);if (a=1) for (i=x;i<999;i+) studenti=studenti+1;/*該數(shù)組后的數(shù)組向前移動以覆蓋的方式刪除該數(shù)組*/printf("刪除成功!n"); printf("繼續(xù)請按1,返回主菜單請按0.n"); scanf("%d",&a); if(a=0) break;void Insertinformaton() /*插入學(xué)生信息*/system("cls");for(j=0;j<1000;j+)if(studentj.num=0)x=j;break;for(i=x;i<1000;i+)system("cls");printf("請輸入要插入的學(xué)生信息nn");Inputfun();/*利用信息錄入函數(shù)把學(xué)生信息插在末尾*/printf("繼續(xù)請按1,返回主菜單請按0.n"); scanf("%d",&a); if(a=0) break;/*各科成績排序的四個程序*/void paixugs() /*排序1*/struct stu temp;for (j=1;j<1000;j+) for (k=0;k<999;k+) if (studentk.gszh_score<studentk+1.gszh_score)/*利用冒泡排序的方法完成排序*/ temp=studentk; studentk=studentk+1; studentk+1=temp; system("cls"); printf("學(xué)生成績排序表:nn"); for (i=0;i<1000;i+) if (studenti.num!=0) printf("學(xué)號:%dt",studenti.num); printf("姓名:%st",studenti.name); printf("第%d名:%5.2fn",(i+1),studenti.gszh_score); printf("返回主菜單請按0n"); scanf("%d",&a);void paixudl() /*排序2*/struct stu temp;for (j=1;j<1000;j+) for (k=0;k<999;k+) if (studentk.dlzh_score<studentk+1.dlzh_score) temp=studentk; studentk=studentk+1; studentk+1=temp; system("cls"); printf("學(xué)生成績排序表:nn"); for (i=0;i<1000;i+) if (studenti.num!=0) printf("學(xué)號:%dt",studenti.num); printf("姓名:%st",studenti.name); printf("第%d名:%5.2fn",(i+1),studenti.dlzh_score); printf("返回主菜單請按0n"); scanf("%d",&a);void paixuyy() /*排序3*/struct stu temp;for (j=1;j<1000;j+) for (k=0;k<999;k+) if (studentk.yyzh_score<studentk+1.yyzh_score) temp=studentk; studentk=studentk+1; studentk+1=temp; system("cls"); printf("學(xué)生成績排序表:nn"); for (i=0;i<1000;i+) if (studenti.num!=0) printf("學(xué)號:%dt",studenti.num); printf("姓名:%st",studenti.name); printf("第%d名:%5.2fn",(i+1),studenti.yyzh_score); printf("返回主菜單請按0n"); scanf("%d",&a);void paixuwl() /*排序4*/struct stu temp;for (j=1;j<1000;j+) for (k=0;k<999;k+) if (studentk.wlzh_score<studentk+1.wlzh_score) temp=studentk; studentk=studentk+1; studentk+1=temp; system("cls"); printf("學(xué)生成績排序表:nn"); for (i=0;i<1000;i+) if (studenti.num!=0) printf("學(xué)號:%dt",studenti.num); printf("姓名:%st",studenti.name); printf("第%d名:%5.2fn",(i+1),studenti.wlzh_score); printf("返回主菜單請按0n"); scanf("%d",&a);void Showthefail()/*顯示不及格學(xué)生的情況*/ system("cls"); printf("不及格的學(xué)生:nn"); for (i=0;i<1000;i+) if (studenti.num!=0) if(studenti.gszh_score<60|studenti.dlzh_score<60|studenti.yyzh_score<60|studenti.wlzh_score<60) Printinformation(i);printf("-n");printf("n返回主菜單請按0n"); scanf("%d",&a);void Stu_p()/*優(yōu)秀學(xué)生(平均分大于等于90分)信息*/system("cls");printf("平均分90以上的學(xué)生:nn");for (i=0;i<1000;i+)if (studenti.num!=0) if(studenti.pj_score>=90) printf("學(xué)號:%dn",studenti.num); printf("姓名:%snn",studenti.name);printf("n返回主菜單請按0n"); scanf("%d",&a);void Chengjitongji()/*按要求統(tǒng)計成績*/int flag=0;double gp=0,dp=0,yp=0,wp=0;system("cls");printf("每門課程平均成績請按1,單科成績排序請按2n");scanf("%d",&s);if(s=1)for (i=0;i<1000;i+)gp+=studenti.gszh_score;dp+=studenti.dlzh_score;yp+=studenti.yyzh_score;wp+=studenti.wlzh_score;if (studenti.pj_score>0)flag+;gp=gp/flag;dp=dp/flag;yp=yp/flag;wp=wp/flag;system("cls");printf("高等數(shù)學(xué)平均成績:t%5.2fn",gp);printf("電路理論平均成績:t%5.2fn",dp);printf("英語平均成績:t%5.2fn",yp);printf("物理平均成績:t%5.2fn",wp);printf("n返回主菜單請按0n"); scanf("%d",&a);if(s=2)printf("請選擇nn");printf("高等數(shù)學(xué)成績排序請按1n");printf("電路理論成績排序請按2n");printf("英語成績排序請按3n");printf("物理成績排序請按4n");scanf("%d",&y);if(y=1) paixugs();/*調(diào)用相應(yīng)的排序函數(shù)*/if(y=2) paixudl();if(y=3) paixuyy();if(y=4) paixuwl();/*/void main() /*主函數(shù)*/ printf("tt *nn");/*開始界面*/ printf("tt *學(xué)生成績管理系統(tǒng)*nn"); printf("tt *設(shè)計者:樂駿彥*nn"); printf("tt *指導(dǎo)老師:彭春華*nn"); printf("tt *通信工程0902班*nn"); printf("tt *2011年6月30日*nn"); printf("tt *nn"); printf("nnnn"); printf("請輸入系統(tǒng)啟動口令n");/*啟動口令*/ scanf("%d",&a); if(a!=1)printf("口令錯誤!系統(tǒng)即將關(guān)閉!n");exit(0); for (;)system("cls");printf("請從主菜單選擇您所需要的操作nn");/*系統(tǒng)主菜單*/printf("1.首次輸入學(xué)生信息請按n");printf("2.查找學(xué)生信息n");printf("3.修改學(xué)生信息n");printf("4.刪除學(xué)生信息n");printf("5.插入學(xué)生信息n");printf("6.優(yōu)