1.考试系统模块
考生登录进入考试系统后,开始进行考试,所设计的考试系统中主要包括阅读考试规则,选择考试科目,随机抽取试题,答题计时器以及自动交卷并评分等功能在开发考试系统过程中,如何将试题显示在页面上,如何将试题从数据库中读取出来,一般是将所有试题信息存储在数据库中,然后随机抽取若干试题,动态的显示在页面中。考生答卷完毕后要对考生的答案评分,在线考试系统加入了自动评分模块,当考生答题完毕提交试卷后,系统会根据考生选择的答案与正确答案进行比较,最后进行评分。
2.考试科目选择
在抽取试题之前要进行考试科目的选择,根据考生选择的科目对数据库进行检索,查看数据库中是否有相关的试题,如果存在试题则随机抽取试题,否则提示考生选择的考试科目在数据库中没有试题,开始考试按钮的Click事件代码如下
{
string StuID = Session["ID"].ToString(); //考生的编号
string StuKC = ddlKm.SelectedItem.Text; //选择的考试科目
SqlConnection conn = BaseClass.DBCon(); //连接数据库
conn.Open();
SqlCommand cmd = new SqlCommand("select count(*) from tb_score where StudentID='" + StuID
+ "' and LessonName='" + StuKC + "'", conn); //执行SQL语句
int i = Convert.ToInt32(cmd.ExecuteScalar()); //获取返回值
if (i > 0) //如果返回值大于0
{
MessageBox.Show("已参加过此科目的考试");
}
else
{
cmd = new SqlCommand("select count(*) from tb_test where testCourse='" + StuKC + "'",
conn);
int N = Convert.ToInt32(cmd.ExecuteScalar()); //获取返回值
if (N > 0) //如果返回值大于0
{
cmd = new SqlCommand("insert into tb_score(StudentID,LessonName,StudentName)
values('" + StuID + "','" + StuKC + "','" + lblName.Text + "')", conn);
cmd.ExecuteNonQuery();
conn.Close(); //关闭连接
Session["KM"] = StuKC;
Response.Write("<script>window.open('StartExam.aspx','newwindow','status=1,scrollbars=1,re
sizable=1')</script>");
Response.Write("<script>window.opener=null;window.close();</script>");
}
else
{
MessageBox.Show("此科目没有考试题"); //弹出提示信息
return;
}
}
}
3.考试题目抽取
在数据库试题表中存储的主键是具有自己填写规则的字符串,在抽取试题时,将所有的单选、多选、判断分别存到三个集合中,然后使用随机数工具类,要求不同题型多少道就获取多少不重复的随机数,然后分别在集合中获取试题。这种方式较笨重,但删除操作不会造成任何影响,适合题量较少、经常修改的考试系统。
4.进入考试界面
进入考试界面,该套试题是根据该课程的试卷结构在试题库中随机选择。考试时间为试卷的结束时间减去开始时间为考试的总时长。学员进入考试界面时,不能随意退出,只能交卷结束考试;如果强制退出,本次考试结束。如果考试过程出现异常(电脑异常,网络异常)等导致本次考试结束,可以由后台教员进行修改考生状态,进入学员考试。考试界面只显示一个考试试题,考试试题从后台教员老师发布的试题卷中获取,考试试题可以通过点击按钮“上一题”或“下一题”进行翻页,或者通过界面上的试题序号直接跳转到指定题号的试题进行作答。正在作答呈蓝色,已经完成作答的试题号呈绿色,未作答的题号呈白色。考试时间倒计时。
5.交卷评分
在考试页面中会有计时器功能,通过JavaScript脚本可以实现,考生答题完毕后,单击交卷功能,提交试卷,此时系统会将该考生的答题结果提交给自动评分模块,该模块对考生答案进行评分,并将考生的成绩添加到数据表中。