版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫設(shè)計(jì)程序中所涉及的各表的字段含義解釋如下:?jiǎn)芜x題表(danxuan)、多選題表(mxuan)、填空題表(tiankong)的結(jié)構(gòu)相似。含字段有:number為題號(hào),content為試題內(nèi)容,diff為難度,knowledge為所屬知識(shí)點(diǎn),answer為答案。只是填空題的答案字段長(zhǎng)度更大些??荚嚨怯洷恚╬aperlog)含字段有:username為用戶名,paper為試卷,useranswer為用戶解答。其中,后面兩個(gè)字段為text類型??荚噮?shù)配置表(configure)含字段有:knowledges為考核知識(shí)點(diǎn)的集合,sxamount為單選題的數(shù)量,sxscore為單選題的小題分?jǐn)?shù),……。其中,knowledges為一個(gè)文本串,列出所有考核知識(shí)點(diǎn),每個(gè)知識(shí)點(diǎn)用單引號(hào)括住,知識(shí)點(diǎn)之間用逗號(hào)分隔。18.1.1組卷相關(guān)數(shù)據(jù)對(duì)象的封裝設(shè)計(jì)(1)引入Question類記錄下某類題型的抽題信息包括題型編碼、每小題分值、以及抽到的試題編號(hào)構(gòu)成的數(shù)組。publicclassQuestion{ intbh[];//各小題編號(hào)
intscore;//每小題分?jǐn)?shù)
inttype;//題型,值為1表示單選,為2表示多選}(2)引入ExamPaper類記錄整個(gè)抽取的試卷publicclassExamPaper{List<Question>allst=newArrayList<Question>();//存放各類大題的抽題信息}18.1.2組卷業(yè)務(wù)邏輯程序(1)按組卷配置要求組卷publicstaticExamPapergenPaper(JdbcTemplatejdbcTemplate){ ExamPaperpaper=newExamPaper(); Stringsql="selectknowledgesfromconfigure";//查考核知識(shí)范圍
Stringknowledges=jdbcTemplate.queryForObject(sql,String.class); sql="selectsxamountfromconfigure";//查配置得到單選數(shù)量
intamount=jdbcTemplate.queryForInt(sql); if(amount>0){ sql="selectsxscorefromconfigure";//查配置得到每小題分?jǐn)?shù)
intscore=jdbcTemplate.queryForInt(sql); Questionq=newQuestion(); q.type=1;//單選題型
q.score=score; q.bh=pickst(jdbcTemplate,"danxuan",amount,knowledges);//調(diào)抽題處理
paper.allst.add(q);//將單選題的組卷選題加入試卷中
}
……//其他類試題的選題處理與上面類似
returnpaper;}(2)某類題型的抽題算法privatestaticint[]pickst(JdbcTemplatejdbcTemplate,Stringtable,intcount,Stringknowledges){ArrayList<Integer>have=newArrayList<Integer>();//存放選好的題的編號(hào)sql="selectcount(*)from"+table+"whereknowledgein("+knowledges+")";intrealAmout=jdbcTemplate.queryForInt(sql);//可供抽取試題總數(shù)if(realAmout<count){ count=realAmout;//不夠數(shù)量,按實(shí)際數(shù)量抽題}intpick=0;//統(tǒng)計(jì)選題數(shù)量sql="selectnumberfrom"+table+"whereknowledgein("+knowledges+")";List<Integer>result=jdbcTemplate.queryForList(sql,Integer.class);while(pick<count){//選所取的范圍內(nèi)選count道試題 intnum=(int)(Math.random()*realAmout);//隨機(jī)叫號(hào) Integern=result.get(num);//根據(jù)隨機(jī)數(shù)得到相應(yīng)記錄的試題編號(hào) if(!(have.contains(n))){//判該題是否已選過 have.add(n);//未選過,則選中該題 pick=pick+1; }}。。。。。18.1.3組卷MVC控制器(1)試卷內(nèi)容顯示處理封裝
DisplayPaper存儲(chǔ)某大類試題的顯示所需信息,包括大類名稱、每小題分值、題型,每小題內(nèi)容。其中,題型用于生成解答界面的判定處理,各類試題的解答控件不同。publicclassDisplayPaper{ List<String>content=newArrayList<String>();//各小題的試題內(nèi)容
Stringname;//該類試題名稱
inttype;//試題類型
intscore;//小題分值}(2)組卷及顯示處理控制器@RequestMapping(value="/disppaper",method=RequestMethod.GET) publicStringdisplay(Modelmodel,HttpServletRequestrequest){ ExamPaperpaper=ExamPaper.gen(jdbcTemplate);//調(diào)組卷算法組卷
intlen=paper.allst.size();//求試題大類數(shù)量
DisplayPaper[]disp=newDisplayPaper[len];//存放顯示的試卷內(nèi)容
for(intk=0;k<len;k++){ Questionq=paper.allst.get(k);//第k個(gè)題型
disp[k]=newDisplayPaper(); disp[k].type=q.type; disp[k].name=getTxName(q.type);//獲取題型名稱
disp[k].score=q.score; for(inti=0;i<q.bh.length;i++)//獲取此類試題的各題內(nèi)容
disp[k].content.add(getContent(q.bh[i],q.type)); }Gsongson=newGson(); Stringx1=""; try{x1=URLEncoder.encode(gson.toJson(paper),"utf-8"); }catch(UnsupportedEncodingExceptione){ } model.addAttribute("paper",x1);//傳遞試卷的Json串用于后續(xù)判分處理等
model.addAttribute("disppaper",disp); return"display"; }privateStringgetTxName(inttype){//根據(jù)題型編碼得到題型名稱
switch(type){ case1:return"單選題"; case2:return"多選題"; case3:return"填空題"; } returnnull;}privateStringgetContent(intbh,inttype){//根據(jù)題型編碼和題型查試題內(nèi)容
Stringsql=null; switch(type){ case1://單選
sql="selectcontentfromdanxuanwherenumber="+bh;break; case2://多選
sql="selectcontentfrommxuanwherenumber="+bh;break; case3://填空
sql="selectcontentfromtiankongwherenumber="+bh;break; } return(String)jdbcTemplate.queryForObject(sql,String.class);}18.1.4試卷顯示視圖<%@pagecontentType="text/html;charset=UTF-8"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><%@tagliburi="/jsp/jstl/functions"prefix="fn"%><html><body><c:setvalue="一二三四五六"var="s"/><formaction="givemark/${paper}"method=post><c:setvalue="1"var="k"/><c:forEachitems="${disppaper}"var="st"><fontsize=4face="黑體"color=red>${fn:substring(s,k-1,k)}.${}</font><fontsize=3face="宋體"color=green>(每小題${st.score}分)</font><br><c:setvalue="1"var="x"/><c:forEachitems="${st.content}"var="content"><tablewidth=98%align=centerstyle="word-break:break-all"><tr><tdalign=leftvalign=topwidth=20><b><fontcolor=blue>${x}.</font></b></td><td><pre><font>${content}</font></pre></td></tr></table><tablewidth=50%align=center><tr><c:iftest="${st.type<=2}"><c:forTokensitems="A,B,C,D,E"delims=","var="item"><tdalign=right>${item} </td><tdalign=left><c:choose><c:whentest="${st.type==1}"><inputtype=radiosize="30"name="data${k}-${x}"value=${item}></c:when><c:whentest="${st.type==2}"><inputtype=checkboxsize="30"name="data${k}-${x}"value=${item}></c:when></c:choose></td></c:forTokens></c:if><c:iftest="${st.type==3}"><TextArearows="6"cols="40"name="data${k}-${x}"></TextArea></c:if></table><c:setvar="x"value="${x+1}"/></c:forEach><c:setvar="k"value="${k+1}"/><br></c:forEach><palign="center"><inputtype="submit"name="button"value="交卷"></form></body></html>18.2閱卷處理18.2.1閱卷邏輯的方法設(shè)計(jì)
publicstaticint[]givescore(inttype, Stringanswer[],Stringuseranswer[],
intscore){//對(duì)某個(gè)題型的解答進(jìn)行判分
intsum[]={0,0}; switch(type){ case1://單選
for(intk=0;k<answer.length;k++){ if(answer[k].equals(useranswer[k])) sum[0]+=score;//累計(jì)得分
sum[1]+=score;//累計(jì)總分
} break;
……//其他類試題的閱卷處理略
} returnsum;//返回結(jié)果含大題得分和大題總分
}18.2.2閱卷控制器@RequestMapping(value="/givemark/{paper}",method=RequestMethod.POST)publicStringmarking(@PathVariable("paper")Stringpaper,Modelmodel,
HttpServletRequestrequest){ inttotal=0;//用來統(tǒng)計(jì)總分值
intgetscore=0;//用來累計(jì)用戶得分
ArrayList<String[]>allanswer=newArrayList<String[]>();//整卷的用戶解答
try{ paper=URLDecoder.decode(paper,"utf-8");//進(jìn)行URL解碼
}catch(UnsupportedEncodingExceptione){ }Gsongson=newGson(); //以下解開JSON串恢復(fù)試卷
ExamPaperp=(ExamPaper)gson.fromJson(paper,ExamPaper.class); for(intk=0;k<p.allst.size();k++){//循環(huán)處理各類題型
Questionme=p.allst.get(k);//獲取第k個(gè)大題
Stringans[]=newString[me.bh.length];//定義記錄標(biāo)準(zhǔn)答案的數(shù)組Stringusera[]=newString[me.bh.length];//定義記錄學(xué)生解答的數(shù)組
for(inti=0;i<ans.length;i++){ ans[i]=getAnswer(me.bh[i],me.type);//獲取標(biāo)準(zhǔn)答案
usera[i]=request.getParameter("data"+(k+1)+"-"+(i+1));//讀用戶解答
} intscore[]=ExamPaper.givescore(me.type,ans,usera,me.score);//評(píng)分
allanswer.add(usera);//將本大題的用戶解答加入列表中
total+=score[1];//計(jì)算整卷總分值
getscore+=score[0];//計(jì)算整卷總得分
}intlastscore=(int)(getscore*100.0/total);//將用戶得分轉(zhuǎn)百分制
model.addAttribute("score",lastscore);Stringuser=request.getRemoteUser();//取得用戶標(biāo)識(shí)
//登記用戶解答,試卷為paper參數(shù),解答為allanswer列表
Stringsql="selectcount(*)frompaperlogwhereusername='"+user+"'"; intx=jdbcTemplate.queryForInt(sql); if(x>0)//只記錄最新測(cè)試試卷,如以前有測(cè)試記錄則更新、否則插入
sql="updatepaperlogsetpaper='"+paper+"',useranswer='"+
gson.toJson(allanswer)+"'whereusername='"+user+"'"; else sql="insertintopaperlog(username,paper,useranswer)values('"+
user+"','"+paper+"','"+gson.toJson(allanswer)+"')";
jdbcTemplate.update(sql);
return"score";//用score.jsp顯示得分}18.2.3學(xué)生得分顯示視圖<%@pagecontentType="text/html;charset=UTF-8"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><scripttype="text/javascript">alert("你的得分:${score}");window.location="/";//返回系統(tǒng)首頁</script>18.3查閱試卷18.3.1顯示內(nèi)容的封裝設(shè)計(jì)publicclassPaperCompare{ Stringname;//該大題的題型名稱
List<Map<String,Object>>content=newList<Map<String,Object>>();}18.3.2查卷訪問控制器設(shè)計(jì)@RequestMapping(value="/searchpaper",method=RequestMethod.GET) publicStringsearchpaper(Modelmodel,HttpServletRequestrequest){ Stringuser=request.getRemoteUser(); Stringsql="select*frompaperlogwhereusername='"+user+"'"; List<Map<String,Object>>x=jdbcTemplate.queryForList(sql); List<PaperCompare>me=newArrayList<PaperCompare>();//所有大題的數(shù)據(jù)
Gsonjson=newGson(); List<String[]>x2;//學(xué)生解答
if(x.size()>0){ ExamPaperx1=(ExamPaper)(json.fromJson((String)(x.get(0).get("paper")),
ExamPaper.class)); x2=(ArrayList<String[]>)(json.fromJson((String)(x.get(0).get("useranswer")),
newTypeToken<ArrayList<String[]>>(){}.getType()));for(intk=0;k<x1.allst.size();k++){//處理各大類題型
Questionq=x1.allst.get(k);//第k大類題型
PaperComparepac=newPaperCompare(); =getTxName(q.type); for(inti=0;i<q.bh.length;i++){//對(duì)這類試題的每道題
Map<String,Object>onest=newHashMap<String,Object>(); onest.put("content",getContent(q.bh[i],q.type));//試題內(nèi)容
onest.put("answer",getAnswer(q.bh[i],q.type));//標(biāo)準(zhǔn)答案
onest.put("solution",x2.get(k)[i]);//用戶解答
pac.content.add(onest);//將Map對(duì)象加入列表中
} me.add(pac); } } model.addAttribute("paper",me); return"searchpaper"; } 18.3.3查卷顯示視圖<%@pagecontentType="text/html;charset=UTF-8"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><%@tagliburi="/jsp/jstl/functions"prefix="fn"%><html><body><c:setvalue="一二三四五六"var="s"/><c:setvalue="
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理技術(shù)鋪床
- 能源審計(jì)與節(jié)能技術(shù)實(shí)施手冊(cè)
- 輸變電工程施工安全管理及風(fēng)險(xiǎn)控制方案編制綱要模板
- 2026年劇本殺運(yùn)營公司快遞收發(fā)管理制度
- 2025年電力設(shè)施巡檢與故障排除手冊(cè)
- 互感器校驗(yàn)培訓(xùn)課件
- 全期護(hù)理中的跨學(xué)科合作
- 護(hù)理專業(yè)春季護(hù)理信息技術(shù)應(yīng)用
- 2025年智慧農(nóng)業(yè)五年物聯(lián)網(wǎng)應(yīng)用報(bào)告
- 云南英文介紹
- 創(chuàng)意美術(shù)生蠔課件
- 2025年上海市事業(yè)單位教師招聘體育學(xué)科專業(yè)知識(shí)考試
- 小學(xué)六年級(jí)英語重點(diǎn)語法全總結(jié)
- 黑龍江省安達(dá)市職業(yè)能力傾向測(cè)驗(yàn)事業(yè)單位考試綜合管理類A類試題帶答案
- 酒店清欠協(xié)議書模板模板
- 2025沈陽市消防救援支隊(duì)政府專職消防員招聘160人考試備考試題及答案解析
- 鐵路鐵鞋管理辦法
- 安防監(jiān)控系統(tǒng)維護(hù)與管理方案
- 2025屆重慶八中學(xué)七上數(shù)學(xué)期末復(fù)習(xí)檢測(cè)模擬試題含解析
- 2025年廣東省中考語文試卷真題(含答案解析)
- 燙熨治療法講課件
評(píng)論
0/150
提交評(píng)論