徐雪飛
摘要:伴隨科技進步,高校教學改革也如火如荼地進行著,傳統(tǒng)的C語言實驗報告的填寫,已經(jīng)漸漸失去其原本作用,反之幫助學生更好地掌握C的語法知識,提高編程能力成為高校C的教學重點,在此,該文通過C語言編程學習系統(tǒng),完成學生的程序、實驗報告、章節(jié)習題、綜合測試等的在線提交,一方面能復習鞏固上課知識,另一方面,每次得分也可作為學生的平時成績,期末考試在該系統(tǒng)也可以完成。
關鍵詞:java;struts
中圖分類號:TP311 文獻標識碼:A 文章編號: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),往往只有選擇題模塊,而單純的選擇題,并不能很好的給予學生足夠的練習,尤其是程序設計這門操作性,實踐性比較強的學科,需要補充實驗報告,編程題,程序改錯題等題型,來更好的考察學生的知識掌握與應用情況。為此在這里通過運用J2EE技術,來對傳統(tǒng)的在線考試,做一次改進。
2 系統(tǒng)功能
該系統(tǒng)主要包括學生端與教師端,學生端通過學生登錄界面進入學生功能界面,從事完成教師布置的編程練習、上機練習(選擇題),填寫實驗報告,查看成績等功能模塊。教師端主要為學生端提供實驗報告、上機練習(選擇題)、編程題、程序填空題的發(fā)布收集與批改。具體功能模塊如圖1、2所示。
3 數(shù)據(jù)庫設計
整個系統(tǒng)包括如下一些表,score(學生得分表),student(學生表),taoTi(套題表),sybg(實驗報告表),Question(題目表),teacher(教師表),course (課程章節(jié)表)等,表之間主外鍵關系如圖3:
分章上機練習模塊:題型限制為選擇題,;對于題目中有大括號,復雜的數(shù)學公式等無法正常輸入數(shù)據(jù)庫的題目時,可將整個題做成圖片處理,數(shù)據(jù)庫中僅存答案,id號作為題目的圖片名稱。
為實現(xiàn)考題的隨機性。SQL語句查詢?nèi)缦拢篠ELECT top 20 * FROM tb_questions WHERE taoTiID=3 AND type='單選題' and lessionID=1 order by newid(),
從第一章套題3中選擇20題通過by newid(),重新編號實現(xiàn)亂序。indexId="ind"用來在頁面中顯示題號。題目遍歷JSP代碼如下:
學生勾選答案放入數(shù)組idArrS ,其中${ind}記錄數(shù)組下標:
查詢成績:客觀題直接通過getRightAnswer方法獲得正確答案,比對學生答案,通過答對個數(shù)累加分數(shù)得出學生得分。具體代碼如下:
String[] single=q.getAnswerArrS();//學生答案數(shù)組
int[] singleId=q.getIdArrS();//獲取題目編號,放入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; //累加單選題的分數(shù) }} 學生得分: request.setAttribute("submitTestPaperok", "試卷已提交,您本次考試的成績?yōu)椋?+(Math.round(singleMark))+"分!");
套題管理:根據(jù)譚浩強C語言的不同章節(jié),設置第一至第10章與綜合測試14類套題,通過課程ID外鍵關聯(lián)套題表。
4 實驗報告填寫模塊
C程序的學習更多的是對語法的學習與應用,因此與普通實驗報告需要詳細地寫明實驗步驟,實驗原理,實驗目的不同,故而這些內(nèi)容在該系統(tǒng)中將由教師布置實驗內(nèi)容時統(tǒng)一制定,學生只需要填寫相關的源代碼與實驗結果截圖即可。首先在教師端發(fā)布實驗報告,根據(jù)發(fā)布班級,制定由哪個班級來填寫。學生端,通過查看屬于自己的實驗報告,填寫完成后提交,由教師端通過批改實驗報告進行批改,學生端通過查看實驗報告,可以查看批改情況以及教師的評語。為避免實驗報告的重復提交:設置實驗報告提交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ù)庫的源程序或者題目中可能有“”等,會影響insert語句的界定,這里對insert語句做一個統(tǒng)一替換String ycx=sybgForm.getYcx();ycx= ycx.replaceAll("", "")題目處理類似。通過text area接收的源程序在插入數(shù)據(jù)庫中能保留空格與換行,所以教師在批改學生提交的源程序時代碼能保留鋸齒狀顯示。
5 綜合試卷模塊
綜合測試試卷由單選題、程序填空題,編程題、填空題組成。根據(jù)套題編號決定每一章的選題數(shù)目,“-”用于分隔題型,共四類題型:選擇,程序填空,填空,編程,每個數(shù)字表示該類題型第1到第10章分別取題個數(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判斷學生選擇的是哪套試卷
//根據(jù)套題編號查看每個章節(jié)題目數(shù)用select[]保存
char select[]=new char[str.length()];
for(int i=0;i select[i]=str.charAt(i);//取字符串第i個字符 } /*因為每個章節(jié)設置3套題故需要每個章節(jié)產(chǎn)生一個隨機數(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號
//falg==題型標志
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='填空題'等即可。
實驗效果圖如下:
6 結束語
該系統(tǒng)主要為C語言程序設計這門課程設計相關功能模塊,主要實現(xiàn)了實驗報告在線填寫與批改,編程題、程序改錯題的在線填寫與批改,以及綜合各類題型于一張試卷,作為期末考試的試卷使用,為了避免相互抄襲,對題序,題庫序進行了隨機處理,不足之處難度也隨機了,需要教師在各章節(jié)題庫錄入時,控制難度均衡。
參考文獻:
[1] 王健. JAVA基礎上的在線考試系統(tǒng)設計[J]. 電腦開發(fā)與應用, 2013(7).
[2] 張金福. 大學英語作文在線綜合評估系統(tǒng)的開發(fā)和應用[J]. 湖北經(jīng)濟學院學報: 人文社會科學版, 2008(12).
[3] 馬慧. 電子作業(yè)處理系統(tǒng)在線批改功能的實現(xiàn)[J]. 軟甲導刊, 2008(9).
[4] 陳澤琳. 基于JAVA的考試系統(tǒng)中題庫設計及組卷算法[J]. 重慶理工大學學報: 自然科學, 2010(3).
[5] 李香云. 基于JSP的_C語言_作業(yè)在線提交批改系統(tǒng)設計與實現(xiàn)[J]. 安徽科技學院學報, 2013(2).
[6] 羅輝. 基于內(nèi)容分割的在線作業(yè)管理系統(tǒng)[J]. 計算機工程與設計, 2008(3).
[7] 石靜. 基于校園網(wǎng)的_C語言_在線考試系統(tǒng)的設計與實現(xiàn)[D]. 長春:吉林大學碩士學位論文, 2016.
[8] 韓磊, 簡答題在線自動批改系統(tǒng)的研究[J]. 南京工程學院學報, 2008(9).