c語言實習(xí)報告___菜單驅(qū)動的學(xué)生成績管理程序_第1頁
c語言實習(xí)報告___菜單驅(qū)動的學(xué)生成績管理程序_第2頁
c語言實習(xí)報告___菜單驅(qū)動的學(xué)生成績管理程序_第3頁
c語言實習(xí)報告___菜單驅(qū)動的學(xué)生成績管理程序_第4頁
c語言實習(xí)報告___菜單驅(qū)動的學(xué)生成績管理程序_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、浙江農(nóng)林大學(xué)高級語言程序設(shè)計(C)實習(xí)報告設(shè)計題目: 菜單驅(qū)動的學(xué)生成績管理程序 專 業(yè) 環(huán)境科技學(xué)院 班 級 地理信息系統(tǒng)091班 姓 名 趙晨雪 學(xué) 號 200918020113 20092010 學(xué)年 第 三 學(xué)期編寫一個菜單驅(qū)動的學(xué)生成績管理程序。實現(xiàn)如下管理功能:   能輸入并顯示 n 個學(xué)生的 m 門考試科目的成績、總分和平均分。   按總分進行排序。  按學(xué)號進行排序。   任意輸入一個學(xué)號,能顯示該學(xué)生的姓名、各門功課的成績。  將輸入的學(xué)生成績數(shù)據(jù)保存到文件中。   從文件中讀出學(xué)生成績數(shù)據(jù)。 關(guān)鍵詞:顯示數(shù)據(jù);排序

2、;查詢功能;寫入文件;讀出數(shù)據(jù);目 錄 1 需求分析 .4 2 詳細設(shè)計 .5 3 調(diào)試分析 .7 4 用戶手冊 .8 5 測試結(jié)果 .9 6 附錄 .11 7 參考文獻 .20 1 需求分析 1.1程序任務(wù): 用靜態(tài)的數(shù)據(jù)結(jié)構(gòu)(結(jié)構(gòu)體數(shù)組)來存儲和管理 n 個學(xué)生的學(xué)號、姓名、成績等信息,進行編程。 排序函數(shù)是一個具有多種排序方式的 通用的 排序程序,即不僅可以實現(xiàn)成績的升序排序,還可以實現(xiàn)成績的降序排序。 程序能夠進行異常處理,檢查用戶輸入數(shù)據(jù)的有效性,在用戶輸入數(shù)據(jù)有錯誤(如類型錯誤)或無效時,不會中斷程序的執(zhí)行,程序具有一定的健壯性。 輸出菜單形式如下:Management for S

3、tudents' scores 1. Append record 2. List record 3. Delete record4. Modify record 5. Search record 6. Sort Score in descending order by sum 7. Sort Score in ascending order by sum8. Sort Score in descending order by num 9. Sort Score in ascending order by numW. Write to a File R. Read from a File

4、 0. Exit Please Input your choice:1.2其它規(guī)定1.2.1輸入的形式和輸出值的范圍輸入學(xué)生編號(以%d形式輸入),學(xué)生姓名(以%s形式輸入,十位),學(xué)生成績(%d)。1.2.2輸入的形式輸出時以學(xué)號(%d),姓名(%s),成績(%d),總分(%d),平均分(%f)形式12.3程序所能夠達到的功能輸入成績計算總分和平均分;羅列成績;刪除修改記錄;按總分升序和講敘排列并輸出成績記錄;按學(xué)號升序和講敘排列并輸出成績記錄;2 詳細設(shè)計2.1本程序中所有用到的數(shù)據(jù)及其數(shù)據(jù)結(jié)構(gòu)的定義:本程序使用結(jié)構(gòu)體數(shù)組:#define STU_NUM40 /* 最多的學(xué)生人數(shù) */#d

5、efine COURSE_NUM10/* 最多的考試科目 */struct studentintnumber;/* 每個學(xué)生的學(xué)號 */charname10; /* 每個學(xué)生的姓名 */intscoreCOURSE_NUM;/* 每個學(xué)生M門功課的成績 */intsum; /* 每個學(xué)生的總成績 */floataverage; /* 每個學(xué)生的平均成績 */;2.2函數(shù)之間的調(diào)用關(guān)系圖:2.3寫出主程序及其主要模塊的流程圖:3調(diào)試分析3.1調(diào)試過程中遇到的問題是如何解決的以及對設(shè)計與實現(xiàn)的回顧和分析;3.1.1在編寫菜單函數(shù)時,使用了void函數(shù),沒有返回值,導(dǎo)致主函數(shù)switch語句使用不了

6、。3.1.2編寫添加記錄(append)函數(shù)求總分和平均值時,for語句后沒有加,打印不出來。3.1.3編寫寫入文件函數(shù)(write)出了很多錯誤,打開文件語句:fp=fopen("student_data","wb");寫錯,導(dǎo)致文件無法打開,讀出文件也無法打開;3.1.4讀出文件時,因為在if(fp=NULL)后加了“;”,致使文件無法打開。(都是些細小但很要命的錯誤)3.2經(jīng)驗和體會當(dāng)編寫完程序,最后調(diào)試無誤的時候,我長舒了口氣。這幾天一直在編寫這個程序,第一天剛開始接觸時還不太明白整個程序的作用,糊里糊涂地就開始了。從一些看起來比較簡單小程序開始

7、著手,寫一些零散模塊,然后開始對整個程序有了了解,刪掉重復(fù)無用的語句,一邊寫一邊調(diào)試,最后整個程序越來越長,不得不拿出幾個部分在新建的程序里開始調(diào)試。最后所有小程序都通過了,再把它們連接在一起,調(diào)整這個長達五頁多的大程序??粗? error(s)”差點“暈”過去不過通過這些天的學(xué)習(xí)真的學(xué)到很多,好多書本上零散的快被遺忘的知識都有被重新?lián)旎貋?。學(xué)會了把一些小程序組合在一起,閱讀和調(diào)試程序,查找錯誤還有那個之前從沒聽說過的軟件visio,也可以折騰幾下畫出很清晰的流程圖。這些都是我的收獲。4用戶手冊4.1詳細列出每一步的操作步驟:第一步:在屏幕顯示Please Input your choice

8、:后輸入“1”和回車。在字幕提示光標后依次輸入學(xué)號,姓名等(每個數(shù)據(jù)后都要加回車)。第二步:選擇你要使用的功能,并輸入對應(yīng)項前面的字符加回車鍵。例如:顯示結(jié)果如下Management for Students' scores 1. Append record 2. List record 3. Delete record4. Modify record 5. Search record 6. Sort Score in descending order by sum 7. Sort Score in ascending order by sum8. Sort Score in desc

9、ending order by num 9. Sort Score in ascending order by numW. Write to a File R. Read from a File 0. Exit Please Input your choice:1請輸入數(shù)據(jù):學(xué)號_ 5測試結(jié)果5.1輸入2組正確的數(shù)據(jù):5.1.1輸入: <數(shù)據(jù)1 組>A在“ Please Input your choice:”后輸入_1_ 加 回車鍵在提示(學(xué)號,姓名,成績,成績)下分別輸入:1 zhao 60 90 2 wen 50 70 輸出:總分150 總分120 平均分75.00 平均分60

10、B輸入:在“ Please Input your choice:”后輸入_4_ 加 回車鍵輸入:15 tian 70 80輸出: 學(xué)號5,姓名tian,成績70,成績80, 總分150 平均分75.00 學(xué)號2,姓名wen,成績50,成績70, 總分120 平均分60.00C輸入:在“ Please Input your choice:”后輸入_3_ 加 回車鍵輸入:2輸出: 學(xué)號5,姓名tian,成績70,成績80, 總分150 平均分75.00 學(xué)號0,姓名,成績0,成績0, 總分0 平均分0.005.1.2輸入: <數(shù)據(jù)2組>A在“ Please Input your cho

11、ice:”后輸入_1_ 加 回車鍵在提示(學(xué)號,姓名,成績,成績)下分別輸入:1 tong 40 70 2 wu 60 80 輸出:總分110 總分140 平均分55.00 平均分70B輸入:在“ Please Input your choice:”后輸入_4_ 加 回車鍵輸入:27 qing 60 70輸出: 學(xué)號1,姓名tong,成績40,成績70, 總分110 平均分55.00 學(xué)號7,姓名qing,成績60,成績70, 總分130 平均分65.00C輸入:在“ Please Input your choice:”后輸入_3_ 加 回車鍵輸入:7輸出: 學(xué)號1,姓名tong,成績40,成

12、績70, 總分110 平均分55.00 學(xué)號0,姓名,成績0,成績0, 總分0 平均分0.005.2輸入2組錯誤的數(shù)據(jù): 5.2.1輸入: <數(shù)據(jù)3組>A在“ Please Input your choice:”后輸入_1_ 加 回車鍵在提示(學(xué)號,姓名,成績,成績)下分別輸入:1 tong 40 70 2 wu 60 80 輸出:總分110 總分140 平均分55.00 平均分70B輸入:在“ Please Input your choice:”后輸入_4_ 加 回車鍵輸入:5輸出: The number is not found! please check it again!C

13、輸入:在“ Please Input your choice:”后輸入_3_ 加 回車鍵輸入:7輸出: The number is not found! please check it again!5.2.2輸入: <數(shù)據(jù)4 組>A在“ Please Input your choice:”后輸入_1_ 加 回車鍵在提示(學(xué)號,姓名,成績,成績)下分別輸入:1 zhao 60 90 2 wen 50 70 輸出:總分150 總分120 平均分75.00 平均分60B輸入:在“ Please Input your choice:”后輸入_4_ 加 回車鍵輸入:p輸出: The numb

14、er is not found! please check it again!C輸入:在“ Please Input your choice:”后輸入_3_ 加 回車鍵輸入:9輸出: The number is not found! please check it again! 6 附錄6.1程序源代碼:#define STU_NUM2 /* 最多的學(xué)生人數(shù) */#define COURSE_NUM2/* 最多的考試科目 */#define TUB 50 /* 學(xué)生數(shù) */#include<stdio.h>FILE *fp;struct studentintnumber;/* 每個

15、學(xué)生的學(xué)號 */charname10; /* 每個學(xué)生的姓名 */intscoreCOURSE_NUM;/* 每個學(xué)生M門功課的成績 */intsum; /* 每個學(xué)生的總成績 */floataverage; /* 每個學(xué)生的平均成績 */sTUB=0,'ti',0,0,0;typedef struct student STU;char menu(void)/*菜單函數(shù)*/char ch;printf("nManagement for Students' scores n");printf("1 Append recordn");

16、printf("2 List record n");printf("3 Delete recordn");printf("4 Modify record n");printf("5 Search record n");printf("6 Sort Score in descending order by sum n");printf("7 Sort Score in ascending order by sumn");printf("8 Sort Score in

17、descending order by num n");printf("9 Sort Score in ascending order by numn");printf("w Write to a File n");printf("r Read from a File n");printf("0 Exitn ");printf("Please Input your choice:");scanf(" %c",&ch);return(ch);void appe

18、nd()/* 添加記錄,計算出總分和平均值*/int i,j;printf("請輸入數(shù)據(jù):n");/輸入數(shù)據(jù)for(i=0;i<STU_NUM;i+)printf("學(xué)號:");scanf("%d",&si.number);printf("姓名:");scanf("%s",);for(j=0;j<COURSE_NUM;j+)printf("成績:");scanf("%d",&si.scorej);for(i=0;i

19、<STU_NUM;i+)/求總分for(j=0;j<COURSE_NUM;j+)si.sum=si.sum+si.scorej;printf("總分%d ",si.sum);for(i=0;i<STU_NUM;i+)/求平均數(shù)si.average=(si.sum)/(COURSE_NUM);printf("平均分%.2f ",si.average);void list()/*顯示記錄_在屏幕中打印所有學(xué)生成績*/int i,j;for(i=0;i<STU_NUM;i+)printf("學(xué)號%3d,姓名%s,",

20、si.number,);for(j=0;j<COURSE_NUM;j+)printf("分數(shù)%4d,",si.scorej);printf("總分%4d,平均分%4.2fn",si.sum,si.average);void delete()/*刪除記錄_用后面的數(shù)據(jù)替換前一個*/int a,i,b=0;printf("Please input student's number you want to delete:n");scanf("%d",&a);for(i=0;i<S

21、TU_NUM;i+)if(si.number=a)b=1;si=si+1;if(b=0)printf("The number is not found!nplease check it again!n");void modify()/*修改記錄_對要修改的數(shù)據(jù)重新復(fù)值*/int b=0,a,i,j;printf("Please input student's number you want to modify:n");scanf("%d",&a);for(i=0;i<STU_NUM;i+)if(si.number

22、=a)b=1;scanf("%d%s",&si.number,&);for(j=0;j<COURSE_NUM;j+)scanf("%d",&si.scorej);if(b=0)printf("The number is not found!nplease check it again!n");void search()/*查詢記錄_輸入學(xué)生學(xué)號,輸出對應(yīng)的成績數(shù)據(jù)*/int a,i,j;printf("Please input student's number you wa

23、nt to modify:n");scanf("%d",&a);for(i=0;i<STU_NUM;i+)if(si.number=a)printf("%d,%s,",si.number,);for(j=0;j<COURSE_NUM;j+)printf("%d,",si.scorej);printf("%d,%.2fn",si.sum,si.average);void descending_sum()/*按總分排序_降序排列,打印出學(xué)生姓名和成績*/int i,j;STU

24、 t;for(i=0;i<STU_NUM;i+)for(j=i+1;j<STU_NUM;j+)if(si.sum<sj.sum)t=sj;sj=si;si=t;for(i=0;i<STU_NUM;i+)printf("%d,%s,",si.number,);for(j=0;j<COURSE_NUM;j+)printf("%d,",si.scorej);printf("%d,%.2fn",si.sum,si.average);void ascending_sum()/*按總分排序_升序排列,打

25、印出學(xué)生姓名和成績*/int i,j;STU t;for(i=0;i<STU_NUM;i+)for(j=i+1;j<STU_NUM;j+)if(si.sum>sj.sum)t=sj;sj=si;si=t;for(i=0;i<STU_NUM;i+)printf("%d,%s,",si.number,);for(j=0;j<COURSE_NUM;j+)printf("%d,",si.scorej);printf("%d,%.2fn",si.sum,si.average);void descend

26、ing_number()/*按學(xué)號排序_按學(xué)號降序排列,打印出學(xué)生姓名和成績*/int i,j;STU t;for(i=0;i<STU_NUM;i+)for(j=i+1;j<STU_NUM;j+)if(si.number<sj.number)t=sj;sj=si;si=t;for(i=0;i<STU_NUM;i+)printf("%d,%s,",si.number,);for(j=0;j<COURSE_NUM;j+)printf("%d,",si.scorej);printf("%d,%.2fn&qu

27、ot;,si.sum,si.average);void ascending_number()/*按學(xué)號排序_按學(xué)號降序排列,打印出學(xué)生姓名和成績*/int i,j;STU t;for(i=0;i<STU_NUM;i+)for(j=i+1;j<STU_NUM;j+)if(si.number>sj.number)t=sj;sj=si;si=t;for(i=0;i<STU_NUM;i+)printf("%d,%s,",si.number,);for(j=0;j<COURSE_NUM;j+)printf("%d,",s

28、i.scorej);printf("%d,%.2fn",si.sum,si.average);void write()/*寫入文件*/FILE *fp;int i;fp=fopen("student_data","wb");for(i=0;i<STU_NUM;i+)fwrite(&si,sizeof(struct student),1,fp);printf("write to file successfully.n");fclose(fp);void read()/*從文件中讀出成績*/FILE *fp;int i,j;fp=fopen("student_data"

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論