學(xué)生成績管理系統(tǒng)實訓(xùn)報告_第1頁
學(xué)生成績管理系統(tǒng)實訓(xùn)報告_第2頁
學(xué)生成績管理系統(tǒng)實訓(xùn)報告_第3頁
學(xué)生成績管理系統(tǒng)實訓(xùn)報告_第4頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、鄭州輕工業(yè)學(xué)院實訓(xùn)報告實訓(xùn)名稱:學(xué)生成績管理系統(tǒng)姓名: 褚超院 (系):軟件學(xué)院專業(yè)班級:網(wǎng)絡(luò)軟件開發(fā)14-01 班學(xué)號: 621413560103指導(dǎo)教師: 孫海燕成績:時間: 2015年1月5日至 2015年1月9日目 錄實訓(xùn)任務(wù)書 實訓(xùn)進(jìn)度日歷 實訓(xùn)報告 實訓(xùn)感想 .實訓(xùn)任務(wù)書一、題目“學(xué)生成績管理系統(tǒng)”設(shè)計二、學(xué)生信息專業(yè)學(xué)號姓名三、用戶需求及約束條件1、用 C 語言實現(xiàn)“學(xué)生成績管理系統(tǒng)” 。2、設(shè)計“學(xué)生成績管理系統(tǒng)”的用戶界面,系統(tǒng)啟動進(jìn)入后,只能通過界面菜單指令才能退出。3、“學(xué)生成績管理系統(tǒng)”具有以下功能:1 )系統(tǒng)啟動后,彈出一個用戶界面,能實現(xiàn)人機交互的功能。而且只能通過

2、界面菜單命令實現(xiàn)各種功能(包括系統(tǒng)退出功能)。2)錄入學(xué)生成績(信息有:班級、姓名、學(xué)號、五門課程成績);3)計算每門功課的平均成績和學(xué)生五門功課的平均成績并存檔。下面的功能必須是第3)項功能完成以后才能進(jìn)行。4)輸出學(xué)生的信息和對應(yīng)的原始成績以及平均成績;5)按平均成績進(jìn)行排序,輸出排序后的學(xué)生信息以及對應(yīng)的課程成績和平均成績。6)對成績修改,分別有兩種模式,一種是按學(xué)號查找后進(jìn)行修改;另一種是按姓名查找后進(jìn)行修改;修改后重新排序?qū)W生的順序,并輸出學(xué)生信息和對應(yīng)課程成績和平均成績。7)增補遺漏的學(xué)生以及對應(yīng)的信息和對應(yīng)的課程成績,并計算出平均成績,增補以后重新排序?qū)W生順序,并輸出學(xué)生信息和對

3、應(yīng)課程成績和平均成績。8)附加功能:把學(xué)生信息和對應(yīng)的課程成績和平均成績存入到文件中。9)附加功能:輸出文件中的內(nèi)容。10)附加功能:試著從文件中導(dǎo)入數(shù)據(jù)到成績管理系統(tǒng)中,然后進(jìn)行管理。四、設(shè)計要求、技術(shù)參數(shù)及設(shè)計規(guī)格1、原始成績由老師統(tǒng)一給出,在Excel表中;2、設(shè)計的系統(tǒng)能夠運行,提交源程序、目標(biāo)文件和可執(zhí)行文件;3、提交實訓(xùn)報告,實訓(xùn)報告中列寫:1)軟件需求分析;2) 軟件規(guī)格說明和設(shè)計要求;3)對數(shù)據(jù)的管理方案;4)“學(xué)生成績管理系統(tǒng)”設(shè)計的思路和整體框架;5)各功能或者模塊實現(xiàn)的思路(或者用帶注釋的程序代替)并交待模塊之間的接口關(guān)系;系統(tǒng)”設(shè)計的結(jié)果(可以用一些屏幕拷貝的圖來補充說

4、明)。4、程序設(shè)計環(huán)境為Visual C+ 6.0或 DEV C+6)“學(xué)生成績管理5、所有的設(shè)計工作需要同學(xué)自己真實地、獨立地完成。五、工作量天/ 日期任務(wù)描述通過標(biāo)準(zhǔn)2015年上午: 熟悉系統(tǒng)功能,文檔通過1月5日完成三項任務(wù)(用文檔記錄) :1)軟件需求分析; 2)軟件規(guī)格說方案通過明和設(shè)計要求; 3)對數(shù)據(jù)的管理方案。數(shù)據(jù)結(jié)構(gòu)通過下午: 構(gòu)思“學(xué)生成績管理系統(tǒng)”的思路和整體框架。設(shè)計的函數(shù)框架通過設(shè)計數(shù)據(jù)結(jié)構(gòu)(命名) ,設(shè)計函數(shù)框架(命名,考慮參數(shù)的類型和要求數(shù)據(jù)傳遞接口正常,main 函個數(shù),即考慮數(shù)據(jù)之間的傳遞關(guān)系)。設(shè)計被系統(tǒng)調(diào)用的 main 函數(shù); 數(shù)能運行。實現(xiàn)界面函數(shù);設(shè)計

5、各功能子函數(shù)的框架;2015年上午: 實現(xiàn)成績錄入功能;各子函數(shù)調(diào)試通過,能被main 函1月6日下午: 實現(xiàn)計算平均成績功能;實現(xiàn)輸出功能;數(shù)成功調(diào)用,其子功能能實現(xiàn)。2015年上午: 實現(xiàn)排序功能;各子函數(shù)調(diào)試通過,能被main 函1月7日下午 : 實現(xiàn)修改功能;實現(xiàn)增補功能(選做 );數(shù)成功調(diào)用,其子功能能實現(xiàn)。2015年上午: 實現(xiàn)查找功能,按學(xué)號查找、按姓名查找;各子函數(shù)調(diào)試通過。1月8日下午 : 實現(xiàn)自身特色功能,如登陸、鏈表操作、文件存儲數(shù)據(jù);2015年上午: 完善“成績管理系統(tǒng)的各項功能” 。撰寫實訓(xùn)報告。系統(tǒng)能正確運行,界面友好) ;1月8日實踐能力強的同學(xué)實現(xiàn)附加功能。各功

6、能能夠?qū)崿F(xiàn) , 性能良好操作方下午: 繼續(xù)寫實訓(xùn)報告并且驗收設(shè)計的項目。便。備注:做得慢的同學(xué)選做部分可不做。六、考核形式、考核時間、考核指標(biāo)及成績評定實訓(xùn)成績由下面構(gòu)成:實訓(xùn)紀(jì)律、實訓(xùn)態(tài)度和平時表現(xiàn)占20%;實訓(xùn)結(jié)果占30%;實訓(xùn)報告占 30%;實踐操作能力占20%??己诵问剑?1)老師每日對學(xué)生的考察、評估和考核;2)最后對實訓(xùn)項目完成的質(zhì)量進(jìn)行考核和驗收。完成期限: 2015 年01 月09 日指導(dǎo)教師簽章:孫海燕專業(yè)負(fù)責(zé)人簽章:崔建濤教學(xué)院長簽章宋勝利題學(xué)生成績管理系統(tǒng)目指導(dǎo)教師孫海燕、張玲、陳 明天實訓(xùn)任務(wù)詳細(xì)描述15上午完成: 1)軟件需求年分析; 2)軟件規(guī)格1說明和設(shè)計要求;月

7、3)對數(shù)據(jù)的管理方5案。日下午構(gòu)思“學(xué)生成績管理系統(tǒng)”的思路和整體框架。設(shè)計數(shù)據(jù)結(jié)構(gòu)(命名),設(shè)計函數(shù)框架(命名,考慮參數(shù)的類型和個數(shù),即考慮數(shù)據(jù)之間的傳遞關(guān)系)設(shè)計被系統(tǒng)調(diào)用的main 函數(shù);設(shè)計界面函數(shù);15上午設(shè)計數(shù)據(jù)錄入函年數(shù),從鍵盤讀數(shù)據(jù)1到數(shù)組中,或者創(chuàng)月建鏈表6日下午計算平均成績的函數(shù)實現(xiàn) ;輸出原始成績;實訓(xùn)進(jìn)度日歷學(xué)軟件學(xué)院網(wǎng)絡(luò)軟件 14-01學(xué)年14 15 學(xué)年生網(wǎng)絡(luò)軟件14-02 , .net技學(xué)期第 1學(xué)期班14-02級教師實訓(xùn)任務(wù)的指導(dǎo)(解決方案、實現(xiàn)步驟、通過標(biāo)技術(shù)路線、難點提示)準(zhǔn)對軟件功能進(jìn)行分類。文 檔 通用戶界面操作簡單、 功能完備, 系統(tǒng)啟動后先過驗收錄入

8、數(shù)據(jù),再求平均成績;平均成績求出后,其他的功能才能實現(xiàn)。數(shù)據(jù)結(jié)構(gòu)可以采用數(shù)組也可以采用鏈表。如果采用數(shù)組管理數(shù)據(jù)結(jié)構(gòu),則數(shù)組必須按地設(shè) 計 的址傳遞,這樣數(shù)據(jù)才能在各個函數(shù)間共享。函 數(shù) 框架 通 過難點 1:系統(tǒng)的退出, exit( )函數(shù)需要包含調(diào)試,stdlib.h要 求 數(shù)難點 2 :清屏函數(shù) clrscr( );據(jù) 傳 遞難點 3 :數(shù)據(jù)的傳遞接 口 正常, main函 數(shù) 能運行。難點 1:數(shù)據(jù)輸入完后,怎樣控制結(jié)束?用一各 子 函個什么標(biāo)志。數(shù) 調(diào) 試難點2:結(jié)構(gòu)體數(shù)組中的子域又是一個數(shù)組通過,能時,數(shù)據(jù)不能直接從鍵盤讀入,需用一個臨時被main變量中轉(zhuǎn)一下。函 數(shù) 成難點 3:

9、從鍵盤錄入數(shù)據(jù)時,要給完全的提示功調(diào)用信息,便于操作指導(dǎo)。難點 4:想一想: 在錄入數(shù)據(jù)時數(shù)據(jù)保存到一各子函數(shù)組,那么在算平均值時,怎樣能接觸到此數(shù)數(shù)調(diào)試組中的數(shù)據(jù)。通過,能被 main輸出按照一定的格式,好看。函數(shù)成功調(diào)用。15上午排序功能實現(xiàn)并輸按平均成績排序。各 子 函年出排序后的成績。排序的算法可以是泡泡法或者選擇法等數(shù) 調(diào) 試1思考 1:你還可以分別在每個班中按平均成績通過,能月排序嗎?被 main7思考 2:能輸出有不及格課程的同學(xué)信息和成函 數(shù) 成日績嗎?功調(diào)用。下午實現(xiàn)查找功能按姓名查找以后,再修改;各 子 函按學(xué)號查找以后,再修改;數(shù) 調(diào) 試如果要用對半查找法,需要數(shù)據(jù)是有序

10、的。通過,能被 main函 數(shù) 成功調(diào)用。15上午能對某一學(xué)生信息查找到某一學(xué)生, 修改某一屬性, 如果需要重年和成績進(jìn)行修改;新排序,重新排序,把結(jié)構(gòu)存入文件;1難點:怎樣從鍵盤中把成績存入文件。月8增加后重新排序,重新輸出。日能增加學(xué)生的信息難點:怎樣從文件中讀出數(shù)據(jù)(選做);下午自定義功能實現(xiàn)如:登陸:密碼輸入顯示 * ;等 15 上午完成實訓(xùn)報告難點:清晰、明確、簡單、評價合理、有自己系 統(tǒng) 能年的見解、創(chuàng)新。正 確 運1實訓(xùn)報告內(nèi)容: 任務(wù)書、 實訓(xùn)進(jìn)度計劃、 大綱行,界面月性的目錄、正文、實訓(xùn)感想、附件。友好);9實訓(xùn)報告要求裝訂整齊。各 功 能日能 夠 實現(xiàn),性能良 好 操作方便

11、。下午驗收程序系 統(tǒng) 能討論正 確 運行,界面友好);各 功 能能 夠 實現(xiàn),性能良 好 操作方便。制訂教師:孫海燕、張玲實訓(xùn)報告1. 軟件需求分析1.1 、用 C 語言編寫程序?qū)崿F(xiàn)“學(xué)生成績管理系統(tǒng)” 。1.2 、設(shè)計“學(xué)生成績管理系統(tǒng)”的用戶界面,系統(tǒng)啟動進(jìn)入后,只能通過界面菜單指令才能退出。1.3 、系統(tǒng)啟動后,彈出一個用戶界面,能實現(xiàn)人機交互的功能。而且只能通過界面菜單命令實現(xiàn)各種功能(包括系統(tǒng)退出功能);1.4 、錄入學(xué)生成績(信息有:班級、姓名、學(xué)號、五門課程成績);1.5 、計算每門功課的平均成績和學(xué)生五門功課的平均成績并存檔;1.6 、輸出學(xué)生的信息和對應(yīng)的原始成績以及平均成績

12、;1.7 、按平均成績進(jìn)行排序,輸出排序后的學(xué)生信息以及對應(yīng)的課程成績和平均成績;1.8 、對成績修改,有兩種模式,一種是按學(xué)號查找后進(jìn)行修改;另一種是按姓名查找后進(jìn)行修改;修改后重新排序?qū)W生的順序,并輸出學(xué)生信息和對應(yīng)課程成績和平均成績;1.9 、增補遺漏的學(xué)生以及對應(yīng)的信息和對應(yīng)的課程成績,并計算出平均成績,增補以后重新排序?qū)W生順序,并輸出學(xué)生信息和對應(yīng)課程成績和平均成績;1.10 、附加功能:把學(xué)生信息和對應(yīng)的課程成績和平均成績存入到文件中;1.11 、附加功能:輸出文件中的內(nèi)容;1.12 、附加功能:試著從文件中導(dǎo)入數(shù)據(jù)到成績管理系統(tǒng)中,然后進(jìn)行管理。2系統(tǒng)詳細(xì)設(shè)計及實現(xiàn)2.1 、系統(tǒng)

13、用戶界面盡量居中,體現(xiàn)美觀效果;2.2 、編寫的程序具有人機交互功能;2.3 、通過菜單選擇軟件的功能;2.4 、軟件只能由菜單退出系統(tǒng);2.5 、操作信息提示(界面友好) ;2.6 、具有攔截一些誤操作錯誤的功能;2.7 、按原始成績格式輸出。設(shè)計要求:2.1 、根據(jù)老師給出的數(shù)據(jù)寫入;2.2 、設(shè)計的系統(tǒng)能夠運行,提交源程序、目標(biāo)文件和可執(zhí)行文件;2.3 、提交實訓(xùn)報告,實訓(xùn)報告中列寫;2.4 、程序設(shè)計環(huán)境為DEV C+;2.5 、所有的設(shè)計工作需要同學(xué)自己真實地、獨立地完成。3、對數(shù)據(jù)的管理方案結(jié)構(gòu)體數(shù)組和文件: 輸入的數(shù)據(jù)可以保存在文件中, 下次重新打開程序,原先已輸入的數(shù)據(jù)還在;

14、(難度中等)以下為該程序的定義部分typedef struct studentchar clas5;char ID5;char name15;double score5;double sum;double avg;STU;在此處,我將學(xué)生的班級、學(xué)號和姓名都定義為char 型,方便整體的使用。特別是后面的部分子函數(shù)中用到的字符串比較函數(shù)strcmp ,方便了排序比較;將學(xué)生的成績定義為雙精度實型變量(double ),為了使計算的平均分更為精確。講此定義放在程序的頭部,作為整個程序使用。為了使后面的子函數(shù)調(diào)用方便、簡介,我用到typedef structstudent定義。以下是該程序的函數(shù)聲

15、明部分/* 以下是該程序的函數(shù)聲明部分*/void Display(void);/*顯示主菜單界面 */void Load(STU stu, int *n);/*將信息加載到內(nèi)存中*/void InputOne(STU stu, int i);/*輸入指定的學(xué)生信息*/void Add(STU stu, int *n);/*添加指定的學(xué)生信息*/void Save(STU stu, int n);/*將數(shù)組保存到磁盤 */void Output(STU stu, int n);/*輸出所有學(xué)生信息 */void Print(STU *s);/*輸出指定的學(xué)生信息*/void Sort(STU

16、stu, int n);/*排序 */void Find(STU stu, int n);/*查找 */int FindID(STU stu, int n, char clas, char ID); /*按學(xué)生學(xué)號查找 */void Edit(STU stu, int n);/*修改指定的學(xué)生信息*/void Del(STU stu, int *n);/*刪除 */void DeleteAll(STU stu, int *n);/*刪除所有學(xué)生信息 */void DeleteOne(STU stu, int *n);/*刪除指定的學(xué)生信息*/以上是該程序的全部聲明部分,這些聲明函數(shù)與下文的各功

17、能函數(shù)相互對應(yīng),且順序依次排列,方便查找和修改。在這些聲明的函數(shù)中,用到了引用數(shù)組以及指針,方便了下面各功能函數(shù)的使用以及調(diào)用。以下是該程序的主函數(shù)部分int main()STU stuN;int n;int select;Load(stu, &n);while(1)Display();scanf("%d", &select);switch(select)case 2:case 3:case 4:case 1:/*輸入 */Add(stu, &n); break;/*輸出 */Output(stu, n); break;/*排序 */Sort(stu

18、, n); break;/*查找 */Find(stu, n); break;case 5:/*修改 */Edit(stu, n); break;case 6:/*刪除 */Del(stu, &n); break;case 7:/*退出 */return 0;以上是該函數(shù)的函數(shù)部分,用到了switch語句,分別針對7 種功能分情況列出。在下面的各分函數(shù)中,處理完的數(shù)據(jù)值會根據(jù)具體需要返還到主函數(shù)中,并且顯示在主界面中。方便用戶查看。利用switch的好處在于,分情況列出各種需要的可能性,條例清晰,可讀性強,并且十分方便。以下是該程序的主界面部分/* 以下為該程序的主界面 void Di

19、splay() */system("cls");printf("鄭州輕工業(yè)學(xué)院考試成績管理系統(tǒng)n");printf("n");printf("班級 : 網(wǎng)絡(luò)軟件開發(fā)14-01 班n");printf("n");printf("學(xué)號 :621413560103n");printf("n");printf("作者 : 褚超 n");printf("*n");printf("1:輸入學(xué)生資料n");pr

20、intf("n");printf("2:輸出學(xué)生成績3:資料進(jìn)行排序n");printf("n");printf("4:查找學(xué)生資料5:修改學(xué)生資料n");printf("n");printf("6:刪除學(xué)生資料7:退出管理系統(tǒng)n");printf("n");printf("*n");printf("歡迎進(jìn)入成績管理系統(tǒng),請選擇(你只需輸入17 中的其中一個數(shù)字便可進(jìn)行下一步操作)n");以上為該程序?qū)嶋H操作的主界面

21、,具有6 大基本功能。用戶可以根據(jù)需要進(jìn)行相關(guān)操作,實現(xiàn)所需要的功能。在此界面中,用到了清屏函數(shù),方便用戶更好的體驗該程序,不至于界面混亂。void Load(STU stu, int *n)FILE *fp;int i;if(fp=fopen("d:student.dat","r+")= NULL)/*以'r+'打開可讀寫的文件*/*n = 0;return;for(i=0; fread(&stui,sizeof(STU),1,fp)!=0;i+); /*將信息讀取到stu中*/*n = i;/*這里 *n的作用為記錄文件中當(dāng)前

22、學(xué)生數(shù)量*/fclose(fp);/*關(guān)閉文件*/*/以上是該程序的從文件中讀取數(shù)據(jù)的函數(shù)部分。用到了指針,從所指定的文件 student.dat讀取到輸入后保存在該文件中的信息,并顯示在主界面中。用戶可以直接將該文件拷貝到指定文件夾中,當(dāng)執(zhí)行一次源代碼的編譯后,該系統(tǒng)就知道了這些數(shù)據(jù)所在的文件,當(dāng)用戶執(zhí)行程序運行時,選擇相關(guān)的功能時,便可直接在主界面顯示,無需再次輸入信息。這樣以來,該程序就具有了很強的實用性與使用性,方便了用戶處理數(shù)據(jù)。以下是該程序的輸入部分/* 輸入第 i 個學(xué)生信息,保存到 stu 數(shù)組中 */void InputOne(STU stu, int i)int j;/*

23、輸入學(xué)生信息 */printf(" 請輸入學(xué)生班級、學(xué)號、姓名 ( 數(shù)據(jù)間以空格隔開 ):"); scanf("%s%s%s", &stui.clas, &stui.ID, &);/* 輸入五門課程成績并累加*/printf("請依次輸入課程1、 2、 3、 4、 5 成績 ( 數(shù)據(jù)間以空格隔開):");stui.sum = 0.0;for(j=0; j<5; j+)scanf("%lf", &stui.scorej);stui.sum += stui.sco

24、rej;/* 計算五門課程的平均分*/stui.avg = stui.sum / 5;/* 調(diào)用 InputOne 函數(shù)添加若干學(xué)生信息,并把新添加的學(xué)生信息依次保存到文件中void Add(STU stu, int *n)*/int i=0;char s = 'y'while(s = 'y')InputOne(stu, (*n)+);/*添加第n+1 個學(xué)生的信息*/printf("是否繼續(xù)添加( 請輸入y or n)n");scanf(" %c", &s);Save (stu, *n);void Save(ST

25、U stu, int n)FILE *fp;if(fp=fopen("d:student.dat", "w") = NULL)printf("打開文件失敗 n");exit(0);fwrite(stu, n * sizeof(stu0), 1, fp);fclose(fp);/*/以上為該程序的第一個功能函數(shù)部分,可實現(xiàn)學(xué)生信息的錄入功能,所錄入的文件即student.dat。用戶可以根據(jù)需要輸入一個或多個學(xué)生信息。只需要在輸入一個學(xué)生信息完成后,判斷是否繼續(xù)錄入學(xué)生信息即可。當(dāng)輸入 y 時,可繼續(xù)輸入一個或多個學(xué)生信息,操作與之前相

26、同;當(dāng)輸入其它字母時,輸入學(xué)生信息結(jié)束,程序返回到該程序的原始主界面??衫^續(xù)選擇其它相關(guān)操作。方便用戶處理數(shù)據(jù), 解決了單次功能實現(xiàn)后, 程序退出的問題。以下是該程序的輸出部分/* 輸出所有學(xué)生信息*/void Output(STU stu, int n)int i;/* 打印數(shù)據(jù)表頭 */printf("您需要的所有學(xué)生成績?nèi)缦?n");printf("n");printf("%8s%8s%8s%8s%8s%8s%8s%8s%8s%8s", "班級 ", " 學(xué)號 ", " 姓名 &

27、quot;, " 成績 1", " 成績 2", " 成績 3", " 成績 4", " 成績 5", " 總分 ", " 平均分 ");for(i=0; i<n; i+)Print(&stui);system("pause");void Print(STU *s)int i;/* 打印所有學(xué)生的信息*/printf("%8s%8s%8s", s->clas, s->ID, s->na

28、me);for(i=0; i<5; i+)printf("%8.2f", s->scorei);printf("%8.2f%8.2f", s->sum, s->avg);printf("n");/*/以上是學(xué)生信息輸出部分的函數(shù),系統(tǒng)會自動打印出表頭信息。相關(guān)的學(xué)生信息會在其下一行依次展開并與表頭對齊。程序?qū)崿F(xiàn)了信息的讀出功能,方便了用戶的查看與處理。其中,輸出的學(xué)生成績都采用了double 型,并保留兩位有效數(shù)字,使數(shù)據(jù)更為準(zhǔn)確。下面給出輸出學(xué)生信息時的主界面顯示情況以下是該程序的排序部分/* 對學(xué)生的信息進(jìn)

29、行排序*/void Sort(STU stu, int n)int select;int ScoreAsc(const void *a, const void *b);int ScoreDes(const void *a, const void *b);int NameAsc(const void *a, const void *b);printf("1:按總成績升序排列n");printf("n");printf("2:按總成績降序排列n");printf("n");printf("3:按學(xué)生姓名排序n

30、");scanf("%d", &select);switch(select)case 1: qsort(stu, n, sizeof(stu0), ScoreAsc); break;case 2: qsort(stu, n, sizeof(stu0), ScoreDes); break;case 3: qsort(stu, n, sizeof(stu0), NameAsc); break;default: return;Output(stu, n);/* 以下是按成績升序排序的分函數(shù)*/int ScoreAsc(const void *a, const v

31、oid *b)return (STU *)a)->sum > (STU *)b)->sum ? 1 : -1;/* 以下是按成績降序排列的分函數(shù)*/int ScoreDes(const void *a, const void *b)return (STU *)a)->sum < (STU *)b)->sum ? 1 : -1;/* 以下是按學(xué)生姓名升序排列的分函數(shù)*/int NameAsc(const void *a, const void *b)return strcmp(STU *)a)->name, (STU *)b)->name);/*/

32、以上為該程序的排序函數(shù)部分,該函數(shù)實現(xiàn)了排序的功能,并且可以分別根據(jù)總成績的高低進(jìn)行升序以及降序排序, 也可以根據(jù)學(xué)生的姓名進(jìn)行排序。在這里,為了使三種排序功能方便處理、簡潔,我用到了 switch 語句,根據(jù)三種情況分別判斷。并根據(jù)用戶需要,將特定的排序方式信息反饋給用戶,用戶可以直接在該程序的主界面進(jìn)行查看,方便用戶處理學(xué)生信息。下面給出資料進(jìn)行排序中的按總成績降序排列主界面顯示情況以下是該程序的查找部分/* 按學(xué)號查找學(xué)生信息*/void Find(STU stu, int n)int index;char clas5,ID5;printf("請輸入班級和學(xué)號( 數(shù)據(jù)間以空格隔

33、開):");scanf("%s%s", clas, ID);index = FindID(stu, n, clas, ID);if(index > 0)Print(&stuindex);elseprintf("該學(xué)生信息不存在!n");system("pause");/* 分別對學(xué)生班級和學(xué)號進(jìn)行確定*/int FindID(STU stu, int n, char clas, char ID)int i;for(i=0;i<n;i+)/*一旦找到該學(xué)生信息,則會自動返回對應(yīng)的下標(biāo)*/if(strcmp(

34、stui.ID, ID)=0 && strcmp(stui.clas, clas) =0)return i;return -1;/*/以上是查找學(xué)生信息的功能函數(shù)部分。在此,因為有多個班級的信息存在,因此,避免不了學(xué)號一致的情況出現(xiàn)??蓪W(xué)號相同的學(xué)生,班級肯定不相同,因此為了使查找的學(xué)生信息是用戶所需要的信息。我在查找函數(shù)中,同時查找學(xué)生班級與學(xué)生學(xué)號,這樣以來,就可以確定所需要查找的學(xué)生信息在主界面反饋給用戶時是正確的。因此就需要用到一個if語句,只有在班級和學(xué)號都一致的情況下,才將信息返回給用戶,否則輸出該學(xué)生的信息不存在。這樣以來,學(xué)生信息的查找功能就得以實現(xiàn)了。下面給出

35、查找學(xué)生成績的主界面顯示情況以下是該程序的修改部分/* 修改指定的學(xué)生信息*/void Edit(STU stu, int n)int i, index;char s;char clas5,ID5;printf("請輸入班級和學(xué)號( 數(shù)據(jù)間以空格隔開):");scanf("%s%s", clas, ID);index = FindID(stu, n, clas, ID);if(index < 0)printf("該學(xué)生信息不存在!n");return;printf("以下是修改前的學(xué)生信息n");Print(

36、&stuindex);/* 修改學(xué)生成績 */printf("是否修改成績?( 請輸入 y or n)n");scanf(" %c", &s);if(s = 'y')stuindex.sum = 0;printf("請輸入五門學(xué)科的成績( 數(shù)據(jù)間以空格隔開):");for(i=0; i<5; i+)scanf("%lf", &stuindex.scorei);stuindex.sum += stuindex.scorei;stuindex.avg = stuindex.

37、sum / 5;Save(stu, n);/*/以上是修改學(xué)生信息的函數(shù)部分,用戶可以通過輸入需要查找的學(xué)生的班級和學(xué)號先找到該學(xué)生的具體信息, 主界面也會在同一時間將該學(xué)生的信息反饋到程序的主界面。用戶可以通過判斷來確定是否修改學(xué)生信息,如用戶確定修改該學(xué)生的信息,就會顯示請輸入需要修改的學(xué)生的成績。用戶只需要將更新后的成績再次輸入,就可以完成學(xué)生信息的修改功能,并且將該次更新的成績存儲到指定的 2 文件中,覆蓋原來的該學(xué)生信息。這樣以來,學(xué)生成績修改的功能就可以完成了。下面給出修改學(xué)生資料主界面顯示情況( 待修改狀態(tài) )下面給出修改學(xué)生資料主界面顯示情況( 修改完成狀態(tài) )以下是該程序的刪

38、除部分/* 刪除 */void Del(STU stu, int *n)int select;printf("1:刪除指定的學(xué)生信息n");printf("n");printf("2:刪除所有的學(xué)生信息n");scanf("%d", &select);switch(select)case 1: DeleteOne(stu, n); break;case 2: DeleteAll(stu, n); break;/* 從文件中刪除全部學(xué)生信息 void DeleteAll(STU stu, int *n) */

39、char s;FILE *fp;printf("信息是否全部刪除?( 請輸入y or n)n");scanf(" %c", &s);if(s = 'y')fp = fopen("d:student.dat", "w"); /*n = 0;/*printf("刪除完成! n");fclose(fp);以 'w' 方式打開可覆蓋原來的文件內(nèi)存中的數(shù)組stu 中元素個數(shù)變?yōu)?/0*/* 刪除指定的學(xué)生信息*/void DeleteOne(STU stu, int

40、 *n)int i, index;FILE *fp;char clas5,ID5;printf("請輸入班級和學(xué)號( 數(shù)據(jù)間以空格隔開):");scanf("%s%s", clas, ID);index = FindID(stu, *n, clas, ID);if(index < 0)printf("n該學(xué)生信息不存在!n");return;for(i=index; i < *n-1; i+)stui = stui+1;(*n)-;if(fp=fopen("d:student.dat", "w

41、")=NULL) /*以 'w'的方式打開可清除文件*/printf("打開文件失?。");exit(0);printf("n刪除成功Save(stu, *n);n");/*保存到文件*/*/以上是該程序的刪除功能函數(shù)部分,當(dāng)用戶選擇該項功能時。會彈出兩個選擇項,分別是刪除指定的學(xué)生信息與刪除全部的學(xué)生信息。用戶可以根據(jù)需要進(jìn)行具體的操作。當(dāng)確定需要刪除學(xué)生信息時,同樣需要輸入需要刪除的學(xué)生的班級與學(xué)號,這樣,就可以確定刪除的學(xué)生信息就是我們需要刪除的那個學(xué)生的信息。這樣以來,刪除學(xué)生信息的功能,就可以實現(xiàn)了。下面給出刪除學(xué)生

42、資料主界面顯示情況( 待刪除狀態(tài) )下面給出刪除學(xué)生資料主界面顯示情況( 刪除完成狀態(tài) )實訓(xùn)感想回想, 5 天的 C 語言實訓(xùn)經(jīng)歷,讓我受益匪淺。從一開始做的時候的各種迷茫 ( 沒有思路、對大程序產(chǎn)生恐懼、不知如何下手) 到現(xiàn)在的思路清晰,雖然這幾天走來實在不易,但我覺得還是非常值得的。這次實訓(xùn)讓我對編程有了更深層次的理解,我越來越喜歡C 語言了?,F(xiàn)在想想,這樣的一個程序才算是真正的一個程序,之前的一個個小的題目,一個小的問題,一個小的程序,只是這樣一個程序的一部分。當(dāng)我把那些小程序綜合放在一塊,進(jìn)行整體的處理,最終變成一個可讀性很高的、整體性很強的大程序時,我明白了小程序就是大程序的分支,

43、只要將小程序處理好,再融入到一個整體中,一個看似復(fù)雜的大程序就可以迎刃而解了。記得,剛開始學(xué)C 語言的時候,覺得很難。一句簡單的This is a Cprogram,加頭加尾都有四五行,我在想如果是一個很大的內(nèi)容,那要打多少,一定很麻煩吧!就覺得那是好大的一個工程,很難實現(xiàn)?,F(xiàn)在想想,只要用心去學(xué),掌握完成 C 語言的語法技巧,是可以完成的。我現(xiàn)在對 C 語言的認(rèn)識就是,把數(shù)學(xué)的思想應(yīng)用在程序上,體現(xiàn)在各種函數(shù)上,面對一個程序題時,首先要有思路,該怎樣去處理。然后開始對需要處理的數(shù)據(jù)進(jìn)行定義,需要幾個變量,變量的類型是什么。如果是數(shù)組的話,還要考慮這個數(shù)組有多大,需要定義多長的數(shù)組才能夠用。然

44、后就是編寫程序的核心部分,將數(shù)學(xué)的算法思想,用函數(shù)體現(xiàn)出來,通過賦值語句,引用,互換等,完成數(shù)據(jù)間的計算。在程序輸出的部分,確定好需要輸出數(shù)據(jù)的控制符,比如如果是 int型,那輸出時的控制符就用%d。將各種數(shù)據(jù)一一對應(yīng)的輸入輸出,就基本上可以完成一個程序。這周 C 語言的實訓(xùn),讓我明白。做出一個程序系統(tǒng)并不是一件簡單的事,雖然說也不是非常難的那種,但是卻很考驗一個人的耐心以及細(xì)心程度。第一天的時候,其實,我不知道該怎樣做,一直坐在電腦旁想啊想,往往想的一頭霧水。這么大的一個程序,要怎么入手。后來明白,我不該把它想的這么復(fù)雜,而是應(yīng)該像平時那些小程序一樣,一個一個來,然后合起來成為一個大的程序。

45、當(dāng)思路清晰以后,我明白該怎么去寫才能寫成。所以我覺得思路很重要,然后就是對語法的靈活運用,這樣,才能自由的編寫一個程序。為什么要學(xué)習(xí)程序設(shè)計?計算機的本質(zhì)是“程序的機器”,程序和指令的思想是計算機系統(tǒng)中最基本的概念。學(xué)習(xí)程序設(shè)計能使我們了解計算機事怎樣工作的,更好地理解和應(yīng)用計算機;能使我們懂得怎樣讓計算機按照人們的意圖進(jìn)行工作;學(xué)習(xí)使用計算機處理問題的方法,能培養(yǎng)我們分析問題和解決問題的能力以及具有編寫程序的初步能力。非計算機專業(yè)的學(xué)生學(xué)習(xí)程序設(shè)計,可以了解軟件的特點和生產(chǎn)過程,能與程序開發(fā)人員更好的溝通,有利于共同合作進(jìn)行應(yīng)用軟件的開發(fā)工作。因此,大學(xué)生( 尤其是理工類學(xué)生 ) 學(xué)習(xí)程序設(shè)計是很重要的。

溫馨提示

  • 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

提交評論