D單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)設(shè)計_第1頁
D單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)設(shè)計_第2頁
D單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)設(shè)計_第3頁
D單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)設(shè)計_第4頁
D單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、石家莊鐵道大學(xué)課程設(shè)計單項選擇題 標(biāo)準(zhǔn)化考試系統(tǒng)單 位 電氣與電子工程學(xué)院 分院(系)專 業(yè) 電氣信息類 學(xué) 號 學(xué)生姓名 指導(dǎo)教師 石玉晶 完成日期: 2012 年 9 月 14日摘 要單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)是一款比較實用的小型軟件,其原理及相關(guān)軟件在現(xiàn)在生活中有著廣泛的應(yīng)用。本設(shè)計主要應(yīng)用語言進(jìn)行編程,利用c語言中的結(jié)構(gòu)體、文件、數(shù)組、函數(shù)等知識實現(xiàn)系統(tǒng)的試題庫維護(hù)、答題、判卷各個功能,并用文件對修改后的試題庫進(jìn)行保存。應(yīng)用本設(shè)計思路可以進(jìn)行同類及相關(guān)軟件的開發(fā)報告首先介紹了選題的意義及功能要求,其次介紹了程序的設(shè)計思路并包括基本算法和流程圖,接著介紹了源程序代碼和相關(guān)函數(shù)功能,最后是系

2、統(tǒng)的實現(xiàn)并對系統(tǒng)做了調(diào)試。本程序應(yīng)用c語言運行環(huán)境實現(xiàn)了全部功能。報告還附錄了參考用書,并提交了實驗總結(jié)及實驗感想。關(guān)鍵詞:單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)、結(jié)構(gòu)體、數(shù)組、文件、c語言程序設(shè)計。目錄第1章 選題意義 41.1 考試系統(tǒng)的意義 41.2 程序設(shè)計的意義 4第2章 系統(tǒng)功能需求分析 52.1 系統(tǒng)的基本要求 52.2 功能實現(xiàn) 5第3章 系統(tǒng)設(shè)計 63.1 設(shè)計思路 63.2 基本算法及流程圖 73.3 各自定義函數(shù)及其功能 83.4 源程序代碼 9第4章 系統(tǒng)實現(xiàn) 24第5章 總結(jié) 29參考文獻(xiàn)第1章 選題的意義1.1 單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)的意義在計算機技術(shù)和互聯(lián)網(wǎng)飛速發(fā)展的今天,生

3、活中自主學(xué)習(xí)、自主考察測試日益增多,各種學(xué)科上機考試已成為一種趨勢,因此,單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)及其相關(guān)軟件在生活中的應(yīng)用日益增多。本系統(tǒng)可以實現(xiàn)從題庫隨機抽題,并自動判卷,將大大方便考生進(jìn)行練習(xí)、自測和考試,同時減輕相關(guān)工作人員的負(fù)擔(dān),提高工作效率,計算機運行的準(zhǔn)確性還能降低出錯率,提高公平度。所以,設(shè)計并編寫單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)及其相關(guān)軟件是極為有必要的。1.2 程序設(shè)計的意義本課題的實現(xiàn)主要應(yīng)用了c語言中的結(jié)構(gòu)體的使用、數(shù)組應(yīng)用和文件應(yīng)用等內(nèi)容,還涉及到循環(huán)語句、分支選擇結(jié)構(gòu)等內(nèi)容并且用c語言編程。通過設(shè)計本課題可以較全面的復(fù)習(xí)鞏固已學(xué)過的c語言知識并學(xué)習(xí)更多相關(guān)知識,加深對c語言

4、程序設(shè)計的理解。通過課程設(shè)計可以全面的梳理已學(xué)過的編程知識,加深理解,還可以培養(yǎng)對程序設(shè)計的興趣,增加學(xué)習(xí)趣味。第2章 系統(tǒng)功能分析2.1 系統(tǒng)的基本要求1、本系統(tǒng)要求實現(xiàn)以下功能:(1)、試題庫的維護(hù)。單選題及其答案的增加、刪除、修改和存儲。最終用文件保存試題庫。(2)、試題的抽取。每次從試題中抽取n道題。(3)學(xué)生答題。根據(jù)當(dāng)前題目和4個選項,用戶輸入自己的答案。(4)自動判卷。系統(tǒng)根據(jù)用戶答案與標(biāo)準(zhǔn)答案,實現(xiàn)判卷。2、要求利用文件存儲數(shù)據(jù),采用文本菜單界面、2.2 功能實現(xiàn)1、利用文件打開、關(guān)閉、輸入、輸出相關(guān)知識使存儲數(shù)據(jù)和讀題功能實現(xiàn)。2、利用結(jié)構(gòu)體定義題目和答案。3、用結(jié)構(gòu)體數(shù)組存

5、儲讀出的數(shù)據(jù)并進(jìn)行各項運行后存進(jìn)文件4、利用循環(huán)和字符數(shù)組處理函數(shù)進(jìn)行題目的增加、刪除、修改。5、利用隨機數(shù)函數(shù)得到隨機數(shù)并進(jìn)行隨機抽題。6、利用循環(huán)和數(shù)學(xué)計算進(jìn)行判卷并評分。7、在對界面的美化方面利用簡單的字符畫做了一個簡單動畫,并利用頭文件windows添加了界面顏色。第3章 系統(tǒng)設(shè)計3.1 設(shè)計思路刪除試題修改試題增加試題答題判卷開始教師系統(tǒng)進(jìn)行試題庫維護(hù)學(xué)生系統(tǒng)進(jìn)行答題、判卷1、基本任務(wù)2、程序中涉及到的全局變量(1)int m,用來存儲題目和答案的數(shù)目;(2)file *fp1,*fp2,是文件指針,用于對文件進(jìn)行操作。3、程序中涉及到的自定義函數(shù)void jindutiao(voi

6、d),void logo_interface(void),void readq(),void reada(),void writeq(),void writea(),int shumu(),void shanchu(void),void zengjia(void),void xiugai(void)void teacher(void),void student(void),int menu_select()利用這些自定義函數(shù)和基本的循環(huán)、運行程序進(jìn)行操作。3.2 基本算法及流程圖1、菜單在主函數(shù)中輸出菜單,并選擇教師系統(tǒng)或?qū)W生系統(tǒng),定義函數(shù)void teacher()、void student

7、(),以實現(xiàn)選擇系統(tǒng)。teachern開始輸出菜單char= =tychar= =systudent2、教師系統(tǒng)教師系統(tǒng)共有三個功能,即試題的刪除、增加、修改,定義函數(shù)void teacher()、void shanchu()、void zengjia()、void xiugai(),在teacher()函數(shù)中分別調(diào)用這三個函數(shù)以實現(xiàn)各自功能。shanchuzengjiaxiugaiyt= =2t= =3nnyt= =1y輸出菜單輸入選項輸入選項輸入選項輸入選項輸出菜單輸出菜單3、學(xué)生系統(tǒng)學(xué)生系統(tǒng)共有兩個功能,答題和判卷。開始char= =yy抽題答題判卷結(jié)束n回主菜單char= =y3.3

8、各自定義函數(shù)及其功能1、void logo_interface(void)和void jindutiao(void)利用簡單的字符畫,用于使界面友好。2、void readq()和void reada()分別用于讀題和讀答案。利用fopen函數(shù)打開文件,用fscanf函數(shù)格式化讀出并將讀出數(shù)據(jù)存入結(jié)構(gòu)體數(shù)組中。3、void writeq()和void writea()分別用于寫入題目和答案。利用fopen函數(shù)打開文件,用fprintf函數(shù)將結(jié)構(gòu)體中的數(shù)據(jù)格式化寫入文件。4、int shumu(),用于測文件中的題目數(shù),并將數(shù)目返回到全局變量m中。5、void shanchu(void),用于刪

9、除某一題目。利用數(shù)組從后往前一次覆蓋得到刪除后的結(jié)果。6、void zengjia(void),用于增加一道題目。將題目寫入結(jié)構(gòu)體中,用“追加”的方式打開文件并用fprintf函數(shù)格式化寫入。7、void xiugai(void),用于修改某一題目。用void readq()和void reada()將題目和答案讀入結(jié)構(gòu)體中,將要修改的題目進(jìn)行重新輸入再將新的結(jié)構(gòu)體數(shù)組利用void writeq()和void writea()函數(shù)寫入文件。8、void teacher(void),用于出現(xiàn)菜單并選擇功能,用switch實現(xiàn)調(diào)用不同函數(shù)。9、void student(void),用于實現(xiàn)從題庫中

10、自動抽題和判卷。當(dāng)輸入y選擇開始做題后,利用rand函數(shù)產(chǎn)生隨機數(shù)并將這些隨機數(shù)存入一個數(shù)組中,實現(xiàn)隨機抽題,將這些題目從文件中讀出并存儲在結(jié)構(gòu)體中,用printf函數(shù)輸出;當(dāng)輸入答案后利用循環(huán)對各個題答案與標(biāo)準(zhǔn)答案進(jìn)行對比,得到正確的題數(shù)和錯誤的題數(shù),并計算出正確率,輸出。10、int menu_select(),用于輸出提示信息,并對教師系統(tǒng)選擇和學(xué)生系統(tǒng)進(jìn)行選擇。利用switch實現(xiàn)對不同函數(shù)的調(diào)用。3.4 源程序代碼#include#include#include#include #include #include struct question_typeint t;char timu

11、1000;char a100;char b100;char c100;char d100;question100;struct answer_typeint t;char a;answer100;file *fp1,*fp2;int m;void jindutiao(void) int i; for(i=0;i78;i+) putchar(.); printf(ra); for(i=0;i); void logo_interface(void) /*logo界面*/ char *tu9,*tu29; char *wenzi = t love c language ! ! ! . . .; ch

12、ar *wenzi1 = 歡迎使用 單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng); char *wenzi2 = 制作: d*j*s 研發(fā)小組 ; char *p; int k = 0; int i = 0; int j = 0; int m = 10; tu0 = _._ b_; tu1 = , ? b| ; tu2 = / ? b| _|_; tu3 = -/,- _. /_ b| |:; tu4 = o- / _/ b| |_|; tu5 = | o b_|_|; tu6 = | )- # b_/_|_; tu7 = _/-b| _ | _|_; tu23 = -/,- _ ._/_ | |:; tu24

13、= o- / _. | |_|; tu25 = | o _|_|; tu26 = | )- # _/_|_; tu27 = _/-| _ :|; tu28 = /_| |_o_o|; for (k=0; km; k+) /*顯示第一副圖*/ printf(nnnnn tt); for (i=0; i9; i+) p = tui; while (*p != 0) if (*p = b) for (j = 0; j(m-k); j+) printf( ); else printf(%c,*p); p+; printf(n tt); sleep(100); if (k != m-1) system(

14、cls); sleep(100); system(cls); printf(nnnnn tt); for (i=0; i9; i+) /*顯示第二副圖*/ p = tu2i; while (*p != 0) printf(%c,*p); p+; printf(n tt); sleep(400); system(cls); printf(nnnnn tt); for (i=0; i9; i+) /*顯示第一副圖*/ p = tui; while (*p != 0) if (*p != b) printf(%c,*p); p+; printf(n tt); sleep(400); system(c

15、ls); printf(nnnnn tt); for (i=0; i9; i+) /*顯示第二副圖*/ p = tu2i; while (*p != 0) printf(%c,*p); p+; printf(n tt); printf(ntt ); while (*wenzi != 0) /*顯示第一行文字*/ printf(%c,*wenzi); wenzi+; sleep(100); printf(nntt ); while (*wenzi1 != 0) /*顯示第二行文字*/ printf(%c,*wenzi1); wenzi1+; sleep(100); printf(nnnttt )

16、; while (*wenzi2 != 0) /*顯示第三行文字*/ printf(%c,*wenzi2); wenzi2+; sleep(100); sleep(400); /*400毫秒輸出一個空格 為了屏蔽光標(biāo)閃爍 */ printf( ); sleep(400); printf( ); sleep(400); printf( ); system(cls);void readq()int i=0;if(fp1=fopen(16.txt,r)=null) printf(出錯!不能打開文件!); exit(0); while(!feof(fp1)fscanf(fp1,%d.%sn%sn%sn

17、%sn%sn,&questioni.t,questioni.timu,questioni.a,questioni.b,questioni.c,questioni.d);i+;fclose(fp1);void reada()int i=0;if(fp2=fopen(16_answer.txt,r)=null) printf(出錯!不能打開文件!); exit(0); while(!feof(fp2)fscanf(fp2,%d.%cn,&answeri.t,&answeri.a);i+;fclose(fp2);void writeq()int i=0;if(fp1=fopen(16.txt,w)=

18、null)printf(出錯!不能打開文件!);exit(0); elsefor(i=0;im;i+)fprintf(fp1,%d.%sn%sn%sn%sn%sn,questioni.t,questioni.timu,questioni.a,questioni.b,questioni.c,questioni.d); fclose(fp1);void writea()int i=0;if(fp2=fopen(16_answer.txt,w)=null)printf(出錯!不能打開文件!);exit(0);elsefor(i=0;im;i+)fprintf(fp2,%d.%cn,answeri.t

19、,answeri.a);fclose(fp2);int shumu()int i=0;if(fp1=fopen(16.txt,r)=null) printf(出錯!不能打開文件!); exit(0); while(!feof(fp1)fscanf(fp1,%d.%sn%sn%sn%sn%sn,&questioni.t,questioni.timu,questioni.a,questioni.b,questioni.c,questioni.d);i+;m=i;fclose(fp1);return m;void shanchu(void)int a,i;m=shumu();printf(共有%d道

20、題n,m);printf(請輸入要刪除的題號:);scanf(%d,&a);readq();reada();for(i=a-1;im;i+)strcpy(questioni.timu,questioni+1.timu);strcpy(questioni.a,questioni+1.a);strcpy(questioni.b,questioni+1.b);strcpy(questioni.c,questioni+1.c);strcpy(questioni.d,questioni+1.d); answeri.a=answeri+1.a;m=m-1;writeq();writea();void ze

21、ngjia(void)int i;m=shumu();i=m;printf(共有%d道題n,m);readq();reada();printf(輸入您要增加的題目:n);printf(請輸入題號:);scanf(%d,&questioni.t);answeri.t=questioni.t;printf(請輸入題干:);scanf(%s,questioni.timu); printf(請輸入選項a:); scanf(%s,questioni.a);printf(請輸入選項b:);scanf(%s,questioni.b);printf(請輸入選項c:);scanf(%s,questioni.c)

22、;printf(請輸入選項d:);scanf(%s,questioni.d); printf(請輸入答案:);getchar();scanf(%c,&answeri.a);if(fp1=fopen(16.txt,a)=null) printf(出錯!不能打開文件!); exit(0);if(fp2=fopen(16_answer.txt,a)=null) printf(出錯!不能打開文件!); exit(0);fprintf(fp1,%d.%sna.%snb.%snc.%snd.%sn,questioni.t,questioni.timu,questioni.a,questioni.b,que

23、stioni.c,questioni.d);fprintf(fp2,%d.%cn,answeri.t,answeri.a);fclose(fp1);fclose(fp2);void xiugai(void)int n;m=shumu();printf(共有%d道題n,m);readq();reada(); printf(請輸入您要修改的題號:);scanf(%d,&n);n=n-1;questionn.t=n+1;answern.t=n+1; printf(請輸入題干:);scanf(%s,questionn.timu); printf(請輸入選項a(請以a.開頭):);scanf(%s,qu

24、estionn.a); printf(請輸入選項b(請以b.開頭):);scanf(%s,questionn.b); printf(請輸入選項c(請以c.開頭):);scanf(%s,questionn.c); printf(請輸入選項d(請以d.開頭):);scanf(%s,questionn.d); printf(請輸入答案:);getchar();scanf(%c,&answern.a);writeq();writea();void teacher(void)int b;char c;int menu_select();m=shumu();printf(共有%d道題n,m); print

25、f(您可以對試題庫進(jìn)行以下維護(hù)操作:n); printf(1、刪除n2、增加n3、修改n請選擇:);scanf(%d,&b);switch(b)case 1: shanchu();break;case 2: zengjia();break;case 3: xiugai();break;printf(是否繼續(xù)?(y/是,n/否);getchar();scanf(%c,&c);getchar();if(c=y) teacher();else if(c=n)menu_select();void student(void)int menu_select();int a,i,j,n;int as100,

26、bb100;char b,c,d;char ans100;printf(開始做題?(y/是,n/否);getchar();scanf(%c,&b);getchar();if(b=y)m=shumu();printf(共有%d道題n,m);printf(請輸入答題數(shù):);scanf(%d,&a);srand(time(null);for(i=0;ia;i+)asi=rand()%(m-0+1)+0;readq();for(i=0;ia;i+) printf(%d.%sn%sn%sn%sn%sn,(i+1),questionasi.timu,questionasi.a,questionasi.b,

27、questionasi.c,questionasi.d); printf(請作答:);getchar(); scanf(%c,&ansi);getchar();printf(答題結(jié)束。開始判卷?(y/是,n/否); scanf(%c,&c); getchar();reada(); if(c=y)for(i=0,j=0,n=0;ia;i+) printf(%c,ansi);printf(%c,answerasi.a); if(ansi=answerasi.a) j+; else bbn=i+1; n+; printf(您共答對%d道題!n,j);printf(正確率為:%fn,(float)j/

28、(float)a); printf(錯誤題目為:); for(i=0;in;i+)printf(%d、,bbi);else if(c=n)student(); elsemenu_select();printf(n是否繼續(xù)?(y/是,n/否);scanf(%c,&d);getchar();if(d=y) student();elseif(d=n)menu_select();int menu_select() char a;system(cls);system(color 1f);printf(t*單項選擇題考試標(biāo)準(zhǔn)化系統(tǒng)*n); printf(ttt 請選擇您需要的系統(tǒng):n); printf(t:教師系統(tǒng)(可以進(jìn)行試題庫維護(hù)。對單選題及其答案進(jìn)行增加、刪除、修改和存儲等操作,最終用文件保存試題庫。)n); printf(s:學(xué)生系統(tǒng)(可以進(jìn)行試題抽取及答題并進(jìn)行自動判卷和評分。)n);printf(q:退出n); printf(您的選擇(t/s/q?):); doa=getchar();while(a!=t&a!=s&a!=q);printf(t*單項選擇題考試標(biāo)準(zhǔn)化系統(tǒng)*n);switch(a) c

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論