學(xué)生成績管理系統(tǒng)課程說明書_第1頁
學(xué)生成績管理系統(tǒng)課程說明書_第2頁
學(xué)生成績管理系統(tǒng)課程說明書_第3頁
學(xué)生成績管理系統(tǒng)課程說明書_第4頁
學(xué)生成績管理系統(tǒng)課程說明書_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

綜合程序課程設(shè)計說明書課程設(shè)計名稱:綜合程序課程設(shè)計課程設(shè)計題目:學(xué)生成績管理系統(tǒng)學(xué)院名稱:信息工程學(xué)院專業(yè):班級:學(xué)號:姓名: 評分:教師:2015年3月1日由每位學(xué)生填寫、由任教教師保存待查 綜合程序課程設(shè)計任務(wù)書2014-2015學(xué)年第2學(xué)期第1周-2周題目學(xué)生成績管理系統(tǒng)內(nèi)容及要求用C編寫一系統(tǒng),實現(xiàn)學(xué)生信息管理,軟件的入口界面應(yīng)包括如下幾個方面:一、功能要求:(1)信息維護(hù):學(xué)生信息數(shù)據(jù)要以文件的形式保存,能實現(xiàn)學(xué)生信息數(shù)據(jù)的維護(hù)。此模塊包括子模塊有:增加學(xué)生信息、刪除學(xué)生信息、修改學(xué)生信息;(2)信息查詢:查詢時可實現(xiàn)按姓名查詢、按學(xué)號查詢;(3)成績統(tǒng)計:A輸入任意的一個課程名(如數(shù)學(xué))和一個分?jǐn)?shù)段(如60--70),統(tǒng)計出在此分?jǐn)?shù)段的學(xué)生情況;(4)排序:能對用戶指定的任意課程名,按成績升序或降序排列學(xué)生數(shù)據(jù)并顯示排序結(jié)果(使用表格的形式顯示排序后的輸出結(jié)果)。(使用多種方法排序者,加分)二、其它要求:(1)只能使用C或C++語言,源程序要有適當(dāng)?shù)淖⑨?,使程序容易閱讀;(2)采用文本菜單界面;(3)學(xué)生可增加新功能模塊。進(jìn)度安排圖書館、網(wǎng)上查資料:2天;編寫程序:3天;運(yùn)行調(diào)試改正程序:3天; 檢查驗收:2天。學(xué)生姓名:陳方燕指導(dǎo)時間年月日-年月日指導(dǎo)地點:任務(wù)下達(dá)2015年月日任務(wù)完成2015年月日考核方式1.評閱□2.答辯□3.實際操作□4.其它□指導(dǎo)教師系(部)主任注:1、此表一組一表二份,課程設(shè)計小組組長一份;任課教師授課時自帶一份備查。2、課程設(shè)計結(jié)束后與“課程設(shè)計小結(jié)”、“學(xué)生成績單”一并交院教務(wù)存檔。 摘要現(xiàn)代社會越來越趨向智能化,而計算機(jī)是實現(xiàn)智能化的重要工具。學(xué)會用計算機(jī)編程,熟練運(yùn)用C語言是一項重要技能。學(xué)生成績管理是每個教育單位不可缺少的,使用C語言編寫的學(xué)生成績管理系統(tǒng)不僅能快速的實現(xiàn)學(xué)生成績的管理,并且更加方便,功能齊全。本次設(shè)計主要運(yùn)用C語言來設(shè)計一個學(xué)生成績管理系統(tǒng),能實現(xiàn)學(xué)生成績錄入,并以文件形式保存,修改、增加、刪除學(xué)生信息,還能按照學(xué)號或姓名對某一學(xué)生信息進(jìn)行查找,除此之外,還有對學(xué)生成績排序、學(xué)生成績統(tǒng)計等多種功能。關(guān)鍵字:C語言、成績管理、成績查詢目錄摘要·······························2設(shè)計要求·························4系統(tǒng)組成及設(shè)計原理····················52.1系統(tǒng)組成·························52.2設(shè)計原理·························5概要設(shè)計·························63.1系統(tǒng)層次圖························63.2方案說明·························6詳細(xì)設(shè)計·························74.1程序流程圖························74.2模塊詳細(xì)設(shè)計·······················74.2.1界面設(shè)計······················84.2.2主函數(shù)設(shè)計·····················94.2.3文件讀寫設(shè)計····················114.2.4插入學(xué)生信息設(shè)計··················134.2.5修改學(xué)生信息設(shè)計··················144.2.6刪除學(xué)生信息設(shè)計··················164.2.7查詢學(xué)生信息設(shè)計··················174.2.8學(xué)生成績排序查詢設(shè)計················194.2.9統(tǒng)計學(xué)生成績分?jǐn)?shù)段信息設(shè)計·············214.2.10統(tǒng)計掛科學(xué)生成績設(shè)計···············23結(jié)果調(diào)試及分析······················245.1調(diào)試方法························245.2調(diào)試中遇到的問題及解決方法···············24結(jié)論···························25參考文獻(xiàn)·························26附錄······························27設(shè)計要求請用C編寫一系統(tǒng),實現(xiàn)學(xué)生信息管理,軟件的入口界面應(yīng)包括如下幾個方面:(一)功能要求:(1)信息維護(hù):要求:學(xué)生信息數(shù)據(jù)要以文件的形式保存,能實現(xiàn)學(xué)生信息數(shù)據(jù)的維護(hù)。此模塊包括子模塊有:增加學(xué)生信息、刪除學(xué)生信息、修改學(xué)生信息(2)信息查詢:要求:查詢時可實現(xiàn)按姓名查詢、按學(xué)號查詢(3)成績統(tǒng)計:要求:A輸入任意的一個課程名(如數(shù)學(xué))和一個分?jǐn)?shù)段(如60--70),統(tǒng)計出在此分?jǐn)?shù)段的學(xué)生情況。(4)排序:能對用戶指定的任意課程名,按成績升序或降序排列學(xué)生數(shù)據(jù)并顯示排序結(jié)果(使用表格的形式顯示排序后的輸出結(jié)果)(使用多種方法排序者,加分)(二)其它要求:(1)只能使用C或C++語言,源程序要有適當(dāng)?shù)淖⑨?,使程序容易閱讀(2)采用文本菜單界面(3)學(xué)生可增加新功能模塊第二章系統(tǒng)組成及設(shè)計原理2.1系統(tǒng)組成該系統(tǒng)主要包括文件讀寫函數(shù)、增加信息函數(shù)、修改信息函數(shù)、刪除信息函數(shù)、分別按學(xué)號、姓名查詢函數(shù)、求總成績函數(shù)、統(tǒng)計分?jǐn)?shù)段函數(shù)、統(tǒng)計掛科學(xué)生函數(shù)九個模塊,相互之間既相互獨立又相互聯(lián)系。2.2設(shè)計原理本次設(shè)計主要運(yùn)用C語言編寫,按照設(shè)計要求,先確定菜單目錄及所需函數(shù)。在文件函數(shù)部分,主要用到文件指針及文件的讀寫。文件的使用貫穿所有功能,因此在主函數(shù)中要對其進(jìn)行調(diào)用。主函數(shù)主要實現(xiàn)對各個函數(shù)的調(diào)用,用do-while循環(huán)語句和switch()-case選擇判斷語句來調(diào)用相關(guān)函數(shù)功能模塊,并對顯示界面進(jìn)行設(shè)計,是輸出界面方便用戶操作切美觀,主要由printf語句實現(xiàn)。輸出顯示函數(shù)部分主要用printf語句實現(xiàn)輸出內(nèi)容的設(shè)定,并引用結(jié)構(gòu)體顯示所需部分信息。插入、修改、刪除部分則是對文件中學(xué)生信息進(jìn)行相關(guān)操作,插入學(xué)生信息用printf、scanf、及getchar語句對學(xué)生各項信息進(jìn)行錄入,并保存到文件。修改和刪除除了上述語句外,還有if-else語句分情況判斷所要操作學(xué)生是否存在,然后再進(jìn)行修改或刪除。查詢模塊要先獲得學(xué)生的學(xué)號姓名,用Searchnum(charnu[])、Searchname(charname[])函數(shù)實現(xiàn),用到Searchname(charname[])語句實現(xiàn)。排序模塊主要用for循環(huán)及if-else語句實現(xiàn)對總成績或單科成績的比較,再調(diào)用相關(guān)顯示函數(shù)輸出。統(tǒng)計模塊主要用for循環(huán)及if-else語句逐一比較每個學(xué)生成績是否滿足給定條件,若滿足則輸出。第三章概要設(shè)計3.1系統(tǒng)層次圖按單科排序按單科排序退出本系統(tǒng)掛科學(xué)生信息統(tǒng)計某科分?jǐn)?shù)段按總分排序按姓名查詢學(xué)生成績修改學(xué)生信息添加學(xué)生信息刪除學(xué)生信息按學(xué)號查詢學(xué)生信息開始主界面結(jié)束圖3.1學(xué)生成績管理系統(tǒng)結(jié)構(gòu)層次圖3.2方案說明本方案程序簡介易懂,并且功能齊全,可以根據(jù)個人需要而增加功能。程序運(yùn)行后,界面美觀,操作方便。操作中添加、修改、刪除的學(xué)生信息都保存在文件中,確保了數(shù)據(jù)的長久性及其安全性。第四章詳細(xì)設(shè)計4.1程序流程圖程序流程圖如圖4.1:開始開始case58764321091是否繼續(xù)是否繼續(xù)是否繼續(xù)修改學(xué)生信息刪除學(xué)生信息按學(xué)號查尋學(xué)生按總成績排序按姓名查尋學(xué)生統(tǒng)計掛科學(xué)生信息按某一課目成績排序統(tǒng)計某科某分?jǐn)?shù)段成績退出增加學(xué)生信息結(jié)束是否繼續(xù)是否繼續(xù)??是是是是是 否否否否 否 圖4.1學(xué)生成績管理系統(tǒng)流程圖4.2模塊詳細(xì)設(shè)計程序設(shè)計所用函數(shù)如下:1、庫函數(shù)#include<stdio.h>#include<string>;2、主函數(shù)voidmain();3、結(jié)構(gòu)體structStudent;4、寫文件函數(shù)voidwritefile();5、讀文件函數(shù)voidreadfile()6、求總分函數(shù)floatAnd(structStudentstu);7、獲取學(xué)號函數(shù)intSearchnum(charnu[]);8、獲取姓名函數(shù)intSearchname(charname[]);9、顯示學(xué)生信息函數(shù)voidDisplay();10、顯示單個學(xué)生信息函數(shù)voidDSingle(intindex);11、顯示語文成績信息函數(shù)voidDSingle1(intinde);12、顯示數(shù)學(xué)成績信息函數(shù)voidDSingle2(intind);13、顯示英語成績信息函數(shù)voidDSingle3(intin);14、插入學(xué)生信息函數(shù)voidInsert();15、修改學(xué)生信息函數(shù)voidModify();16、刪除學(xué)生信息函數(shù)voidDelete();17、按學(xué)號查詢學(xué)生信息voidSelect1();18、按姓名查詢學(xué)生信息voidSelect2();19、按語文成績排序函數(shù)voidSChinese();20、按數(shù)學(xué)成績排序函數(shù)voidSMath();21、按英語成績排序函數(shù)voidSEnglish();22、按總成績排序函數(shù)voidSall();23、按語文成績統(tǒng)計voidChineses(inta,intb);24、按數(shù)學(xué)成績統(tǒng)計voidMaths(inta,intb);25、按英語成績統(tǒng)計voidEnglishs(inta,intb);26、統(tǒng)計掛科學(xué)生函數(shù)voidLose();4.2.1界面設(shè)計如圖4.2所示:圖4.2主界面圖在此界面用戶可以選擇要操作的選項,回車之后即可進(jìn)入相關(guān)的頁面進(jìn)行操作(例如:選擇1,即可增加學(xué)生記錄)。4.2.2主函數(shù)設(shè)計主函數(shù)主要運(yùn)用do-while循環(huán)語句和switch()-case選擇判斷語句來調(diào)用相關(guān)函數(shù)功能模塊。系統(tǒng)的運(yùn)行是循環(huán)里進(jìn)行的,只有在主界面并選擇“退出”時,才會跳出循環(huán),并退出程序。具體程序如下:voidmain(){intchoice; intm,n;readfile();while(1){/*主菜單*/ printf("\n*******************************"); printf("\n歡迎進(jìn)入\n");printf("學(xué)生成績管理系統(tǒng)"); printf("\n\n*******************************\n"); printf("\n************主菜單************\n");printf("\n1、增加學(xué)生記錄\n");printf("2、修改學(xué)生信息\n");printf("3、刪除學(xué)生信息\n");printf("4、按學(xué)號查詢學(xué)生信息\n"); printf("5、按姓名查詢學(xué)生信息\n");printf("6、按總成績排序\n"); printf("7、按某課程成績排序\n"); printf("8、統(tǒng)計某課程某分?jǐn)?shù)段的情況\n"); printf("9、統(tǒng)計掛科學(xué)生信息\n");printf("10、退出\n"); printf("*********************************\n");printf("請選擇(1-10):");scanf("%d",&choice);getchar();switch(choice){case1:Insert();break;case2:Modify();break;case3:Delete();break;case4:Select1();break; case5:Select2();break;case6:Sall();Display();break; case7: { printf("選擇課程對應(yīng)的代號:\n語文代號1,數(shù)學(xué)代號2,英語代號3,\n輸入-"); scanf("%d",&mark); switch(mark) { case1: SChinese();Display();break; case2: SMath();Display();break; case3: SEnglish();Display(); break; } }break; case9: Lose(); break; case8: printf("選擇課程對應(yīng)的代號:\n語文代號1,數(shù)學(xué)代號2,英語代號3,\n輸入-"); scanf("%d",&mark); switch(mark) { case1: printf("請輸入分?jǐn)?shù)段m-n:"); scanf("%d-%d",&m,&n); Chineses(m,n);break; case2: printf("請輸入分?jǐn)?shù)段m-n:"); scanf("%d-%d",&m,&n); Maths(m,n);break; case3: printf("請輸入分?jǐn)?shù)段m-n:"); scanf("%d-%d",&m,&n); Englishs(m,n); }break; case10:exit(0);break;}writefile(); }}4.2.3文件讀寫設(shè)計此模塊運(yùn)用C語言中文件讀寫相關(guān)知識,定義fp指針,從生成的文件中讀寫學(xué)生信息。若文件中尚未有學(xué)生信息存入,則輸出文件為空;若未能按正確格式寫入,則輸出文件寫入錯誤;若輸入正確,則可以用于其他功能中對學(xué)生信息的調(diào)用。具體程序如下:/*將學(xué)生信息從文件讀出*/voidreadfile(){FILE*fp;inti;if((fp=fopen("studentinformal.txt","rb"))==NULL){printf("文件為空!\n");return;}if(fread(&num,sizeof(int),1,fp)!=1){num=-1;}else{for(i=0;i<num;i++){fread(&students[i],sizeof(structStudent),1,fp);}}fclose(fp);}/*將學(xué)生信息寫入文件*/voidwritefile(){FILE*fp;inti;if((fp=fopen("studentinformal.txt","wb"))==NULL){printf("文件為空!\n");return;}if(fwrite(&num,sizeof(int),1,fp)!=1){printf("文件寫入錯誤!\n");}for(i=0;i<num;i++){if(fwrite(&students[i],sizeof(structStudent),1,fp)!=1){printf("文件寫入錯誤!\n");}}fclose(fp);}4.2.4插入學(xué)生信息設(shè)計插入學(xué)生信息用Insert()函數(shù)實現(xiàn),主要運(yùn)用printf、scanf、getchar語句來實現(xiàn)對學(xué)生信息讀插入,并有判斷是否繼續(xù)輸入語句。功能界面如圖4.3所示,選擇菜單功能“1”即可實現(xiàn)學(xué)生信息的插入。圖4.3插入學(xué)生信息程序設(shè)計:/*插入學(xué)生信息*/voidInsert(){while(1){printf("請輸入學(xué)號:");scanf("%s",&students[num].NUM);getchar();printf("請輸入姓名:");scanf("%s",&students[num].Name);getchar();printf("請輸入語文成績:");scanf("%f",&students[num].Chinese);getchar();printf("請輸入數(shù)學(xué)成績:");scanf("%f",&students[num].Math);getchar();printf("請輸入英語成績:");scanf("%f",&students[num].English);getchar();students[num].Add=And(students[num]);num++;printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}4.2.5修改學(xué)生信息設(shè)計修改學(xué)生信息用Modify()函數(shù)實現(xiàn),調(diào)用Searchnum(id)函數(shù),過輸入學(xué)號確定所要修改的學(xué)生信息,除了用到printf、scanf、getchar語句外,還用到if-else語句,判斷所要修改的學(xué)生信息是否存在,若不存在,則輸出“學(xué)生不存在”;若存在,即可對學(xué)生信息進(jìn)行相應(yīng)的修改。功能界面如圖4.4,選擇主菜單“2”功能即可。圖4.4修改學(xué)生信息程序設(shè)計:/*修改學(xué)生信息*/voidModify(){while(1){charnu[20];intnumber;printf("請輸入要修改的學(xué)生的學(xué)號:");scanf("%s",&nu);getchar();number=Searchnum(nu);if(number==-1){printf("學(xué)生不存在!\n");}else{printf("你要修改的學(xué)生信息為:\n");DSingle(number);printf("--請輸入新值--\n");printf("請輸入學(xué)號:");scanf("%s",&students[number].NUM);getchar();printf("請輸入姓名:");scanf("%s",&students[number].Name);getchar();printf("請輸入語文成績:");scanf("%f",&students[number].Chinese);getchar();printf("請輸入數(shù)學(xué)成績:");scanf("%f",&students[number].Math);getchar();printf("請輸入英語成績:");scanf("%f",&students[number].English);getchar();students[number].Add=And(students[number]);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}4.2.6刪除學(xué)生信息設(shè)計刪除學(xué)生信息用Delete()函數(shù)實現(xiàn),并且調(diào)用Searchnum(id)函數(shù),過輸入學(xué)號確定所要刪除的學(xué)生信息,由if-else語句,判斷所要刪除的學(xué)生信息是否存在,若不存在,則輸出“學(xué)生不存在”,若存在,即可對學(xué)生信息進(jìn)行刪除。功能界面如圖4.5,選擇主菜單“3”功能即可。圖4.5刪除學(xué)生信息程序設(shè)計:/*刪除學(xué)生信息*/voidDelete(){inti;while(1){charid[20];intindex;printf("請輸入要刪除的學(xué)生的學(xué)號:");scanf("%s",&id);getchar();index=Searchnum(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要刪除的學(xué)生信息為:\n");DSingle(index);printf("是否真的要刪除?(y/n)");if(getchar()=='y'){for(i=index;i<num-1;i++){students[i]=students[i+1];//把后邊的對象都向前移動}num--;}getchar();}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}4.2.7查詢學(xué)生信息設(shè)計查詢學(xué)生信息共有兩種方法。方法一按學(xué)號查詢按學(xué)號查詢用Select1()函數(shù),用到printf、scanf、getchar語句外,還用到if-else語句,輸入所要查詢學(xué)生的學(xué)號,在文件中讀取,若該學(xué)生存在,則從文件中獲取該學(xué)生信息,并顯示到輸出界面;若不存在,則輸出“該學(xué)生不存在”??蛇x擇菜單中的“4”選項實現(xiàn),運(yùn)行結(jié)果如圖4.6所示。圖4.6按學(xué)號查詢程序設(shè)計:voidSelect1(){while(1){charid[20];intindex;printf("請輸入要查詢的學(xué)生的學(xué)號:");scanf("%s",&id);getchar();index=Searchnum(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要查詢的學(xué)生信息為:\n");DSingle(index);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}方法二按姓名查詢按姓名查詢用Select2()函數(shù),與按學(xué)號查詢所用語句基本相同,只是此時輸入的是所查學(xué)生的姓名,從文件中獲取的也是學(xué)生的姓名信息,其他與按學(xué)號查詢相同。可選擇菜單中的“5”選項實現(xiàn),運(yùn)行結(jié)果如圖4.7所示。圖4.7按姓名查詢程序設(shè)計:voidSelect2(){while(1){charname[20];intindex;printf("請輸入要查詢的學(xué)生的姓名:");scanf("%s",&name);getchar();index=Searchname(name);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要查詢的學(xué)生信息為:\n");DSingle(index);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}4.2.8學(xué)生成績排序設(shè)計學(xué)生成績排序總體分為兩個方面:按總成績排序按總成績排序用Sall()函數(shù),用Display()函數(shù)顯示,用for雙重循環(huán),獲取每個學(xué)生的總成績,并比較大小??蛇x擇菜單中的“6”選項實現(xiàn),運(yùn)行結(jié)果如圖4.8所示。圖4.8按總成績排序程序設(shè)計:voidSall(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].Add<students[j].Add){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}按單科成績排序按單科成績排序用SChinese()、SMath()和SEnglish()三個函數(shù)實現(xiàn),用Display()函數(shù)顯示,分別完成對語文、數(shù)學(xué)、英語成績的排序。用for雙重循環(huán)對選擇的科目成績進(jìn)行從大到小排序??蛇x擇菜單中的“7”選項,按提示輸入,運(yùn)行結(jié)果如圖4.9、4.10、4.11所示。圖4.9按語文成績排序圖4.10按數(shù)學(xué)成績排序圖4.11按英語成績排序程序設(shè)計(以按語文成績排序為例):voidSChinese(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].Chinese<students[j].Chinese){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}4.2.9統(tǒng)計學(xué)生成績分?jǐn)?shù)段信息設(shè)計統(tǒng)計學(xué)生某科目分?jǐn)?shù)段用到Chineses()、Maths()和Englishs()函數(shù),并分別用DSingle1()、DSingle2()和DSingle3()函數(shù)輸出顯示滿足條件的學(xué)生信息。函數(shù)中用到for循環(huán)和if語句及函數(shù)調(diào)用,選擇滿足條件的學(xué)生信息,并輸出顯示??蛇x擇菜單中的“8”選項,按提示輸入,運(yùn)行結(jié)果如圖4.12、4.13、4.14所示。圖4.12統(tǒng)計語文成績分?jǐn)?shù)段圖4.13統(tǒng)計數(shù)學(xué)成績分?jǐn)?shù)段圖4.14統(tǒng)計英語成績分?jǐn)?shù)段程序設(shè)計(以按語文成績統(tǒng)計為例):voidChineses(inta,intb){inti;for(i=0;i<num;i++){if(students[i].Chinese<=b&&students[i].Chinese>=a){DSingle1(i);}}}4.2.10統(tǒng)計掛科學(xué)生成績設(shè)計統(tǒng)計掛科學(xué)生主要用到Lose()函數(shù),并調(diào)用DSingle()函數(shù),使用for循環(huán)以及if語句實現(xiàn)對所需信息的獲取及輸出顯示??蛇x擇菜單中的“9”選項,運(yùn)行結(jié)果如圖4.15所示。圖4.15掛科學(xué)生成績統(tǒng)計程序設(shè)計:voidLose(){inti;for(i=0;i<num;i++){if(students[i].Chinese<60||students[i].Math<60||students[i].English<60){DSingle(i);}}第五章結(jié)果調(diào)試及分析5.1調(diào)試方法調(diào)試方法主要為運(yùn)行調(diào)試,先編譯程序,找到運(yùn)行時出現(xiàn)的錯誤,找到程序中對應(yīng)的出錯地方,進(jìn)行改正。5.1調(diào)試中遇到的問題及解決方法問題一:建立文件后,運(yùn)行程序卻顯示文件不存在,檢查程序并無錯誤。解決方法:檢查所建文件后發(fā)現(xiàn)電腦其他位置有與之同名的文件,對文件重命名后,可以打開。問題二:運(yùn)行后,退出功能不能使用。解決方法:檢查程序后,發(fā)現(xiàn)有一個大括號位置不對,將其改正后運(yùn)行正常。問題三:在按學(xué)號查找模塊,運(yùn)行后不能實現(xiàn)其功能。解決方法:檢查程序后,發(fā)現(xiàn)誤將調(diào)用的函數(shù)名寫錯,因而輸不出結(jié)果,改正后即可正常運(yùn)行。問題四:按總成績排序輸出后,發(fā)現(xiàn)輸出的界面表格列沒對齊,并且有的數(shù)據(jù)不能正確輸出,。解決方法:輸出不正確應(yīng)在顯示學(xué)生信息的函數(shù)中查找問題,發(fā)現(xiàn)在定義字符輸出時多打了一個“%”,導(dǎo)致學(xué)生成績不能顯示,另外修改了每個字符輸出之間的空格,運(yùn)行后,能正確輸出且界面美觀。第六章結(jié)論通過本次課設(shè)可以讓學(xué)生們學(xué)到很多。首先,課設(shè)考驗的就是學(xué)生自主思考和創(chuàng)新能力,根據(jù)題目要求,要自己到圖書館和網(wǎng)上查資料設(shè)計程序。其次,提高了學(xué)生對軟件設(shè)計的興趣,不僅復(fù)習(xí)鞏固了以前所學(xué)的知識,在編程的過程中更是學(xué)到了很多在課堂上學(xué)不到的新知識開闊了知識面,對C語言編程中出現(xiàn)的問題也能更快的找出解決方法。再次,通過本次課設(shè)才發(fā)現(xiàn)在編程方面有很多的不足之處,同學(xué)們應(yīng)該在平時多學(xué)多練,增強(qiáng)自己在編程方面的能力。最后,本次設(shè)計實現(xiàn)了設(shè)計要求的同時,程序簡單易懂,用戶操作方便。但是程序較長,很多子程序類似,占用內(nèi)存較大??傊敬握n設(shè)學(xué)到了很多,但仍有很多不足之處,應(yīng)該不斷的思考學(xué)習(xí),才能不斷的進(jìn)步。參考資料譚浩強(qiáng).《C程序設(shè)計》.北京:清華大學(xué)出版社,2005年.譚浩強(qiáng).《C程序設(shè)計題解與上級指導(dǎo)》.北京:清華大學(xué)出版社,2005年.3、李春葆、張植民、肖忠付.《C語言設(shè)計題典》.北京:清華大學(xué)出版社,2002年.4、黃維通.《C語言程序設(shè)計習(xí)題解析與應(yīng)用案例分析》.北京:清華大學(xué)出版社,2004.5、哈比森.《C語言參考手冊》.北京:機(jī)械工業(yè)出版社,2001.附錄源程序代碼:#include<stdio.h>#include<string>/*定義學(xué)生結(jié)構(gòu)體*/structStudent{charNUM[20];charName[20];floatChinese;floatMath;floatEnglish;floatAdd;};/*聲明學(xué)生數(shù)組及學(xué)生數(shù)量*/structStudentstudents[1000];intnum=0;intmark;/*將學(xué)生信息從文件讀出*/voidreadfile(){FILE*fp;inti;if((fp=fopen("studentinformal.txt","rb"))==NULL){printf("文件為空!\n");return;}if(fread(&num,sizeof(int),1,fp)!=1){num=-1;}else{for(i=0;i<num;i++){fread(&students[i],sizeof(structStudent),1,fp);}}fclose(fp);}/*將學(xué)生信息寫入文件*/voidwritefile(){FILE*fp;inti;if((fp=fopen("studentinformal.txt","wb"))==NULL){printf("文件為空!\n");return;}if(fwrite(&num,sizeof(int),1,fp)!=1){printf("文件寫入錯誤!\n");}for(i=0;i<num;i++){if(fwrite(&students[i],sizeof(structStudent),1,fp)!=1){printf("文件寫入錯誤!\n");}}fclose(fp);}/*求總成績*/floatAnd(structStudentstu){return(stu.Chinese+stu.Math+stu.English);}/*通過學(xué)號返回數(shù)組下標(biāo)*/intSearchnum(charnu[]){inti;for(i=0;i<num;i++){if(strcmp(students[i].NUM,nu)==0){returni;}}return-1;}/*通過姓名返回數(shù)組下標(biāo)*/intSearchname(charname[]){inti;for(i=0;i<num;i++){if(strcmp(students[i].Name,name)==0){returni;}}return-1;}/*顯示學(xué)生信息*/voidDisplay(){inti;printf("#####################################################\n");printf("%10s%10s%8s%8s%8s%8s\n","學(xué)號","姓名","語文","數(shù)學(xué)","英語","總成績");printf("#####################################################\n");for(i=0;i<num;i++){printf("%10s%10s%8.2f%8.2f%8.2f%8.2f\n",students[i].NUM,students[i].Name,students[i].Chinese,students[i].Math,students[i].English,students[i].Add);}printf("#####################################################\n");}/*顯示單個學(xué)生信息*/voidDSingle(intindex){printf("%10s%10s%8s%8s%8s%8s\n","學(xué)號","姓名","語文","數(shù)學(xué)","英語","總成績");printf("####################################################\n");printf("%10s%10s%8.2f%8.2f%8.2f%8.2f\n",students[index].NUM,students[index].Name,students[index].Chinese,students[index].Math,students[index].English,students[index].Add);printf("####################################################\n");}/*顯示學(xué)生語文成績信息*/voidDSingle1(intinde){printf("%10s%10s%8.2f\n",students[inde].NUM,students[inde].Name,students[inde].Chinese);}/*顯示學(xué)生數(shù)學(xué)成績信息*/voidDSingle2(intind){printf("%10s%10s%8.2f\n",students[ind].NUM,students[ind].Name,students[ind].Math);}/*顯示學(xué)生英語成績信息*/voidDSingle3(intin){printf("%10s%10s%8.2f\n",students[in].NUM,students[in].Name,students[in].English);}/*插入學(xué)生信息*/voidInsert(){while(1){printf("請輸入學(xué)號:");scanf("%s",&students[num].NUM);getchar();printf("請輸入姓名:");scanf("%s",&students[num].Name);getchar();printf("請輸入語文成績:");scanf("%f",&students[num].Chinese);getchar();printf("請輸入數(shù)學(xué)成績:");scanf("%f",&students[num].Math);getchar();printf("請輸入英語成績:");scanf("%f",&students[num].English);getchar();students[num].Add=And(students[num]);num++;printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*修改學(xué)生信息*/voidModify(){while(1){charnu[20];intnumber;printf("請輸入要修改的學(xué)生的學(xué)號:");scanf("%s",&nu);getchar();number=Searchnum(nu);if(number==-1){printf("學(xué)生不存在!\n");}else{printf("你要修改的學(xué)生信息為:\n");DSingle(number);printf("--請輸入新值--\n");printf("請輸入學(xué)號:");scanf("%s",&students[number].NUM);getchar();printf("請輸入姓名:");scanf("%s",&students[number].Name);getchar();printf("請輸入語文成績:");scanf("%f",&students[number].Chinese);getchar();printf("請輸入數(shù)學(xué)成績:");scanf("%f",&students[number].Math);getchar();printf("請輸入英語成績:");scanf("%f",&students[number].English);getchar();students[number].Add=And(students[number]);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*刪除學(xué)生信息*/voidDelete(){inti;while(1){charid[20];intindex;printf("請輸入要刪除的學(xué)生的學(xué)號:");scanf("%s",&id);getchar();index=Searchnum(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要刪除的學(xué)生信息為:\n");DSingle(index);printf("是否真的要刪除?(y/n)");if(getchar()=='y'){for(i=index;i<num-1;i++){students[i]=students[i+1];//把后邊的對象都向前移動}num--;}getchar();}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*按學(xué)號查詢*/voidSelect1(){while(1){charid[20];intindex;printf("請輸入要查詢的學(xué)生的學(xué)號:");scanf("%s",&id);getchar();index=Searchnum(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要查詢的學(xué)生信息為:\n");DSingle(index);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*按姓名查詢*/voidSelect2(){while(1){charname[20];intindex;printf("請輸入要查詢的學(xué)生的姓名:");scanf("%s",&name);getchar();index=Searchname(name);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要查詢的學(xué)生信息為:\n");DSingle(index);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*按語文成績排序*/voidSChinese(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].Chinese<students[j].Chinese){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*按數(shù)學(xué)成績排序*/voidSMath(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].Math<students[j].Math){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*按英語成績排序*/voidSEnglish(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].English<students[j].English){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*按總成績排序*/voidSall(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].Add<students[j].Add){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*按語文成績統(tǒng)計*/voidChineses(inta,intb){inti;for(i=0;i<num;i++){if(students[i].Chinese<=b&&students[i].Chinese>=a){DSingle1(i);}}}/*按數(shù)學(xué)成績統(tǒng)計*/voidMaths(inta,intb){inti;for(i=0;i<num;i++){if(students[i].Math<=b&&students[i].Math>=a){DSingle2(i);}}}/*按英語成績統(tǒng)計*/voidEnglishs(inta,intb){inti;for(i=0;i<num;i++){if(students[i].English<=b&&students[i].English>=a){DSingle3(i);}}}/*統(tǒng)計不及格學(xué)生信息*/voidLose(){inti;for(i=0;i<num;i++){if(students[i].Chinese<60||students[i].Math<60||students[i].English<60){DSingle(i);}}}/*主程序*/voidmain(){intchoice;intm,n;readfile();while(1){/*主菜單*/printf("\n*******************************");printf("\n歡迎進(jìn)入\n");printf("學(xué)生成績管理系統(tǒng)");printf("\n\n*******************************\n");printf("\n************主菜單************\n");printf("\n1、增加學(xué)生記錄\n");printf("2、修改學(xué)生信息\n");printf("3、刪除學(xué)生信息\n");printf("4、按學(xué)號查詢學(xué)生信息\n");printf("5、按姓名查詢學(xué)生信息\n");printf("6、按總成績排序\n");printf("7、按某課程成績排序\n");printf("8、統(tǒng)計某課程某分?jǐn)?shù)段的情況\n");printf("9、統(tǒng)計掛科學(xué)生信息\n");printf("10、退出\n");printf("*********************************\n");printf("請選擇(1-10):");scanf("%d",&choice);getchar();switch(choice){case1:Insert();break;case2:Modify();break;case3:Delete();break;case4:Select1();break;case5:Select2();break;case6:Sall();Display();break;case7:{printf("選擇課程對應(yīng)的代號:\n語文代號1,數(shù)學(xué)代號2,英語代號3,\n輸入-");scanf("%d",&mark);switch(mark){case1:SChinese(); Display();break; case2:SMath();Display();break;case3:SEnglish();Display();break;} }break;case9:Lose();break;case8:printf("選擇課程對應(yīng)的代號:\n語文代號1,數(shù)學(xué)代號2,英語代號3,\n輸入-");scanf("%d",&mark);switch(mark){case1:printf("請輸入分?jǐn)?shù)段m-n:");scanf("%d-%d",&m,&n);printf("%10s%10s%8s\n","學(xué)號","姓名","語文");printf("################################\n");Chineses(m,n);printf("################################\n");break;case2:printf("請輸入分?jǐn)?shù)段m-n:");scanf("%d-%d",&m,&n);printf("%10s%10s%8s\n","學(xué)號","姓名","數(shù)學(xué)");printf("################################\n"); Maths(m,n);printf("################################\n");break;case3:printf("請輸入分?jǐn)?shù)段m-n:");scanf("%d-%d",&m,&n);printf("%10s%10s%8s\n","學(xué)號","姓名","英語");printf("################################\n"); Englishs(m,n);printf("################################\n");}break; case10:exit(0);break;}writefile(); }}目錄TOC\o"1-2"\h\z第一章項目的意義和必要性 11.1項目名稱及承辦單位 11.2項目編制的依據(jù) 11.3肺寧系列產(chǎn)品的國內(nèi)外現(xiàn)狀 21.4產(chǎn)業(yè)關(guān)聯(lián)度分析 31.5項目的市場分析 4第二章項目前期的技術(shù)基礎(chǔ) 82

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論