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

下載本文檔

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

文檔簡介

1、一、 課程設計的內容(1) 信息維護:要求:學生信息數據要以文件的形式保存,能實現(xiàn)學生信息數據的維護。此模塊包括子模塊有:增加學生信息、刪除學生信息、修改學生信息(2) 信息查詢:要求:查詢時可實現(xiàn)按姓名查詢、按學號查詢(3) 成績統(tǒng)計:要求:A輸入任意的一個課程名(如數學)和一個分數段(如60-70),統(tǒng)計出在此分數段的學生情況。(4) 排序:能對用戶指定的任意課程名,按成績升序或降序排列學生數據并顯示排序結果(使用表格的形式顯示排序后的輸出結果)(使用多種方法排序者,加分) (二)其它要求:(1) 只能使用C/C+語言,源程序要有適當的注釋,使程序容易閱讀(2) 至少采用文本菜單界面(如果

2、能采用圖形菜單界面更好)(3) 學生可自動增加新功能模塊(視情況可另外加分)(4)寫出課程設計報告,具體要求見相關說明文檔二、課程設計的要求與數據1、進一步掌握和利用C語言進行程設計的能力;2、進一步理解和運用結構化程序設計的思想和方法;3、初步掌握開發(fā)一個小型實用系統(tǒng)的基本方法;4、學會調試一個較長程序的基本方法;5、學會利用流程圖或N-S圖表示算法;6、掌握書寫程序設計開發(fā)文檔的能力。結束開始輸出菜單根據菜單輸入n的值選擇程序輸入退出排序查詢統(tǒng)計統(tǒng)計插入刪除三、課程設計應完成的工作1、編寫完成相應題目的程序;2、編寫課程設計報告,課程設計報告的內容應包括以下6個部分:1) 需求分析:包括設

3、計題目、設計要求以及系統(tǒng)功能需求分析;2) 總體設計:包括系統(tǒng)總體設計框架和系統(tǒng)功能模塊圖;3) 詳細設計:包括主要功能模塊的算法設計思路以及對應的工作流程圖;4) 調試分析過程描述:包括測試數據、測試輸出結果,以及對程序調試過程中存在問題的思考(列出主要問題的出錯現(xiàn)象、出錯原因、解決方法及效果等,適當的包含結果截圖);5) 總結:課程設計完成了哪些功能,有沒有什么擴展功能?還有哪些地方需要改進?課程設計過程中的學習體會與收獲、對本次課程設計的認識以及自己的建議等內容; 6) 附錄:主要源程序代碼,含必要的注釋。3、答辯:在實驗室建立程序運行的環(huán)境,并在指導教師的監(jiān)督下,獨立解 決問題、運行程

4、序和回答教師提出的問題。目 錄1 設計目的與要求P42 總體設計P43 詳細設計P53.1功能模塊設計P53.1.1 XX功能模塊(可選) P53.1.2 YY功能模塊(可選) P63.1.3 ZZ功能模塊(可選)P73.2數據結構設計P84調試分析 P9 4.1結構體P9 4.2鏈表P115遇到的問題及解決方法分析P126 總結P137源文件P13 7.1鏈表P13 7.2結構體P281、目的與要求一 目的:編制一程序實現(xiàn)對學生成績的管理,讓自己既動手又動腦,獨立實踐,將課本上的理論知識和實際應用問題進行有機結合,鍛煉自己分析、解決實際問題的能力,提高自身項目開發(fā)及程序調試能力。二 要求:

5、1、整個系統(tǒng)均用C語言實現(xiàn);2、利用指針、結構體、鏈表來實現(xiàn)學生成績的數據結構設計;3、系統(tǒng)具有輸入、顯示、查詢(查詢時可實現(xiàn)按姓名查詢、按學號查詢)、刪除、排序、插入,保存、讀取基本功能;4、系統(tǒng)的各個功能模塊都用函數的形式來實現(xiàn);5、學生信息數據要以文件的形式保存,能實現(xiàn)學生信息數據的維護。此模塊包括子模塊有:增加學生信息、刪除學生信息、修改學生信息;6、可以輸入任意的一個課程名(如數學)和一個分數段(如60-70),統(tǒng)計出在此分數段的學生情況;7、能對用戶指定的任意課程名,按成績升序或降序排列學生數據并顯示排序結果;8、可自動增加新功能模塊;9、可以將學生信息從文件中讀取出來。 2 總體

6、設計1、 主函數 main()利用if-else,While循環(huán)語句和switch()實現(xiàn)各函數的調用,系統(tǒng)根據輸入的數字選項來調用相應的函數。2、 菜單選擇函數void menu();這是一個無參函數,主要實現(xiàn)“功能選擇”的界面,在這個界面里有顯示系統(tǒng)的13大功能,根據每個功能前面的序號進行選擇。等執(zhí)行完每一個函數功能后,按任0鍵回到主界面也要通過這個函數提示來實現(xiàn)!3、 自定義函數 void printstart()、void Wrong()、void Nofind()、void printc()、void printe(Node *p)用void Wrong()來提示輸入錯誤,用void

7、 Nofind()提示沒有找到學生資料,用void printc()來輸出中文,用void printe(Node *p)來輸出中文。main() void Add(Link l) void Maths(Link l) void Qur(Link l) void English(Link l) void Del(Link l) void select(Link l) void Modify(Link l) void Save(Link l) void Disp(Link l) void menu() void Tongji(Link l) void printc() void Chinese(

8、Link l) void printe(Node *p)3 詳細設計3.1功能模塊設計3.1.1 排序數學成績功能模塊函數void Maths(Link l)該函數用于對數學成績進行降序,ll=(Link)malloc(sizeof(Node)用于做新的鏈表連接,如果原鏈表為空的話,返回;不為空的話,p=l-next;建立接點用于保存信息,對指定鏈表地址進行排序。流程圖如圖所示:Link llll=(Link)malloc(sizeof(Node) 用于做新的連表 l-next=NULL是 否沒有資料可以 p=l-next排序 while(p)return s=(Node*)malloc(si

9、zeof(Node) rr=ll while(rr-next!=NULL& rr-next-data.mgrade=p-data.mgrade) 是 rr-next=NULL 否 rr-next=s s-next=rr-next; rr-next=s p=p-next l-next=ll-next (排序完成)3.1.2 顯示學生資料功能模塊函數void Disp(Link l)該函數負責顯示學生資料,這是一個不返回值函數。算法:先將p結點的指針指向第一個結點,將p結點(即第一個結點)的數據輸出。然后再將p結點的指針指向p指針的的指針(即下一結點),將p結點(即第一結點)的數據輸出。重復執(zhí)行此

10、步聚直到p指針指向NULL為止。流程圖如圖所示: 原來鏈表是否為空是 否提示沒有 p指向下一結點p=p-next資料可以 輸出p指向的結點,即學生信息顯示 return p指向下一結點p=p-next3.1.3 刪除資料功能模塊函數void Del(Link l)該函數用于有選擇地刪除學生資料,如果原來的鏈表為空的話,會返回;不為空的話,選擇用按哪種類型刪除,如果按學號刪除,就輸入學號,后判斷是否取得地址,取得就執(zhí)行刪除;按名字刪除就輸入名字,運行同學號一樣。流程圖如圖所示: 原鏈表是否為空是 否沒有資料 1 按1學號還是2按名字? 2可以刪除 輸入你要刪除的學號 輸入你要刪除的名字 P是否取

11、得輸入地址 P是否取得輸入地址 是 否 否 是Return r指向下一 Nofind() Nofind () r指向下一 結點 結點 執(zhí)行free(p) 執(zhí)行free(p)3.2數據結構設計(可選)一個結構體變量中可以存放一組數據(如一個學生的學號、姓名、成績等數據)。一個結構體變量的指針就是該變量所占據的內存段起始地址。可以設一個指針變量,用來指向一結構體變量,此時指針變量的值是結構體的起始地址。指針量變也可以用來指向一結構體數組中的元素。struct student char num10;/* 學號 */ char name20; char sex4; int cgrade; int mg

12、rade; int egrade; int totle; int ave; char neartime10;/* 最近更新時間 */ ; typedef struct node struct student data; struct node *next; Node,*Link;6 總 結經過一個多星期的C語言課程設計,感覺自己收獲不少!首先是:要達到這樣的功能,使用鏈表相當方便,但不容易理解,所以在這方面我很了很多的時間看課本,使C語言的知識強化了不少。其次,在做課程設計的過程中,發(fā)現(xiàn)了平時很多沒有注意到的問題,例如:返回值函數和不返回值函數兩者在主函數中的調用是不同的更重要的是,這次課程設

13、計雖然花了我不少時間,但正是這些時間,讓我見識到了C語言的重要性。這個學生成績管理系統(tǒng)都是在自己知識范圍內完成的,所以界面清晰簡單,可能不是很好看,但絕對實用!從這里我也得到一個體會,做一個程序,或者開發(fā)一個軟件,應該著重從它的后臺制作入手,不能做出一個中看不中用的程序或者軟件。相信這次的課程設計使我的C語言知識扎實了很多。由于這是第一次進行設計,寫文檔,難免會寫得不好!7 源程序7. 1鏈表#include stdio.h #include stdlib.h #include string.h int shoudsave=0; /* */ struct student char num10;

14、/* 學號 */ char name20; char sex4; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime10;/* 最近更新時間 */ ; typedef struct node struct student data; struct node *next; Node,*Link; void menu() printf(*); printf(t1登記學生資料ttttt2刪除學生資料n); printf(t3查詢學生資料ttttt4修改學生資料n); printf(t5顯示學生資料ttttt6統(tǒng)計

15、學生資料n); printf(t7排序語文成績ttttt8排序數學成績n);printf(t9排序英語成績ttttt10選出分段分數n);printf(t11保存學生資料ttttt12幫助信息ttn);printf(t0退出系統(tǒng)tttttttn);printf(*n); void printstart() printf(-n); void Wrong() printf(n=提示:輸入錯誤!n); void Nofind() printf(n=提示:沒有找到該學生!n); void printc() /* 本函數用于輸出中文 */ printf(學號t 姓名t 性別 語文成績 數學成績 英語成績

16、 總分 平均分n); void printe(Node *p)/* 本函數用于輸出英文 */ printf(%-12s%st%st%dt%dt%dt %dt %dn,p-data.num,,p-data.sex,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave); Node* Locate(Link l,char findmess,char nameornum) /* 該函數用于定位連表中符合要求的接點,并返回該指針 */ Node *r; if(strcmp(nameornum,num)=

17、0) /* 按學號查詢 */ r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /* 按姓名查詢 */ r=l-next; while(r!=NULL) if(strcmp(,findmess)=0) return r; r=r-next; return 0; void Add(Link l) /* 增加學生 */ Node *p,*r,*s; char num10; r=l; s=l-next;

18、while(r-next!=NULL) r=r-next; /* 將指針置于最末尾 */ while(1) printf(請你輸入學號(以0返回上一級菜單:); scanf(%s,num); if(strcmp(num,0)=0) break; while(s) if(strcmp(s-data.num,num)=0) printf(=提示:學號為%s的學生已經存在,若要修改請你選擇4 修改!n,num); printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next; p=(Node *)malloc

19、(sizeof(Node); strcpy(p-data.num,num); printf(請你輸入姓名:); scanf(%s,); getchar(); printf(請你輸入性別:); scanf(%s,p-data.sex); getchar(); printf(請你輸入語文成績:); scanf(%d,&p-data.cgrade); getchar(); printf(請你輸入數學成績:); scanf(%d,&p-data.mgrade); getchar(); printf(請你輸入英語成績:); scanf(%d,&p-data.egrade); get

20、char(); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle / 3; /* 信息輸入已經完成 */ p-next=NULL; r-next=p; r=p; shoudsave=1; void Qur(Link l) /* 查詢學生 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:沒有資料可以查詢!n); return; printf(n=1按學號查找n=2按姓名查找n); scanf(%d,&sel);

21、if(sel=1)/* 學號 */ printf(請你輸入要查找的學號:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(tttt查找結果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) /* 姓名 */ printf(請你輸入要查找的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) printf(tttt查找結果n); printstar

22、t(); printc(); printe(p); printstart(); else Nofind(); else Wrong(); void Del(Link l) /* 刪除 */ int sel; Node *p,*r; char findmess20; if(!l-next) printf(n=提示:沒有資料可以刪除!n); return; printf(n=1按學號刪除n=2按姓名刪除n); scanf(%d,&sel); if(sel=1) printf(請你輸入要刪除的學號:); scanf(%s,findmess); p=Locate(l,findmess,num); if

23、(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:該學生已經成功刪除!n); shoudsave=1; else Nofind(); else if(sel=2) printf(請你輸入要刪除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:該學生已經成功刪除!n); shoudsave=1; el

24、se Nofind(); else Wrong(); void Modify(Link l) Node *p; char findmess20; if(!l-next) printf(n=提示:沒有資料可以修改!n); return; printf(請你輸入要修改的學生學號:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(請你輸入新學號(原來是%s):,p-data.num); scanf(%s,p-data.num); printf(請你輸入新姓名(原來是%s):,); scanf(%s,p-d

25、); getchar(); printf(請你輸入新性別(原來是%s):,p-data.sex); scanf(%s,p-data.sex); printf(請你輸入新的語文成績(原來是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade); getchar(); printf(請你輸入新的數學成績(原來是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); getchar(); printf(請你輸入新的英語成績(原來是%d分):,p-data.egrade); scanf(%d,&p-data.

26、egrade); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3; printf(n=提示:資料修改成功!n); shoudsave=1; else Nofind(); void Disp(Link l) int count=0; Node *p; p=l-next; if(!p) printf(n=提示:沒有資料可以顯示!n); return; printf(tttt顯示結果n); printstart(); printc(); printf(n); while(p) prin

27、te(p); p=p-next; printstart(); printf(n); void Tongji(Link l) Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分數最高的接點 */Node *r=l-next; if(!r) printf(n=提示:沒有資料可以統(tǒng)計!n); return ; pm=pe=pc=pt=pa=r; while(r!=NULL) if(r-data.cgrade=pc-data.cgrade) pc=r; if(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.eg

28、rade) pe=r; if(r-data.totle=pt-data.totle) pt=r; if(r-data.ave=pa-data.ave) pa=r; r=r-next; printf(-統(tǒng)計結果-n); printf(總分最高者:t%s %d分n,,pt-data.totle); printf(平均分最高者:t%s %d分n,,pa-data.ave); printf(英語最高者:t%s %d分n,,pe-data.egrade); printf(數學最高者:t%s %d分n,,pm-

29、data.mgrade); printf(語文最高者:t%s %d分n,,pc-data.cgrade); printstart(); void Chinese(Link l) Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /* 用于做新的連表 */ll-next=NULL; if(l-next=NULL) printf(n=提示:沒有資料可以排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接點用于保存信息 */s-

30、data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.egrade=p-data.egrade) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-next; rr-next=s; p=p-next; free(l); l-next=ll-next; printf(n=提示:排序已經完成!n); void Maths(Link l) /*對數學排序*/ Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Nod

31、e); /* 用于做新的連表 */ll-next=NULL; if(l-next=NULL) printf(n=提示:沒有資料可以排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接點用于保存信息 */s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.mgrade=p-data.mgrade) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-next; r

32、r-next=s; p=p-next; free(l); l-next=ll-next; printf(n=提示:排序已經完成!n); void English(Link l) /*對英語排序*/ Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /* 用于做新的連表 */ll-next=NULL; if(l-next=NULL) printf(n=提示:沒有資料可以排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接點用于保存信息 */s-da

33、ta=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.cgrade=p-data.cgrade) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-next; rr-next=s; p=p-next; free(l); l-next=ll-next; printf(n=提示:排序已經完成!n); void select(Link l) int i; int j,k; Node *pc = l; /用于指向分數最高的接點 Node *r=l-next; if(

34、!r) printf(n=提示:沒有資料可以篩選!n); return ; printf(輸入課程名1.語文2.數學3.英語);scanf(%d,&i);if(i=1) printf(請輸入篩選分數的上限:); scanf(%d,&j); printf(請輸入篩選分數的下限:); scanf(%d,&k); printf(-篩選結果-n); printf(學號t 姓名t 性別 語文成績 數學成績 英語成績 總分 平均分n); printstart(); while(r!=NULL) if(kdata.egrade)&(r-data.egrade)next; else if(i=2) print

35、f(請輸入篩選分數的上限:); scanf(%d,&j); printf(請輸入篩選分數的下限:); scanf(%d,&k); printf(-篩選結果-n); printf(學號t 姓名t 性別 語文成績 數學成績 英語成績 總分 平均分n); printstart(); while(r!=NULL) if(kdata.mgrade)&(r-data.mgrade)next; else if(i=3) printf(請輸入篩選分數的上限:); scanf(%d,&j); printf(請輸入篩選分數的下限:); scanf(%d,&k); printf(-篩選結果-n); printf(學

36、號t 姓名t 性別 語文成績 數學成績 英語成績 總分 平均分n); printstart(); while(r!=NULL) if(kdata.cgrade)&(r-data.cgrade)next; else Wrong(); void Save(Link l) FILE* fp; Node *p; int flag=1,count=0; fp=fopen(c:student,wb); if(fp=NULL) printf(n=提示:重新打開文件時發(fā)生錯誤!n); exit(1); p=l-next; while(p) if(fwrite(p,sizeof(Node),1,fp)=1) p

37、=p-next; count+; else flag=0; break; if(flag) printf(n=提示:文件保存成功.(有%d條記錄已經保存.)n,count); shoudsave=0; fclose(fp); void main() Link l;/* 連表 */FILE *fp; /* 文件指針 */int sel; char ch; char jian; int count=0; Node *p,*r; printf(tttt學生成績管理系統(tǒng)n ttt 06自動化2班 蔡曉慶 ttttn); l=(Node*)malloc(sizeof(Node); l-next=NULL

38、; r=l; fp=fopen(C:student,wb); loop:menu(); printf(請你選擇操作:); scanf(%d,&sel); if(sel=0) if(shoudsave=1) getchar(); printf(n=提示:資料已經改動,是否將改動保存到文件中(y/n)?n); scanf(%c,&ch); if(ch=y|ch=Y) Save(l); printf(n=提示:你已經退出系統(tǒng),再見!n); return; switch(sel) case 1:Add(l);goto loop;break; /* 增加學生 */case 2:Del(l);goto l

39、oop;break;/* 刪除學生 */case 3:Qur(l);goto loop;break;/* 查詢學生 */case 4:Modify(l);goto loop;break;/* 修改學生 */case 5:Disp(l);goto loop;break;/*顯示學生*/case 6:Tongji(l);goto loop;break;/*統(tǒng)計學生*/case 7:Chinese(l);goto loop;break;/*語文排序*/case 8:Maths(l);goto loop;break;/*數學排序*/case 9:English(l);goto loop;break;/

40、*英語排序*/case 10:select(l);goto loop;break;/* 選擇分段分數 */case 11:Save(l);goto loop;break;/* 保存學生 */case 12:printf(ttt=幫助信息=n);goto loop;break; default: Wrong();getchar();break; 7. 2結構體#include#include#includestruct studentchar class_020;char num 20;char name20;float math;float c_prog;float eng;float pol

41、ity; float sport;float ave;stu1000;char j,h;/*函數聲明*/ void luru();void chaxun();void charu();void tongji();void xiugai();void shanchu();void paixu();void tuichu();FILE *fp;/指向學生信息的文件指針 void main()loop: printf(tt*ttn);printf(tt 歡迎使用學生信息管理系統(tǒng) ttn);printf(tt ttn);printf(tt 制作人:電力4 史素芬 ttn);printf(tt ttn);printf(tt ttn);printf(tt*ttn);printf(tt1. 錄入學生成績 n);printf(tt2. 排序學生成績 n); printf(tt3. 統(tǒng)計輸出成績 n);p

溫馨提示

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

評論

0/150

提交評論