徐雪飛
摘要:伴隨科技進(jìn)步,高校教學(xué)改革也如火如荼地進(jìn)行著,傳統(tǒng)的C語言實(shí)驗(yàn)報(bào)告的填寫,已經(jīng)漸漸失去其原本作用,反之幫助學(xué)生更好地掌握C的語法知識(shí),提高編程能力成為高校C的教學(xué)重點(diǎn),在此,該文通過C語言編程學(xué)習(xí)系統(tǒng),完成學(xué)生的程序、實(shí)驗(yàn)報(bào)告、章節(jié)習(xí)題、綜合測試等的在線提交,一方面能復(fù)習(xí)鞏固上課知識(shí),另一方面,每次得分也可作為學(xué)生的平時(shí)成績,期末考試在該系統(tǒng)也可以完成。
關(guān)鍵詞:java;struts
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)19-0110-03
Abstract: With the progress of science and technology, the reform of teaching in Colleges and universities is carried out like a raging fire. The traditional C language experiment report has gradually lost its original function. On the other hand, it helps students to better master C grammar knowledge and improve programming ability to become the key point of the teaching of C in Colleges and universities. Here, I have programmed a learning system through the language of C. On the one hand, it can review and consolidate the class knowledge, and on the other hand, each score can also be used as a student's normal achievement, and the final examination can be completed in the system.
Key words: java; struts
1 背景
目前常見的考試系統(tǒng),往往只有選擇題模塊,而單純的選擇題,并不能很好的給予學(xué)生足夠的練習(xí),尤其是程序設(shè)計(jì)這門操作性,實(shí)踐性比較強(qiáng)的學(xué)科,需要補(bǔ)充實(shí)驗(yàn)報(bào)告,編程題,程序改錯(cuò)題等題型,來更好的考察學(xué)生的知識(shí)掌握與應(yīng)用情況。為此在這里通過運(yùn)用J2EE技術(shù),來對傳統(tǒng)的在線考試,做一次改進(jìn)。
2 系統(tǒng)功能
該系統(tǒng)主要包括學(xué)生端與教師端,學(xué)生端通過學(xué)生登錄界面進(jìn)入學(xué)生功能界面,從事完成教師布置的編程練習(xí)、上機(jī)練習(xí)(選擇題),填寫實(shí)驗(yàn)報(bào)告,查看成績等功能模塊。教師端主要為學(xué)生端提供實(shí)驗(yàn)報(bào)告、上機(jī)練習(xí)(選擇題)、編程題、程序填空題的發(fā)布收集與批改。具體功能模塊如圖1、2所示。
3 數(shù)據(jù)庫設(shè)計(jì)
整個(gè)系統(tǒng)包括如下一些表,score(學(xué)生得分表),student(學(xué)生表),taoTi(套題表),sybg(實(shí)驗(yàn)報(bào)告表),Question(題目表),teacher(教師表),course (課程章節(jié)表)等,表之間主外鍵關(guān)系如圖3:
分章上機(jī)練習(xí)模塊:題型限制為選擇題,;對于題目中有大括號(hào),復(fù)雜的數(shù)學(xué)公式等無法正常輸入數(shù)據(jù)庫的題目時(shí),可將整個(gè)題做成圖片處理,數(shù)據(jù)庫中僅存答案,id號(hào)作為題目的圖片名稱。
為實(shí)現(xiàn)考題的隨機(jī)性。SQL語句查詢?nèi)缦拢篠ELECT top 20 * FROM tb_questions WHERE taoTiID=3 AND type='單選題' and lessionID=1 order by newid(),
從第一章套題3中選擇20題通過by newid(),重新編號(hào)實(shí)現(xiàn)亂序。indexId="ind"用來在頁面中顯示題號(hào)。題目遍歷JSP代碼如下:
學(xué)生勾選答案放入數(shù)組idArrS ,其中${ind}記錄數(shù)組下標(biāo):
查詢成績:客觀題直接通過getRightAnswer方法獲得正確答案,比對學(xué)生答案,通過答對個(gè)數(shù)累加分?jǐn)?shù)得出學(xué)生得分。具體代碼如下:
String[] single=q.getAnswerArrS();//學(xué)生答案數(shù)組
int[] singleId=q.getIdArrS();//獲取題目編號(hào),放入singleId數(shù)組
float markS=100/(single.length);//每道題得分
for(int i=0;i //調(diào)用getRightAnswer()方法獲取正確答案 rightAnswer=startExamDAO.getRightAnswer(singleId[i]); if(rightAnswer.equals(single[i])){ singleMark=singleMark+markS; //累加單選題的分?jǐn)?shù) }} 學(xué)生得分: request.setAttribute("submitTestPaperok", "試卷已提交,您本次考試的成績?yōu)椋?+(Math.round(singleMark))+"分!");
套題管理:根據(jù)譚浩強(qiáng)C語言的不同章節(jié),設(shè)置第一至第10章與綜合測試14類套題,通過課程ID外鍵關(guān)聯(lián)套題表。
4 實(shí)驗(yàn)報(bào)告填寫模塊
C程序的學(xué)習(xí)更多的是對語法的學(xué)習(xí)與應(yīng)用,因此與普通實(shí)驗(yàn)報(bào)告需要詳細(xì)地寫明實(shí)驗(yàn)步驟,實(shí)驗(yàn)原理,實(shí)驗(yàn)?zāi)康牟煌?,故而這些內(nèi)容在該系統(tǒng)中將由教師布置實(shí)驗(yàn)內(nèi)容時(shí)統(tǒng)一制定,學(xué)生只需要填寫相關(guān)的源代碼與實(shí)驗(yàn)結(jié)果截圖即可。首先在教師端發(fā)布實(shí)驗(yàn)報(bào)告,根據(jù)發(fā)布班級(jí),制定由哪個(gè)班級(jí)來填寫。學(xué)生端,通過查看屬于自己的實(shí)驗(yàn)報(bào)告,填寫完成后提交,由教師端通過批改實(shí)驗(yàn)報(bào)告進(jìn)行批改,學(xué)生端通過查看實(shí)驗(yàn)報(bào)告,可以查看批改情況以及教師的評語。為避免實(shí)驗(yàn)報(bào)告的重復(fù)提交:設(shè)置實(shí)驗(yàn)報(bào)告提交SQL代碼如下:
sql = "if not exists (select LessonId from tb_sybg where LessonId=" + sybgForm.getLessonId() +"and sno ='"+sybgForm.getSno()+"'"+") "+ "INSERT INTO tb_sybg(LessonId,symc,symd,synryq,yqsb,syyl,ycx,sybz," + "result,sno,classno"+")"+"values('" +sybgForm.getLessonId() + "','"+sybgForm.getSymc()+ "','"+sybgForm.getSymd()+ "','"+synryq+ "','"+sybgForm.getYqsb()+ "','"+sybgForm.getSyyl()+ "','"+ycx+ "','"+sybgForm.getSybz()+ "','"+sybgForm.getResult()+ "','"+sybgForm.getSno()+ "','"+sybgForm.getClassno()+"')";
其中插入系統(tǒng)數(shù)據(jù)庫的源程序或者題目中可能有“”等,會(huì)影響insert語句的界定,這里對insert語句做一個(gè)統(tǒng)一替換String ycx=sybgForm.getYcx();ycx= ycx.replaceAll("", "")題目處理類似。通過text area接收的源程序在插入數(shù)據(jù)庫中能保留空格與換行,所以教師在批改學(xué)生提交的源程序時(shí)代碼能保留鋸齒狀顯示。
5 綜合試卷模塊
綜合測試試卷由單選題、程序填空題,編程題、填空題組成。根據(jù)套題編號(hào)決定每一章的選題數(shù)目,“-”用于分隔題型,共四類題型:選擇,程序填空,填空,編程,每個(gè)數(shù)字表示該類題型第1到第10章分別取題個(gè)數(shù)。試卷題型的集合如下。
List singleQue=(List)startExamDAO.queryExam(questions,0,lessonID);//選擇題
List fillBlankQue=(List)startExamDAO.queryExam(questions,1,lessonID);//程序填空題
List tianKongQue=(List)startExamDAO.queryExam(questions,2,lessonID);//填空題
List editProgrameQue=(List)startExamDAO.queryExam(questions,3,lessonID);//編程題
startExamDAO 主要代碼如下:
QuestionsForm questionsForm1 = null;
String str = String.valueOf( questionsID); //根據(jù)questionsID判斷學(xué)生選擇的是哪套試卷
//根據(jù)套題編號(hào)查看每個(gè)章節(jié)題目數(shù)用select[]保存
char select[]=new char[str.length()];
for(int i=0;i select[i]=str.charAt(i);//取字符串第i個(gè)字符 } /*因?yàn)槊總€(gè)章節(jié)設(shè)置3套題故需要每個(gè)章節(jié)產(chǎn)生一個(gè)隨機(jī)數(shù),s[i]=11表示第一章第一套,s[i]=23表示第二章第三套*/ int max=13; int min=11; Random random = new Random(); int s[]=new int[10]; for(int i=0;i<10;i++) {s[i] = random.nextInt(max)%(max-min+1) + min; max=max+10;min=min+10; } String sql=""; if(flag==0&&lessonID;>9){ sql = "select * from" + "(SELECT TOP " +select[0]+ " * FROM tb_Questions WHERE lessonId =1 AND type='單選題' and taoTiId=" +s[0]+ " order by NEWID())t1 " + "union all " + "select * from (SELECT TOP " +select[1]+ " * FROM tb_Questions WHERE lessonId =2 AND type='單選題' and taoTiId=" +s[1]+
" order by NEWID())t2"; }//lessonId=1:是章節(jié)ID號(hào)
//falg==題型標(biāo)志
if(flag==0){
sql = "select * from" +
"(SELECT TOP 2 * FROM tb_Questions WHERE lessonId =1 AND type='單選題' and taoTiId=" +s[0]+" order by NEWID())t1 " +"union all " +
"select * from (SELECT TOP 3* FROM tb_Questions WHERE lessonId =2 AND type='單選題' and taoTiId=" +s[1]+" order by NEWID())t2"; }
對于其他題型只要修改type='單選題'為:type='編程題' 或者 type='填空題'等即可。
實(shí)驗(yàn)效果圖如下:
6 結(jié)束語
該系統(tǒng)主要為C語言程序設(shè)計(jì)這門課程設(shè)計(jì)相關(guān)功能模塊,主要實(shí)現(xiàn)了實(shí)驗(yàn)報(bào)告在線填寫與批改,編程題、程序改錯(cuò)題的在線填寫與批改,以及綜合各類題型于一張?jiān)嚲?,作為期末考試的試卷使用,為了避免相互抄襲,對題序,題庫序進(jìn)行了隨機(jī)處理,不足之處難度也隨機(jī)了,需要教師在各章節(jié)題庫錄入時(shí),控制難度均衡。
參考文獻(xiàn):
[1] 王健. JAVA基礎(chǔ)上的在線考試系統(tǒng)設(shè)計(jì)[J]. 電腦開發(fā)與應(yīng)用, 2013(7).
[2] 張金福. 大學(xué)英語作文在線綜合評估系統(tǒng)的開發(fā)和應(yīng)用[J]. 湖北經(jīng)濟(jì)學(xué)院學(xué)報(bào): 人文社會(huì)科學(xué)版, 2008(12).
[3] 馬慧. 電子作業(yè)處理系統(tǒng)在線批改功能的實(shí)現(xiàn)[J]. 軟甲導(dǎo)刊, 2008(9).
[4] 陳澤琳. 基于JAVA的考試系統(tǒng)中題庫設(shè)計(jì)及組卷算法[J]. 重慶理工大學(xué)學(xué)報(bào): 自然科學(xué), 2010(3).
[5] 李香云. 基于JSP的_C語言_作業(yè)在線提交批改系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 安徽科技學(xué)院學(xué)報(bào), 2013(2).
[6] 羅輝. 基于內(nèi)容分割的在線作業(yè)管理系統(tǒng)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2008(3).
[7] 石靜. 基于校園網(wǎng)的_C語言_在線考試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 長春:吉林大學(xué)碩士學(xué)位論文, 2016.
[8] 韓磊, 簡答題在線自動(dòng)批改系統(tǒng)的研究[J]. 南京工程學(xué)院學(xué)報(bào), 2008(9).