《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告書-簡(jiǎn)單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn).doc
《《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告書-簡(jiǎn)單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告書-簡(jiǎn)單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn).doc(25頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、懷 化 學(xué) 院 計(jì) 算 機(jī) 系數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告書 學(xué)生姓名: 學(xué) 號(hào):0806401042年級(jí)專業(yè)及班級(jí):2008級(jí)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 簡(jiǎn)單的小學(xué)生做題系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)學(xué)生: 指導(dǎo)老師: (懷化學(xué)院計(jì)算機(jī)系:懷化 418008)
2、摘 要:本次課程設(shè)計(jì)的目的是設(shè)計(jì)一個(gè)簡(jiǎn)單的小學(xué)生做題系統(tǒng),要求利用棧求表達(dá)式的值,可供小學(xué)生作業(yè),并能給出分?jǐn)?shù),限1人完成。本次設(shè)計(jì)主要采用的語(yǔ)言是C和C+語(yǔ)言,編程環(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è)簡(jiǎn)單的能供小學(xué)生選題、做題并能打出分?jǐn)?shù)與歷史成績(jī)相比較的簡(jiǎn)單系統(tǒng),很好的完成了這一次的課程設(shè)計(jì)任務(wù)。通過這一次的作業(yè),我學(xué)到了很多知識(shí),明白了親自實(shí)踐和動(dòng)手能力的重要性。關(guān)鍵詞:棧 VC.6 循環(huán) 函數(shù)調(diào)用 文件 一、 前言本次課程設(shè)計(jì)的目的是設(shè)計(jì)一個(gè)簡(jiǎn)單的小學(xué)生做題系統(tǒng),設(shè)
3、計(jì)要求能建立試題庫(kù)文件,隨機(jī)產(chǎn)生n個(gè)題目;題目涉及加減乘除,帶括弧的混合運(yùn)算;隨時(shí)可以退出;保留歷史分?jǐn)?shù),能回顧歷史,給出與歷史分?jǐn)?shù)比較后的評(píng)價(jià)。針對(duì)題目的各項(xiàng)要求,我運(yùn)用C語(yǔ)言工具在VC.6的環(huán)境中,通過結(jié)構(gòu)體數(shù)組、函數(shù)的調(diào)用、循環(huán)的使用以及文件的開閉和讀寫等常用方法來(lái)解決在編程過程中遇到的問題,編寫出了一個(gè)符合設(shè)計(jì)要求的簡(jiǎn)單系統(tǒng)。二、 設(shè)計(jì)分析根據(jù)題目的要求,我根據(jù)題目要求實(shí)現(xiàn)的功能,首先確定了8個(gè)大的子函數(shù),分別用來(lái)實(shí)現(xiàn)輸出目錄表、提取題目、對(duì)系統(tǒng)的說明、存儲(chǔ)所有成績(jī)、輸出所有成績(jī)、存儲(chǔ)最近一次成績(jī)、輸出最近一次成績(jī)、開始作業(yè)等功能。由于其中涉及了能回顧歷史成績(jī)以及隨機(jī)做題等問題,所以就
4、考慮用到了文件的打開與關(guān)閉以及文件的讀寫功能。由于此設(shè)計(jì)要實(shí)現(xiàn)多個(gè)功能,所以為了源代碼清晰明了,所有的函數(shù)不是用的嵌套方式,而是對(duì)每個(gè)功能都用一個(gè)子程序來(lái)實(shí)現(xiàn),然后通過對(duì)子程序的調(diào)用來(lái)達(dá)到設(shè)計(jì)的要求。三、 實(shí)現(xiàn)方法本程序通過C和C+語(yǔ)言來(lái)實(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=所有成績(jī).txt; char filename220=最近一次的成績(jī).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 () 對(duì)系統(tǒng)的說明;4.void save_all_achievment() 存儲(chǔ)所有成績(jī);5.void out_all_achievment() 輸出所有成績(jī);6.void save_latest_achievmen
6、t() 存儲(chǔ)最近一次成績(jī);7.void out_latest_achievment() 輸出最近一次成績(jī);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é)生測(cè)試系統(tǒng) endl;coutendl;cout 1.介紹 4.歷史記錄 endl;cout endl;cout
7、 2.開始測(cè)試 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)不正確,請(qǐng)重新選擇! ;elsebreak;return item;void save_all()/-存儲(chǔ)所有成績(jī)FILE *fp;char ch;fp=fopen(filename1,a);fprintf(fp,nnnn *本次測(cè)試情況總結(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, 本次測(cè)試時(shí)間: %s,asctime(tblock);fclose(fp);void EXIT()/-退出系統(tǒng)coutendlendlendlendlendlendlendlendl;cout 謝謝使用!endl;void show_all()/-輸出所有成績(jī)FILE *fp;char ch;if(fp=fopen(filename1,r)=NULL)coutendlendlendl 沒有任何記錄endl;coutendl 請(qǐng)按回車鍵返回。;elsewhile(!feof(fp)ch=fgetc(fp);coutch;fclose(fp);coutendlendl 請(qǐng)按回車
10、鍵返回:;getchar();getchar();system(cls);void save_current()/-存儲(chǔ)最近一次的成績(jī) FILE *fp;char ch;fp=fopen(filename2,w);ch=getchar();fprintf(fp,nnnn *上一次測(cè)試情況總結(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, 測(cè)試時(shí)間: %s,asctime(tblock);fclose(fp);void out_latest_achievment()/-輸出最近一次的成績(jī);FILE *fp;char ch;if(fp=fopen(filename2,r)=NULL)co
12、utendlendlendl 沒有任何記錄endl;coutendl 請(qǐng)按回車鍵返回。;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()/-開始測(cè)試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)吧,等會(huì)做不完哦!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 本次測(cè)試已經(jīng)完成,請(qǐng)按回車鍵查看結(jié)果!endl;getchar();getchar();system(cls); printf(nnnn *本次測(cè)試情況總結(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( 本次測(cè)試時(shí)間: %s,asctime(tblock);couten
16、dlSave)if(Save!=Y & Save!=N)cout 選項(xiàng)不對(duì):;continue;elseif(Save=Y)save_all();save_current();coutcon)if(con!=Y & con!=N)cout 選項(xiàng)不對(duì):;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)適合與公共場(chǎng)所使用。五、結(jié)論雖然學(xué)了這么久的數(shù)據(jù)結(jié)構(gòu),但是做這種題型的時(shí)候還是感到非常吃力,對(duì)棧和函數(shù)調(diào)用等這些常用的東西卻還是不能夠靈活運(yùn)用。這次的課程設(shè)計(jì)讓我獲益匪淺,不僅學(xué)到了以前從未接觸過的知識(shí),更重要的是培養(yǎng)了自己獨(dú)立思考問題和動(dòng)手解決問題的能力。參考文獻(xiàn)1 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 嚴(yán)蔚敏 吳偉民 編著(第七章:頁(yè)碼 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=所有成績(jī).txt;/存儲(chǔ)所有成績(jī)的 文件名;char filename220=最近一次的成績(jī).txt;/存儲(chǔ)最近一次成績(jī)的 文件名;char ti20050;/將文件中的題庫(kù)題目提取出來(lái)存
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.歷史成績(jī) endl;cout endl;cout 2.開始作業(yè) 5.最后一次成績(jī) 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)目不正確,請(qǐng)重新選擇! ;elsebreak;return item;void Title()/-提取題目,并返回題目個(gè)數(shù);FILE *fp;int i=0;fp=fopen(題庫(kù).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 請(qǐng)按回車鍵返回:;getchar();getchar();system(cls);void save_all_achievment()/-存儲(chǔ)所有成績(jī)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()/-輸出所有成績(jī)FILE *fp;char ch;if(fp=fopen(
23、filename1,r)=NULL)coutendlendlendl 沒有任何記錄endl;coutendl 請(qǐng)按回車鍵返回。;elsewhile(!feof(fp)ch=fgetc(fp);coutch;fclose(fp);coutendlendl 請(qǐng)按回車鍵返回:;getchar();getchar();system(cls);void save_latest_achievment()/-存儲(chǔ)最近一次的成績(jī) 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()/-輸出最近一次的成績(jī);FILE *fp;char ch;if(fp=fopen(filename2,r)=NULL)coutendlendlendl 沒有任何記錄endl;coutendl 請(qǐng)按回車鍵返回。;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為讀取到的符號(hào)i=change(stops-1); /i為符號(hào)棧的棧頂符號(hào)switch(tokenij) /判斷優(yōu)先級(jí)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)吧,等會(huì)做不完哦!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)完成,請(qǐ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)不對(duì):;continue;elseif(Sa
30、ve=Y)save_all_achievment();save_latest_achievment();coutcon)if(con!=Y & con!=N)cout 選項(xiàng)不對(duì):;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: 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案