• 休闲生活
  • 教育教学
  • 经济贸易
  • 政法军事
  • 人文社科
  • 农林牧渔
  • 信息科技
  • 建筑房产
  • 环境安全
  • 当前位置: 达达文档网 > 达达文库 > 农林牧渔 > 正文

    在线考试系统中续考程序设计

    时间:2021-04-07 07:51:52 来源:达达文档网 本文已影响 达达文档网手机站

    摘要:该文结合在线考试系统数据库的设计,介绍了在开发在线考试系统过程中,为应对系统使用中因考试机出现故障和异常可能导致考试数据损失的情况,设计考试机续考管理程序的思路和方法。

    关键词:考试系统;故障;续考

    中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)11-2521-03

    Design of Data Recovery Program in Online Examination System

    LIU De-qiang

    (Wuxi Institute of Technology, Wuxi 214121, China)

    Abstract: This paper, based on online examination system database, introduces the methods of designing data recovery program to deal with the loss of examination data due to computer failure in the process of developing online examination system.

    Key words: examination system; computer failure; data recovery

    随着计算机技术和网络技术的发展,网络在线考试方式正被越来越多的各类院校和培训机构在课程教学评价中所采用。相比传统的纸质化考试方式,网络在线考试,在组织和实施、数据的统计分析和挖掘等方面具有不可比拟的优势,但同时由于增加了网络通信设备和计算机软硬件的使用,也对考试的过程管理和数据的安全提出了新的要求,在网络在线考试系统开发设计过程中必须重点加以关注和解决。该文针对在线考试过程中考试机最易出现故障的情况,提出了在在线考试系统开发过程中,针对考试机出现故障后如何对续考进行管理的程序设计方法。

    1网络在线考试系统功能简介

    笔者在设计网络在线考试系统时,基于数据安全原因采用了C/S结构。系统适用于不同课程进行多种客观题(单选题、多选题、判断题和填空题)的考试。系统用户分为系统管理员、任课教师、管理教师和学生四类。系统有五个主要功能模块组成,分别是:用户管理模块、基本数据维护模块、考试管理模块、考试模块和数据统计分析模块。不同用户根据不同的权限访问和操作不同的功能模块:

    1)系统管理员使用系统对用户和用户权限进行管理。

    2)管理教师使用系统对系部信息、班级信息、学生信息、课程信息、教师信息、教师任课信息和试题类型信息等进行录入和维护。

    3)任课教师使用系统对题库中相关课程的试题进行维护(录入、修改、删除),实际操作中,同一课程的任课教师组成一个课程组,由其中一人专门负责;考试前对试卷参数(试卷编号、考试对象、考试课程、题型题量、难度系数、知识点分布、分值分布和考试时间等)进行设置;考试过程中通过考试管理机对考试进行管理(换机续考、故障续考和违规处理等);考试后对考试数据进行查询、统计、分析和挖掘等。

    4)学生使用系统参加正式考试或模拟考试。

    2基于续考管理的数据结构设计

    数据库设计采用的是SQL Server数据库,名称为onlineexam,数据库中数据表对象有:用户表(tbluser)、系部信息表(tbldepart)、班级信息表(tblclass)、学生信息表(tblstudent)、教师信息表(tblteacher)、课程信息表(tblcourse)、题库表(tblitem)、试题选项表(tblselection)、试题答案表(tblanswer)、试题类型表(tblitemkind)、试卷参数表(tbltestdesign)、考生考试登录表(tbltestlogin)、考生试题表(tbltest)等。限于篇幅,该文仅对与续考程序设计直接相关的数据表进行介绍。

    tbltestlogin数据表用于记录考生参加考试的基本信息,其数据表结构如表1所示。

    数据表中设计teststatus字段,主要出于两方面的考虑:1)阻止考生为重新选择试题而违规进行二次登录;2)当考试机出现故障时,由监考教师通过考试管理机对考生考试登录中该字段值重新进行设置,考生换机或重新开机进行续考时,通过判断teststatus字段值,恢复已考数据。表中设计testtime字段主要用于记录考生考试已用时间,当出现故障需要续考时,可以根据该字段值计算出该考生的剩余考试时间。

    表1 Tbltestlogin数据表结构

    tbltest数据表用于记录考生的试题和答案,其数据表结构如表2所示。

    表2 Tbltest数据表结构

    考虑到考试机出现故障后,有可能无法重新启动,如果考试数据保存在客户端,该考生已考数据将无法恢复,因此笔者在系统设计中,使用tbltest数据表在服务器端对考试过程中考生的考试数据进行随时保存。表中itemtime字段用于记录该考题的答题时间、itemcount字段用于记录考生访问该考题的次数,设计这两个字段主要是为了对考题的难度系数进行后续分析和自动再处理,同时方便以后对数据进行挖掘。

    3续考管理程序设计

    任课教师使用在线考试系统组织课程考试按时间先后主要分为三个环节:1)考前,使用考试管理模块对本次考试进行组卷参数设置,所设置参数将保存到试卷参数表(tbltestdesign)中;2)考试中,使用考试管理模块通过考试管理机对考试过程进行监控和管理,主要是动态浏览和当考试机出现故障时编辑考生考试登录表(tbltestlogin)中的数据;3)考后,使用数据分析统计模块对本次考试考生成绩进行汇总和分析及数据导出等。

    考生使用在线考试系统参加课程考试,首先进行系统登录,然后根据监考教师现场告知的本次考试编号(试卷密码)进行考试登录,此过程中,只有属于本次考试参数中设置的考试对象才能正常登录,登录数据同时写入考试登录表(tbltestlogin)中,teststatus字段值开始时都自动记为“t”。考生成功登录后,考试机将自动根据tbltestdesign数据表中的预设参数进行组卷,组卷采用随机抽取法,考生间试卷互不相同。组卷完成后,每位考生的试卷同时保存到服务器端的tbltest数据表中。考生开始考试后,系统自动进行倒计时,每隔一分钟对tbltestlogin表中testtime字段进行一次重写,考生进行答题后,所选答案也会即时写入tbltest表中。考生完成答题提交试卷后或考试到时,将不能对tbltest表中的答案进行再编辑。

    考试过程中,考试机出现故障在所难免,关键是换机或重新开机后如何恢复考生已考数据。基于前述数据结构,程序设计思路是:监考教师确认考试机故障后,通过考试管理机将该考生在tbltestlogin数据表中的考试状态字段数据,由“t”改为“f”。考生换机或重新开机登录考试时,系统判断该字段数据为“f”,将允许考生再次登录,并且组卷时采用从tbltest数据表中进行数据恢复,不再从题库表中进行随机抽取。部分相关程序代码如下:

    考生登录考试时,基本数据写入tbltestlogin数据表,tesestatus字段开始时记为“t”。

    dbcon.con.Open();

    string sql = string.Format(@"insert into tbltestlogin(userid,testno, teststatus)

    values(’{0}’,’{1}’,’{2}’)", UserHelper.loginId, test_no, ’t’);

    SqlCommand cmd = new SqlCommand(sql, dbcon.con);

    cmd.ExecuteNonQuery();

    dbcon.con.Close();

    考生考试登录成功后,考试机根据试卷编号从tbltestdesign表中获取对应的预先设置的组卷参数进行组卷,为避免频繁访问数据库,组卷时先获取与课程相关的全部试题一次性写入考试机一临时动态数组中,然后在终端再根据参数生成不同随机数,并从临时动态数组中选取序号与随机数对应的试题写入另一个动态数组itembook中,最后依次将数组中的试题号写入tbltest数据表。

    for (int i = 0; i < n; i++)

    {item2 = (item)(itembook[i]);//从数组中取出试题

    sql = string.Format(@"insert into tbltest(userid,itemid,testno)

    values(’{0}’,’{1}’,’{2}’)", UserHelper.loginId, item2.Item_id, test_no);

    SqlCommand cmd = new SqlCommand(sql, dbcon.con);//将试题写入tbltest数据表

    cmd.ExecuteNonQuery();

    }

    考试过程中,考生试题完整内容保存在动态数组itembook中,数据表tbltest仅保存题号和答案。如果考生仅是浏览试题,数据将从itembook中获取,只有进行答题时,数据才会写入tbltest数据表,同时写入itembook,这样可有效减少网络流量。

    考试机出现故障后,teststatus字段重置为“f”,系统允许考生再次登录。

    bool isCorrect =false;

    string sql = string.Format(@"select count(*) from tbltestlogin

    where userid=’{0}’ and testno=’{1}’ and teststatus=’{3}’", LoginId, test_no,’f’);

    dbcon.con.Open();

    SqlCommand comm = new SqlCommand(sql, dbcon.con);

    int count = (int)comm.ExecuteScalar();

    if (count == 1)

    isCorrect = false;//表示被允许的再次登录

    else

    isCorrect = true; //表示初次登录

    dbcon.con.Close();

    return isCorrect;

    重新登录后,系统判断上述代码段返回值是否为逻辑值“false”,如果是,不再从题库抽取试题,而是从tbltest表中直接获取已保存的试题号和已做答案。

    ArrayList dbitem = new ArrayList();

    string sql = "select itemid,itemans from tbltest where userid=’";

    sql += UserHelper.loginId;

    sql += "’ and testno=’";

    sql += test_no;

    sql +="’"; //根据用户名和试卷编号查询试题号和已做答案

    SqlDataAdapter testdp = new SqlDataAdapter(sql, dbcon.con);

    DataSet testds = new DataSet();

    DataTable testtbl = new DataTable();

    testdp.Fill(testds, "tbltest");

    testtbl = testds.Tables[0];

    testitem item1 = new testitem();

    for (int j = 0; j

    { item1 = new testitem();

    item1.Item_id = testtbl.Rows[j][0].ToString();//获取试题题号

    if (testtbl.Rows[j][1] != null) //获取已做试题答案

    item1.Item_ans = testtbl.Rows[j][1].ToString();

    dbitem.Add(item1); //写入动态数组

    }

    从tbltest表中获取试题号后,根据题号再从题库表中取出对应试题内容,重新写入动态数组itembook,即可恢复考生原试卷和已考数据,考生可以继续考试。

    4结束语

    在线考试系统采用上述设计方法,解决了考试机出现故障后考生如何进行续考的问题,但同时由于每位考生的考试数据都是即时保存在数据库服务器上,因此对服务器上数据的安全提出了较高的要求,具体实施过程中,应通过数据库管理系统在考试期间对数据库进行较高频次的差异备份或日志备份。

    参考文献:

    [1]王冠,董彧先.基于C#的考试系统的设计与实现[J].电脑知识与技术, 2011(30).

    [2]刘秀萍.在线考试系统数据库安全分析与对策[J].科技信息,2011(3).

    [3]尹品梅,穆振东,胡剑锋.基于.net的网上考试系统的设计与实现[J].江西蓝天学院学报,2007,2(1).

    [4]张滨.对当前在线考试系统存在问题的分析与改进建议[J].佳木斯教育学院学报,2011(3).

    相关热词搜索: 在线 程序设计 考试 系统 中续考

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网