學(xué)生模擬改卷系統(tǒng)課程設(shè)計(jì)報(bào)告C語言_第1頁
學(xué)生模擬改卷系統(tǒng)課程設(shè)計(jì)報(bào)告C語言_第2頁
學(xué)生模擬改卷系統(tǒng)課程設(shè)計(jì)報(bào)告C語言_第3頁
學(xué)生模擬改卷系統(tǒng)課程設(shè)計(jì)報(bào)告C語言_第4頁
學(xué)生模擬改卷系統(tǒng)課程設(shè)計(jì)報(bào)告C語言_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄1. 概述21.1設(shè)計(jì)題目21.2題目描述21.3題目要求22. 需求分析32.1 設(shè)計(jì)思想32.2 程序流程圖32.3 相關(guān)處理函數(shù)33. 程序設(shè)計(jì)及代碼分析43.1 程序主模塊設(shè)計(jì)53.2 程序詳細(xì)模塊設(shè)計(jì)54. 實(shí)驗(yàn)數(shù)據(jù)及運(yùn)行結(jié)果64.1 實(shí)驗(yàn)數(shù)據(jù)64.2 主菜單74.3 計(jì)算參考答案及頻次74.4 輸出成績分析85. 課設(shè)心得總結(jié)96. 程序源代碼91. 概述(正文宋體5號(hào)字,單倍行距,標(biāo)題黑體3號(hào)字,小標(biāo)題黑體5號(hào)字;題目內(nèi)5個(gè)小標(biāo)題間空兩行,兩個(gè)題目之間分頁。正反面打印)1.1. 設(shè)計(jì)題目模擬改卷系統(tǒng)。1.2. 題目描述改卷系統(tǒng)程序主要功能為改卷。同時(shí),該系統(tǒng)程序可以實(shí)現(xiàn)成績查

2、詢、成績排序、成績統(tǒng)計(jì)等一系列功能。通過接收數(shù)據(jù)文件格式為文本文件的數(shù)據(jù)流,其中文本文件由若干行組成,每行表示一名學(xué)生的考試答案信息,根據(jù)同學(xué)的答題情況,計(jì)算參考答案并統(tǒng)計(jì)學(xué)生的答題情況。1.3. 題目要求l 輸出參考答案,及各題參考答案選項(xiàng)的頻次。l 支持按姓名查詢學(xué)生成績。l 能夠按照指定需求進(jìn)行排序,如按成績的降序或升序?qū)W(xué)生信息進(jìn)行排序。l 輸出成績單及試卷分析(分?jǐn)?shù)段人數(shù),計(jì)算最高分、最低分、平均分、及格率)到外部文件。l 以功能菜單的形式選擇執(zhí)行各項(xiàng)操作。2. 需求分析. 設(shè)計(jì)思想該系統(tǒng)采用模塊化設(shè)計(jì)。程序設(shè)計(jì)一個(gè)簡單、明了的主菜單供用戶選擇操作。程序初始化階段,讀取

3、文本文件“data.txt”,獲取學(xué)生選擇答案信息進(jìn)行處理,若沒有輸入,則提示;系統(tǒng)自動(dòng)統(tǒng)計(jì)學(xué)生答案并輸出參考答案。同時(shí),用戶可根據(jù)主菜單對學(xué)生成績進(jìn)行排序、分析、查詢等操作。2.2. 程序流程圖圖2 程序主流程圖2.3. 相關(guān)處理函數(shù)void ClearQueue() 從緩沖區(qū)中不斷獲取多余字符,直到遇到回車才進(jìn)行下一步操作,即清除緩存流。char InputChar(char const * msg) 獲取有效的字符輸入。char* InputLine(char const * msg, char * str)獲取有效的字符串輸入。int InputIntInRange(char cons

4、t * msg, int l, int r)用來得到有效的整型輸入,整型范圍為l, r2.3. 程序設(shè)計(jì)及代碼分析.1. 學(xué)生結(jié)構(gòu)體設(shè)計(jì)設(shè)計(jì)結(jié)構(gòu)體,用來保存學(xué)生的姓名、答案以及分?jǐn)?shù)信息,方便操作。typedef struct tagDatachar name10;/姓名char asnTEST_NUM + 1;/作答int grade;/分?jǐn)?shù)Data;記錄相關(guān)信息的全局變量:Data dataMAX_LEN;/保存數(shù)據(jù)int total = 0;/總?cè)藬?shù)int ansTEST_NUM4;/每題的選擇人數(shù)頻次char answerTEST_NUM;/參考答案3.2. 文件讀取模塊通

5、過C語言文件讀取函數(shù),對數(shù)據(jù)文件進(jìn)行讀取,同時(shí)將學(xué)生的姓名、成績寫入結(jié)構(gòu)體數(shù)組中。主要函數(shù): void LoadData()3.3. 參考答案計(jì)算模塊遍歷整個(gè)結(jié)構(gòu)體數(shù)組,獲取保存所有學(xué)生的答案選擇,并獲得所有題目答案選擇的最大數(shù)量,最終獲得參考答案。主要函數(shù):void GetAswer()通過用戶選擇,可將保存的參考答案以及頻次輸出。主要函數(shù):void PrintAnswer()3.4. 按姓名查詢模塊通過用戶輸入的姓名信息,遍歷結(jié)構(gòu)體數(shù)組,并獲取姓名與之相同的學(xué)生信息輸出,若沒有匹配到該學(xué)生,則輸出提示信息。主要函數(shù):void SearchByName()3.5. 成績計(jì)算模塊遍歷整個(gè)結(jié)構(gòu)體

6、數(shù)組,對學(xué)生的選擇答案根據(jù)參考答案進(jìn)行評(píng)分,其中1-15題計(jì)2分,16-35題計(jì)3分,其余題目4分,最后獲得總分保存至結(jié)構(gòu)體數(shù)組中。主要函數(shù):void GetGrade()3.6. 成績降序排序模塊對于保存在學(xué)生結(jié)構(gòu)體數(shù)組中的成績,通過冒泡排序進(jìn)行降序排序并輸出。主要函數(shù):void Sort()3.7. 成績單分析模塊對學(xué)生的成績信息進(jìn)行分析,首先按學(xué)生成績排名,然后計(jì)算學(xué)生的最高分、最低分、平均分、及格率等信息,同時(shí)統(tǒng)計(jì)059,6080,81100分?jǐn)?shù)段同學(xué)個(gè)數(shù)。最后將所有統(tǒng)計(jì)信息通過C語言文件操作寫入到文件“result.txt”。主要函數(shù):void OutputData()3.8. 程序

7、主模塊提供系統(tǒng)程序的入口,可循環(huán)打印程序的主菜單供用戶選擇,并調(diào)用相關(guān)處理函數(shù)完成相關(guān)操作。主菜單函數(shù):void MainMenu()圖3 系統(tǒng)程序主要功能模塊圖4. 實(shí)驗(yàn)數(shù)據(jù)及運(yùn)行效果截圖4.4.1. 實(shí)驗(yàn)數(shù)據(jù)4.2. 主菜單4.3. 計(jì)算參考答案以及頻次4.4. 按姓名查詢成績4.5. 輸出試卷分析Result.txt 5. 課設(shè)心得總結(jié)通過本次課程設(shè)計(jì),我更加熟練掌握C語言編程相關(guān)知識(shí)。對于C語言中結(jié)構(gòu)體設(shè)計(jì)、全局變量、文件讀寫、冒泡排序等算法也有了深入了解。同時(shí),通過本次課程設(shè)計(jì),我更加了解了模塊化編程的重要性。將一個(gè)大的系統(tǒng)程序分成多個(gè)小模塊,不僅將問題簡單化了,同時(shí)也使得整個(gè)系統(tǒng)簡

8、潔明了,對用戶也是一目了然。 總之,本次課程設(shè)計(jì)對我今后的學(xué)習(xí)有很大的指導(dǎo)作用。6. 程序源代碼#include #include #include #define MAX_LEN100/最多人數(shù)#define TEST_NUM35/題目數(shù)量typedef struct tagDatachar name10;/姓名char asnTEST_NUM + 1;/作答int grade;/分?jǐn)?shù)Data;Data dataMAX_LEN;/保存數(shù)據(jù)int total = 0;/總?cè)藬?shù)int ansTEST_NUM4;/每題的選擇人數(shù)頻次char answerTEST_NUM;/參考答案/清除無用輸入緩

9、存流void ClearQueue()while(getchar()!=n)continue;/輸入charchar InputChar(char const * msg)char result; printf(%s, msg);while(scanf(%c, &result)!=1)ClearQueue();printf(%s, msg);ClearQueue();return result;/*參數(shù)說明:msg:提示語str:用來得到輸入的字符串功能說明:用來得到有效的字符串輸入*/char* InputLine(char const * msg, char * str)int j=0;i

10、nt c;printf(%s, msg);while(1)c = getchar();if (c = n | c = EOF)break;strj+=c;strj=0;return str;/*參數(shù)說明:msg:提示語功能說明:用來得到有效的整型輸入*/int InputInt(char const* msg)int result;printf(%s, msg);while(scanf(%d, &result)!=1)ClearQueue();printf(%s, msg);ClearQueue();return result;/*參數(shù)說明:msg:提示語l:下限r(nóng):上限功能說明:用來得到有效

11、的整型輸入,整型范圍為l,r*/int InputIntInRange(char const * msg, int l, int r)int j;while(1)j = InputInt(msg);if(jr)printf(請輸入%d和%d之間的整數(shù).n, l, r);continue;elsebreak;return j;/載入數(shù)據(jù)void LoadData()char filename = sample.txt;FILE *fp; char buffer100;int index;if(fp = fopen(filename,r) = NULL) printf(沒有找到或者不能打開data

12、.txt!); return; memset(buffer, 0, sizeof(buffer);while (fgets(buffer, 100, fp) != NULL) sscanf(buffer, %d %s %s, &index, , datatotal.asn);memset(buffer, 0, sizeof(buffer);total+; fclose(fp);/根據(jù)每個(gè)學(xué)生的選擇得到參考答案void GetAswer()int i;int j;int index;int max;memset(&ans, 0, sizeof(ans);memset(

13、answer, 0, sizeof(answer);for (i = 0; i total; i+)for (j = 0; j TEST_NUM; j+)index = datai.asnj - A;ansjindex+;for (i = 0; i TEST_NUM; i+)max = -1;index = -1;for (j = 0; j max)max = ansij;index = j;if (index = 0)answeri = A + index;/根據(jù)參考答案以及學(xué)生自己的選擇得到分?jǐn)?shù)void GetGrade()int i;int j;int bRight = -1;for (

14、i = 0; i total; i+)for (j = 0; j TEST_NUM; j+)bRight = -1;if (answerj = datai.asnj)bRight = 1;if (bRight = 1)if (j 15)datai.grade += 2;else if (j 35)datai.grade += 3;else datai.grade += 4;/打印參考答案及頻次void PrintAnswer()int i;printf(參考答案以及頻次如下:n);for (i = 0; i TEST_NUM; i+)printf(%-3c, answeri);printf(n

15、);for (i = 0; i TEST_NUM; i+)printf(%-3d, ansiansweri - A);printf(nn);/按姓名查找void SearchByName()char name10;int i;InputLine(請輸入學(xué)生姓名:, name);for (i = 0; i total; i+)if (strcmp(name, ) = 0)printf(%s成績?yōu)? %dnn, name, datai.grade);return;printf(文件中沒有記錄該學(xué)生相關(guān)信息!nn);/打印所有信息void PrintData()int i;if

16、(total = 0)return;printf(%-8s%-10s%sn, 排名, 姓名, 分?jǐn)?shù));for (i = 0; i total; i+)printf(%-8d, i+1);printf(%-10s, );printf(%dn, datai.grade);/排序void Sort()int i;int j;Data tempData;for (i = 1; i total; i+) for (j = 0; j total-i; j+) if (dataj.grade dataj+1.grade) memcpy(&tempData, &(dataj+1), siz

17、eof(Data);memcpy(&(dataj+1), &(dataj), sizeof(Data);memcpy(&(dataj), &tempData, sizeof(Data); PrintData();/輸出分析到文件void OutputData()int i;int j;Data tempData;FILE *fp;int gradeCount3;/0596079 80100int minGrade;int maxGrade;int totalGrade;int pass = 0;memset(&gradeCount, 0, sizeof(gradeCount);if (tota

18、l = 0)return;fp = fopen(result.txt, w);if (!fp)return;for (i = 1; i total; i+) for (j = 0; j total-i; j+) if (dataj.grade dataj+1.grade) memcpy(&tempData, &(dataj+1), sizeof(Data);memcpy(&(dataj+1), &(dataj), sizeof(Data);memcpy(&(dataj), &tempData, sizeof(Data); totalGrade = 0;minGrade = data0.grad

19、e;maxGrade = data0.grade;fprintf(fp, %-8s%-10s%sn, 排名, 姓名, 分?jǐn)?shù));for (i = 0; i total; i+)fprintf(fp, %-8d, i+1);fprintf(fp, %-10s, );fprintf(fp, %dn, datai.grade);if (datai.grade 60)gradeCount0+;else if (datai.grade 80)gradeCount1+;else gradeCount2+;totalGrade+= datai.grade;if (datai.grade maxGrade)maxGrade = datai.grade;fprintf(fp, n);fprintf(fp, 059分?jǐn)?shù)人數(shù)為:%dn, gradeCount0);fprintf(fp, 6079分?jǐn)?shù)人數(shù)為:%dn, gradeCount1);fprintf(fp, 80100分?jǐn)?shù)人數(shù)為:%dn, gradeCount2);fprintf(fp, 最高分

溫馨提示

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

評(píng)論

0/150

提交評(píng)論