logo

基于.NET的课程在线考试系统的设计与实现

作者:樵夫2024.09.18 16:05浏览量:71

简介:以基于.net的课程在线考试系统的开发为背景,论述了课程在线考试系统的设计与实现过程

摘 要:本文以基于.net的课程在线考试系统的开发为背景,论述了课程在线考试系统的设计与实现过程。在网络普及化的今天,课程在线考试已成为各高校进行在线考试的重要平台,帮助管理者完成基于网络的考试管理。在线考试系统涵盖了课程、班级、考生、试题库、知识点、考试类型等基础数据的管理,教学班、教师任课、组卷、发布考试、监考、自动评卷/人工评卷、考生练习、考试成绩等完整流程。本系统可以同时管理多课程的在线考试,大大提高了工作效率,使各项管理更加规范化。
本文主要介绍了在线考试系统的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。
关键词:在线;考试管理系统;SQL Server;ASP.net;ADO.net;B/S

一、引 言

课程在线考试工作是高校教育工作的一项重要内容,是学校教学管理的核心工作,同时也是一项目的性、计划性、适应性、创造性和科学性很强的工作。随着各高等院校规模的扩大和在校人数的增加,对学校的各项管理工作要求越来越高,而在线考试系统则是各高校管理工作中的重中之重。为了给学生和教师提供一个方便而快捷的学习和管理环境,应用现代技术更科学、高效地对学校各项教学工作进行有效管理,在正常的书面考试的基础上,可以使用何种方式进行其它类型的考试,成为各高校的重大研究课题,而网络的普及和方便,给在线考试提供了良好的平台。因此如何实现在线考试,成了本文所要研究的内容。
本系统以三十多年教学经验为基础,将涉及课程考试的各个要素进行详细梳理,按书面考试出卷的方式方法,对涉及考试的课程、班级、考生、试题库、课程知识点、考试类型(期中、期终、补考、重修、选修)等基础数据进行管理。在以上基础数据基础上,组成课程教学班(可以有物理班,也可以是选修班)、安排教师课程任教、设计组卷参数(各类考试的出题范围、各类题型的出题数量、难易程度百分比)、发布考试命令、教师监考、考试结束后自动对客观题进行自动评卷,并将试卷中涉及的主观题生成Word试卷进行人工评卷、考生练习、考试成绩下载等。
论文对基于.NET的课程在线考试系统所采用的开发平台、关键技术给予详细的介绍,并按照软件工程的要求,从需求分析开始,经过总体设计最后到详细设计,完成对整个系统的设计。

二、开发工具及关键技术

(一)开发平台的选择

本系统采用.NET技术,.NET是一种用于构建多种应用的免费开源开发平台,可以使用C#、F#或VB编写.NET应用。.NET开发平台由一组用于建立Web服务应用程序和Windows桌面应用程序的软件组件构成,包括.NET框架(Framework)、.NET开发者工具和ASP.NET。微软对.NET的定义是The .NET Framework is a new computing platform that simplifies application development in the highly distributed environment of the Internet。意思是,.NET是在高度分布式的互连网环境中,使软件开发简单化的新的计算平台[1]。这里说了分布式的互连网环境,这个很重要呀,说明以后的商业活动会在网上进行,所以我们也应该跟着时代潮流,做程序的时候要考虑到这一点。说白了就是.NET可以提高我们应用程序开发的速度。
.NET的优点:提供标准的面向对象开发环境,不仅可以在本地与对象交互,还可以通过Web Service和.NET Remoting技术在远程与对象交互;提供优化的代码执行环境,使以前让人们头痛的程序版本问题得到了解决。我们可以在同一台机器中安装相同程序的不同版本。而且deployment也得到了改善,微软说是X-COPY,就是说像拷贝文件一样简单了;提供代码运行安全性,.NET Framework保障执行代码的安全性;使用JIT(Just In Time Activation)技术,提高代码运行速度;提供标准的框架和强大的开发工具,可以让程序员在实际的开发当中,积累更多的经验;.NET遵循业界标准规范,所以可以让代码(.NET里的代码)可以与其他系统交互。比如Web Service,COM等等[2]。正因为这些优点,并且对同为微软开发数据库应用的强大支持,大大提高了数据库应用软件开发的效率,缩短了开发周期,所以我们使用.NET开发平台来开发本系统。

(二)数据库系统的选择

1、SQL Server 2008r2概述
SQL Server 2008是 Microsoft 推出的一款面向高端关系数据库管理系统(RDBMS),它的设计初衷是为了为企业提供一个安全、可靠、可扩展的数据管理平台,提供了多种数据存储和管理功能,包括支持关系数据、XML 数据、文件流数据等多种数据类型,具有强大的数据管理功能,提供了丰富的管理工具支持数据的完整性管理,安全性管理和作业管理。SQL Server具有分布式数据库和数据仓库功能,能进行分布式事务处理和联机分析处理,支持客户机/服务器结构。SQL Server支持标准的ANSI SQL,还把标准SQL扩展成为更为实用的Transact-SQL[3,4]。
2、数据库系统设计
数据库对于一个成功的教务管理系统来说是一个非常重要的条件和关键技术。系统所涉及的数据库设计分五个步骤:数据库需求分析、概念设计、逻辑设计、物理设计与加载测试[6]。
(1) 、数据库需求分析的任务是明确用户的需求,将业务管理流程化为数据流程,划分模块之间的边界,完成相应的数据字典。
(2) 、概念设计的任务是在需求分析阶段的结果的基础上,按照特定的方法把它们抽象为一个不依赖于任何具体机器的数据模型。
(3) 、逻辑设计的任务是将概念结构进一步转化为某一DBMS所支持的数据模型,然后根据逻辑设计的准则、数据的语义约束、规范化理论等对数据模型进行适当的调整和优化,形成合理的全局逻辑结构,并设计出用户子模式。
(4) 、物理设计的任务是根据具体的计算机系统的特点,为给定的数据库模型确定合理的存储结构和存取方法。实现物理建库,完成数据库物理设计字典[7]。
加载测试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。
3、SQL语言介绍
结构化查询语句SQL(Structured Query Language)目前是数据库的标准主流语言。SQL语言能完成定义关系模式、录入数据以建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,具有集DDL(Data Definition Language,数据定义语言)、DML(Data Manipulation Language,数据操纵语言)、DCL(Data Control Language,数据控制语言)为一体的特点。SQL语言具有两种使用方式,用户使用不同的方式时,SQL语言的语法结构是基本一致的,这大大改善了最终用户和程序设计人员之间的通信[8]。在使用SQL语言时,存取路径的选择和SQL语句操作的过程都是由系统自动完成的。虽然SQL语言的功能十分强大,但是它的语法一点都不复杂,十分简洁,SQL语言的语法接近英语口语,因此易学易用。
SQL语言的数据操纵功能主要包括两个方面:检索和更新(包括增加、修改、删除)。涉及到四个语句:查询(SELECT)、插入(INSERT)、删除(DELETE)和更新(UPDATE)[9]。
用SQL语言对数据库中的数据进行更新、插入或删除时,都是对单个表进行的,如果表之间没有定义完整性约束,则可能导致多个表之间的数据不一致。

(三)ADO.NET
1、ADO.NET概念
.NET中对数据库的访问是通过ADO.NET(ActiveX Data Objects .NET)来实现的。ADO.NET是Microsoft提供的一种数据访问技术,用于访问关系型数据库和其他数据源的类库。它提供了丰富的功能,包括连接数据库、执行SQL命令、获取结果集等。它主要由两部分组成:

  1. 数据提供程序(Managed Provider):如SqlClient、OleDb、Oracle等,它们是针对特定数据库的数据访问组件,提供了DataSet与数据库之间的联系,并可以通过数据集命令将需要的数据填入DataSet中。
  2. DataSet:一种内存中的缓存机制,不依赖于数据库的独立数据集合,可以存储从数据库中检索的数据,并支持对数据进行本地处理。即使数据连接断开,DataSet依然是可用的。
    ADO.NET 访问数据库的步骤如下:
    (1)、创建一个与数据源的连接。
    (2)、执行查询,请求一个数据集合。
    (3)、将集合放入DataDet中。
    (4)、如果需要,可以再请求另外的数据集合。
    (5)、关闭数据连接。
    (6)、在DataSet上进行所需要的操作。
    (7)、如果需要,将DataSet的变化更新到数据库中。
    2、数据库访问方式
    SqlClient模式只用于访问MS SqlServer数据库,是ADO.NET中比较特殊的组件,对访问MS SqlServer来说,采用SqlClient模式比OleDb、ODBC模式效率更高,所以在本系统中,我们采用SqlClient模式[11]。
    使用SqlClient时需要引入命名空间有System.Data和System.Data.SqlClient。
    3、连接Connection对象
    与Connection对象关联的主要属性是ConnectionString,在本系统中ConnectionString属性如下:
    Data source=服务器名;user id=用户名;password=密码;initial catalog=数据库;Connect Timeout=5
    并在使用过程中使用Open和Close两种方法打开和关闭数据库连接。
    4、数据库操作Command对象
    使用Command执行数据库操作步骤:
    (1) 建立数据库连接,使用Connection对象的Open()方法。
    (2) 执行数据库操作,使用ExecuteReader()或ExecuteNonQuery()执行数据库命令。
    (3) 关闭数据库连接,使用Connection对象的Close()方法。
    • 检索数据
      SqlCommand czcmd = new SqlCommand(“Select username From userb “, MyConn);
      MyDa.SelectCommand = czcmd;
    • 插入数据
      string strSq2 = “INSERT INTO qtckb(ckbh, ckbm, hm,fcbm, ckrq,czy,bz,cjsm,srbldh,czsj)”;
      strSq2+=”VALUES(‘“+bh.Text.ToString().Trim()+”‘,’”+bm.Text.ToString().Trim()+”‘,’”+hm.Text.ToString().Trim()+”‘,’”+fcname+”‘,’”+ckrq.Value+”‘,’”+czy.Text.ToString().Trim()+”‘,’”+bz.Text.ToString().Trim()+”‘,’”+cjsm.Text.ToString().Trim()+”‘,’”+srbldh.Text.ToString().Trim()+”‘,’”+DateTime.Now.Hour.ToString()+”:”+DateTime.Now.Minute.ToString()+”:”+DateTime.Now.Second.ToString()+”‘)”;
      SqlCommand MyComm2 = new SqlCommand(strSq2, MyConn);
      int count2 = MyComm2.ExecuteNonQuery();
    • 修改数据
      string strSql = “Update qtckb Set ckbh = ‘“+bh.Text.ToString().Trim()+”‘“+
      “ Where ckbh = ‘“+bh.Text.ToString().Trim()+”‘“;
      SqlCommand MyComm = new SqlCommand(strSql, MyConn);
      int count = MyComm.ExecuteNonQuery();
    • 删除数据
      SqlCommand MyComm1 = new SqlCommand(“Delete From qtckmxb Where qtckmxb.ckbh = ‘“+this.bh.Text.Trim()+”‘“, MyConn);
      int count1 = MyComm1.ExecuteNonQuery();
      5 、数据库操作DataAdapter对象和DataSet对象
      (1) 创建一个数据库连接对象;
      (2)创建一个包含相应数据库查询语句的DataAdapter对象
      string sql_xy = “SELECT kcid,kcm FROM kcb order by kcm”;
      SqlDataAdapter Da = new SqlDataAdapter(sql_xy,Conn);
      (3) 创建一个数据集
      DataSet Ds = new DataSet();
      (4) 执行DataAdapter对象的Fill方法将查询结果添加到数据集中
      Da.Fill(Ds , “Customers”)
      (5) 对数据集执行相应的操作

(四)应用程序配置文件web.config以及数据库访问类DBAccess.cs
web.config文件是为了当数据库服务器发生更改时能方便快捷地更改数据库连接语句:
<?xml version=”1.0” encoding=”utf-8” ?>

<configuration>
<connectionStrings>
<add name="strconn" connectionString="server=.;uid=stu;pwd=8829;database=edu" />
</connectionStrings>
</configuration>
DBAccess.cs类是为了在编写代码时方便地使用数据库连接:
static private string strConn = System.Configuration.ConfigurationManager.ConnectionStrings[“strconn”];

三、课程在线考试系统的系统分析

(一)系统概述

课程在线考试系统是学校实现学科培养目标和完成教学任务的保障性要求,是检验教学效果的基本手段。在教学过程中每门课程一般都需要安排期中考试和期末考试,还根据需要对未达到教学要求的学生进行补考、重修等工作,当该课程还开设校选修时,还需要进行选修考试。上述各类考试的考试范围、难度都不同,需要根据教学计划进行逐一明确并设计。出一份合格的课程试卷对教师来说是一个艰巨的任务,有些高校对每门课程一次需要出3份试卷:A、B和补考,而且每份试卷中每个题型知识点不能重复,难度由浅入深,所以需要教师化很多时间才能达到要求。
在网络普及、高度信息化的今天,一些适合网络在线考试的课程再使用老式的书面考试就显得有点过时和呆板了。因此设计一个全方位完成出卷的管理系统就显得十分必要了。

(二)系统目标

任何一个系统都是为了实现一定的“目标”,系统的“目标”依靠系统所具有的“功能”来实现,而“功能”则是由一定的组织“机构”来实施,它们之间构成了统一的整体。对于系统的理解有多种多样,一个较为实用的观点认为:一个系统是一组相互联系、能一起工作从而达到某个目标的相关组件的集合。也就是说系统是由若干个具有独立功能的元素构成的,这些元素之间相互联系、相互制约,共同完成系统的目标。本系统由前、后台两部分组成,前台负责考生的练习和考试,后台负责考试系统基础数据、试题库、教师任课、组卷参数、发布考试命令、教师监考、考试结束后自动对客观题进行自动评卷,并将试卷中涉及的主观题生成Word试卷进行人工评卷、考试或练习成绩等的管理与维护,它们之间相互协调,共同完成既定的目标——班级信息的维护、考生信息的导入和维护、课程信息的维护、考试类型的管理与维护、试题库的管理与维护、教学班的管理与维护、教师任课管理、考试情况监控、考试成绩管理、组卷参数管理与维护和考试命令的发布、考试等项。
本系统的系统目标具体表述为以下几个方面:
1、班级信息的维护:班级信息的添加、删除和修改;
2、考生信息的维护:考生信息的添加、删除和修改;
3、课程信息的维护:课程信息的添加、删除和修改;
4、知识点信息的维护:知识点信息的添加、删除和修改;
5、考生数据导入:一次性将新生数据从Excel文件中导入系统数据库;
6、题型的维护:题型的添加、删除和修改;
7、教学班管理:教学班的添加和删除;
8、教师任课安排:教师任教班级的确定和删除;
9、考试情况监控:对考生的考试情况进行监控,明确考生进行考试的情况和考试状态(未进入考试、考试中、结束考试);
10、考试成绩管理:考生结束后,系统自动对客观题进入自动批阅,将考生答题卷生成Word试卷,供老师批阅;
11、考生平时练习情况统计:作为平时成绩的一部分,对考生的平时练习情况进行统计,导出考生平时练习的成绩;
12、学期参数的管理:每个学期前添加学期信息,并确认该学期是否为当前学期。
13、考试类型管理:确定本系统的考试类型。本系统默认有:期中、期终、补考、重修、选修。确定各类型的考试范围;
14、组卷参数管理:明确试卷的题型及各题型的题数及难度分配;
15、考试命令发布:确定各教学班的考试时间。
16、考试和练习:根据设置的考试参数,供考生完成练习和考试。

(三) 系统分析方法

……

(四)系统设计方法

……

(五)系统分析

(六)系统功能流程图

四、系统功能的实现

完成了系统的需求分析之后,就进入了系统的设计阶段,在整个系统的开发时期中,设计阶段是最主要的阶段。按软件生存周期的划分,设计任务通常分两个阶段来完成。第一个阶段是概要设计,它的任务是建立软件的总体结构,即软件的组成,以及各组成成分(子系统或模块)之间的相互联系。第二个阶段是是详细设计,其任务是确定模块的内部算法和数据结构,产生描述各个模块程序过程的详细设计文档。在本系统的设计过程中采取了模块化的设计方法,化繁为简。

(一)数据库设计

1、表文件设计

本系统共有22张表,定义如下:
表4.1 角色表(Role)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | RoleID | varchar | 16 | No | 角色ID |
| 2 | RoleName | varchar | 38 | No | 角色名 |
| 3 | RoleAuthority | Bigint | | | 角色权限 |

表4.2 部门表(Department)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | DepartmentID | varchar | 6 | No | 部门ID |
| 2 | DepartmentName | varchar | 30 | No | 部门名 |
| 3 | DepartmentType | tinyint | | | 部门类型 |

表4.3 教师表(Teacher)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | TeacherID | varchar | 8 | No | 教师ID |
| 2 | TeacherName | varchar | 10 | No | 教师名 |
| 3 | DepartmentID | varchar | 6 | | 部门ID |
| 4 | Groups | varchar | 30 | | 教研室 |
| 5 | PassW | varchar | 16 | | 密码 |
| 6 | UserRight | bigint | | | 用户权限 |
| 7 | UserAuthority | Tinyint | | | 审核状态 |

表4.4 用户角色表(UserRole)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | UserID | varchar | 8 | No | 教师ID |
| 2 | RoleID | varchar | 16 | No | 角色ID |

表4.5 专业表(Speciality)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | SpecialityID | varchar | 8 | No | 专业ID |
| 2 | SpecialityName| varchar | 60 | No | 专业名 |
| 3 | DepartmentID | varchar | 16 | No | 部门ID |

表4.6 班级表(Class)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | ClassID | varchar | 10 | No | 班号 |
| 2 | ClassName | varchar | 60 | No | 班名 |
| 3 | SpecialityID | varchar | 8 | No | 专业ID |
| 4 | EntranceYear | smallint | | | 入学年份 |
| 5 | VirtualClass | tinyint | | | 班级类型 |

表4.7 课程类型表(CourseType)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | CourseTypeID | varchar | 3 | No | 课程类型ID |
| 2 | CourseTypeName | varchar | 18 | | 课程类型名 |

表4.8 课程表(Course)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | CourseID | varchar | 8 | No | 课程ID |
| 2 | CourseName | varchar | 52 | No | 课程名 |
| 3 | CourseTypeID | varchar | 3 | No | 课程类型ID |
| 4 | CreditHour | float | | | 学分 |
| 5 | TotalPeriod | smallint | | | 总学时 |
| 6 | WeekPeriod | smallint | | | 理论学时 |
| 7 | ExprimentPeriod| smallint | | | 实践学时 |
| 8 | ChkExam| bit | | | 考试课? |
| 9 | DepartmentID | varchar | 16 | | 部门ID |

表4.9 命题教师表(TeacherCourse)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | UserID | varchar | 8 | No | 用户ID |
| 2 | CourseID | varchar | 8 | No | 课程ID |

表4.10 章表(Course)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | ChapID | varchar | 8 | No | 课程ID |
| 2 | ChapName | varchar | 50 | No | 章名 |
| 3 | CourseID | varchar | 8 | | 课程ID |

表4.11 知识点表(Course)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | kpsID | int | | No | 知识点ID |
| 2 | kpsName | varchar | 50 | No | 知识点名 |
| 3 | KpContent | varchar | 380 | | 知识点说明 |
| 4 | CourseID | varchar | 8 | | 课程ID |

表4.12 难度系数表(Course)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | DifficultyID | tinyint | | No | 难度系数ID |
| 2 | DifficultyName | varchar | 26 | | 难度 |

表4.13 学期表(Term)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | TermID | int | | No | 学期ID |
| 2 | Term | varchar | 13 | No | 学期名 |
| 3 | CurrentTerm | tinyint | | | 当前学期 |
| 4 | TermStartDate| smalldatetime | | | 起始日期 |

表4.14 题型表(SubjectType)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | SubjectTypeID | tinyint | | No | 题型ID |
| 2 | SubjectTypeName| varchar | 26 | No | 题型名 |
| 3 | SubjectTypeHint| varchar | 66 | | 题型说明 |
| 4 | PointPerSubject| numeric(6, 1) | | | 每题分值 |
| 5 | ObjectiveTest | bit | | | 客观题? |

表4.15 考试类别表(ExamType)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | ExamTypeID | bigint | | No | 考试类别ID |
| 2 | ExamTypeName| varchar | 16 | No | 考试类别名 |
| 3 | Range_ChapID| varchar | 48 | | 出题范围 |
| 4 | CourseID | varchar | 8 | | 课程ID |

表4.16 试题表(ExamSet)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | SubjectID | int | | No | 试题ID |
| 2 | SubjectTypeID | tinyint | | No | 题型ID |
| 3 | ChapID | int | | | 章ID |
| 4 | KpsID | int | | | 知识点id |
| 5 | DifficultyID | tinyint | | No | 难度ID |
| 6 | Subject | varchar | 7980| | 主题内容|
| 7 | ResultNum | tinyint | | | 答案个数 |
| 8 | Option1 | varchar | 688 | | 选项1 |
| 9 | Option2 | varchar | 688 | | 选项2 |
| 10 | Option3 | varchar | 138 | | 选项3 |
| 11 | Option4 | varchar | 138 | | 选项4 |
| 12 | Option5 | varchar | 138 | | 选项5 |
| 13 | Option6 | varchar | 148 | | 选项6 |
| 14 | Option7 | varchar | 138 | | 选项7 |
| 15 | Option8 | varchar | 138 | | 选项8 |
| 16 | Option9 | varchar | 138 | | 选项9 |
| 17 | Option10 | varchar | 138 | | 选项10 |
| 18 | Point | numeric(6, 1)| | | 分值 |
| 19 | ExamTypeID | bigint | | | 考试类型|
| 20 | AnswerToPars | varchar | 366 | | 解析 |

表4.17 考试参数表(ExamOption)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | ExamOptionID| int | | No | 考试参数id|
| 2 | CourseID | varchar| 8 | No | 课程ID |
| 3 | ExamTimes | tinyint | | 考试时间(分钟)|

表4.18 题型参数表(ExamSubjectType)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 |ExamSubjectTypeID| int | | No | 题型参数id|
| 2 | ExamOptionID | int | | No | 考试参数id |
| 3 | SubjectTypeID | int | | No | 题型ID |
| 4 | Points | tinyint| | | 该题型分值 |
| 5 | ExamCount | int | | | 题数 |
| 6 | ScorePerTopic | tinyint| | | 单题分值 |

表4.19 难度系数表(Option_Difficulty)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | ExamSubjectTypeID| int | | No | 试卷题型id|
| 2 | DifficultyID | tinyint| | No | 难度ID |
| 3 | Points | tinyint| | | 百分比 |

表4.20 考试状态表(TestStatus)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | TestStatusID | tinyint | | No | 考试状态id|
| 2 | TestStatus | varchar | 16 | | 考试状态 |

表4.21 考试命令表(ExamCommRecord)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | ECRID | bigint | | No | 考试命令id |
| 2 | ExamOptionID | int | | No | 考试参数id |
| 3 | ExamTypeID | bigint | | No | 考试类别ID |
| 4 | ExamDate | datetime| | | 考试起始时间|
| 5 | TeacherID | varchar | 8 | No | 教师ID |

表4.22 教学计划表(TeacherPlaning)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | TPID | bigint | | No | 教学计划id |
| 2 | TermID | int | | No | 学期ID |
| 3 | TeacherID | varchar | 8 | No | 教师ID |
| 4 | ClassID | varchar | 48 | | 班级列表 |
| 5 | CourseID | varchar | 8 | | 课程ID |
| 6 | TeachingClassTypeID| tinyint| | | 教学班类型 |

表4.23 考生账号表(UserAccount)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | UAID | bigint | | No | 考生账号id|
| 2 |UseraccountID| varchar | 16 | No | 考生ID |
| 3 | ECRID | bigint | | | 考试命令id |
| 4 | ClassID | varchar | 10 | | 学生班号 |
| 5 | CourseID | varchar | 8 | | 课程ID |
| 6 | TestStatus | tinyint | | | 考试状态 |
| 7 | TestType | tinyint | | | 考试类型 |
| 8 | TestOptionID| bigint | | | 试卷号 |
| 9 | ExamTypeID | bigint | | | 登录考试类型|

表4.24 学生表(Student)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | StudentID | varchar | 16 | No | 学生id |
| 2 |StudentName | varchar | 16 | No | 学生名 |
| 3 | ClassID | varchar | 10 | | 学生班号 |
| 4 | PassW | varchar | 16 | | 密码 |

表4.25 教学班表(TeachingClassStu)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 | TCSID | bigint | | No | 教学班id |
| 2 |UseraccountID| varchar | 16 | No | 考生ID |
| 3 | ClassID | varchar | 10 | | 学生班号 |
| 4 | CourseID | varchar | 8 | | 课程ID |
| 5 | TestStatus | tinyint | | | 考试状态 |
| 6 | TestType | tinyint | | | 考试类型 |
| 7 | TestOptionID| bigint | | | 试卷号 |
| 8 | ExamTypeID | bigint | | | 登录考试类型|

表4.26 试卷参数表(TestOption)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 |TestOptionID| bigint | | No | 试卷参数id |
| 2 | UAID | varchar | 16 | No | 考生ID |
| 3 | LoginDate | Datetime | | | 登录时间 |
| 4 |LoginClientIP| varchar | 18 | | 登录IP |
| 5 | UploadDate | datetime| | | 考试结束时间|
| 6 | UploadFile | varchar | 32 | | 上传文件路径|
| 7 | Score1 | numeric(6, 1)| | | 1类题型得分|
| 8 | Score2 | numeric(6, 1)| | | 2类题型得分|
| 9 | Score3 | numeric(6, 1)| | | 3类题型得分|
| 10 | Score4 | numeric(6, 1)| | | 4类题型得分|
| 11 |TotalScore| numeric(6, 1)| | | 考生得分 |
| 12 |ExamTypeID| tinyint | | | 考试类型ID |

表4.27 试卷表(ExamPaper)
| 序号 | 字段名称 | 字段类型 | 字段长度 | 是否为空 | 字段说明 |
| 1 |ExamID | bigint | | No | 试卷题id |
| 2 |TestOptionID| bigint | | No | 试卷参数id |
| 3 | SubjectID | int | | No | 试题ID |
| 4 | ItemPos | int | | No | 标准答案位置|
| 5 |StandardAnswer| int | | | 标准答案位置 |
| 6 |UserResult | varchar |680 | | 考生答案 |
| 7 |UserPoint| decimal(6,1)| | | 得分 |

(二)输入输出设计

(三)系统开发工具及环境

(四)系统界面及编码实现

1、前台
前台用于考生的练习和实际考试。在非考试时间,系统处于练习状态,此时考生登录就是练习;反之,就是实际考试。实际考试时,只有考试班级的考生才能登录参加考试,其他人无法进行登录,以保证实际考试的有序进行。
前台的设计有二部分组成:登录和考试界面:

图4-1 考试登录页面


图4-2 考试试卷页面-1

图4-3 考试试卷页面-2
设计思路:考生进入考试页面时,系统先从数据库的考试命令表中读取本课程的考试时间,与当前时间比较后,确定是考试或练习状态,并通过Label_Notes0控件显示,随后出现如图4-1所示的登录界面。练习状态下,考生可以随时登录;考试状态下,系统提前10分钟启动javascript进入考试倒计时,并通过Label_Notes2显示,此时考生登录按钮无效不能登录,倒计时结束后,javascript将登录按钮设置为有效,考生就可登录进入考试了。
登录后,系统先关闭登录区,开启答题区,随后系统根据设计的组卷参数,从试题库中随机抽取一份试卷后,显示在答题区,并启动另一个javascript根据考试参数表中设置的考试时间进入考试考试倒计时,每5分钟自动保存一下考生的答题数据,从而有效防止因断电、Windows死机或自动重启造成答题数据的丢失,考生也可随时单击“保存”按钮保存答题结果;考试过程中,中途学生可以退出考试系统,只要重新登录考试系统就可继续考试。
答题结束,若考试参数中存在主观题,考生需先通过试卷底部的文件上传框,选择一个包含主观题答题结果的压缩包,最后单击“交卷”按钮,考试系统将所有答题数据和压缩包保存后,提示“交卷成功”框后,考试结束。
相关设计页面如图4-4所示:

图4-4 试卷页面设计界面
关键实现代码:
(1) 登录

(2) 抽题

(3) 保存数据

2、后台
后台用于考试系统参数的设置和数据处理工作,起考试系统的保障作用。
要使用后台,先必须完成登录(如图4-5所示),以确定用户的身份和使用权限。系统设计了系统管理员、命题教师、教务秘书、教师四个角色,每个角色完成一定的管理工作。

图4-5 后台管理登录页面
相关关键代码:
系统后台使用一个菜单完成以下工作(如图4-6所示):

图4-6 后台管理菜单

(1) 班级信息的维护
班级信息管理页面由“基础数据”->”班级管理”进入,完成班级信息的添加、删除和修改。界面设计如下:

图4-7 班级管理设计页面
进入时,先在左边区域显示部门树清单,用户在其中单击一个专业,系统就将该专业的ID传递给页面,将该专业的班级信息从专业表中取出并显示在右边区域(GridView)中,每个学生显示一行学生信息,行尾显示有“修改”和“删除”超链接,如图4-8所示。

图4-8 班级管理界面
用户单击“修改”超链接,系统根据该班的ID从班级表中将班级信息取出后,送入“班级信息修改”信息框相应控件后,弹出“班级信息修改”信息框,如图4-9所示。

图4-9 班级信息修改页面
修改完毕,单击“修改”按钮,系统就将修改后的班级信息存入班级表中。
相关关键代码如下:

(2) 考生信息的维护
考生信息管理页面由“基础数据”->”考生管理”进入,完成考生信息的添加、删除和修改。界面设计如下:

图4-10 考生管理界面
实现原理与(1)大致相同,只是数据表不同而已,但在上部增加了一个按“学号”等的查询,在此就不详细说明了。
(3) 课程信息的维护
课程信息管理页面由“基础数据”->”课程管理”进入,完成课程信息的添加、删除和修改。界面设计如下:

图4-11 课程管理界面

(4) 知识点信息的维护
知识点信息管理页面由“基础数据”->”知识点信息”进入,完成知识点信息的添加、删除和修改。界面设计如下:

图4-12 知识点管理界面

(5) 考生数据导入
考生数据导入页面由“基础数据”->”考生数据导入”进入,完成从Excel文件导入考生数据的工作。界面设计如下:

图4-13 考生数据导入界面
只有系统管理员和教务秘书才能进入“考生数据导入”模块。
进入时,先在上边显示一个文件上传框,如图4-14所示:

图4-14 数据导入初始页面
通过“选择文件”按钮,弹出“打开”对话框,选择一个包含有考生数据的Excel文件,如图4-15所示:

图4-15 选择上传文件页面
选择含有考生数据的Excel文件,单击“打开”按钮,确认上传该文件。随后单击其后的“导入”按钮,系统先检测上传文件的合法性,如合法,系统就将该Excel文件中的数据读取后,显示在上部的GridView控件中,对存在系统冲突(专业或班级不一致)的数据,显示在下部的GridView控件中,如图4-16所示:

图4-16 导入的考生数据
如下部的GridView控件中存在与系统冲突的数据,则根据系统提示修改后,继续进行导入,直到不存在冲突即可。
相关实现代码如下:

(6) 题型的维护
题型管理页面由“基础数据”->”题型维护”进入,完成题型信息的添加、删除和修改。界面设计如下:

图4-17 题型管理界面

(7) 学期参数管理
该模块用于设计学期参数,由系统管理员或教务秘书设置完成。一门课程需要在不同学期面向不同班进行考试,因此需要在新学期前添加学期信息,并确认该学期是否为当前学期。界面设计如下:

图4-18 学期参数管理界面
该模块由“考试环境”->”学期参数管理”进入。进入后出现已存在的学期信息,当新学期不存在时,就需要添加。单击上部的“添加”按钮,系统在页面中央弹出空白学期信息窗口,将新学期的信息填写好,并选勾“当前学期”复选框后,单击“添加”按钮即可完成。
(8) 教学班管理
教学班创建由系统管理员、教学秘书、教师完成,但教师只能完成教师本人的任教课程。
由正常物理班组成的教学班,在下节的教师任课安排中直接创建,不必单独创建。
由选修组成的教学班(选修、补考、重修等),由“教学计划管理”->”虚拟班/补考/选修/重修管理”进入,从Excel导入而创建。界面设计如下:

图4-19 创建虚拟班界面
进入页面时,在“请选择Excel文件路径”后的文件选择框中通过“选择文件”按钮,选择一个含有教学班学生名单的Excel文件,单击右测的“导入”按钮,系统将Excel文件中的教学班名单读入后,显示在GridView中,如图4-20所示:

图4-20 需导入的教学班学生名单显示页面
导入的学生名单的每人尾部都有一个复选框,打勾表示需要导入。在“任教班级类别”选择教学班的类型:补考、重修或选修,在“任课教师”列表框中选择一个任课教师,在“选修/补考/重修班名”后的输入框中输入教学班的名称后,单击“确定”按钮,系统先自动生成一个教学班的班号,并将该教学班插入班级Class表中,最后将选中的学生插入到教学班级学生名单TeachingClassStu表中,完成一个教学班的创建。同时,也完成了该教学班的任课工作。

(9) 教师任课安排
教师任课安排用于教师任教班级的确定和删除。界面设计如下:

图4-21 教师任课安排界面
该模块由“教学计划管理”->”任课教师管理”进入,选择若干个物理班就可完成教学班级的创建。界面的左测是一棵教师树,显示有全校各个学院的所有教师。单击某一教师姓名,则在右测显示出该教师本学期的所有任教班级,在上部的“课程”组合框中选择一门课程,则在右测下部显示该教师还可以任教的班级,如图4-22所示:

图4-22 可选择的物理班页面
在组成教学班的物理班级前的方框中打勾后,单击页面底部的“确定”按钮,就可完成教学班的创建,并向教学班表TeachingClassStu插入选择班的学生名单,如图4-23所示:

图4-23 创建的教学班
单击任教教学班的行尾的“删除”超链接,就可删除一个教学班。
相关关键代码如下:

(10) 考试类型管理
该模块确定本系统的考试类型。本系统默认有:期中、期终、补考、重修、选修等类型,同时设置各考试类型的考试范围。界面设计如下:

图4-24 考试类型管理界面
该模块由“考试环境”->”考试类型管理”进入。界面的上部是课程组合框,从中选择一门要设计考试类型的课程,选择完成后,单击其后的“查询 ”按钮,系统从考试类型表中取得该课程的考试类型,填充到下部的GridView中,如图4-25所示:

图4-25 课程的考试类型页面
在该页面,每个类型后,有一个“修改”超链接,单击可以修改该类型的考试范围等参数。
(11) 组卷参数管理
该模块确定试卷的题型及各题型的题数及难度分配,界面设计如下:

图4-26 组卷参数管理界面
该模块由“考试环境”->”组卷参数管理”进入。界面的上部是课程组合框,从中选择一门要设计考试类型的课程,选择完成后,单击其后的“查询 ”按钮,系统从考试类型表中取得该课程的考试类型,填充到下部的GridView中,如图4-27所示:

图4-27 组卷参数管理页面
一门课最后根据需要设置好几类组卷参数,用于完成不同的考试任务。通过“添加”按钮,可以创建一类新的组卷参数;单击每类组卷参数行尾的“修改”超链接,可以修改该类的组卷参数,如图4-28所示:

图4-28 组卷参数修改页面
修改“整场考试时间”、“第一部分考试时间”(即为客观题所设定的限制时间)。
若“截止时间有效”(如本试卷没有主观题,则设置为“否”,表示系统不使用“第一部分考试时间”为限。若有主观题,则可设置为“是”,表示前一部分的主观题必须在“第一部分考试时间”限制时间内完成,限制时间一到,则第一部分的客观题就不能再答题了;也可以设置为“否”,表示客观题答题时间没有限制)。
若“是否本场考试”为否,则表示该类组卷参数当前没有使用;否则系统在生成一份试卷时就以该类组卷参数设定的值进行抽题。一门课中的各类组卷参数中其中一类的“是否本场考试”必须设置为“是”。
下部的GridView中显示有该类组卷参数中使用的题型、出题数及难度分配。可以通过一部的“添加题型”添加一种新的题型;单击某一题型后的“修改”超链接,可以修改该题型的出题个数,所占分值以及难度分配,如图4-29所示:

图4-29 题型参数修改页面
修改题型、该题型分值、题数及各难度题数(应知应会、提升级、较难级、难级、很难级的题数),修改完成后,单击“修改”按钮,将该题型的参数存入组卷参数表。
所有题型参数修改完毕后,在图4-28中单击“修改”按钮,将该类组卷参数存入组卷参数表。
相关关键代码如下:

(12) 考试命令发布
该模块确定各教学班的考试时间,界面设计如下:

图4-30 考试命令发布界面
该模块由系统管理员、教务秘书负责管理。使用时由“考试环境”->”考试命令发布”进入。先在页面的上部选择“考试类型”后,系统从考试命令表中将本学期还没有安排过该考试类型考试的所有教学班提取后,添加到下部的Table中,如图4-31所示:

图4-31 考试教学班的确定页面
下部的Table中,按学院显示了所有可以参加该类考试的所有教学班,每个教学班的行尾有一个复选框,打勾表示该教学班参加该场考试。教学班选择完毕后,在上部的“考试开始时间”输入框中输入选中教学班的考试时间,最后单击“确定”按钮,考试命令发布完成,系统向考试命令表添加一个考试命令,并将涉及的教学班的考生添加到考生账号表UserAccount,供考生考试时登录使用。
反复几次,就可将某一考试类型的所有教学班的考试时间发布。考试命令发布后,相关考生就可在规定的时间通过系统前台参加考试了。
相关关键代码如下:

(13) 考试情况监控
考试情况监控用于对考生的考试情况进行监控,明确考生进行考试的情况和考试状态(未进入考试、考试中、结束考试),界面设计如下:

图4-32 考试情况监控界面
监考教师登录后,由“考试情况”->”考试情况监控”进入。先在“考试场次”后的列表框中选择要监控的考场后,单击其后的“查询”按钮,系统通过考试命令表ExamCommRecord和UserAccount中查询出该时段的所有考试班级及学生,显示在下部的GridView中,如图4-33所示:

图4-33 选择监控班级页面
在上述表格中显示有各班考试的统计情况。单击行尾的“详细”超链接,系统将该班级的ID及考试命令ID传递给监控页面,如图4-34所示:

图4-34 监控页面
在该页面中,显示出该考场中所有考生的考试情况。每行显示一位考生的考试情况:首次登录时间、考试机IP、试卷号、考试状态及上传压缩包等项,对于有主观题的考试,考试结束后,正常情况下“上传压缩包”项就应显示“有”,否则说明考生上传压缩包失败,需要学生再登录上传压缩包。
单击行尾的“详细”,就可看到该考生的考试试卷和答题情况。
(14) 考试成绩管理
考生结束后,系统自动对客观题进入自动批阅,将考生答题卷生成Word试卷,供老师批阅,界面设计如下:

图4-35 考试成绩管理界面
任课教师登录后,由“考试情况”->”考试成绩管理”进入。如图4-36所示:

图4-36 考试成绩管理页面
在“考试班级”组合框中选择自己的考试班级,单击其后的“查询”,系统使用与该教学班考试相关的考试命令ID、教学班ID等参数通过多表查询从试卷表ExamPaper取出该教学班的考生答题数据,并计算出每个考生每种题型(不含主观题)的小计分和总分后,显示在下部的GridView中,如图4-37所示:


图4-37 教学班考生考试成绩页面
通过右上角的“输出到Excel”按钮,将该教学班的考试成绩存入到指定的Excel文件中保存,供教师处理考生总分;通过下部的“下载上交程序压缩包”超链接,下载该教学班考生上交的主观题压缩包(注:试卷中含有主观题时有该超链接);单击底部的“生成试卷”按钮,系统将给该教学班的每位考生生成一个考试试卷Word文件,并自动将该教学班考生Word试卷文件打包后,供用户下载。
单击表中行尾的“详细”超链接,系统就从试卷表中将该考生的试卷和答题及得分情况显示出来,供教师核对,如图4-38所示:

图4-38 考生考试试卷及答题情况显示页面
相关关键代码如下:

(15) 考生平时练习情况统计
该模块作为平时成绩的一部分,对考生的平时练习情况进行统计,导出考生平时练习的成绩。

该系统已在浙江树人学院使用10多年,考试课程有《Python程序设计应用》、《VB程序设计》、《统计学》、《基础会计》、《企业税收实务》、《财务会计》、《市场调研与预测》等课程,使用效果良好。有需要交流的同行,可加微信13646864818联系交流。

相关文章推荐

发表评论