《网上考试系统的实现与应用.doc》由会员分享,可在线阅读,更多相关《网上考试系统的实现与应用.doc(31页珍藏版)》请在三一办公上搜索。
1、网上考试系统的实现与应用 摘 要本考试系统具有自动出题、随机出题、自动阅卷计分、在线记时考试、用户帐户管理、批量添加考生、成绩存档等功能。它将有效的提高考试效率。在本系统的设计中,尽量做到了对其的设计达到较强的移植性,使得本系统具有一定的应用前景。本系统采用B/S架构作为系统的总体结构,以Web数据库技术为依托,利用微软的ASP.NET技术,结合ADO,实现了对Web数据库的访问和查询。该设计实现了按题型随机抽题组卷、在线考试、题库管理、系统管理的功能,能够对客观题在线评分。学生用学号登录成功后,阅读考试须知,之后选择考试科目进入考试页面,完成相应科目考试,自动给出考试成绩。系统管理,实现了对
2、题库、考生信息、考试成绩、考试科目的管理;题库管理,实现了对试题的添加、编辑、删除功能;考生信息管理可以添加、修改、删除、查询考生信息;成绩管理可以删除成绩信息;科目管理主要是修改考试科目信息。 关键词 网上考试系统 ASP.NET SQL Server2000第一章 引言第1章到第3章内容都极少,建议合并。随着计算机技术的发展和互联网时代的到来,人类已经进入了信息时代,也有人称为数字化时代。在数字化的网络环境下,用户希望得到个性化的满足,根据自己的情况进行学习,同时也希望能够得到科学的评价,网上考试系统正是迎合这一时代需求而开发的,它旨在探索一种以互联网为基础的自测模式1。基于B/S结构的网
3、上考试系统的开发与应用创造了一种新的考试环境,提高了工作效率和标准水平,使管理员和用户随时随地都可以通过这个系统进行自测考试。网上考试系统是远程网络教育中学习者检验学习效果的有效手段,具有方便快捷通用的使用价值,本系统的设计与实现具有现实意义2。第二章 研究现状及设计目标2.1 系统的研究现状随着信息技术在我国的蓬勃发展,开发适用于网络考试的高质量的自测系统成了网络教育中一个非常重要而迫切的课题。可是目前大多数的网上考试系统形式各异,良莠不齐。比如,有的内容涵盖丰富而功能不够完备,有的只是简单的文本和图片的罗列等,这些质量不高的系统直接影响了用户自测的主动性,远不能适应用户的需要。因此,本设计
4、的目的在于开发一个便于管理员管理,并且功能相对齐全的网上考试系统3。目前,开发网上考试系统的技术很多,如ASP,WEB,DELPHI等,可是用ASP.NET开发是非常不错的选择。ASP.NET是在服务器上运行的编译好的公共语言运行库代码,与被解释的前辈不同,ASP.NET可利用早期绑定、实行编译、本机优化和缓存服务,这相当于在编写代码行之前便显著提高了性能。ASP.NET采用基于文本的分层配置系统,简化了将设置应用于服务器环境和Web应用程序。同时在设计时考虑了可缩放性,增加了专门用于在聚集环境和多处理中提高性能的功能,它还随附了一个设计周到的结构,使开发人员可以再适当的级别插入代码,所以效率
5、很高。基于ASP.NET的这些优势,本系统选择ASP.NET开发,使用Visual Studio 2005作为开发工具,并且以SQL Server 2005作为后台数据库4。2.2 系统的设计目标本系统用户包括后台管理员和用户两大类,系统可以给管理员一个用户名和密码,后台管理员登录后台成功后,可以添加、删除、修改相应的专业、课程、知识点并管理用户信息等操作;用户可以远程注册信息并登录,登录前台成功后可以选择相应的知识点进行自测,并查看自测成绩5。第三章 要解决的几个关键问题本课题要解决的关键问题是要根据不同的管理员实现知识点的管理。解决方案是把后台的处理细分为专业、课程、知识点的管理等多个界面
6、,并把管理员的所有管理权限用一个TreeView控件显示,并可以动态地链接到相应界面。这样具有Administrator角色的管理员可以点击TreeView控件的节点信息打开相应的界面进行管理。用户登录前台能够选择多个知识点并输入一定数量的题目进行测试是本系统的核心内容,采用的解决方案主要是利用数组的方法,查出某个知识点的记录号,从这些记录号中随机选出相应数目的题目,并把取得的这些记录的字段设为选中标记,在知识点测试页面运用两个DataList控件分别绑定已被选中的单选题和多选题。这样就可以实现用户选择多知识点同时测试的功能了。使用该系统时往往某个知识点的题库中题目数有限,为了避免用户选择的某
7、个知识点题目数多于该知识点题库的总题目数,影响测试的效果,故在选择知识点页面,当用户选择某个知识点时系统就可以自动显示该知识点的总题数就解决了这个问题,主要用Session变量来获取该知识点的题目总数,这样就为用户提供了更加稳定高效率系统的服务。第四章 系统结构与模型4.1 系统业务流程图本系统主要实现后台管理员对知识点的管理,以及用户远程选择相应知识点进行测试。其业务流程图如图1所示6。图1 系统业务流程图4.2 系统的功能模块划分本系统主要由八个功能模块构成:前台用户注册登录模块、用户考试模块、后台管理员信息模块、管理用户模块、专业模块、课程模块、知识点模块和试题模块。功能模块划分如图2所
8、示。图2 系统的功能模块(1)前台用户注册登录模块:该模块供用户使用,用户注册成功以后,进入登录界面输入注册的用户名和密码,登录成功以后便可以进入前台考试系统的首页。若密码不正确使登录不成功,可以进入忘密页面,寻找密码。(2)用户考试模块:用户登录成功后进入该模块,可以进行的操作有:选择测试的知识点,进入考试,查询成绩等。(3)后台管理员信息模块:系统管理员登录成功后进入该模块,可以进行的操作有:添加管理员,修改管理员信息,删除管理员和查询管理员等。(4)管理用户模块:实现的是管理员对用户管理的模块。在此模块中,管理员可以对用户信息进行查询和删除等操作。(5)专业模块:此模块管理员可以进行如下
9、操作:查看专业信息,添加、删除、修改专业等,方便了用户在大致的专业方向选择相关知识点。(6)课程模块:该模块管理员可以添加、删除、修改、查询课程,课程是介于专业和知识点之间的,更加方便用户快速找到相关的知识点。(7)知识点模块:管理员通过此模块可以添加、删除、修改、查询知识点,并可选择它属的课程。(8)试题模块:此模块可以选择所属的专业、课程、知识点的试题,进行添加、删除、修改和查询,在添加时可选择该试题的类型:单选或多选,并可以根据难易程度设置分值等操作。4.3 数据库设计本系统的数据表包括管理员信息表,专业信息表,课程信息表,考试题目信息表,注册用户信息表、考生成绩信息表和知识点信息表。每
10、个数据表都非常重要,其中专业信息表,课程信息表,知识点信息表要用视图进行连接7。(1)管理员信息表(tb_Administrator)管理员信息表tb_Administrator用来保存管理员登录考试系统的用户名及密码,该表的字段说明如表1所示。表1 tb_Administrator表列名数据类型长度主键否功能描述IDbigint8是系统管理员编号Namevarchar50否管理员名称PWDvarchar50否管理员密码JoinTimedatetime8否加入时间(2)课程信息表(tb_Lesson)课程信息表tb_Lesson用来保存课程信息,该表的字段说明如表2所示。表2 tb_Lesso
11、n表列名数据类型长度主键否功能描述IDbigint8是课程编号Namevarchar60否课程名称ofrofessionbigint8否所属专业编号JoinTimedatetime8否加入时间(3)考试题目信息表(tb_Questions)考试题目信息表tb_Questions用来保存试题信息,表的字段说明如表3所示。表3 tb_Questions表列名数据类型长度主键否功能描述idbigint8是试题编号que_subjectvarchar50否试题主题que_typechar10否试题类型que_joindatedatetime8否试题加入时间que_lessonidint4否所属课程号q
12、ue_professionidint4否所属专业号que_taotiidbigint8否所属知识点编号optionAvarchar50否选项AoptionBvarchar50否选项BoptionCvarchar50否选项CoptionDvarchar50否选项Dque_answerchar10否试题答案commentvarchar50否设置分值Notevarchar50否标注(4)专业信息表(tb_Profession)专业信息表tb_Profession用来保存专业信息,该表的字段说明如表4所示。表4 tb_Profession表列名数据类型长度主键否功能描述IDbigint8是专业编号Na
13、mevarchar200否专业名称JoinTimedatetime8否加入时间(5)注册用户信息表(tb_Student)注册用户信息表tb_User用于保存用户注册信息,该表的字段说明如表5所示。表5 tb_Student表列名数据类型长度主键否功能描述IDvarchar50是用户名Namevarchar20否用户姓名PWDvarchar20否用户密码sexvarchar2否性别joinTimedatetime8否加入时间questionvarchar50否密码问题answervarchar50否密码答案professionbigint8否所选专业号(6)用户成绩信息表(tb_StuResu
14、lt)用户成绩信息表tb_StuResult用于保存用户考试成绩,该表的字段说明如表6所示。表6 tb_StuResult表列名数据类型长度主键否功能描述res_idbigint8是试题结果编号user_idvarchar50否所属用户编号Which_lessonvarchar50否所属课程名称taotiidbigint8否所属知识点编号taotinamevarchar50否所属知识点名称res_singleint4否单选成绩res_moreint4否多选成绩res_totalint4否总成绩res_subdatedatetime8否成绩提交时间(7)知识点信息表(tb_TaoTi)知识点信息
15、表tb_TaoTi用于保存知识点信息,该表的字段说明如表7所示。表7 tb_Knowledge表列名数据类型长度主键否功能描述idbigint8是知识点编号Namevarchar50否知识点名称LessonIDbigint8否所属课程编号JoinTimedatetime8否加入时间表与表之间的关系图:4.4 Web.Config文件设计Web.config文件是一个XML文本文件,它用来储ASP.NET Web应用程序的配置信息(如最常用的设置ASP.NET Web应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。在本系统中,Web.Config文件配置系统的总体信息,在这里主要配
16、置数据库字符串连接。该文件的具体配置如下: /添加数据库连接信息 /使用的安全身份验证模式4.5 数据库操作类Datacon编写Datacon类中包含5个方法,分别为getcon方法、eccom方法、ecDropDownlist方法、ecadabind方法和ecadabindinfostring方法。其功能说明和设计如下所示。4.5.1 getcon( )方法getcon( )方法用来连接数据库,类型为SqlConnection。public SqlConnection getcon() string strCon = Data Source=(local);DataBase=db_Exami
17、nation;User ID=sa;PWD=; SqlConnection sqlCon = new SqlConnection(strCon); /数据库连接 return sqlCon; 4.5.2 eccom( string sqlstrl )方法首先向该方法传了1个SQL语句。然后与SQL Server数据库建立连接,应用SqlCommand对象执行所传进来的SQL语句,最后应用try-catch-finally语句进行异常处理,如果执行该SQL语句则返回true,反之则返回false,代码如下所示:public bool eccom(string sqlstr1) SqlConnec
18、tion con = this.getcon(); con.Open(); /打开SQL Server数据库的连接 SqlCommand mycommand = new SqlCommand(sqlstr1, con); /执行SQL语句或存储过程 try Console.Write(sqlstr1.ToString(); mycommand.ExecuteNonQuery(); /连接执行SQL语句并返回受影响的行数 return true; catch return false; finally con.Close(); /关闭 4.5.3 ecDropDownList( DropDown
19、List DDL,string sqlstr3,string DTF,string DVF )方法该方法首先传了4个值,分别为DropDownList控件、SQL语句、列表项提供的内容字段和列表项提供值。然后与SQL Server数据库建立连接,应用SqlDataAdapter对象填充数据集并指定DropDownList控件的数据源,最后设置列表项提供的内容字段和列表项提供值所绑定的数据源,应用try-catch-finally语句进行异常处理,如果DropDownList控件执行DataBind方法则返回True,反之则返回False,代码如下所示: public bool ecDropDo
20、wnList(DropDownList DDL, string sqlstr3, string DTF, string DVF) SqlConnection con = this.getcon(); con.Open(); SqlDataAdapter mydataadapter = new SqlDataAdapter(sqlstr3, con);/填充DataSet和更新SQL Server数据库的一组数据命令和一个数据库连接 DataSet mydataset = new DataSet(); mydataadapter.Fill(mydataset); /实现将数据集填充到DataSe
21、t中 DDL.DataSource = mydataset; /设置DropDownList控件要绑定的数据源 DDL.DataTextField = DTF; DDL.DataValueField = DVF; try DDL.DataBind(); return true; catch return false; finally con.Close(); SqlDataAdapter类表示用于填充DataSet和更新SQL Server数据库的一组数据命令和一个数据库连接。DataSet是ADO.NET结构的主要组件,它是从数据源中检索到得数据在内存中的缓存。在典型的多层实现中,用于创建和
22、刷新DataSet并依次更新原始数据的步骤包括:通过DataAdapter使用数据源中的数据生成和填充DataSet中的每个DataTable;通过添加、更新或删除DateRow对象更改单个DataTable对象中的数据;调用GetChanges方法以创建只反映对数据进行的更改的第二个DataSet;调用DataAdapter的Update方法,并将第二个DataSet作为参数传递;调用Merge方法将第二个DataSet中的更改合并到第一个中,针对DataSet调用AcceptChanges,或者调用RejectChanges以取消更改8。SqlDataAdapter.Fill方法是可以重载
23、的,在此主要实现将数据集填充到DataSet中。4.5.4 ecadabind ( GridView gv,string sqlstr4 )方法ecadabind ( GridView gv,string sqlstr4 )方法用来执行SQL语句,返回类型为bool型,主要是执行SqlDataAdapter中的语句,并将其绑定到GridView控件上,相应功能执行成功后返回True,否则返回False9。public bool ecadabind(GridView gv, string sqlstr4) SqlConnection con = this.getcon(); con.Open()
24、; SqlDataAdapter mydataadapter = new SqlDataAdapter(sqlstr4, con); DataSet mydataset = new DataSet(); mydataadapter.Fill(mydataset); gv.DataSource = mydataset; /设置GridView控件的绑定数据源 try gv.DataBind(); return true; catch return false; finally con.Close(); 4.5.5 ecadabind ( GridView gv,string sqlstr4 )方
25、法ecadabind ( GridView gv,string sqlstr4 )方法用来执行SQL语句,返回类型为bool型,主要是执行SqlDataAdapter中的语句,并将其绑定到GridView控件上显示其主键字段的名称,相应功能执行成功后返回True,否则返回False10。public bool ecadabindinfostring(GridView gv, string sqlstr5, string DNK) SqlConnection con = this.getcon(); con.Open(); SqlDataAdapter mydataadapter = new S
26、qlDataAdapter(sqlstr5, con); DataSet mydataset = new DataSet(); mydataadapter.Fill(mydataset); gv.DataSource = mydataset; gv.DataKeyNames = new string DNK ; /在GridView控件上显示数据源的主键字段的名称 try gv.DataBind(); return true; catch return false;. finally con.Close(); 这段代码主要是在GridView控件上显示数据源的主键字段的名称。第五章 系统实现技
27、术5.1 后台主要功能模块设计5.1.1 后台登录模块设计(1)登录页面的功能登录模块的主要功能是提供给系统管理员或者用户的登录,输入用户、密码和验证码以后进行验证,如果验证成功就进入相应的页面继续操作,若验证失败,就提示相应的信息告知用户。(2)登录页面的页面设置本页面有1个Table控件布局页面,1个CheckBox控件验证管理员登录,3个Button控件用来实现登录、注册和忘密功能,3个TextBox控件,用来输入用户名、密码和验证码,4个Lable控件用来显示用户名、密码和验证码。(3)登录页面的代码实现系统登录模块主要用于验证用户登录系统时输入的用户名、密码和验证码是否正确,在处理登
28、录页面提交的数据时,首先会根据“管理员”复选框的值来判断是否登录管理员页面,通过if-else语句来判断复选框CheckBoxList1控件是否被选中,如果被选中则执行核对用户名、密码和验证码而进入管理员页面,反之则会执行另一段代码,以验证非管理员登录信息,而进入用户考试页面,此页面的核心部分是登录控制,其代码如下: private void getcom(int i) SqlConnection con = dataconn.getcon(); con.Open(); SqlCommand com = con.CreateCommand(); switch (i) case 1: com.C
29、ommandText = select count(*) from tb_Administrator where Name= + txtUserName.Text + and PWD= + txtPwd.Text + ; int count1 = Convert.ToInt32(com.ExecuteScalar();/获取SQL语句的值强制转换成数值类型 if (count1 0) ApplicationName = txtUserName.Text; /成功 ApplicationPWD = txtPwd.Text; /成功 Page.Response.Redirect(HouAdmin/
30、admin.aspx); /登录后台界面 else Response.Write(alert(用户名或密码有误!);location=javascript:history.go(-1); return; break; case 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
31、ID = txtUserName.Text; ApplicationPWD = txtPwd.Text; Page.Response.Redirect(QianUser/zaixian_kaoshi.aspx); /登录前台界面 else Response.Write(alert(用户名或密码有误!);location=javascript:history.go(-1); return; break; con.Close(); 登录页面运行后如图3所示。5.1.2后台管理页面设计本系统的后台管理主要有:管理员、用户、考试题目、专业和课程信息的添加、删除和修改等操作。下面主要介绍管理员信息的各种
32、操作11。管理员信息设置模块包括管理员信息列表、查询管理员、添加管理员、修改管理员信息和删除管理员5部分功能,管理员信息设置页面模块的运行效果如图4所示。5.1.2.1 管理员信息列表管理员列表通过ASP.NET 2.0提供的GridView控件把管理员的基本信息显示出来。在每条信息后设置执行修改及删除功能的超链接按钮。每次登录此页面时程序都会自动执图3 登录页面Default.aspx图4 管理员信息页面Admin.aspx行后台Page_Load页面加载事件中的SQL语句,将检索到的数据通过GridView控件显示在页面中。写代码前首先要在命名空间区域中引用using System.Dat
33、a.SqlClient命名空间,然后在Page_Load页面加载事件中定义执行需要显示在GridView控件中信息的SQL语句,通过调用公共类执行该语句完成数据显示操作,后台主要实现数据显示功能的代码如下所示:Datacon dataconn = new Datacon(); /用来连接数据库及执行与数据库有关的操作 protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) dataconn.ecadabindinfostring(gvAdminInfo, select * from tb_Administrat
34、or order by ID desc, ID); /从管理员表中查出管理员信息 protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) /GridView控件自带的分页功能 gvAdminInfo.PageIndex = e.NewPageIndex; dataconn.ecadabind(gvAdminInfo, Select * From tb_Administrator Where + ddlAdminName.SelectedValue + Like % + txtSelec
35、t.Text + %); protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) /对数据源执行delete命令前激发 dataconn.eccom(delete from tb_Administrator where ID= + gvAdminInfo.DataKeyse.RowIndex.Value + ); Page.Response.Redirect(admin.aspx); protected void LinkButton10_Click(object sender, EventA
36、rgs e) /跳转到“添加管理员”页面 Page.Response.Redirect(AdminInsert.aspx); protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) /在对行进行了数据绑定后激发 if (e.Row.RowType = DataControlRowType.DataRow) e.Row.Cells2.Text = Convert.ToString(Convert.ToDateTime(e.Row.Cells2.Text).ToShortDateString(); 5
37、.1.2.2管理员信息查询管理员双击“查询”按钮,同时会进入此按钮后台的Click单击事件中,然后在Click单击事件中定义执行模糊查询的SQL语句,通过调用公共类执行该语句,将结果显示在GridView控件中完成查询操作,后台主要实现查询功能代码如下所示: protected void Button1_Click(object sender, EventArgs e) if (txtSelect.Text = ) dataconn.ecadabindinfostring(gvAdminInfo, select * from tb_Administrator order by ID desc,
38、 ID); else dataconn.ecadabind(gvAdminInfo, Select * From tb_Administrator Where + ddlAdminName.SelectedValue + Like % + txtSelect.Text + %); /调用公共类Datacon中的ecadabind方法执行管理员信息查询操作 5.1.2.3添加管理员添加管理员页面主要用于添加管理员姓名和密码,本页面主要用2个Button控件用来实现添加和返回和2个TextBox控件用来录入管理员姓名及密码。编写此代码前,同样首先在命名空间区域中引用using System.Dat
39、a.SqlClient命名空间,然后在“添加”按钮的Click单击事件中定义执行添加管理员的SQL语句,通过调用公共类执行该语句完成操作。添加管理员数据的代码如下:Datacon dataconn = new Datacon(); protected void Button1_Click(object sender, EventArgs e) dataconn.eccom(insert into tb_Administrator(Name,PWD)values( + txtAdminName.Text + , + txtAdminPwd.Text + );/调用公共类Datacon中的 eccom方法,执行插入管理员操作 Pag