在线试题库系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.可行性研究
2.1系统开发的目的和意义
随着网络技术的飞速发展,现在很多国外的大学和社会其他部门都已经开设了远程教育,通过计算机网络实现异地教育和培训。当前,计算机硬件技术的发展已经达到了相当高的水平。但是,远程教育软件的开发目前还处于起步阶段,随着这项技术的不断深入发展,就要求有更好、更完善的软件系统应用到远程教育当中去,这就给软件设计人员提出了更高的设计要求。
在线考试是现阶段研究开发的一个热点。它是建立在国际互联网上的应用系统,客户端的配置可以极为简单,使考试不受地域的局限。一个完备的在线试题库系统可以使用户在网上学习过后及时检验自己的学习效果,并发现自己的不足,使得学习效率得到很大提高。考试系统中题目的生成、试卷的提交、成绩的批阅等都可以在网络上自动完成。只要形成一套成熟的题库就可以实现考试的自动化,这样一来,教师所要做的只是精心设计题目、维护题库,而不是组织考试,从而大大减轻了教师的负担,这表明其经济性是相当可观的。
2.2技术可行性
目前,网络应用软件运行的模式主要有两类:C/S模式,B/S模式。C/S模式简单地讲就是基于企业内部网络的应用系统。它和B/S模式相比最大的好处是不依赖企业外网环境,即无论企业是否能够上网,都不影响应用。但是它也有很多缺点,他必须安装客户端,势必造成维护、升级的麻烦。而B/S模式则解决了这一问题,B/S模式是通过互联网来实现的,它何以随时随地的进行查询和浏览业务,维护简单,只需改变网页,即可实现所有用户的同步更新,开发简单,共享性强。所以大多数软件都采用B/S模式。服务器端采用SQLServer数据库系统和微软最新的.net平台及技术来构成考试的应用服务系统;客户端采用浏览器来完成考试全过程,同时可进行远程系统维护和管理。
3.需求分析
本系统主要针对老师出题和学生考试而设计,传统的考试都是首先由老师出题之后在组织考试、阅卷和发布成绩,这样做就导致大量的人力、物力和时间的浪费,而且准确性也不高。为了克服这些问题,我们将设计在线试题库系统,将这一切在网上进行,实现在线考试和自动阅卷,方便管理和操作。解放老师的劳动力,方便学生自我检测。
3.1软件的设计目标
3.1.1设计目标
系统应建立友好的界面,既要操作简单、直观、灵活,又要易于学习掌握。系统非为前台和后台两个部分,前台主要实现用户的登录、注册,信息的修改,学生的在线考试,可以选题、答题、自动阅卷等功能;后台主要实现对试题的管理,对用户的
管理,和试题的录入等问题。
3.1.2基本要求
首先用户登录,如果登陆成功则系统检测用户类型,用户类型分两种:普通用户和管理员。普通用户登陆后只能进行在线答题和个人信息管理,在线答题可以选择科目,可以显示和隐藏答案提示,模拟测试后可以重做答错的题。管理员身份登录功能较多,除了以上功能外,还可以进行科目、试题和用户信息的管理,管理员可以增加、删除、修改科目和试题,还可以删除和修改用户信息,增加用户在用户功能中完成。
我们可以把以上概述分为以下几个功能。
1)用户注册
2)在线答题
3)科目管理功能
4)试题管理功能
5)用户管理功能
6)个人信息管理
3.2系统开发工具介绍
SQL Server 是一个后台数据库管理系统,它功能强大操作简便,日益为广大数据库用户所喜爱,越来越多的开发工具提供了与SQL Server的接口。SQL Server 是一个关系数据库管理系统,它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的。于1988 年推出了第一个OS/2 版本,在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统的最新版本,该版本继承了SQL Server 7.0 版本的优点,同时又比它增加了许多更先进的功能、具有使用方便、可伸缩性好与相关软件集成程度高等优点。SQL Server不但可以应用于大中型数据库管理中,建立分布式关系数据库,并且也可以开发桌面数据库。事实上,SQL Server数据库处理的基本结构,采取关系型数据库模式,尽管如此,相信大家都可以轻易的发现,在SQL Server的数据库处理方式,则是使用面向对象的操作理念与实践精神。也就是说,SQL Server的所有功能都可以基于系统已经建立好的一些对象来达成功能,是相当O(面向对象)的一个系统结构。SQL Server企业管理器是SQL Server 的主要管理工具,它提供了一个遵从MMC标准的用户界面,使用户得以定义SQL Server实例组。将个别服务器注册到组中。为每个已注册的服务器配置所有SQL Server选项。在每个已注册的服务器中创建并管理所有SQL Server数据库、对象、登录、用户和权限。在每个已注册的服务器上定义并执行所有SQL Server管理任务。通过唤醒调用SQL查询分析器,交互地设计并测试SQL语句、批处理和脚本。唤醒调用为SQL Server定义的各种向导。
C#(C Sharp)是微软(Microsoft)为.NET Framework量身订做的程序语言,C#拥有C/C++的强大功能以及Visual Basic简易使用的特性,是第一个组件导向(Component-oriented)的程序语言,和C++与Java一样
亦为对象导向(object-oriented)程序语言。C sharp(又被简称为"C#")是微软公司在二OOO年六月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。
3.3系统总体设计
3.3.1系统结构设计
本系统的结构主要分为三个部分,用户的注册,普通用户(即学生),管理员(即老师)。普通用户通过登录到普通用户界面,在此界面可以进行在线答题,和个人信息修改。管理员通过登录可以进行在线答题,用户管理,科目管理和试题管理。
3.3.2系统结构图
图 3.1 系统结构图
3.4系统流程图
本系统用户分为管理员和学生,在登陆后会进入相应的管理页面,流程图如下:
图 3.2 总流程图
图 3.3 学生操作流程图
图 3.4 管理员操作流程图
4.数据库设计
作为网络的一个重要应用,数据库在网站建设与网站营销中发挥着重要的作用,与普通网站相比而言,具有数据库功能的网站和网页我们通常称之为动态页面,也就是说页面不是一成不变的,页面上内容(或部分内容)是动态生成的,可以根据数据库中的相应部分内容的调整而发生变化,使网站内容更灵活,维护更方便,更新更便捷。所以数据库设计是项目开发中的一个非常重要的环节,数据库设计的好坏直接影响到系统的效率和实现效果。数据库设计主要在于表的设计及各个表之间的关系设计。
4.1概念设计
概念结构设计是整个数据库设计的关键,它通过E-R图来表示实体(即数据对象)、属性和联系的方法,用来描述现实世界的概念模型。在此我们用E-R图来表示数据之间的关系。
图 4.1 角色信息E-R图
图 4.2 用户信息E-R图
图 4.3 课程信息E-R图
图 4.4 试题信息E-R图
图 4.5 填空题信息表
图 4.6 判断题信息表
4.2逻辑设计
经过分析初步确定在数据库中分别建立用户信息表、角色信息表、选择试题信息表填空题信息表、判断题信息表、课程信息表等六张表,如下所示:
roleID(roleID,roleName)
question(questioneID,courseID,qusetionContent,answer1,answer2,answer3,answer4,rightAnswer)
course(courseID,courseName,temp1,temp2)
user(username,password,sex,userIdentity,Email,roleID)
pamduan(panduanID,course,panduanContent,Answer)
tiankong(tiankongID,coursed,tiankongContent,Answer)
4.3数据字典
利用数据字典,可以进一步描
述数据流图中的相关元素。下面列出了数据字典。
名称 角色信息表
别名 角色信息
描述 用户角色信息,用于区分用户的操作权限
定义 角色信息=角色编号+角色名
位置 保存在数据库中 名称 用户信息管理
别名 用户信息
描述 用户角色信息,用于记录用户的基本信息
定义 用户信息=用户名+密码+性别+身份证号码+电子邮件
位置 保存在数据库中
名称 课程信息管理
别名 课程信息
描述 用于管理课程信息
定义 课程信息=课程编号+课程名
位置 保存在数据库中 名称 选择题试题表
别名 选择试题
描述 用于对选择题的查询
定义 选择题信息=题号+题干+答案+正确答案
位置 保存在数据库中
名称 填空题试题表
别名 填空试题
描述 用于对填空题的查询
定义 填空题信息=题号+题干+正确答案
位置 保存在数据库中 名称 判断题试题表
别名 判断试题
描述 用于对判断题的查询
定义 判断题信息=题号+题干+正确答案
位置 保存在数据库中
4.7 数据字典
4.4物理设计
本系统共有六张表,角色表(roleID)主要存放角色信息,用户表(user)存放用户信息,选择试题表(question)存放试题信息,判断信息表(pamduan),填空信息表(tiankong),课程表(course)存放课程信息。详细设计分别为下表所示:
表4.1 角色信息表
字段 类型 字段长度 是否为空 是否为主键 说明
roleID Int 自增长 否 主键 角色编号
roleName Varchar 20 否 否 角色名
表4.2 用户信息表
字段 类型 字段长度 是否可为空 是否为主键 说明
UserName Varchar 50 否 主键 用户名
Password Varchar 50 否 否 密码
Sex Varchar 2 可以 否 性别
Useridentity Varchar 20 可以 否 身份证号码
E-mail Varchar 50 可以 否 电子邮箱
roleID Int — 否 外键 角色编号
表4.3 课程信息表
字段 类型 字段长度 是否为空 是否为主键 说明
CourseID Int 自增长 否 主键 课程编号
courseName Varchar 50 否 否 课程名
Temp1 Varchar 100 可以 否 备用字段1
Temp2 Varchar 100 可以 否 备用字段2
表4.4 选择试题信息表
字段 类型 字段长度 是否为空 是否为主键 说明
questionID Int 自增长 否 主键 题号
courseID Int — 否 否 课程编号
questionContent Varchar 500 可以 否 题干
answer1 Varchar 100 可以 否 A答案
answer2 Varchar 100 可以 否 B答案
answer3 Varchar 100 可以 否 C答案
answer4 Varchar 100 可以 否 D答案
rightAnswer Varchar 50 否 否 正确答案
表4.5 判断试题信息表
字段 类型 字段长度 是否为空 是否为主键 说明
panduanID Int 自增长 否 主键 题号
courseID Int — 否 否 课程编号
panduanContent Varchar 500 可以 否 题干
Answer Varchar 50 否 否 正确答案
表4.6 填空题信息
表
字段 类型 字段长度 是否为空 是否为主键 说明
tiankongID Int 自增长 否 主键 题号
courseID Int — 否 否 课程表号
TiankongCentent Varchar 500 可以 否 题干
Answer Varchar 50 否 否 正确答案
对应的数据库创建语句如下:
create table [roleID]
(
roleID int identity(1,1) primary key,
roleName varchar(20)
)
Go
create table [user]
(
userName varchar(50) primary key,
password varchar(50) not null,
sex varchar(2),
userIdentity varchar(20),
Email varchar(50),
roleID int foreign key references roleID(roleID)
)
Go
create table [course]
(
courseID int identity(1,1) primary key,
courseName varchar(50) not null,
temp1 varchar(100),
temp2 varchar(100)
)
Go
create table [question]
(
questionID int identity(1,1) primary key,
courseID int foreign key references course(courseID),
questionContent varchar(500) not null,
answer1 varchar(100),
answer2 varchar(100),
answer3 varchar(100),
answer4 varchar(100),
rightAnswer varchar(50) not null
)
Go
create table [pamduan]
(
panduanID int identity(1,1) primary key,
courseID int foreign key references course(courseID),
panduanContent varchar(500) not null,
Answer varchar(50) not null
)
Go
create table [tiankong]
(
tiankongID int identity(1,1) primary key,
courseID int foreign key references course(courseID),
tiankongContent varchar(500) not null,
Answer varchar(50) not null
)
Go
5.系统实现
系统框架和数据库设计完成之后,就可以开始进行系统的实现了,本系统采用Visual Studio 2008 作为开发环境,Dreamweaver作为辅助工具。下面将具体介绍在线试题库系统的设计过程。
5.1 登录模块
新建登录模块页面Login.aspx,可以使用dreamweaver编辑编辑页面结构,并加入必要的控件。
表5.1 登陆页面“Login.aspx”中添加的控件及属性设置
控件ID 控件类型 属性 值
txtName TextBox ID txtName
Txtpassword TextBox ID txtPassword
tfvPassword
RequiredFieldValidator ID rfvName
ControlToValidate txtName
ErrorMessage *
rfvPassword
RequiredFieldValidator ID rfvPassword
ErrorMessage *
ControlToValidator txtPassword
btnLogin Button ID btnLogin
Text 登录
btnRegist
Button ID btnRegist
Text 取消
Causeslidation false
在Login.aspx.cx文件中添加代码,主要分为连接数据库对用户名进行判断和将用户信息存入Session中。
5.2注册页面
创建注册页面Regist.aspx,此页面中的控件众多,在这里主要采用Regular*控件对用户输入的信息进行判定,需要注意的有:
1) 验证控件Regular*的ControlToValidator属性需设置为相对应的TextBox的值;
2) 用户名、身份证和邮箱验证需用到正则表达式分别为^[\w\d]{4,16}$(用户名长度为4-16位) \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(邮箱的格式)\d{17}[\d|X]|\d{15}(身份证长度为15或18位
);
3) 性别控件RadioButton应设置在同一个group中
图 5.1 注册流程图
5.3系统主页面
用户登录以后就可以进入主页面了,不同类型的用户登录,页面呈现的功能不同,普通用户只能在线答题和修改个人信息;管理员则可以进行科目管理、试题管理和让用户管理。
主页面采用框架式结构设计,把页面分为上、下、左、右四个部分。框架页面无法使用设计视图,只能使用源视图进行设置。主界面连接的四个页面,分别是“top.htm”、“Left.aspx”、“Welcome.htm”、“Bottom.htm”。“top.htm”页面中放置本网站的log;“Welcome.htm”页面显示用户刚登陆时的页面;“Bottom.htm”页面为本网站的信息;“Left.aspx”页面要根据不同类型的登录用户显示不同连接以实现不同的功能。“Left.aspx”的设计如图所示:
图 5.2 “Left.aspx”页面的设计视图
页面中只有3个控件:1个Lable和2个Table。Lable控件显示登录用户名,Table1控件在管理员登陆时显示,Table2控件在普通用户登录时显示。
5.4在线考试模块
在线考试模块(ShowQuestion.aspx)是本系统的核心模块,无论管理员还是普通用户都可以进行在线测试。在此页面中选择不同的试题进行测试,也可以显示或者隐藏答案提示。本系统的试题都采用单选题的模式,答题完毕后交卷即可显示答案正误情况,可以重新答答错了的题,也可以重新回答所有问题。
在线考试页面的设计视图如下:
图 5.3在线考试页面的设计视图
接下来通过编辑DataList控件的ItemTemplate模板显示数据。首先在代码隐藏文件“ShowQuestion.aspx.cs”的Page_Load中编写代码,实现页面第一次加载时,将DataList控件绑定到数据源。另外DropDownList控件要显示的科目名称也要从数据库中提取,同样需要绑定数据源。
在ItemTemplate模板中添加控件属性设置如下表所示:
表5.2 DropDownList中控件的属性以及值
控件ID 控件类型 属性 值
lblQuestionContent Lable ID lblQuestionContent
rbtn1 RadioButton ID Rbtn1
GroupName gnSelect
Rbtn2 Radiobutton ID Rbtn2
GroupName gnSelect
Rbtn3 Radiobutton ID Rbtn3
GroupName gnSelect
rbtn4 Radiobutton ID Rbtn4
GroupName gnSelect
lblAnswer
Lable ID lblAnswer
ForeColor Red
Visible False
表5.3 对ItemTemplate模板添加对应的绑定表达式
控件ID 绑定表达式
lblQuestionContent "第"+((Container.ItemIndex+1)+ "题: "+DataBinder.Eval(Container.DataItem,"questionContent"))
Rbtn1 "A: "+DataBinder.Eval(Container.DataItem,"answer1")
Rbtn2 "B: "+DataBinder.Eval(Container.DataItem,"answer2")
Rbtn3 "C: "+DataBinder.Eval(Container.DataItem,"answer3")
Rbtn4 "D: "+DataBinder.Eval(Container.DataItem,"answer4")
lblAnswer "正确答案:"+DataBinder.Eval(Container.DataItem,"rightAnswer")
5.5
科目管理模块
拥有管理员权限的用户才可以进入科目管理模块(SubjectManagement.aspx)。在科目管理模块中除了显示已有的科目外,还要实现增加更改删除科目。因科目总数有限,无需查找功能。设计视图如下:
图 5.4 科目管理模块设计视图
为了在GridView中显示科目,还需要绑定数据,首先在代码隐藏文件中编写实现页面第一次加载时将GridView控件绑定到数据源,然后将数据库中的数据绑定到GridView控件,接着为GridView控件分别添加RowEditing、RowUpdating、RowCancelingEdit、RowDeleting事件,这些事件分别在单击编辑更新取消删除时发生,为防止用户操作失误删除科目,在删除时应提示是否删除,这个事件在RowDataBound事件中编写代码,实现对删除操作的判定
5.6试题管理模块
拥有过管理员权限才可进入试题管理模块(QuestionManagement.aspx),设计图如下:
图 5.5 试题管理模块设计视图
首先要实现对第一次加载该页面时的绑定数据,然后对GridView控件进行绑定代码,接着对修改和删除事件添加相应代码,修改和增加页面用同一个页面(AddQuestion.aspx)。修改时要将数据传入AddQuestion.aspx页面。代码如下:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
string courseID = ddlCourseName.SelectedValue.ToString();
string questionID = GridView1.Rows[e.NewEditIndex].Cells[0].Text.ToString().Trim();
string questionContent = GridView1.Rows[e.NewEditIndex].Cells[1].Text.ToString().Trim();
string a1 = GridView1.Rows[e.NewEditIndex].Cells[2].Text.ToString().Trim();
string a2 = GridView1.Rows[e.NewEditIndex].Cells[3].Text.ToString().Trim();
string a3 = GridView1.Rows[e.NewEditIndex].Cells[4].Text.ToString().Trim();
string a4 = GridView1.Rows[e.NewEditIndex].Cells[5].Text.ToString().Trim();
string rightAnswer = GridView1.Rows[e.NewEditIndex].Cells[6].Text.ToString().Trim();
string str = "AddQuestion.aspx?courseID=" + courseID + "&questionID=" + questionID + "&questionContent=" + questionContent + "&a1=" + a1 + "&a2=" + a2 + "&a3=" + a3 + "&a4=" + a4 + "&rightAnswer=" + rightAnswer;
Response.Redirect(str);
}
AddQuestion.aspx页面的设计视图如下:
图 5.6 增加试题模块设计视图
在AddQuestion.aspx.cs中编写代码,将修改前的信息加载到页面上。
因为增加和修改页面在同一个页面中完成,所以页面中的确定button要实现增加和修改两个功能,事件代码如下:
protected void btnOK_Click(object sender, EventArgs e)
{
string courseID = ddlCourseName.SelectedValue;
string questionContent = txtQuestion.Text.Trim();
string a1 = txtA.Text.Trim();
string a2 = txtB.Text.Trim();
string a3 = txtC.Text.Trim();
string a4 = txtD.Text.Trim();
string rightAnswer = rblAnswer.SelectedItem.Text;
string connectionString = "server=.;Initial Catalog=WebTest;Integrated Security=True";
string sqlString;
if (Request.Params["courseID"] == null)//添加
{
sqlString = "insert into question(courseID, questionContent, answer1, answer2, answer3, answer4, rightAnswer) values(" +
courseID + ",'" + questionContent + "','" + a1 + "','" + a2 + "','" + a3 + "','" + a4 + "','" + rightAnswer + "')";
}
else //修改
{
sqlString = "update question set courseID = '" + courseID + "',questionContent = '" + questionContent +
"',answer1= '" + a1 + "', answer2='" + a2 + "', answer3='" + a3 + "', answer4='" + a4 + "', rightAnswer='" +
rightAnswer + "' where questionID='" + Request.Params["questionID"] + "'";
}
SqlConnection con = new SqlConnection(connectionString);
SqlCommand com = new SqlCommand(sqlString, con);
con.Open();
com.ExecuteNonQuery();
con.Close();
Response.Redirect("QuestionManagement.aspx");
}
protected void btnCancel_Click(object sender, EventArgs e)
{
Response.Redirect("QuestionManagement.aspx");
}
5.7用户管理模块
用户管理模块只有一个GridView控件直接为其编写页面加载代码和事件代码即可,在这里主要是更新用户信息的实现比较难。
5.8个人信息修改模块
此模块为普通用户登录后显示的模块,可进行用户的个人信息修改,此页面与用户注册页面非常相似,只有两点不同:一是用户名不能修改,要将所有显示用户名的textBox的Enable属性设置为false,二是为了确定操作者的身份,修改个人信息时要输入原用户名密码,这里设置了一个CustomValidator用户自定义验证控件,将Custom validator控件的ID的属性设置为cvOldPassword,ContortionlToValidate属性设置为txtOldPassword,ErrorMessage属性设置为“原密码不正确”。
最后实现确定修改和取消修改事件,双击进入隐藏代码文件编写Click事件