陆和安全验证 ...........................................20 4.3 试题库的 ...........................................25 4.4 试卷的 .............................................30 4.5 出题策略的 .........................................35 4.6 考试的 .............................................39 4.7 学生在线考试表示层的 ...............................43 4.8 改卷的 .............................................49 4.9 用户界面的 .........................................54 4.9.1 DivCss 布局..............................................54 洛阳师范学院 2008 届本科生毕业设计 4.9.2 可编辑的树形控件 .........................................56第 5 章 总结 .......................................................61参考文献 ..........................................................61致谢 ..............................................................61 IV 第 1 章 绪论1.1 系统的研究目的和意义 随着标准化考试的日益普及,在各种考试中越来越多地采用了计算机考试的方式。
相对于传统的卷面考试而言,由于传统的卷面考试从出题印刷到下发试卷等环节需要较长的时间,接触的人员相对较多,因而在保密方面具有一定的困难。
而计算机考试系统采用试题库方式提供试题来源,考前无任何成套试卷,考试时考卷由计算机现场随机生成,各考生试卷不完全相同,从而避免了互相参看等作弊现象或不公平成绩的出现。
目前国内在线考试系统多数都是基于 asp、jsp 等服务器端技术实现的。
这就不免在保存答案时候要刷新考试页面和重新生成试卷。
这种方式的考试系统使用起来给用户的体验非常的糟糕,而且效率不高。
另外大多数的考试系统都是结构化的方式分析设计的。
结构化的代码组织方式在代码复用和代码可维护性方面显然不如面向对象的方式。
所以本系统在考试模块的实现上利用了 Ajax 方式来保存答案。
并在系统分析和设计上采用了面向对象的方式。
1.2 系统的开发背景1.2.1 开发工具和平台介绍 本系统采用了基于.net 平台的
Asp.net 2.0 框架。
使用到了 Ajax.net 和 Jquery作为 javascript 类库。
使用了基于 XML 和 xslt 的转换视图来显示 html 考试页面。
使用了 NHibernate 作为数据访问层框架。
开发工具主要是 Visual Studio 2005。
使用了 Visual Source Safe 2005 作为源代码和版本控制工具。
数据库使用的是 SqlServer 2005 Express。
单元测试工具使用的是 NUnit。
1.2.2 NHibernate 介绍 在企业应用开发中使用面向对象和关系数据库可能是一件非常笨重耗时 的事情。
NHibernate 是一个针对.net 平台的对象关系映射工具。
NHibernate 不 仅可以映射.net 类到数据库表中。
也提供了灵活的数据查询取回的功能。
与使 用 sql 和 ado.net 手工处理数据相比,有了 NHibernate 可以大大的减少开发时间。
本系统的使用 NHibernate 做为数据访问层的框架,而不是直接使用 ADO.NET。
有 NHibernate 只需要编写映射文件。
当使用 NHibernate 来做数据操作的时候 NHibernate 会自 动生 成 sql 语句来操 作数 据库的内容 。
映射 文 件会告诉 洛阳师范学院 2008 届本科生毕业设计 NHibernate 将类保存到那个表,将那个属性保存到那个字段中。
NHibernate 处 理了所有的数据持久化工作。
我们就可以专注于对象的业务逻辑。
这正是面向 方面编程(AOP)所提倡的把系统的职责(方面)划分到不同的模块中。
NHibernate 就是封装了数据持久化的这方面的任务。
这样在编写核心的业务逻 辑类的时候就不用关心持久化的任务了。
这让代码更加的清晰容易理解。
也容 易修改。
1.2.3 XML,XSLT 生成 xhtml 介绍 在表示层的经典架构 MVC 中 ,强调 Model模型、View 、 (视图) Controller(控制器)三个角色的分离。
这一框架已经得到了
Asp.net 的默认的支持。
其中aspx 文件就是 View,aspx.cs 就是 Controller 领域类则是 Model。
按照 Martin Flower的定义 aspx 算是模板视图,aspx.cs 则是页面控制器。
在开始设计试卷显示问题的时候,开始考虑的也是使用
Asp.net 控件来生成试卷。
但是试验发现由于多个试卷对象间嵌套比较复杂,将试卷绑定到控件上代码比较复杂和混乱。
于是采用了另一种视图。
转换视图。
就是将试卷对象表示成 XML,然后用 xslt 将 XML转换成 xhtml 再呈现给浏览器。
这种视图使用起来比较直观。
试卷对象先用 XML表示。
然后通过 xslt 换成 xhtml 表示。
这种方法还可以将试卷格式化成其它不同的表示,只要有不同的 xslt 转换就行了。
1.2.4 Ajax.net 和 Jquery Ajax 是一种的改善 web 应用程序用户体验的技术。
就是在浏览器中能够向后台向服务器发出异步请求,并根据返回内容不刷新页面而更新页面的技术。
它是几个老技术的综合应用。
包括 Javascript、XML、XMLHttpRequest 对象、DOM和 CSS。
Javascript 则是将这几种技术粘合在一起的胶水。
但是浏览器之间对Javascript、DOM、CSS 的支持不一致。
给 Ajax 编程带来了很大的难度。
Ajax.net和 Jquery 正是一个提供了跨浏览器的 Javascript 库。
它们对 Ajax 的支持都差不多。
但是 Ajax.net 由于是微软自己的产品,所以它可以很好的和服务器端的技术集成。
比如 Ajax.net 提供了客户端访问 web 服务的内置支持。
Jquery 则是一个非常流行的 Javascript 库。
它提供了非常简练操作 DOM 的功能。
提供了非常方便获取 DOM 节点引用的选择器。
选择器类似 CSS 中的选择器。
链式表达式的应用也让代码更加简洁优雅。
所以在系统中同时使用了这两个库。
Ajax.net 主要用于和服务器端的通信。
Jquery 用来操作修改界面。
相互取长补短。
1.3 可行性分析 本系统属于数据信息管理系统类。
用户对功能上的要求不是很复杂。
加上有这么强大工具可框架支持。
所以本系统十分可行。
2 第 2 章 需求分析2.1 需求说明 本系统统是一个基于 bs 结构的考试系统,它用来给学校提供无纸化考试的平台,利用本系统管理员可以管理建设各个科目的试题库,并通过章节难度来组织试题。
教师可以根据题库来指定考试策略。
然后根据考试策略随机的生成试卷供学生考试。
试卷的题型可以包括单选题,多选题,判断题,填空题,简答题 5中基本题型。
也可以是这五种题的组合题型。
学生参加考试应包括基本的考场规则,比如,迟到多少分钟不能进入考场,不能提前交卷。
每次考试可以允许多个班级参加,不属于参加班级的学生不能参加考试。
每次考试指定一个考试策略,并根据考试策略为参加考试的学生生成试卷。
考试时间到后不再允许交卷。
考试结束后老师可以在线的批改试卷。
客观题允许自动阅卷。
学生可以在线查看自己的考试成绩!2.2 用例说明1. 管理班级:管理员登陆后可以添加,删除班级。
考试将要指定允许参加的班 级,只要属于参加班级的学生才能参加考试。
班级信息包括班级名称等信息。
2. 管理教师信息:管理员登陆后可以添加修改教师信息。
教师信息包括登陆名, 密码等信息。
将作为教师登陆验证的依据。
3. 管理学生:管理员登陆后可以给班级添加学生信息,学生信息包括学号,姓 名,密码等信息。
密码初始为学号。
学生登陆后可以修改自己信息。
4. 管理题库:教师登陆后可以添加,修改,删除科目、章节、题目等信息。
其 中科目可以包括若干章节。
科目章节是用来组织题库的。
章节可以包括多个 试题。
试题有难度,内容,答案等信息。
5. 制定出题策略:教师登陆后可以添加,删除,修改考试策略、考试题型、策 略项等信息。
考试策略包括若干考试题型,考试题型包括多个策略项。
策略 项包括题目出题范围和分值,出题数等信息用来从指定题中随机抽取一定的 题目。
6. 建立考试:教师登陆后可以建立一次考试,考试信息包括考试的名称,开始 时间,结束时间,参加班级,迟到时间,交卷时间,和一个考试策略等信息, 在线考试时候将根据考试信息模拟真实的考场规则。
7. 该卷子:教师登陆后选择学生的考卷,根据学生输入的答案和标准答案给学 生的每个题打分。
系统允许自动给客观题打分和合计总分。
8. 参加考试:学生登陆后选择参加的考试。
考试根据考试规则判断是否允许学 洛阳师范学院 2008 届本科生毕业设计 生参加。
如果允许将根据指定的考试策略为学生随机生成试卷。
学生考试时 候可以随时保存自己的试卷。
如何学生掉线重新登陆参加考试可以从上次保 存后的试卷状态继续答卷。
学生做完试卷可以交卷。
如果交卷时间不到不允 许交卷。
如果考试结束也不允许交卷。
9. 查看分数:学生输入学号和密码选择查看分数,系统显示所有学生所有考试 的成绩单。
10. 修改密码:所有用户登陆后都可以修改自己的登陆密码。
2.3 用例图 图 2-1 系统用例图 4 第 3 章 系统的总体设计3.1 系统的业务流程 根据用户需求,本系统业务流程的设计如图 3-1。
管理管理员 管理员页面 管理学生 管理教师 登陆 管理班级 修改密码 管理题库 教师页面 管理科目 制定出题策 添加考试 批改试卷 学生页面 参加考试 查看成绩 图 3-1 系统业务流程图3.2 系统的分层设计 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。
微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层、表示层。
本系统也采用了这种分层的方式。
下图 3-2 为本系统分层架构图。
洛阳师范学院 2008 届本科生毕业设计 图 3-2 系统架构图 数据访问层:主要负责数据库的访问。
简单的说就是实现对数据表的 Select,Insert,Update, Delete 的操作。
在线考试考试系统的数据访问层中使用了NHbiernate 作为 OR 映射工具。
业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关。
在线考试的业务逻辑主要是关于考试规则的逻辑。
比如考试迟到不能参加考试、不能提前交卷等。
如果涉及到数据库的访问,则调用数据访问层。
表示层:是系统的 UI 部分,负责使用者与整个系统的交互。
在这一层中,理想的状态是不应包括系统的业务逻辑。
表示层中的逻辑代码,仅与界面元素有关。
在线考试中,是利用
Asp.net 来设计的,因此包含了许多 Web 控件和相关逻辑。
3.3 系统的包的设计 包在.net 中对应的术语是命名空间。
在线考试系统划分了三个大的命名空间,分别是 Web(包括表示层的内容)、BLL(包括业务逻辑层的内容)和 DAL 包括了数据访问层的内容。
其中 BLL 包括了 5 个子命名空间,分别是 Domain、DataInterface、Service、Utils 和 Exception。
系统还使用了其他的外部类库,包括 图Ajax.netJqueryNHibernateLog4Net 等。
3-3 是系统包图,展示了包之间的依赖关系。
另外两个是工具类和自定义异常包,由于与核心设计关系不大图上没有说明。
6 图 3-3 系统包图 下图 3-4 是 vs 解决方案中对应的项目组成。
其中一个项目是个程序集。
Test是个单元测试项目。
图 3-4 解决方案图 洛阳师范学院 2008 届本科生毕业设计 Domain 包含了所有的领域类和映射文件,比如 Student、Question 等。
大部分为数据类,没有什么行为。
如图 3-5 所示 图 3-5 领域包的文件组织图 DataInterface 包含了数据访问层的接口 IDao、IDaoFactiory 工厂接口和DaoManage。
DaoManage 是用来注入具体 Dao 工厂的简单工厂类,该类同时是访问 Dao 对象的门面类。
如图 3-6 图 3-6 DataInterface 包的文件组织图 Service 包含的是对一个对业务层的简单封装的外观类,Service 类本身没有任何业务逻辑。
它总是将数据访问的职责委托给 Dao 对象。
将业务逻辑委托给Domain 对象。
如图 3-7。
8 图 3-7 Service 包的文件组织图 DAL 包含了具体的数据 Dao 实现类和使用到的几个 NHiernate 帮助类。
该包的 Dao 对象利用 NHibernate 实现了 ExaminationSystem.BLL.DataInterface 中定义的数据访问接口和 Dao 工厂接口.如图 3-8 所示。
图 3-8 DAL 包文件组织图 Web 包含了表示层用到的 Web 页面和 js 脚本、WebService、Css、xslt 等内容。
还有一些 UI 相关类和 HttpModule 类。
NhibernateSessionModule 用来实现Open Session in View。
SecurityModule 用来实现安全检查。
3.4 各层之间的依赖关系 由于 BLL 层是整个系统的核心部分,所以表示层和数据访问层都应该依赖与 BLL 层。
就是说要实现数据访问层对业务层的依赖倒置,这需要使用分离接口来实现。
如图 3-9 所示,左图为业务层依赖数据访问层。
右图为分离接口后倒置的依赖关系。
图 3-9 各层依赖图 洛阳师范学院 2008 届本科生毕业设计业务层和表示层的关系和以前的一样这里就不多介绍了。
3.5 抽象工厂和反射实现对数据访问层的依赖注入 业务逻辑层是不依赖数据访问层的,但是业务层还得使用数据访问层来操作数据。
既要使用又不能依赖,这就引出了抽象工厂模式。
因为不能 new 关键字来创建数据访问层的具体 Dao 对象,所以我们只能从工厂里获得 Dao 对象,然后通过 IDao 接口来使用数据访问层的 Dao 对象。
下面给出具体的类图来说明.如图 3-10 所示 图 3-10 抽象工厂类图 为了简单,该图的 IDao 接口只有一个数据操作方法 GetById 当然还可以有SaveUpdateDelete 等方法。
IDaoFactory 里也只有一个工厂方法 GetDao 具体实践时候应该是每一个领域类都有一个 Dao 对象与之对应。
比如 IStudentDao、ITeacherDao 等。
而 IDaoFactory 应该对应的工厂方法可能有 GetStudentDao、GetTeacherDao 等等。
可以看到各个类的依赖关系不存在从业务层到数据层的依赖。
当我们想要获得一个具体 Dao 对象时候,我们先从 DaoMangager 那里通过反射获得具体 DaoFactory 的实例。
这样我们就可以通过 DaoFactory 来获得具体的 Dao 对象了。
将依赖关系倒置后我们就可以动态的切换数据访问层。
因为我们的业务层不依赖与具体的数据访问层,而是依赖与数据访问层接口。
3.6 各层之间的交互 10 上面介绍了各层之间的静态关系,下面介绍各层之间是如何动态交互的。
用一个实例来说明,比如要显示一个领域对象信息。
如图 3-11 所示。
图 3-11 各层交互顺序图 从图上可以看出消息是如何在各层之间传递的首先从显示信息的。
showDomainPage 发送请求给 DomainService 服务对象,请求获得 id 号为 1 的Domain 对象。
DomainService 从 DaoMangager 那里获取具体 daoFactory 对象.