




已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
;.分?jǐn)?shù):97課 程 設(shè) 計 成 果 報 告題 目: 學(xué)生成績管理系統(tǒng)設(shè)計課 程: 程序設(shè)計基礎(chǔ);.目錄1 設(shè)計目的12 設(shè)計任務(wù)內(nèi)容13 系統(tǒng)總體設(shè)計24 系統(tǒng)詳細(xì)設(shè)計24.1 輸入學(xué)生信息24.2 輸出學(xué)生信息34.3 刪除學(xué)生信息44.4 查詢學(xué)生信息54.4.1 根據(jù)姓名查詢54.4.2 根據(jù)學(xué)號查詢64.5 插入學(xué)生信息74.6學(xué)生信息排序94.7 主函數(shù)105 調(diào)試與測試116 課程設(shè)計心得與體會147 參考文獻(xiàn)158 附錄15;.1 設(shè)計目的本課程設(shè)計是信息管理與信息系統(tǒng)專業(yè)重要的實踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完程序設(shè)計基礎(chǔ)課程后進行的一次全面的綜合練習(xí)。本課程設(shè)計的目的和任務(wù):1、鞏固和加深學(xué)生對C語言課程的基本知識的理解和掌握;2、掌握C語言編程和程序調(diào)試的基本技能;3、利用C語言進行基本的軟件設(shè)計;4、掌握書寫程序設(shè)計說明文檔的能力;5、提高運用C語言解決實際問題的能力。2 設(shè)計任務(wù)內(nèi)容學(xué)生成績管理系統(tǒng)設(shè)計學(xué)生成績相關(guān)信息包括:學(xué)號、姓名、班級、數(shù)學(xué)成績、英語成績、計算機成績等(學(xué)號唯一),總成績。系統(tǒng)要求實現(xiàn)如下功能:1)系統(tǒng)功能以菜單方式工作;2)數(shù)據(jù)的添加:從鍵盤輸入數(shù)據(jù)存放到結(jié)構(gòu)體數(shù)組中;3)數(shù)據(jù)的插入:從指定位置插入一條記錄;4)數(shù)據(jù)的輸出:在屏幕上顯示出所添加的數(shù)據(jù);5)數(shù)據(jù)的刪除:從指定位置刪除一條記錄;6)數(shù)據(jù)的查找,通常以兩種方式進行查找,如姓名、記錄號(或?qū)W號、職工號等);7)數(shù)據(jù)的排序;8)退出系統(tǒng)。以上每個內(nèi)容需要通過單獨的函數(shù)來實現(xiàn),數(shù)據(jù)以結(jié)構(gòu)體數(shù)組的形式組織。3 系統(tǒng)總體設(shè)計學(xué)生成績管理系統(tǒng)輸入學(xué)生信息輸出學(xué)生信息查詢學(xué)生信息根據(jù)姓名查詢根據(jù)學(xué)號查詢刪除學(xué)生信息插入學(xué)生信息學(xué)生信息排序4 系統(tǒng)詳細(xì)設(shè)計本系統(tǒng)用來儲存多名學(xué)生的信息,并對信息進行相關(guān)的處理,使用結(jié)構(gòu)體實現(xiàn)相關(guān)功能。結(jié)構(gòu)體代碼如下:typedef struct /為結(jié)構(gòu)體起別名stuN,簡化程序。char no20; /定義no為char型數(shù)據(jù),且長度有20列。char name20;char Class20;int math,english,computer,all; /定義結(jié)構(gòu)體中的所有元素。Student;Student stuN;相關(guān)函數(shù):結(jié)構(gòu)體函數(shù)、main(主函數(shù))、Input(輸入函數(shù))、Output(輸出函數(shù))、Findname(按姓名查詢函數(shù))、Findno(按學(xué)號查詢函數(shù))、Delete(刪除函數(shù))、Insert(插入函數(shù))、Rank(排序函數(shù))、exit(退出函數(shù))4.1 輸入學(xué)生信息輸入學(xué)生信息就是對定義的結(jié)構(gòu)體中的成員進行賦值。其中,用戶需要輸入的是學(xué)號、姓名、班級、數(shù)學(xué)成績、英語成績、計算機成績,以及是否繼續(xù)的指令,總成績由求和函數(shù)實現(xiàn)。代碼如下:void Input() /用戶自定義Input函數(shù),實現(xiàn)數(shù)據(jù)的輸入功能。char k,x20;while(k!=n&k!=N) /當(dāng)輸入的不是N或者n時,執(zhí)行該循環(huán)。printf(輸入學(xué)生學(xué)號:);scanf(%s,stun.no);printf(輸入學(xué)生姓名:);scanf(%s,);printf(輸入學(xué)生班級:);scanf(%s,stun.Class);printf(輸入學(xué)生的數(shù)學(xué)成績:);scanf(%d,&stun.math);printf(輸入學(xué)生的英語成績:);scanf(%d,&stun.english);printf(輸入學(xué)生的計算機成績:);scanf(%d,&puter);stun.all=stun.math+stun.english+puter; /輸入學(xué)生的各項信息,并賦值到結(jié)構(gòu)體中。gets(x); /清除多余的輸入內(nèi)容。printf(輸入下一個?(Y/N)n);scanf(%c,&k);n+;/執(zhí)行完一次循環(huán)后,將全局變量n(成員數(shù))自增1。 4.2 輸出學(xué)生信息輸出學(xué)生信息就是將結(jié)構(gòu)體中所有成員的各個元素的值顯示在屏幕上,使用%-10d或者%-10s格式(左對齊,每個數(shù)據(jù)占10列)可將數(shù)據(jù)用表列形式輸出,使用循環(huán)語句將i個成員信息全部輸出。代碼如下:void Output() /用戶自定義Output函數(shù),實現(xiàn)數(shù)據(jù)的輸出功能。int i;printf(-n);printf(學(xué)號 姓名 班級 數(shù)學(xué) 英語 計算機 總成績n);printf(-n);for(i=0;in;i+)printf(%-10s%-10s%-10s%-10d%-10d%-10d%-10dn,stui.no,,stui.Class,stui.math,stui.english,puter,stui.all);printf(-n); /使用for循環(huán)語句,輸出結(jié)構(gòu)體中所有成員信息。4.3 刪除學(xué)生信息刪除學(xué)生信息就是將第i+1個成員的每個元素賦值到要刪除的第i個成員的相應(yīng)元素的位置上,再輸出結(jié)構(gòu)體中的前i個成員信息,使用循環(huán)結(jié)構(gòu)依次執(zhí)行到第n個成員,實現(xiàn)對第i個成員的刪除。代碼如下:void Delete() /用戶自定義Output函數(shù),實現(xiàn)數(shù)據(jù)的輸入功能。char x20; /輸入要刪除的學(xué)生姓名,char型數(shù)據(jù)占20列。int j,i=0;printf(輸入要刪除的學(xué)生姓名:);scanf(%s,x); while(strcmp(,x)!=0&in)i+; /比較輸入的x數(shù)據(jù)與結(jié)構(gòu)體中name元素,若不相同,i自增1。if(i=n)printf(未找到相關(guān)學(xué)生信息!n); /若i與n值相同,說明無此數(shù)據(jù),輸出“未找到學(xué)生信息!”。for(j=i;jn-1;j+)strcpy(stuj.no,stuj+1.no);strcpy(,stuj+1.name);strcpy(stuj.Class,stuj+1.Class); /將stuj+1中的內(nèi)容復(fù)制到stuj中。stuj.math=stuj+1.math;stuj.english=stuj+1.english;puter=stuj+1.computer;stuj.all=stuj+1.all; /將結(jié)構(gòu)體中的元素賦值給前一元素。n-; /數(shù)據(jù)刪除后,全局變量n值(成員數(shù))自減1。printf(該學(xué)生信息已刪除!n);4.4 查詢學(xué)生信息4.4.1 根據(jù)姓名查詢按照學(xué)生姓名查找學(xué)生信息,要求用戶輸入學(xué)生的姓名,再與結(jié)構(gòu)體中的數(shù)據(jù)進行一一比對,輸出結(jié)構(gòu)體中與該數(shù)據(jù)相同的成員的所有信息,從而實現(xiàn)查找功能。代碼如下:void Findname() /用戶自定義函數(shù),實現(xiàn)對指定數(shù)據(jù)的查找功能。char s20; /定義用戶輸入的學(xué)生姓名數(shù)據(jù)為char型,占20列。int i=0;printf(請輸入要查詢的學(xué)生姓名:);scanf(%s,s);while(strcmp(,s)!=0&in)i+; /當(dāng)輸入的姓名與當(dāng)前姓名不相同時,i自增1,比較下一個成員。if(i=n)printf(未找到相關(guān)學(xué)生信息!n);printf(-n);printf(學(xué)號 姓名 班級 數(shù)學(xué) 英語 計算機 總成績 n);printf(-n);printf(%-10s%-10s%-10s%-10d%-10d%-10d%-10dn,stui.no,,stui.Class,stui.math,stui.english,puter,stui.all);printf(-n); /以表列的形式輸出查找到的成員的相關(guān)信息。4.4.2 根據(jù)學(xué)號查詢按照學(xué)生學(xué)號查找學(xué)生信息,要求用戶輸入學(xué)生的學(xué)號,再與結(jié)構(gòu)體中的數(shù)據(jù)進行一一比對,輸出結(jié)構(gòu)體中與該數(shù)據(jù)相同的成員的所有信息,從而實現(xiàn)查找功能。代碼如下:void Findno() /用戶自定義函數(shù),實現(xiàn)對指定數(shù)據(jù)的查找功能。char s20; /定義用戶輸入的學(xué)生學(xué)號數(shù)據(jù)為char型,占20列。int i=0;printf(請輸入要查詢的學(xué)生學(xué)號:); scanf(%s,s);while(strcmp(stui.no,s)!=0&in) /當(dāng)要插入位置大于結(jié)構(gòu)體成員總數(shù)時,直接將數(shù)據(jù)插入到結(jié)構(gòu)體最后。printf(輸入學(xué)生學(xué)號:);scanf(%s,stun.no);printf(輸入學(xué)生姓名:);scanf(%s,);printf(輸入學(xué)生班級:);scanf(%s,stun.Class);printf(輸入學(xué)生的數(shù)學(xué)成績:);scanf(%d,&stun.math);printf(輸入學(xué)生的英語成績:);scanf(%d,&stun.english);printf(輸入學(xué)生的計算機成績:);scanf(%d,&puter);stun.all=stun.math+stun.english+puter;printf(學(xué)生信息輸入成功!n); /用戶分別輸入學(xué)生的各項信息,系統(tǒng)返回“輸入成功”的信息。else /當(dāng)要插入位置不大于結(jié)構(gòu)體成員總數(shù)時,執(zhí)行下述操作。for(j=n-1;j=i;j-)strcpy(stuj+1.no,stuj.no);strcpy(stuj+1.name,);strcpy(stuj+1.Class,stuj.Class);stuj+1.math=stuj.math;stuj+1.english=stuj.english;stuj+1.computer=puter;stuj+1.all=stuj.all; /通過for循環(huán)語句,將第j+1項的各項數(shù)據(jù)賦值給第j項,直到要插入數(shù)據(jù)的位置為止,實現(xiàn)第i項之后的數(shù)據(jù)每項都向后移動一個位置。printf(輸入學(xué)生學(xué)號:);scanf(%s,stui.no);printf(輸入學(xué)生姓名:);scanf(%s,);printf(輸入學(xué)生班級:);scanf(%s,stui.Class);printf(輸入學(xué)生的數(shù)學(xué)成績:);scanf(%d,&stui.math);printf(輸入學(xué)生的英語成績:);scanf(%d,&stui.english);printf(輸入學(xué)生的計算機成績:);scanf(%d,&puter);stui.all=stui.math+stui.english+puter;printf(學(xué)生信息輸入成功!n); /將用戶輸入的各項數(shù)據(jù)賦值到第i個位置中,實現(xiàn)數(shù)據(jù)的插入。n+; /全局變量n自增1,保證插入的數(shù)據(jù)存儲到結(jié)構(gòu)體中。4.6學(xué)生信息排序排序就是通過元素的兩兩比較,并按照條件,若前一個成員學(xué)號值比后一個大,將這二者的所有數(shù)據(jù)進行交換,使用循環(huán)結(jié)構(gòu)重復(fù)執(zhí)行,進行n-1次比較交換后,即完成對結(jié)構(gòu)體中所有成員的排序。void Rank()int i,j,p,q,r,y;char x20,t20,w20; /定義int型數(shù)據(jù)和char型數(shù)據(jù),用于交換元素值。printf(正在根據(jù)學(xué)生學(xué)號進行排序,請稍后.n);for(i=0;in-1;i+)for(j=0;j0) /兩個字符串的比較,意思是判斷前一字符串大于后一字符串。strcpy(t,stuj.no);strcpy(stuj.no,stuj+1.no);strcpy(stuj+1.no,t); /將stuj.no與stuj+1.no交換。strcpy(x,);strcpy(,stuj+1.name);strcpy(stuj+1.name,x);strcpy(w,stuj.Class);strcpy(stuj.Class,stuj+1.Class);strcpy(stuj+1.Class,w);y=stuj.math;stuj.math=stuj+1.math;stuj+1.math=y;p=stuj.english;stuj.english=stuj+1.english;stuj+1.english=p;q=puter;puter=stuj+1.computer;stuj+1.computer=q;r=stuj.all;stuj.all=stuj+1.all;stuj+1.all=r; /實現(xiàn)第j個成員與第j+1個成員信息的交換。4.7 主函數(shù)void main() /無參數(shù)無返回值的main函數(shù)for(;)for(;) /循環(huán)語句實現(xiàn)在一項功能執(zhí)行結(jié)束之后菜單函數(shù)的重復(fù)執(zhí)行。int n=0;switch(menu()case 1:Input();Output();break; /輸入1時,調(diào)用Input和Output函數(shù)。case 2:Output();break; /輸入2時,調(diào)用Output函數(shù)。case 3: /輸入3時,調(diào)用Find函數(shù),再次進行功能的選擇。switch(Find()case 1:Findname();break; /輸入1時,調(diào)用Findname函數(shù)。case 2:Findno();break; /輸入2時,調(diào)用Findno函數(shù)。 break; case 4:Delete();break; /輸入4時,調(diào)用Delete函數(shù)。case 5:Insert();break; /輸入5時,調(diào)用Insert函數(shù)。case 6:Rank();Output();break; /輸入6時,調(diào)用Rank和Output函數(shù)。case 0:exit(0);break; /輸入7時,調(diào)用exit函數(shù),退出程序。default:printf(*輸入錯誤!*);break; /輸入不是06的字符時,輸出“輸入錯誤”的信息。5 調(diào)試與測試系統(tǒng)主界面:輸入學(xué)生信息:輸出學(xué)生信息:刪除學(xué)生信息:插入學(xué)生信息:查詢學(xué)生信息:(按姓名查詢)查詢學(xué)生信息:(按學(xué)號查詢)學(xué)生信息排序:6 課程設(shè)計心得與體會*在老師的悉心指導(dǎo)和熱心幫助之下,我的C語言課程設(shè)計最終順利完成。最后,向所有曾經(jīng)關(guān)心和幫助過我的老師以及同學(xué)們表示由衷地感謝!7 參考文獻(xiàn)C語言課程設(shè)計實用教程,譚浩強編,機械工業(yè)出版社C語言程序設(shè)計,譚浩強編,清華大學(xué)出版社C程序設(shè)計(二級)教程,譚浩強編,清華大學(xué)出版社8 附錄本系統(tǒng)完整程序代碼如下:#include #include /文件包含:關(guān)于字符串操作的一些基本函數(shù)。#include /文件包含:包含exit()函數(shù)。#define N 80 /宏定義:定義N為80,程序中只進行替換,不進行語法檢查。typedef struct char no11;char name8;char Class10; int math,english,computer,all;Student;Student stuN; /結(jié)構(gòu)體:用來儲存多名學(xué)生的多項信息。int n=0; /定義全局變量n,代表結(jié)構(gòu)體中的成員數(shù)。int menu() /菜單函數(shù),使系統(tǒng)功能以菜單方式工作。int c;doprintf(t=學(xué)生信息管理系統(tǒng)=nn);printf(tt1. 輸入學(xué)生信息n);printf(tt2. 輸出學(xué)生信息n);printf(tt3. 查詢學(xué)生信息n);printf(tt4. 刪除學(xué)生信息n);printf(tt5. 插入學(xué)生信息n);printf(tt6. 學(xué)生信息排序n);printf(tt0. 退出系統(tǒng)nn);printf(t請選擇:); scanf(%d,&c);while(c6); /當(dāng)c值小于0或大于6時,循環(huán)輸出,直到不滿足。return(c); /返回c值給主調(diào)函數(shù),用來選擇相應(yīng)功能。void Input() /輸入學(xué)生信息。char k,x10;while(k!=n&k!=N)printf(輸入學(xué)生學(xué)號:);scanf(%s,stun.no);printf(輸入學(xué)生姓名:);scanf(%s,);printf(輸入學(xué)生班級:);scanf(%s,stun.Class);printf(輸入學(xué)生的數(shù)學(xué)成績:);scanf(%d,&stun.math);printf(輸入學(xué)生的英語成績:);scanf(%d,&stun.english);printf(輸入學(xué)生的計算機成績:);scanf(%d,&puter);stun.all=stun.math+stun.english+puter;gets(x);printf(輸入下一個?(Y/N)n);scanf(%c,&k);n+; void Output() /輸出學(xué)生信息。int i;printf(-n);printf(學(xué)號 姓名 班級 數(shù)學(xué) 英語 計算機 總成績n); printf(-n);for(i=0;in;i+)printf(%-10s%-10s%-10s%-10d%-10d%-10d%-10dn,stui.no,,stui.Class,stui.math,stui.english,puter,stui.all);printf(-n);void Delete() /刪除學(xué)生信息。char x8; int j,i=0;printf(輸入要刪除的學(xué)生姓名:); scanf(%s,x); while(strcmp(,x)!=0&in)i+; if(i=n) printf(未找到相關(guān)學(xué)生信息!n); for(j=i;jn-1;j+)strcpy(stuj.no,stuj+1.no);strcpy(,stuj+1.name);strcpy(stuj.Class,stuj+1.Class);stuj.math=stuj+1.math;stuj.english=stuj+1.english;puter=stuj+1.computer;stuj.all=stuj+1.all;n-;printf(該學(xué)生信息已刪除!n);void Findname() /按姓名查找學(xué)生信息。char s20;int i=0;printf(請輸入要查詢的學(xué)生姓名:); scanf(%s,s);while(strcmp(,s)!=0&in)i+;if(i=n) printf(未找到相關(guān)學(xué)生信息!n);printf(-n);printf(學(xué)號 姓名 班級 數(shù)學(xué) 英語 計算機 總成績n); printf(-n);printf(%-10s%-10s%-10s%-10d%-10d%-10d%-10dn,stui.no,,stui.Class,stui.math,stui.english,puter,stui.all);printf(-n);void Findno() /按學(xué)號查找學(xué)生信息。char s20;int i=0;printf(請輸入要查詢的學(xué)生學(xué)號:);scanf(%s,s);while(strcmp(stui.no,s)!=0&in)printf(輸入學(xué)生學(xué)號:);scanf(%s,stun.no);printf(輸入學(xué)生姓名:);scanf(%s,);printf(輸入學(xué)生班級:);scanf(%s,stun.Class);printf(輸入學(xué)生的數(shù)學(xué)成績:);scanf(%d,&stun.math);printf(輸入學(xué)生的英語成績:);scanf(%d,&stun.english);printf(輸入學(xué)生的計算機成績:);scanf(%d,&puter);stun.all=stun.math+stun.english+puter;printf(學(xué)生信息輸入成功!n);elsefor(j=n-1;j=i;j-)strcpy(stuj+1.no,stuj.no);strcpy(stuj+1.name,);strcpy(stuj+1.Class,stuj.Class);stuj+1.math=stuj.math;stuj+1.english=stuj.english;stuj+1.computer=puter;stuj+1.all=stuj.all;printf(輸入學(xué)生學(xué)號:);scanf(%s,stui.no);printf(輸入學(xué)生姓名:);scanf(%s,);printf(輸入學(xué)生班級:);scanf(%s,stui.Class);printf(輸入學(xué)生的數(shù)學(xué)成績:);scanf(%d,&stui.math);printf(輸入學(xué)生的英語成績:);scanf(%d,&stui.english);printf(輸入學(xué)生的計算機成績:);scanf(%d,&puter);stui.all=stui.math+stui.english+puter;printf(學(xué)生信息輸入成功!n);n+;void
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童遺傳性疾病診斷與護理
- 安全生產(chǎn)月培訓(xùn)總結(jié)3篇
- 小班兒歌打卡活動方案
- 小學(xué)美術(shù)節(jié)活動方案
- 小學(xué)美育書畫活動方案
- 干部宣誓活動方案
- 干果折扣活動策劃方案
- 帶家屬去公司活動方案
- 工友中秋慰問活動方案
- 工會野外遠(yuǎn)足活動方案
- 小學(xué)安全隱患排查表
- 學(xué)校財務(wù)人員述職報告范文
- 履帶式微耕機的結(jié)構(gòu)設(shè)計說明書
- 一種鰭狀結(jié)型場效應(yīng)晶體管及其制備方法、芯片與流程
- 套管開窗側(cè)鉆技術(shù)
- 【2023有效教學(xué)設(shè)計原理、策略與評價讀書報告3600字】
- 頂管專項施工方案-人工頂管
- 2023春國家開放大學(xué)-01880組織行為學(xué)-期末考試題帶答案
- 海洋資源環(huán)境承載能力監(jiān)測預(yù)警指標(biāo)體系和技術(shù)方法
- 電子科技大學(xué)《嵌入式系統(tǒng)》20春期末考試【答案50234】
- GB/T 7705-2008平版裝潢印刷品
評論
0/150
提交評論