基于java的C语言试题生成与考试系统

Leftme

发布日期: 2018-12-29 13:37:23 浏览量: 836
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

摘 要

当前,网络教学方兴未艾。网上考试已在其中扮演了重要的角色,传统试卷考试方式有待提高。网络教学已从其规范性、科学性及考试工作组织、管理的统一性,影响到教学质量的好坏。基于此,本系统开发实现了基于B/S模式的c试题生成与考试系统,其中数据库采用MYSQL,开发平台是jsp,开发工具是eclipse+myeclipse,服务器采用tomcat。本系统实现了三个功能模块即试题管理模块、在线考试模块、自动评分模块。试题管理模块包括上传试题、试题管理、试卷的自动生成。在线考试模块包括学生登录、考试鉴权、考试时间控制和一些简单的考试意外的避免。自动评分模块包括制定评分规则自动评分和答案的返回。 用户机则不需要安装任何应用程序直接通过浏览器就可以访问。本系统的实现有利于提高网络教学的质量同时大大拓展了考试的灵活性,阅卷效率,以及保证了考试的公平性、答案的安全性。

关键词:网络考试系统;Web;B/S模式

1 系统分析、设计、开发

在前面我们已经提到该系统主要由三个模块组成,即试题管理模块、在线考试模块、自动评分模块。试题管理模块包含上传试题、试题管理、试卷生成、成绩管理这些功能。如图所示:

1.1 试题管理模块的设计

试题管理模块分为:上传试题、试题管理、试卷生成、成绩管理。

1.1.1 上传试题

管理员登录后可以根据界面上的表格添加试题,这种方式一次只能添加一道试题。也可以在界面上下载Excel表格模版批量的上传试题。这种方式一次可以添加多道试题。上传的表格必须以文本的形式进行上传,否则会出错。通过Question upload action接收上传文件,然后在javabean里调用readquestionexcel方法解析Excel文,实现上传。上传成功后如果发现有错,还可以在题库管理页面进行修改。

1.1.2 试题管理

在试题管理模块中可以对试题进行查看、删除、添加、修改。每条记录前都有一个复选框,选种你不需要的记录然后点击删除按钮。在每条记录后面都有一个编辑查看的链接,通过该链接可以进行查看和修改。修改完毕后对数据库中的数据进行updat即可。点击添加按钮,可以进入添加试题的页面。还可以通过我们前面所提到的批量上传进行试题的添加。

实现更新的代码如下:

  1. strSql = "update tiku set question='" + question + "',keya='" + keya
  2. + "',keyb='" + keyb + "',keyc='" + keyc + "',keyd='" + keyd
  3. + "',answer='" + answer + "',score='" + score + "',kind='"
  4. + kind + "' where id='" + id + "'";
  5. System.out.println(strSql);
  6. db.OpenSql("lock table tiku write");
  7. // 如果插入成功就返回真否则返回假
  8. if (db.ExecSql(strSql) == 0) {
  9. db.OpenSql("unlock tables");
  10. return false;
  11. } else {
  12. db.OpenSql("unlock tables");
  13. return true;
  14. }
  15. }

实现插入的代码如下:

  1. strSql = "insert into tiku values(null,'" + question + "','" + keya
  2. + "','" + keyb + "','" + keyc + "','" + keyd + "','" + answer
  3. + "','" + score + "','" + kind + "')";
  4. System.out.println(strSql);
  5. db.OpenSql("lock table tiku write");
  6. try {
  7. // 如果插入成功就返回真否则返回假
  8. if (db.ExecSql(strSql) == 0) {
  9. db.OpenSql("unlock tables");
  10. return false;
  11. } else {
  12. db.OpenSql("unlock tables");
  13. return true;
  14. }
  15. } catch (Exception e) {
  16. db.OpenSql("unlock tables");
  17. return false;
  18. }
  19. }

1.1.3 试卷生成

管理员可以对考试的各个参数进行设置。每道试题的分值,各种题型的数量。考试的时间等等。设置的这些信息是通过session来传递信息的。按照sesion传递的信息在题库中随机的抽取试题。在Mysql中自带一个随机函数rand()利用这个函数产生一个随机数,然后根据这个随机数取出相应的试题。所以题库里面的试题越多,两张试卷出现相同试题的几率就越小。为了保证一张试卷不出现相同的试卷只有通过管理员在把试题输入到题库的时候不要输入相同的试题。这种情况本系统没有考虑。

实现代码如下:

  1. public static ArrayList randomQuestions(DB db, String Number, String kind)
  2. throws SQLException {
  3. // 新建一个数组用来保存返回随机题目
  4. ArrayList list = new ArrayList();
  5. ResultSet rs;
  6. // 查询数据库语句变量
  7. String strSql;
  8. strSql = " select * from tiku where kind='" + kind
  9. + "' order by rand() limit " + Number + "";
  10. // System.out.println(strSql);
  11. // 执行sql查询
  12. rs = db.OpenSql(strSql);
  13. while (rs.next()) {
  14. Questions qe = new Questions();
  15. qe.setanswer(rs.getString("answer"));
  16. qe.setkeya(rs.getString("keya"));
  17. qe.setkeyb(rs.getString("keyb"));
  18. qe.setkeyc(rs.getString("keyc"));
  19. qe.setkeyd(rs.getString("keyd"));
  20. qe.setquestion(rs.getString("question"));
  21. qe.setscore(rs.getString("score"));
  22. list.add(qe);
  23. }
  24. // 如果ResultSet不为空就关闭它
  25. if (rs != null) {
  26. rs.close();
  27. }
  28. return list;
  29. }

通过调用该SQL语句从数据库里取出试题。然后通过session把值传到前台。实现试题的自动生成。本试题自动生成系统对每次生成的试卷没作保存处理。

1.1.4 成绩管理

成绩管理主要是对学生考试成绩的查看和删除。还可以查看考试时的ip地址以及考试开始时间和结束时间。

1.2 在线考试模块的设计

在线考试模块分为:在线考试模块分为:鉴权考试、学生登陆、时间管理、意外避免。

1.2.1 考试鉴权

每次系统都会判断该用户存不存在。防止一些不具有本次考试资格的学生登陆。

判断用户是否存在的实现代码如下:

  1. public static boolean checkUserAccount(DB db, String s_id)
  2. throws SQLException {
  3. String strSql;
  4. ResultSet rs;
  5. // 编写sql变量
  6. strSql = "select * from student where s_id='" + s_id + "'";
  7. // 查询数据
  8. rs = db.OpenSql(strSql);
  9. // 如果sql结果集中有数据表示当前用户是合法用户返回true后者返回false
  10. if (rs.next()) {
  11. // 如果ResultSet不为空就关闭它
  12. if (rs != null) {
  13. rs.close();
  14. }
  15. return true;
  16. } else {
  17. // 如果ResultSet不为空就关闭它
  18. if (rs != null) {
  19. rs.close();
  20. }
  21. return false;
  22. }
  23. }

1.2.2 学生登录

通过用户名系统能直接判断出是管理员还是学生,管理员有且只有一个。所有学生的用户名、密码以及一些相关的信息都是管理员通过Web页面来添加、删除、修改。其中用户名为学生的学号,密码默认值为123。登陆成功后学生可以修改自己的密码。

检查用户名和密码是否正确的实现代码如下:

  1. public static boolean checkUser(DB db, String s_id, String psw)
  2. throws SQLException {
  3. String strSql;
  4. ResultSet rs;
  5. // 编写sql变量
  6. strSql = "select * from student where s_id='" + s_id
  7. + "' and s_psw = password('" + psw + "')";
  8. // 查询数据
  9. rs = db.OpenSql(strSql);
  10. // 如果sql结果集中有数据表示当前用户是合法用户返回true后者返回false
  11. if (rs.next()) {
  12. // 如果ResultSet不为空就关闭它
  13. if (rs != null) {
  14. rs.close();
  15. }
  16. return true;
  17. } else {
  18. // 如果ResultSet不为空就关闭它
  19. if (rs != null) {
  20. rs.close();
  21. }
  22. return false;
  23. }
  24. }

1.2.3 时间管理

时间对考试来说是至关重要的。在c语言试题自动生成系统中,为学生设置了考试开始时间和考试剩余时间。使考生在考试过程中对时间好有个把握。显示剩余时间的时钟是一个动态时钟,这个时钟显示的时间是由服务器控制的,这样避免了考生因修改自己计算机的系统时间而出现的作弊现象。当服务器到达考试时间时候,系统会弹出一个对话框显示时间到。如果迟迟不点确定按钮,系统会自动向数据库插入一条零分记录。即作为作弊行为来处理。

1.2.4 意外避免

当考生登陆后点击准备好了按钮后开始考试,为了防止考生进行刷新或后退使生成的试题发生变化,这样会影响考试的结果。本系统在这方面进行了防止,使考生在考试时间段内后退也好刷新也好都不能是生成的试题发生变化。本系统还防止了学生通过多次登陆来生成不同试题然后提交多份考卷的现象。通过调用isuesrlogin这个方法来实现对用户多次登陆的侦听。

主要实现代码如下:

  1. public static boolean isUserLogin(HttpSession session,String username){
  2. boolean flag = false;
  3. if(list != null && list.size() > 0){
  4. for(int i=0;i<list.size();i++){
  5. if(list.get(i).equals(username)){
  6. flag = true;
  7. break;
  8. }
  9. }
  10. }
  11. if(!flag){ //没有相同的用户登录
  12. list.add(username);
  13. session.setAttribute("id", username);
  14. System.out.println("=======" + username);
  15. }
  16. return flag;
  17. }
  18. public static void removeUserSession(String username){
  19. System.out.println("destoryed " + username);
  20. list.remove(username);
  21. }
  22. }

防止刷新后退使试题改变的主要实现代码如下:

  1. try {
  2. String flagt = request.getParameter("flagt");
  3. Student student = (Student) session.getAttribute("sinfo");
  4. if (student != null) {
  5. if (!flag.equals(flagt) && flagt != null
  6. && session.getAttribute("qex") == null) {
  7. System.out.println("正常登录");
  8. flag = flagt;
  9. ......

原理就是当你点击准备好了按钮之后产生一个随即数传到后台,后台根据这个随机数判断是否是刷新。

1.3 自动评分模块的设计

1.3.1 自动评分

本系统的自动评分的实现主要是通过从数据库取出正确答案与考生所选或填的答案进行比较,如果正确则把该试题的分值进行加发运算。

1.3.2 答案返回

当考生提交试题后,会把考生自己选择的答案和试题的正确答案反馈给考生。

2 运行效果

根据上述分析资料和设计资料,经过实践,基本完成了系统所需的功能。以下是系统相关的截图,演示了系统功能的操作过程。

首先,进入系统登陆界面后输入用户名和密码就可以进入系统进行相应的操作,当以管理员身份登陆成功后可以进行学生管理、题库管理、成绩管理、考试设置、密码修改这些操作。学生管理操作如下图所示。

上传的附件 cloud_download 基于java的C语言试题生成与考试系统.zip ( 3.53mb, 48次下载 )
error_outline 下载需要12点积分

发送私信

告别错的,方可遇见对的

16
文章数
17
评论数
最近文章
eject