C語言課程設計:學生成績管理系統(tǒng)設計_第1頁
C語言課程設計:學生成績管理系統(tǒng)設計_第2頁
C語言課程設計:學生成績管理系統(tǒng)設計_第3頁
C語言課程設計:學生成績管理系統(tǒng)設計_第4頁
C語言課程設計:學生成績管理系統(tǒng)設計_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、c語言課程設計說明書4第一章:設計任務分析51.1 課程設計意義:51.2 課程設計目的:51.3 課程設計所培養(yǎng)的能力51.4 學生成績管理系統(tǒng)設計要求61.5 學生成績管理系統(tǒng)實現(xiàn)的功能6第二章:技術文檔72.1 程序的總體設計72.2 主要數(shù)據(jù)72.2.1 庫文件72.2.2 調(diào)用函數(shù)及函數(shù)文件82.2.3 結(jié)構(gòu)體數(shù)組及宏定義82.3模塊設計及具體的算法分析92.3.1輸入模塊92.3.2 刪除多余數(shù)據(jù)模塊112.3.3 搜索模塊122.3.4 插入成績152.3.5顯示函數(shù)162.3.6 數(shù)據(jù)保存函數(shù)162.3.7 成績排序162.3.8統(tǒng)計分數(shù)172.3.9 主函數(shù)17第三章:用戶文

2、檔18第四章:源程序代碼清單19main.c文件19common.c文件21deleteitem.c文件21find.c文件22input.c文件26insert.c文件28output.c文件29paint.c文件31save.c文件32sort.c文件33stat.c文件38common.h文件44deleteitem.h文件45find.h文件46input.h文件46inset.h文件47output.h文件47paint.h文件48save.h文件48sort.h文件49stat.h文件49第五章:測試數(shù)據(jù)和測試過程記錄。50第六章:遇到的問題及解決方法分析。52c語言課程設計說明書

3、專業(yè):電子科學與技術班級:學生姓名:指導教師:設計題目:學生成績管理系統(tǒng)設計條件:自主設計設計內(nèi)容:學生成績管理下達日期:完成日期:第一章:設計任務分析1.1 課程設計意義: c語言是電子科學與技術專業(yè)的重要專業(yè)基礎課。在很多后續(xù)課程中,都要使用到c語言。學生通過對c語言的學習,已經(jīng)具備了使用c語言編寫簡單的應用程序的能力。為了加強程序設計基礎,開設課程設計課,使學生對c語言有更全面的理解,進一步提高運用c語言編程解決實際問題的能力,同時,為后續(xù)課程的學習夯實基礎。1.2 課程設計目的:掌握和利用c語言進行程序設計的能力。用c語言合理地開發(fā)簡潔有效的程序代碼來實現(xiàn)該設計。提高用程序設計解決實際

4、問題的能力。理解和運用結(jié)構(gòu)化程序設計的思想和方法。通過提出算法、指定輸入輸出來設計一個解決方案。掌握開發(fā)一個小型實用系統(tǒng)的基本方法。學會調(diào)試一個較長程序的基本方法。測試程序是否工作且滿足設計指標并評價其效率。掌握書寫程序設計開發(fā)文檔的能力(書寫課程設計報告)。1.3 課程設計所培養(yǎng)的能力a、分析問題。各種簡單的與計算機有關的案例中所需要的輸出結(jié)果,把大問題分解成小問題,使用自頂向下或類似設計方法給出模塊化或計劃。b、提出算法執(zhí)行特定任務。模塊表示為算法,使用自頂向下或偽代碼等設計手段將模塊細化成更詳細的成分,清楚地表明順序、選擇和重復等到控制結(jié)構(gòu)。c、把一個算法變?yōu)橛胏語言編寫的結(jié)構(gòu)化程序。d

5、、用合適的測試方法檢查程序是否符合最初的要求,為不合適數(shù)據(jù)設計錯誤陷阱,并提供錯誤信息來幫助用戶。e、寫出清晰的用戶文檔,確保用戶或者通過遵循程序中的指示或者使用程序設計者編寫的文檔能成功地運行程序。f、寫出技術文檔,對程序中主要標示符的含義或作用加以說明,并提供一個完整的程序流程圖。g、調(diào)試程序、測試數(shù)據(jù)過程成功。1.4 學生成績管理系統(tǒng)設計要求用c語言實現(xiàn)系統(tǒng)。利用結(jié)構(gòu)體數(shù)組實現(xiàn)學生成績的數(shù)據(jù)結(jié)構(gòu)設計。系統(tǒng)具有增加、查詢、排序等基本功能。系統(tǒng)的各個功能模塊要求用函數(shù)的形式實現(xiàn)。將學生成績信息存在文件中。完成設計任務并書寫課程設計報告。1.5 學生成績管理系統(tǒng)實現(xiàn)的功能(1)每一條記錄包括一

6、個學生的學號、姓名、3門課成績、平均成績。(2)添加功能:可以一次完成若干條記錄的輸入。(3)顯示功能:完成全部學生記錄的顯示。(4)查找功能:完成按姓名、學號查找學生記錄,并顯示。(5)排序功能:按學生學號或平均成績進行排序。(6)保存功能:將學生記錄存在自定義文件名的文件中。(7)退出功能:退出系統(tǒng)(8)應提供一個界面來調(diào)用各個功能,調(diào)用界面和各個功能的操作界面應盡可能清晰美觀!第二章:技術文檔學生管理系統(tǒng)2.1 程序的總體設計輸入成績插入成績刪除成績查詢成績成績排序統(tǒng)計輸出保存文件退出系統(tǒng)2.2 主要數(shù)據(jù)2.2.1 庫文件#include #include #include 2.2.2

7、調(diào)用函數(shù)及函數(shù)文件#include common.h#include input.h#include output.h#include sort.h#include find.h#include insert.h#include deleteitem.h#include stat.h#include save.h#include paint.hvoid delete_item(student *data, int *len) /用以刪除錯誤或多余成績void find(student *data, int len) /用于以姓名或?qū)W號搜索成績void input(student *data,

8、int *len) /輸出函數(shù)void insert(student *data, int *len) /插入新的成績void output(student *data, int len) /輸出成績void paint() /顯示界面函數(shù)void save(student *data, int len) /保存文件函數(shù)void sort(student *data, int len) /成績排序總函數(shù)void sort_number(student *data, int len) /以下為成績排序的子函數(shù)void sort_chinese(student *data, int len) /包

9、括各科成績、平均分及總分void sort_math(student *data, int len)void sort_english(student *data, int len)void sort_average(student *data, int len)void sort_total(student *data, int len)void stat(student *data, int len) /統(tǒng)計輸出2.2.3 結(jié)構(gòu)體數(shù)組及宏定義#define maxn 35#define max_name 256typedef struct student /學生信息int no; /定義學

10、生學號char namemax_name; /學生姓名數(shù)組double chinese; /以下分別定義語文、數(shù)學、英語、平均分、總分double math;double english;double mark_ave;double mark_tot; student; /定義結(jié)構(gòu)體類型名2.3模塊設計及具體的算法分析2.3.1輸入模塊用于成績首次輸入,需按固定格式輸入但輸入各科成績中有超過100或小于0的的即為錯誤返回,無需再次輸入學號,從課程姓名處開始輸入在儲存各科成績的同時,計算總分于平均分但輸入結(jié)束時,輸入-1可返回主界面 主界面 輸入1 按格式輸入成績 判斷是否有打漁100或小于0的

11、數(shù)有則返回重新輸入無則數(shù)據(jù)輸入成功,接著輸入下組數(shù)據(jù)輸入完成后,輸入-1返回主界面【程序代碼】int no;putchar(n);printf(%sn, 請輸入新的記錄,成績輸入完成請輸入-1.);printf(%sn, 格式:n學號n);printf(%sn, 姓名 語文 數(shù)學 英語);putchar(n);printf(如:n);printf(1n);printf(黃緯宏 99 99 99n);scanf(%d, &no);while(no != -1)data*len.no = no;scanf(%s %lf %lf %lf, data*, &data*len.chine

12、se, &data*len.math,&data*len.english);if(data*len.chinese100|data*len.math100|data*len.english100|data*len.chinese0|data*len.math0|data*len.english0) /判斷成績是否有大于100或小于0的,有則說明數(shù)據(jù)有誤,需重新輸入printf(輸入錯誤,按回車重新輸入,不用輸入學號!);getchar(); getchar();continue;data*len.mark_ave=(data*len.chinese+data*len.math+data*len

13、.english)/3.0;/計算平均值和總分data*len.mark_tot=data*len.chinese+data*len.math+data*len.english;(*len)+;scanf(%d, &no);2.3.2 刪除多余數(shù)據(jù)模塊直接輸入-1可返回主界面從頭開始順序查找學號,若未找到則返回輸出未找到需要刪除的學生刪除數(shù)據(jù)后將后面的數(shù)據(jù)依次重新排序 輸入3輸入-1?主界面 是未找到需要刪除的學生是否有這個學號? 輸入學號否對學號所對應成績進行替換否沒有任何記錄是否還有數(shù)據(jù)?是否是【程序代碼】 int no, i, pos; /定義臨時學號變量、計數(shù)變量 lab: pos=0

14、; /lab用來作為goto語句的返回點 printf(%sn, 輸入需要刪除的學生的學號,退出當前菜單請輸入-1.); scanf(%d, &no); if (no = -1) return; /輸入為-1是返回主界面 while( (datapos.no != no) & (pos = *len) /如果計數(shù)值大于學生數(shù),則說明未找到需要刪除的學生,返回重新輸入學號 printf(%sn, 未找到需要刪除的學生); goto lab; /goto語句,跳到之前所做的節(jié)點 else for (i = pos+1;i *len; i+) /用目標學號后面的數(shù)據(jù)向前進行替換,以達到刪除的效果 d

15、atai-1 = datai; *len = *len -1; if (*len = 0) /如果學生數(shù)為0.則說明沒有數(shù)據(jù)可刪除了,按回車返回主界面 printf(%sn, 沒有任何記錄,請按回車鍵返回.); getchar(); getchar(); return; goto lab; 2.3.3 搜索模塊選擇進行姓名或?qū)W號的搜索,在此輸入-1時返回主界面找到目標學號時輸出學生的各項數(shù)據(jù),如各科成績,平均分,總分如果查詢的信息不存在,輸出提示信息;主界面沒有可被查找的記錄學生數(shù)為0?輸入4是檢索學號?按學號的查詢方式?否檢索姓名?是否輸出成績輸出成績未查詢到相關信息否否是是【程序代碼】in

16、t find_no,result ; /定義臨時學號和指針int i;char str256; /用來做輸入值臨時存放空間lab: result=0;if(len=0) /學生個數(shù)為0時,輸出沒有可被查找的記錄 printf(沒有可被查找的記錄n); return ; else printf(請選擇查找的方式:1.姓名 2.學號n);gets(str);if(str0=2) /如果輸入值為2,即是要使用學號搜索 printf(%sn, 請輸入需要查找的學生的學號,退出當前菜單請輸入 -1.); scanf(%d, &find_no); if (find_no = -1 ) return; /輸

17、入-1時返回主界面 while( dataresult.no != find_no & result = len ) /如果檢索次數(shù)大于學生數(shù),說明沒有這個學生 printf(%sn, 未查詢到相關信息); goto lab; else system(cls); /清屏指令 printf(%sn, 查詢信息如下:); for (i =0; i 80; i+) /輸出找到的成績 putchar(*); putchar(n); printf(%8s, 學號); printf(%8s, 姓名); printf(%8s, 語文); printf(%8s, 數(shù)學); printf(%10s, 英語);

18、printf(%12s, 平均分); printf(%10s, 總分); putchar(n); printf(%8d, dataresult.no); printf(%8s, ); printf(%8.1lf, dataresult.chinese); printf(%8.1lf, dataresult.math); printf(%10.1lf, dataresult.english); printf(%12.1lf, dataresult.mark_ave); printf(%10.1lf, dataresult.mark_tot); putchar(n);

19、for (i =0; i 79; i+) putchar(*); putchar(n); goto lab; else /如果不是學號搜索,就是要進行姓名檢索,步驟與學號類似 printf(%sn, 請輸入需要查找的學生的姓名,退出當前菜單請輸入 -1.); gets(str); if (str = -1) return; /*exit the fine sub program*/ for(result=0;result=len;result+) if(strcmp(str,)=0) system(cls); printf(%sn, 查詢信息如下:); for (

20、i =0; i 80; i+) putchar(*); putchar(n); printf(%8s, 學號); printf(%8s, 姓名); printf(%8s, 語文); printf(%8s, 數(shù)學); printf(%10s, 英語); printf(%12s, 平均分); printf(%10s, 總分); putchar(n); printf(%8d, dataresult.no); printf(%8s, ); printf(%8.1lf, dataresult.chinese); printf(%8.1lf, dataresult.math)

21、; printf(%10.1lf, dataresult.english); printf(%12.1lf, dataresult.mark_ave); printf(%10.1lf, dataresult.mark_tot); putchar(n); for (i =0; i 79; i+) putchar(*); putchar(n); goto lab; else printf(%sn, 未查詢到相關信息); goto lab; 2.3.4 插入成績按格式輸入成績,并按平均分由高到低的順序插到成績單里面輸入-1時返回主界面2.3.5顯示函數(shù)用以顯示軟件信息及制作者信息顯示主界面,主要用在

22、main函數(shù)中2.3.6 數(shù)據(jù)保存函數(shù)將輸入的成績保存到txt文件中并輸出文件已保存到成績統(tǒng)計表.txt的信息使用fopen和fprintf函數(shù)2.3.7 成績排序?qū)⒊煽儼雌骄只蚋骺瞥煽兓蚩偡诌M行排序,可挑選出各方面的狀元郎根據(jù)所輸入的序號進行選擇,用switch實現(xiàn)功能利用輸出函數(shù),把得到的排序后的結(jié)果進行輸出 主界面 排序界面按英語成績排序按語文成績排序按數(shù)學成績排序輸入5按學號排序按平均分排序按總分排序輸入1-6或0進行選擇直接輸出2.3.8統(tǒng)計分數(shù)假設每個分數(shù)段開始都為0,對每個分數(shù)段的邊界數(shù)進行比較,處于那個范圍內(nèi)就計算,超出則進行下個分數(shù)段分別對各科成績及平均分和總分進行統(tǒng)計,方

23、法一樣,在開始時進行選擇,選擇使用哪種統(tǒng)計方式,并且在最后階段輸出結(jié)果以其中一個為例進行演示:80-90范圍內(nèi)的數(shù)+160-70范圍內(nèi)的數(shù)+170-80范圍內(nèi)的數(shù)+160范圍內(nèi)的數(shù)+190-100范圍內(nèi)的數(shù)+1小于90?小于80?小于70?小于60?進行下一個數(shù)判斷是否是否是否是否2.3.9 主函數(shù)將各個分文件里面的函數(shù)整合到一起實現(xiàn)軟件的真正功能進行選擇輸入,按輸入的序號選擇功能操作,如果輸入錯誤則重新輸入【程序代碼】 student datamaxn; int len = 0; char ctrl_ch1; paint(); scanf(%c, &ctrl_ch1); while (ctr

24、l_ch1 != 8) switch(ctrl_ch1) case 1:input(data, &len); /輸入函數(shù)output(data, len);/輸出函數(shù)break;case 2:insert(data, &len); /插入成績break;case 3:delete_item(data, &len); /刪除無用成績break;case 4:find(data, len); /搜索成績break;case 5:sort(data, len); /排序函數(shù)output(data, len);break;case 6:stat(data, len);/統(tǒng)計函數(shù)break;case 7

25、:save(data, len); /保存文件break;default:if (ctrl_ch1 != n) printf(%sn, 輸入錯誤!);break;if (ctrl_ch1 != n) paint();scanf(%c, &ctrl_ch1); 第三章:用戶文檔方式一:直接打開c語言.exe文件,按界面提示進行操作方式二:在電腦中安裝vc6.0,用打開工作空間的方式打開c語言.dsw,讓程序運行后還是按照界面提示進行操作第四章:源程序代碼清單main.c文件#include #include #include #include common.h#include input.h#i

26、nclude output.h#include sort.h#include find.h#include insert.h#include deleteitem.h#include stat.h#include save.h#include paint.hvoid main() student datamaxn; int len = 0; char ctrl_ch1; paint(); scanf(%c, &ctrl_ch1); while (ctrl_ch1 != 8) switch(ctrl_ch1) case 1:input(data, &len); /輸入函數(shù)output(data,

27、 len);/輸出函數(shù)break;case 2:insert(data, &len); /插入成績break;case 3:delete_item(data, &len); /刪除無用成績break;case 4:find(data, len); /搜索成績break;case 5:sort(data, len); /排序函數(shù)output(data, len);break;case 6:stat(data, len);/統(tǒng)計函數(shù)break;case 7:save(data, len); /保存文件break;default:if (ctrl_ch1 != n) printf(%sn, 輸入錯誤

28、!);break;if (ctrl_ch1 != n) paint();scanf(%c, &ctrl_ch1); common.c文件#include #include #include #include common.h#define maxn 35#define max_name 256deleteitem.c文件#include #include #include #include common.h#include deleteitem.h/*-刪除子程序-*/void delete_item(student *data, int *len) int no, i, pos; /定義臨時

29、學號變量、計數(shù)變量 lab: pos=0; /lab用來作為goto語句的返回點 printf(%sn, 輸入需要刪除的學生的學號,退出當前菜單請輸入-1.); scanf(%d, &no); if (no = -1) return; /輸入為-1是返回主界面 while( (datapos.no != no) & (pos = *len) /如果計數(shù)值大于學生數(shù),則說明未找到需要刪除的學生,返回重新輸入學號 printf(%sn, 未找到需要刪除的學生); goto lab; /goto語句,跳到之前所做的節(jié)點 else for (i = pos+1;i *len; i+) /用目標學號后面

30、的數(shù)據(jù)向前進行替換,以達到刪除的效果 datai-1 = datai; *len = *len -1; if (*len = 0) /如果學生數(shù)為0.則說明沒有數(shù)據(jù)可刪除了,按回車返回主界面 printf(%sn, 沒有任何記錄,請按回車鍵返回.); getchar(); getchar(); return; goto lab; find.c文件#include #include #include #include common.h#include find.h/*-搜索子程序-*/void find(student *data, int len)int find_no,result ; /定

31、義臨時學號和指針int i;char str256; /用來做輸入值臨時存放空間lab: result=0;if(len=0) /學生個數(shù)為0時,輸出沒有可被查找的記錄 printf(沒有可被查找的記錄n); return ; else printf(請選擇查找的方式:1.姓名 2.學號n);gets(str);if(str0=2) /如果輸入值為2,即是要使用學號搜索 printf(%sn, 請輸入需要查找的學生的學號,退出當前菜單請輸入 -1.); scanf(%d, &find_no); if (find_no = -1 ) return; /輸入-1時返回主界面 while( data

32、result.no != find_no & result = len ) /如果檢索次數(shù)大于學生數(shù),說明沒有這個學生 printf(%sn, 未查詢到相關信息); goto lab; else system(cls); /清屏指令 printf(%sn, 查詢信息如下:); for (i =0; i 80; i+) /輸出找到的成績 putchar(*); putchar(n); printf(%8s, 學號); printf(%8s, 姓名); printf(%8s, 語文); printf(%8s, 數(shù)學); printf(%10s, 英語); printf(%12s, 平均分); pr

33、intf(%10s, 總分); putchar(n); printf(%8d, dataresult.no); printf(%8s, ); printf(%8.1lf, dataresult.chinese); printf(%8.1lf, dataresult.math); printf(%10.1lf, dataresult.english); printf(%12.1lf, dataresult.mark_ave); printf(%10.1lf, dataresult.mark_tot); putchar(n);for (i =0; i 79; i+)

34、putchar(*); putchar(n); goto lab; if(str0=1) /如果不是學號搜索,就是要進行姓名檢索,步驟與學號類似 printf(%sn, 請輸入需要查找的學生的姓名.); gets(str);/ if (str0 =0)/ return; /*exit the fine sub program*/ for(result=0;result=len;result+) if(strcmp(str,)=0) system(cls); printf(%sn, 查詢信息如下:); for (i =0; i 80; i+) putchar(*);

35、 putchar(n); printf(%8s, 學號); printf(%8s, 姓名); printf(%8s, 語文); printf(%8s, 數(shù)學); printf(%10s, 英語); printf(%12s, 平均分); printf(%10s, 總分); putchar(n); printf(%8d, dataresult.no); printf(%8s, ); printf(%8.1lf, dataresult.chinese); printf(%8.1lf, dataresult.math); printf(%10.1lf, dataresul

36、t.english); printf(%12.1lf, dataresult.mark_ave); printf(%10.1lf, dataresult.mark_tot); putchar(n); for (i =0; i 79; i+) putchar(*); putchar(n); goto lab; printf(%sn, 沒有查詢到相關信息); goto lab; input.c文件#include #include #include #include common.h#include input.h/*-輸入信息子程序-*/void input(student *data, int

37、 *len)int no;putchar(n);printf(%sn, 請輸入新的記錄,成績輸入完成請輸入-1.);printf(%sn, 格式:n學號n);printf(%sn, 姓名 語文 數(shù)學 英語);putchar(n);printf(如:n);printf(1n);printf(嘉嘉 99 99 99n);scanf(%d, &no);while(no != -1)data*len.no = no;scanf(%s %lf %lf %lf, data*, &data*len.chinese, &data*len.math,&data*len.english);if(d

38、ata*len.chinese100|data*len.math100|data*len.english100|data*len.chinese0|data*len.math0|data*len.english0) /判斷成績是否有大于100或小于0的,有則說明數(shù)據(jù)有誤,需重新輸入printf(輸入錯誤,按回車重新輸入,不用輸入學號!);getchar(); getchar();continue;data*len.mark_ave=(data*len.chinese+data*len.math+data*len.english)/3.0;/計算平均值和總分data*len.mark_tot=d

39、ata*len.chinese+data*len.math+data*len.english;(*len)+;scanf(%d, &no);insert.c文件#include #include #include #include common.h#include insert.h/*-插入子程序-*/void insert(student *data, int *len)int no, pos;double chinese, math, english, mark_ave, mark_tot;int i;char namemax_name;lab: printf(%sn, 輸入新的記錄,退出

40、當前菜單請輸入-1.);printf(%sn, 格式:學號);printf(%sn, 姓名 語文 數(shù)學 英語);scanf(%d, &no);if (no = -1) return;data*len.no = no;scanf(%s %lf %lf %lf, name, &chinese, &math, &english);mark_ave=(chinese+math+english)/3.0;mark_tot=chinese+math+english;pos = 0;while (datapos.mark_ave mark_ave) & (pos = pos; i-) datai+1 = d

41、atai;datapos.no = no;strcpy(, name);datapos.chinese = chinese;datapos.math = math;datapos.english = english;datapos.mark_ave = mark_ave;datapos.mark_tot = mark_tot;(*len)+;goto lab;output.c文件#include #include #include #include common.h#include output.h/*-輸出信息子程序-*/void output(student *data, int len) int i; system(cls); printf(%8s, 學號); printf(%8s, 姓名); printf(%8s, 語文); printf(%8s, 數(shù)學); printf(%10s, 英語); printf(%12s, 平均分); pri

溫馨提示

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

評論

0/150

提交評論