您好,欢迎来到尔游网。
搜索
您的当前位置:首页在线考试系统毕业设计分析

在线考试系统毕业设计分析

来源:尔游网


毕业实训报告

项 目 组: 专 业: 学 院: 指导教师: 实训时间:

在线考试系统

摘 要:如今,以计算机和计算机网络技术为主的信息技术在教育教学的各方面都得到广泛的应用,在线考试也已经不是什 么新鲜事。由于在线网络考试快速高效,减少了大量人力、 物力的投入,消除了人为因素的影响,易于实现考试的客观 公正,所以已经得到广泛的应用。它不仅大大提高了考试的 效率,而且彻底革新考试模式,采用电子化的考试手段代替 纸质的日常考试方式,采用机器阅卷取代人工阅卷。

随着网络的普及和对教育的重视,各院校各学科的网上考试都具有了必要的使用环境。但是,目前国内的一些网络教学系统的主要功能是教学,不能单独作为考试平台,通用性差,而且系统中对主观题的评阅多是采用人工评阅方式,没有实现真正意义上的自动评分。

本系统采用B/S架构作为系统的总体结构,以SQL Server数据库技术为依托,利用的ASP技术,实现了对SQL Server数据库的访问和查询。该设计实现了用户登陆,新生注册,按科目随机抽题组卷、在线考试、题库管理、系统管理的功能,能够对客观题在线评分。学生用用户名登录成功后,选择考试科目进入考试页面,完成相应科目考试,自动给出考试成绩。系统管理,实现了对题库、考生信息、考试成绩、考试科目的管理。题库管理,实现了对试题的添加、编辑、删除功能;考生信息管理可以添加、修改、删除、查询考生信息,成绩管理可以删除成绩信息,还可以批准参加补考,科目管理主要是修改考试科目信息。

关键词:ASP在线考试系统;SQL Server数据库;数据库管理;

2

Online examination system

【Abstract】Which is mainly composed of computer and computer network technology today, information technology in the education teaching all aspects are widely used, online examination has not what's new. Because of the fast and efficient online examination, reduce the investment of a large amount of manpower and material resources, to eliminate the influence of artificial factors, easy to implement the test objective and fair, so has been widely used. It not only greatly improve the efficiency of the examination, and overhaul the exam mode, instead of paper by using electronic test means of daily examination way, using the marking machine to replace manual marking.

Along with the network popularization and the emphasis on education, each school discipline of online exams are necessary to use environment. But at present, our country some of the teaching, network teaching system's main function is not alone as a test platform, poor universality, and the system of subjective topic review it is using artificial way of review, more do not implement automatic grading in the true sense.

This system adopts B/S architecture as the general structure of the system, based on SQL Server database technology, using ASP technology, implements the access to SQL Server database and query. This design has realized the user login, registration, the new random question by subject group, online examination, question bank management, system management function, able to objective questions online scoring. After the success of the student username login, select subjects to enter the test page, complete the corresponding subject test, automatic test results are given. System management, and realized the question bank, the examinee information, test scores, subjects of management. The question bank management, realized to the question to add, edit, delete function; The examinee information management can add, modify, delete, query the examinee information, performance management

【Key words】ASP online examination system; SQL Server database; Database management;

3

第一部分 团队构成及分工 第二部分 系统开发进度计划 第三部分 第四部分 第五部分 第六部分 第七部分 第八部分 第九部分 第十部分 需求分析 概要设计 详细设计 系统实现 测试 代码清单 参考文献 实训总结

4

目 录

1.团队构成及分配 ..................................................... 1 2.系统开发进度计划 ................................................... 2 3.需求分析 ........................................................... 3 3.1 导言 .............................................................. 3

3.1.1 目的 .......................................................... 3 3.1.2 背景 .......................................................... 4 3.1.3 开发技术简介 .................................................. 5 3.1.4 定义及缩写 .................................................... 7 3.1.5 参考文献 ...................................................... 8 3.2 系统定义 .......................................................... 8 3.2.1 系统简介 ...................................................... 8 3.2.2 项目来源及背景 ................................................ 8 3.2.3 用户特点 ...................................................... 9 3.2.4 项目目标 ...................................................... 9 3.3 功能需求 .......................................................... 9 3.3.1 角色定义 ...................................................... 9 3.3.2 系统用例图 ................................................... 10 3.3.3 系统ER图 .................................................... 11 3.3.4 用例描述 ..................................................... 12 3.4 性能需求 ......................................................... 15 3.4.1 界面需求 ..................................................... 15 3.4.2 响应时间需求 ................................................. 15 3.4.3 可靠性需求 ................................................... 15 3.4.4 开发性需求 ................................................... 15 3.4.5 可扩展性需求 ................................................. 15 3.4.6 系统安全需求 ................................................. 16 3.4.7 特色 ......................................................... 16 4.概要设计 .......................................................... 17 4.1 导言 ............................................................. 17 4.1.1 目的 ......................................................... 17 4.1.2 参考文献 ..................................................... 17 4.2 功能设计 ......................................................... 18 4.2.1 功能层次设计 ................................................. 18 4.2.2 个人信息管理模块详述 ......................................... 19 4.2.3 部门信息管理模块详述 ......................................... 19 4.2.4 用户信息管理模块详述 ......................................... 19 4.2.5 考试科目模块详述 ............................................. 19 4.2.6 试卷制定维护模块详述 ......................................... 19 4.2.7 用户试卷管理模块详述 ......................................... 19 4.2.8 试题类别管理模块详述 ......................................... 19

5

4.3 数据设计 ......................................................... 20 4.3.1 数据逻辑结构设计 ............................................. 20 4.3.2 关系图 ....................................................... 25 4.4 状态分析 ......................................................... 25 5.详细设计 .......................................................... 27 5.1 模块设计 ......................................................... 27 5.2 设计方法 ......................................................... 27 6.系统实现 .......................................................... 29 6.1 编码格式规范 ..................................................... 29 6.1.1 代码书写格式 ................................................. 29 6.1.2 注释的写法 ................................................... 29 6.2 命名规范 ......................................................... 30 6.2.1 类/接口 ...................................................... 30 6.2.2 方法 ......................................................... 30 6.2.3 变量/常量 .................................................... 30 7.测试 .............................................................. 31 8.代码清单 .......................................................... 34 9.参考文献 .......................................................... 70 10.实训总结 ......................................................... 71

6

1.团队构成及分配

职能 成员 项目角色 任务分工 成 绩 签 字 组长 组织策划 编写和修改 组员 搜索编排 文档报告 组员 收集资料 界面设计

指导教师签字:

年 月 日

1

2.系统开发进度计划

开始时间 完成时间 持续时间 序号 任务名称 确定设计项目名称及整个项目的规划、完成团队分工 收集资料、录入数据 对系统进行设计 对代码、模块进行编写 对代码、模块进行修改 1 15/03/09 15/03/15 7天 2 3 4 5 6 15/03/16 15/03/31 15/04/01 15/04/08 15/04/09 15/04/20 15/04/21 15/04/30 15天 8天 11天 10天 14天 对系统所有功能进行测试 15/05/04 15/05/14 7

写报告 15/05/15 15/06/01 18天 2

3.需求分析

3.1 导言

本网站的是对“在线考试”的模拟实现,提供学生,老师,管理员的方便快捷的进行操作。在线考试系统应用是通用考试管理系统将传统的培训考试与先进的网络模式相结合,使用户可根据自身特点快速构建考试、测评、练习、竞赛、调查、分析及管理于一体的网络化考试平台。 3.1.1 目的

开发一个在线考试系统,它可以完成试题的浏览、作答、提交、成绩公布等功能,使考试效率大大提高,把试卷批阅人员从繁重的考试管理工作中解脱出来。同时,它可以完成不同地区的人员同时在线考试,使考试更方便。本研究的目的就充分利用Asp技术,在计算机网络环境下对学生进行考试,实现命题、组卷、答题、阅卷和公布成绩全部自动化,实现教考分离、无纸化考试。

在传统的考试中不能摆脱印刷试卷,课堂考试,人工填写成绩单,教务部门将成绩输入学生成绩管理系统等一系列环节。通过对计算机网络技术、Asp技术、数据库技术、组件复用等技术的深入研究,实现基于Asp技术的在线考试,将任课教师从考试这些环节中出来,使他们能有更多的时间去研究课堂教学和实验等环节;对于学生来说,这种形式的考试也更客观、更公平、更公正,避免出现人情分。同样也为学校节约了考试经费,对促进校园网这个平台也有很强的实际意义。

相比传统的考试方式,网络考试系统的主要好处是一方面可以动态的管理各种考试信息,只要准备好足够的题库,就可以按照要求自动生成各种试卷;另一方面,考试时间灵活,考生可以在规定时间段内的任意时间参加考试;另外计算机化的考试的最大特点就是阅卷快,系统可以在考试结束时当场给出考试结果,计算机阅卷给了考生的最大的公平感。

3

3.1.2 背景

计算机网络技术的飞速发展,现在很多社会部门以及各个大学都已经开设了远程教育,通过计算机网络实现异地教育和培训。现在,计算机硬件技术的发展已经达到了相当高的水平。但是,作为信息化建设的一部分,特别是国家在“十一五”期间大力建设的电子政务方面的远程软件的开发目前还处于起步阶段,随着这项技术的不断深入发展,就要求有更好、更完善的软件系统应用到远程教育当中去,这就给软件设计人员提出了更高的设计要求。 现阶段,学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即人工出卷、考生考试、人工阅卷、成绩评估和试卷分析。显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分烦琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现试的需要。随着计算机应用的迅猛发展,网络应用不断扩大,如远程教育和虚拟大学的出现等等,且这些应用正逐步深入到千家万户。人们迫切要求利用这些技术来进行在线考试,以减轻教师的工作负担及提高工作效率,与此同时也提高了考试的质量,从而使考试更趋于公证!客观!更加激发学生的学习兴趣。

网络考试系统的主要好处是一方面可以动态地管理各种考试信息,只要准备好足够大的题库,就可以按照要求自动生成各种试卷;另一方面,考试时间灵活, 可以在规定的时间段内的任意时间参加考试;另外计算机化的考试的最大特点是阅卷快,系统可以在考试结束时当场给出客观题考试成绩,计算机阅卷给了考生最大的公平感。而且用计算机进行标准化考试,可以节省资源,减少纸张和印刷费用。现代的社会中,办公自动化进入社会的每一个角落已经势不可挡,而网上考试系统是办公自动化的一个小小体现,它为学校管理数据大量又繁杂的试卷工作提供了方便,提高了学校工作的效率,也适应了精兵简政之领导原则,也为办公自动化的普及奠定了基础。

考试系统极大的提高了教学的灵活性,在许多领域已经有了广泛的应用,它可以帮助企业的主管部门,提高工作效率,实现企业考试信息管理及考试流程的系统化、规范化、自动化。为了适应新形势的发展,我们推出了这一系统,使其尽快在中发挥高效、便捷的作用,把老师从繁重的工作中解脱出来!

现代高等教育中,网络的运用是提高学校教学效果和教学效率、提高科研和管理水平的必要手段。目前的一个发展趋势是采用大规模试题库的计算机网络考试模式,随着计算机网络在生产生活、科技教育中的普及,传统的考试出卷、答卷方式以及学绩管理正发生着巨大的变革,因此,如何使考试过程

4

变得方便、高效、快捷、公正,是现代教育的一个重要课题。 3.1.3 开发技术简介

一、ASP技术

Microsoft Active Server Pages 即 ASP ,是一套微软开发的服务器端脚本环境, ASP 内含于 IIS 3.0 以后的版本中 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX 元件建立动态、交互且高效的 WEB 服务器应用程序。有了 ASP 就不必担心客户的浏览器是否能运行所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通 HTML 中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。

ASP是服务器端的脚本执行环境,可用来产生和执行动态的高性能的WEB服务器程序。当用户使用浏览器请求ASP主页时,WEB服务器响应,调用ASP引擎来执行ASP文件,并解释其中的脚本语言(JScript 或VBScript)。通过ODBC连接数据库,由数据库访问组件ADO(ActiveX Data Objects)完成数据库操作,最后ASP生成包含有数据查询结果的HTML主页返回用户端显示。

由于ASP在服务器端运行,运行结果以HTML主页形式返回用户浏览器,因而ASP源程序不会泄密,增加了系统的安全保密性。此外,ASP是面向对象的脚本环境,用户可自行增加ActiveX组件来扩充其功能,拓展应用范围。 ASP的程序代码简单、通用,文件名由.asp结尾,ASP文件通常由四部分构成:标准的HTML标记:所有的HTML标记均可使用。

二、Microsoft SQL Server

SQL Server 是一个全面的、集成的、端到端的数据解决方案,它为企业中的用户提供了一个安全、可靠和高效的平台用于企业数据管理和商业智能应用。SQL Server 2005 为IT专家和信息工作者带来了强大的、熟悉的工具,同时减少了在从移动设备到企业数据系统的多平台上创建、部署、管理及使用企业数据和分析应用程序的复杂度。 通过全面的功能集、和现有系统的集成性、以及对日常任务的自动化管理能力,SQL Server 2005 为不同规模的企业提供了一个完整的数据解决方案。图1显示了SQL Server 2005数据平台的组成架构。

5

SQL Server 数据平台包括以下工具:

关系型数据库: 安全、可靠、可伸缩、高可用的关系型数据库引擎,提升了性能且支持结构化和非结构化(XML)数据。

复制服务: 数据复制可用于数据分发、处理移动数据应用、系统高可用、企业报表解决方案的后备数据可伸缩存储、与异构系统的集成等,包括已有的Oracle数据库等。

通知服务: 用于开发、部署可伸缩应用程序的先进的通知服务能够向不同的连接和移动设备发布个性化、及时的信息更新。 能力。

集成服务: 可以支持数据仓库和企业范围内数据集成的抽取、转换和装载分析服务: 联机分析处理(OLAP)功能可用于存储的大量、复杂的数据集的快速高级分析。

报表服务: 全面的报表解决方案,可创建、管理和发布传统的、可打印的报表和交互的、基于Web的报表。

管理工具: SQL Server 包含的集成管理工具可用于高级数据库管理和调谐,它也和其他微软工具,如MOM和SMS紧密集成在一起。标准数据访问协议大大减少了SQL Server和现有系统间数据集成所花的时间。此外,构建于SQL Server内的内嵌Web service支持确保了和其他应用及平台的互操作能力。

开发工具: SQL Server 为数据库引擎、数据抽取、转换和装载(ETL)、数据挖掘、OLAP和报表提供了和Microsoft Visual Studio® 相集成的开发工具,以实现端到端的应用程序开发能力。SQL Server中每个主要的子系统都有自己的对象模型和API,能够以任何方式将数据系统扩展到不同的商业环境中。

SQL Server 2005 数据平台为不同规模的组织提供了以下好处:

充分利用数据资产: 除了为业务线和分析应用程序提供一个安全可靠的数据库之外,SQL Server 2005也使用户能够通过嵌入的功能,如报表、分析和数据挖掘等从他们的数据中得到更多的价值。

提高生产力: 通过全面的商业智能功能,和熟悉的微软Office系统之类的工具集成,SQL Server 2005为组织内信息工作者提供了关键的、及时的商业信息以满足他们特定的需求。SQL Server 2005目标是将商业智能扩展到组织内的所有用户,并且最终允许组织内所有级别的用户能够基于他们最有价值的资产——数据来做出更好的决策。

减少IT复杂度: SQL Server 2005 简化了开发、部署和管理业务线和分析应用程序的复杂度,它为开发人员提供了一个灵活的开发环境,为数据库管

6

理人员提供了集成的自动管理工具。

更低的总体拥有成本 (TCO): 对产品易用性和部署上的关注以及集成的工具提供了工业上最低的规划、实现和维护成本,使数据库投资能快速得到回报。

三、B/S数据库访问模式

B/S结构是真正的三层结构,它以访问WEB数据库为中心,HTTP为传输协议,客户端通过浏览器(Browser)访问WEB服务器和与其相连的后台数据库,我们称之为B/S(Browser/Server)模式。

第一层是客户端即浏览器,主要完成客户和后台的交互及最终查询结果的输出功能。在客户端向指定的Web服务器提出服务器请求,Web服务器用HTTP协议把所需文件资料传给用户,客户端接受并显示在WWW浏览器上。

第二层Web服务器是功能层,完成客户的应用功能,即Web服务器接受客户请求,并与后台数据库连接,进行申请处理,然后将处理结果返回Web服务器,再传至客户端。

第三层数据库服务器是数据层。数据库服务器应客户请求地进行各种处理。与传统的C/S模式相比,B/S结构把处理功能全部移植到了服务器端,用户的请求通过浏览器发出,无论是使用和数据库维护上都比传统模式更加经济方便。而且使维护任务层次化:管理员负责服务器硬件日常管理和维护,系统维护人员负责后台数据库数据更新维护。

由以上的比较分析可知,三层结构也可以理解为增加WEB服务器的C/S模式。采用B/S模式,突破传统的文件共享模式,为网络考试系统的设计提供新的解决方案。借助ASP的WEB应用程序,用户通过Browser软件连接后台数据库并完成做操作,使本网络考试系统的更新数据的方式为动态。 3.1.4 定义及缩写

ASP.NET:Active Server Page net

CSS : Cascading Style Sheets 级联样式表 ADO.NET: ActiveX Data Object.NET 现代存储技术

7

3.1.5 参考文献

[1] 马俊,ASP.NET网页设计与网站开发

[2] 客户管理信息系统的设计. 诸葛芸. 计算机时代.2003

[3] 曹 斌、韩中孝. ASP.NET数据库系统项目开发实践.科学出版社

[4] 李若岩,徐妹,杨波. Photoshop CS2基础与实例教程.电子工业出版社 [5] 陈宗兴,杜国梁. ASP.NET网络系统程序开发.中国水利水电出版社 [6] 邹建.中文版SQL Server2000开发与管理应用实例.人民邮电出版社 [7] Louis Davidson. Professional SQL Server 2000 Database Design.WROX [8] Scott Mitchell、Steve Walther.ASP.NET:Tips,Tutorials,and Code.

3.2 系统定义

3.2.1 系统简介

在线考试系统采用功能强大、高效灵活的B/S 模式,具有高度的可扩展性,被授权的考试用户不管身处何地,只要可以使用网络浏览器 (IE6,IE7,IE8,IE9,IE10,360,FireFox,Chrome等),就可通过网络登录在线考试系统,参加在线考试、在线练习等;该设计实现了按题型随机抽题组卷、在线考试、题库管理、系统管理的功能,能够对客观题在线评分。用户登录成功后,阅读考试须知,之后选择考试科目进入考试页面,完成相应科目考试,自动给出考试成绩。系统管理,实现了对题库、考生信息、考试成绩、考试科目的管理。题库管理,实现了对试题的添加、编辑、删除功能;考生信息管理可以添加、修改、删除、查询考生信息,成绩管理可以删除成绩信息,科目管理主要是修改考试科目信息。

3.2.2 项目来源及背景

背景:从目前的应用来看,一般基于web的在线考试系统都是很占服务器资源。其主要原因是:系统在运行的过程中采用动态读取数据的方法,这使用户每进行一次测试都要向服务器多次查询数据。所谓的动态读取数据是指:用户每次要上下翻页或结束测试时都要向数据库读取数据。这是因为浏览器是不能存储状态的,在其刷新页面后,原来的数据将丢失。多次的和服

8

务器交互势必增加服务器的负担,因此一个好的在线考试系统速度是其关键。

来源:顺应时代的变化,检测这学期所学知识,学以致用。

3.2.3 用户特点

本系统的用户分为三类,一类是学生,这类用户是进入网站进行考试,以及查询考试成绩;一类是教师,这类用户实现网上判卷,实现老师的职能等各种功能;另一类是管理员,他们是网站的管理人员,负责对网站的维护,对试卷的管理,对用户信息的管理,以及定期更新网站,发布各种最新消息等。

3.2.4 项目目标

本项目设计的目标如下:

1.提供良好的用户界面,使操作人员的工作量减少

2.系统具有良好的运行效率,能够达到提高生成率的目的

3.系统具有良好的可扩展性,可以容易地加入其它系统的应用; 4.平台的设计具有一定的超前性、灵活性,能够适应现试的变化 5.锻炼队伍,提高团队的开发能力和项目管理能力 6.网上考试的便捷性,提高效率

3.3 功能需求

3.3.1 角色定义

学生:

进行网上考试、查询成绩。 教师:

进行网上判卷、修改试题、修改成绩。 管理员:

负责对网站的维护、以及对试卷的管理、对用户信息的管理,以及定期更新网站、发布各种最新消息。

9

3.3.2 系统用例图

学生 试题删 试题修改 试题查 包括教师信息 的添加、修改、 删除

考试 成绩查询 只能进行密码修改 个人信息维护 图3—1学生用例图

添加试修改试试卷删试卷维试卷生试题库管理 教师 试卷管理 阅卷 包括手动阅卷和自动阅卷 包括学生信息的添加、修改、删除 教师管学生管管理员 图3—2教师及管理员用

例图

10

3.3.3 系统ER图

专业 班级 学号 姓名 登录密码 性别 学生 姓名 N N 考试 管理 N 试卷 N 出卷 N 管理 1 管理员 1 老师 教师编号 所教科目 登录密码 1 用户名 密码 11

3.3.4 用例描述

表3-1 用户登录

名称:用户登录

参与执行者:系统管理员.系统用户.教师 前置条件:运行系统 活动的基本过程: 1. 运行系统 2. 选择用户登陆模块

后置条件:如果输入正确的账号和密码就会显示登陆成功,反之登录失败。

表3-2密码更改

名称:密码更改 参与执行者:所有用户 前置条件:系统登录成功 活动的基本过程: 1. 登录系统 2. 选择个人信息管理模块 后置条件:需要按规定输入合法的原密码和新密码就可以显示更改成功!反之,更改失败。 表3-3部门管理

名称:部门管理 参与执行者:系统管理员 前置条件:系统管理员已登陆 活动的基本过程: 1. 管理员登陆 2. 选择部门管理模块 后置条件:选择需要修改或删除的选项,进行信息的修改。 12

表3-4用户信息管理

名称:用户信息管理 参与执行者:系统管理员

前置条件:系统管理员已经登录

活动的基本过程:

1. 进入用户管理界面,显示目前的系统用户以及每个用户的权

2. 单击不同的用户,显示这个用户的信息以及相应的权限,必

要时可以修改权限 3. 可以增加用户,也可以删除用户

后置条件:如果用户信息维护完成,则用户的相应信息将记录

到数据库中

表3-5考试科目管理

名称:考试科目管理 参与执行者:系统管理员、教师

前置条件:系统管理员、教师已经登录

活动的基本过程:

1. 选择考试科目模块。

2. 对需要修改的选项进行修改。

后置条件:如果考试目信息修改完成,则考试科目的相应信息将记

录到数据库中

表3-6试卷制定与维护

名称:试卷制定与维护

参与执行者:系统管理员、教师

前置条件:系统管理员、教师已经登录 活动的基本过程:

1. 试卷制定与维护。

2. 随机出题生成一张试卷。

3. 对试卷的维护

13 后置条件:如果试卷生成成功,则新生成的试卷相应信息将记录到数据库中

表3-7用户试卷管理

名称:用户试卷管理 参与执行者:系统管理员、教师 前置条件:系统管理员、教师已经登录 活动的基本过程: 1. 选择用户试卷管理模块。 2. 对学生的试卷进行评阅。 3. 对学生的成绩进行管理 后置条件:如果试卷评阅完成,则试卷的相应成绩将记录到数据库中 表3-8试题管理

名称:试题管理 参与执行者:系统管理员、教师 前置条件:系统管理员、教师已经登录 活动的基本过程: 1.选择试题类别管理模块。 2.对试题进行增、删、改等操作。 后置条件:如果试题操作完成,则试题的相应信息将记录到数据库中 14

3.4 性能需求

3.4.1 界面需求

1)页面内容:主题突出、操作方便、术语和行文格式统一、规范、明确。菜单设置和布局合理,传递的信息准确。 2)菜单结构摆放合理,方便用户使用。

3)技术环境:页面大小适中,控制字体和版面布局

3.4.2 响应时间需求

当用户登录,进行任何操作的时候,系统应该及时地进行反应,反应的时间在5秒以内。系统应该及时地进行反应,反应的时间在5秒以内。系统应能检测出各种非正常情况,如与设备的通信中断,无法连接数据库服务器等,以避免出现长时间等待甚至无响应。 3.4.3 可靠性需求

系统应保证7*24小时不脱机,保证可以随时在客户端登录。 3.4.4 开发性需求

开发基于的平台要考虑向上兼容性,如操作系统,数据库等要考虑更高版本的兼容性。 3.4.5 可扩展性需求

当需求发生变化时系统应具有一定的适应能力,要求系统能够为将来的变更提供以下支持:能够在系统变更用户界面和数据库设计,甚至在更换新的DBMS后,系统的现有设计和编码能够最大程度的重用,以保护现阶段的投资和保证软件系统能够在较少后续投入的情况下适应系统的扩展和更新。在设计中最好列出针对变更所需要重新设计的模块部分

15

3.4.6 系统安全需求

系统有严格的权限管理功能,各功能模块需要相应的权限方能进入。系统需能够防止各类误操作可能造成的数据丢失,破坏。防止不法用户盗取重要信息。

3.4.7 特色

 科学性:依据考核内容的难度及对知识点掌握要求将试题划分为不同

分值,并依此制定组卷策略。考试时系统可随时依据组卷策略从题库中随机抽取试题进行自动组卷, 自动生成考生个人试卷。  准确性:客观题自动评分,主观题评分采用逐人或逐题两种方式进行

评分,以便与客观题得分进行累计汇总,使评阅误差得到有效控制。  便捷性:将所有参加网上考试考生的答题信息和教师阅卷信息悉数存

储起来, 以便查询和存档, 这大大节约了人力、物力和财力。  高效性:整个考试流程完全由系统自动完成,因而避免了因这些环节

的疏忽而造成的失误, 大大降低了考试过程的错误率, 也极大地提高了工作效率。

 灵活性:考生的考试时间不必要求同时进行,可以分批进行,考试地

点也比较灵活, 避免考生考试时间、地点矛盾等问题。在考试管理、资源调配等方面也比较机动灵活,大大降低了考试对场所的硬件要求,同时也能更好地满足考生灵活多样的个别化考试服务要求。  安全性:采用随机出卷的模式,每个考生的试题都不相同,对于要求

试卷内容一致的考试,还可以打乱试题及选项的顺序,让考生无法互相抄袭,也防止了考生死记硬背答案。

16

4.概要设计

4.1 导言

本网站的是对“在线考试”的模拟实现,提供浏览,查询,修改,删除,考试的功能。提供学生,老师,管理员的方便快捷的进行操作。在线考试系统应用是通用考试管理系统将传统的培训考试与先进的网络模式相结合,使用户可根据自身特点快速构建考试、测评、练习、竞赛、调查、分析及管理于一体的网络化考试平台。

4.1.1 目的

本次所做项目即对本学期的ASP.NET进行巩固与实践,让我们在认识自己所学的不足的情况下弥补自己的不足,对以学并掌握的知识进行巩固,为我们以后走出校门,进行计算机编程、网站设计等工作打下基础。

4.1.2 参考文献

[1] 张海藩,软件工程导论[M],清华大学出版社

[2] 萨师煊,王珊,数据库系统概论[M],清华大学出版社 [3] 数据库管理系统[M],清华大学出版社 [4] 数据库设计[M],机械工业出版社

[5] 沈美明,软件工程导论[M],机械工业出版社

17

4.2 功能设计

4.2.1 功能层次设计

图4-1在线考试系统功能层次图

试卷管理 试题类别管理 个人信息管理 题库管理 科目管理 成绩管理

教师模块

教师登录

试题管理 部门管理

查看考试答 个人信息管理

个人信息管理 题库管理 科目管理 成绩管理 试卷管理

系统登陆 在线考试

学生模块

在线考试系统

管理员模块

管理员登陆 用户管理

18

4.2.2 个人信息管理模块详述

个人信息管理模块:登录后进行个人密码修改。 4.2.3 部门信息管理模块详述

部门信息管理模块:进行部门管理,分别有教师部,学生部,管理处。 4.2.4 用户信息管理模块详述

用户信息管理模块:进行用户编写有序号,用户id,姓名,部门,角色管理。

4.2.5 考试科目模块详述

考试科目模块:编写考试科目。 4.2.6 试卷制定维护模块详述

考试制定维护:考试制定科目,题型并且进行维护修改。 4.2.7 用户试卷管理模块详述

用户试卷管理: 这个模块是进行试卷评阅以及用户的成绩输入。 4.2.8 试题类别管理模块详述

试卷类别管理:有单选,多选,判断等题的管理。

19

4.3 数据设计

本系统的数据设计内容主要是进行数据库的设计。 4.3.1 数据逻辑结构设计

表4-1 用户信息表 字段名 UserID UserName UserPwd 数据类型 varchar varchar varchar 50 50 2 2 长度 是否置空 否 否 否 否 否 描述 用户账号 用户名称 密码 部门编号 权限 DepartmentId int RoleId int

表4-2 考试科目表 字段名 ID Name 数据类型 int varchar 2 长度 是否置空 否 否 描述 科目编号 科目名称 200

表4-3 部门信息表

字段名 DepartmentId 数据类型 int 2 长度 是否置空 否 否 描述 部门编号 部门名称 DepartmentName varchar

50 20

表4-4权限信息表

字段名 RoleId RoleName HasDuty_DepartmentManage 数据类型 int varchar int 长度 2 50 2 是否置空 否 否 否 描述 编号 名称 部门管理权限 HasDuty_UserManage int 2 否 用户管理权限 HasDuty_RoleManage int 2 否 权限管理权限 HasDuty_Role HasDuty_CourseManage int int 2 2 否 否 科目管理权限 HasDuty_PaperSetup int 2 否 试卷制定权限 HasDuty_PaperLists int 2 否 试卷维护权限 HasDuty_UserPaperList int 2 否 试卷评阅权限 HasDuty_UserScore int 2 否 用户成绩权限 HasDuty_SingleSelectManage int 2 否 单选题管理权限 HasDuty_MultiSelectManage int 2 否 多选题管理权限 HasDuty_JudgeManage int 2 否 判断题管理权限

21

表 4-5试卷信息表

字段名 PaperID CourseID PaperName PaperState

数据类型 int int varchar bit 长度 2 2 200 1 是否置空 否 否 否 否 描述 试卷编号 科目编号 试卷名称 试卷状态 表4-6试卷详情表

字段名 ID PaperID Type TitleID Mark

数据类型 int int varchar int int 长度 2 2 10 2 2 是否置空 否 否 否 否 否 描述 编号 试卷编号 类型 题目编号 分数 表4-7成绩信息信息表

字段名 ID UserID PaperID Score ExamTime JudgeTime PingYu

数据类型 int varchar(50) int int datetime datetime varchar(1000) 长度 2 50 2 2 8 8 1000 是否置空 否 否 否 否 否 否 否 描述 编号 用户账号 试卷编号 分数 考试时间 判卷时间 评语 22

表4-8菜单信息表

字段名 NodeId ParentId Text Url Duty

数据类型 int int varchar varchar varchar 长度 2 2 50 50 50 是否置空 否 否 否 否 否 描述 模块编号 父级编号 文本 链接 表4-9答案信息表 字段名 ID UserID PaperID Type TitleID Mark UserAnswer ExamTime state 数据类型 int varchar int varchar int int varchar datetime varchar 长度 2 50 2 50 2 2 1000 8 50

是否置空 否 否 否 否 否 否 否 否 是 描述 编号 用户编号 试卷编号 类型 题目编号 分数 用户答案 考试时间 状态 表4-10判断题信息表

ID CourseID Title Answer int int varchar bit 2 2 1000 1

否 否 否 否 编号 科目编号 题目 答案 23

表4-11单选题信息表

字段名 ID CourseID Title AnswerA AnswerB AnswerC AnswerD Answer

数据类型 int int varchar varchar varchar varchar varchar varchar 长度 2 2 1000 500 500 500 500 2 是否置空 否 否 否 否 否 否 否 否 描述 编号 科目编号 题目 A选项 B选项 C选项 D选项 答案 表4-12多选题信息表

字段名 ID CourseID Title AnswerA AnswerB AnswerC AnswerD Answer 数据类型 int int varchar varchar varchar varchar varchar varchar 长度 2 2 1000 500 500 500 500 2

是否置空 否 否 否 否 否 否 否 否 描述 编号 科目编号 题目 A选项 B选项 C选项 D选项 答案

24

4.3.2 关系图

图 4-2 表关系图

4.4 状态分析

图 4-3 试卷状态图

25

图 4-4 记录学生成绩状态图

图 4-5 学生状态图

26

5.详细设计

5.1 模块设计

系统功能模块介绍时,我们把整个系统分为管理员模块、教师模块、学生模块,其中管理员模块包括:用户管理(学生信息管理、教师信息管理、管理员信息管理)、科目管理、章节管理、班级管理、系别管理、试卷管理、考试信息查询;教师模块包括:个人信息修改、题库管理、试卷生成、阅卷管理;学生模块包括:考试页面、个人信息修改。我所做的模块是:学生信息管理模块、教师信息管理模块、试卷管理模块、科目信息管理、班级管理模块五个模块。

5.2 设计方法

图 5-1 人工制卷顺序图

27

图 5-2 学生考试顺序图28

6.系统实现

6.1 编码格式规范

6.1.1 代码书写格式

(1)所有的缩进TAB键为4个空格,每个单词的首字符大写,其余小写。 (2)在代码中垂直对齐左括号和右括号。

(3)在大多数运算符之前和之后使用空格,这样做时不会改变代码的的意图却可以使代码容易阅读。例:int j = i + k;而不应写为:int j=i+k; (4)缩写SQL语句时,对于关键字使用全部大写,对于数据库元素(如表,列和视图)使用大小写混合)。

(5)将每个主要的SQL子句放在不同的行上,这样更容易阅读和编辑语句。 6.1.2 注释的写法

(1)在你劳神的地方请加上详细的注释说明,除了最简单的存取成员变量的Set/Get成员函数之外,其余大部分的函数写上注释是良好的习惯,尽量使你的程序让别人很容易看懂。

(2)大多的注释会使很难看,但一些复杂的算法和数据结构和数据结构处还是要加上注释的,这样别人就容易看懂,否则时间长了,你自己都未必卸载明白了。

(3)如果是对某一段程序(算法/结构)的注释,在程序头直接用//再空一格进行说明,一行不要超过80个字符。

(4)为了防止在阅读代码时不得不左右流动源代码编辑器,每行代码或注释在不得超过一显示屏。

(5)使用连续的多个/表示注释行(不要超过80字符)。 (6)文件头部应有注释,简单描述文件的内容

(7)对于程序中的比较关键的算法和函数,必须加注释。

29

6.2 命名规范

6.2.1 类/接口

类名:必须为名词,名字应该能够标识事物的特性。名字尽量不使用缩写,除非它是众所周知的。名字可以有两个或三个单词组成,但通常不应多于三个。类名与所要连接的页面相关联。 例如:Admin_Upjubupic

Admin_Ware_Wareguanli

6.2.2 方法

单词与方法所定义的内容有一定关系,可以简单明了的体现本方法,便于调用。

如:show() 6.2.3 变量/常量

全局变量:数据类型简写 _+变量名称 例如:var userAgent var sAction; var sTitle; var oSeletion; var sRangeType;

局部变量:数据类型简写 +变量名称 例如: var path

30

7.测试

本次实训要求学生会用等价类划分法对系统的输入数据进行测试,测试模板如下:

图7-1 登录界面

合法性输入:

用户名:用户名字符可以包含:字母,数字,下划线。用户名必须以字母或

下划线开始,长度在4-30个字符之内。

密码:内容可以为,字母,数字,符号,长度在4-30个字符以内。

31

表7-1 用户登录等价类划分表

输入条件 有效等价类 无效等价类 首字符 字母 (1) 非字母 (2) 首字符 下划线(3) 非下划线(4) 用户其他字字母或数字或下非字母或数字 名: 符组成 划线 (5) (6) <4个(8),>30个字符数 4~30个 (7) (9) 小于4个(11),密码 字符数 4-30个(10) 大于30个(12)

表7-2 测试用例表

编号 1 2 3 4 5 6 13 14 15

测试用例 在用户名输入框中输入“a23s” 在用户名输入框中输入“1a” 在用户名输入框中输入“_sdfsdf” 在用户名输入框中输入“aa” 在用户名输入框中输入(3),(5),(9) “_sdfifgdigspvhenghopsdfjbidodngw” 在用户名输入框中输入“a$%^@#$” (1),(6) 在密码框中输入“sss” (10) 在密码框中输入(11) “0a1b2c3d4e5f6g7h8i9j0k1l2m3n4x5dsdf” 在密码框中输入“password” (10) 用例覆盖的等价类 (1),(5),(7)边界 (2),(4),(6),(8) (3),(5),(7) (1),(5),(8) 32

图7-2 学生考试界面

33

8.代码清单

用户登陆

using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

public partial class Web_Login : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

if (!Object.Equals(Request.Cookies[\"UserID\"], null)) {

HttpCookie readcookie = Request.Cookies[\"UserID\"]; this.txtUserID.Text = readcookie.Value; if (this.txtUserID.Text != \"\") {

this.txtPwd.Focus(); } } } }

//登录按钮事件 protected void imgBtnLogin_Click(object sender, ImageClickEventArgs e) {

Users user = new Users();//创建Users对象user string pwdMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPwd.Text.Trim(), \"MD5\").ToString(); if (String.Compare(Request.Cookies[\"yzmcode\"].Value,

34

Validator.Text, true) != 0) {

lblMessage.Text = \"验证码错误!\"; } else {

if (user.CheckPassword(txtUserID.Text.Trim()))//根据用户编号查询用户密码 {

if (user.UserPwd == pwdMd5)//输入密码与用户密码相同 {

if (object.Equals(Request.Cookies[\"UserID\"], null))

{

CreateCookie(); } else {

CreateCookie(); }

Session[\"userID\"] = txtUserID.Text.Trim();//存储用户编号

Response.Redirect(\"Default.aspx\");//转向管理员操作界面 }

else//密码错误,给出提示 {

lblMessage.Text = \"您输入的密码错误!\"; } }

else//用户不存在,给出提示 {

lblMessage.Text = \"该用户不存在!\"; } } }

protected void ChangeCode_Click(object sender, EventArgs e) {

}

private void CreateCookie() {

HttpCookie cookie = new HttpCookie(\"UserID\"); if (this.cbxRemeberUser.Checked)

35

{

cookie.Value = this.txtUserID.Text; }

cookie.Expires = DateTime.MaxValue; Response.AppendCookie(cookie); }

protected void ImageButton1_Click(object sender, ImageClickEventArgs e) {

txtUserID.Text = txtPwd.Text = Validator.Text =\"\"; } }

部门管理

using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer; using System.Data.SqlClient;

public partial class Web_DepartmentManage : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!Page.IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName; GridViewBind(); } }

private void GridViewBind() {

Department department = new Department();//创建Users类对象user

36

DataSet ds = department.QueryDepartment();//使用Users类QueryUsers方法查询所有用户信息

GridView1.DataSource = ds;//为GridView控件指名数据源 GridView1.DataBind();//GridView控件绑定数据 }

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) {

GridView1.EditIndex = -1; GridViewBind(); }

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {

GridView1.PageIndex = e.NewPageIndex; GridViewBind(); }

//GridView控件RowDeleting事件 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {

string departmentid = GridView1.DataKeys[e.RowIndex].Values[0].ToString(); //取出要删除记录的主键值

Department department = new Department();//创建Users类对象user

if (department.DeleteByProc(departmentid))//根据主键使用DeleteByProc方法删除用户 {

Response.Write(\"\"); } else {

Response.Write(\"\"); }

GridView1.EditIndex = -1; GridViewBind();//重新绑定数据

}

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) {

37

GridView1.EditIndex = e.NewEditIndex; //GridView编辑项索引等于单击行的索引

GridViewBind(); }

//GridView控件RowUpdating事件 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) {

string departmentid = GridView1.DataKeys[e.RowIndex].Values[0].ToString(); //取出记录的主键值

Department department = new Department(); department.DepartmentName = ((TextBox)GridView1.Rows[e.RowIndex].FindControl(\"txtDepartmentName\")).Text;

if (department.UpdateByProc(departmentid))//使用Users类UpdateByProc方法修改用户信息 {

GridViewBind();

Response.Write(\"\"); } else {

Response.Write(\"\"); }

GridView1.EditIndex = -1; GridViewBind(); }

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {

int i;

//执行循环,保证每条数据都可以更新

for (i = 0; i < GridView1.Rows.Count; i++) {

//首先判断是否是数据行

if (e.Row.RowType == DataControlRowType.DataRow) {

//当鼠标停留时更改背景色

e.Row.Attributes.Add(\"onmouseover\

\"c=this.style.backgroundColor;this.style.backgroundColor='Aqua'\"); //当鼠标移开时还原背景色

38

e.Row.Attributes.Add(\"onmouseout\\"this.style.backgroundColor=c\"); } } } }

部门添加

using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer; using System.Data.SqlClient;

public partial class Web_DepartmentAdd : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!Page.IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

this.txtDepartmentId.Attributes.Add(\"nullable\//是否为空

this.txtDepartmentName.Attributes.Add(\"nullable\\"yes\"); //是否为空

this.imgBtnSave.Attributes[\"onclick\"] = \"javascript:return verifyAll(window.Form1);\"; } }

protected void imgBtnSave_Click(object sender, ImageClickEventArgs e) {

if (Page.IsValid) {

Department department = new Department(); //创建

39

Users对象

department.DepartmentId = Convert.ToInt32(txtDepartmentId.Text.Trim()); if

(!department.CheckDepartment(department.DepartmentId))//使用CheckDepartment方法验证是否存在 {

department.DepartmentId = Convert.ToInt32(txtDepartmentId.Text.Trim());

department.DepartmentName = txtDepartmentName.Text; if (department.InsertByProc()) {

lblMessage.Text = \"成功插入该部门信息!\"; Server.Transfer(\"DepartmentManage.aspx\"); } else {

lblMessage.Text = \"添加部门失败!\"; } }

else//用户存在,给出提示 {

lblMessage.Text = \"数据库中存在具有该编号的部门,请重新输入!\"; } } }

protected void imgBtnReturn_Click(object sender, ImageClickEventArgs e) {

Server.Transfer(\"DepartmentManage.aspx\"); } }

科目管理

using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;

40

using OnLineExam.BusinessLogicLayer;

public partial class Web_CourseManage : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

InitData(); //初始化考试科目 } }

//初始化考试科目

protected void InitData() {

Course course = new Course(); //创建考试科目对象 DataSet ds = course.QueryCourse(); //查询考试科目信息 GridView1.DataSource = ds; //为GridView控件指名数据源

GridView1.DataBind(); //绑定数据 }

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {

GridView1.PageIndex = e.NewPageIndex; InitData(); }

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { int i;

//执行循环,保证每条数据都可以更新

for (i = 0; i < GridView1.Rows.Count; i++) {

//首先判断是否是数据行

if (e.Row.RowType == DataControlRowType.DataRow) {

//当鼠标停留时更改背景色

e.Row.Attributes.Add(\"onmouseover\

\"c=this.style.backgroundColor;this.style.backgroundColor='Aqua'\"); //当鼠标移开时还原背景色

41

e.Row.Attributes.Add(\"onmouseout\\"this.style.backgroundColor=c\"); } } }

//删除考试科目事件 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {

Course course = new Course(); //创建Course对象 int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString()); //取出要删除记录的主键值

if (course.DeleteByProc(ID)) {

Response.Write(\"\"); } else {

Response.Write(\"\"); }

GridView1.EditIndex = -1; InitData(); }

//GridView控件RowUpdating事件 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) {

int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString()); //取出要删除记录的主键值

Course course = new Course(); //创建Course对象 course.Name = ((TextBox)GridView1.Rows[e.RowIndex].FindControl(\"txtName\")).Text; if (course.UpdateByProc(ID))//使用Users类UpdateByProc方法修改用户信息 {

Response.Write(\"\"); } else {

42

Response.Write(\"\"); }

GridView1.EditIndex = -1; InitData(); }

//GridView控件RowCanceling事件

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) {

GridView1.EditIndex = -1; InitData(); }

//GridView控件RowEditing事件 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) {

GridView1.EditIndex = e.NewEditIndex; //GridView编辑项索引等于单击行的索引 InitData(); } }

科目添加

using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

public partial class Web_CourseAdd : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!Page.IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users();

43

user.LoadData(loginName);

labUser.Text = user.UserName; } }

protected void imgBtnSave_Click(object sender, ImageClickEventArgs e) {

if (Page.IsValid) {

Course course = new Course(); //创建考试科目对象

course.Name = txtName.Text; //设置考试科目对象属性

if (course.InsertByProc()) //调用添加考试科目方法添加考试科目 {

lblMessage.Text = \"成功添加该考试科目!\"; txtName.Text = \"\";

} else {

lblMessage.Text = \"添加该考试科目失败!\"; }

} }

protected void imgBtnReturn_Click(object sender, ImageClickEventArgs e) {

Server.Transfer(\"CourseManage.aspx\"); } }

试卷制定(随机制定) using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;

44

using OnLineExam.BusinessLogicLayer; using OnLineExam.DataAccessLayer; using System.Data.SqlClient;

public partial class Web_PaperSetup : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

InitData(); //初始化考试科目 } }

//初始化考试科目

protected void InitData() {

Course course = new Course(); //创建考试科目对象 DataSet ds = course.QueryCourse(); //查询考试科目信息 ddlCourse.DataSource = ds; //指名考试科目列表框数据源

ddlCourse.DataTextField = \"Name\"; //DataTextField显示Name字段值

ddlCourse.DataValueField = \"ID\"; //DataValueField显示ID字段值

ddlCourse.DataBind(); //绑定数据 }

//根据设置自动生成试卷 protected void imgBtnConfirm_Click(object sender, ImageClickEventArgs e) {

Panel1.Visible = true;

DataBase db = new DataBase();//创建DataBase类对象 string GridView1Str = \"select top \" + int.Parse(txtSingleNum.Text.Trim()) + \" * from SingleProblem order by newid()\";//根据参数设置查询单选题Sql语句

DataSet ds1 = db.GetDataSetSql(GridView1Str);//调用DataBase类方法GetDataSetSql方法查询数据

GridView1.DataSource = ds1.Tables[0].DefaultView;//为单选题GridView控件指名数据源

GridView1.DataBind();//绑定数据

45

string GridView2Str = \"select top \" + int.Parse(txtMultiNum.Text.Trim()) + \" * from MultiProblem order by newid()\";//根据参数设置查询多选题Sql语句

DataSet ds2 = db.GetDataSetSql(GridView2Str);//调用DataBase类方法GetDataSetSql方法查询数据

GridView2.DataSource = ds2.Tables[0].DefaultView;//为多选题GridView控件指名数据源

GridView2.DataBind();//绑定数据 string GridView3Str = \"select top \" + int.Parse(txtJudgeNum.Text.Trim()) + \" * from JudgeProblem order by newid()\";//根据参数设置查询判断题Sql语句

DataSet ds3 = db.GetDataSetSql(GridView3Str);//调用DataBase类方法GetDataSetSql方法查询数据

GridView3.DataSource = ds3.Tables[0].DefaultView;//为判断题GridView控件指名数据源

GridView3.DataBind();//绑定数据 }

//将生成试卷保存到数据库 protected void imgBtnSave_Click(object sender, ImageClickEventArgs e) {

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) {

foreach (GridViewRow dr in GridView1.Rows)//保存试卷单选题信息

{

string single = \"insert into PaperDetail(PaperID,Type,TitleID,Mark) values(\" + afterID + \单选题',\" + int.Parse(((Label)dr.FindControl(\"Label3\")).Text) + \+ int.Parse(txtSingleFen.Text) + \")\"; db.Insert(single); }

foreach (GridViewRow dr in GridView2.Rows)//保存试卷多选题信息

{

string multi = \"insert into PaperDetail(PaperID,Type,TitleID,Mark) values(\" + afterID + \多选

46

题',\" + int.Parse(((Label)dr.FindControl(\"Label6\")).Text) + \+ int.Parse(txtMultiFen.Text) + \")\"; db.Insert(multi); }

foreach (GridViewRow dr in GridView3.Rows)//保存试卷判断题信息

{

string judge = \"insert into PaperDetail(PaperID,Type,TitleID,Mark) values(\" + afterID + \判断题',\" + int.Parse(((Label)dr.FindControl(\"Label7\")).Text) + \+ int.Parse(txtJudgeFen.Text) + \")\"; db.Insert(judge); }

Response.Write(\"\"); } }

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; } }

试卷制定(手动制定) using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

47

using OnLineExam.DataAccessLayer; using System.Data.SqlClient;

public partial class Web_PaperSetup2 : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

InitData(); //初始化考试科目 GVbind(); } }

//初始化考试科目

protected void InitData() {

Course course = new Course(); //创建考试科目对象 DataSet ds = course.QueryCourse(); //查询考试科目信息 ddlCourse.DataSource = ds; //指名考试科目列表框数据源

ddlCourse.DataTextField = \"Name\"; //DataTextField显示Name字段值

ddlCourse.DataValueField = \"ID\"; //DataValueField显示ID字段值

ddlCourse.DataBind(); //绑定数据 }

//根据设置自动生成试卷 protected void GVbind() {

DataBase db = new DataBase();//创建DataBase类对象

string GridView1Str = \"select * from SingleProblem\";//根据参数设置查询单选题Sql语句

DataSet ds1 = db.GetDataSetSql(GridView1Str);//调用DataBase类方法GetDataSetSql方法查询数据

GridView1.DataSource = ds1.Tables[0].DefaultView;//为单选题GridView控件指名数据源

GridView1.DataBind();//绑定数据

string GridView2Str = \"select * from MultiProblem\";//根据参数设置查询多选题Sql语句

DataSet ds2 = db.GetDataSetSql(GridView2Str);//调用DataBase

48

类方法GetDataSetSql方法查询数据

GridView2.DataSource = ds2.Tables[0].DefaultView;//为多选题GridView控件指名数据源

GridView2.DataBind();//绑定数据

string GridView3Str = \"select * from JudgeProblem\";//根据参数设置查询判断题Sql语句

DataSet ds3 = db.GetDataSetSql(GridView3Str);//调用DataBase类方法GetDataSetSql方法查询数据

GridView3.DataSource = ds3.Tables[0].DefaultView;//为判断题GridView控件指名数据源

GridView3.DataBind();//绑定数据 }

protected void chkSelectAll_CheckedChanged(object sender, EventArgs e) {

for (int i = 0; i <= GridView1.Rows.Count - 1; i++) {

((CheckBox)GridView1.Rows[i].FindControl(\"chkSelect1\")).Checked = this.chkSelectAll.Checked; }

for (int i = 0; i <= GridView2.Rows.Count - 1; i++) {

((CheckBox)GridView2.Rows[i].FindControl(\"chkSelect2\")).Checked = this.chkSelectAll.Checked; }

for (int i = 0; i <= GridView3.Rows.Count - 1; i++) {

((CheckBox)GridView3.Rows[i].FindControl(\"chkSelect3\")).Checked = this.chkSelectAll.Checked; } }

//将生成试卷保存到数据库 protected void imgBtnSave_Click(object sender, ImageClickEventArgs e) {

DataBase db = new DataBase(); string insertpaper = \"insert into Paper(CourseID,PaperName,PaperState) values(\" + int.Parse(ddlCourse.SelectedValue) + \+ txtPaperName.Text + \"',1) SELECT @@IDENTITY as id\";

49

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 + \ db.Insert(single); }

}

for (int i = 0; i < this.GridView2.Rows.Count; i++) {

bool isChecked = ((CheckBox)GridView2.Rows[i].FindControl(\"chkSelect2\")).Checked; if (isChecked) {

string str2 = ((Label)GridView2.Rows[i].FindControl(\"Label6\")).Text; string multi = \"insert into PaperDetail(PaperID,Type,TitleID,Mark) values(\" + afterID + \多选题',\" + str2 + \ db.Insert(multi); }

}

for (int i = 0; i < this.GridView3.Rows.Count; i++) {

bool isChecked = ((CheckBox)GridView3.Rows[i].FindControl(\"chkSelect3\")).Checked; if (isChecked) {

string str3 = ((Label)GridView3.Rows[i].FindControl(\"Label7\")).Text; string judge = \"insert into PaperDetail(PaperID,Type,TitleID,Mark) values(\" + afterID + \判断

50

题',\" + str3 + \ db.Insert(judge); }

} }

Response.Write(\"\");

}

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; } }

学生试卷信息 using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

public partial class Web_UserPaperList : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

string loginName = Session[\"userID\"].ToString();

51

Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName; InitData(); } }

//初始化试卷表格

protected void InitData() {

Paper paper = new Paper();

DataSet ds = paper.QueryUserPaperList(); GridView1.DataSource = ds; GridView1.DataBind();

LabelPageInfo.Text = \"当前(第\" + (GridView1.PageIndex + 1).ToString() + \"页 共\" + GridView1.PageCount.ToString() + \"页)\"; }

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {

GridView1.PageIndex = e.NewPageIndex; InitData(); }

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {

int i;

//执行循环,保证每条数据都可以更新

for (i = 0; i < GridView1.Rows.Count; i++) {

//首先判断是否是数据行

if (e.Row.RowType == DataControlRowType.DataRow) {

//当鼠标停留时更改背景色

e.Row.Attributes.Add(\"onmouseover\

\"c=this.style.backgroundColor;this.style.backgroundColor='Aqua'\"); //当鼠标移开时还原背景色

e.Row.Attributes.Add(\"onmouseout\\"this.style.backgroundColor=c\"); } } } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {

52

string UserID = GridView1.DataKeys[e.RowIndex].Values[0].ToString(); //取出要删除记录的主键值1 int PaperID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[1].ToString().Trim());//取出要删除记录的主键值2

Paper paper = new Paper();

if (paper.DeleteByProc(UserID, PaperID)) {

Response.Write(\"\"); } else {

Response.Write(\"\"); }

InitData(); } }

用户成绩

using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer; using System.IO;

using System.Data.OleDb;

public partial class Web_UserScore : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

53

labUser.Text = user.UserName; InitData(); } }

//初始化成绩表格

protected void InitData() {

Scores score = new Scores(); //创建Scores对象 DataSet ds = score.QueryScore(); //调用QueryScore方法查询成绩并将查询结果放到DataSet数据集中

GridView1.DataSource = ds; //为GridView控件指名数据源

GridView1.DataBind(); //绑定数据 }

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {

GridView1.PageIndex = e.NewPageIndex; InitData(); }

//GridView控件RowDeleting事件 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {

Scores score = new Scores(); //创建Scores对象 int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString()); //取出要删除记录的主键值

if (score.DeleteByProc(ID)) {

Response.Write(\"\"); } else {

Response.Write(\"\"); }

GridView1.EditIndex = -1; InitData(); }

54

//到出到Excel事件 protected void ImageButton2_Click(object sender, ImageClickEventArgs e) {

Scores score = new Scores(); //创建Scores对象 DataSet ds = score.QueryScore(); //调用QueryScore方法查询成绩并将查询结果放到DataSet数据集中 DataTable DT = ds.Tables[0];

//生成将要存放结果的Excel文件的名称 string NewFileName = DateTime.Now.ToString(\"yyyyMMddHHmmss\") + \".xls\";

//转换为物理路径

NewFileName = Server.MapPath(\"Temp/\" + NewFileName); //根据模板正式生成该Excel文件

File.Copy(Server.MapPath(\"../Module01.xls\"), NewFileName, true);

//建立指向该Excel文件的数据库连接

string strConn = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\" + NewFileName + \";Extended Properties='Excel 8.0;'\"; OleDbConnection Conn = new OleDbConnection(strConn); //打开连接,为操作该文件做准备 Conn.Open();

OleDbCommand Cmd = new OleDbCommand(\"\

foreach (DataRow DR in DT.Rows) {

string XSqlString = \"insert into [Sheet1$]\";

XSqlString += \"([用户姓名],[试卷],[成绩],[考试时间]) values(\";

XSqlString += \"'\" + DR[\"UserName\"] + \"',\"; XSqlString += \"'\" + DR[\"PaperName\"] + \"',\"; XSqlString += \"'\" + DR[\"Score\"] + \"',\"; XSqlString += \"'\" + DR[\"ExamTime\"] + \"')\"; Cmd.CommandText = XSqlString; Cmd.ExecuteNonQuery(); }

//操作结束,关闭连接 Conn.Close();

//打开要下载的文件,并把该文件存放在FileStream中 System.IO.FileStream Reader = System.IO.File.OpenRead(NewFileName);

//文件传送的剩余字节数:初始值为文件的总大小 long Length = Reader.Length;

55

Response.Buffer = false;

Response.AddHeader(\"Connection\ Response.ContentType = \"application/octet-stream\"; Response.AddHeader(\"Content-Disposition\\"attachment; filename=\" + Server.UrlEncode(\"学生成绩.xls\"));

Response.AddHeader(\"Content-Length\

byte[] Buffer = new Byte[10000]; //存放欲发送数据的缓冲区

int ByteToRead; //每次实际读取的字节数

while (Length > 0) {

//剩余字节数不为零,继续传送 if (Response.IsClientConnected) {

//客户端浏览器还打开着,继续传送

ByteToRead = Reader.Read(Buffer, 0, 10000); //往缓冲区读入数据

Response.OutputStream.Write(Buffer, 0, ByteToRead); //把缓冲区的数据写入客户端浏览器

Response.Flush(); //立即写入客户端

Length -= ByteToRead; //剩余字节数减少 } else {

//客户端浏览器已经断开,阻止继续循环 Length = -1; } }

//关闭该文件 Reader.Close(); //删除该Excel文件

File.Delete(NewFileName); }

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {

if (e.Row.RowType == DataControlRowType.DataRow)

56

{

if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) {

((LinkButton)e.Row.Cells[7].Controls[0]).Attributes.Add(\"onclick\\"javascript:return confirm('你确认要删除成绩吗?')\"); }

} int i;

//执行循环,保证每条数据都可以更新

for (i = 0; i < GridView1.Rows.Count; i++) {

//首先判断是否是数据行

if (e.Row.RowType == DataControlRowType.DataRow) {

//当鼠标停留时更改背景色

e.Row.Attributes.Add(\"onmouseover\

\"c=this.style.backgroundColor;this.style.backgroundColor='Aqua'\"); //当鼠标移开时还原背景色

e.Row.Attributes.Add(\"onmouseout\\"this.style.backgroundColor=c\"); } } } }

单选题管理 using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

public partial class Web_SingleSelectManage : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

57

if (!IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

InitDDLData(); //初始化考试科目 } }

//初始化考试科目

protected void InitDDLData() {

Course course = new Course(); //创建考试科目对象 DataSet ds = course.QueryCourse(); //查询考试科目信息 ddlCourse.DataSource = ds; //指名考试科目列表框数据源

ddlCourse.DataTextField = \"Name\"; //DataTextField显示Name字段值

ddlCourse.DataValueField = \"ID\"; //DataValueField显示ID字段值

ddlCourse.DataBind(); //绑定数据 GridViewBind();//为GridView绑定数据 }

//显示选择科目的单选题

protected void ddlCourse_SelectedIndexChanged(object sender, EventArgs e) {

GridViewBind();//为GridView绑定数据 }

//GridView控件绑定数据事件 protected void GridViewBind() {

SingleProblem singleproblem = new SingleProblem(); //创建单选题对象

DataSet ds = singleproblem.QuerySingleProblem(int.Parse(ddlCourse.SelectedValue));//根据考试科目查询单选题信息

GridView1.DataSource = ds.Tables[0].DefaultView; //为GridView控件指名数据源

GridView1.DataBind(); //绑定数据 }

//删除试题事件 protected void GridView1_RowDeleting(object sender,

58

GridViewDeleteEventArgs e) {

SingleProblem singleproblem = new SingleProblem(); //创建单选题对象 int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString()); //取出要删除记录的主键值

if (singleproblem.DeleteByProc(ID)) {

Response.Write(\"\"); } else {

Response.Write(\"\"); }

GridView1.EditIndex = -1; GridViewBind();//重新绑定数据 }

//删除多条记录 protected void ImageButton1_Click(object sender, ImageClickEventArgs e) {

SingleProblem single = new SingleProblem();//创建SingleProblem对象

foreach (GridViewRow dr in GridView1.Rows)//对GridView中的每一行进行判断 {

if (((CheckBox)dr.FindControl(\"xuanze\")).Checked)//如果选择了进行删除 {

int ID = int.Parse(((Label)dr.FindControl(\"Label1\")).Text); single.ID = ID;

single.DeleteByProc(ID); } } }

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {

GridView1.PageIndex = e.NewPageIndex; GridViewBind();

59

}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {

if (e.Row.RowType == DataControlRowType.DataRow) {

e.Row.Cells[2].ToolTip = e.Row.Cells[2].Text; if ((e.Row.Cells[2].Text).Length > 30) {

e.Row.Cells[2].Text = (e.Row.Cells[2].Text).Substring(0, 30) + \"...\"; }

if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) {

((LinkButton)e.Row.Cells[4].Controls[0]).Attributes.Add(\"onclick\\"javascript:return confirm('你确认要删除\\\"\" + e.Row.Cells[2].Text + \"\\\"吗?')\"); }

} int i;

//执行循环,保证每条数据都可以更新

for (i = 0; i < GridView1.Rows.Count; i++) {

//首先判断是否是数据行

if (e.Row.RowType == DataControlRowType.DataRow) {

//当鼠标停留时更改背景色

e.Row.Attributes.Add(\"onmouseover\

\"c=this.style.backgroundColor;this.style.backgroundColor='Aqua'\"); //当鼠标移开时还原背景色

e.Row.Attributes.Add(\"onmouseout\\"this.style.backgroundColor=c\"); } } } }

单选题添加 using System;

using System.Data;

using System.Configuration;

60

using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

public partial class Web_SingleSelectAdd : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!Page.IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

InitDDLData(); //初始化考试科目下拉列表框 if (Request[\"ID\"] != null)//如果是修改题目,初始化数据 {

InitData(); } }

}

//初始化考试科目

protected void InitDDLData() {

Course course = new Course(); //创建考试科目对象 DataSet ds = course.QueryCourse(); //查询考试科目信息 ddlCourse.DataSource = ds; //指名考试科目列表框数据源

ddlCourse.DataTextField = \"Name\"; //DataTextField显示Name字段值

ddlCourse.DataValueField = \"ID\"; //DataValueField显示ID字段值

ddlCourse.DataBind(); //绑定数据 }

//初始化数据

protected void InitData() {

int SingleProblemID = int.Parse(Request[\"ID\"].ToString());

61

//取出传递过来的试题编号

SingleProblem singleproblem = new SingleProblem(); //创建单选题对象 if (singleproblem.LoadData(SingleProblemID)) //如果取出题目信息,分别放在相应控件显示 {

ddlCourse.SelectedValue = singleproblem.CourseID.ToString();

txtTitle.Text = singleproblem.Title; txtAnswerA.Text = singleproblem.AnswerA; txtAnswerB.Text = singleproblem.AnswerB; txtAnswerC.Text = singleproblem.AnswerC; txtAnswerD.Text = singleproblem.AnswerD;

ddlAnswer.SelectedItem.Text = singleproblem.Answer; }

else //查询出错,给出提示 {

lblMessage.Text = \"加载数据出错!\"; } }

//添加或修改事件 protected void imgBtnSave_Click(object sender, ImageClickEventArgs e) {

if (Page.IsValid) {

SingleProblem singleproblem = new SingleProblem(); //创建单选题对象

singleproblem.CourseID = int.Parse(ddlCourse.SelectedValue);//为单选题对象各属性赋值 singleproblem.Title = txtTitle.Text; singleproblem.AnswerA = txtAnswerA.Text; singleproblem.AnswerB = txtAnswerB.Text; singleproblem.AnswerC = txtAnswerC.Text; singleproblem.AnswerD = txtAnswerD.Text;

singleproblem.Answer = ddlAnswer.SelectedItem.Text; if (Request[\"ID\"] != null) //如果是修改题目信息 {

singleproblem.ID = int.Parse(Request[\"ID\"].ToString()); //取出试题主键 if

(singleproblem.UpdateByProc(int.Parse(Request[\"ID\"].ToString())))/

62

/调用修改试题方法修改试题 {

lblMessage.Text = \"成功修改该单选题!\"; } else {

lblMessage.Text = \"修改该单选题失败!\"; } }

else //如果是添加试题 {

if (singleproblem.InsertByProc()) //调用添加试题方法添加试题 {

lblMessage.Text = \"成功添加该单选题!\"; } else {

lblMessage.Text = \"添加该单选题失败!\"; } } } }

protected void imgBtnReturn_Click(object sender, ImageClickEventArgs e) {

Server.Transfer(\"SingleSelectManage.aspx\"); } }

多选题管理 using System;

using System.Data;

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

public partial class Web_MultiSelectManage : System.Web.UI.Page

63

{

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

InitDDLData(); //初始化考试科目 } }

//初始化考试科目

protected void InitDDLData() {

Course course = new Course(); //创建考试科目对象 DataSet ds = course.QueryCourse(); //查询考试科目信息 ddlCourse.DataSource = ds; //指名考试科目列表框数据源

ddlCourse.DataTextField = \"Name\"; //DataTextField显示Name字段值

ddlCourse.DataValueField = \"ID\"; //DataValueField显示ID字段值

ddlCourse.DataBind(); //绑定数据 GridViewBind(); }

//显示选择科目的单选题

protected void ddlCourse_SelectedIndexChanged(object sender, EventArgs e) {

GridViewBind();//为GridView绑定数据 }

protected void GridViewBind() {

MultiProblem multiproblem = new MultiProblem(); //创建多选题对象

DataSet ds = multiproblem.QueryMultiProblem(int.Parse(ddlCourse.SelectedValue));//根据考试科目查询多选题信息

GridView1.DataSource = ds.Tables[0].DefaultView; //为GridView控件指名数据源

GridView1.DataBind(); //绑定数据 }

//删除试题事件 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {

MultiProblem multiproblem = new MultiProblem(); //创建单选题对象

int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString()); //取出要删除记录的主键值

if (multiproblem.DeleteByProc(ID)) {

Response.Write(\"\"); } else {

Response.Write(\"\"); }

GridViewBind();//重新绑定数据 }

//删除多条记录 protected void ImageButton1_Click(object sender, ImageClickEventArgs e) {

MultiProblem multi = new MultiProblem();//创建MultiProblem对象

foreach (GridViewRow dr in GridView1.Rows)//对GridView中的每一行进行判断 {

if (((CheckBox)dr.FindControl(\"xuanze\")).Checked)//如果选择了进行删除 {

int ID = int.Parse(((Label)dr.FindControl(\"Label1\")).Text); multi.ID = ID;

multi.DeleteByProc(ID); } } }

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {

GridView1.PageIndex = e.NewPageIndex;

65

GridViewBind();//重新绑定数据 }

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {

if (e.Row.RowType == DataControlRowType.DataRow) {

e.Row.Cells[2].ToolTip = e.Row.Cells[2].Text; if ((e.Row.Cells[2].Text).Length > 30) {

e.Row.Cells[2].Text = (e.Row.Cells[2].Text).Substring(0, 30) + \"...\"; }

if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) {

((LinkButton)e.Row.Cells[4].Controls[0]).Attributes.Add(\"onclick\\"javascript:return confirm('你确认要删除\\\"\" + e.Row.Cells[2].Text + \"\\\"吗?')\"); }

} int i;

//执行循环,保证每条数据都可以更新

for (i = 0; i < GridView1.Rows.Count; i++) {

//首先判断是否是数据行

if (e.Row.RowType == DataControlRowType.DataRow) {

//当鼠标停留时更改背景色

e.Row.Attributes.Add(\"onmouseover\

\"c=this.style.backgroundColor;this.style.backgroundColor='Aqua'\"); //当鼠标移开时还原背景色

e.Row.Attributes.Add(\"onmouseout\\"this.style.backgroundColor=c\"); } } } }

判断题添加 using System;

using System.Data;

66

using System.Configuration; using System.Collections; using System.Web;

using System.Web.Security; using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using OnLineExam.BusinessLogicLayer;

public partial class Web_JudgeAdd : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (!Page.IsPostBack) {

string loginName = Session[\"userID\"].ToString(); Users user = new Users(); user.LoadData(loginName);

labUser.Text = user.UserName;

InitDDLData(); //初始化考试科目下拉列表框 if (Request[\"ID\"] != null) //如果是修改题目,初始化数据

{

InitData(); } } }

//初始化考试科目

protected void InitDDLData() {

Course course = new Course(); //创建考试科目对象 DataSet ds = course.QueryCourse(); //查询考试科目信息 ddlCourse.DataSource = ds; //指名考试科目列表框数据源

ddlCourse.DataTextField = \"Name\"; //DataTextField显示Name字段值

ddlCourse.DataValueField = \"ID\"; //DataValueField显示ID字段值

ddlCourse.DataBind(); //绑定数据 }

//初始化数据

protected void InitData() {

67

int judgeProblemID = int.Parse(Request[\"ID\"].ToString()); //取出传递过来的试题编号

JudgeProblem judgeproblem = new JudgeProblem(); //创建判断题对象 if (judgeproblem.LoadData(judgeProblemID)) //如果取出题目信息,分别放在相应控件显示 {

ddlCourse.SelectedValue = judgeproblem.CourseID.ToString();

txtTitle.Text = judgeproblem.Title; rblAnswer.SelectedValue = judgeproblem.Answer.ToString(); }

else //查询出错,给出提示 {

lblMessage.Text = \"加载数据出错!\"; } }

//添加或修改事件 protected void imgBtnSave_Click(object sender, ImageClickEventArgs e) {

if (Page.IsValid) {

JudgeProblem judgeproblem = new JudgeProblem(); //创建判断题对象

judgeproblem.CourseID = int.Parse(ddlCourse.SelectedValue);//为判断题对象各属性赋值 judgeproblem.Title = txtTitle.Text; judgeproblem.Answer = bool.Parse(rblAnswer.SelectedValue); if (Request[\"ID\"] != null) //如果是修改题目信息 {

judgeproblem.ID = int.Parse(Request[\"ID\"].ToString()); //取出试题主键 if

(judgeproblem.UpdateByProc(int.Parse(Request[\"ID\"].ToString())))//调用修改试题方法修改试题 {

lblMessage.Text = \"成功修改该判断题!\"; } else {

68

lblMessage.Text = \"修改该判断题失败!\"; } }

else //如果是添加试题 {

if (judgeproblem.InsertByProc()) //调用添加试题方法添加试题 {

lblMessage.Text = \"成功添加该判断题!\"; } else {

lblMessage.Text = \"添加该判断题失败!\"; } } } }

protected void imgBtnReturn_Click(object sender, ImageClickEventArgs e) {

Server.Transfer(\"JudgeManage.aspx\"); } }

69

9.参考文献

《C#.NET程序设计》(机械工业出版社出版) 2006年11月第一版 总第20070001号

《ADO.NET程序设计》(电子工业大学出版社出版)2007年3月1日第一次印刷

《SQL Server 2000数据库开发》(清华大学出版社出版)2006年12月6日第一次印刷

《C# +SQL Server 2000 中小型信息系统开发实例》2006年11月第一次印刷

70

10.实训总结

实训总结 学生名: 时间过的真快,转眼间我期望已久的实训周已经结束。经过三周的实训练习让我学到了许多知识,回头想想实训这些天我确实是有很大收获的,专业知识、实际操作能力都有很大的提高。 在本次的实训中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获取成功,这就是工作的乐趣。 实训中除了学到不少专业知识,也了解一些社会的现实性,包括人际交往,沟通方式及相关礼节方面的内容,对于团队开发来说,团结一致使我深有体会。 从确定题目,到需求分析,由概要设计再到详细设计,从项目实现,到系统测试,一步步都凝结了我们的心血,看着系统在自己手中一点点完善,不由自主的感到了一种自信 有时候也需要虚心请教,在遇到困难时,将问题拿出来小组讨论,一起战胜困难,也让我从别人的身上真得能学习到不自己没有的东西,更让我明白了团队合作的重要性。 虽然有时会有一些难以解决的困难使得自己产生一种急躁感,但也让我明白了在遇到困难时一定要沉着冷静,只有冷静面对才能更快的解决问题,我相信每一次的挫折只能使我更接近成功。 实践出真理,在这三周的实训确实是有瞒累但是累得有价值。学海无涯,好多好多的东西在向我们招手,等待我们去努力的开发学习,知道的越多就知道自己不知道的越多,我一定会在这条路上越行越远。 再接再厉吧,希望自己可以真正的懂了,也希望自己学到更多的知识。加油!在以后的工作、生活和学习中,发展自己的优势,弥补自己的不足和缺陷。 签字: 2015年 05 月 31 日 71

实训总结 学生名: 在实训的过程中,我深深的体会到了自己在专业知识方面的的欠缺和不足,也意识到了自己作为计算机软件专业的学生,要想在以后的职业中崭露头角,除了要有过硬的理论知识,健康的体魄之外,还必须具备良好的心理素质,是自己在以后的途中无论经历什么样的困难,都立于不败之地。通过实训老师的课堂讲解与企业文化标准的培训,使我加深了对自己专业的认识,从而确定自己以后的努力方向,要想在短暂的实训时间内尽多的学到东西,就需要我们跟老师或同学进行良好的沟通,加深彼此的了解,只有我们跟老师多沟通,让老师更了解我们,才能更真切的对我们进行培训工作。由此,班级的文化“共享”就在生活中慢慢形成了。 我深刻的认识到要成为一名优秀的软件开发人员不是一件容易的事情,不仅要有足够的干劲和热情,还要有扎实的编写代码基础,必须要有事先对文档进行可靠性报告,功能说明书,详细设计说明书等的编写和一些风险评估的编写的能力。 这次实训也让我深刻的了解到,不管在工作中还是在生活中要和老师、同学保持良好的关系是很重要的。做事首先要先做人,要明白做人的道理,如何与人相处是现代社会的做认得一个最基本的问题,对已自己这样一个即将步入社会的人来说,需要学习的东西很多。从一起做项目的同学身上我看到了谦虚谨慎、细心努力的态度,在以后我的生活中我还会留意身边同学的优点,从他们身上找寻我所缺少的品质,不断学习。从老师那里我看到了企业人的生活面貌,没有事情可以不劳而获,今天老师们能够领导我们是他们之前努力的结果,虽然老师没有和我们讲很多公司里的事情,可是他们的言行中所表现出来的都是比我们要严谨的多的对工作的态度。 在实际工作中经常会和不同的人打交道,这次实训教会了我们团队合作的重要作用,也为和人沟通打下了基础,在以后的日子里仍需继续的努力,不断激励经验,不断磨砺自己,早日走向工作岗位。 签字: 2015年 05 月 31 日

72

实训总结 学生名: 短暂的实训已经结束,在这段时间里,我们巩固了所学ASP.NET的网站开发技术,认识到了自己的不足,发现很多以前在上课时被忽略的问题,我们受益良多。 在实训最开始的时候,刚确定了实训项目,但是还不知道该如何去做,有一段时间很迷惑,在经过组长的指导后,我们开始了项目的制作,也让我感受到了团队的重要性,为以后的生活留下了宝贵的经验。 感觉我们的项目还有很多的漏洞和不足,在建设网站的过程中有很多的问题,例如对数据库技术掌握的不足,对ASP.NET技术应用的失误,对图片剪切技术所懂的缺陷,对网站调试技术了解的稀少等,都让我们在建设网站时遇到了很大程度的阻碍。在看见自己不足的同时,也看到了团队力量的强大,在大家一起的共同努力下,解决了大部分的问题,也让我们的网站更加精准。 从需求分析、概要设计、详细设计、项目实现、项目测试到实训总结,我学会了思考,因为当我自己解决一个问题时,增加了我的自豪感和自信心;另外我还深切体会到了团结协作的重要性和乐趣,团结就是力量,只要是团队中的一员,我们就要一起付出,一起进退,一起战胜和跨越困难。有什么问题有想法拿出来一起探讨与分享,将会有更好的答案。丰富了大家的思维,活跃了我们的头脑,学会去接受别人,肯定别人,同样也得到了别人的尊重与肯定。 不知不觉的几周实训也进入了尾声,这次实训就像一场愉快的旅行,开拓了我们的视野,提升了我们的技能,也增强了我们的动手能力,还有进一步学会了同学之间的互相帮助于沟通,这次实训是我们人生旅程中一次珍贵的经历。 社会的竞争时激烈的,我想我们应该好好把握大学的学习时间,充实自我,完善自我,全面发展,攻破电脑,争取做一名出色的现代人。 签字: 2015年 5 月 31 日

73

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务