




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目設(shè)計(jì)題目及要求
題目:加減法小測(cè)驗(yàn)。面向小學(xué)1~2年級(jí)學(xué)生,隨機(jī)選擇兩個(gè)整數(shù)和加減法形成算式要求學(xué)生解答。
功能要求:電腦隨機(jī)出10道題,每題10分,程序結(jié)束時(shí)顯示學(xué)生得分;確保算式?jīng)]有超出1~2年級(jí)的水平,只允許進(jìn)行100以內(nèi)的加減法,不允許兩數(shù)之和或之差超出0~100的范圍,負(fù)數(shù)更是不允許的;每道題學(xué)生有三次機(jī)會(huì)輸入答案,當(dāng)學(xué)生輸入錯(cuò)誤答案時(shí),提醒學(xué)生重新輸入,如果三次機(jī)會(huì)結(jié)束則輸出正確答案;對(duì)于每道題,學(xué)生第一次輸入正確答案得10分,第二次輸入正確答案得7分,第三次輸入正確答案得5分,否則不得分;總成績(jī)90以上顯示“SMART”,80-90顯示“GOOD”,70-80顯示“OK”,60-70顯示“PASS”,60以下“TRYAGAIN”
變化擴(kuò)展:
1)允許用戶初始選擇題目類(lèi)型:加法,減法,還是加減法都有。
2)評(píng)判完成后,顯示答錯(cuò)的題,并給出正確答案。
3)若是一組題,可以重復(fù)使用,怎樣處理?
4)界面與應(yīng)用邏輯分離
5)可以設(shè)置參數(shù)
項(xiàng)目的面向?qū)ο笤O(shè)計(jì)
2.1需求分析
1)分析系統(tǒng)的功能需求:
出題:隨機(jī)出題。每題要求:確保算式?jīng)]有超出1~2年級(jí)的水平,只允許進(jìn)行100以內(nèi)的加減法,不允許兩數(shù)之和或之差超出0~100的范圍,負(fù)數(shù)更是不允許的。
答題:每道題學(xué)生有三次機(jī)會(huì)輸入答案,每輸入一次答案,進(jìn)行評(píng)價(jià),若正確顯示正確,若錯(cuò)誤,顯示錯(cuò)誤,并提醒學(xué)生重新輸入答案。若是第三次錯(cuò)誤,則不再給機(jī)會(huì)輸入答案。
答題評(píng)分:每道題,學(xué)生一次做對(duì)得10分,二次做對(duì)得7分,三次做對(duì)得5分,其余不得分;
總評(píng)分:每個(gè)測(cè)試出10題,10題做完過(guò)后給出總評(píng)分??偝煽?jī)90以上顯示“SMART”,80-90顯示“GOOD”,70-80顯示“OK”,60-70顯示“PASS”,60以下“TRYAGAIN”
2)系統(tǒng)流程:
先出完10題然后按順序做題。
首先顯示一個(gè)題目用戶給出答案進(jìn)行評(píng)判。若做題結(jié)束進(jìn)入下一題若沒(méi)有結(jié)束用戶繼續(xù)給出答案進(jìn)行評(píng)判。
做完10題計(jì)算總評(píng)分并分等級(jí)給出評(píng)價(jià)。
流程如圖1所示。
圖1系統(tǒng)流程圖
2.2總體設(shè)計(jì)
方案一:
1)識(shí)別類(lèi)
問(wèn)題中出現(xiàn)了題目,解答,測(cè)試等事物。將題目和解答的數(shù)據(jù)及功能合并,作為題目類(lèi)將測(cè)試作為一個(gè)類(lèi)。
題目類(lèi):表示一個(gè)題目,及相關(guān)的解答狀況。
測(cè)試類(lèi):對(duì)一次測(cè)試做一個(gè)包裝,其中包括10個(gè)題目,以及測(cè)試的總分評(píng)價(jià)。
測(cè)試類(lèi)和題目類(lèi)之間是個(gè)1對(duì)多的包含關(guān)系。
2)詳細(xì)設(shè)計(jì)
Question類(lèi)設(shè)計(jì)數(shù)據(jù)成員:兩個(gè)操作數(shù),運(yùn)算符,運(yùn)算結(jié)果;本題得分,答題次數(shù),是否答對(duì)。功能:負(fù)責(zé)出一道題并讓用戶做題,并評(píng)價(jià)。
接口:
生成題目。
答題(顯示題目,支持做題,支持得分)。
返回成績(jī)。
私有成員函數(shù)
生成題目數(shù)據(jù)。(私有)
判斷題目是否符合要求。(私有)
Test類(lèi)設(shè)計(jì)
數(shù)據(jù)成員:多個(gè)Question類(lèi)對(duì)象(用數(shù)組組織數(shù)據(jù),用vector組織數(shù)據(jù)),題目數(shù)目,總分,等級(jí),評(píng)價(jià)。
功能:創(chuàng)建測(cè)試題目,啟動(dòng)測(cè)試,總評(píng)價(jià)。
接口為:
創(chuàng)建題目(或放在構(gòu)造函數(shù)中)
啟動(dòng)測(cè)試
返回總分
返回評(píng)判結(jié)果(獲得評(píng)判)
方案一:實(shí)現(xiàn)
#include〈iostream〉
#include〈cstdlib〉
#include<ctime〉
#include〈conio.h〉usingnamespacestd;
chartype[2]={,+,,,_,};
intgrade[3]={10,7,5};
char*evaluation[5]={"SMART","GOOD","OK","PASS","TRYAGAIN"};constintMAX_TIMES=3;
intgetACount(inta,intb)
{
returnrand()%(b_a)+a;
}
classQuestion
{
private:
inta;
intb;
charc;
intresult;
//
intscore;
inttimes;
intstate;
intresults[MAX_TIMES];
voidAQuestion()
{
a=getACount(0,100);
b=getACount(0,100);
c=type[getACount(0,2)];
if(c=='+')
result=a+b;
else
result=a—b;
}
booltestAQuestion()
{
if((result〈0)||(result〉100))
returnfalse;
else
returntrue;
}
booldoOnceTest()
{
cout<〈a〈〈c〈〈b〈〈"=";
cin〉〉results[times];
if(results[times]==result)
state—1;
else
state—0;
times++;
returnstate;
}
public:
Question():a(0),b(0),c('+'),result(0),times(0),state(0),score(0)
{
}
voidcreateQuestion()
{
while(true)
{
AQuestion();
if(testAQuestion())
break;
}
}
voiddoATest()
{
for(inti=O;i〈MAX_TIMES;i++)
{
if(doOnceTest())
{
score=grade[timesT];
break;
}
else
{
if(i<2)
cout〈〈"答錯(cuò)了,請(qǐng)繼續(xù)回答:";
else
cout〈〈"答錯(cuò)了,你沒(méi)有機(jī)會(huì)了〃〈〈endl;
}
}
}
intgetScore()
{
returnscore;
}
};
classTest
{
private:
Question*q;
intcount;
intscore;
intlevel()
{
intlevel=4;
switch(score/10)
{
{
case10:
case9:
level=0;
break;
case8:
level=1;
break;
case7:
level=2;
break;
case6:
level=3;
break;
case5:
level=4;
}
returnlevel;
}
public:
Test(intc=10):count(c),score(0)
{
q=newQuestion[c];
}
intgetScore()
{
returnscore;
}
char*getEvaluation()
{
returnevaluation[level()];
}
voidrunTest()
{
for(inti=0;i〈count;i++)
{
q[i].createQuestion();q[i].doATest();score=score+q[i].getScore();
}
}
};
intmain()
srand((unsigned)time(NULL));
TestaTest;
aTest.runTest();
cout〈〈"你的成績(jī)?yōu)?〈〈aTest.getScore()〈〈","〈〈aTest.getEvaluation()〈〈endl;getch();
}
方案二:
1)識(shí)別類(lèi)將題目獨(dú)立出來(lái)。從概念上來(lái)說(shuō)題目是獨(dú)立于解答存在的,將其獨(dú)立出來(lái)作為題目類(lèi)
Question。將一個(gè)題目的測(cè)試作為一個(gè)獨(dú)立的類(lèi)Answer,記錄做題的相關(guān)數(shù)據(jù),支持相關(guān)功能。將一個(gè)學(xué)生的完整測(cè)試作為一個(gè)類(lèi)Test,包裝整個(gè)測(cè)試,以對(duì)外界提供更高層的抽象。類(lèi)結(jié)構(gòu)如圖所示。
Answer類(lèi)與Question類(lèi)是單向關(guān)聯(lián)關(guān)系(使用關(guān)系)。Test類(lèi)與Question類(lèi)是一對(duì)多的關(guān)聯(lián)關(guān)系,與Answer類(lèi)是一對(duì)多關(guān)聯(lián)關(guān)系。
2)詳細(xì)設(shè)計(jì)設(shè)計(jì)時(shí)考慮1)可以設(shè)置測(cè)試題目類(lèi)型(加法、減法、加減混合),可以設(shè)置其它參數(shù)
(總題目數(shù),每個(gè)題目的最大答題次數(shù),總分,每個(gè)題目的每次解答的分?jǐn)?shù));2)界面與應(yīng)用分離。
Question類(lèi):
數(shù)據(jù)成員:兩個(gè)操作數(shù),運(yùn)算符,運(yùn)算結(jié)果。定義一個(gè)靜態(tài)成員type表示測(cè)試的類(lèi)型,來(lái)決定出題的算法。
功能:出題。
接口為:
出題
獲得結(jié)果:為Answer提供服務(wù),獲得結(jié)果。
獲得題目(字符串):為了做到與界面分離,只負(fù)責(zé)業(yè)務(wù)邏輯,不負(fù)責(zé)輸入輸出,因此需要返回題目。
Answer類(lèi):數(shù)據(jù)成員:本題得分,答題次數(shù),是否答對(duì),各次的答題結(jié)果。指向當(dāng)前題目的指針。定義靜態(tài)數(shù)據(jù)成員作為答題參數(shù):最大答題次數(shù),每次答題的分?jǐn)?shù)。
功能:提供答題判斷,并給分。
接口為:
setQuestion:關(guān)聯(lián)題目。
setResult:得到學(xué)生的答案并評(píng)價(jià):通過(guò)與question的關(guān)聯(lián)獲得正確結(jié)果,并判斷是否作對(duì)。設(shè)置相關(guān)參數(shù)(答題次數(shù),答題狀態(tài),得分)
返回本次答題評(píng)價(jià)
返回獲得分?jǐn)?shù)
Test類(lèi)
數(shù)據(jù)成員:本次測(cè)試的一組Question(用數(shù)組或vector組織),本次測(cè)試的解答一組Answer(用數(shù)組或vector組織)。為類(lèi)描述測(cè)試的進(jìn)行狀態(tài),增加兩個(gè)數(shù)據(jù)成員:當(dāng)前題目,是否進(jìn)入下個(gè)題目。以及測(cè)試的所有相關(guān)參數(shù)。
功能:對(duì)全部測(cè)試提供對(duì)外包裝,描述測(cè)試狀態(tài)。
接口為:
設(shè)置參數(shù)
出題
返回題目信息
學(xué)生給出一個(gè)結(jié)果
是否還有題
方案二:實(shí)現(xiàn)
#include"stdafx.h"
#include〈iostream〉
#include<strstream〉
#include<cstdlib〉
#include<ctime〉
#include<string〉
#include<vector〉
#include〈conio.h〉
usingnamespacestd;
chartype[2]={,+,,,_,};
intgrade[3]={10,7,5};
char*evaluation[5]={"SMART","GOOD","OK","PASS","TRYAGAIN"};
intgetANumber(inta,intb)
{
returnrand()%(b_a)+a;
}
classQuestion
{
private:
inta;
intb;
charc;
intresult;
staticintstyle;
public:
staticvoidsetParam(ints)
{
style=s;
}
Question():a(0),b(0),c(type[O]),result(0)
{
}
~Question(){}
voidcreate()
{
while(true)
{
createQuestion();
if(testQuestion())break;
}
}
intgetResult()
{
returnresult;
}
stringgetQuestion()
{
charstr[100];
sprintf_s(str,"%d%c%d=",a,c,b);returnstring(str);
}
private:
voidcreateQuestion()
{
a=getANumber(0,100);
b=getANumber(0,100);
c=getType();
if(c=='+')
result=a+b;
elseresult=a—b;
}
chargetType()//返回題目的運(yùn)算符(根據(jù)要求的測(cè)試類(lèi)型,產(chǎn)生不同的運(yùn)算符){
switch(style)
{
case1:
return'+';
break;
case2:
return'-';
break;
case0:
returntype[getANumber(0,1)];break;
}
}
booltestQuestion()
{
if((result〈0)||(result〉100))
returnfalse;
else
returntrue;
}
};
intQuestion::style=0;
classAnswer
{
private:
inttimes;//做題次數(shù)
vector〈int〉result;
boolstate;//是否作對(duì)
intscore;//本題得分
Question*que;
staticintmaxTimes;//最大做題次數(shù)
staticint*grade;//不同次數(shù)得分
public:
staticvoidsetParam(intmT,int*g)
{
maxTimes=mT;
grade=g;
}
Answer():times(O),state(0),score(0),que(NULL)
{
result.reserve(IO);
}
~Answer(){}
voidsetQuestion(Question*q)
{
que=q;
}
boolsetResult(intr)//返回值表示本題答題是否結(jié)束
{
result.push_back();
if(r==que-〉getResult())
{
state=true;score=grade[times];
}
times++;
if((state==true)||(times==3))
returntrue;//本題結(jié)束
else
returnfalse;//本題還有機(jī)會(huì)
}
stringgetString()
{
strings1="答對(duì)了";
strings2=〃答錯(cuò)了,請(qǐng)繼續(xù)回答〃;
strings3="答錯(cuò)了,你沒(méi)有機(jī)會(huì)了";
if(state)
returns1;
if(times<3)
returns2;
else
returns3;
}
intgetScore()
{
returnscore;
}
};
intAnswer::maxTimes=O;int*Answer::grade=NULL;
classTest
{
private:
Question*q;
Answer*ans;
intcount;//本次測(cè)試的題目數(shù)
intstyle;//本次測(cè)試的題目類(lèi)型,0:混合,1:加,2減
intmaxA;//本次測(cè)試的每題答題次數(shù)
int*sDistribution;//不同次數(shù)的成績(jī)分配
inttotalScore;//最后得分
intcurrentQ;//當(dāng)前題
boolnextQ;//是否進(jìn)入下一題
public:
Test():q(NULL),ans(NULL),totalScore(0),currentQ(0),nextQ(false),count(0),maxA(0),style(0)
{
}
~Test()
{
delete]]q;
delete]]ans;
delete[]sDistribution;
}
voidsetParam(intc,intmA,intt,int*sd)//設(shè)置參數(shù)
{
count=c;
style=t;
maxA=mA;
sDistribution=newint[maxA];
for(inti=0;i〈maxA;i++)
sDistribution[i]=sd[i];
Question::setParam(style);
Answer::setParam(maxA,sDistribution);
if(q!=NULL)delete]]q;
if(ans!=NULL)
delete]]ans;
q=newQuestion[count];
ans=newAnswer[count];
for(inti=0;i〈count;i++)
{
}
ans[i].setQuestion(&q[i]);
}
voidsetTest()//出題
{
for(inti=0;i〈count;i++)
q[i].create();
}
inthasQuestion()//當(dāng)前測(cè)試,還有題嗎?
{
returncurrentQ〈countT;
}
stringgetCurrentQ()//返回當(dāng)前題目字符串
{
if(nextQ)
currentQ++;
returnq[currentQ].getQuestion();
}
booldoCurrentQ(intre)//當(dāng)前題目,設(shè)置一次結(jié)果,返回是否正確{
if(ans[currentQ].setResult(re))
{
nextQ=true;
returntrue;
}
else
returnfalse;
}
stringgetCurrentAS()
{
returnans[currentQ].getString();
}
voidcomputeScore()
{
for(inti=0;i〈count;i++)
totalScore
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)植保員應(yīng)具備的基本素養(yǎng)試題及答案
- 裁判員面臨的道德挑戰(zhàn)試題及答案
- 2024年籃球裁判員評(píng)估方法試題及答案
- 農(nóng)作物繁育員考試常見(jiàn)試題及答案
- 職業(yè)規(guī)劃 2024年體育經(jīng)紀(jì)人資格考試后的職業(yè)發(fā)展路徑探討試題及答案
- 足球裁判員溝通障礙根治試題及答案
- 2024年足球裁判員的職責(zé)解讀與試題與答案
- 工具與資源助力體育經(jīng)紀(jì)人職業(yè)生涯試題及答案
- 2023屆河北省邢臺(tái)市五校聯(lián)考高三上學(xué)期期中英語(yǔ)試題及答案
- 存放檔案協(xié)議書(shū)(2篇)
- 發(fā)熱病人中醫(yī)護(hù)理
- 捕鼠公司合同協(xié)議
- 工程審計(jì)面試題及答案
- 鋰電行業(yè)異物管控
- 2025年全民國(guó)家安全教育日(4.15)知識(shí)測(cè)試競(jìng)賽題庫(kù)(含答案)
- 2025春季學(xué)期國(guó)開(kāi)電大本科《人文英語(yǔ)3》一平臺(tái)在線形考綜合測(cè)試(形考任務(wù))試題及答案
- 提高四級(jí)手術(shù)術(shù)前多學(xué)科討論完成率實(shí)施方案
- 2024年共青團(tuán)團(tuán)??荚嚾雸F(tuán)考試題庫(kù)及答案
- 中國(guó)食物成分表2018年(標(biāo)準(zhǔn)版)第6版
- 刑事案件模擬法庭劇本
- 2023年《移動(dòng)式壓力容器充裝質(zhì)量管理手冊(cè)》
評(píng)論
0/150
提交評(píng)論