毕业设计(论文)基于asp
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科生毕业论文题目:基于的试卷管理系统
姓名:何亚娟
学号:200724101216
专业:计算机科学与技术
年级:2007级
学院:信息科学技术
完成日期:2011年5月
指导教师:吴淑雷(教授)
目录
1绪论 (2)
1.1选题的背景 (2)
1.2研究现状 (3)
1.3发展方向 (3)
2需求分析 (3)
2.1环境需求 (3)
2.2功能需求 (4)
3系统总体设计 (4)
3.1系统结构图 (4)
3.2系统流程图 (5)
3.3功能描述 (5)
3.3.1系统管理模块 (5)
3.3.2试卷科目管理模块 (7)
3.3.3试卷管理模块 (7)
3.3.4试题管理模块 (8)
4数据库设计 (8)
4.1数据库概念结构模型设计 (9)
4.2数据库逻辑结构模型设计 (12)
4.3数据库表设计 (12)
5系统开发过程 (15)
5.1类的设计 (15)
5.1.1数据操作类 (15)
5.1.2常用函数类 (17)
5.2页面框架的设计 (19)
5.3系统管理主要模块功能的实现 (19)
5.4试卷科目管理模块主要功能的实现 (21)
5.5试卷管理模块主要功能的实现 (22)
5.5.1自动出卷功能实现 (23)
5.5.2手工出卷功能的实现 (24)
5.5.3试卷查看功能实现 (25)
5.6试题管理模块主要功能的实现 (26)
6测试 (27)
7系统总结分析 (27)
参考文献 (28)
基于的试卷管理系统
作者:何亚娟指导教师:吴淑雷教授
(海南师范大学信息科学技术学院,海口,571158)
摘要:本系统选取Microsoft SQL Server 2005作为后台数据库,采用技术,设计并实现了一个试卷管理系统的基本功能,如试题管理、自动出卷和手动出卷等。
其构建的目的是减少教师的工作,降低了资源的浪费并且提高了保密性。
关键词:试卷管理系统;自动出卷;;
Examination Paper Management System Based On
Author:HeYaJuan Tutor:WuShuLei professor
(Department of Computer Science and Technology, School of Information Science and Technology, Hainan Normal University, HaiKou, 571158)
Abstract:The system choose Microsoft SQL Server 2005 as a Backend database. Using technology designed and implemented the basic functions of the examination paper management system, Such as questions management and completed the examination paper automatically or manually. The aim of construct the paper management system is to reduce the workload of teachers and cut down the waste of resource and improving confidentiality.
Key phrase: Paper management system; Complete the volume automatically; ;
1绪论
伴随着当今世界知识经济的迅猛发展,计算机已经普遍应用于社会的各个领域,并且扮演着越来越重要的角色。
计算机的普及与应用在一定程度上已经作为衡量一个国家或地区的发达或发展程度的标志。
在这样的大环境下,我们当代的大学生就应该掌握并应用好计算机。
作为计算机专业的学生,就更应该熟练掌握计算机专业技术知识,成为计算机领域的先锋。
本系统选取Microsoft SQL Server 2005作为试题库,在环境下,用C#语言开发的试卷管理系统。
系统以填空题、判断题、选择题、简答题的形式集成一个试题库。
管理员可以手工添加试题到题库并能够按预定要求自动生成试卷。
让老师在传道授业的过程中可以更方便的得到帮助和支持并且减少教师的工作量。
本系统可随时补充新搜集的试题及题型,逐步完善形成试题库系统并提供随机出卷的功能。
1.1选题的背景
随着信息技术的发展和计算机的普及,计算机越来越深入到我们的生活领域中。
由于信息量逐渐增加,学校教务管理工作日益繁重,每学期考试,从组织出卷到试卷的印制及试卷的管理等工作非常繁琐且工作量很大,这种组织管理方式不仅工作任务繁重而且试卷的标准化程度、难易程度、题量大小等各方面难以控制,难以形成有效的试题库,据我所知人工进行试卷流程管理中。
当需要出卷对学生进行测试的时候,需要抽调各专业的相关老师人工出题。
老师出完题以后,会交给该课程的负责人审阅,不合格则需继续修改。
而且审阅又包括初审和复审。
其效率极低,而且易出错。
无法充分发挥历年来的优秀试题及试卷的作用,给试题和试卷的管理带来很多问题和困难。
另外随着计算机网络的持续发展,无论是工作、学习还是生活的节奏将会不断加快,这就要求我们有快捷的信息来源。
如果采用计算机对学生的课程各类信息进行管理,必将大大的提高工作效率、减少教师的工作量,对学生试卷的管理起到积极的作用,所以无论从目前的现状还是面向未来,一个完备的学生试卷管理系统的开发是非常必要的。
设计编写试题库管理系统, 是基于二种目的: 一是充分利用现有的计算机系统减轻工作人员的劳动强度。
二是摒弃传统的手工整理、以纸质试卷的形式存放到档案室, 浪费纸张等原材料, 不利于保护环境。
使用计算机对学生试卷信息进行管理,有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高学生试卷管理的效率。
1.2研究现状
计算机用于考试管理的时间可以追溯到20世纪60年代,早在那个时候英国首先尝试了将计算机用于考试管理,并称这种计算机管理方式为计算机辅助测试简称CAT。
IBM公司在1968年和美国洛杉矶学区就共同开发了一个最初用于管理美国历史题库的系统CTSS(Classroom Teacher Supporting System)。
后来,加利福尼亚州开发了一个专为加利福尼亚州19个州立大学 1.6万名教师和29万学生服务的名为SOCRATEBCATC的系统。
国外的一些系统比较侧重于题库管理,自动组卷。
在线考试以及考后测评。
自1983年成立全国高等教育考试指导委员会以来,各种考试机构纷纷建立。
国内试卷管理方面比较成熟的系统有:中国教育星网络智能题库系统,是基于WEB方式的智能题库系统,能够在学校现有主页或其他web方式的应用结合在一起,能够满足单机、网络教室、校园网、网校和城域教育网等各种应用环境的需要。
该系统的主要缺点是没有对考试后的试卷分析,没有对试卷的相关属性进行管理。
另外还有鹏博士在线考试系统及题库管理系统以及ExamManager考试管理系统等[1]。
网络上也有很多基于VB或者C++的试卷管理系统。
1.3发展方向
目前,试卷管理系统还存在很多弊端。
尤其是自动出卷部分问题更为明显,如很多时候需要根据学生的学习情况来决定出卷的难易程度。
常常出现自动出卷的题目偏难或者偏易等问题,而达不到预期检测学生学习情况的目的。
故而为了出一份难易适中的试卷,教师仍然需要投入大量的经历去查看已出好的试卷是否合格。
所以,未来的试卷管理系统必然是朝着这个方向发展。
而随着信息技术的发展,试卷管理系统也必将逐步完善,更加智能化、合理化。
方便各用户的使用。
届时,人们将可以完全摒弃手工操作,无需教师再付出大量的劳动,而全部在计算机技术的基础上实现自动的试卷管理。
2需求分析
2.1环境需求
为了保证试卷管理系统能够高效可靠的运行开发环境的软硬件要求。
软件要求操作系统:WINDOWS XP
数据库:Microsoft SQL Server 2005
开发工具:Visual Studio2008
硬件要求硬盘:250GB
内存:1GB
显示器:VGA
2.2功能需求
试卷管理管理系统是一个为试卷建立的系统,主要功能包括试卷科目管理、试卷管理、试题管理和权限管理四个模块。
教师角色功能要求为:权限管理、添加考试科目、添加试题到题库,查看当前系统的试题、编辑当前的试题、删除当前的试题、查看编辑或者删除存在于题库中的试卷、设置自动出卷或者手工出卷等。
学生角色功能要求为:查看当前存在于题库中的试卷。
3系统总体设计
3.1系统结构图
试卷管理系统的结构图,如图1所示。
图1 试卷管理系统结构图
系统主要设四个主要的模块分别为系统管理模块、试卷科目管理模块、试卷管理模块、试题管理模块。
3.2系统流程图
进入系统后首先是用户登录页面用户登录以后判断是管理员用户还是普通用户,若是普通用户则只有浏览已经存在题库中的试卷,而如果是管理员用户则有操作系统的权限,包括权限操作、编辑试题和出卷等。
其中的权限操作包括管理员权限和普通权限,而试题操作包括添加试题、修改试题、编辑试题、删除试题等。
出卷又包括自动出卷和手工出卷。
系统的流程图如图2所示。
图2 系统流程图
3.3功能描述
3.3.1系统管理模块
系统管理模块功能结构如图3所示。
图3 系统管理功能结构图
系统管理包括登录系统、退出系统和权限管理三个模块;
登录系统:允许用户输入用户账户及密码,提交后,系统查询数据库验证身份分配权限。
管理员可以对整个数据表进行管理。
登录流程如图4所示。
图4 系统登录流程图
权限管理:包括添加用户并赋予管理员或普通权限、修改用户、删除用户等。
3.3.2试卷科目管理模块
试卷科目管理功能结构如图5所示。
图5 试卷科目管理功能图
试卷科目种类管理包括试卷科目管理页面和试卷科目添加页面,我们可以在试卷科目管理页面查看已经存在的考试科目。
当需要编辑某个科目的时候我们只需要单击进入详细页面进行编辑最后点击按钮保存即可完成编辑现有的考试科目。
并且当我们需要添加考试科目的时候,我们需要点击下面的添加考试科目链接,进行考试科目的添加。
3.3.3试卷管理模块
图6 试卷管理模块功能结构图
试卷管理模块的功能就是对现有的试卷进行查看和编辑。
以及通过现有的试题库
制作一份试卷出来。
它包括试卷查看、试卷制作两个模块。
试卷查看:已保存的试卷能够在试卷详细页面进行查看浏览,在试卷的详细页面单击导出word 按钮选择存储位置和设置试卷名称即可导出word 文档保存。
试卷制作:包括自动出卷和人工出卷,其中自动出卷需要设置题型的题量和分数并且选择所属科目即可随机的组成一份该科目的试卷。
人工出卷则是手动在试题库中选择试题并且设置试卷名称组成一份试卷。
3.3.4试题管理模块
试题管理模块功能结构如图7所示。
图7 试题管理模块功能结构图
鉴于计算机专业课程的特点,系统中试卷管理的题型分设单项选择题、多项选择题、判断题、填空题和简答题。
其中对题目的操作又包括添加试题、删除试题、编辑试题、查询试题四个模块。
用户通过试题查看页面查看已经存在于题库中的试题,若发现错误可以在试题的管理页面直接单击进入详细页面编辑进行修改,修改以后点击保存即完成修改试题。
当用户想将新的试题添加到题库中的时候,只需要单击添加试题按钮即可跳转到试题添加页面。
在试题的添加页面完成添加的录入后单击保存按钮,就完成了试题的添加。
当发现不再需要某个试题的时候,我们只需要在试题的管理页面点击删除即可删除题库中试题。
而关于查询试题则是根据不同的科目和题型检索已经存在于题库中的试题,如选择 这门课程的单选题那么在试题管理页面的列表中自动显示和 有关的单选题。
4数据库设计
数据库的设计是一个网站构建的重要环节,如果数据库设计的不好将直接影响到
以后系统的维护和系统功能的扩充,甚至为以后系统的开发带来很大的不便。
4.1数据库概念结构模型设计
试卷管理系统是采用SQL 2005作为网站的后台数据库,根据试卷管理系统的功能需求在试卷管理系统中共建立了9张表[2],它们的实体图如图8——图16所示。
图8 用户实体--属性图
图9 单选题实体—属性图
图10 多选题实体--属性图
图11 填空题实体—属性图
图12 判断题实体—属性图
图13 问答题实体—属性图
图14 试卷科目实体—属性图
图15 试卷页面实体—属性图
图16 试卷试题内容试题—属性图本系统实体关系E-R图如图17所示。
图17 系统实体关系E-R图
4.2数据库逻辑结构模型设计
根据数据库概念结构模型设计[3],我们设计数据库逻辑结构模型如下所示。
Tb_Users(用户名、密码、用户权限、真实姓名、电话号码、备注)。
Tb_SingleProblem(编号、所属科目、题目、选项A、选项B、选项C、选项D、答案)。
Tb_MultiProblem(编号、所属科目、题目、选项A、选项B、选项C、选项D、答案)。
Tb_FillBanksProblem(编号、所属科目、题目、答案)。
Tb_JudgeProblem(编号、所属科目、题目、答案)。
Tb_QuestionProblem(编号、所属科目、题目、答案)。
Tb_Course(编号、科目名称)。
Tb_Paper(编号、试卷编号、试卷所属科目名、试卷名称、试卷状态)。
Tb_PaperDetail(编号、试卷编号、题目编号、试卷类型、分数。
)。
4.3数据库表设计
根据试卷管理系统的数据库概念模型和逻辑模型的设计和分析将设计用户表、单选题表、多选题表、填空题表、判断题表、问答题表、课程表、试卷表和试卷试题内容表等9个表。
用户表用于存放用户信息,具体设计如表1所示。
表1 用户数据表
字段名数据类型及长度是否为主键描述
用户名User_name varchar(20) 否
用户密码User_pwd varchar(30) 否
用户权限User right varchar(10) 否
真实姓名Name varchar(50) 否
电话号码Tel Varchar(20)否
备注Remark varchar(100) 否
单选题表用户存放单选题信息,具体设计如表2所示。
多选题表存放多选题信息具体设计如表3所示。
表3 多选题数据表
填空题表存放填空题信息具体设计如表4所示。
字段名
数据类型及长度
是否为主键
描述
ID int 是 编号 CourseID int 否 所属科目编号
Title Varchar (500) 否 题目 AnswerA varchar(500) 否 答案A AnswerB varchar(500) 否 答案B AnswerC Varchar (500) 否 答案C AnswerD varchar(500) 否 答案D Answer
varchar(2)
否
答案
字段名
数据类型及长度
是否为主键
描述
ID int 是 编号 CourseID int 否 所属科目编号
Title varchar (500 否 题目 AnswerA varchar(500) 否 答案A AnswerB varchar(500) 否 答案B AnswerC varchar (500 否 答案C AnswerD varchar(500) 否 答案D Answer
varchar(2)
否
答案
判断题表存放判断题信息具体设计如表5所示。
表5 判断题数据表
问答题表存放问答题信息,具体设计如表6所示。
表6 问答题数据表
课程表存放课程信息,具体设计如表7所示。
表7 课程数据表
字段名
数据类型及长度
是否为主键
描述
ID int 是 编号 CourseID int 否 所属科目编号 FrontTitile Varchar (500) 否 题目前描述 BackTitle Varchar (500) 否 题目后描述 Answer
Varchar (500)
否
答案
字段名
数据类型及长度
是否为主键
描述
ID int 是 编号 CourseID int 否 所属科目编号
Titile Varchar (500) 否 题目 Answer
Varchar(500)
否
答案
字段名
数据类型及长度
是否为主键
描述
ID int 是 编号 CourseID int 否 所属科目编号
Titile Varchar (500) 否 题目 Answer
Varchar(500)
否
答案
字段名
数据类型及长度
是否为主键
描述
ID int
是 编号 Name
Varchar(200)
否
科目名称
试卷信息表存放关于试卷的信息,具体设计如表8所示。
表8 试卷信息数据表
试卷试题内容数据表存放试卷中的试题信息,具体设计如表9所示。
表9 试卷试题内容数据表
5系统开发过程
5.1类的设计
基于代码重用原则,本系统将常用的数据操作定义在数据库数据操作类中,将数据访问类定义在,将一些常用的函数定义在对应的类中,这样可以方便实现代码重用
[4]。
下面分别介绍这两个类。
5.1.1数据操作类
数据操作类中关于安全访问数据库即从数据库中安全获取数据当数据库中的数据为NULL 时,保证读取不发生异常的方法定义在GetSafeData.cs 文件中。
该文件中定
字段名
数据类型及长度
是否为主键
描述
ID int 是 编号 PaperID int 否 试卷编号 CourseID int 否 所属科目编号 PaperName Varchar (200)
否 试卷名称 Paperstate
Bit
否
试卷状态
字段名 数据类型及长度
是否为主键
描述 ID
int
是
编号
PaperID int 否 试卷编号 Type Varchar(10)
否 试卷类型 TitleID int 否 题目编号 Mark
int
否
分数
义了从一个DataRow中,安全得到列colname中的值:值为字符串类型、整数类型、布尔类型、浮点数类型和时间类型等的方法。
以安全得到列colname中的值:值为字符串类型方法定义为例。
public static string ValidateDataRow_S(DataRow row,string colname)
{
if(row[colname]!=DBNull.Value)
return row[colname].ToString();
else
return System.String.Empty;
}
关于数据库接口类的方法定义在DataBase.cs文件中。
该文件中定义了一下关于数据库连接的方法包括打开数据库连接、关闭数据库连接、释放资源等。
打开数据库连接定义:
private void Open()
{
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
Connection.Open();
}
else
{
if (Connection.State.Equals(ConnectionState.Closed))
Connection.Open();
}
}
关闭数据库连接定义:
public void Close()
{
if (Connection.State.Equals(ConnectionState.Open))
{
Connection.Close();
}
}
释放资源定义:
public void Dispose()
{
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
5.1.2常用函数类
数据操作类分别为题目操作类、试卷科目操作类和试卷操作类存放在App_Code 文件夹下面。
其中题目操作类包括单选题操作类SingleProblem.cs、多选题操作类MultiProblem.cs、填空题操作类FillBlanksProblem.cs、判断题操作类JudgeProblem.cs 和问答题的操作类QuestionProblem.cs;试卷科目操作类Course.cs;试卷操作类Paper.cs。
在这些操作类中定义了一下操作方法。
以单选题为例:在SingleProblem.cs文件中定义了单选题的一些方法定义有插入方法InsertByProc(),更新方法UpdateByProc(int TID),删除方法DeleteByProc(int TID),查询方法QuerySingleProblem(int TCourseID)等。
当我们在操作单选题页面时,只需调用这些方法即可实现。
而无需每次都要写很长的代码来实现插入删除等功能。
插入方法InsertByProc()定义:
public bool InsertByProc()
{
SqlParameter[] Params = new SqlParameter[7];
DataBase DB = new DataBase();
Params[0] = DB.MakeInParam("@CourseID", SqlDbType.Int,4, CourseID);
Params[1] = DB.MakeInParam("@Title", SqlDbType.VarChar,1000, Title);
Params[2] = DB.MakeInParam("@AnswerA", SqlDbType.VarChar, 500, AnswerA);
Params[3] = DB.MakeInParam("@AnswerB", SqlDbType.VarChar, 500, AnswerB);
Params[4] = DB.MakeInParam("@AnswerC", SqlDbType.VarChar, 500, AnswerC);
Params[5] = DB.MakeInParam("@AnswerD", SqlDbType.VarChar, 500, AnswerD);
Params[6] = DB.MakeInParam("@Answer", SqlDbType.VarChar, 2, Answer);
int Count = -1;
Count = DB.RunProc("Proc_SingleProblemAdd", Params);
if (Count > 0)
return true;
else return false;
}
更新方法UpdateByProc(int TID)定义:
public bool UpdateByProc(int TID)
{
SqlParameter[] Params = new SqlParameter[8];
DataBase DB = new DataBase();
Params[0] = DB.MakeInParam("@ID", SqlDbType.Int, 4, TID);
Params[1] = DB.MakeInParam("@CourseID", SqlDbType.Int, 4, CourseID);
Params[2] = DB.MakeInParam("@Title", SqlDbType.VarChar, 1000, Title);
Params[3] = DB.MakeInParam("@AnswerA", SqlDbType.VarChar, 500, AnswerA);
Params[4] = DB.MakeInParam("@AnswerB", SqlDbType.VarChar, 500, AnswerB);
Params[5] = DB.MakeInParam("@AnswerC", SqlDbType.VarChar, 500, AnswerC);
Params[6] = DB.MakeInParam("@AnswerD", SqlDbType.VarChar, 500, AnswerD);
Params[7] = DB.MakeInParam("@Answer", SqlDbType.VarChar, 2, Answer);
int Count = -1;
Count = DB.RunProc("Proc_SingleProblemModify", Params);
if (Count > 0)
return true;
else return false;
}
删除方法DeleteByProc(int TID)定义:
public bool DeleteByProc(int TID)
{
SqlParameter[] Params = new SqlParameter[1];
DataBase DB = new DataBase();
Params[0] = DB.MakeInParam("@ID", SqlDbType.Int,4, TID);
int Count = -1;
Count = DB.RunProc("Proc_SingleProblemDelete", Params);
if (Count > 0)
return true;
else return false;
}
查询方法QuerySingleProblem(int TCourseID)定义:
public DataSet QuerySingleProblem(int TCourseID)
{
SqlParameter[] Params = new SqlParameter[1];
DataBase DB = new DataBase();
Params[0] = DB.MakeInParam("@CourseID", SqlDbType.Int, 4, TCourseID);
return DB.GetDataSet("Proc_SingleProblemList",Params);
}
通过以上方法就可以在单选题的操作页面进行调用这些方法,就能实现单选题的添加、修改、删除和更新操作。
对于其他页面根据其对应的数据库的不同,进行类似的定义即可。
5.2页面框架的设计
系统页面的框架采用上下结构[5],上面显示试卷管理系统的标志,下面又采用左、中、右结构,左边是系统功能显示页面,右边显示对应的操作结果。
页面框架如图18所示。
图18 页面框架图
5.3系统管理主要模块功能的实现
系统的管理的功能包括登录系统、退出系统和权限管理。
关于权限管理功能的实现,能够添加用户、修改用户、删除用户等。
其代码如下:
void ddl_Binding()
{
SqlServerDataBase db = new SqlServerDataBase();
SqlConnection conn = db.DBconn();
string sql = "select * from Users";
DataSet ds = db.Select(sql, conn);
if (ds.Tables[0].Rows.Count > 0)
{
dg_approval.DataSource = ds;
dg_approval.DataBind();
}
}
protected void btn_Submit_Click(object sender, EventArgs e)//添加按钮事件
{
SqlServerDataBase db = new SqlServerDataBase();
SqlConnection conn = db.DBconn();
if (TextBox4.Text.Trim().Length > 11)
{
Response.Write("<script>alert('电话号码不能超过11位!')</script>");
return;
}
string sql = "insert into Users values('" + TextBox1.Text.Trim() + "','" + TextBox2.Text.Trim() + "','" + TextBox6.SelectedValue.Trim() + "','" + TextBox3.Text.Trim() + "','" + TextBox4.Text.Trim() + "','" + TextBox5.Text.Trim() + "')";
db.Insert(sql, conn);
ddl_Binding();
}
protected void dg_approval_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (mandName == "mod")//修改链接事件
{
SqlServerDataBase db = new SqlServerDataBase();
SqlConnection conn = db.DBconn();
int index = Convert.ToInt32(mandArgument.ToString());
string name = this.dg_approval.DataKeys[index].Value.ToString();
string url = "<script>window.open('user_mod.aspx?name=" + name +
"','','resizable=yes,toolbar=no,width=400,height=300,top=250,left=150,dependent=yes,scrollbars=yes');</ script>";
Response.Write(url);//转向指定页面
ddl_Binding();
}
else if (mandName == "del")//删除链接事件
{
SqlServerDataBase db = new SqlServerDataBase();
SqlConnection conn = db.DBconn();
int index = Convert.ToInt32(mandArgument.ToString());//取出索引
string name = this.dg_approval.DataKeys[index].Value.ToString();//获取当前点击行的关键字
string sql = "delete from Users where user_name='" + name + "'";
db.Delete(sql, conn);//删除选择行
ddl_Binding();
Response.Write("<script>alert('删除成功!')</script>");
}
}
protected void dg_approval_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton delButton = (LinkButton)e.Row.Cells[6].Controls[0];
delButton.Attributes.Add("onclick ", "return confirm( '你确认删除吗? '); ");
}
}
}
5.4试卷科目管理模块主要功能的实现
试卷科目管理模块设两个页面分别为试卷科目管理页面和试卷科目添加页面。
其功能包括查看当前存在的试卷科目,编辑修改当前存在的试卷科目、删除试卷科目。
试卷科目管理的显示页面通过用GridView控件并且编辑GridView的列然后绑定数据。
来显示试卷科目信息[6]。
要显示试卷科目信息还需要编写代码如下。
初始化试卷科目代码:
protected void InitData()
{
Course course = new Course();
DataSet ds = course.QueryCourse();
GridView1.DataSource = ds;
GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
InitData();
}
删除科目试卷的代码:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
Course course = new Course();
int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString());
if (course.DeleteByProc(ID))
{
Response.Write("<script language=javascript>alert('成功删除考试科目!')</script>");
}
else
{
Response.Write("<script language=javascript>alert('删除考试科目失败!')</script>");
}
GridView1.EditIndex = -1;
InitData();
}
修改试卷科目代码:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString());
Course course = new Course();
= ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtName")).Text;
if (course.UpdateByProc(ID))
{
Response.Write("<script language=javascript>alert('修改成功!')</script>");
}
else
{
Response.Write("<script language=javascript>alert('修改失败!')</script>");
}
GridView1.EditIndex = -1;
InitData();
}
试卷科目添加页面则是将TextBox控件中的内容写入数据库即可完成试卷科目的添加。
试卷科目添加页面的代码为:
if (Page.IsValid)
{
Course course = new Course();
= txtName.Text;
if (course.InsertByProc())
{
lblMessage.Text = "成功添加该考试科目!";
txtName.Text = "";
}
else
{
lblMessage.Text = "添加该考试科目失败!";
}
}
5.5试卷管理模块主要功能的实现
试卷管理模块设置了四个页面分别为自动出卷页面、手工出卷页面、试卷列表页面、和试卷试题内容页面。
试卷列表页面为当前存在于数据库中的试卷。
其实现过程和试卷科目管理页面类似。
5.5.1自动出卷功能实现
自动出卷页面的功能为设置当前各种题型的题量和分数以及试卷名称即可完成出卷设置。
通过查阅相关资料了解到,自动出卷要求按照输入的试题量将数据库中已经存在的试题随机调用出来的显示在页面上[7]。
形成一份卷子。
这个随机调用试题就需要用到SQL server中的随机函数newid()。
关于SQL server的随机函数newid():newid()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序. 所以最终结果再按这个排序, 排序的结果就是无序的了。
newid()返回的是uniqueidentifier类型的唯一值。
newid()每次产生的值都不一样,那么根据这样的值进行排序,每次的结果也是不一样的[7]。
所以使用该随机函数就可以实现自动出卷中将数据库中的试题随机排序并提取指定数量的试题的组成一份试卷。
自动出卷的具体代码为(以单选题为例):
protected void imgBtnConfirm_Click(object sender, ImageClickEventArgs e)
{
Panel1.Visible = true;
int course = int.Parse(ddlCourse.SelectedValue);
DataBase db = new DataBase();
string GridView1Str = "select top " + int.Parse(txtSingleNum.Text.Trim()) + " * from
SingleProblem where courseID=" + course + "order by newid()";
DataSet ds1 = db.GetDataSetSql(GridView1Str); GridView1.DataSource =
ds1.Tables[0].DefaultView;
GridView1.DataBind();
}
此段代码的解析为先将符合courseID试题在数据库中的数据随机排序,然后select top 取出试题。
如设置单选题为5个那么先将数据库中的单选题数据表随机排序,然后将前5个取出显示在GridView1中。
5.5.2手工出卷功能的实现
手工出卷页面的功能为当选择不同的科目的时候,显示对应科目的试题。
然后通过手工的勾选试题并且设置试题分数组成一份试卷[8]。
选择科目显示对应的试题的代码实现(以单选题为例):
protected void GVbind()
{
int course = int.Parse(ddlCourse.SelectedValue);
DataBase db = new DataBase();
string GridView1Str = "select * from SingleProblem where courseID=" + course + "";
DataSet ds1 = db.GetDataSetSql(GridView1Str);/
GridView1.DataSource = ds1.Tables[0].DefaultView;
GridView1.DataBind();
}
手工的勾选试题并且保存的代码:
DataBase db = new DataBase();
string insertpaper = "insert into Paper(CourseID,PaperName,PaperState) values(" +
int.Parse(ddlCourse.SelectedValue) + ",'" + txtPaperName.Text + "',1) SELECT @@IDENTITY as id";
int afterID = GetIDInsert(insertpaper);
if (afterID > 0)
{
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
bool isChecked =
((CheckBox)GridView1.Rows[i].FindControl("chkSelect1")).Checked;
if (isChecked)
{
string str1 = ((Label)GridView1.Rows[i].FindControl("Label3")).Text;
string single = "insert into PaperDetail(PaperID,Type,TitleID,Mark) values(" + afterID + ",'单选题'," + str1 + "," + int.Parse(txtSingleFen.Text) + ")";
db.Insert(single);
}
}
public int GetIDInsert(string XSqlString)
{
SqlConnection Connection = new
SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
Connection.Open();
SqlCommand cmd = new SqlCommand(XSqlString, Connection);
int Id = Convert.ToInt32(cmd.ExecuteScalar());
return Id;。