




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、c語言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目:學(xué)生成績管理系統(tǒng)學(xué) 號 班 級 姓 名 完成方式:(單選)自我評分:(單選)獨(dú)立完成 優(yōu)秀參考他人工作的基礎(chǔ)上完成 良好在他人的幫助下完成 中等完整拷貝他人成果 及格 不及格2011年 5月 11日c語言課程設(shè)計(jì)任務(wù)書3題目:學(xué)生成績管理系統(tǒng)功能:學(xué)生成績管理系統(tǒng),每個學(xué)生是一個記錄,包括學(xué)號,姓名,性別,3門課程成績。系統(tǒng)要求實(shí)現(xiàn)以下功能:1、信息錄入:錄入學(xué)生成績信息(包括學(xué)生學(xué)號、姓名、各門課程的成績等);2、信息查詢:輸入學(xué)號,查詢學(xué)生各門課程的成績,并顯示。3、排序:按各門課程的成績平均分進(jìn)行排序,并顯示。4、信息刪除與修改輸入學(xué)號,刪除該學(xué)生的成
2、績信息。分步實(shí)施:1、初步完成總體設(shè)計(jì),搭好框架,確定人機(jī)對話的界面,確定函數(shù)個數(shù)。2、建立一個文件,將每位學(xué)生的信息寫入文件中并能顯示于屏幕上。3、完成上述信息查詢(學(xué)生學(xué)號、姓名等)、排序、信息刪除與修改功能。要求:1、用c語言實(shí)現(xiàn)程序設(shè)計(jì);2、利用結(jié)構(gòu)體數(shù)組實(shí)現(xiàn)學(xué)生信息的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì);3、系統(tǒng)的各個功能模塊要求用函數(shù)的形式實(shí)現(xiàn);4、界面友好(良好的人機(jī)交互),程序加必要的注釋。課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告要求:一、總體設(shè)計(jì)1程序的總體設(shè)計(jì)數(shù)據(jù)導(dǎo)入模塊操作面板顯示查找排序添加條目刪除條目編輯條目數(shù)據(jù)分析統(tǒng)計(jì)數(shù)據(jù)導(dǎo)出模塊程序總框架不及格名單基本功能分析功能條目操作2. 數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)體數(shù)組struct s
3、tudent /*定義結(jié)構(gòu)體變量student*/ int num; char name10; int gen; int ch,en,math,tot;struct student stu100;3. 函數(shù)原型聲明的說明(功能,參數(shù),返回值)1).輸出不及格名單:void failsbj(int n,struct student stu) /*輸出不及格的名單,只要有一科不及格即進(jìn)入名單*/2).計(jì)算平均分void sumup(int *n,struct student (*stu) /*計(jì)算每個人各科平均分的函數(shù)*/3).打印所有數(shù)據(jù)void display(int n,struct stu
4、dent stu) /*輸出所有數(shù)據(jù)*/4).檢索void search(int n,struct student stu) /*依照名字或者數(shù)字搜索條目*/5).排序void assort(int n,struct student (*stu) /*排序模塊*/6).增加條目void add(int *n,struct student (*stu) /*加入條目模塊*/7).刪除條目void del(int *n,struct student (*stu) /*刪除條目模塊*/8).編輯條目void edit(int *n,struct student (*stu) /*編輯條目模塊*/9)
5、.導(dǎo)出列表void save(int *n,struct student (*stu) /*將結(jié)果另存為*/10).統(tǒng)計(jì)分析void anlz(int *n,struct student (*stu) /*統(tǒng)計(jì)全班成績,包括求出各分?jǐn)?shù)段人數(shù),各科班平均分*/4. 流程圖計(jì)算平均分?jǐn)?shù)據(jù)導(dǎo)入顯示所有數(shù)據(jù)根據(jù)讀入的指令com進(jìn)行選擇顯示操作面板退出系統(tǒng)顯示所有數(shù)據(jù)不及格名單查找信息對數(shù)據(jù)排序添加條目刪除條目編輯條目導(dǎo)出文件統(tǒng)計(jì)分析結(jié)束開始二、詳細(xì)設(shè)計(jì)1.主程序如上圖。2.功能之“輸出不及格名單”:用for循環(huán)掃描每個同學(xué)的信息,如果某同學(xué)的語文、英語或數(shù)學(xué)成績不及格(60分),即輸出該同學(xué)的條目。3
6、.功能之“排序”:本系統(tǒng)提供六種排序,分別如下: 0.according to the student number 1.according to the average scores. 2.according to the scores of chinese. 3.according to the scores of english. 4.according to the scores of mathematics. 5.by gender *性別以1和0代替*6.by name 即根據(jù)學(xué)號、平均分、單科成績、性別、姓名排序。根據(jù)用戶要求的排序方法,用冒泡排序法排序。4.功能之“刪除條目”:
7、先列出所有學(xué)生的條目,要求用戶輸入欲刪除的學(xué)號,搜索該學(xué)號,確定該學(xué)號對應(yīng)條目的編號。刪 除方式為,將該條目之后的所有條目逐個復(fù)制到前一個位置,以 覆蓋欲刪除的條目,最后將條目總數(shù)減一。5、功能之“編輯條目”:先要求用戶輸入欲更改條目的學(xué)號,通過查找得到該學(xué)號對應(yīng)的編號,要求用戶輸入欲更改的條目屬性以及目標(biāo)值。然后直接修改該屬性。6.功能之“增加條目”:要求用戶鍵入欲增條目的詳細(xì)信息,包括學(xué)號、姓名、性別、語文成績、英語成績、數(shù)學(xué)成績。然后新增條目。7.功能之“檢索”:要求用戶輸入欲檢索的是姓名還是數(shù)字信息。若是姓名,則檢索條目中是否有該姓名的學(xué)生,若有,則把條目輸出;若是數(shù)字信息,則檢索條目
8、中是否有包含該數(shù)字的條目(包括學(xué)號、性別、成績),把檢索結(jié)果輸出。8.功能之“打印數(shù)據(jù)”:把所有數(shù)據(jù)逐條輸出,每個條目占一行。9.功能之“統(tǒng)計(jì)分析”:定義整形變量作為計(jì)數(shù)器,遍歷所有條目,統(tǒng)計(jì)每種情況的學(xué)生人數(shù)。其中包括語文、英語、數(shù)學(xué)的各分?jǐn)?shù)段人數(shù),分?jǐn)?shù)區(qū)間為(0,60)、(60,70)、(70,80)、(80,90)、(90,100)。并統(tǒng)計(jì)各科平均分。將統(tǒng)計(jì)結(jié)果打印在屏幕上。10.功能之“導(dǎo)出”:導(dǎo)出文件為output.txt,放在默認(rèn)目錄下。三、測試及調(diào)試(程序運(yùn)行截圖,測試方案、存在的問題及解決方法)程序調(diào)試時主要運(yùn)用了單步執(zhí)行、設(shè)置breakpoint、跟蹤變量等方法。具體測試方案
9、為:1.通過編譯檢錯,將檢測出來的bug逐個更正。2.運(yùn)行程序,逐個功能模塊測試。若出現(xiàn)死循環(huán)則按ctrl+f2強(qiáng)制退出。3.單步執(zhí)行并跟蹤變量。確定死循環(huán)的位置,分析其原因。4.若有bug出現(xiàn)在某函數(shù)中,則應(yīng)在函數(shù)中添加breakpoint,執(zhí)行程序,跳到該breakpoint后,單步執(zhí)行并跟蹤變量。調(diào)試過程中遇到的問題:1.在編寫“添加新條目”模塊時,最早的做法是用scanf命令一次性讀入學(xué)號、姓名、性別、成績等屬性。遇到的問題是,因?yàn)樾彰麨樽址袷?,性別為整形格式,因此,讀取字符串時并不以空格為結(jié)束,執(zhí)行結(jié)果會將姓名后面的性別等屬性也當(dāng)作姓名輸入。提出的解決辦法是:逐個讀取屬性,每讀取
10、一個屬性之前有文本提示。因此,每讀取一個屬性必須以回車結(jié)束。此時,在讀取字符串的時候,遇到回車即結(jié)束讀取,于是不再出現(xiàn)原來的問題了。2.遇到的問題:在打印所有數(shù)據(jù)時,往往窗口不足以顯示所有數(shù)據(jù)。解決方案:此時,在打印的循環(huán)語句中加入一句if (i%10=0) getchar()。此時每顯示十個數(shù)據(jù),需要讀入一個回車符才能繼續(xù)顯示。3.遇到的問題:使用scanf命令不能把輸入的數(shù)據(jù)保存到變量中,甚至于藍(lán)屏重啟。問題原因:變量前漏了加&。解決辦法:在變量前加上&。測試數(shù)據(jù)為:input.txt1345 koo 1 93 68 881933 jay 1 69 73 781534 kate 0 85
11、84 690432 william 1 98 86 890538 mary 0 79 99 951370 xiaopeng 1 45 86 56532 babe 0 54 65 451934 alai 1 89 90 67538 lich 1 98 88 78 90顯示所有數(shù)據(jù):主面板:輸出成績不及格的同學(xué):按照個人平均分排序后:各科各分?jǐn)?shù)段人數(shù)統(tǒng)計(jì):四、小結(jié)(收獲和建議)這次本次課程設(shè)計(jì),提供了一次絕好的機(jī)會讓我重新復(fù)習(xí)了大一學(xué)過的c程序設(shè)計(jì)課程。為此,我利用了一個下午的時間把大一學(xué)過的知識重新梳理了一遍。通過自主設(shè)計(jì)一個系統(tǒng),我把原來學(xué)到的理論知識提升到了運(yùn)用的層次。我在編寫這個系統(tǒng)的時候
12、,遇到了很多的錯誤,更正程序的bug耗費(fèi)了很多的時間,但這是值得的,因?yàn)閎ug對于每一個程序員來說都是難以避免的。在不斷修正bug的過程中,我提升了自己調(diào)試程序、排查錯誤的能力。并且讓我對c語言的認(rèn)識進(jìn)一步加深,特別是在指針的使用方面。這也是我第一次設(shè)計(jì)一個實(shí)用的程序。此過程讓我掌握了編寫設(shè)計(jì)一個軟件的基本方法。附件:主要源程序代碼#include#include#includestruct student /*定義結(jié)構(gòu)體變量student*/ int num; char name10; int gen; int ch,en,math,av; /*語文、英語、數(shù)學(xué)、平均分 */;void su
13、mup(int *n,struct student (*stu) /*計(jì)算每個人各科平均分的函數(shù)*/ int i; for (i=1;i=*n;i+) (*stu)i.av=(*stu)i.ch+(*stu)i.en+(*stu)i.math; (*stu)i.av=(*stu)i.av/3; ;void failsbj(int n,struct student stu) /*輸出不及格的名單,只要有一科不及格即進(jìn)入名單*/ int i,c,e,m; printf(nthe students listed below fail in at least one subjects:n); prin
14、tf(-n); for (i=1;i=n;i+) if (stui.ch)=60)|(stui.en)=60)|(stui.math)=60) printf(n%d|,i); printf( num=%d,stui.num); printf( name=%s,); printf( gen=%d,stui.gen); printf( ch=%d,stui.ch); printf( en=%d,stui.en); printf( math=%d,stui.math); printf( average=%dn,stui.av); ; ; printf(-n);void displa
15、y(int n,struct student stu) /*輸出所有數(shù)據(jù)*/int i; printf(nnitems are as shown below:n); printf(-n); for (i=1;i ); scanf(%d,&j); switch (j) case 1: /*尋找與某數(shù)字匹配的條目*/ printf(please type in the information you want to search: ); scanf(%d,&info); printf(-n); for (i=1;i=n;i+) if (stui.num=info)|(stui.gen=info)|
16、(stui.ch=info)|(stui.en=info)|(stui.math=info)|(stui.av=info) printf(num=%d,stui.num); printf( name=%s,); printf( gen=%d,stui.gen); printf( ch=%d,stui.ch); printf( en=%d,stui.en); printf( math=%d,stui.math); printf( average=%dn,stui.av); printf(-n); break; case 2: /*尋找與某姓名匹配的條目*/ printf(ple
17、ase type in the name you want to search:); scanf(%s,s); printf(-n); for (i=1;i ); scanf(%d,&g); printf(-n); for (i=1;i ); scanf(%d,&num); switch (num) case 0: /*根據(jù)學(xué)號排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.num) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 1: /*根據(jù)個人各科總分排序*/ for (i=1;i=n;i+)
18、 for (j=i+1;j(*stu)j.av) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 2: /*根據(jù)語文成績排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.ch) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 3: /*根據(jù)英語成績排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.en) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case
19、 4: /*根據(jù)數(shù)學(xué)成績排序*/for (i=1;i=n;i+) for (j=i+1;j(*stu)j.math) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 5: /*根據(jù)性別排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.gen) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 6: /*根據(jù)姓名排序*/ for (i=1;i=n;i+) for (j=i+1;j0) stt=(*stu)i; (*stu)i=(*stu)j; (
20、*stu)j=stt;break; default:; ; display(n,*stu);void add(int *n,struct student (*stu) /*加入條目模塊*/ struct student stn; printf(nplease type the new item here:); printf(nthe student number is ); scanf(%d,&stn.num); printf(nwhat is the name?); scanf(%s,&); printf(nwhat is the gender?); scanf(%d,&st
21、n.gen); printf(nthe marks of chinese is:); scanf(%d,&stn.ch); printf(nthe marks of english is:); scanf(%d,&stn.en); printf(nthe marks of mathematics is:); scanf(%d,&stn.math); (*n)+; (*stu)*n=stn; sumup(n,stu); /*修改后重新計(jì)算平均分*/ display(*n,*stu);void del(int *n,struct student (*stu) /*刪除條目模塊*/ int i,j,
22、k,b,m; struct student stnul=0; b=0; printf(nwhich student number do you want to delete?); scanf(%d,&m); for (i=1;i=*n;i+) if (*stu)i.num=m) b=1;break; if (b=1) for (j=i;j=*n-1;j+) (*stu)j=(*stu)j+1; (*stu)*n=stnul; (*n)-; else printf(ncant not find %dn,m); sumup(n,stu); /*修改后重新計(jì)算平均分*/ display(*n,*st
23、u);void edit(int *n,struct student (*stu) /*編輯條目模塊*/ int i,j,num1; printf(which one do you want to edit? please type in the student numbern); scanf(%d,&num1); for (i=1;i ); scanf(%d,&j); switch (j) /*修改哪一項(xiàng)*/ case 1:scanf(%d,&(*stu)i.num); break; case 2:scanf(%s,&(*stu));break; case 3:scanf(%d,
24、&(*stu)i.gen);break; case 4:scanf(%d,&(*stu)i.ch);break; case 5:scanf(%d,&(*stu)i.en);break; case 6:scanf(%d,&(*stu)i.math);break; default:; ; sumup(n,stu); display(*n,*stu);void save(int *n,struct student (*stu) /*將結(jié)果另存為*/int i,j; file *fp1; if (fp1=fopen(output.txt,w+)=null) printf(can not open th
25、e output file!); else for (i=1;i=*n;i+) fprintf(fp1,%d ,(*stu)i.num); fprintf(fp1,%s ,(*stu)); fprintf(fp1,%d ,(*stu)i.gen); fprintf(fp1,%d ,(*stu)i.ch); fprintf(fp1,%d ,(*stu)i.en); fprintf(fp1,%dn,(*stu)i.math); ; fclose(fp1); void anlz(int *n,struct student (*stu) /*統(tǒng)計(jì)全班成績,包括求出各分?jǐn)?shù)段人數(shù),各科班平均分
26、*/ int i; int avch=0; int aven=0; int avma=0; int avtot=0; int ch90=0; int ch80=0; int ch70=0; int ch60h=0; int ch60l=0; int en90=0; int en80=0; int en70=0; int en60=0; int en60h=0; int en60l=0; int ma90=0; int ma80=0; int ma70=0; int ma60h=0; int ma60l=0; for (i=1;i=90) ch90+; if (*stu)i.ch=80) ch8
27、0+; if (*stu)i.ch=70) ch70+; if (*stu)i.ch=60) ch60h+; if (*stu)i.ch=90) en90+; if (*stu)i.en=80) en80+; if (*stu)i.en=70) en70+; if (*stu)i.en=60) en60h+; if (*stu)i.en=90) ma90+; if (*stu)i.math=80) ma80+; if (*stu)i.math=70) ma70+; if (*stu)i.math=60) ma60h+; if (*stu)i.math60) ma60l+; ; ch60h-=c
28、h70; ch70-=ch80; ch80-=ch90; en60h-=en70; en70-=en80; en80-=en90; ma60h-=ma70; ma70-=ma80; ma80-=ma90; avch=avch/(*n); aven=aven/(*n); avma=avma/(*n); avtot=avtot/(*n); printf(-n); /*輸出統(tǒng)計(jì)結(jié)果*/ printf(subject: chinese|); printf( (0,60):%2d,ch60l); printf( (60,70):%2d,ch60h); printf( (70,80):%2d,ch70);
29、 printf( (80,90):%2d,ch80); printf( (90,100):%2dn,ch90); printf(average= %2dn,avch); printf(subject: english|); printf( (0,60):%2d,en60l); printf( (60,70):%2d,en60h); printf( (70,80):%2d,en70); printf( (80,90):%2d,en80); printf( (90,100):%2dn,en90); printf(average= %2dn,aven); printf(subject: math |); printf( (0,60):%2d,ma60l); printf( (60,70):%2d,ma60h); printf( (70,80):%2d,ma70); printf( (80,90):%2d,ma80); p
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 總分公司合作經(jīng)營合同范本
- 新材料研發(fā)股權(quán)居間合同
- 2025物業(yè)工程部合同管理總結(jié)與工作計(jì)劃
- 音樂室創(chuàng)新教學(xué)方法計(jì)劃
- 婦產(chǎn)科護(hù)士長半年工作總結(jié)
- 提高小學(xué)生動手能力的勞動計(jì)劃
- 小學(xué)六年級美術(shù)教學(xué)活動安排計(jì)劃
- 醫(yī)院控?zé)煿芾砉ぷ饔?jì)劃
- 水利工程管網(wǎng)質(zhì)量控制措施
- 人教版小學(xué)三年級體育上冊教學(xué)計(jì)劃
- 2024年國家基本公衛(wèi)-老年人健康管理-考試復(fù)習(xí)題庫(含答案)
- 第三講:虹吸管及水泵的水力計(jì)算
- 網(wǎng)絡(luò)系統(tǒng)集成(第二版) 課件第一章 網(wǎng)絡(luò)系統(tǒng)集成緒論
- 真菌性角膜炎的護(hù)理
- 單肺通氣與肺保護(hù)通氣策略護(hù)理課件
- 科普作家協(xié)會會員
- 《鋼鐵是怎樣煉成的》選擇題100題(含答案)
- 垃圾中轉(zhuǎn)站報(bào)告
- 新型顯示行業(yè)Mini LED Micro LED Micro OLED多點(diǎn)開花產(chǎn)業(yè)鏈如何聚焦
- 市政工程試驗(yàn)檢測培訓(xùn)教程
- 高中英語定語從句之哪吒-Attributive Clause 課件
評論
0/150
提交評論