《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告書-簡單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn).doc
《《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告書-簡單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn).doc》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告書-簡單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn).doc(25頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、懷 化 學(xué) 院 計(jì) 算 機(jī) 系數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告書 學(xué)生姓名: 學(xué) 號:0806401042年級專業(yè)及班級:2008級01班指導(dǎo)老師及職稱:專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)湖南懷化提交日期:2010年06月 目 錄摘 要II關(guān)鍵詞II1 前言22 設(shè)計(jì)分析23 實(shí)現(xiàn)方法23.1 函數(shù)功能介紹2 3.1.1定義全局變量.2 3.1.2 函數(shù)功能的描述.23.2函數(shù)功能的實(shí)現(xiàn)2 3.2.1源碼與分析.2 3.2.2被調(diào)用的函數(shù).23.3程序演示.24 系統(tǒng)使用說明書25 結(jié)論2參考文獻(xiàn)2致 謝.2附 錄.2 簡單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)學(xué)生: 指導(dǎo)老師: (懷化學(xué)院計(jì)算機(jī)系:懷化 418008)
2、摘 要:本次課程設(shè)計(jì)的目的是設(shè)計(jì)一個(gè)簡單的小學(xué)生做題系統(tǒng),要求利用棧求表達(dá)式的值,可供小學(xué)生作業(yè),并能給出分?jǐn)?shù),限1人完成。本次設(shè)計(jì)主要采用的語言是C和C+語言,編程環(huán)境是VC.6。系統(tǒng)由若干個(gè)函數(shù)構(gòu)成,用到了棧、函數(shù)調(diào)用、文件的開閉和讀寫和常見的循環(huán)等手法,經(jīng)過多次的調(diào)試與修改,終于實(shí)現(xiàn)了設(shè)計(jì)所要求的各項(xiàng)要求,做成了一個(gè)簡單的能供小學(xué)生選題、做題并能打出分?jǐn)?shù)與歷史成績相比較的簡單系統(tǒng),很好的完成了這一次的課程設(shè)計(jì)任務(wù)。通過這一次的作業(yè),我學(xué)到了很多知識,明白了親自實(shí)踐和動手能力的重要性。關(guān)鍵詞:棧 VC.6 循環(huán) 函數(shù)調(diào)用 文件 一、 前言本次課程設(shè)計(jì)的目的是設(shè)計(jì)一個(gè)簡單的小學(xué)生做題系統(tǒng),設(shè)
3、計(jì)要求能建立試題庫文件,隨機(jī)產(chǎn)生n個(gè)題目;題目涉及加減乘除,帶括弧的混合運(yùn)算;隨時(shí)可以退出;保留歷史分?jǐn)?shù),能回顧歷史,給出與歷史分?jǐn)?shù)比較后的評價(jià)。針對題目的各項(xiàng)要求,我運(yùn)用C語言工具在VC.6的環(huán)境中,通過結(jié)構(gòu)體數(shù)組、函數(shù)的調(diào)用、循環(huán)的使用以及文件的開閉和讀寫等常用方法來解決在編程過程中遇到的問題,編寫出了一個(gè)符合設(shè)計(jì)要求的簡單系統(tǒng)。二、 設(shè)計(jì)分析根據(jù)題目的要求,我根據(jù)題目要求實(shí)現(xiàn)的功能,首先確定了8個(gè)大的子函數(shù),分別用來實(shí)現(xiàn)輸出目錄表、提取題目、對系統(tǒng)的說明、存儲所有成績、輸出所有成績、存儲最近一次成績、輸出最近一次成績、開始作業(yè)等功能。由于其中涉及了能回顧歷史成績以及隨機(jī)做題等問題,所以就
4、考慮用到了文件的打開與關(guān)閉以及文件的讀寫功能。由于此設(shè)計(jì)要實(shí)現(xiàn)多個(gè)功能,所以為了源代碼清晰明了,所有的函數(shù)不是用的嵌套方式,而是對每個(gè)功能都用一個(gè)子程序來實(shí)現(xiàn),然后通過對子程序的調(diào)用來達(dá)到設(shè)計(jì)的要求。三、 實(shí)現(xiàn)方法本程序通過C和C+語言來實(shí)現(xiàn),在VC6.0下運(yùn)行3.1 函數(shù)功能介紹3.1.1 由于此系統(tǒng)設(shè)計(jì)的變量較多,為了使程序清晰明了,首先定義了一些有關(guān)的全局變量:float answer50;float myAnswer50;int count;int Right;char filename120=所有成績.txt; char filename220=最近一次的成績.txt; /char
5、ti20050; int tiliang; int *record; struct tm *tblock; time_t timer;char s50;int tops;float d100;int topd;char c;int r;3.1.2 函數(shù)功能的描述1.char menu() 菜單界面 ;2.void Title() 提取題目,并返回題目個(gè)數(shù);3.void EXIT () 對系統(tǒng)的說明;4.void save_all_achievment() 存儲所有成績;5.void out_all_achievment() 輸出所有成績;6.void save_latest_achievmen
6、t() 存儲最近一次成績;7.void out_latest_achievment() 輸出最近一次成績;8.void expression() 隨機(jī)抽提;9.void do_homework() 開始作業(yè);10.void main() 主函數(shù)。3.2 函數(shù)功能的實(shí)現(xiàn)3.2.1 源碼分析程序預(yù)處理: #include #include#include#include3.2.2 被調(diào)用函數(shù)char menu()char item;/選項(xiàng);coutendlendlendl;cout 小學(xué)生測試系統(tǒng) endl;coutendl;cout 1.介紹 4.歷史記錄 endl;cout endl;cout
7、 2.開始測試 5.最后一次記錄 endl;cout endl;cout 3.退出 6.刪除所有記錄 endl;cout endl;coutendlendl;coutitem)if(item!=1 & item!=2 & item !=3 & item !=4 & item!=5 & item!=6)cout 菜單選項(xiàng)不正確,請重新選擇! ;elsebreak;return item;void save_all()/-存儲所有成績FILE *fp;char ch;fp=fopen(filename1,a);fprintf(fp,nnnn *本次測試情況總結(jié)* n); fprintf(fp, -
8、 n);fprintf(fp, 題目 正確答案 您的答案 結(jié)果 n);for(int i=0;icount;i+)fprintf(fp, %-12s %-6.2f %-6.2f %s n,tirecordi,answeri,myAnsweri,answeri=myAnsweri?正確!:錯(cuò)誤!);fprintf(fp, - n);fprintf(fp, 解答題目總共為%d道,其中n,count);fprintf(fp, 正確解答%d道題,錯(cuò)誤解答%d道題。nn *最后得分為%d分!*n,Right,count-Right,Right*100/count); fprintf(fp, -n);fp
9、rintf(fp, 本次測試時(shí)間: %s,asctime(tblock);fclose(fp);void EXIT()/-退出系統(tǒng)coutendlendlendlendlendlendlendlendl;cout 謝謝使用!endl;void show_all()/-輸出所有成績FILE *fp;char ch;if(fp=fopen(filename1,r)=NULL)coutendlendlendl 沒有任何記錄endl;coutendl 請按回車鍵返回。;elsewhile(!feof(fp)ch=fgetc(fp);coutch;fclose(fp);coutendlendl 請按回車
10、鍵返回:;getchar();getchar();system(cls);void save_current()/-存儲最近一次的成績 FILE *fp;char ch;fp=fopen(filename2,w);ch=getchar();fprintf(fp,nnnn *上一次測試情況總結(jié)* n); fprintf(fp, - n);fprintf(fp, 題目 正確答案 您的答案 結(jié)果 n);for(int i=0;icount;i+)fprintf(fp, %-12s %-6.2f %-6.2f %s n,tirecordi,answeri,myAnsweri,answeri=myAns
11、weri?正確!:錯(cuò)誤!);fprintf(fp, - n);fprintf(fp, 解答題目總共為%d道,其中n,count);fprintf(fp, 正確解答%d道題,錯(cuò)誤解答%d道題。nn *最后得分為%d分!*n,Right,count-Right,Right*100/count); fprintf(fp, -n);fprintf(fp, 測試時(shí)間: %s,asctime(tblock);fclose(fp);void out_latest_achievment()/-輸出最近一次的成績;FILE *fp;char ch;if(fp=fopen(filename2,r)=NULL)co
12、utendlendlendl 沒有任何記錄endl;coutendl 請按回車鍵返回。;elsewhile(!feof(fp)ch=fgetc(fp);coutch;fclose(fp);coutendlendl=0&c=0&c=9);numbernum=0;dtopd+=atof(number);elsej=change(c);i=change(stops-1);switch(tokenij)case -1: stops+=c;c=tirk+;break;case 0: tops-;c=tirk+;break;case 1: calculate();break;answercount=dto
13、pd-1;void start_test()/-開始測試char Save;char l=q;char con;int i,n,j,e,q;loop:count=0;Right=0;r=0; coutn)if(ntiliang)cout少做點(diǎn)吧,等會做不完哦!endl;continue;elsebreak;system(cls);cout你選擇題目的個(gè)數(shù)為:nendl;e=0;q=1; record=new intn; /正在做第幾道題目;while(en)if(l=#)break;r=rand()%tiliang;for(j=0;je;j+) /篩選去掉重復(fù)的題目;if(r=recordj)
14、break;if(j=e)recorde+=r;exercise();cout第q+道題:endl;couttir; scanf(%f,&myAnswercount+); if(answercount-1=myAnswercount-1) Right+;l=getchar();coutendlendl 本次測試已經(jīng)完成,請按回車鍵查看結(jié)果!endl;getchar();getchar();system(cls); printf(nnnn *本次測試情況總結(jié)* n);printf( - n);printf( 題目 正確答案 您的答案 結(jié)果 n);for(i=0;icount;i+)printf(
15、 %-12s %-6.2f %-6.2f %s n,tirecordi,answeri,myAnsweri,answeri=myAnsweri?正確!:錯(cuò)誤!);printf( - n);printf( 解答題目總共為%d道,其中n,count);printf( 正確解答%d道題,錯(cuò)誤解答%d道題。nn *最后得分為%d分!*n,Right,count-Right,Right*100/count); printf( -n); timer=time(NULL); tblock=localtime(&timer); printf( 本次測試時(shí)間: %s,asctime(tblock);couten
16、dlSave)if(Save!=Y & Save!=N)cout 選項(xiàng)不對:;continue;elseif(Save=Y)save_all();save_current();coutcon)if(con!=Y & con!=N)cout 選項(xiàng)不對:;continue;elseif(con=Y)system(cls);goto loop;elsebreak;free(record);break;elsebreak;system(cls);3.3 程序演示選16這幾項(xiàng)將出項(xiàng)相應(yīng)的界面,按照提示進(jìn)行操作,即可完成目的。下面分別看看幾個(gè)子菜單的功能界面:當(dāng)輸入“1”時(shí)出現(xiàn)如下界面:按回車鍵返回后,輸
17、入“2” 并輸入選題個(gè)數(shù):輸入“4”:輸入“5”:輸入“6”:四、系統(tǒng)使用說明書本系統(tǒng)所需數(shù)據(jù)必須嚴(yán)格按照要求輸入,本系統(tǒng)適合與公共場所使用。五、結(jié)論雖然學(xué)了這么久的數(shù)據(jù)結(jié)構(gòu),但是做這種題型的時(shí)候還是感到非常吃力,對棧和函數(shù)調(diào)用等這些常用的東西卻還是不能夠靈活運(yùn)用。這次的課程設(shè)計(jì)讓我獲益匪淺,不僅學(xué)到了以前從未接觸過的知識,更重要的是培養(yǎng)了自己獨(dú)立思考問題和動手解決問題的能力。參考文獻(xiàn)1 數(shù)據(jù)結(jié)構(gòu)(C語言版) 嚴(yán)蔚敏 吳偉民 編著(第七章:頁碼 4447)2 C程序設(shè)計(jì)(第三版) 譚浩強(qiáng) 著作致 謝 此報(bào)告是在黃隆華老師的悉心指導(dǎo)和熱情幫助下完成的,在此表示衷心的感謝!附錄附錄 1 源碼#in
18、clude #include#include #include stdlib.husing namespace std;struct tm *tblock; time_t timer;char s50;int tops;float d100;int topd;char c;int r;float ans50;float yours50;int count;int Right;char filename120=所有成績.txt;/存儲所有成績的 文件名;char filename220=最近一次的成績.txt;/存儲最近一次成績的 文件名;char ti20050;/將文件中的題庫題目提取出來存
19、入數(shù)組;int ti_len;/題目總量;int *jilu;/記錄所選題目的下標(biāo);char menu()char item;/項(xiàng)目;coutendlendlendl;cout 小學(xué)生作業(yè)系統(tǒng) endl;cout endl;cout 1.說明 4.歷史成績 endl;cout endl;cout 2.開始作業(yè) 5.最后一次成績 endl;cout endl;cout 3.退出 6.刪除所有歷史 endl;cout endl;coutendlendl;coutitem)if(item!=1 & item!=2 & item !=3 & item !=4 & item!=5 & item!=6)c
20、out 菜單項(xiàng)目不正確,請重新選擇! ;elsebreak;return item;void Title()/-提取題目,并返回題目個(gè)數(shù);FILE *fp;int i=0;fp=fopen(題庫.txt,r);while(!feof(fp) fscanf(fp,%s,tii+);ti_len=i-1;/最后一個(gè)空格不算題目;void EXIT()/-退出系統(tǒng)coutendlendlendlendlendlendlendlendl;cout 謝謝使用!endl;void INSTRUCTION()/-說明char c;FILE *fp;fp=fopen(說明.txt,r);while(!feof
21、(fp)c=fgetc(fp);coutc;fclose(fp);coutendlendl 請按回車鍵返回:;getchar();getchar();system(cls);void save_all_achievment()/-存儲所有成績FILE *fp;char ch;fp=fopen(filename1,a);fprintf(fp,nnnn *本次作業(yè)情況總結(jié)* n); fprintf(fp, - n);fprintf(fp, 題目 正確答案 您的答案 結(jié)果 n);for(int i=0;icount;i+)fprintf(fp, %-12s %-6.2f %-6.2f %s n,ti
22、jilui,ansi,yoursi,ansi=yoursi?正確!:錯(cuò)誤!);fprintf(fp, - n);fprintf(fp, 解答題目總共為%d道,其中n,count);fprintf(fp, 正確解答%d道題,錯(cuò)誤解答%d道題。nn *最后得分為%d分!*n,Right,count-Right,Right*100/count); fprintf(fp, -n);fprintf(fp, 本次作業(yè)時(shí)間: %s,asctime(tblock);fclose(fp);void out_all_achievment()/-輸出所有成績FILE *fp;char ch;if(fp=fopen(
23、filename1,r)=NULL)coutendlendlendl 沒有任何記錄endl;coutendl 請按回車鍵返回。;elsewhile(!feof(fp)ch=fgetc(fp);coutch;fclose(fp);coutendlendl 請按回車鍵返回:;getchar();getchar();system(cls);void save_latest_achievment()/-存儲最近一次的成績 FILE *fp;char ch;fp=fopen(filename2,w);ch=getchar();fprintf(fp,nnnn *上一次作業(yè)情況總結(jié)* n); fprintf
24、(fp, - n);fprintf(fp, 題目 正確答案 您的答案 結(jié)果 n);for(int i=0;icount;i+)fprintf(fp, %-12s %-6.2f %-6.2f %s n,tijilui,ansi,yoursi,ansi=yoursi?正確!:錯(cuò)誤!);fprintf(fp, - n);fprintf(fp, 解答題目總共為%d道,其中n,count);fprintf(fp, 正確解答%d道題,錯(cuò)誤解答%d道題。nn *最后得分為%d分!*n,Right,count-Right,Right*100/count); fprintf(fp, -n);fprintf(fp
25、, 作業(yè)時(shí)間: %s,asctime(tblock);fclose(fp);void out_latest_achievment()/-輸出最近一次的成績;FILE *fp;char ch;if(fp=fopen(filename2,r)=NULL)coutendlendlendl 沒有任何記錄endl;coutendl 請按回車鍵返回。;elsewhile(!feof(fp)ch=fgetc(fp);coutch;fclose(fp);coutendlendl=0&c=0&c=9); /判斷是否是數(shù)字numbernum=0; /將數(shù)字字符轉(zhuǎn)換成整數(shù)dtopd+=atof(number); /
26、將數(shù)字進(jìn)棧elsej=change(c); /j為讀取到的符號i=change(stops-1); /i為符號棧的棧頂符號switch(tokenij) /判斷優(yōu)先級case -1: stops+=c;c=tirk+;break;case 0: tops-;c=tirk+;break;case 1: calculate();break;anscount=dtopd-1;/printf(%d,dtopd-1);/getchar();void do_homework()/-開始作業(yè)char Save;char l=q;char con;int i,n,j,e,q;jixu:count=0;Righ
27、t=0;r=0; coutn)if(nti_len)cout少做點(diǎn)吧,等會做不完哦!endl;continue;elsebreak;system(cls);cout你選擇題目的個(gè)數(shù)為:nendl;e=0;q=1; jilu=new intn; /正在做第幾道題目;while(en)if(l=#)break; /當(dāng)l=#表示結(jié)束做題r=rand()%ti_len; /rand為隨機(jī)產(chǎn)生的數(shù),與題數(shù)的模式為了避免選到重復(fù)的題目for(j=0;je;j+) /篩選去掉重復(fù)的題目;if(r=jiluj)break;if(j=e)jilue+=r; /r題目下標(biāo),e為當(dāng)前題目量expression();
28、cout第q+道題:endl;couttir; scanf(%f,&yourscount+); if(anscount-1=yourscount-1) Right+;l=getchar();coutendlendl 本次作業(yè)已經(jīng)完成,請按回車鍵查看結(jié)果!endl;getchar();/getchar();system(cls); printf(nnnn *本次作業(yè)情況總結(jié)* n);printf( - n);printf( 題目 正確答案 您的答案 結(jié)果 n);for(i=0;icount;i+)printf( %-12s %-6.2f %-6.2f %s n,tijilui,ansi,your
29、si,ansi=yoursi?正確!:錯(cuò)誤!);printf( - n);printf( 解答題目總共為%d道,其中n,count);printf( 正確解答%d道題,錯(cuò)誤解答%d道題。nn *最后得分為%d分!*n,Right,count-Right,Right*100/count); printf( -n); timer=time(NULL); tblock=localtime(&timer); printf( 本次作業(yè)時(shí)間: %s,asctime(tblock);coutendlSave)if(Save!=Y & Save!=N)cout 選項(xiàng)不對:;continue;elseif(Sa
30、ve=Y)save_all_achievment();save_latest_achievment();coutcon)if(con!=Y & con!=N)cout 選項(xiàng)不對:;continue;elseif(con=Y)system(cls);goto jixu;elsebreak;free(jilu);break;elsebreak;system(cls); void main() int i; char menuitem;Title();loop:menuitem=menu();system(cls);if(menuitem=3)EXIT();return ;elseif(menuit
31、em=1)INSTRUCTION();goto loop;/ 返回菜單界面;elseif(menuitem=4)out_all_achievment();goto loop;/ 返回菜單界面;elseif(menuitem=2)do_homework();goto loop;/ 返回菜單界面;elseif(menuitem=5)out_latest_achievment();goto loop;/ 返回菜單界面;elseif(menuitem=6)char del;system(cls);coutendlendlendldel)if(del!=Y & del!=N)cout 選項(xiàng)不正確:;continue;
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 我的藍(lán)藍(lán)的威尼斯課件
- 消化系合理用藥資料課件
- 42電流的磁效應(yīng)
- 幾何量公差與測量技術(shù)4-4公差原則課件
- 秋九年級語文上冊第三單元第12課世上沒有傻問題課件2語文版
- 大學(xué)文科物理第五章打開微觀世界的三大發(fā)現(xiàn)
- 9加幾課件修改 (2)(教育精品)
- 腎活檢技術(shù)和腎臟病理診療規(guī)范
- 16整式的乘法課件(1)
- 九年級數(shù)學(xué)正多邊形和圓課件2
- 大班PPT:交通工具
- 國培計(jì)劃培訓(xùn)的實(shí)施方案做成PPT
- 專利申請流程課件
- 醫(yī)用局部解剖學(xué)臂、肘和前臂前區(qū)
- 因式分解法 (3)