1.引言
计算机科学技术、数据库技术以及网络技术的高速发展,为现代教育方式的改革提供了必要的技术基础,使得近年来教学的方法和手段多样化。教学过程中大量引入当今计算机方面的技术,形成各具特色的、更加方便的智能计算机教学系统。而在其中,以计算机来辅助的题库管理系统作为智能计算机教学系统的核心,受到人们广泛的重视。采用先进的计算机科学技术和数据库技术,利用计算机自动生成试卷的功能,并通过积累逐步形成有效的、大量的试题库,使试题和试卷的管理更加的高效和快捷,同时也使的教学和考试的方式有了更多的选择,这对提高教学的效率,高效地利用有限的教学资源和使传统的教学方式逐步走向自动化具有显而易见的促进作用。
http://ukthesis.org/jsjwl/
2.相关知识介绍
2.1 Microsoft Visual Studio平台简介
Visual Studio是微软公司于1997年推出的一款软件开发平台,是当今应用最广泛的Windows平台应用程序开发环境。这个平台目前已经发展到10.0版本,也就是刚刚推出Visual Studio 2010。Visual Studio可以用来创建Windows平台下的Windows应用程序和网络应用程序,同时也可以用来创建网络服务、智能设备应用程序和Office插件。#p#分页标题#e#
2.2数据库SQL Server简介
SQL(Structured Query Language)也就是结构化查询语言。SQL语言的主要功能就是同各种各样的数据库建立联系,进行沟通以及管理。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种数据库操作,例如在数据库中添加数据,更新数据库中的数据,从数据库中提取数据以及删除数据库中的数据等。绝大多数当今流行的关系型数据库管理系统都采用了SQL语言标准。很多数据库都对SQL语句进行了再次的发展,但是包括Insert, Delete, Update, Select, Create以及Drop在内的标准的SQL命令依然能够被用以完成所有的数据操作。SQL Server是一个关系数据库的管理系统。它最初是由Microsoft、 Sybase 和Ashton-Tate三家公司共同开发的。
在本项目中,由于版权原因以及各种其他软件的适应性我们仍然采用Visual Studio 2005+SQL Server 2005来完成本项目。
2.3高级程序语言C#简介
C#是微软在2006年发布的一种为.NET Framework平台做的重要的程序语言之一,它有着来源于C/C++的强大功能和Delphi、Visual Basic易用性,它吸收了其他程序语言的许多优点却只有大约80个关键字。C#是第一个组件导向的程序语言,同时也是精确、简单的面向对象编程语言。C#语言的定义是从C和C++继承而来的,从语言中的许多地方都反映出了这一点,并且同时C#也有着自己新的特点,比如说还能与其他语言交互操作,C#包含一系列称之为“类”的独立的程序设计单元,这些类可以相互作用和交互。它是编写企业应用程序的一种使用简单、功能强大、表达力丰富的编程语言。
3.系统设计分析
3.1开发模式分析
当今的软件体系架构,分层式结构是应用最为广泛、最重要的一种结构。分层式结构一般来说可以分为三层,分别是:
(1) 表现层(UI):处于离用户最近的位置,即表现给用户的可视化界面,运行应用程序的时候用户的所见所得,用来显示业务逻辑层处理之后的数据和接受用户输入的数据并传输给业务逻辑层。
(2) 业务逻辑层(BLL):是系统架构当中最能体现其核心价值的部分。其重点在于对具体表现层、数据访问层传过来的数据进行业务合法性验证以及逻辑处理。它处于表现层和数据访问层的中间,在其中起到了承上启下的关键作用。
(3) 数据访问层(DAL):直接连接并操作数据库中数据,具体的来实现数据的增加、删除、修改、查找、数据的持久化等,并将结果提交给业务逻辑层。
这种区分层次的方法是为了实现低耦合,高内聚。三层结构简单来说就是在客户端和数据库之间增加了一个中间层。所谓的三层体系,并非是指物理上的三层,不是简单的将三台机器合在一起就是三层体系结构,三层体系结构的应用也不仅仅是在C/S、B/S应用程序方面,这里的三层指的是逻辑上的三层。三层体系架构的应用程序将业务逻辑、数据的处理、合法性验证等工作放到了中间层进行处理。一般来说,客户端是不会直接对数据库进行处理,而是通过数据访问层来建立连接,再经由业务逻辑层与数据库进行交互等工作。在三层结构的设计中,遵循了面向接口设计的思想,也就意味着三层结构之间的是向下依赖的,下一层对于上一层来说是“无知”的,当改变上一层的设计而不改变下一层的接口定义时对于其调用下一层来说是没有任何影响的。这样开发人员就可以只关注其中的某一层,并且很容易用新的层来替换原有的,从而达到良好的分工协调、各层代码的复用以及代码更新的功能。但是这样分层降低了系统的性能以及效率。因为如果不采用这样的分层式结构,那么很多业务便可以直接访问数据库。分层结构有时也会导致自上而下的级联的修改。#p#分页标题#e#
3.2关键技术存储过程分析
Sql Server中的存储过程是一组被命名的存储在数据库中的为了完成特定功能的Transacation-Sql语句集。存储过程是可重复利用的一种方法,支持参数变量、条件执行以及其他的编程功能。应用程序能够通过存储过程的名字以及参数来调用执行存储过程。存储过程是数据库的一个重要的组成部分。
存储过程是使用SQL Server提供的Transact-SQL语言编写的程序语句。Transact-SQL语言主要提供变量说明、ANSI兼容的SQL命令、一般流程控制命令、内部函数等功能来让用户设计出符合引用需求的程序。存储过程由应用程序通过调用来执行,允许用户声明变量,可以输入和输出参数、返回执行存储过程的状态值,也可以嵌套调用。存储过程相对于其他的数据库访问方法有以下的优点:
(1) 可重用性。存储过程可重复调用,因此减少了数据库开发人员的工作量。
(2) 高效性。存储过程在创建的时候就进行了编译,而一般的SQL语句每执行一次就需要编译一次,所以存储过程能快速的执行。
(3) 节省性。存储过程编译好之后存储在数据库中,当网络程序调用存储过程的时候只需传递存储过程的名称及参数,因此降低了网络通信量。
(4) 安全性。参数化的存储过程可以防止SQL注入式的攻击,而且可以使没有权限的用户在控制下间接地存取数据,可以使相关的数据操作结合事务处理以保证数据完整性。
存储过程分为了三类:系统存储过程、扩展存储过程以及用户定义的存储过程。其中,用户定义的存储过程分为CLR和Transaction-SQL两种类型。Transaction-SQL存储过程也就是的Transaction-SQL语句集合,可以输入和输出应用程序提供的参数。
4.系统总体设计
4.1 系统面向的用户
根据试题库系统的需求并结合实际考察情况,试题库系统主要用户可分为四类。包括管理员用户、教师用户、学生用户以及游客用户。
其中管理员用户具有登录、管理用户的功能,教师用户具有登录、添加删除修改试题、自动出卷、手动出卷等功能,学生用户具有登录、抽卷、模拟测试并总分的功能、游客具有抽卷、模拟测试并总分的功能。
试题库系统最终面向学院教学、行政、学工等管理人员(而且因工作责任不同而使用不同的系统功能),用户能够使用基本的计算机办公软件便能很好的使用试题库系统。
4.2 系统流程图
密码错误
数据库
检查
错误信息
输入用户名和密码
系统登录界面#p#分页标题#e#
运行程序
功能处理
功能界面
密码正确
图1 系统流程图
4.3 系统的主要功能
VFP试题库系统是专门用于用户注册、登录、试题管理、模拟测试以及管理员进行管理用户的C#应用程序。试题库系统具有开放性、方便性和灵活性。而后台题库管理主要是教师用户的一些操作,教师用户可以轻松地向题库添加、修改和查询试题。
试题库系统的主要功能特点有以下几点:
(1) 用户管理模块:
用户管理模块主要是对由管理员对新用户进行注册、删除、密码修改等操作。
(2) 用户合法性验证模块
该模块的功能是在系统被访问之前,要对进入系统的用户进行安全性检查,防止非法用户进入系统破坏数据及威胁系统安全,避免不必要的损失。只有合法的用户在输入正确的密码后方可进入系统使用相应的功能。
(3) 后台题库管理模块
在该界面窗口中,主要是由教师用户来执行对试题库的管理(包括试题的录入、删除、修改、浏览、统计等)、试卷管理(包括手工、自动组卷、试卷浏览统计等)等功能的操作。其中试题库管理包括的子模块有题目所属的部分(VF程序设计和计算机软件基础)、题目类型、题目内容、题目分值、条件查询等。试卷管理包括的子模块有分题目类型统计分数、试卷总分、错题统计、查看题库结构、生成Word文档、保存试卷等。
(4) 自动出卷模拟测试模块
该模块主要实现了系统自动从试题库中按照一定的规则来取出一组试题并将之组合成一套试卷,用户可以选择输出试卷(如Word文档)、打印试卷或者是直接在模拟测试页面答题,答题之后系统将自动评分并自动组成错题集。
4.4 系统类图分析
(1) 系统总体类库结构
ExaminationSystem 表现层
ExaminationSystemBLL 业务逻辑
ExaminationSystemDAL 数据访问层
ExaminationSystemModels 实体层
图2 系统总体类库结构
(2) 表现层类图
图3 表现层类图
(3) 业务逻辑层类图
QuestionManager 试题类
TestManager 试卷类
UserManager 用户类
ExaminationSystemBLL 业务逻辑
图4 #p#分页标题#e#业务逻辑层类图
(4) 数据访问层类图
QuestionService 试题类
TestService 试卷类
UserService 用户类
ExaminationSystemDAL 数据访问层
图5数据访问层类图
(5) 实体类图
Question 试题类
Test 试卷类
User 用户类
ExaminationSystemModels 实体层
图6 实体层类图
4.5数据访问层的设计与实现
数据访问层ExaminationSystemDAL中由QuestionService提供和试题相关的数据库访问和操作,其中包括添加试题、通过试题编号来删除试题、查询所有试题、通过传入条件来查询试题、通过编号来查询试题、通过传入条件来查询试题并随机排列、查询试题统计、修改试题;UserService提供和用户相关的数据库访问和操作,其中包括通过用户编号来删除用户、添加用户、通过用户名来查询用户密码、查询所有用户、通过用户名来查询用户、修改用户密码;TestService提供和试卷相关的数据库访问和操作,其中包括通过试卷编号来删除试卷、添加试卷、查询所有试卷、通过编号来查询试卷。数据访问层被设计于三层结构的最底层,数据访问层将直接面向数据库。数据访问层依赖于实体层,被业务逻辑层依赖。
4.6 实体层的设计与实现
对于大量的数据来说用变量做参数显然是不合适的,于是在系统设计时创建了实体层,实体层是面向对象设计思想中最基本的类,把大量的数据进行封装,在这里起到数据的实体化存储作用。在VFP试题库系统中实体层定义为ExaminationSystemModels,其中包含了Question、User、Test三个实体类,将试题、用户、试卷分别实体化。试题的属性包含了试题编号、试题内容、试题的正确答案、试题的问题数目、题型、试题所属的部分、试题录入者编号、添加试题的时间、最后修改试题的时间。用户的属性包括用户编号、用户名、用户密码、用户类型。试卷的属性包括试卷编号、判断题集合、选择题集合、程序阅读题集合、填空题集合、创建试卷时间。实体层同时被表现层、业务逻辑层、数据访问层引用。
4.7 业务逻辑层的设计与实现
业务逻辑层ExaminationSystemBLL中包含了QuestionManager、UserManager、TestManager三个类文件。在其中实现用户合法性的验证、对数据的优化、处理。VFP试题库系统的数据结构较为简单,不需要大量的数据处理就能直接存入数据库。只有部分数据访问层传入的数据需要经过数据字典翻译之后再呈现表现层。在VFP试题库系统的数据字典中的定义了试题所属部分、试题类型、用户类型为INT类型的数字来表示。因此在业务逻辑层中将针对这些字段进行翻译为用户能够理解的表达方式。#p#分页标题#e#
5.数据库分析
5.1 数据库设计
VFP试题库系统的数据库在设计师应该满足用户的各种应用需求,并且能够高效、安全的存储数据。在概念设计阶段针对试题、试卷、用户等信息建立抽象的概念数据模型,使之能够真实的反映试题、试卷等的属性、联系以及相互的制约情况。接下来在逻辑设计中将数据模型设计成数据库的一种逻辑模式。最后根据SQL server提供的存储结构和存取方法选定具体的物理存储结构如下所示:
(1) 试题表(TblQuestion)
包括试题编号、试题进制数、试题正确答案、试题答案数、题型、试题部分、录入编号、添加试题时间、修改试题时间。
(2) 试卷结构表(TblTest)
包括试卷编号、软件基础部分判断题个数、软件基础部分选择题个数、程序设计部分选择题个数、程序设计部分读程序题个数、程序设计部分填空题个数、添加试卷时间、最后修改时间。
(3) 试卷关系表(TblTestQuestion)
包括试卷编号、试题编号、试题分数。
(4) 用户表(TblUser)
包括用户编号、用户名、密码、用户类型。
5.2 数据库的连接
在VFP试题库系统中是通过配置app.config来实现连接数据库的。当数据库的连接修改的时候,通过配置文件使得对数据库连接字符串的修改更加容易与方便,而不用去修改应用程序的代码。首先,要导入configuration包,然后通过ConfigurationManager来获取连接字符串并在数据访问层中实现连接在SQL Server中创建的数据库,并对数据库中的数据进行添加、删除、修改、查询等操作。具体实现的代码在这里就不多做描述了。
5.3 存储过程的设计与编写
在VFP试题库系统中一共设计了18组用户自定义存储过程,如下所示:
usp_DeleteQuestionById 通过试题编号来删除试题
usp_DeleteTestById 通过试卷编号来删除试卷
usp_DeleteUserById 通过用户编号来删除用户
usp_InsertQuestion 添加试题
usp_InsertUser 添加用户
usp_InsertTest 添加试卷
usp_SelectAllQuestion 查询所有试题
usp_SelectPwdByName 通过用户名来查询用户密码
usp_SelectQuestionByCondition 通过传入条件来查询试题
usp_SelectQuestionByQuestionID 通过编号来查询试题
usp_SelectQuestionRandomByCondition 通过传入条件来查询试题并随机排列
usp_SelectQuestionStatistics 查询试题统计
usp_SelectUserAll 查询所有用户
usp_SelectUserByName 通过用户名来查询用户
usp_SelectTestAll 查询所有试卷#p#分页标题#e#
usp_SelectTestByID 通过编号来查询试卷
usp_UpdateQuestion 修改试题
usp_UpdateUserPassword 修改用户密码
具体的存储过程代码在这里就不多做描述了。
5.4 实现存储过程的的调用
在应用程序中调用存储过程,首先应该在程序中添加引用System.Data.SqlClient,然后声明数据库连接对象SqlConnection,并且声明数据库命令SqlCommand来执行存储过程。若调用的是第一类存储过程就使用DataAdapter将结果填充到DataSet中,然后传递给业务逻辑层进行处理之后再传递给表现层使用DataGridView之类的将结果呈现界面之上。若调用的是第二和第三种存储过程则不需要此过程,只需根据特定的返回值传递给业务逻辑层进行逻辑判定等操作。
(1)调用一个没有参数的存储过程的代码如下:
SqlCommand objCommand = new SqlCommand("存储过程的名字", 数据库连接对象);
objCommand.CommandType = CommandType.StoredProcedure;
然后根据不同的需求来选择适当的方式执行此处过程,如objCommand.ExecuteScalar()、objCommand.ExecuteNonQuery()。
(2)调用一个有参数的存储过程的代码如下:
SqlCommand objCommand = new SqlCommand("存储过程的名字", 数据库连接对象);
objCommand.CommandType = CommandType.StoredProcedure;
objCommand.Parameters.Add("@参数名", 参数类型).Value = 参数值;
这样就添加了一个输入参数。若需要添加输出参数:
SqlCommand objCommand = new SqlCommand("存储过程的名字", 数据库连接对象);
objCommand.CommandType = CommandType.StoredProcedure;
objCommand.Parameters.Add("@参数名", 参数类型);
objCommand.Parameters["@参数名"].Direction= ParameterDirection.Output;
6.展望及结束语
本文利用三层架构在实际应用程序开发中的实现以及存储过程的实际运用,开发出基于vs2005平台的VFP试题库系统。该系统功能基本符合需求,能够完成题目的管理(选择题、判断题、填空题)、学生的管理、教师的管理、成绩的管理、系统的管理和试卷的管理。但是由于系统是初步完成所以会存在许多的BUG,系统存在许多的不足之处,同时系统的功能仅仅通过代码测试但尚未经过实际运行的测试,因此功能上会存在一些不完善之处。本系统目前仅作为单机的VFP试题管理,因此系统的应用面还能有进一步的扩展,如试题科目上的扩展与作为网络应用程序方面的扩展等。
[参考文献]
[1] 萨师煊,王珊著,《数据库系统概论》,高等教育出版社,2006年5月#p#分页标题#e#
[2] 应新洋,《基于SQL SERVER的数据库安全性研究,数据库及信息管理》
[3] 黄梯云,《管理信息系统导论》,机械工业出版社
[4] 张海藩,《软件工程导论》,清华大学出版社,2003年12月
[5] 《使用C#开发数据库应用程序》,科学技术文献出版社,2008年1月
[6] 《深入.NET平台和C#编程》,科学技术文献出版社,2008年1月
[7] 《SQL Server数据库设计和高级查询》,科学技术文献出版社,2008年1月
[8] 《使用C#开发数据库应用程序》,科学技术文献出版社,2008年1月
[9] Andrew Troelsen《Pro C#with .NET 3.0 Special Edition》,Apress,2007年1月
[10] Andrew Troelsen《C#与.NET高级程序设计》,Apress,2008年1月
VFP Test Database System Admin
Dong Yixiong
Department Of Computer Science Computer Science and Technology 07555012
[Abstract] VFP test database management system, which is developed under the platform of Microsoft Visual Studio 2005 and based on C #, mainly functions as the test item management and giving exams. In regard to database design, it strictly complies with the standardization of database design paradigm. Under the concept of the 3-tier application of MVC, the data access layer adopts Stored Procedures to achieve database management in a wide range. The business logic layer processes the data exchange procedure, which plays a role of a connecter.
[Key words] C# Programming Test Database System SQLServer 3-tier Application