c語言課程設(shè)計(jì)學(xué)生管理信息系統(tǒng)設(shè)計(jì)_第1頁
c語言課程設(shè)計(jì)學(xué)生管理信息系統(tǒng)設(shè)計(jì)_第2頁
c語言課程設(shè)計(jì)學(xué)生管理信息系統(tǒng)設(shè)計(jì)_第3頁
c語言課程設(shè)計(jì)學(xué)生管理信息系統(tǒng)設(shè)計(jì)_第4頁
c語言課程設(shè)計(jì)學(xué)生管理信息系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、學(xué)生管理信息系統(tǒng)設(shè)計(jì)一、 設(shè)計(jì)任務(wù)1.選題意義設(shè)計(jì)該項(xiàng)目可以簡化學(xué)生信息管理的流程,使管理更加簡便、清晰。本程序包含輸入記錄、顯示記錄、按成績排序、插入記錄、刪除記錄(按姓名查找并刪除)、查找并顯示記錄(按姓名查找)、輸出系統(tǒng)信息等各種學(xué)生管理系統(tǒng)所需功能,基本能夠滿足管理需求。2.設(shè)計(jì)目標(biāo)設(shè)計(jì)該程序是為了實(shí)現(xiàn)更簡潔的學(xué)生信息管理,滿足管理學(xué)生學(xué)號、姓名和成績等信息的要求。系統(tǒng)具體功能如下:(1)輸入記錄 輸入的記錄包括:學(xué)生學(xué)生證號、姓名、成績;(2)顯示記錄 顯示所有以上輸入記錄或根據(jù)成績排序后的記錄;(3)按成績排序 根據(jù)學(xué)生成績由大到小排序;(4)插入一條記錄 插入一條包含學(xué)生信息的記

2、錄;(5)刪除一條記錄 查找姓名,并刪除該學(xué)生記錄;(6)查找 按照學(xué)生姓名查找并顯示該學(xué)生信息;(7)輸出統(tǒng)計(jì)信息 輸出包含:記錄總數(shù)、最高分、最低分、平均分和掛科學(xué)生信息等; (8)讀取信息 將保存與vc同一個(gè)盤的文件中的學(xué)生記錄讀取出來;(9)存儲信息 將學(xué)生信息保存指定文件中;(10)退出程序。二、 程序設(shè)計(jì)與實(shí)現(xiàn)1.程序結(jié)構(gòu)該系統(tǒng)首先定義了包含:學(xué)生學(xué)號、姓名、成績的結(jié)構(gòu)體。然后定義了菜單函數(shù)供用戶選擇,緊接著定義了實(shí)現(xiàn)以上各功能的子函數(shù)。最后是主函數(shù),主函數(shù)通過switch語句實(shí)現(xiàn)對各子函數(shù)的調(diào)用。圖1. 系統(tǒng)程序功能組成框圖學(xué)生信息管理系統(tǒng)菜單選擇保存至文件統(tǒng)計(jì)信息從文件讀取查找

3、記錄刪除記錄插入記錄按成績排序讀入記錄顯示記錄退出系統(tǒng)2. 數(shù)據(jù)描述結(jié)構(gòu)體類型定義說明說明:該程序定義了一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體變量名為student,結(jié)構(gòu)體數(shù)組包含:(char型)學(xué)號、(char型)學(xué)生姓名以及(int型)學(xué)生成績。該結(jié)構(gòu)體如下:typedef struct /*定義結(jié)構(gòu)體數(shù)組*/ char num10; /*學(xué)號*/ char name20; /*姓名*/ int score; /*成績*/ student; student stu80; /*結(jié)構(gòu)體數(shù)組變量*/3.函數(shù)功能說明程序包含11個(gè)函數(shù),除主函數(shù)外,還有:菜單函數(shù)int menu_select()、輸入記錄函數(shù)int

4、input(student stud,int n)、顯示所有記錄函數(shù)void display(student stud,int n)、排序函數(shù)void sort_by_score(student stud ,int n)、插入記錄函數(shù)int insert_a_record(student stud int n)、刪除記錄函數(shù)int delete_a_record(student stud,int n)、查詢函數(shù)void query_a_record(student stud ,int n)、統(tǒng)計(jì)系統(tǒng)信息函數(shù)void statistic(student stud,int n)、讀取信息函數(shù)int

5、 addfromtext(stuent stud,int n)、存儲信息函數(shù)void writetotext(student stud,int n)等10個(gè)輔助系統(tǒng)完成各項(xiàng)功能函數(shù)。各函數(shù)詳細(xì)說明如下:(1)主函數(shù)void main()算法描述:利用無限次循環(huán)for(;)和switch()實(shí)現(xiàn)對各函數(shù)的調(diào)用,系統(tǒng)根據(jù)輸入的數(shù)字選項(xiàng)來調(diào)用相應(yīng)的函數(shù),實(shí)現(xiàn)相應(yīng)的功能。(2)菜單函數(shù)int menu_select()函數(shù)功能:使用者通過輸入數(shù)字選項(xiàng)實(shí)現(xiàn)對各功能的使用。當(dāng)運(yùn)行完任一功能,返回運(yùn)行界面時(shí),也要用到該函數(shù)。算法描述:使用do-while循環(huán)進(jìn)行菜單選擇,在循環(huán)內(nèi)用getchar()讀如所選

6、擇的序號,并且每次運(yùn)行都運(yùn)用system(cls)進(jìn)行清屏。(3)輸入記錄函數(shù)int input(student stud,int n)函數(shù)功能:輸入學(xué)生學(xué)號、姓名和成績,輸入后有一個(gè)提示語句是否繼續(xù)輸入。根據(jù)需要選擇y:繼續(xù)輸入記錄;選擇n:停止輸入。算法描述:使用while循環(huán)和標(biāo)準(zhǔn)輸入函數(shù)進(jìn)行數(shù)據(jù)的輸入。(4)顯示所有記錄函數(shù)void display(student stud,int n) 函數(shù)功能:將輸入的所有記錄顯示在運(yùn)行界面,或?qū)闯煽兣判蚝蟮挠涗涳@示在界面。 算法描述:使用for循環(huán)進(jìn)行循環(huán)輸出,循環(huán)內(nèi)運(yùn)用if語句使十條數(shù)據(jù)可以實(shí)現(xiàn)暫停功能。其中還包含了一些輔助的使界面更簡潔、清

7、晰的語句(5)排序函數(shù)void sort_by_score(student stud ,int n) 函數(shù)功能:按學(xué)生成績由高到底的順序進(jìn)行排序。算法描述:運(yùn)用簡單冒泡法排序,排序后通過顯示記錄功能將排序后的記錄顯示在界面。(6)插入記錄函數(shù) int insert_a_record(student stud int n)函數(shù)功能:插入學(xué)生信息,包括學(xué)生學(xué)號、姓名和成績,插入同時(shí)按成績進(jìn)行排序,并顯示“添加成功”。算法描述:使用標(biāo)準(zhǔn)的輸入函數(shù)輸入一條學(xué)生記錄,帶到返回值中,并調(diào)用排序函數(shù)將該學(xué)生記錄插入到排好序的記錄中。(7)刪除記錄函數(shù)int delete_a_record(student s

8、tud,int n)函數(shù)功能:按姓名將需要刪除的記錄刪除。首先輸入姓名,判斷是否存在該學(xué)生記錄:如果存在,回車后,顯示“刪除成功”;如果不存在,顯示“無法找到該信息”。算法描述:運(yùn)用標(biāo)準(zhǔn)輸入函數(shù)輸入需要刪除記錄的學(xué)生的姓名,通過用while循環(huán)查找該學(xué)生信息,再運(yùn)用if語句看是否存在該學(xué)生,無則返回“無法找到該信息”,有則運(yùn)用for循環(huán)進(jìn)行刪除操作,即找到記錄后用后面記錄覆蓋前面的記錄。這種方法雖不是直接將記錄刪除,只是將后邊的學(xué)生記錄復(fù)制到要刪除的學(xué)生記錄,但實(shí)現(xiàn)的功能是相同的。執(zhí)行完刪除命令后返回“刪除成功”。(8)查詢函數(shù)void query_a_record(student stud

9、,int n)函數(shù)功能:定義該函數(shù)為無返回值的的有參函數(shù),根據(jù)輸入的姓名查找并顯示學(xué)生的學(xué)號、姓名和成績。算法描述:運(yùn)用標(biāo)準(zhǔn)的輸入函數(shù)輸入要查找的學(xué)生姓名,然后進(jìn)行while循環(huán),用if語句進(jìn)行判斷是否存在該學(xué)生信息,無則顯示“無法找到該信息”,有則將該學(xué)生信息運(yùn)用標(biāo)準(zhǔn)輸出函數(shù)輸出。(9)統(tǒng)計(jì)系統(tǒng)信息函數(shù)void statistic(student stud,int n)函數(shù)功能:統(tǒng)計(jì)輸入的學(xué)生信息,包括記錄總數(shù),成績最低和最高學(xué)生的學(xué)號、姓名和成績,以及所有學(xué)生的平均成績和掛科學(xué)生(即成績小于60分)的信息。算法描述:首先統(tǒng)計(jì)記錄的條數(shù)輸出總共的記錄條數(shù),然后對所有成績求和,存入sum變量中

10、,再求平均值并將平均值輸出。用兩條if語句找到最高分和最低分,并分別將他們的信息輸出。最后運(yùn)用for循環(huán)并定義flag作為標(biāo)記掛科的變量,即當(dāng)flag=1時(shí),該學(xué)生掛科,輸出他的信息。若沒有學(xué)生掛科,則輸出“無學(xué)生掛科”。(10)讀取信息函數(shù)int addfromtext(stuent stud,int n)函數(shù)功能:定義該函數(shù)為一個(gè)有返回值的有參函數(shù),根據(jù)輸入的文件名進(jìn)行讀取記錄。算法描述:運(yùn)用標(biāo)準(zhǔn)輸入函數(shù)輸入文件名,通過if語句判斷,如果有該文件則打開,并使用fscanf進(jìn)行操作,無該文件則顯示“打開失敗”。(11)存儲信息函數(shù)void writetotext(student stud,i

11、nt n)函數(shù)功能:該函數(shù)定義為無返回值的有參函數(shù),可以把學(xué)生記錄保存自己命名的文件中。算法描述:運(yùn)用while循環(huán)進(jìn)行存儲,并使用fprintf,存儲完成之后顯示“操作成功”,可以使用讀取功能讀取此文件的內(nèi)容。圖2.系統(tǒng)總流程圖存儲記錄退出程序統(tǒng)計(jì)信息查找記錄n=0n=9n=8n=7n=6開始輸入nn=1n=2n=3n=4n=5輸入數(shù)據(jù)顯示記錄按成績排序插入記錄刪除記錄讀入數(shù)據(jù)結(jié)束三、 設(shè)計(jì)難點(diǎn)與解決方法(1) 設(shè)計(jì)難點(diǎn)設(shè)計(jì)難點(diǎn)包括:數(shù)組的調(diào)用、按成績運(yùn)用冒泡法進(jìn)行排序、查找掛科學(xué)生信息和文件的使用以及怎樣將記錄存儲到指定文件等。(2) 解決方法通過看書以及請教老師和同學(xué)將難點(diǎn)一一解決。四、

12、 設(shè)計(jì)效果與不足之處圖3程序效果圖如下:不足之處:(1)程序僅包含了一項(xiàng)學(xué)生成績,在實(shí)際運(yùn)用中需要多門成績進(jìn)行統(tǒng)計(jì)操作;(2)運(yùn)行第8功能時(shí),需先運(yùn)行9功能將信息存儲到指定文件中,才能運(yùn)行8功能,否則直接運(yùn)行8功能將無法打開文件;(3)輸入太多個(gè)學(xué)生的信息時(shí),屏幕顯示不能控制為一頁一頁顯示。五、 學(xué)習(xí)體會經(jīng)過幾周的程序編寫和調(diào)試,我受益匪淺,學(xué)到了很多以前不知道的東西:(1)學(xué)會了認(rèn)識調(diào)試中產(chǎn)生的各種錯(cuò)誤,通過分析引起錯(cuò)誤的原因并改正。有時(shí)候會出現(xiàn)很多錯(cuò)誤,而其中的某些錯(cuò)誤有可能都是由一個(gè)錯(cuò)誤引起的。因此,改正一個(gè)后,會有多個(gè)錯(cuò)誤同時(shí)消失;(2)通過查書和上網(wǎng)查詢了解和認(rèn)識了很多頭文件,例如:

13、 stdlib.h動態(tài)存儲分配頭文件、ctype.h字符函數(shù)頭文件等;(3)通過這次程序設(shè)計(jì)使我認(rèn)識到使用結(jié)構(gòu)體的方便、快捷,以及調(diào)用結(jié)構(gòu)體數(shù)組時(shí)應(yīng)該注意的問題,特別是結(jié)構(gòu)體變量名與成員名之間的“.”;(4)這次設(shè)計(jì)讓我充分的認(rèn)識到c語言的重要性。此程序雖參考了很多文獻(xiàn)資料,但其中的程序基本是在自己知識范圍內(nèi)完成的??偨Y(jié):這次的課程設(shè)計(jì)為我以后閱讀c程序和設(shè)計(jì)程序打下了堅(jiān)實(shí)的基礎(chǔ),也為繼續(xù)學(xué)習(xí)其他語言開了一個(gè)很好的頭。附錄1:程序使用說明為了使用者能夠獲得正確的程序運(yùn)行結(jié)果,防止未按程序要求輸入,導(dǎo)致程序退出,現(xiàn)對該程序說明如下:(1)程序運(yùn)行環(huán)境: vc+ ;(2)文件夾設(shè)置:所有文件包含在

14、以“p081513088黃鑫”命名的文件夾中,包含一個(gè)“學(xué)生管理信息系統(tǒng) .cpp”文件,直接打開運(yùn)行即可;(3)文件組成說明:程序頭文件由#include動態(tài)存儲分配頭文件、#include字符函數(shù)頭文件、#include庫函數(shù)文件、#include字符串函數(shù)文件 組成;(4)操作說明:打開c+程序,編譯、鏈接、運(yùn)行,此時(shí)運(yùn)行界面。屏幕顯示菜單選擇輸入09的數(shù)字選擇菜單,選擇菜單后按照提示輸入信息再進(jìn)行操作,系統(tǒng)中的提示信息都設(shè)置為中文提示,所以直接按照提示進(jìn)行操作即可,系統(tǒng)功能以上已有介紹,此處不再贅述。注意:操作時(shí)當(dāng)?shù)诙位蛘叩谌芜M(jìn)入系統(tǒng)時(shí),無需重新輸入記錄,只需先執(zhí)行第8功能,按提示

15、輸入上一次用戶指定所有保存記錄的文件的文件名,打開該文件,然后使用第2功能就可以顯示所有已保存的記錄,即上次輸入的記錄已保存在指定文件當(dāng)中,無需更新記錄,請用戶注意。附錄2:源程序#include /*引用庫函數(shù)*/ #include #include #include typedef struct /*定義結(jié)構(gòu)體數(shù)組*/ char num10; /*學(xué)號*/ char name20; /*姓名*/ int score; /*成績*/ student;student stu80; /*結(jié)構(gòu)體數(shù)組變量*/ int menu_select() /*菜單函數(shù)*/ char c; do system(

16、cls); /*運(yùn)行前清屏*/ printf(tt 歡迎使用學(xué)生信息管理系統(tǒng) n);printf(tt*n);printf(tt *學(xué)生管理信息系統(tǒng)*n); /*菜單選擇*/ printf(tt | 1. 請輸入記錄 |n); printf(tt | 2. 顯示所有記錄 |n); printf(tt | 3. 排序 |n); printf(tt | 4. 添加記錄 |n); printf(tt | 5. 刪除記錄 |n); printf(tt | 6. 查詢 |n); printf(tt | 7. 統(tǒng)計(jì)系統(tǒng)信息 |n); printf(tt | 8. 從正文中添加記錄 |n); printf(

17、tt | 9. 將所有記錄存儲到文件中 |n); printf(tt | 0. 退出程序 |n); printf(tt*n); printf(tt 請選擇使用選項(xiàng):(0-9):); c=getchar(); /*讀入選擇*/ while(c9); return(c-0); /*返回選擇*/ int input(student stud,int n) /*輸入若干條記錄*/ int i=0; char sign,x10; /*x10為清除多余的數(shù)據(jù)所用*/ while(sign!=n&sign!=n) /*判斷*/ printf(ttt請輸入學(xué)生證號:); /*交互輸入*/ scanf(ttt%

18、s,studn+i.num); printf(ttt請輸入學(xué)生姓名:); scanf(ttt%s,studn+); printf(ttt請輸入學(xué)生成績:); scanf(ttt%d,&studn+i.score); gets(x); /*清除多余的輸入*/ printf(ttt是否繼續(xù)輸入記錄?(y/n); scanf(ttt%c,&sign); /*輸入判斷*/ i+; return(n+i); void display(student stud,int n) /*顯示所有記錄*/ int i; printf(ttt-n); /*格式頭*/ printf(ttt學(xué)生證號 姓名 成

19、績n); printf(ttt-n); for(i=1;i1&i%10=0) /*每十個(gè)暫停*/ printf(ttt-n); /*格式*/ printf(ttt); system(pause); printf(ttt-n); printf(ttt); system(pause); void sort_by_score(student stud,int n) /*按成績排序*/ int i,j,*p,*q,s; char t10; for(i=0;in-1;i+) /*冒泡法排序*/ for(j=0;jn-1-i;j+) if(studj.scorestudj+1.score) strcpy(

20、t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t); strcpy(t,studj+1.name); strcpy(studj+1.name,); strcpy(,t); p=&studj+1.score; q=&studj.score; s=*p; *p=*q; *q=s; int insert_a_record(student stud,int n) /*插入一條記錄*/ char x10; /*清除多余輸入所用*/ printf(ttt學(xué)生證號:); /*交互式輸入*

21、/ scanf(ttt%s,studn.num); printf(ttt學(xué)生姓名:); scanf(ttt%s,); printf(ttt學(xué)生成績:); scanf(ttt%d,&studn.score); gets(x); n+;sort_by_score(stud,n);printf(ttt添加成功!n); /*返回成功信息*/ return(n); int delete_a_record(student stud,int n) /*按姓名查找,刪除一條記錄*/ char s20; int i=0,j; printf(ttt請輸入該學(xué)生姓名:); /*交互式問尋*/ s

22、canf(%s,s); while(strcmp(,s)!=0&in) i+; /*查找判斷*/ if(i=n) printf(ttt無法找到該信息!n); /*返回失敗信息*/ return(n); for(j=i;jn-1;j+) /*刪除操作*/ strcpy(studj.num,studj+1.num); strcpy(,studj+1.name); studj.score=studj+1.score; printf(ttt刪除成功!n); /*返回成功信息*/ return(n-1); void query_a_record(student s

23、tud,int n) /*查找并顯示一個(gè)記錄*/ char s20; int i=0; printf(ttt請輸入要查詢的學(xué)生姓名:); /*交互式輸入*/ scanf(ttt%s,s); while(strcmp(,s)!=0&in) i+; /*查找判斷*/ if(i=n) printf(ttt無法找到該信息!n); /*輸入失敗信息*/ return; printf(ttt該學(xué)生學(xué)生證號:%sn,studi.num); /*輸出該學(xué)生信息*/ printf(ttt該學(xué)生的成績:%dn,studi.score); void statistic(student stud,

24、int n) /*新增功能,輸出統(tǒng)計(jì)信息*/ int i,j=0,k=0,sum=0,flag,m=0; float aver; /*成績平均值*/ for(i=0;istudi.score) j=i; if(studk.scorestudi.score) k=i; aver=1.0*sum/n; printf(ttt總計(jì) %d 記錄.n,n); /*總共記錄數(shù)*/ printf(ttt最低學(xué)生成績:n); /*最低分*/ printf(ttt學(xué)生證號:%s 姓名:%s 成績:%dn,studj.num,,studj.score); printf(ttt最高學(xué)生成績:n);

25、 /*最高分*/ printf(ttt學(xué)生證號:%s 姓名:%s 成績:%dn,studk.num,,studk.score); printf(ttt平均成績: %5.2fn,aver); /*平均分*/ printf(nttt掛科學(xué)生信息:n);for(i=0;in;i+)flag=0;if(studi.score60)flag=1;+m;if(flag=1)printf(ttt學(xué)生證號:%s 姓名:%s 成績:%dn,studi.num,,studi.score);if(m) printf(ttt掛科人數(shù)為:%dn,m);else printf(tt

26、t無學(xué)生掛科!n); int addfromtext(student stud,int n) /*從文件中讀入數(shù)據(jù)*/ int i=0,num; file *fp; /*定義文件指針*/ char filename20; /*定義文件名*/ printf(ttt請輸入文件名:); scanf(ttt%s,filename); /*輸入文件名*/ if(fp=fopen(filename,rb)=null) /*打開文件*/ printf(ttt無法打開文件!n); /*打開失敗信息*/ printf(ttt); system(pause); return(n); fscanf(fp,%d,&n

27、um); /*讀入總記錄量*/ while(inum) /*循環(huán)讀入數(shù)據(jù)*/ fscanf(fp,%s%s%d,studn+i.num,studn+,&studn+i.score); i+; n+=num; fclose(fp); /*關(guān)閉文件*/ printf(ttt成功!n); printf(ttt); system(pause); return(n); void writetotext(student stud,int n) /*將所有記錄寫入文件*/ int i=0; file *fp; /*定義文件指針*/ char filename20; /*定義文件名*/ print

28、f(ttt從正文中添加記錄:n); /*輸入文件名*/ printf(ttt請輸入文件名:); scanf(ttt%s,filename); if(fp=fopen(filename,w)=null) /*打開文件*/ printf(ttt無法打開文件!n); system(pause); return; fprintf(fp,%dn,n); /*循環(huán)寫入數(shù)據(jù)*/ while(in) fprintf(fp,%-16s%-15s%dn,studi.num,,studi.score); i+; fclose(fp); /*關(guān)閉文件*/ printf(成功!n); /*返回成功信息*/ void main() /*主函數(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論