资源描述
在线考试系统
泉 州 师 范 学 院
毕业论文(设计)
题目 基于ASP.NET的在线考试系统
继续教育 学院 计算机科学 系
计算机科学与技术 专业 09 级 班
学生姓名 xxx 学号 xxxxxx
指导老师 xxx 职称 讲师
教务处 制
基于ASP.NET的在线考试系统
继续教育学院 计算机科学与技术专业 xxxxxx xxx
指导教师 xxx 讲师
【摘 要】: 本系统充分利用学校现有的计算机软,硬件资源以及网络资源,实现无纸化考试,避 免了传统考试中的不足. 本文以 Internet 为平台, 研究了基于 Web 考试系统的设计与实现, 包括系统需求分析,系统功能设计,数据库设计以及系统功能的实现,应用的技术主要有 动态网页技术和数据库技术.系统实现下列功能:考生基本资料管理,题库管理,试卷管 理,成绩管理以及学生在线考试等功能.此网上考试系统可以随机生成考试试卷,有强大 的题库管理功能,可以进行试题的增加,修改,删除操作;随机组卷,管理员设定试卷的开始时间等参数,系统按照预定的参数从题库中随机抽取试题,组成多套试题,使所有学生使用不同的试卷,这样可以防止考试作弊的现象。
【关键词】: 在线考试系统 随机生成试卷 B/S Asp.Net
目 录
引言 1
第一章 所用开发语言及技术平台简介 2
2.1 Microsoft Visual Studio 2005 介绍 2
2.2 Microsoft Visual Studio 2005具有的优点 2
2.3 ASP.NET技术简介 2
第二章 系统所需配置 2
2.1运行环境配置 2
2.1.1 硬件环境 2
2.1.2 软件环境 2
2.2 Windows Server 2003简介 3
2.3 IIS简介 3
2.3.1 IIS的安装 3
2.3.2 新建网站 3
2.3.3 IIS虚拟目录的管理 3
2.3.4 启用父路径 4
第三章 需求分析 4
3.1系统的用户分类 4
3.2 数据库需求分析 4
3.3模块框架图 4
第四章 数据库及模块设计 5
4.1概要设计 5
4.1.1数据库概论及SQL SERVER 2000简介 5
4.2系统E-R图 5
4.3模块数据库设计 6
4.4详细设计 7
4.4.1数据信息准备 7
4.4.2程序数据流图 8
4.5系统分析和设计任务负责的模块功能及内容 8
4.5.1登录模块和主界面模块需求分析 8
4.5.2登录模块和主界面模块设计系统性能要求 9
4.5.3负责模块中系统的功能分析 9
4.5.4功能模块及实现 9
4.5.5模块数据分析 9
第五章 系统实现 9
5.1登录模块设计 9
5.2管理员管理模块 12
5.3学生登录考试模块 14
第六章 总结 20
致谢 20
参考文献 20
引言
随着我国国民经济建设的蓬勃发展和具有中国特色的社会主义市场经济体制的迅速完善,各个行业都在积极使用现代化的手段,不断改善服务质量,提高工作效率,这些都在很大程度上给我们学者企业提出越来越严峻的挑战。 信息科技在全社会的飞速发展与普及,把世界上所有电脑联接起来的网络技术已日渐成熟,每天都有海量的信息在各种电脑网络上驰骋。特别是INTERNET网的普及,它改变了传统传输媒体的传递方式,而且是一个非常廉价的交互式国际通信媒体。越来越多的学者开始参加各种各样的考试,而这种考试大多都是网络考试。
网络考试有很多的优点,比如可以节省很多的改卷时间,节省大量的资源,减少了人工改卷的误差,考题丰富更能检测出学生的能力。因此网络在线考试将成为未来考试的趋势。
第一章 所用开发语言及技术平台简介
2.1 Microsoft Visual Studio 2005 介绍
Visual Studio 是微软公司推出的开发环境。是目前最流行的 Windows 平台应用程序开发环境。2005 年,微软发布了 Visual Studio 2005。.NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本2.0)。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。是一个开发 ASP.net 2.0的工具。
2.2 Microsoft Visual Studio 2005具有的优点
Visual Studio.NET 企业框架和模板提供了关键的基础结构和内容,以在组织内部定义和提供最好的惯例和开发策略。这允许高级开发人员和体系结构工程师定义应用程序初始工具包、策略以及体系结构指导,使经验不足的开发人员可以用来构建极其复杂的应用程序。客户可分发这些应用程序蓝图以及构建应用程序所需的部件和说明,从而极大地提高开发人员构建复杂 XML Web 服务和应用程序的效率。
2.3 ASP.NET技术简介
ASP.NET的前身ASP技术,是在IIS 2.0上首次推出(Windows NT 3.51),当时与 ADO 1.0 一起推出,在IIS 3.0 (Windows NT 4.0)发扬光大,成为服务器端应用程序的热门开发工具,微软还特别为它量身打造了Visual InterDev开发工具,在1994年到2000年之间,ASP技术已经成为微软推展Windows NT 4.0平台的关键技术之一,数以万计的ASP网站也是这个时候开始如雨后春笋般的出现在网络上。它的简单以及高度可定制化的能力,也是它能迅速崛起的原因之一。
因为ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上(笔者到现在为止只知道它只能用在Windows 2000/2003 Server/VISTA/7上)。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.net同时也是language-independent(语言独立化)的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和Java的结合体),VB,Jscript , C++、F++。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.net。
第二章 系统所需配置
2.1 运行环境配置
2.1.1 硬件环境
服务器和客户端使用主流硬件配置均能运行本系统。
建议配置:INTEL E7500 CPU(或同级的AMD CPU),4G内存,320G硬盘。
2.1.2 软件环境
⑴服务器:
操作系统:Windows Server 2003 + IIS 6.0+.NET Framework 2.0。要求启用父路径。
数据库:采用SQL2000,运行于服务器端。
⑵客户端:
操作系统:Windows 2000/XP/Vista/7。
浏览器:Internet Exploer,Firefox,Google Chrome,Opera等。
建议分辨率:1024*768以上
2.2 Windows Server 2003简介
Windows Server 2003操作系统是在Windows 2000 Server操作系统基础上发展而来的。与Windows 2000类似,Windows Server 2003操作系统软件也分成多个版本针对不同用户发布。包括Standard Edition(标准版)、Enterprise Edition(企业版)、Datacenter Edition(数据中心版)、Web Edition(网络版)四个版本,每个版本均有32位和64位两种版本。
Windows Server 2003默认安装后,将不启用任何服务模块,用户需要对Windows Server 2003进行服务器角色配置,来开启相应的服务模块。不起用任何服务模块的默认安装可以减少系统受攻击的风险。Windows Server 2003中的AD也做了增强和改进,对NT/XP系统的升级迁移提供了良好的帮助。
2.3 IIS简介
2.3.1 IIS的安装
Windows Server 2003默认安装是不带IIS 6.0的,要安装IIS,选择“开始→管理工具→管理您的服务器”,打开“管理您的服务器向导”,选择“添加或删除角色”,选择“应用服务器(IIS,ASP.NET)”,选择“万维网服务”(其余根据自己需要选择设置。)(如右图)
IIS 6.0安装默认不支持ASP,需要按照以下步骤开启:
⑴控制面板→管理工具→IIS(Internet 服务器)→Web服务扩展→Active Server Pages→允许;
⑵控制面板→管理工具→IIS(Internet 服务器)→Web服务扩展→在服务端的包含文件→允许。
建议取消上传文件200K限制。以免成绩文件大小超过200K时不能导入,步骤如下:
⑴关闭IIS Admin Service服务;
⑵打开\WINDOWS\system32\inetsrv\下的Metabase.xml文件;
⑶找到AspMaxRequestEntityAllowed = "204800"项,修改为需要的值如1024000;
⑷重启World Wide Web Publishing Service服务。
2.3.2 新建网站
打开“开始→管理工具→Internet信息服务(IIS)管理器”,选择“本地计算机→网站”,单击鼠标右键,在右键菜单中选择“新建→网站”,输入网站描述,配置IP地址和端口,由于默认网站的端口是80,新建的网站就不要与已用的端口冲突,按照向导配置,即可完成配置。
2.3.3 IIS虚拟目录的管理
新建虚拟目录:打开“开始→管理工具→Internet信息服务(IIS)管理器”,选择“本地计算机→网站→默认网站”,单击鼠标右键,在右键菜单中选择“新建→虚拟目录”,按照向导配置,即可完成虚拟目录的创建。
删除虚拟目录:打开“开始→管理工具→Internet信息服务(IIS)管理器”,选择“本地计算机→网站→默认网站”,单击鼠标右键,在右键菜单中选择“删除”,按照向导配置,即可完成虚拟目录的删除。
2.3.4 启用父路径
打开“开始→管理工具→Internet信息服务(IIS)管理器”,选择“本地计算机→网站→默认网站”,单击鼠标右键,在右键菜单中选择“属性”,选择“主目录→配置→选项→启用父路径”
第三章 需求分析
3.1系统的用户分类。
本系统共分成两个界面:一个界面用于老师及管理员登录,主要负责进行基本资料、题库、试卷、成绩的管理以及查询等;另外一个界面用于考生用户登录,主要负责在线考试。
从总体上考虑,系统应该实现下列功能:
对管理员来说,包括试卷管理、题库管理、成绩管理等。
(1)试卷管理:管理员可以对库中已有的试卷进行修改和删除,添加新试卷等。
(2)题库管理:管理员可以对题库中的试题进行三种基本操作:添加新的考题、删除旧有考题、修改原有考题,其中试题类型包括判断题、填空题、选择题;对于每种类型的试题,教师可以设置题干、答案等属性。
(3)成绩管理:管理员可以查看考生的考试成绩,包括考试人数及成绩等。
(4)学生管理:管理员可以对用户的资料进行查询、删除。
对普通用户来说,包括在线考试。
在线考试:学生可以任选时间进行在线测试,考试结束后,系统会根据已有的标准答案进行在线判卷,考生可以立刻知道考试成绩。
3.2 数据库需求分析
针对一般考试系统的需求,设计如下所示的数据项和数据结构:
管理员信息,包括:ID、姓名、密码、加入时间等。
普通用户信息,包括:学号、姓名、性别、密码、院系、专业、注册时间、找回密码问题、找回密码答案等。
题库信息,包括:包括:ID、题干、类型、加入时间、课程、院系、题套、选项、答案、分值等。
判断题信息,包括:判断题编号、题干、正确答案及分值等。
填空题信息,包括:填空题编号、题干、正确答案及分值等。
选择题信息,包括:单(多)选题编号、题干、正确答案、备选项(A、B、C、D)及分值等。
成绩信息,包括:包括:ID、学号、课程、成绩、考试提交时间等。
本系统应该建立一个稳定的后台数据库系统,通过该数据库管理整个考试系统所需的信息(用户信息、题库信息、考试信息等)。
本系统还应该包括学生和教师的账号、后台数据库的安全机制、考试过程的控制机制。
3.3模块框架图
图3-1 模块框架图
第四章 数据库及模块设计
4.1概要设计
4.1.1数据库概论及SQL SERVER 2000简介
微软开发的SQL SERVER 2000是在Windows95/98/2000及Windows NT平台中应用的关系型数据库管理系统,可以通过各种数据库对象对数据进行控制和管理,不论用户创建的独立桌面数据库适用于个人、部门还是整个企业,SQL SERVER可以为管理数据生成易于使用的数据库,SQL SERVER 2000不仅拥有众多传统数据库管理软件所具备的功能,同时还进一步增强了与web页集成,能够更方便的共享跨越各种平台和不同用户级别的数据。
SQL SERVER 2000并不需要数据库管理者具有很高的专业程序设计水平,一般的用户完全可以利用SQL SERVER 2000创建出一个功能强大的数据库系统,使用SQL SERVER 2000数据库管理系统除非执行复杂或专业的操作,一般情况下用户无需编写程序代码,只需要在企业管理器中操作就可以完成大多数数据的管理工作。
4.2系统E-R图
图4-1 系统E-R图
4.3模块数据库设计
tb_Administrator表(图4-2):主要功能是用来设置管理员的信息,包括:ID、姓名、密码、加入时间。
图4-2 tb_Administrator表
tb_Student表(图4-3):主要功能是记录每个学生的相关信息,包括:学号、姓名、性别、密码、院系、专业、注册时间、找回密码问题、找回密码答案。
图4-3 tb_Student表
tb_Questions表(图4-4):主要功能是记录题库信息,包括:ID、题干、类型、加入时间、课程、院系、题套、选项、答案、分值。
图4-4 tb_Questions表
tb_StuResult表(图4-5):主要功能是记录每个学生考试结果信息,包括:ID、学号、课程、成绩、考试提交时间。
图4-5 tb_StuResult表
4.4详细设计
4.4.1数据信息准备
1、登录界面模块
要进行“登录界面”模块验证就必须拥有该账号的信息:如:用户名、密码。如果身份正确的话就可以对整个系统的功能进行操作。不过学生和管理员各自享有不同的操作权限。添加学生可以通过外部注册,将新的数据各项信息录入到后台数据库中,这样新增的学生就可以访问系统,进行考试。
2、主界面模块
主界面模块操作分为两级操作分别是:管理员、学生。要进入主界面操作必须通过“登录界面”模块验证(相关的用户和密码匹配)后,才可以对整个系统的进行如下操作:学生信息维护、课程维护、院系维护、考题维护、成绩维护等
操作。
4.4.2程序数据流图
模块功能流程图如图4-6所示:
用户登录
调用数据库
?Y/N
系统主界面
考生
管理员
在线考试
退出系统
图4-6系统功能流程图
4.5系统分析和设计任务负责的模块功能及内容
4.5.1登录模块和主界面模块需求分析
① 考生信息修改以及删除;
② 能够实现对考生信息进行查询和编辑管理;
③ 能够进行学生考试成绩查询功能;
④ 学生能够进行查询成绩功能;
⑤ 提供注册和找回密码操作;
⑥ 提供添加试题和管理试题功能;
⑦ 提供添加维护专业课程信息功能;
⑧ 能够进行数据库维护的功能
4.5.2登录模块和主界面模块设计系统性能要求:
① 系统安全、可靠;
② 功能齐全;
③ 操作方便、界面美观友好;
④ 易于维护和扩充;
4.5.3负责模块中系统的功能分析:
密码设置:每个人均有自己的密码,可以修改自己的密码。
权限设置:各个人员有不同的操作限制。防止越权使用。
4.5.4功能模块及实现
系统管理登陆界面设计、系统主界面设计,考试界面设计三个主要模块。
登录界面模块: 防止非管理人员进入系统进行破坏。用以核对用户身份。
主界面设计模块:是对模块集成,系统的管理和操作及使用权限。
考试界面设计模块:是对随即抽取题目进行安排设计。
4.5.5模块数据分析
通过对负责的模块分析,可以得出该模块涉及一个实体及数据项有:
学生信息包含:学号、姓名、性别、注册时间、院系、专业、密码(隐藏)
管理员信息包含:名称、密码(隐藏)
题库信息包括:学号、题干、选项、答案、分值、加入时间
第五章 系统实现
5.1登录模块设计
图5-1 登录界面
用户在启动应用程序时,首先弹出该模块窗口,要求用户首先选择身份,然后输入登录名和密码及随即验正码,程序对输入得用户名和密码及验证码进行验证。如果验证通过,则读取该用户的操作权限传递给主程序,这时主程序根据不同的权限给予不同的操作,否则就提示相关错误信息。
public partial class Default : System.Web.UI.Page
{
Datacon dataconn = new Datacon();
protected void Page_Load(object sender, EventArgs e)
{
Session.RemoveAll();
if (!IsPostBack)
{
Random rnd = new Random();
//生成随即验证码
this.labValidate.Text = rnd.Next(1000,9999).ToString(); //数字在1000-9999之间
}
}
//==============================登录按钮=========================
protected void Button1_Click(object sender, EventArgs e)
{
if (txtValidate.Text != labValidate.Text)
{
Response.Write("<script lanuage=javascript>alert('验证码错误');location='javascript:history.go(-1)'</script>"); //提示输入的验证码是不是有误。
}
else
{
if (cblAdminLog.Items[0].Selected == true)
{
this.getcom(1); //如果为真就执行下面1代码
}
else
{
this.getcom(2); //否则执行代码2
}
}
}
//==============================登录控制============================
//通过查找数据库里面的管理员表里面的是否为管理员字段来判断登入的用户是否是管理员,如果//是跳转到管理员界面,如果不是则跳转到学生界面。
private void getcom(int i)
{
Session["StuName"] = this.txtUserName.Text; //记录登陆的信息
SqlConnection con = dataconn.getcon();
con.Open(); //打开数据连接
SqlCommand com=con.CreateCommand();
switch (i)
{
case 1: // 代码1
com.CommandText = "select count(*) from tb_Administrator where Name='" + txtUserName.Text + "' and PWD='" + txtPwd.Text + "'";
int count1 = Convert.ToInt32(com.ExecuteScalar());//获取SQL语句的值 强制转换成数值类型
if (count1 > 0)
{
Application["Name"] = txtUserName.Text;//成功
Application["PWD"] = txtPwd.Text;//成功
Page.Response.Redirect("HouAdmin/admin.aspx"); //执行成功后跳转到管理页面
}
else
{
Response.Write("<script lanuage=javascript>alert('用户名或密码有误!');location='javascript:history.go(-1)'</script>");
return;
}
break;
case 2: //代码2
com.CommandText = "select count(*) from tb_Student where ID='" + txtUserName.Text + "' and PWD='" + txtPwd.Text + "'";
int count2 = Convert.ToInt32(com.ExecuteScalar());
if (count2 > 0)
{
Application["ID"] = txtUserName.Text;
Application["PWD"] = txtPwd.Text;
Page.Response.Redirect("QianUser/zaixian_kaoshi.aspx"); //执行成功后跳转到学生页面
Default.aspx.cs部分主要代码代码
5.2管理员管理模块
图5-2 管理员管理维护界面图
该界面可以管理管理员信息,学生信息,专业信息,课程信息,题套信息,管理考试成绩,管理考试题目,添加试题(图5-3),关闭或开始考试等。可以对相应的信息进行增加、删除、修改等操作。
图5-3 添加试题界面
添加试题模块主要对试题进行添加,只有管理员身份才可以拥有这个窗体的使用权限,管理员可以对试题进行添加。部分主要代码:
//试题的添加,通过查询数据库得到的提套专业,然后在按所选择的类型进行试题的添加。
protected void btnSelect_Click(object sender, EventArgs e)
{
Session["drop1"] = ddlProfession.Text;//专业
Session["drop2"] = ddlLesson.Text;//课程
Session["drop3"] = ddlQueName.Text;//题套
if (this.ddlLesson.Text == "" )
{
Page.Response.Write("<script lanuage=javascript>alert('请选择考试课程');location='javascript:history.go(-1)'</script>");
return;
}
Page.Response.Redirect("InsertShiTi.aspx");
}
protected void ddlProfession_SelectedIndexChanged(object sender, EventArgs e)
{
dataconn.ecDropDownList(ddlLesson, "select * from tb_Lesson where ofProfession='"
+ ddlProfession.SelectedValue.ToString() + "'", "Name", "id");
dataconn.ecDropDownList(ddlQueName, "select a.*,b.ofProfession from tb_TaoTi as a join tb_Lesson as b on a.LessonID=b.ID where a.LessonID='"
+ ddlLesson.SelectedValue.ToString() + "' and b.ofProfession='"
+ ddlProfession.SelectedValue.ToString() + "'", "Name", "id"); //插入试题执行代码
}
protected void ddlLesson_SelectedIndexChanged(object sender, EventArgs e)
{
dataconn.ecDropDownList(ddlQueName, "select * from tb_TaoTi where LessonID='" + ddlLesson.SelectedValue.ToString() + "'", "Name", "id");
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
if (TreeView1.SelectedNode.Text=="退出系统")
{
Response.Write("<script lanuage=javascript>window.close();location='javascript:history.go(-1)'</script>"); //退出系统清除session记录
}
}
}
insert_shiti.aspx.cs 部分主要代码
5.3学生登录考试模块
图5-4 学生登录考试模块
该界面主要是对学生登录考试时等候考试的界面。上面有考生登录的学号,以及现在系统时间。当老师开放了考试以后就可以点击开始,如果考试还没开放则点击开始的时候会弹出提示框提示考试还未开始。
图5-5 学生考试界面图
该界面主要是学生进行考试时候的界面。在考试顶部有考试剩下的时间及考生的学号,以及答题的说明规则。部分主要代码:
//随机从题库中抽取设定好的题目数量,然后按题目的类型自动生成试卷,试卷格式按代码设定好的行列//进行显示。
Random rd = new Random();//抽题随机数
Datacon con = new Datacon();
static int[] QuestionID = new int[50]; //一共50题
public int que_lessonid = 0;
public int que_professionid = 0;
protected bool validate(int a)
{
for (int i = 0; i < QuestionID.Length; i++)
{
if (QuestionID[i] == a)
{
return false;
}
}
return true;
}
if (GetNum()) //抽题
{
for (int i = 0; i < 50; i++)
{
int id = rd.Next(DateTime.Now.Millisecond) % MaxID;
if (validate(id))
{
if (i < 20)//20道单选题
{
string sql = "select que_subject,que_type,optionA,optionB,optionC,optionD,que_score from tb_Questions where id=" + id.ToString() + " and que_type='单选题' ";
if (!GetQuestions(sql, i))
{
i--;
continue;
}
else
{
QuestionID[i] = id;
}
}
protected bool GetQuestions(string sql, int id)//生成试题页面及布局,采用表格行列形式生成
{
SqlDataReader read = DataConnection.DataRead(sql);
if (read != null && read.Read())
{
TableRow tRow = new TableRow();
TableCell tc = new TableCell();
tc.Text = read.GetValue(0).ToString();//试题题目
tc.ColumnSpan = 5;
tRow.Cells.Add(tc);
Table1.Rows.Add(tRow);
tRow = new TableRow();
tc = new TableCell();
tc.Text = "试题分数:" + read.GetValue(6).ToString();//试题分数
//tc7.ColumnSpan = 1;
tRow.Cells.Add(tc);
tc = new TableCell();
tc.Text = read.GetValue(1).ToString();//试题类型
//tc8.ColumnSpan = 3;
tRow.Cells.Add(tc);
Table1.Rows.Add(tRow);
tRow = new TableRow();
tc = new TableCell();
tc.Text = "A: " + read.GetValue(3).ToString();//答案A
tRow.Cells.Add(tc);
tc = new TableCell();
tc.Text = "B: " + read.GetValue(4).ToString();//答案B
tRow.Cells.Add(tc);
tc = new TableCell();
tc.Text = "C: " + read.GetValue(5).ToString();//答案C
tRow.Cells.Add(tc);
tc = new TableCell(
展开阅读全文