




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录第一章系统概述11.1系统开发背景和意义11.2开发目的11.3开发环境11.4硬件需求2第二章 系统需求分析32.1系统功能设计32.2系统功能模块划分42.3系统数据流图52.4数据字典6第三章 系统总体设计73.1总体设计目标73.2概念模型(E-R图)733关系模式8第四章 系统详细设计1141系统通用类设计11411基本通用类设计114.1.2系统流程图11第五章 系统程序实现与测试145.1 用户登录和新用户注册145.1.1用户界面设计145.1.2用户登录145.1.3用户注册155.1.4用户角色管理165.1.5用户密码修改175.2题库设计175.2.1试题种类管理175.2.2试题图片管理185.2.3添加试题185.2.4修改试题195.2.5删除试题195.2.6试题答案设计195.2.7试题答案添加205.2.8试题答案修改205.2.9试题答案删除215.3试卷设计215.3.1添加新试卷215.3.2修改试卷225.3.3删除试卷225.4随机生成试卷225.5考生在线答题245.6自动阅卷265.7考试结果275.8测试275.8.1测试项目285.8.2测试运行结果28结束语31参考文献32第一章系统概述1.1系统开发背景和意义随着我国经济的高速发展,我国的交通运输能力不断提高,越来越多的人开私家车到异地进行商务或者旅游等活动。在这一条件下,我国的车辆逐渐增多,最近几年,学车的人也是越来越多。为了减少交通事故的发生,车管所对驾驶员的交通知识考核起着至关重要的作用。随着信息量的逐步增加,繁杂的数据处理费时费力,单纯以人力进行的驾驶员理论考试的考核已经不适合驾驶理论考试的现状。现在是一个信息产业的时代,国家把信息产业作为增长国民经济的重要因数。在这样的环境下,先进的信息技术进行驾驶员理论考试已成为必要。驾驶模拟考试系统以计算机为操作工具,按照驾驶理论考试的流程,把驾驶理论考试的一些工作人员从繁琐的数据处理中解放出来,从而提高驾驶考试的工作效率。驾驶理论考试系统把驾驶的理论试题保存于数据库中,通过计算机可以很方便地查询使用所需要的数据,而且这些操作全部由系统内部的代码完成。考生和系统管理员通过系统的友好界面,输入一些简单的数据便可操作。该系统采用B/S模式进行设计,异地的想学车的学员也可以使用该系统,进行模拟考试,从而了解自己对交通规则了解多少。本系统主要由使用Microsoft Visual Studio.NET 2003 开发的页面,由SQL Server2000开发的数据库组成。1.2开发目的本系统采用B/S模式设计,开发目的除了方便车辆管理所的工作人员。同时把驾驶理论所有试题保存到数据库,通过互联网方便地进行模拟考试,还能让学车的学员对交通规则和法律知识有更多的了解。1.3开发环境本系统是在windows XP操作系统下,使用Microsoft Visual Studio.NET 2003作为开发工具进行开发的。数据库使用的是SQL Server2000。1.4硬件需求在运行本系统前,请检查以下计算机是否满足以下要求。l 服务器要求的配置为: CPU:Intel 赛扬以上,建议Intel Pentium以上 内存:128M以上,建议256M以上 硬盘:1G以上的可用硬盘安装空间 操作系统:Windows 2000以上,Internet信息服务器5.0(IIS 5.0) 软件:Microsoft SQL Server 7.0以上版本l 客户机硬件配置要求为: CPU:Intel赛扬 以上,建议Intel Pentium 以上 内存:32M以上,建议64M以上 操作系统:Windows2000以上,IE5.0以上版本第二章 系统需求分析2.1系统功能设计根据驾校理论考试的逻辑划分,本系统一共有六个子系统,分别是用户登录和注册,用户角色管理,用户管理,试题管理,题库管理,在线答题。其功能结构图如图2.1所示。驾驶理论考试系统用户管理试题管理题库管理在线答题图2.1 系统功能图 用户管理 添加用户,修改用户,删除用户,用户登录和注册。 试题管理(1)试题类别管理,主要是实现试题类别的添加、修改试题类别、删除试题类别、和试题的类别排序功能。(2)试题图片管理,主要实现试题的图片添加,删除和修改等功能(3)考试试题管理,主要实现试题的添加、修改、删除功能。(4)试题答案管理,主要实现试题答案的添加、修改、删除功能。 题库管理题库管理主要是在系统中构造试卷,即试题的每一种题型有多少题,添加试卷、及删除试卷和修改试卷功能。 在线答题(1)动态随机生成试卷,使用随机函数动态地从题库中取得整套试卷和题目,每次生成的试卷是不相同的。(2)显示出整套试卷,依次答题,系统自动判断该题是否正确。(3)最后显示该考生的考试成绩。2.2系统功能模块划分系统整体设计如图2.2所示,此系统可以划分为业务逻辑层、数据访问层和数据库。数据访问层业务逻辑层数据库图2.2 系统设计图数据库、数据访问层和业务逻辑层的具体描述如下:(1)数据库位于系统最底层,它存储系统的所有数据。(2)数据访问层建立在数据库之上,应用程序通过该层访问数据库。数据访问层一般封装数据库的选择、添加、更新、删除等操作。同时还为业务逻辑层提供访问数据库的接口或函数等。该层直接与数据库相关联,同时又为业务逻辑层服务,所以数据库访问层设计的好坏关系到整个系统的成败。下面以用户管理模块的数据访问(UserDB类)为例,介绍数据访问层的实现方法。UserDB类实现访问数据库的方法如下:Public SqlDataReader GetUsers() 从用户表Users获取所有用户信息。Public SqlDataReader GetSingleUser(int nUserID)从用户表Users获取单个用户信息。Public int AddUser(String sUserName,String sPassword,String sEmail)添加新用户到用户表Users中。Public void UpdateUserPassword(int nUserID,string sPassword)更新用户的密码。Public void UpdateUserState(int nUserID,int nState)更新用户的当前状态。Public void UpdateUserRole(int nUserID,int nRoleID)更新用户的角色。Public void DeleteUser(int nUserID)从用户表Users中删除用户。Public SqlDataReader GetUserLogin(String nUserName,String sPassword)从用户表Users中获取用户ID,用于用户登录。(3)业务逻辑层包括题库创建、用户管理、用户注册等业务逻辑,它一般由Web页面实现,如系统登录页面Default.aspx、用户管理页面UserManage. aspx、随机生成试卷页面CreateExaminePaper.aspx等。系统是由六个完整的功能实现的,根据这些功能,可以设计出系统的功能模块,各个系统功能模块之间的关系如图2.3所示。用户管理试题管理题库管理在线考试驾驶理论考试系统图2.3 模块关系图2.3系统数据流图本系统采用B/S模式设计,开发目的除了方便车辆管理所的工作人员。同时把驾驶理论所有试题保存到数据库,通过互联网方便地进行模拟考试,还能让学车的学员对交通规则和法律知识有更多的了解。该系统数据流图如图2.4所示。D1用户信息 D2题库 4判卷 核对信息 题库管理3提交试卷2生成试卷1核对用户信息考生 登录 核对正确 答题 提交5显示考试成绩考生 查看 计算考试成绩 读取成绩D3考试成绩图2.4系统数据流图2.4数据字典数据流图描述了系统的分解,但没有对图中各成分进行说明,数据字典就是为了数据流图的每个数据,以及组成数据流或文件的数据项作出说明。数据字典:试题=问题内容+问题类型+问题选项+问题图片+问题分值用户=用户名+用户密码+用户Email地址+用户类型答案=问题的正确答案+答案所属的问题名称: 试题简述: 试题的基本资料组成: 问题内容+问题选项+问题类型+问题图片+问题分值名称: 用户资料简述: 用户的基本资料组成: 用户名称+用户密码+用户Email地址+用户类型名称: 答案简述: 答案的基本资料组成: 问题的正确答案+答案所属问题第三章 系统总体设计3.1总体设计目标驾驶模拟考试系统以计算机为操作工具,按照驾驶理论考试的流程,把驾驶理论考试的一些工作人员从繁琐的数据处理中解放出来,从而提高驾驶考试的工作效率。驾驶理论考试系统把驾驶的理论试题保存于数据库中,通过计算机可以很方便地查询使用所需要的数据,而且这些操作全部由系统内部的代码完成。考生和系统管理员通过系统的友好界面,输入一些简单的数据便可操作。该系统采用B/S模式进行设计,异地的想学车的学员也可以使用该系统,进行模拟考试,从而了解自己对交通规则了解多少。3.2概念模型(E-R图)得到前面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系。这些实体包含各种具体信息,通过相互之间的作用形成数据的流动。驾驶模拟考试系统以计算机为操作工具,按照驾驶理论考试的流程,把驾驶理论考试的一些工作人员从繁琐的数据处理中解放出来,从而提高驾驶考试的工作效率。驾驶理论考试系统把驾驶的理论试题保存于数据库中,通过计算机可以很方便地查询使用所需要的数据,而且这些操作全部由系统内部的代码完成。考生和系统管理员通过系统的友好界面,输入一些简单的数据便可操作。本例根据上面的设计规划出的实体有:管理员,试卷,考生。下面画出各实体之间的主要E-R关系图,如图3.1所示。考生用户密码用户名考试考试题目管理理管理员考试时间用户密码用户名试题内容试题类型试题答案试题分值 图3.1个实体之间的主要关系的E-R图3.3关系模式用户(用户ID,用户名,用户密码,用户Email,用户角色ID)问题(问题ID,问题内容,问题类型,问题图片,问题分值)答案(问题正确答案,问题ID)试卷(试卷ID,试题总分数,考试时间)3.3.1字段些系统使用 SQL Server 2000 作为应用程序的数据库,此系统的实际需要,系统至少需要实现考试题库,用户及其角色和试卷数据,因此本系统数据库所用到的一些用户表、角色表、考生表、试题表,问题表、试题种类表、试题答案表、试卷表、试卷种类表和图片表。1用户表用户表用于存储系统的用户信息,该表引用角色的用户角色ID字段作为表的外键,用户表的字段说明如表3-1所示。表3-1 用户表字段说明编号字段名称字段类型1用户表IDInt2用户名Varchar(50)3用户密码Varchar(50)4用户EmailVarchar(50)5用户角色IDInt2角色表角色表用于存储用户的角色信息。角色表的字段说明如表3-2所示。表3-2 角色表字段说明编号字段名称字段类型1用户表IDInt2用户名Varchar(50)3考生表 考生表存储参加考试的考生信息,该表引用了用户表的主键用户ID作为该表的外键。4问题表问题表存储系统的试题信息。该表引用问题种类表QuestionKinds的问题类型ID、图片表的问题图片ID、用户表的用户ID作为表的外键。问题表的字段说明如表3-3所示。表3-3 问题表的字段说明编号字段名称字段类型1问题表IDInt2问题内容Varchar(200)3问题类型IDInt4问题图片IDInt5问题分值Int5问题种类表问题种类表存储问题种类的信息。问题种类表的字段说明如表3-4所示。表3-4 问题种类表的字段说明编号字段名称字段类型1问题表IDInt2问题类型Varchar(50)6问题答案表问题答案表存储题库中问题的答案信息,该表引用问题表的答案所属问题ID作为表的外键。问题答案表的字段说明如表3-5所示。表3-5 答案表的字段说明编号字段名称字段类型1问题答案表IDInt2标题Varchar(4)3问题选项Varchar(200)4正确答案Varchar(4)5答案所属问题IDInt7图片表图片表存储系统的图片信息。8试卷表试卷表存储每一套试卷的信息,该表引用用户表的用户ID、角色表的用户角色ID,试卷表的字段说明如表5-6所示。表5-6 试卷表的字段说明编号字段名称字段类型1角色IDInt2试题总分数Int3考生角色IDInt9试卷类型表试卷类型表存储每一套试卷的详细信息,试卷表的试卷ID作为表的外键。第四章 系统详细设计41系统通用类设计在应用程序开发过程中多处使用类,如数据库通用类、应用数据通用类。 411基本通用类设计系统采用自定义的异常处理类MyException处理应用程序异常机制。该类定义了函数MyException()重载基类的函数Exception(),同时还继承基类的message和inner两个变量。异常处理类MyException定义了两个同名的函数,其中参数source表示错误的类型编码、参数message标识错误的具体信息;参数Exception继承系统的异常参数。4.1.2系统流程图系统管理员可以对用户管理和用户角色分配管理等功能,此功能的关系流程图4.1所示。否是用户管理和角色管理用户管理角色权限管理用户角色分配系统管理员否开始结束图4.1 用户管理与角色管理关系系统流程图在线答题模块中,系统首先按照试卷的要求,如试卷总分、试卷章节、试题的类型等,随机从数据库生成一套试卷。然后把各个试题显示在答题页面上。试卷随机产生流程如图4.5所示。是否否随机生成试卷获取用户角色随机获取试卷种类显示试卷种类数量完毕试卷生成完毕是开始结束图4.5用户答题流程图在随机生成试卷过程中存在两个函数的调用过程,右边的回调过程返回到随机生成试卷的状态,该函数调用过程是在没有满足试卷的题型或题型种类条件时发生,左边的函数返回随机获取试卷种类状态,该函数是在没有满足试卷种类条件时发生。数据库中的每一类型的试卷所包含的题型是不相同的,且每一种题型所包含的试题和试题的题量也是不同相同的,各种类的试卷的总分和试题的章节都在同一个范围内,即属于同一类型的试卷。试题的总分,试题的开始章节,试题的结束章节,试题的种类和第几种题型的数量ArrarList变量。应用程序在创建整套试题之前会检查以上几个参数是否匹配。如果每套试题的总分数为设置的试题的总分的值,则为有效试卷,反之亦然。随机生成试卷的流程如图4.6所示。是否否否随机选取试卷取到试卷参数随机生成一种题型到试卷结尾?生成题型成功试卷生成成功是是开始结束图4.6随机生成试卷流程图第五章 系统程序实现与测试5.1 用户登录和新用户注册5.1.1用户界面设计用户在登录由Default.aspx页面实现,它的代码隐藏在Default.aspx.cs文件中。用户登录是应用程序的主要入口,用户只有通过该入口才能进入系统。由于用户所属的角色不相同,所以在登录时都要选择自己所属的角色,否则不能进入系统。用户登录使用了两个TextBox控件作为输入名称和密码,用户单击“确定”按钮就可以登录到系统。单击“注册”按钮可以重新注册一个用户。用户的角色是从Roles表中获取的,考生为默认角色。用户登录使用了两个验证控件,它们为RFVUserNamet和RFVPassword,分别验证用户名称和用户密码是否为非空。两个非空验证控件仅仅对“确定”按钮有效,其实现方法就是把“注册”控钮的属性CausesValidation值设为False。5.1.2用户登录用户登录过程是一个验证过程,应用程序首先从数据库获取该用户的信息,如用户名称和用户角色,然后再根据用户的角色显示用户的下一步操作页面。如果考生登录,显示生成等待页面和在线答题页面;如果管理登录,显示题库页面;如果系统管理员登录,则显示系统维护页面。无论用户是什么样的角色登录,系统都将保存该用户的ID和角色ID。用户单击“确定”按钮触发事件SureBtn_Click()来实现用户登录验证过程。该事件调用了数据访问层的函数 GetUserLogin()验证用户的输入,如果是正确的,用户就登录到系统中。否则页面将弹出错误信息的提示。函数GetUserLogin()从数据库获取合法用户的ID数据,函数GetUserLogin() 调用存储过程Pr_GetUserLogin()访问数据库。为了整个系统的安全性,在用户表Users中的存储用户的密码Password字段不是用户密码的真实值,而是加密后的密码字符串。加密函数Encrypt()被定义为UserDB类的静态函数。调用加密函数时,首先把加密字符串编码成Uncode,然后使用系统的不对称加密算法MD5加密用户密码串。5.1.3用户注册添加新的用户有两种方式,一种是从后台的用户管理中添加用户,另一种是用户注册,用户注册方式只能添加考生。因为具有管理员角色的用户可以直接进入到系统后台进行管理。用户注册时分别输入用户名称、用户密码、确认密码和用户的电子邮箱信息即可。前三个控件都用了验证控件和一个正则表达式,电子邮箱则使用格式验证。单击“确定”按钮触发事件SureBtn_Click(),该事件调用数据访问层函数AddUser()提交新用户注册信息到表Users中。SureBtn_Click()事件调用函数AddUser(),AddUser()调用存储过程Pr_AddUser添加新用户信息到用户表中。在添加的过程中,还查看用户表中是否有同名称用户,有同名用户就不添加当前的用户。用户管理功能由页面UserManage.aspx实现,用户管理模块实现了用户的删除、角色的分配、密码的修改。界面设计如图4.2所示图5.2用户管理及角色管理用户列表框显示系统当前包含的所有用户,系统管理员单击“X”按钮即可删除当前列表框被选中的用户。单击“”按钮即可添加新用户。用户管理页面初始化时,调用BindData()实现绑定用户列表控件,该函数调用数据访问层UserDB类的函数GetUser()从用户表中获取用户和用户ID等数据。单击删除“X”按钮实现删除用户的功能,该按钮为图像按钮,单击此按钮触发事件deleteBtn_Click()。该事件调用数据访问层UserDB类的函数DeleteUser()删除数据库中的用户记录。删除列表中的用户之后,该事件还要重新绑定用户数据。单击添加“/”按钮实现实现用户添加功能,此按钮为图像按钮,单击此按钮触发事件AddBtn_Click()。用户密码同样是采用MD5加密函数Encry(),事件调用数据访问层UserDB类的函数AddUser()添加新的用户到数据库中。添加后事件重新绑定用户数据。5.1.4用户角色管理 用户角色管理实现用户角色的分配功能。系统存在角色较多,不同的角色具有不同的操作权限。如系统管理员具有该角色的用户可以维护和管理整个系统;管理员角色的用户可以管理整个系统,如可以添加系统考试试题,创建不同类型的试卷;不同的考生分配不同的试卷,而且参加考试后只能看到自己的考试成绩。用户角色管理由页面RoleManage.aspx实现。 用户角色管理页面初始化时调用函数BindUserData(),调用数据访问层的UserDB类的函数GetUsers()从表中获取用户数据,然后再绑定到用户列表控件。函数BindRoleData()调用数据访问层的RoleDB类的函数GetGetRoles()从表中获取用户数据,然后再绑定数据到角色列表控件。函数BindUserRoleData()调用数据访问层的UserDB类的函数GetSingleUser()从表中获取用户数据,然后再绑定到用户角色控件。用户单击“设为该用户的角色”按钮触发事件,该事件实现用户角色之间的关联功能,事件调用函数UpdateUserRole()修改用户表的角色字段值。5.1.5用户密码修改用户密码修改如图5.2所示图5.2用户修改密码界面修改密码由UpdataUserPassWord.aspx实现,用户修改自己的密码时必须知道自己以前的密码,否则不能修改密码。单击“确定”后触发事件SureBtn_Click().先判断新密码的两次输入是否一致。如果一致,就把新的密码更新到数据库,该事件调用数据访问层UserDB类的函数UpdateUserPassword()修改表中的密码。此函数获取用户的名称,用户只能修改自己的密码,不能更改名称。5.2题库设计题库设计主要是试题的添加、删除和修改,试题图片的添加、修改和删除,试题种类的添加、修改、删除排序及试题的答案添加、删除和修改等。 5.2.1试题图片管理试题图片管理由页面PictureManage.aspx实现,试题图片管理主要实现图片的添加、删除、修改等功能。界面设计如图5.3所示:图5.3 试题图片管理试题图片管理在初始页面时调用函数BindPictureData(),该函数首先从图片表中获取所有图片的信息,然后再把数据绑定到列表控件。图片都是上传到系统的一个文件夹中,显示图片的时候都是从数据库获取该图片的路径,然后在显示在页面上。单击“上传”按钮即是添加新的图片,添加图片后,然后重新绑定数据。单击“/”、“X”此按钮即可修改图片信息和删除图片。5.2.6试题答案设计试题答案和试题是不可分割的,在此系统中,每个试题都有三个答案与之对应,只一个正确答案如图5.4所示。图5.4试题答案试题答案设计QuestionManage.aspx和页面AddAnswer.aspx实现。在下拉列表选择框中显示试题种类,在普通列表框中显示试题,单击“添加试题答案”按钮跳转到答案添加页面AddAnswer.aspx。试题管理界面用户函数Page_Load()进行初始化,函数Page_Load()调用函数BindQuesKindData()和BindQuestionData()函数。函数BindQuesKindData()绑定下拉列表控件的数据,如试题种类。还调用数据访问层QuestionKindDB类的函数GetQuesKinds()从表QuestionKinds中获取试题种类数据;函数BindQuestionData()绑定普通列表控件的数据,如试题内容。该函数调用数据访问层QuestionDB类的GetQuestions()函数从表Questions中获取试题信息。用户单击“添加问题答案”按钮触发事件AddQuesAnswer_Click(),该事件首先判断试题列表中某个试题项。如果已经选择,则跳转到试题答案添加页面,否则系统将提示你没有选择数据。private void AddQuesAnswer_Click(object sender, System.EventArgs e) Response.Redirect(/Admins/AddAnswer.aspx?QuestionID= + QuestionList.SelectedValue);事件QuesKindList_SelectedIndexChanged()动态绑定试题列表框的数据,如试题名称,当试题类型下拉列表框选中的选择试题种类发生改变时触发该事件,此时页面会重新绑定列表中的试题数据。该事件代码如下:private void QuesKindList_SelectedIndexChanged(object sender, System. EventArgs e)BindQuestionData(Int32.Parse(QuesKindList.SelectedValue);5.3随机生成试卷系统随机自动生成试卷功能由页面CreateExaminePaper.aspx实现,页面是一个等待页面,应用程序生成一套试卷需要一定的时间。界面设计如图5.4所示:图5.4 系统生成考试试卷页面在等待界面中,应用程序使用自动跳转方式跳转到考试界面ExaminePaper.aspx,跳转代码如下:在试卷生成时,等待页面从Papers表中随机获取一套试卷及其参数,获取试卷及其参数功能由函数GetRolePaper()实现。函数的代码如下:private ArrayList GetRolePaper(int nRoleID)ArrayList PaperList = new ArrayList();SqlDataReader recpc = paper.GetPaperCountByRole();while(recpc.Read()nPaperCount = Int32.Parse(recpcPaperID.ToString();int index = GetRandomInt(nPaperCount);/随机选择一套试卷SqlDataReader repc = paper.GetPaperCountByRole();int i = 0;while(repc.Read() / 把选中的试卷添加到返回结果集中if(i = index) PaperList.Add(repcPaperID.ToString();PaperList.Add(repcTotalMark.ToString();PaperList.Add(repcMaxDefficult.ToString();break; i+;recpc.Close();/从数据库中取到这套试卷所包含的题型及数量ArrayList KindList = new ArrayList();while(recpk.Read()/选中试卷的题型及其数量添加到结果集中QuestionKinds kind = new QuestionKinds();kind.KindID = Int32.Parse(recpkKindID.ToString();kind.KindNum = Int32.Parse(recpkKindNum.ToString();KindList.Add(kind);recpk.Close(); PaperList.Add(KindList);return(PaperList);/返回结果集在随机生成试卷过程中,程序首先调用函数CreateIntegerExaminePaper()生成整套试卷,该函数递归调用自己。直到生成试卷,函数代码如下:CreateIntegerExaminePaper()int allMark = 0;int defficultParm = 0;ArrayList QuestionIDList = new ArrayList();while(true) /逐个生成每种题型for(int i = 0; i KindList.Count; i+)CreateSpecialKindQuestion()/调用函数生成特定的题型ArrayList tempList=CreateSpecialKindQuestion(KindNum,KindID); for(int j = 0; j tempList.Count; j+) QuestionIDList.Add(tempListj); / 添加到结果集中 for(int k = 0; k = maxDefficult & defficultParm/10 = minDefficult)break;elseQuestionIDList=CreateIntegerExaminePaper();return(QuestionIDList); / 返回结果集 函数CreateSpecialKindQuestion()随机生成一种特定的题型,index(试题索引),IndexList(试题索引容器)等。并调用随机函数生成试题ID,最后把结果集添加到QuestionList集合中。函数代码如下:private ArrayList CreateSpecialKindQuestion(int nKindNum,int kind)ArrayList IndexList = new ArrayList();IndexList.Capacity = nKindNum;while(IndexList.Count != nKindNum) / 用随机函数生存随机序号序列index = GetRandomInt(nKindNum);if(IsExistIndex(IndexList,index) = false)IndexList.Add(index.ToString();/ 通过试题ID把试题的ID添加到临时结果集中if(ds = null) / 从数据库中取到结果集,并缓存到Cache中ds = question.GetAllQuestionID();int startIndex = 0;foreach(DataRow row in ds.Tables0.Rows)/取到试题的ID结果集if(rowKindID.ToString() = kind.ToString()break;for(int i = 0; i IndexList.Count; i+)/试题的属性添加到结果集中QuestionDetails questionDetail=new QuestionDetails();QuestionIDList.Add(questionDetail); return(QuestionIDList); /返回问题的ID集合生成随机结果集的映射索引调用函数IsExistIndex()保证索引的惟一性,该函数逐个比较即将添加的值和数组中的每一个值,如果相等返回为假,否则为真。函数代码如下:private bool IsExistIndex(ArrayList IndexList,int index)bool isExist = false;for(int j = 0; j IndexList.Count; j+)/如果相为false,否则为trueif(index.ToString() = IndexListj.ToString()isExist = true; break;return(isExist);5.4考生在线答题在线答题功能由页面ExaminePaper.aspx实现,页面设计由DataGrid控件和Button控件组成,界面设计如图5.5所示:图5.5考生考试界面页面初始化首先从Session全局变量取到一套试卷的所有考试题目,然后由QuestionDB类的函数GetQuestions()创建问题数据源DataGrid,问题数据源DataList为IList接口对象,而不是DataReader对象,DataSet对象或其它的ArrayList对象,函数BindQustionData()实现页面的初始化过程,函数代码如下:private void BindQuestionData()ArrayList QuestionIDList = new ArrayList();/从Session中取一套试卷if(SessionSession.SessionID+SessionUserName!=null) QuestionIDList=(ArrayList)SessionSession.SessionID+SessionUserName;List questionList = (IList)question.GetQuestions(QuestionIDList);/创建问题的数据源QuestionList.DataSource = questionList;QuestionList.DataKeyField = QuestionID;/ 设置控件的试题索引QuestionList.DataBind();ShowPageStatus(questionList.Count);问题DataGrid控件绑定数据时,采用IList接口对象作为数据源。此数据源由类QuestionDB的函数GetQuestion()函数创建,该函数的参数为ArrayList类型的对象QuestionList,它包含整套试卷的所有试题ID,函数GetQuestions()使用for语句从表中获取每个试题的详细信息。函数GetQustions()的代码如下:public ArrayList GetQuestions(ArrayList QuestionList)for(int i = 0; i 0)radioList.SelectedIndex = 0;radioList.SelectedValue =null; 在数据绑定时,问题DataGrid控件触发事件QuestionList_ItemDataBound(),并在事件中调用函数BindAnswerList()绑定问题答案数据。绑定数据如下:通过参数e的函数FindControl()找到需要绑定数据的RadioButtonList控件,命名为answerList。判断answerList控件是否为空,若为空,则中止函数。若answerList控件不为空,则调用函数BindAnserList()绑定控件的答案数据。5.6自动阅卷单击“上一题”或“下一题”按钮触发事件QuestionList_ItemCommand(),该事件实现了跳转到下一题,自动获取上一题的选项,并判断该选项是否正确。以此类推,有多少道试题就执行多少次,直到做完为止。最后统计考生成绩,并保存到数据库中,以方便考生在交卷时就能看到自己的考试成绩。事件代码如下:private void QuestionList_ItemCommand(object source,DataGridArgs e)if(answerList.SelectedIndex -1)Choose = answerList.SelectedItem.Text;AnswerDB answerbody = new AnswerDB();SqlDataReader body = answerbody.GetQuestionBody();if(body.Read()upmark.UpdateMark(userId,mark)考生单击“交卷”触发事件refer_click(),该事件跳转到考试结果页面。并显示考生的相关信息。5.7考试结果考试结果由页面Result.aspx实现,该页面实现了考试结果,考生在交卷后就能看到自己当前的考试成绩。系统自动判断此次考试是否合格。考试结果如图5.8所示:图5.8考试结果5.8测试完成了驾校考试系统的编程工作之后,最后的就是该系统的测试过程了,系统测试的根本目标是尽可能多的发现和排除该系统设计过程中的隐藏的错误,最终把一个高质量的软件系统交给用户使用。系统的测试包括系统的编译和发行,在测试中有两种方法:黑盒测试(功能测试),白盒测试(结构测试)。大型系统通常由若干个子系统组成,每个子系统又由很多的模块组成,主要的步骤有:模块测试,子系统测试,系统测试,验收测试,平行运行。在单元测试期间对模块进行测试主要是针对模块接口,局部数据结构,重要的执行通路,出错处理通路,边界条件。在确定测试也成验收测试,是为了验证该设备管理系统的有效性。以保证软件确实满足了用户需求而进行的一系列活动,需求分析阶段产生的系统规格说明书,准确的描述用户对软件的合理期望,是测试的基础。1.系统的编译设计系统的目的就是要使用者即使不安装Visual FoxPro也能运行该程序,要想系统脱离Visual FoxPro环境运行,需要对系统进行编译,制作出可以单独运行的可执行程序。系统的编译过程首先将系统中涉及到的文件全部包含进“项目管理器”中,单击项目管理器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生消防安全培训教案课件
- 重庆管理基础知识
- 铸造厂考试试题及答案
- 中级银行从业试题及答案
- 福安国企考试真题及答案
- 2025年成套认知测试题及答案
- 2025年环保型货物海运进口代理及绿色认证合同
- 公司股东股权协议书5篇
- 慢性病防御课件
- 实施指南(2025)《GB-T2828.4-2008计数抽样检验程序第4部分:声称质量水平的评定程序》
- 2025年中国建设银行个人信用贷款合同
- 园林工程量计算培训
- 2025年全国网约车试题及答案
- 卫生系统信息安全培训课件
- 姿态礼仪培训展示
- 文物建筑勘查设计取费标准(2020年版)
- 钢筋混凝土拆除施工方案
- 道路运输行业安全培训课件
- 2025年成考专升本《生态学基础》试题与答案
- 大模型+智能交通高效出行与城市治理可行性分析报告
- 2025年民事诉讼法试题及答案
评论
0/150
提交评论