《C++課程設(shè)計(jì) (6)單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《C++課程設(shè)計(jì) (6)單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)(15頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
《單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)》
程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告
專 業(yè): 電子信息工程
班 級(jí): 2007級(jí) 1 班
學(xué) 號(hào): 2007082027
姓 名: 陳 皓
指導(dǎo)教師: 常 耀 輝
二OO八 年 六月三十日
目 錄
1.課程設(shè)計(jì)目的 1
2.課程設(shè)計(jì)題目描述和要求 1
2.1課程題目 1
2.2課程要求 1
3.課程設(shè)計(jì)報(bào)告內(nèi)容 1
3.
2、1算法描述 1
3.2 源程序 2
4.流程圖
5課程設(shè)計(jì)總結(jié): 6
6書目 7
1 課程設(shè)計(jì)目的
練習(xí)自己的動(dòng)手能力,在學(xué)習(xí)理論的同時(shí)增強(qiáng)自己的編程能力,使理論與實(shí)踐相結(jié)合,在學(xué)習(xí)書本的同時(shí)擴(kuò)展自己的課外知識(shí).
2 課程設(shè)計(jì)題目描述和要求
2.1課程題目
單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)
2.2課程要求
(一)功能要求:
(1)用文件保存試題庫(kù)。(每個(gè)試題包括題干、4個(gè)備選答案、標(biāo)準(zhǔn)答案)
(2)試題錄入:可隨時(shí)增加試題到試題庫(kù)中
(3)試題抽?。好看螐脑囶}庫(kù)中可以隨機(jī)抽出N道題(N由鍵盤輸入)
(4)答題
3、:用戶可實(shí)現(xiàn)輸入自己的答案
(5)自動(dòng)判卷:系統(tǒng)可根據(jù)用戶答案與標(biāo)準(zhǔn)答案的對(duì)比實(shí)現(xiàn)判卷并給出成績(jī)。
(二)其它要求:
(1) 只能使用C/C++語(yǔ)言,源程序要有適當(dāng)?shù)淖⑨?,使程序容易閱讀
(2) 至少采用文本菜單界面(如果能采用圖形菜單界面更好)
(3) 學(xué)生可自動(dòng)增加新功能模塊(視情況可另外加分)
(4)寫出課程設(shè)計(jì)報(bào)告,具體要求見相關(guān)說明文檔.
3 課程設(shè)計(jì)報(bào)告內(nèi)容
3.1算法描述
定義題目數(shù)組,選向數(shù)組,輸入題目的及選向并給定正確答案。
輸入所要答的題目數(shù),然后進(jìn)行答題。輸入的答案與標(biāo)準(zhǔn)答案進(jìn)行比較,如果一致,則正確,否則錯(cuò)誤。最后根據(jù)題目數(shù)及答對(duì)題目數(shù)進(jìn)行輸出
4、得分。
3.2 源程序
#include
#include
#include "dos.h"
using namespace std;
struct question {
char ask[200];/*選擇題題目*/
char answer[4][80];/*選擇題選項(xiàng)*/
int right;/*正確答案*/
struct question *next;
};
//函數(shù)聲明
int MenuChoice(void); //選擇菜單
struct question *charu_timu(st
5、ruct question *fst, const struct question *ad); //向列表中插入試題函數(shù)
struct question *da_an_weizhi(struct question *seek, long len, long max); //確定一個(gè)讀取答案的位置的函數(shù)
void GetQuestion(struct question *src); //獲取問題,選項(xiàng),以及正確答案函數(shù)
void bao_cun(const struct question *ed, FILE *saf); //將列表中的試題保存在文件中的函數(shù)
struct questio
6、n *LoadFile(struct question *td, FILE *laf); //從文件中讀取題目,將題目添加到列表中的函數(shù)
int GetAnswer(void); //輸入選擇題的答案
void huida_Question(const struct question *que, int n); //回答問題函數(shù)
int main()
{
struct question *start = NULL, temp;
long choice, line = 0, c;
FILE *fp = fope
7、n("chenhao.dat", "a+");
while ((choice = MenuChoice()) != 3)
if (choice == 1)
{
GetQuestion(&temp);
start = charu_timu(start, &temp);
++line;/*統(tǒng)計(jì)列表的長(zhǎng)度*/
system("cls");
}
else if (choice == 2)
{
c =8;
while (c > 6 || c > line) {
cout<<"請(qǐng)輸入要回答的問
8、題數(shù)量: ";
cin>>c;
}
huida_Question(start, line);
}
return 0;
}
/*da_an_weizhi函數(shù)確定一個(gè)讀取答案的位置,len代表要讀取的答案數(shù),max代表列表的長(zhǎng)度*/
struct question *da_an_weizhi(struct question *seek, long len, long max)
{
int i;
while (i--)
seek = seek->ne
9、xt;//找到指定的位置
return seek;
}
//向列表中插入試題
struct question *charu_timu(struct question *fst, const struct question *ad)
{
struct question *newPtr = (struct question *)malloc(sizeof(struct question));
if (newPtr == NULL)
10、 exit(0);
*newPtr = *ad;
newPtr->next = fst;
return newPtr;
}
/*獲取問題,選項(xiàng),以及正確答案*/
void GetQuestion(struct question *src)
{
int i = 0;
cout<<"請(qǐng)輸入選擇題題目:"<>src->ask;
while (i < 4) {
cout<<"請(qǐng)輸入選項(xiàng)"<
11、(i + A)<<"的答案:"<>src->answer[i++];
}
src->right = GetAnswer();
}
/*從文件中讀取題目,將題目添加到列表中*/
struct question *LoadFile(struct question *td, FILE *laf)
{
struct question temp;
while (fread(&temp, 1, sizeof(struct questi
12、on), laf))
td = charu_timu(td, &temp);
return td;
}
/*將列表中的試題保存在文件中*/
void bao_cun(const struct question *ed, FILE *saf)
{
fclose(saf);
if ((saf = fopen("chenhao.dat", "w")) == NULL)//以寫的方式重新打開文件
return
13、;
while (ed) {
fwrite(ed, 1, sizeof(struct question), saf);
ed = ed->next;
}
}
//得到選擇題的答案(不保證是正確的答案)
int GetAnswer(void)
{
char c=0 ;//必須進(jìn)行初始化,避免出現(xiàn)偶然性的錯(cuò)誤
fflush(stdin);
while (c < A || c > D) //確保輸入的答案是A, B,
14、C, D中的一個(gè)
{
cout<<"請(qǐng)輸入正確的答案: "<> c;
}
return c;
}
//回答問題,并統(tǒng)計(jì)答對(duì)題目數(shù),顯示得分
void huida_Question(const struct question *que, int n)
{
int i = 0, t = n;
char result[1001], *p = result;
for (i = 0; n--; que = que
15、->next) {
cout<ask<answer[0]<answer[1]<answer[2]<answer[3]<right) == (*(p + 1) = GetAnswer()))
++i;
}
*p = \0;
cout<<"您回答了"<
16、 t * 100.00<
17、選擇題 *"<>value;
return value;
}
4流程圖
主菜單
3. 退出
2回答選擇題
1添加選擇題
18、
1. 輸入題目
2. 輸入4個(gè)備選答案
3. 輸入標(biāo)準(zhǔn)答案
輸入所要選擇的答案
系統(tǒng)自動(dòng)儲(chǔ)存所輸入的題目
系統(tǒng)自動(dòng)判卷后輸出成績(jī)
返回主菜單
5程設(shè)計(jì)總結(jié):
經(jīng)過編寫程序,檢驗(yàn)了我們的編程的水平,從這次編程中,我發(fā)現(xiàn)我才學(xué)到了一點(diǎn)點(diǎn)的知識(shí),有好多的東西都不夠熟練,還需要好好的努力學(xué)習(xí),在編寫這個(gè)程序時(shí),出現(xiàn)了好多的問題,經(jīng)過別人的幫助和自己的認(rèn)真的調(diào)試才完成,這個(gè)程序還有好多的不足,還不夠美觀。有的地方還有漏洞。這個(gè)程序我使用的是鏈表,使我從中掌握了鏈表的使用方法,積累了經(jīng)驗(yàn),這些經(jīng)驗(yàn)在以后的學(xué)習(xí)生活中會(huì)有很大的幫助的。并且,還熟悉了結(jié)構(gòu)體的用法以及發(fā)現(xiàn)了部分用結(jié)構(gòu)體編寫程序時(shí)會(huì)出現(xiàn)的問題。對(duì)C++也有了更深一步的了解,為以后學(xué)其他計(jì)算機(jī)語(yǔ)言打下了好的基礎(chǔ)。與此同時(shí),還發(fā)現(xiàn)了自己編程時(shí)的許多不足,如不夠嚴(yán)謹(jǐn)、不仔細(xì)等問題。我將在以后的學(xué)習(xí)中逐步改善,爭(zhēng)取四年大學(xué)能夠把所學(xué)的計(jì)算機(jī)語(yǔ)言融會(huì)貫通,學(xué)精學(xué)好,請(qǐng)老師和同學(xué)多多指正。
6 參考書目
[1] 譚浩強(qiáng),《C++程序設(shè)計(jì)》,北京,清華大學(xué)出版社.
14