小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)C課程設(shè)計(jì)報(bào)告及源程序代碼_第1頁(yè)
小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)C課程設(shè)計(jì)報(bào)告及源程序代碼_第2頁(yè)
小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)C課程設(shè)計(jì)報(bào)告及源程序代碼_第3頁(yè)
小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)C課程設(shè)計(jì)報(bào)告及源程序代碼_第4頁(yè)
小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)C課程設(shè)計(jì)報(bào)告及源程序代碼_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課 程 設(shè) 計(jì) 報(bào) 告課程名稱 c語(yǔ)言課程設(shè)計(jì) 課題名稱 小學(xué)數(shù)學(xué)測(cè)試系統(tǒng) 專 業(yè) 紡織工程 班 級(jí) 1202 學(xué) 號(hào) 28 姓 名 金啟宜 指導(dǎo)教師 2014年 01 月 06 日湖南工程學(xué)院課 程 設(shè) 計(jì) 任 務(wù) 書課程名稱 c語(yǔ)言課程設(shè)計(jì) 課 題 小學(xué)數(shù)學(xué)測(cè)試系統(tǒng) 專業(yè)班級(jí) 紡織工程1202 學(xué)生姓名 金啟宜 學(xué) 號(hào) 28 指導(dǎo)老師 審 批 任務(wù)書下達(dá)日期 2013 年 12 月 26 日任務(wù)完成日期 2014年 01 月 06 日一、設(shè)計(jì)內(nèi)容與設(shè)計(jì) 課題九:小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)。具體內(nèi)容見附錄。2設(shè)計(jì)要求:1)設(shè)計(jì)正確,方案合理。2)界面友好,使用方便。3)程序精煉,結(jié)構(gòu)清晰。4)上機(jī)演示

2、。3設(shè)計(jì)報(bào)告要求:課程設(shè)計(jì)報(bào)告格式如下:1)正文的格式:一級(jí)標(biāo)題用3號(hào)黑體,二級(jí)標(biāo)題用四號(hào)宋體加粗,正文用小四號(hào)宋體,行距為22。 2)正文的內(nèi)容:課題的主要功能、課題的功能模塊的劃分、主要功能的實(shí)現(xiàn)、程序調(diào)試、總結(jié)、附件(所有程序的源代碼,要求對(duì)程序?qū)懗霰匾淖⑨專n程設(shè)計(jì)報(bào)告需5000字左右(不含附件)。3)課程設(shè)計(jì)報(bào)告裝訂順序:封面、任務(wù)書、目錄、正文、評(píng)分、程序清單附件。二、進(jìn)度安排星期日(17周)星期一(18周)星期四(18周)星期五(18周)星期日(18周)14:00-17:0018:00-21:0018:00-21:0018:00-21:00交報(bào)告上課時(shí)間另外安排。附錄:設(shè)計(jì)課

3、題九:小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)一、問題描述:本系統(tǒng)可以用來(lái)進(jìn)行簡(jiǎn)單的數(shù)學(xué)測(cè)試,并累計(jì)成績(jī),包括用戶注冊(cè)、用戶登錄、用戶刪除、題目測(cè)試、信息保存等功能。二、功能描述:1、本系統(tǒng)采用結(jié)構(gòu)體數(shù)組,每個(gè)數(shù)據(jù)的結(jié)構(gòu)應(yīng)當(dāng)包括:用戶名、用戶密碼、共測(cè)試題目數(shù)、答對(duì)題目數(shù)。2、系統(tǒng)功能:a. 用戶注冊(cè):即添加新的用戶名、用戶密碼。b. 用戶登錄:在進(jìn)行數(shù)學(xué)測(cè)試之前,需進(jìn)行登錄,若沒有該用戶,需進(jìn)行注冊(cè)。c. 題目測(cè)試:系統(tǒng)自動(dòng)生成題目(注意題目的合理性,題目結(jié)果不能是負(fù)數(shù),除數(shù)不能是0等),用戶給出答案,系統(tǒng)可以自動(dòng)測(cè)試其正確性,同時(shí)統(tǒng)計(jì)成績(jī)。d. 信息保存: 當(dāng)注冊(cè)成功、題目測(cè)試完畢后將用戶信息及成績(jī)保存到文件。e

4、.退出系統(tǒng)。3、系統(tǒng)使用說(shuō)明:執(zhí)行一個(gè)具體的功能之后,程序?qū)⒅匦嘛@示功能菜單。系統(tǒng)的功能并不限于上述,可以對(duì)其進(jìn)行擴(kuò)充完善,如題目的自動(dòng)生成,可以只是簡(jiǎn)單的加減乘除運(yùn)算,也可以生成復(fù)雜的四則混合運(yùn)算。同時(shí),用戶界面友好也很重要,當(dāng)輸入錯(cuò)誤答案,需給出提示信息。三、測(cè)試數(shù)據(jù):用戶=3,題目數(shù)=5目 錄1 系統(tǒng)需求分析62 概要設(shè)計(jì)63 詳細(xì)設(shè)計(jì)104 系統(tǒng)測(cè)試155課程設(shè)計(jì)總結(jié)181 系統(tǒng)需求分析 小學(xué)生數(shù)學(xué)測(cè)試系統(tǒng)具有隨機(jī)出題,自動(dòng)評(píng)分,查看答案,錯(cuò)題重做等功能的系統(tǒng);其屬性有:1. 主界面設(shè)計(jì),選擇各種功能。 2. 系統(tǒng)隨機(jī)出題,顯示算式,含加,減,乘,除四則運(yùn)算。 3. 練習(xí)時(shí),系統(tǒng)隨機(jī)出

5、題,鍵入答案,可顯示對(duì)錯(cuò)。 4. 測(cè)試時(shí),系統(tǒng)自動(dòng)出題,每題得分,再統(tǒng)計(jì)得分。 5. 題的對(duì)錯(cuò)信息,錯(cuò)誤的給出答案。 2 概要設(shè)計(jì)系統(tǒng)功能模塊圖:小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)學(xué)生成績(jī)管理模塊 測(cè)試模塊注冊(cè)登錄模塊查看結(jié)果模塊 錯(cuò)題重做模塊2.1注冊(cè)登錄模塊提示用戶輸入姓名和學(xué)號(hào),如果已經(jīng)有記錄則將本次登錄用戶信息追加儲(chǔ)存在文件中,如果沒有記錄,則創(chuàng)建一個(gè)新文件儲(chǔ)存:其模塊圖如下圖所示:注冊(cè)登錄模塊提示輸入姓名學(xué)號(hào)創(chuàng)建文件記錄學(xué)生信息判斷是否有記錄 2.2測(cè)試模塊進(jìn)入開始測(cè)試菜單后,開始計(jì)時(shí),選擇加減乘除四種運(yùn)算類型,總體來(lái)說(shuō)測(cè)試模塊可以分為:加法運(yùn)算、減法運(yùn)算、乘法運(yùn)算、除法運(yùn)算四部分四部分功能相似選擇類

6、型后,在選擇題數(shù)目為(5,10,20,50,100),然后再選擇難度,這時(shí)開始做題(題目利用隨機(jī)函數(shù)隨機(jī)出題),然后判斷正誤并給出正確率,錯(cuò)誤的結(jié)果存入一個(gè)文件中以備錯(cuò)題重做,將所有做題的結(jié)果存入另個(gè)文件中以便查看結(jié)果;測(cè)試模塊加法運(yùn)算減法運(yùn)算乘法運(yùn)算除法運(yùn)算2.3 學(xué)生成績(jī)管理模塊本模塊首先將每次測(cè)試同學(xué)姓名,學(xué)號(hào),成績(jī)存入一個(gè)文件中,每次測(cè)試同學(xué)的信息不覆蓋之前同學(xué)的信息,然后將文件中的信息讀取到結(jié)構(gòu)體中進(jìn)行排序,最后利用結(jié)構(gòu)體將排好序的成績(jī)顯示到屏幕上,其模塊如下所示圖:學(xué)生成績(jī)管理模塊存入測(cè)試學(xué)生成績(jī)信息查看排名榜創(chuàng)建學(xué)生成績(jī)信息文件排列順序2.4 查看結(jié)果模塊利用測(cè)試模塊存儲(chǔ)的結(jié)果信

7、息文件進(jìn)行直接讀取,期間用到fgetc函數(shù)將文件的信息讀取出來(lái),其圖如下圖所示:查看結(jié)果模塊打開存儲(chǔ)結(jié)果的文件讀取文件2.5 錯(cuò)題重做模塊 測(cè)試模塊過程的已將錯(cuò)題和錯(cuò)題的答案分別出入到文件中,直接進(jìn)行打開存儲(chǔ)錯(cuò)題的文件逐個(gè)讀取錯(cuò)題,這時(shí)利用scanf函數(shù)輸入答題者的答案,最后再打開儲(chǔ)存錯(cuò)題答案的文件進(jìn)行核對(duì)正確答案,其模塊如下圖所示:錯(cuò)題重做模塊讀取錯(cuò)題進(jìn)行重做核對(duì)答案打開錯(cuò)題存儲(chǔ)文件系統(tǒng)流程圖:開始輸入姓名輸入學(xué)號(hào)主菜單開始測(cè)試查看排名錯(cuò)題重做查看結(jié)果結(jié)束測(cè)試加法減法乘法除法選擇題數(shù)選擇難度測(cè)試退出返回保存3 詳細(xì)設(shè)計(jì)3.1登錄功能得具體實(shí)現(xiàn):用到兩個(gè)函數(shù)savemessage()和judg

8、e()兩個(gè)函數(shù),其中 savemessage()函數(shù)用來(lái),保存學(xué)生輸入信息,將輸入學(xué)生信息保存到studentmessage.txt和testresult.txt文件中,保存過程中,先輸入到結(jié)構(gòu)體中,再利用fwrite(&s0,sizeof(struct student),1,fp);語(yǔ)句向文件studentmessage.txt中寫入一條記錄,即剛剛輸入的學(xué)生姓名和學(xué)號(hào);利用fprintf(fp1,姓名:%sn,);fprintf(fp1,學(xué)號(hào):%sn,s0.num); 向文件testresult.txt中寫入剛剛輸入的學(xué)生信息登錄完后進(jìn)入測(cè)試界面此時(shí)開始計(jì)時(shí)有語(yǔ)句printf

9、( 請(qǐng)計(jì)時(shí)輸入開始時(shí)間(點(diǎn),分):); scanf(%d,%d,&houra,&mina);進(jìn)行輸入計(jì)時(shí)。然后進(jìn)入測(cè)試界面的菜單:3.2 測(cè)試功能得實(shí)現(xiàn)選測(cè)試類型:測(cè)試功能菜單分為5個(gè),其中14為選擇類型,5返回主菜單;具體實(shí)現(xiàn)選擇功能有while(choose5) printf( 超出功能范圍,請(qǐng)重新選擇(1-5):);scanf(%d,&choose);輸入15之間的一個(gè)數(shù),再用switch(choose) 進(jìn)行選擇對(duì)應(yīng)的功能如上圖選擇1后進(jìn)入選題數(shù)目:進(jìn)行選擇題目的數(shù)目,輸入要測(cè)試的題目數(shù)被限制(5/10/20/50/100)五個(gè)數(shù)用句while(thnum5&thnum10&thnum

10、20&thnum50&thnum100) printf(超出功能范圍,請(qǐng)重新選擇(5/10/20/50/100):);scanf(%d,&thnum); 由此語(yǔ)句實(shí)現(xiàn)對(duì)題目數(shù)的限制,但超出范圍后則提示重新輸入。在begain()中調(diào)用addition(int number)控制循環(huán)語(yǔ)句for(int i=0;inumber;i+) if(m=1)num1=rand()%n; num2=rand()%n; /產(chǎn)生一位隨機(jī)數(shù),num1,num2if(m=2)num1=10+rand()%(n-10); /產(chǎn)生兩位隨機(jī)數(shù) num1,num2 num2=10+rand()%(n-10);if(m=3)

11、num1=100+rand()%(n-100); /產(chǎn)生三位隨機(jī)數(shù) num1,num2 num2=100+rand()%(n-100);printf(%d + %d = ,num1,num2); scanf(%d,&num4);通過控制循環(huán)的次數(shù)來(lái)控制產(chǎn)生題的數(shù)目.選難度的實(shí)現(xiàn):利用隨機(jī)函數(shù)rand()%n;中n的不同值產(chǎn)生不同的位數(shù)的隨機(jī)書實(shí)現(xiàn)難度的控制,n=10時(shí)用語(yǔ)句num1=rand()%n產(chǎn)生一位數(shù);n=100時(shí)用語(yǔ)句num1=10+rand()%(n-10)產(chǎn)生二位數(shù);n=1000時(shí)用num1=100+rand()%(n-100)產(chǎn)生三位數(shù);具體有語(yǔ)句printf(請(qǐng)選擇難度: )

12、; scanf(%d,&m);system(cls); /清屏if(m=1) n=10 ;if(m=2) n=100 ;else if(m=3) n=1000 ;for(int i=0;inumber;i+) if(m=1)num1=rand()%n; num2=rand()%n; if(m=2)num1=10+rand()%(n-10); num2=10+rand()%(n-10);if(m=3)num1=100+rand()%(n-100); num2=100+rand()%(n-100); 實(shí)現(xiàn)控制難度,并有rand()%n產(chǎn)生隨機(jī)數(shù)實(shí)現(xiàn)隨機(jī)出題功能。自動(dòng)評(píng)分的實(shí)現(xiàn)和數(shù)據(jù)的儲(chǔ)存系統(tǒng)會(huì)將輸

13、入的答案與正確答案進(jìn)行逐一比較,如果正確則將結(jié)果只記錄到testresult.txt中,以便查看結(jié)果;如果錯(cuò)誤,則將錯(cuò)誤題正確結(jié)果記錄到failedresult.txt中,以便錯(cuò)題重做,將錯(cuò)誤題正確結(jié)果記錄到rightresult.txt中,testresult.txt中,以便核對(duì)錯(cuò)題答案,在此過程中系統(tǒng)會(huì)自動(dòng)統(tǒng)計(jì)正確結(jié)果個(gè)數(shù)和錯(cuò)誤個(gè)數(shù),從而利用average=float(count1)/float(number);自動(dòng)得到分?jǐn)?shù)。具體程序如下:if(num3=num4) fprintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);count1+;else fp

14、rintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);fprintf(fp2,%d + %d =n,num1,num2,num4,num3);/將錯(cuò)誤題記錄到failedresult.txt中fprintf(fp3,%d + %d = %d n,num1,num2,num3); average=float(count1)/float(number);fprintf(fp,正確 %d 道,錯(cuò)誤 %d 道,正確率為:%fnn,count1,count2,average);a=a+average*100;/總分nu+;/記錄做不同類型題的次數(shù)以便算平均分減乘除的過

15、程和原理和加法一樣其工作界面分別為減法;乘法;除法;除法其它功能得實(shí)現(xiàn)與加法一樣只有分母不為零,用num2=n/10+rand()%(n-n/10)語(yǔ)句進(jìn)行實(shí)現(xiàn),其中rand()%(n-n/10)產(chǎn)生0到n-n/10-1的數(shù);n/10+rand()%(n-n/10)產(chǎn)生n/10到n-1的數(shù);例如n=100時(shí)產(chǎn)生10到99的兩位數(shù);從而實(shí)現(xiàn)了分母不為零,同時(shí)也實(shí)現(xiàn)了難度的控制。3.3查看結(jié)果的實(shí)現(xiàn):測(cè)試過程中已經(jīng)將結(jié)果記錄存到testresult.txt中,只需打開文件讀取出記錄即可void showresult()/顯示測(cè)試結(jié)果函數(shù)file *fp;if(fp=fopen(testresult

16、.txt,r)=null); exit(0);char ch; ch=fgetc(fp); /文件開頭字符while(ch!=eof) /當(dāng)文件沒有到尾時(shí),一直循環(huán) putchar(ch); /輸出字符 ch=fgetc(fp); fclose(fp); 有此函數(shù)就可直接讀取查看結(jié)果。3.4 排名的實(shí)現(xiàn)此過程中將將每次做題情況及學(xué)生信息記錄到文件nrecord.txt中,然后再將nrecord.txt中的一條條記錄讀取到結(jié)構(gòu)體中,用冒泡法進(jìn)行排序,最后直接從結(jié)構(gòu)體中讀取排好序的成績(jī);其具體程序:void sort() /實(shí)現(xiàn)排序file *fp5;int i,j,m; s0.avscore=a

17、/nu; fp5=fopen(nrecord.txt,a+); fprintf(fp5,%s%s%fn,,s0.num,s0.avscore);/將剛剛做過的測(cè)試記錄到文件nrecord.txt中 fclose(fp5); fp5=fopen(nrecord.txt,rb);for(i=0;!feof(fp5);i+) fscanf(fp5,%s%s%fn,,si.num,&si.avscore); fclose(fp5); m=i;struct student temp;for(i=0;im;i+) for(j=0;jm-1;j+)if(sj.avscoresj+

18、1.avscore)strcpy(,); strcpy(temp.num,sj.num); temp.avscore=sj.avscore; strcpy(,sj+1.name); strcpy(sj.num,sj+1.num);sj.avscore=sj+1.avscore; strcpy(sj+1.name,); strcpy(sj+1.num,temp.num);sj+1.avscore=temp.avscore;/輸出排名結(jié)果printf*n);printf( -查看你的排名(排序結(jié)果由高到低):-n);printf( -

19、姓名學(xué)號(hào)分?jǐn)?shù)-n);for(i=0;im;i+)printf(%s%s%4.2fn,,si.num,si.avscore);3.5錯(cuò)題重做測(cè)試過程中的已將錯(cuò)題和錯(cuò)題的答案分別存入到failedresult.txt 和rightresult.txt文件中,直接進(jìn)行打開存儲(chǔ)錯(cuò)題的文件逐個(gè)讀取錯(cuò)題,這時(shí)利用scanf函數(shù)輸入答題者的答案,最后再打開儲(chǔ)存錯(cuò)題答案的文件進(jìn)行核對(duì)正確答案具體程序?yàn)椋簐oid rework() / 錯(cuò)題重做int a; char ch; file *fp2,*fp3;if(fp2=fopen(failedresult.txt,a+)=null)printf(打

20、開文件失敗n); exit(0);if(fp3=fopen(rightresult.txt,a+)=null)printf(打開文件失敗n); exit(0);printf(*錯(cuò)題重做*n);while(!feof(fp2) ch=fgetc(fp2);printf(%c,ch);/讀取failedresult.txt中的錯(cuò)題if(ch=) scanf(%d,&a); /輸入答案fp2=fopen(failedresult.txt,w);/清空之前數(shù)據(jù)fclose(fp2);printf(=小朋友請(qǐng)查看正確答案=n);while(!feof(fp3) ch=fgetc(fp3);printf(

21、%c,ch);/讀取rightresult.txt中的錯(cuò)題的答案fclose(fp3);fp3=fopen(rightresult.txt,w);/清空f(shuō)close(fp3);3.6結(jié)束測(cè)試當(dāng)選擇主菜單的結(jié)束功能時(shí),系統(tǒng)則提示輸入結(jié)束時(shí)間,輸入后,系統(tǒng)將自動(dòng)生成所用時(shí)間,然后系統(tǒng)將把學(xué)生的所有信息記錄到以學(xué)生,學(xué)號(hào)命名的文件中.具體實(shí)現(xiàn)過程如下;void filecopy()/文件復(fù)制函數(shù),用來(lái)保存測(cè)試結(jié)果,當(dāng)然文件名不能重復(fù),file *in,*out; strcat(s0.num,.txt);/將字符串.txt連接到字符串student0.num后,即以學(xué)號(hào)為文件名,后綴為.txt的文件中

22、,保存在工程目錄下if(in=fopen(testresult.txt,r)=null) in=fopen(testresult.txt,w+); printf(無(wú)文件記錄,已新建.n);if(out=fopen(s0.num,w)=null)/打開文件學(xué)號(hào).txt 文件(如030.txt),w方式為只寫方式 printf(打開文件失敗n); exit(0);while(!feof(in)/當(dāng)文件testresult.txt沒有結(jié)束時(shí)循環(huán) fputc(fgetc(in),out);/逐個(gè)字符寫入 fclose(in); fclose(out);void testover()/程序測(cè)試完畢函數(shù)p

23、rintf(nn-測(cè)試完畢你的測(cè)試結(jié)果保存在 %s 中-nn,s0.num); /輸出測(cè)試結(jié)果記錄提示4 系統(tǒng)測(cè)試 4.1注冊(cè)登錄模塊 4.2測(cè)試模塊選測(cè)試類型選題數(shù)目選難度的實(shí)現(xiàn)4.3 查看學(xué)生成績(jī)模塊4.4 錯(cuò)題重做模塊4.5 測(cè)試時(shí)出現(xiàn)的錯(cuò)誤與分析總結(jié)程序設(shè)計(jì)為結(jié)構(gòu)化和模塊化,用函數(shù)間的相互調(diào)用來(lái)實(shí)現(xiàn)系統(tǒng)的功能,為調(diào)試帶來(lái)了一定的方便 。在調(diào)試過程中,出現(xiàn)了很多問題,其中文件和結(jié)構(gòu)體之間的轉(zhuǎn)換最為困難,在一段時(shí)間內(nèi),影響到了錯(cuò)題重做,排名等功能的實(shí)現(xiàn);問題一:程序中多次用到了文件的讀寫,用文件記錄信息,多次出現(xiàn)讀不出來(lái),記錄不到文件中,還出現(xiàn)亂碼。 解決方法:認(rèn)真學(xué)習(xí)和反復(fù)研究了,文件的

24、讀寫函數(shù)fprintf,fscanf,fread,fwrite,fgetc,在反復(fù)的調(diào)試中終于解決了此問題。問題二:由于學(xué)生的信息均記錄在文件中,而文件不能直接排序需轉(zhuǎn)換到結(jié)構(gòu)體中進(jìn)行排序,給整個(gè)排序過程帶來(lái)了相當(dāng)大的困難,出現(xiàn)了轉(zhuǎn)換不到結(jié)構(gòu)體中,和亂碼現(xiàn)象。解決方法:首先檢查了為文件是否將信息記錄了下來(lái),確認(rèn)有數(shù)據(jù)后,用fscanf, fread,進(jìn)行了反復(fù)的更換,此過程中反復(fù)運(yùn)行查看結(jié)構(gòu)體是否有輸出。最終實(shí)現(xiàn)了文件與結(jié)構(gòu)體之間數(shù)據(jù)的傳遞,實(shí)現(xiàn)了排序功能.問題三:錯(cuò)題重做有一定的困難,怎樣將錯(cuò)題一個(gè)個(gè)及記錄下來(lái),并且能讀出來(lái)重新做,產(chǎn)生了一定的困難。解決方法:采用了文件記錄錯(cuò)題和錯(cuò)題的答案,

25、用fgetc函數(shù)實(shí)現(xiàn)了讀出記錄的錯(cuò)題,從而實(shí)現(xiàn)了錯(cuò)題重做功能。此外在調(diào)試過程中也遇到了相當(dāng)多的其他問題,從整體結(jié)構(gòu)的設(shè)計(jì),到各個(gè)功能的實(shí)現(xiàn).5 課程設(shè)計(jì)總結(jié) 這次的課程設(shè)計(jì)實(shí)驗(yàn)是對(duì)我們進(jìn)入大學(xué)以來(lái)學(xué)習(xí)c語(yǔ)言結(jié)果的是一次大考驗(yàn)。自己動(dòng)手,發(fā)現(xiàn)問題和解決問題。并發(fā)現(xiàn)了許多自己的不足,平時(shí)沒掌握的知識(shí)在實(shí)踐中暴漏,經(jīng)過不斷的思考,查閱書籍和上網(wǎng)查資料及上機(jī)運(yùn)行,解決了大部分問題,還稍微有些小問題。但是,我相信在今的學(xué)習(xí)中,一定能把它解決好。當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握程序開發(fā)技術(shù)是十分重要的,而c語(yǔ)言又是最常見,功能最強(qiáng)大的一種高級(jí)語(yǔ)言,因此做好c語(yǔ)言課

26、程設(shè)計(jì)是十分必要的。 我不僅鞏固c語(yǔ)言程序設(shè)計(jì)課程學(xué)習(xí)的內(nèi)容,掌握設(shè)計(jì)的基本方法,強(qiáng)化上機(jī)動(dòng)手能力。 本次課程設(shè)計(jì)編寫的小學(xué)數(shù)學(xué)測(cè)試系統(tǒng),它具有隨機(jī)出題、自動(dòng)評(píng)分、自動(dòng)排名,查看正確答案、錯(cuò)題重做等功能,本系統(tǒng)功能強(qiáng)大,程序大,編寫難度相當(dāng)大,在編程中,很多知識(shí),幾乎是一片空白。不過后來(lái)通過書本和網(wǎng)絡(luò)慢慢知道了一點(diǎn)。 通過這次課程設(shè)計(jì),使我更加深刻地體會(huì)到c語(yǔ)言程序編寫過程的嚴(yán)謹(jǐn)與細(xì)致,還有無(wú)論做任何事都要有耐心。也懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力在

27、課程設(shè)計(jì)過程中,收獲知識(shí),提高能力的同時(shí),我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過程中,我一定會(huì)把課程設(shè)計(jì)的精神帶到生活中,是生活也更加好。謝謝田老師這幾天時(shí)間對(duì)我們指導(dǎo)計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)評(píng)分表課程名稱: c語(yǔ)言程序設(shè)計(jì) 項(xiàng) 目評(píng) 價(jià)設(shè)計(jì)方案的合理性與創(chuàng)造性設(shè)計(jì)與調(diào)試結(jié)果設(shè)計(jì)說(shuō)明書的質(zhì)量答辯陳述與回答問題情況課程設(shè)計(jì)周表現(xiàn)情況綜合成績(jī) 教師簽名: 日 期: 2014.01.10 附錄:源程序#include /c語(yǔ)言標(biāo)準(zhǔn)輸入輸出頭文件#include /字符串操作需要用到的頭文件#

28、include /文件操作需要用到的頭文件#include /產(chǎn)生隨機(jī)數(shù)需要用到的頭文件float a=0;int nu=0;int houra,hourb,mina,minb;struct student char name21; /姓名 char num10; /學(xué)號(hào) float avscore;s50; /結(jié)構(gòu)體數(shù)組,存儲(chǔ)學(xué)生的信息,在此初定為50,可改/*-*/void savemessage() /保存學(xué)生輸入信息的函數(shù) file *fp,*fp1;/定義文件指針,/以下判斷文件打開與否 ,a方式打開則可向文件尾寫數(shù)據(jù)if(fp=fopen(studentmessage.txt,wb

29、+)=null)/打開文件studentmessage.txt printf(打開文件失敗n); exit(0);if(fp1=fopen(testresult.txt,a)=null)/打開文件testresult.txt printf(打開文件失敗n); exit(0);printf(輸入姓名:); /以下為要學(xué)生輸入個(gè)人信息scanf(%s,);printf(輸入學(xué)號(hào):);scanf(%s,&s0.num);fwrite(&s0,sizeof(struct student),1,fp);/向文件studentmessage.txt中寫入一條記錄,即剛剛輸入的學(xué)生信息fpri

30、ntf(fp1,姓名:%sn,);/以下為向文件testresult.txt中寫入剛剛輸入的學(xué)生信息fprintf(fp1,學(xué)號(hào):%sn,s0.num);fclose(fp);/關(guān)閉文件studentmessage.txtfclose(fp1);system(cls); /清屏void judge()/判斷函數(shù)int i=0;file *fp;/文件指針/以下判斷文件打開與否 ,r為只讀打開方式printf(nnn); printf( *小學(xué)數(shù)學(xué)測(cè)試系統(tǒng)*n); printf( *-*n); printf( *-*n); printf( *n); printf( *-注 冊(cè)-*n

31、); printf( *-*n); printf( *-輸入姓名-*n); printf( *-*n); printf( *-輸入學(xué)號(hào)-*n); printf( *-*nnn);if(fp=fopen(studentmessage.txt,r)=null)/以下判斷文件打開與否 a方式打開則可向文件尾寫數(shù)據(jù)/打開文件studentmessage.txt fp=fopen(studentmessage.txt,w+);/如果沒有studentmessage.txt文件,則新建此文件,w+打開方式為新建一個(gè)文件printf(無(wú)文件記錄,已新建.n);while(!feof(fp)/判斷是否到了文件

32、尾fread(&si,sizeof(struct student),1,fp);/一行一行從文件中讀出學(xué)生信息,保存在結(jié)構(gòu)體數(shù)組student中fscanf(fp,n); /讀取換行符 i+; /i變量保存學(xué)生記錄個(gè)數(shù)if(i=50) /當(dāng)人數(shù)滿時(shí)即50個(gè)人滿時(shí),因?yàn)閿?shù)組下標(biāo)從0開始,所以當(dāng)i為29時(shí)printf(人數(shù)已滿,你已無(wú)法測(cè)試.n);fclose(fp);exit(0);/*-*/void addition(int number) /加法運(yùn)算函數(shù),number為題目數(shù)形參file *fp,*fp2,*fp3;if(fp=fopen(testresult.txt,a)=null) pr

33、intf(打開文件失敗n); exit(0);if(fp2=fopen(failedresult.txt,a)=null)printf(打開文件失敗n); exit(0);if(fp3=fopen(rightresult.txt,a)=null)printf(打開文件失敗n);exit(0);int num1,num2,num3,num4,m,n,count1=0,count2=0;float average=0.0; /正確率變量,注意是float類型srand(time(0); /初始化隨機(jī)數(shù),如果沒有此語(yǔ)句,則每次運(yùn)行程序時(shí)的隨機(jī)數(shù)是一樣的fprintf(fp,加法測(cè)試:n); /向文件

34、寫入fprintf(fp,被加數(shù) + 加數(shù) = 你的結(jié)果 正確結(jié)果 是否正確n);/向文件寫入 printf( *n);/*選擇難度*/ printf( *- 請(qǐng)選擇難度:-*n); printf( *- 1.簡(jiǎn) 單 -*n); printf( *- 2.一 般 -*n); printf( *- 3.困 難 -*n); printf( *-*nnn);printf(請(qǐng)選擇難度: ); scanf(%d,&m);system(cls); /清屏if(m=1) n=10 ;/*將m的值轉(zhuǎn)化為對(duì)應(yīng)的n值,從而使隨機(jī)函數(shù)出現(xiàn)一位,2位,3位,*/if(m=2) n=100 ;else if(m=3)

35、n=1000 ;printf( n *nn);for(int i=0;inumber;i+)/*小于測(cè)試題目數(shù)時(shí),循環(huán)*/if(m=1)num1=rand()%n; num2=rand()%n; /產(chǎn)生一位隨機(jī)數(shù),num1,num2if(m=2)num1=10+rand()%(n-10); /產(chǎn)生兩位隨機(jī)數(shù) num1,num2 num2=10+rand()%(n-10);if(m=3)num1=100+rand()%(n-100); /產(chǎn)生三位隨機(jī)數(shù) num1,num2 num2=100+rand()%(n-100); num3=num1+num2; /num3保存正確結(jié)果 printf(%d

36、 + %d = ,num1,num2);/在終端屏幕上輸出題目 scanf(%d,&num4);/你要輸入的計(jì)算結(jié)果if(num3=num4)/正確結(jié)果與你計(jì)算的結(jié)果比較,正確的話fprintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);/將結(jié)果記錄到testresult.txt中count1+;/變量count1記錄正確題目的個(gè)數(shù)else/錯(cuò)誤的話,即num1!=num2時(shí)fprintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);/將結(jié)果記錄到testresult.txt中fprintf(fp2,%d + %d =n,n

37、um1,num2,num4,num3);/將錯(cuò)誤題記錄到failedresult.txt中fprintf(fp3,%d + %d = %d n,num1,num2,num3);/將錯(cuò)誤題正確結(jié)果記錄到failedresult.txt中average=float(count1)/float(number);/計(jì)算正確率,注意int整型要轉(zhuǎn)換為float類型fprintf(fp,正確 %d 道,錯(cuò)誤 %d 道,正確率為:%fnn,count1,count2,average);a=a+average*100;nu+;fclose(fp);fclose(fp3);fclose(fp2);/*-*/vo

38、id subtracter(int number) /減法運(yùn)算函數(shù),注釋與加法一樣file *fp,*fp2,*fp3;if(fp=fopen(testresult.txt,a)=null)printf(打開文件失敗n);exit(0);if(fp2=fopen(failedresult.txt,a)=null)printf(打開文件失敗n);exit(0);if(fp3=fopen(rightresult.txt,a)=null)printf(打開文件失敗n);exit(0);int num1,num2,num3,num4,count1=0,n,m,count2=0;float averag

39、e=0.0;srand(time(0);fprintf(fp,減法測(cè)試:n);fprintf(fp,被減數(shù) - 減數(shù) = 你的結(jié)果 正確結(jié)果 是否正確n); printf( *n);/*選擇難度*/ printf( *- 請(qǐng)選擇難度:-*n); printf( *- 1.簡(jiǎn) 單 -*n); printf( *- 2.一 般 -*n); printf( *- 3.困 難 -*n); printf( *-*nnn);printf(請(qǐng)選擇: ); scanf(%d,&m);system(cls); /清屏if(m=1) n=10 ;if(m=2) n=100 ;else if(m=3) n=1000

40、 ;printf( n *nn);for(int i=0;inumber;i+)if(m=1)num1=rand()%n; num2=rand()%n; /產(chǎn)生一位隨機(jī)數(shù),num1,num2if(m=2)num1=10+rand()%(n-10); /產(chǎn)生兩位隨機(jī)數(shù) num1,num2 num2=10+rand()%(n-10);if(m=3)num1=100+rand()%(n-100); /產(chǎn)生三位隨機(jī)數(shù) num1,num2 num2=100+rand()%(n-100);num3=num1-num2;printf(%d - %d = ,num1,num2);scanf(%d,&num4);if(num3=num4)fprintf(fp,%d - %d =%d%d n,num1,num2,num4,num3);count1+;elsefprintf(fp,%d - %d =%d%dn,num1,num2,num4,num3);count2+;fprintf(fp2,%d - %d =n,num1,num2,num4,num3);fprintf(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論