基于J2EE的C语言编程学习系统
2018-11-01徐雪飞
徐雪飞
摘要:伴隨科技进步,高校教学改革也如火如荼地进行着,传统的C语言实验报告的填写,已经渐渐失去其原本作用,反之帮助学生更好地掌握C的语法知识,提高编程能力成为高校C的教学重点,在此,该文通过C语言编程学习系统,完成学生的程序、实验报告、章节习题、综合测试等的在线提交,一方面能复习巩固上课知识,另一方面,每次得分也可作为学生的平时成绩,期末考试在该系统也可以完成。
关键词: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 背景
目前常见的考试系统,往往只有选择题模块,而单纯的选择题,并不能很好的给予学生足够的练习,尤其是程序设计这门操作性,实践性比较强的学科,需要补充实验报告,编程题,程序改错题等题型,来更好的考察学生的知识掌握与应用情况。为此在这里通过运用J2EE技术,来对传统的在线考试,做一次改进。
2 系统功能
该系统主要包括学生端与教师端,学生端通过学生登录界面进入学生功能界面,从事完成教师布置的编程练习、上机练习(选择题),填写实验报告,查看成绩等功能模块。教师端主要为学生端提供实验报告、上机练习(选择题)、编程题、程序填空题的发布收集与批改。具体功能模块如图1、2所示。
3 数据库设计
整个系统包括如下一些表,score(学生得分表),student(学生表),taoTi(套题表),sybg(实验报告表),Question(题目表),teacher(教师表),course (课程章节表)等,表之间主外键关系如图3:
分章上机练习模块:题型限制为选择题,;对于题目中有大括号,复杂的数学公式等无法正常输入数据库的题目时,可将整个题做成图片处理,数据库中仅存答案,id号作为题目的图片名称。
为实现考题的随机性。SQL语句查询如下:SELECT top 20 * FROM tb_questions WHERE taoTiID=3 AND type='单选题' and lessionID=1 order by newid(),
从第一章套题3中选择20题通过by newid(),重新编号实现乱序。indexId="ind"用来在页面中显示题号。题目遍历JSP代码如下:
学生勾选答案放入数组idArrS ,其中${ind}记录数组下标:
查询成绩:客观题直接通过getRightAnswer方法获得正确答案,比对学生答案,通过答对个数累加分数得出学生得分。具体代码如下:
String[] single=q.getAnswerArrS();//学生答案数组
int[] singleId=q.getIdArrS();//获取题目编号,放入singleId数组
float markS=100/(single.length);//每道题得分
for(int i=0;i //调用getRightAnswer()方法获取正确答案 rightAnswer=startExamDAO.getRightAnswer(singleId[i]); if(rightAnswer.equals(single[i])){ singleMark=singleMark+markS; //累加单选题的分数 }} 学生得分: request.setAttribute("submitTestPaperok", "试卷已提交,您本次考试的成绩为:"+(Math.round(singleMark))+"分!");
套题管理:根据谭浩强C语言的不同章节,设置第一至第10章与综合测试14类套题,通过课程ID外键关联套题表。
4 实验报告填写模块
C程序的学习更多的是对语法的学习与应用,因此与普通实验报告需要详细地写明实验步骤,实验原理,实验目的不同,故而这些内容在该系统中将由教师布置实验内容时统一制定,学生只需要填写相关的源代码与实验结果截图即可。首先在教师端发布实验报告,根据发布班级,制定由哪个班级来填写。学生端,通过查看属于自己的实验报告,填写完成后提交,由教师端通过批改实验报告进行批改,学生端通过查看实验报告,可以查看批改情况以及教师的评语。为避免实验报告的重复提交:设置实验报告提交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()+"')";
其中插入系统数据库的源程序或者题目中可能有“”等,会影响insert语句的界定,这里对insert语句做一个统一替换String ycx=sybgForm.getYcx();ycx= ycx.replaceAll("", "")题目处理类似。通过text area接收的源程序在插入数据库中能保留空格与换行,所以教师在批改学生提交的源程序时代码能保留锯齿状显示。
5 综合试卷模块
综合测试试卷由单选题、程序填空题,编程题、填空题组成。根据套题编号决定每一章的选题数目,“-”用于分隔题型,共四类题型:选择,程序填空,填空,编程,每个数字表示该类题型第1到第10章分别取题个数。试卷题型的集合如下。
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); //根据questionsID判断学生选择的是哪套试卷
//根据套题编号查看每个章节题目数用select[]保存
char select[]=new char[str.length()];
for(int i=0;i select[i]=str.charAt(i);//取字符串第i个字符 } /*因为每个章节设置3套题故需要每个章节产生一个随机数,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:是章节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 结束语
该系统主要为C语言程序设计这门课程设计相关功能模块,主要实现了实验报告在线填写与批改,编程题、程序改错题的在线填写与批改,以及综合各类题型于一张试卷,作为期末考试的试卷使用,为了避免相互抄袭,对题序,题库序进行了随机处理,不足之处难度也随机了,需要教师在各章节题库录入时,控制难度均衡。
参考文献:
[1] 王健. JAVA基础上的在线考试系统设计[J]. 电脑开发与应用, 2013(7).
[2] 张金福. 大学英语作文在线综合评估系统的开发和应用[J]. 湖北经济学院学报: 人文社会科学版, 2008(12).
[3] 马慧. 电子作业处理系统在线批改功能的实现[J]. 软甲导刊, 2008(9).
[4] 陈泽琳. 基于JAVA的考试系统中题库设计及组卷算法[J]. 重庆理工大学学报: 自然科学, 2010(3).
[5] 李香云. 基于JSP的_C语言_作业在线提交批改系统设计与实现[J]. 安徽科技学院学报, 2013(2).
[6] 罗辉. 基于内容分割的在线作业管理系统[J]. 计算机工程与设计, 2008(3).
[7] 石静. 基于校园网的_C语言_在线考试系统的设计与实现[D]. 长春:吉林大学硕士学位论文, 2016.
[8] 韩磊, 简答题在线自动批改系统的研究[J]. 南京工程学院学报, 2008(9).