精华内容
下载资源
问答
  • 一.软件功能 功能列表: 用例图(具体展开请看第三部分系统...考试管理:考试基本信息(创建一次考试活动,设置考试基本信息(考试时间,答题时间,考试介绍)),试卷管理(抽取题库题目组成一套试卷(可以选题组

    一.软件功能

    功能列表:

    用例图(具体展开请看第三部分系统设计):

    二.老师类及其特征

    登录,注册

    题库管理:题目录入(在线录入和批量导入,题目需要录入题干、选型、正确答案、解析,题目类型包括单选题、多选题、判断题、填空题),题目分类(自定义题目分类,多级分类,可以通过分类进行检索),题目检索查询(按题干关键字、题目分类、题目类型进行检索)

    考试管理:考试基本信息(创建一次考试活动,设置考试基本信息(考试时间,答题时间,考试介绍)),试卷管理(抽取题库题目组成一套试卷(可以选题组卷和自动组卷)),考试成员管理(添加、删除考试成员)

    考试结果管理:判卷(自动判卷、人工审查纠错),统计分析(汇总全部考试成员的成绩和答题信息,进行成绩排名、计算平均分。统计每道题目的得分、对错情况、进行可视化的图标展示)

    系统管理:用户管理(增删改查)、账号管理(增删改查)、角色管理(增删改查)

    三.学生类及其特征

    登录,注册

    在线答题:在线答题(在线完成答题,提交试卷,考试时间结束自动提交),查看考试结果(考试结束之后进行考试结果查询)

    四.假设和依赖关系

    本项目是否能够成功实施,主要取决于以下的条件:

    (1)为了项目的开发和实施,在必要时对现有的软件开发流程进行详细的了解。

    (2)具有相对稳定的项目团队,不稳定的团队将影响项目的进度和质量。

    (3)团队成员对软件开发过程使用的性能良好的软件有较好的了解,明确其中必要的功能,为本项目提供完整的功能和性能需求资料,以便于对其进行分析,从而形成完善的软件需求。

    (4)团队拥有软件系统的运行必要的且能够满足系统运行条件的硬件环境和通讯环境,不合适的硬件环境和通讯环境将会影响系统的性能。

    (5)项目团队掌握先进的能够适用于该项目的技术,这是系统的性能是否优化和项目能否成功的保证。

    五.系统功能

    5.1题库管理

    5.2考试管理

    5.3在线答题

    5.4考试结果管理

    5.5系统管理

    六.外部接口需求

    6.1用户接口

    本系统采用Vue+SpringBoots架构,用户界面的具体细节将在具体中描述。

    6.2硬件接口

    服务器端建议使用专用服务器。

    6.3软件接口

    无特殊需求

    6.4通信接口

    无特殊需求。

    七.其它非功能性需求

    7.1性能需求

    7.1.1可靠性需求

    考试期间是系统用户登陆的高峰期,需要确保系统能够适应所有用户的登陆与各种请求。

    7.1.2响应时间需求

    用户提交不同请求之后,对请求的响应时间不能超过3秒,所有操作将在此时间内将完成,并返回确认信息。

    7.1.3开放性需求

        系统应该具备十分的灵活性,以适应将来功能拓展的需求。

    7.2安全性需求

    (1)权限控制

    根据不同用户角色,设置相应权限,用户的重要操作都做相应的日志记录以备查看,没有登录注册的用户禁止使用系统,禁止重复登录。

    (2)记录日志

    本系统应该能够记录系统运行时所发生的所有错误,包括本机错误和网络错

    误。这些错误记录便于查找错误的原因。日志同时记录用户的关键性操作信息。

    (3)数据备份

    每天24点,进行数据的备份。

    (4)重要数据加密

    本系统对一些重要的数据按一定的算法进行加密,如用户口令、重要参数等。

    7.3可用性需求

    (1)方便操作,操作流程合理

    尽量从用户角度出发,以方便使用本产品。

    (2)支持没有计算机使用经验、计算机使用经验较少及有较多计算机使用

    经验的用户均能方便地使用本系统。

    (3)控制必录入项

    本系统能够对必须录入的信息进行控制,使用户能够确保信息录入的完整。同时对必录入项进行有效的统一的提示。

    (4)联机帮助与操作指南。

    为用户提供操作指南,帮助用户了解使用方式,快速上手。

    (5)容错能力

    系统具有一定的容错和抗干扰能力,在非硬件故障或非通讯故障时,系统能

    够保证正常运行,并有足够的提示信息帮助用户有效正确地完成任务。

    7.4市场需求

        在网络学习的时代,在线考试也成了学生和老师们的一项重大需求,因此,在线考试管理系统的设计,为学校、企业和教育机构提供了在线考试解决方案。使用该系统可以方便的完成组织考试、管理成员、线上答题、成绩统计分析的全部考试流程,有效降低了组织成本,提高工作效率。系统同时提供题库管理和题目分析功能,可以有效帮助机构完成题目积累和知识沉淀,为机构数据积累提供帮助。

    7.5用户文档

    使用简单、所见即所得。暂不提供用户文档。

    八.软件质量特性

    8.1可靠性

    要求系统能够长时间正常运行,并且支持多用户同时访问。在任何时间用户均可通过登录进入系统平台,进行操作。

    8.2易用性

    具有友好易用的用户界面及简单的操作方法,提供用户操作指南,保证用户上手简单

    8.3可维护性

    能够满足系统管理员对系统维护的需求,能够实现软件开发者对软件的进一步维护

    8.4扩展性

    能够满足软件开发者对软件功能进一步扩展的需求;

    8.5可测试性

    在需要时,能够通过配置文件来控制内部关键信息的输出,输出目标也可通过配置文件配置。

    8.6健壮性

    系统不会产生数据的冗余、不匹配等情况。如果用户在操作过程中与系统中断,只需刷新界面,重新连接系统,系统即可恢复修改未保存的状态。

    展开全文
  • 在线考试系统需求分析在线考试系统的功能要求在线考试系统的总目标是:在当前网络环境下,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人...

    .

    ..

    在线考试系统需求分析

    在线考试系统的功能要求

    在线考试系统的总目标是:在当前网络环境下,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的在线考试系统,实现企业或者是学校考试的无纸化,为企业或者学校选拔人才提高更方便,更有效的途径。

    根据可行性研究的结果和用户的要求,分析现有情况及问题,采用brower/Server结构,将在线考试系统分成了一下功能模块。

    本系统的用户可分为管理员和普通用户(考生)两类。

    本系统共分成两个界面:一个界面用于管理员登录,主要负责进行基本资料、题库、试卷、成绩的管理以及查询等;另外一个界面用于普通用户(考生)登录、注册。主要负责在线考试、查询以往考试成绩留言和在线交流等。

    从总体上考虑,系统应该实现下列功能:

    对管理员来说,包括试卷管理、题库管理、阅卷管理、成绩管理。

    1、试卷管理:管理员可以从课程,各种题型的数量等方面对某份试卷提出一定的要求生成试卷规则。同时,管理员还可以对库中已有的试卷进行修改和删除,添加新试卷等。

    2、题库管理:管理员可以对题库中的试题进行三种基本操作:添加新的考题、删除旧有考题、修改原有考题,其中试题类型包括客观题(32。,填空、选择、判断、简答)和主观题;对于每种类型的试题,教师可以设置题干、答案等属性。

    3、阅卷管理:对于客观题,系统应该可以自动阅卷评分,对于主观题,应该进行人工打分,进而让系统自动统计总成绩。

    4、成绩管理:管理员可以查看考生的考试成绩,并针对不同的课程进行成绩统计,包括考试人数、最高分、最低分、平均分以及各分数段得分人数等。

    4、学生管理:管理员可以对用户的资料进行查询、删除。

    对普通用户来说,包括在线考试(包括模拟考试和正式考试)、查询以往考试成绩、留言和在线交流等。

    系统流程图

    系统流程图如图所示。

    考生

    考生

    考生身份验证

    学生信息表

    生成试卷

    教师

    教师身份验证

    身份验证失败

    学生信息表

    试卷恢复

    做试卷

    试卷备份

    学生答题卷表

    交卷

    评卷

    学生成绩

    模块分布图:

    1、在线考试:学生可以任选时间进行在线测试,考生可以选择手动抽题和随机抽题。在规定的时间内完成作答并交卷。如果考试时间到,考试未交卷的,系统自动提交试卷。考试结束后,对于全部为客观性试题,系统会根据已有的标准答案进行在线判卷,考生可以立刻知道考试成绩。

    2、查询以往考试成绩:学生可以在线查询以前参加过的每门课程的考试相关信息。

    3、留言板:学生提交对系统的留言信息。

    该系统的数据流图如下:

    教师

    教师

    试题管理

    试卷管理

    考生信息管理

    考试管理

    试题表

    考 生

    考生信息表

    试卷表

    管理员

    考试表

    添加、删除、修改试题

    添加、删除、修改试卷

    试卷

    考试情况

    考生信息

    查看、修改、删除、增加考生信息

    考试信息

    查看、修改、删除、增加考生信息

    考生信息

    试题

    管理系统流程图

    4.3数据字典定义

    数据字典有四类:数据项,文件,数据流,加工。

    表4.1 考生登录信息

    数据流名:

    考生登录信息

    简述:

    考生进入考试系统中的身份

    组成:

    考生学号+考生姓名

    注释:

    考生只能参加一次考试,即登录一次

    表4.2 选择题

    数据流名:

    选择题

    组成:

    题名+题号+{问题+选项A+选项B+选项C+选项D+答案+结果}

    注释:

    每一次生成的选择题都不一样,结果都为空

    表4.3 填空题

    数据流名:

    填空题

    组成:

    提名+题号+{问题+答案+结果}

    注释:

    结果为空

    表4.4 程序设计题

    数据流名:

    程序设计题

    组成:

    题名+题号+程序设计题内容+程序设计题要求

    注释:

    结果为空

    表4.5备份答题卷

    数据流名:

    备份答题卷

    简述:

    试卷类对象初始化的一个string型数据

    组成:

    考生学号+姓名+(选择题)+(填空题)+(程序设计题)+考试时间+考试剩余时间+结果

    注释:

    每隔5分钟生成1次

    表4.6 学生信息表

    数据流名:

    学生信息表

    组成:

    学生姓名+学号+专业

    注释:

    按学号排序

    表4.7学生成绩表

    数据流名:

    学生成绩表

    组成:

    学号+成绩+考试状态

    表4.8 选择题存储表

    数据流名:

    选择题存储表

    组成:

    题序列号+问题内容+选项A+选项B+选项C+选项D+答案

    注释:

    按题序列号排序

    ... … …

    其余表的框架类似,在此省略。

    4.4 逻辑结构设计要点

    给出本系统内所使用的每隔数据结构的名称、标识符以及它们之中每隔数据项、记录、文卷和系的标识、定义、长度,及它们之间的层次的相互关系[6]。

    4.4.1信息表

    表4.9 学生信息表

    列名

    数据类型

    长度

    是否为空

    注释

    Id

    varchar

    16

    no

    学号

    Name

    varchar

    16

    no

    姓名

    class

    varchar

    展开全文
  • 题 目 基于java的在线考试系统设计 摘 要 本系统是一个基于java的在线考试系统。它的用户由学生、教师和系统管理员组成。学生登陆系统可以进行在线测试和成绩查询。当学生登陆时,系统会随机地为学生选取试题...

    欢迎添加微信互相交流学习哦!

    二维码

    项目源码:https://gitee.com/oklongmm/biye

    题 目      基于java的在线考试系统设计             

     

    摘 要    

    本系统是一个基于java的在线考试系统。它的用户由学生、教师和系统管理员组成。学生登陆系统可以进行在线测试和成绩查询。当学生登陆时,系统会随机地为学生选取试题组成考卷。当学生提交考卷后,系统会自动批改客观题,并将试卷提供给教师查看和提醒教师对试卷主观题进行修改。待教师修改完试卷后,系统会自动生成考生成绩和分数段统计信息。学生可以查询自己的成绩信息和试卷,以便更好地了解自己的学习情况。教师也可以通过分数段统计信息更好地了解学生的学生情况。后台管理员可以对考题,考试设置信息,用户信息进行维护。学生,教师,管理员都可以对个人信息进行维护。
    本系统采用B/S模式设计,一切操作均在浏览器上进行。系统所用到的技术有HTML,CSS,javascript,jsp/servlet等。数据库选用SQLServer2005,web服务器选用TomCat。前台设计主要在DreamWeaver上设计完成的,后台开发主要在Eclipse上完成的。
    本文首先对本次没计的背景、设计的意义、设计的可行性等作了一个简单的介绍。其次介绍了此次设计的设计过程,包括需求分析,总体设计,数据库设计,详细设计等内容。最后介绍了系统的功能测试过程和结果分析。
    关键词:在线考试 随机抽题 SQLServer  JSP/servlet  
      

    ABSTRACT

    This system is a online examination system and it is bases on java.The user of this system make up by student,teacher and administrator. Students can test online and query the results of test. When the students submitted the test papers, the system automatically corrects the objective questions,then send this test paper to the teacher and remind the teacher to correct the subjective questions.When the teacher corrected the questions,the system will automatically generate test scores and the statistical information of score section. Students can query the results of test and the test papers so that they can better understand their own learning. The teacher can also  better understand the learning of stuent through the statistical information of score section. Administrators can maintain the question and maintain the test set and manage the users information.Stuent,teacher and administrator can maintain the Own information.
    The system uses the B / S model , so that all the operations were carried out in the browser. Technologies used in the system include HTML, CSS, javascript, jsp/servlet and so on. The database of this system is SQLServer2005 and  the web service is Tomcat. The Front mainly design in DreamWeaver and the backstage mainly design in Eclipse.
    This paper ,firstly, make a brief of the background, the meaning and the feasibility of this design. Then describes the design process of  system,include needs analysis, design summary, database design and detailed design.Last describes the system functional testing process and results analysis.
    Keyword:ExamOnline;Random question;SQLServer ;JSP/servlet  

    目录

    摘 要    I
    ABSTRACT    II
    1 绪论    1
    1.1问题的提出    1
    1.2系统开发目标    1
    1.3开发工具的选择    1
    1.4开发本系统的意义    1
    2 系统分析    3
    2.1背景分析    3
    2.2可行性分析    3
    2.2.1技术可行性分析    3
    2.2.2经济可行性    3
    2.2.3方案可行性    4
    3 系统设计    5
    3.1 需求分析    5
    3.2总体设计    6
    3.2.1系统数据流图    6
    3.2.2 系统的功能模块图    7
    3.2.3 系统功能模块    7
    3.3 数据库设计    10
    3.3.1数据字典    10
    3.3.2 实体关系图    12
    3.3.3数据库的连接    13
    3.4 详细设计    15
    3.4.1公共类设计    15
    3.4.2在线考试模块设计    18
    3.4.3成绩查询模块设计    22
    3.4.4查看/修改考生试卷模块设计    23
    3.4.5分数段统计模块设计    26
    3.4.6试题维护模块设计    26
    3.4.7考试设置信息维护模块设计    29
    3.4.8用户管理模块设计    32
    3.4.9个人信息维护模块设计    33
    4 系统测试    35
    4.1 系统运行环境    35
    4.2 测试目的    35
    4.3 各功能模块测试    35
    4.3.1在线考试模块测试    36
    4.3.2查看/修改试卷测试    37
    4.3.3分数段统计测试    38
    4.3.4成绩查询测试    39
    4.3.5个人信息维护测试    40
    4.3.6 考题管理    41
    4.3.7考试设置管理测试    44
    4.3.8用户管理测试    45
    5  结论    44
    致谢    45
    参考文献    46

     

    1 绪论

    1.1问题的提出
    计算机网络技术的飞速发展以及计算机技术的发展及计算机的日益普及,现在很多国内外的大学和社会其他部门都已经开设了远程教育,通过计算机网络实现异地教育和培训,从而为在线考试系统发展提供了坚实的基础。现在,计算机硬件技术的发展已经达到了相当高的水平。但是,在我国远程教育软件的开发目前还处于起步阶段,随着这项技术的不断深入发展,就要求有更好、更完善的软件系统应用到远程教育当中去,这就给软件设计人员提出了更高的设计要求。   
    在二十一世纪的新时代,随着计算机技术的发展及计算机的日益普及,基于在线考试与无纸化办公一样已成为大势所趋。在线考试系统也越来越成为学校的好帮手,它的优势不但体现在人力上也体现在物力上,在线考试系统的采用自动评阅、计分、成绩存档功能将有效地避免资源的浪费,有利于环保,减少人员,提高效率。

    1.2系统开发目标
    该系统是一个基于B/S模式的Web在线考试系统。它能够从题库中随机抽取试题生成考试试卷,从而有效地避免了考试作弊,相互抄袭的避端。 当考试完成后系统能自动地为客观题评分。教师登陆时系统可以还原学生考试试卷,待教师对主观题评完分后系统可以计算出学生总分,并生成各分数段情况信息,供给老师参考,以便能够了解学生的学习情况。

    1.3开发工具的选择
    本系统开发语言为JAVA,从各IDE的性能和价格考虑所使用的开发工具主要是Eclipse+MyEclipse,前台页面主要用DreamWeaver来设计。由于本系统数据量和负载量都比较大,从经济和效率上考虑本系统选用SQLServer2005数据库。 Web服务器选Apache开元组织提供的TomCat,因为TomCat是一个免费的开元软件是SUN公司推荐的web服务器。

    1.4开发本系统的意义
    从电子文档、多媒体的应用,到利用Internet做尝试,网络已经渗入到教育体系的各个环节.网上考试系统作为这场变革中必不可少的环节之一,受到越来越多的关注.网上考试系统不仅和传统考试方式一样要权衡公平性,而且还具有一些新特点.
    1)从管理的角度看,在线考试系统可以帮助教师完成一个考试从题目设计,考试安排,考试实施,考卷批改到分数统计总结的所有工作,系统实现了无纸化管理,提高了管理的效率;所有的考试数据和其他数据库需要一种主流的方式进行存储和管理,例如使用数据库技术,题库对于每个出题者都只是显示了部分视图,很好地实现了教考分离.
    2)在不改变传统考试基本步骤的条件下,只要有考试客户端可以连接到考试应用服务器,任何考生在任何地方进行身份确认,都能完成考试.题目有一定的稳定性和随机性.稳定性可以保证每一次考试对每一个考生是公平的,随机性可以避免作弊的发生.
    3)考试结果反馈及时准确.考试的结果在教师修改考完之后就可以知道,同时提供一个机会让考生知道自己哪里做错了,并给出反馈信息说明理由.考生的考试结果可以被保存下来,供教师进行分析统计和察看。 

    2 系统分析

    2.1背景分析
    网络化教育代表了教育改革的一个发展方向,已经成为现代教育的一个特征,并对教育的发展形成新的推动力。随着Internet/Intranet的迅速发展和广泛普及,建立在其上的远程教育成为现代教育技术未来发展方向之一,考试测试作为远程教育的一个子系统也成为一个重要的研究领域。现代远程教育作为一种新的教学手段已经开始进入我们的生活,正在给传统教育模式带来新的变革,并对教育的发展形成新的推动力。
    相比传统的考试方式,在线考试系统的主要好处是一方面可以动态地管理各种考试信息,只要准备好足够大的题库,从该题库中抽取一定数量的考题生成考试试卷,从而有效地避免了考试作弊,相互抄袭的避端;另一方面,考试时间灵活, 可以在规定的时间段内的任意时间参加考试;另外计算机化的考试的最大特点是阅卷快,系统可以在考试结束时当场给考生成绩,计算机阅卷给了考生最大的公平感。

    2.2可行性分析
    2.2.1技术可行性分析
    系统开发将要用到JSP/Servlet、JavaBean、SQLServer数据库技术。另外,硬件只需要一台pc机,装上软件Eclipse,DreamWeaver等开发工具 ,利用SQLserver作为后台的数据库,利用Tomcat作为Web服务器,所以在这方面来说是可行的。已经掌握了开发考试系统方法和开发工具,并且在调查过程中,已经了解和熟悉了在线考试系统的业务流程。综上所述本系统开发从技术上是可行的
    2.2.2经济可行性
    从经济效益来分析,软件的开发成本不大,而其它的投入也只是电脑。电脑的普及也带来了低成本投入。由于系统运行的基础环境均已具备,无需重新开发建设,所以系统开发、运行所需的费用是比较低的。而系统的效益很高可以提高管理效率实现计算机化、系统化、规范化操作,效率大于投入,可行性很高。
    2.2.3方案可行性
    根据系统的分析,本系统充分从适用性出发,全面为不同的使用用户考虑。使系统的许多功能与规则都可根据用户的习惯进行定制,包括软件界面、操作方式、录入方式等。本系统的设计充分从使用用户和教务教学任务考虑。 

    3 系统设计

    3.1 需求分析
    本考试系统用户主要分为三类:学生,教师,管理员。
    1.学生需求
    学生登陆系统主要进行两类操作:在线考试,成绩查询与个人信息管理.
    (1)在线考试
    系统能自动给考生选题,考题必须是随机分配的,以保证考试的公平性。学生在考试过程中页面将提供考试时间倒计时功能,使考生随时了解考试剩余时间。在考试时间到时,系统将自动地将学生考试试卷提交,将提醒考生离开考场。当考试试卷提交时,系统自动为选择题、判断题等客观题评分,主观题由教师评分。
    (2)成绩查询与个人信息维护
    学生可以登陆系统查询各科成绩,其中成绩信息包括每种题型的得分,如单选题,简答题等。别外学生还可以查询自己的考卷,了解自己的考试情况。
    除此之外,学生登陆系统可以查看和修改个人的基本信息,如修改密码等。

    2.教师需求
    教师登陆系统主要有三类操作:查看和修改学生试卷,查看各分数段统计,个人信息的维护
    (1)查看/修改学生试卷
    系统会将学生试卷从数据库中读出供给老师查看和修改,系统已经对选择题和判断题评了分,所以这些信息对于教师是只读的。而对于主观题,系统将参考答案读出供给老师参考,再将考生答案读出供给教师评分。
    (2)查看分数统计
    教师修改好试卷之后,系统将成绩汇总,生成各分数段统计信息,并提供给老师查看,以便教师能了解学生的学习情况。
    (3)个人信息维护
    教师登陆系统之后也可以对个人信息进行查看和修改。

    3.管理员
    系统管理员登陆系统后主要进行四类操作:考题维护,考试信息维护,用户维护和个人信息维护
    (1)考题的维护
    管理员可以往题中添加考题,修改错误试题和删除无用试题。
    (2)考试信息的维护
    考试信息的维护主要是对于考试设置信息进行维护,这些信息主要是考试总时间,试题数量,各试题分值的分布等。
    (3)用户维护
    系统管理员可以对用户信息(包括学生信息,教师信息等)进行增,删,改查操作。
    (4)个人信息维护
    管理员也可以对自己的基本信息的维护

    3.2总体设计
    3.2.1系统数据流图
    据分析系统数据流图如图3.1所示
     图3.1系统数据流图

    3.2.2 系统的功能模块图
    根据3.1所述需求,设计出系统功能模块如图3.2所示
     图3.2系统的功能模块图

    3.2.3 系统功能模块
    1、 在线考试
    在线考试的流程如下:
    首先系统按照一定的算法为登陆的考生随机选取一定的试题生成考试试卷,考生在系统生成好试卷后进行答题操作。答题必须在规定的时间内进行,此时间是由管理员事先设置好的,如在规定的时间内没有完成答题,系统将强制提交学生考试试卷进。考生在试卷提交后系统自动地为客观题进行评分,本系统的客观题主要是单选题,多选题和判断题。其数据流图如3.3所示。
     图3.3第2层在线考试数据流图
    2、成绩查询
       考生根据用户编号查询考试成绩信息。成绩信息包括单选题得分,多选题得分等详细信息。页面提供对相应科目试卷的链接,使得学生还可以查询自己的考卷,了解自己的考试情况。
    3、 查看/修改考生试卷
       系统首先将考生的试卷读出,再提提醒老师对主观题进评分,等老师对主观题进行评分后系统生成考生的成绩信息,其数据流图如图3.4所示。
        
    图3.4第2层修改学生试卷数据流图
    4、分数段统计
        当教师对考卷的主观题评定后,系统能自动生成分数段统计信息供给老师查看。此功能有助于老师了解学生的学生情况,以便更好的教学。
    5、试题维护
    试题维护是后台管理员的重要功能,它包括对试题的添加,修改,删除操作。为了使界面更友好,管理员在试题维护时系统会先将考试试题读出,再提供给管理中员操作。其数据流图如图3.5所示
     
    图3.5 第2层考题维护数据流图
    6、考试设置信息维护
    考试设置信息维护是管理员对考试设置信息维护,它包括对考试设置信息的添加,修改,删除。这些考试信息包括考试时间,各题的数量和分值等。其数据流图如图3.6所示。
     
    图3.6 第2层考试设置信息维护数据流图
    7、用户管理
       用户管理是管理员对系统用户信息的管理。这些用户包括学生和教师。用户管理操作包括添加用户,更新用户和删除用户。管理用户时,系统会先将用户信息读出供给管理员参考,再提供给管理员操作。其数据流图如图3.7所示。
     
    图3.7 第2层用户管理数据流图
    8、个人信息维护
    学生,教师,管理员都可以对个人信息进行维护。维护操作包括对个人基本信息进行修改,修改密码等。系统能提供极为友好的界面方便用户操作。

    3.3 数据库设计
    3.3.1数据字典
    通过对系统功能的分析可知,本系统主要包括如下的数据库信息:
    (1)用户表,该表保存了系统用户的基本信息,属性有用户编号、用户名称、用户类型、用户性别。其中用户编号为主码,它是用户信息的唯一标识。表结构如表3.1所示。
    (2)考生标记表,该表用于保存考生是否已经考试的标识信息,属性有用户编号、课程名称、标识信息。其中用户编号和课课程名称共同作为主码。表结构如表3.2所示。
    (3)考题表,该表用于保存考题的基本信息,属性有考题编号,课程名称,考题类型,题目级参考答案等。其中考题编号为主码。表结构如表3.3所示。
    (4)试卷设置表,该表用于记录相应课程的考试设置的相关信息,属性有课程名称,单选题、多选题、判断题、简答题、编程题数量和分值,考试时间等。其中课程名称为主码。表结构如表3.4所示。
    (5)试卷表,该表用于保存考生的试卷信息,属性有考生编号,课程名称,考题类型,考生答案和得分等。其中考生编号和课程名称共同作为主码。表结构如表3.5所示。
    (6)成绩表,该表用于保存考生的考试成绩信息,属性有考生编号,课程名称,各考题得分,总得分。其中考生编号和课程名称共同作为主码。表结构如表3.6所示。
    系统表结构如下:
    表3.1用户表(UserInfo)
    字段    类型    允许为空    说明    备注
    Uid    Varchar(10)    否    用户编号    pk
    name    Varchar(50)    否    用户姓名    
    utype    int    否    用户类型    1为学生,2为教师,3为管理员
    password    Varchar(10)    否    密码    
    sex    Varchar(2)    是    性别    

    表3.2用户标记表(userflag)
    字段    类型    允许为空    说明    备注
    Uid    Varchar(10)    否    用户编号    pk
    Course    Varchar(20)    否    课程名称    pk
    flag    int    否    用户标记    0试卷未提交 1试卷已提交

    表3.3考题表(Question)
    字段    类型    允许为空    说明    备注
    Qid    int    否    考题编号    pk 自增长
    qtype    int    否    考题类型    1单选题 2多选题 3判断题 4简答题 5编程题
    course    Varchar(20)    否    课程名称    
    ques    Text    否    题目    
    keyA    Varchar(50)    是    选项A    
    keyB    Varchar(50)    是    选项B    
    keyC    Varchar(50)    是    选项C    
    keyD    Varchar(50)    是    选项D    
    answer    text    否    参考答案    

    表5.4考试设置表(TestSet)
    字段    类型    允许为空    说明    备注
    course    Varchar(20)    否    科目    pk
    sinc    int    否    单选题数    
    persin    int    否    每个单选题的分值    
    mulc    Int    否    多选题数    
    permul    int    否    每个多选题的分值    
    judge    Int    否    判断题数    
    perju    Int    否    每个判断题的分值    
    jd    Int    否    简答题数    
    perjd    Int    否    每个简答题的分值    
    program    Int    否    编程题数    
    perpro    Int    否    每个编程题的分值    
    totaltime    Int    否    考试时间    

    表5.5试卷表(test)
    字段    类型    允许为空    说明    备注
    Uid    Varchar(10)    否    用户编号    pk
    Qid    int    否    考题编号    pk   题库中的题号
    Course    Varchar(20)    否    课程名称    
    Qtype    int    否    考题类型    1单选题 2多选题 3判断题 4简答题 5编程题
    answer    Text    是    考生答案    
    Tnumber    int    否    题目编号    试卷中的第几题
    score    float    是    得分    

    表5.6成绩表(test)
    字段    类型    允许为空    说明    备注
    Uid    Varchar(10)    否    用户编号    pk
    Course    Varchar(20)    否    课程名称    pk
    score    float    否    总得分    
    single    float    否    单选题得分    
    multiply    float    否    多选题得分    
    judge    float    否    判断题得分    
    jd    float    否    简答题得分    
    program    float    否    编程题得分    

    3.3.2 实体关系图
        据分析系统实体关系图如图3.8所示:
     图3.8 系统E-R图

    系统各实体关系如下:
    用户:用户标记 1:N
    考试设置:用户标记 1:N
    考题:考试设置 N:1
    考题:试卷 1:N
    用户:试卷 1:N
    试卷:成绩 N:1
    用户:成绩 1:N

    3.3.3数据库的连接
    在本系统中我们使用JDBC-ODBC桥连接,要进行数据库连接首先要配置数据源。按3.3.1和3.3.2的设计,设计好数据库ExamOnlie,再建一个名为ExamOnline的数据源。系统连接数据库的流程图如图3.9所示:
     
    图3.9系统连接数据库流程图
    建立数据库连接和关闭数据库连接操作方法代码及说明如下,这些方法位于DBAccess类中,当作工具类来用
    static{//静态代码块,在类被实例化时被调用,且只被调用一次
               try{
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注册驱动
                }catch(ClassNotFoundException e)
                  {
                   throw new ExceptionInInitializerError(e);
                  }
    }
    //得到连接
        public Connection getConnection()
        {
                
            try{ 
                connectionconn = DriverManager.getConnection("jdbc:odbc:ExamOnline");  //获得数据库连接
               }catch(Exception e)
          {
           e.printStackTrace();
           out.print(e.toString());
          }
             return conn;
        }
    //关闭数据库连接
    public void CloseDB(Connection conn,Statement sm,ResultSet rs)
        {
            try {
                 if(rs!=null)
                 {
                    rs.close();
                 }
            }catch (Exception e) 
            {
              e.printStackTrace();
              out.print("数据库关闭失败!");
            }finally
            {
                try{
                    if(sm!=null)
                    {
                        sm.close();
                    }
                }catch(Exception e)
                {
                    e.printStackTrace();
                    out.print("数据库关闭失败!");
                }finally
                {
                    try{
                        if(conn!=null)
                        {
                            conn.close();
                        }
                        
                    }catch(Exception e)
                    {
                        e.printStackTrace();
                        out.print("数据库关闭失败!");
                    }
                }
            }
    }

    3.4 详细设计
    3.4.1公共类设计
    1.Domain类设计
    由于数据库使用的类系统模型,而java数据为对象模型,使得其模型不匹配。为了方便关系模型和对象模型间的转换,建应的Domain类,即数据库中每个表对应一个类,表中类属性对应表的各属性,再为各个属性设计一个读方法(get)和一个写方法(set)如用户类:
    public class User {
        private String id="";
        private String name="";
        private int type=1;
        private String password="";
        private String sex = "";
        public String getSex();
        public void setSex(String sex) ;
        public String getPassword();
        public void setPassword(String password);
        public String getId();
        public void setId(String id);
        public String getName();
        public void setName(String name);
        public int getType();
        public void setType(int type);
    }
    表和类的对应关系如下:
    用户表(UserInfo)——用户类(User)
    用户标记表(userflag)——用户标记类(UserFlag)
    考题表(Question)——考题类(Question)
    试卷表(test)——试卷类(Test)
    试卷设置表(test_set)——试卷设置类(Test)
    成绩表(record)——成绩类(Record)
    试卷考题类(TestQuestion)——试卷表和考题表联合查询视图

    2.公具类设计
    根据系统设计需求,设计如下工具类:
    数据库连接工具类,主要提供连接数据操作等相关方法
    public class DBAccess { 
    //得到数据库连接
    public Connection getConnection()
    //并闭数据库连接
        public void CloseDB(Connection conn,Statement sm,ResultSet rs)
       }
    用户操作相关类,主要提供对用户表操作的相关类
    public class UserUtil {
    //根据用户编号得到用户信息
        public User getUser(String Uid) 
    //验证登陆信息,根据用户名、密码和用户类型
        public boolean checkUser(String userName,String password,int type)    //修改用户信息
    public boolean motifyUser(User user) 
        //添加用户信息
        public boolean insertUser(User user) 
        //修改密码
        public boolean motifyPassword(String Uid,String password) 
        //得到指定页的用户
    public ArrayList getAllUser(int pageSize,int current)
    //得到用户数量
        public int getCount()
        //删除用户信息
        public boolean deleteUser(String Uid) 
    }
    用户标记工具类,主要提供对用户标记表的相关操作方法
    public class UserFlagUtil {
      //得到交卷信息
      public int getFlag(String Uid,String course) 
      //设置交卷信息
    public boolean setFlag(String Uid,String course)  
    }
    考题工具类,主要提供对考题表的相关操作方法
    Public class QuestionUtil{
       ///得到选择题的方法
        public ArrayList getQuestion(String course,int count,int type)    
    //得到数据库中题目数量
    public int getCount(int type,String course)
    //得到数据库中题目数量
        public int getCount()
        //通过考题编号得到考题
    public Question getQuestionById(int Qid)
    //得到指定页的试题目信息
    public ArrayList getAllQuestion(int pageSize,int current)   
    //添加试题信息
    public boolean insertQuestioin(Question ques) 
    //修改试题信息
    public boolean updateQuestion(Question ques) 
    //删除试题信息
    public boolean deleteTest(int Qid)
    //获取科目
        public ArrayList getCourse()
    }
    试卷工具类,主要提供对试卷表的相关操作方法
    public class TestUtil {
        //添加试卷信息
        public boolean insertTest(ArrayList al)
        //考生的名字和学号
        public ArrayList getStudent(String course)
        //获得试卷库中相应题型的题
        public ArrayList getTest(String Uid,String course,int type)
        //修改试卷库中相应试题的分数
        public boolean updateTest(String Uid,int Qid,float score)    
    }
    考试设置工具类,主要提供对考试设置表的相关操作方法
    public class TestSetUtil {
        //根据课程名称得到考试设置信息
        public TestSet getTestSet(String course) 
        //计算考题总分
        public int getTotalScore(TestSet ts) 
        //获得总记录
        public int getCount()
        //得到指定页的考试信息
        public ArrayList getAllTestSet(int pageSize,int current)
        //添加或修改考试设置,flag=0为添加,flag=1为修改
        public boolean insertOrUpdate(TestSet ts,int flag)    
       //删除考试设置信息
    public boolean deleteTest(String course) 
    }
    成绩工具类,主要提供对成绩表的相关操作方法
    public class RecordUtil {
        public DBAccess db = new DBAccess();
        //获取考生指定课程的得分信息
       public Record getRecord(String Uid,String course) 
       //判断学生成绩是否存在
       public boolean getUser(String Uid,String course) 
       //获取及格人数
       public int getPass(String course) 
       //获取该课程总考试人数
       public int getCount(String course) 
       //获分数段人数
       public int getCountByScore(String course,int score) 
       //得到学生的全部成绩
       public ArrayList getAll(String Uid) }
    }
    试卷考题工具类,主要提供对试卷表考题表联合查询视图的相关操作方法
    public class TestQuestionUtil {
         //获得试卷库中相应题型的题
        public ArrayList getTest(String Uid,String course,int type)
    }
    3.4.2在线考试模块设计
    在线考试流程为:首先系统将考试信息和考生个人信息提供给考生,并要求考生核对个人信息。在考试开始时系统按照一定的算法为登陆的考生随机选取一定的试题生成考试试卷,考生在系统生成好试卷后进行答题操作。答题必须在规定的时间内进行,此时间是由管理员事先设置好的,如在规定的时间内没有完成答题,系统将强制提交学生考试试卷进。考生在试卷提交后系统自动地为客观题进行评分,并将试卷保存,供给老师查看或修改。在线考试流程图如图3.10所示。
    随机抽题算法:产生一个随机整数,这个数在0和相应题型总考题数之间。从这个随机数开始抽取取试题,抽取数量为试卷设置中相应题型的个数(此数小于总题数),若取到最后一道还不满足取题数量,再从第一题开始选取,其抽题流程如图3.11如示。
     
    图3.10 在线考试流程

     
    图3.11 选题流程

    关键代码及说明
    随机选题操作方法主要代码及说明,此方法位于QuestUtil中。些方法输入参数为课程名称course,需要题数count,试题类型type;输出为一个包含抽取的试题信息的集合ArrayList:
    public ArrayList getQuestion(String course,int count,int type)
    {
    ArrayList al = new ArrayList();
    //得到课程名称为course,考题类型为type的考题总数
    int totalCount = this.getCount(type,course);
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    //随机产生一个0-总题数之间的随机整数
    int temp = (int)(Math.random()*totalCount); try{
        conn = new DBAccess.getConnection();
        for(int i = 0;i<count;i++)//取题
        {
          int tempCount = (temp+i)%totalCount;
      //sql语句
          String sql = "select top 1 * from Question where qtype="+type+" and course='"+course+"' and Qid not in(select top "+tempCount+" Qid from Question where qtype="+type+" and course='"+course+"')";
           ps = conn.prepareStatement(sql);
           rs = ps.executeQuery();
           Question ques = new Question();
           if(rs.next())
           {
               //保存试题
             ques.setId(rs.getInt(1));
             ques.setType(1);
             ques.setQues(rs.getString(4));
             ques.setKeyA(rs.getString(5));
             ques.setKeyB(rs.getString(6));
             ques.setKeyC(rs.getString(7));
             ques.setKeyD(rs.getString(8));
             ques.setAnswer(rs.getString(9));
             al.add(ques);
            }
          }
        }catch(Exception e)
    {
            e.printStackTrace();//打印出异常信息
            }finally
            {
                db.CloseDB(conn, ps, rs);//关闭数据库连接
                return al;
            }
        }
    生成试卷关键代码及说明(以生成单选题为例)
    <%
          String course = (String)session.getAttribute("course");
    //从session中得到课程名称
    String Uid = (String)session.getAttribute("Uid");
    //从session中得到用户编号
    String name = (String)session.getAttribute("name");
    //得到试卷设置工具实例
    TestSetUtil testUtil = new TestSetUtil();
    //得到试卷设置实例
    TestSet ts = testUtil.getTestSet(course.trim());
          ArrayList al=null;
      QuestionUtil questionUtil = new QuestionUtil();
          Question qs = new Question();
    %>
        <div class="singleChoice">
            <strong>一、单选题</strong> (共<%=ts.getSinChCount()%>题,每题<%=ts.getPerSinScore()%>分)
            <%
              //得到考题
              al = questionUtil.getQuestion(course,ts.getSinChCount(),1);
              for(int i=0;i<al.size();i++)
              {
                qs = (Question)al.get(i);
             %>
              <divname="stuChoice<%=i%>">
    <%=i+1%>.<%=qs.getQues().trim()%>
    </div>
              <input type="radio" name="choice<%=i%>Value" value="A"/>
    A.<%=qs.getKeyA()==null?"":qs.getKeyA().trim()%><br/>
              <input type="radio" name="choice<%=i%>Value" value="B"/>
    B.<%=qs.getKeyB()==null?"":qs.getKeyB().trim()%><br/>
              <input type="radio" name="choice<%=i%>Value" value="C"/>
    C.<%=qs.getKeyC()==null?"":qs.getKeyC().trim()%><br/>
              <input type="radio" name="choice<%=i%>Value" value="D"/>
    D.<%=qs.getKeyD()==null?"":qs.getKeyD().trim()%><br/>
              <input type="hidden"value="<%=qs.getId()%>"name="choiceId<%=i%>"/>
              <input type="hidden" value="<%=qs.getAnswer()==null?"":qs.getAnswer().trim()%>" name="choiceAnswer<%=i%>"/>
               <%}%>
          </div>
    试卷保存关键代码及说明(以单选题的保存为例)
    TestSetUtil testUtil = new TestSetUtil();
            TestSet ts = testUtil.getTestSet(course);
            TestUtil tu = new TestUtil();
            ArrayList al = new ArrayList();
            //取单选题
            for(int i=0;i<ts.getSinChCount();i++)
            {
                Test test = new Test();
                 //从隐藏表单元素中取题库中题号
                int qid = Integer.parseInt(request.getParameter("choiceId"+i));
             //取考生答案
                String stuAnswer = request.getParameter("choice"+i+"Value");
            stuAnswer = stuAnswer==null?"":stuAnswer;
                int tnumber = i;//题号
                int type = 1;//题的类型 
                 //取正确答案
            String answer = request.getParameter("choiceAnswer"+i);                //计算考生得分
    int score=
    (answer.equalsIgnoreCase(stuAnswer))?ts.getPerSinScore():0;        test.setQid(qid);
                test.setUid(uid);
                test.setCourse(course);
                test.setScore(score);
                test.setStuAnswer(stuAnswer);
                test.setType(type);
                test.setTnumber(tnumber);
                al.add(test);
        }
       boolean success = tu.insertTest(al);


    3.4.3成绩查询模块设计
    考生根据用户编号查询考试成绩信息,查询到的成绩是考生的所有课程的成绩。成绩信息包括单选题得分,多选题得分等详细信息。
    得到学生成绩的函数getAll()定义如下,它位于RecordUtil类中,输入参数为考生编号Uid,输入为封装了学生所有成绩信息的一个集全元素ArrayList:
       public ArrayList getAll(String Uid) 
       {
           ArrayList al = new ArrayList();
           Connection conn = new DBAccess().getConnection();
           PreparedStatement ps = null;
           ResultSet rs = null;
           try
           {
               String sql = "select * from record where Uid=?";
               ps = conn.prepareStatement(sql);
               ps.setString(1, Uid);
               rs = ps.executeQuery();
               while(rs.next())
               {
                   Record record = new Record();
                   record.setUid(rs.getString(1));
                   record.setCourse(rs.getString(2));
                   record.setScore(rs.getFloat(3));
                   record.setSingle(rs.getFloat(4));
                   record.setMultiply(rs.getFloat(5));
                   record.setJudge(rs.getFloat(6));
                   record.setJd(rs.getFloat(7));
                   record.setProgram(rs.getFloat(8));
                   al.add(record);
               }
               
           }catch(Exception e)
           {
               e.printStackTrace();
           }finally
           {
               new DBAccess().CloseDB(conn, ps, rs);
               return al;
           } 
       }

    3.4.4查看/修改考生试卷模块设计
    教师登陆后,可以对考生试卷进行查看和修改。系统首先将考生的试卷读出,教师可能看到系统对试卷主观题的评定。系统会提提醒老师对主观题进评分,等老师对主观题进行评分,系统会将保存对学生试卷的评定,而后生成考生的成绩信息。查看/修改考生试卷的流程图如图3.12所示
     
    图3.12查看/修改学生试卷流程
    教师提交评定的关键代码设计及说明如下:
           //获取学生学号
            String Uid = request.getParameter("Uid");    
       //获取session中的课程名称
        String course = (String)session.getAttribute("course");
            TestUtil tu = new TestUtil();
            TestSetUtil tsu = new TestSetUtil();
            Record record = new Record();
            RecordUtil ru = new RecordUtil();
            //获取试卷设置信息
            TestSet ts = tsu.getTestSet(course); 
            float singleTotal = 0;//单选题总分
            float multiplyTotal = 0;//多选题总分
            float judgeTotal = 0;//判断题总分
            float jdTotal = 0;//简答题总分
            float programTotal=0;//编程题总分
            float total=0;
            for(int i=0;i<ts.getSinChCount();i++)//获取单选题分数
            {
                float score = Float.parseFloat(request.getParameter("choice"+i));
                singleTotal+=score;
            }
            for(int i=0;i<ts.getMulChCount();i++)//获取多选题分数
            {
                float score = Float.parseFloat(request.getParameter("mulChoice"+i));
                multiplyTotal+=score;
            }
            for(int i=0;i<ts.getJudgeCount();i++)//获取判断题分数
            {
                float score = Float.parseFloat(request.getParameter("judge"+i));
                judgeTotal+=score;
            }
            for(int i=0;i<ts.getJdCount();i++)//获取简答题分数
            {
                float score = Float.parseFloat(request.getParameter("jd"+i));
                jdTotal+=score;
                int Qid = Integer.parseInt(request.getParameter("jdId"+i));
                tu.updateTest(Uid, Qid, score);//修改试卷库中相应简答题的分数
                
            }
            for(int i=0;i<ts.getProgramCount();i++)//获取编程题分数
            {
                float score = Float.parseFloat(request.getParameter("pro"+i));
                programTotal+=score;
                int Qid = Integer.parseInt(request.getParameter("proId"+i));
                tu.updateTest(Uid, Qid, score);
                
            }
            total = singleTotal+multiplyTotal+judgeTotal+jdTotal+programTotal;
            record.setUid(Uid);
            record.setCourse(course);
            record.setScore(total);
            record.setSingle(singleTotal);
            record.setMultiply(multiplyTotal);
            record.setJudge(judgeTotal);
            record.setJd(jdTotal);
            record.setProgram(programTotal);
            //System.out.print(record.getUid()+record.getCourse());
            if(ru.updateRecord(record))
            {
        response.sendRedirect(request.getContextPath()
    +"/teacher/success.html");
            }else
            {
                response.sendRedirect(request.getContextPath()
    +"/teacher/fail.html");
            }

    3.4.5分数段统计模块设计
    当教师对考卷的主观题评定后,系统能自动生成分数段统计信息供给老师查看。统计分数段包括及格率、60-69分、70-79、80-89和90分以上,在统计数量的同时并计算出占数考人数量的比例。
    其统计功能的关键代码及说明如下:
     //获取要统计的分数段
          String scoreString = request.getParameter("score").trim();
          //获取要统计的课程名称
    String course = (String)session.getAttribute("course");
          RecordUtil ru = new RecordUtil();
          //得到考生总数
          int count = ru.getCount(course);
          int pass = 0;//要统计的分数段人数
          if("pass".equals(scoreString))//如果统计的是及格率
          { 
           pass = ru.getPass(course);
          }else
          {
           int score = Integer.parseInt(scoreString); 
           pass = ru.getCountByScore(course,score);
          }
           //计算比例,由于要用count作为除数,所以必须排出count为0的情况
       String percent = 
    count==0?"0.0%":((float)pass)/((float)count)*100+"%";

    3.4.6试题维护模块设计
    试题维护是后台管理员的重要功能,它包括对试题的添加,修改,删除操作。在进行此操作时系统会先将考试试题读出,再提供给管理中员操作。试题维护流程图如图3.13所示。
       图3.13考题维护流程
    关键代码如下:
    添加考题关键代码及说明如下:
        //获取课程名称,由于课程名称可能包含有汉字,所以要对其进行编码,这里我们用gbk进行编码
    String kemu = request.getParameter("kemu").trim();
        String ch_course = "course"+kemu;
        String course = 
    new String(request.getParameter(ch_course).getBytes("iso8859-1"),"gbk");
     //获取题目类型
         int type = Integer.parseInt(request.getParameter("type").trim());
        String ques = new String(request.getParameter("ques").getBytes("iso8859-1"),"gbk");
            //选项A
            String keyA = null;
            //选项B
            String keyB = null;
            //选项C
            String keyC = null;
            //选项D
            String keyD = null;
            //参考答案
            String answer = "";
            QuestionUtil qu = new QuestionUtil();
            Question question = new Question();
            if(type==1)//单选题
            {
                keyA = new String(request.getParameter("keyA").getBytes("iso8859-1"),"gbk").trim();
                keyB = new String(request.getParameter("keyB").getBytes("iso8859-1"),"gbk").trim();
                keyC = new String(request.getParameter("keyC").getBytes("iso8859-1"),"gbk").trim();
                keyD = new String(request.getParameter("keyD").getBytes("iso8859-1"),"gbk").trim();
                answer = request.getParameter("answer_sin").trim();
            }else if(type==2)//多选题
            {
                keyA = new String(request.getParameter("keyA").getBytes("iso8859-1"),"gbk").trim();
                keyB = new String(request.getParameter("keyB").getBytes("iso8859-1"),"gbk").trim();
                keyC = new String(request.getParameter("keyC").getBytes("iso8859-1"),"gbk").trim();
                keyD = new String(request.getParameter("keyD").getBytes("iso8859-1"),"gbk").trim();
                    String[] str_answer = request.getParameterValues("answer_mul");
                for(int i = 0;i < str_answer.length;i++)
                {
                    answer = answer + str_answer[i];
                    
                }
            }else if(type==3)//判断题
            {
                answer = request.getParameter("answer_jud");
            }else//简答题,设计题
            {
                answer = new String(request.getParameter("answer_other").getBytes("iso8859-1"),"gbk").trim();
            }
            question.setCourse(course);
            question.setType(type);
            question.setQues(ques);
            question.setKeyA(keyA);
            question.setKeyB(keyB);
            question.setKeyC(keyC);
            question.setKeyD(keyD);
            question.setAnswer(answer);
            boolean success = qu.insertQuestioin(question);
            if(success)
            {
        response.sendRedirect(request.getContextPath()+"/admin/AddQuesSuccess.html");
            }else
            {
             response.sendRedirect(request.getContextPath()+"/Fail.html");
            }
    由于修改考题信息与添加考题信息的方法类似在此我们不再细说。下面是删除考题信息关键代码及说明
    Javascript代码,提醒用户是否删除.
    function IsDelete(obj)
           {
             var okey = confirm("确认删除?");
             if(okey==true)
             { 
               var keyWord = obj.value;
    window.location.href="<%=path%>/admin/DeleteQuestion.jsp?Qid="+keyWord;
             }
    }
    删除考题代码:
    String str_qid = request.getParameter("Qid").trim();
    int Qid = Integer.parseInt(str_qid);
            boolean success = new QuestionUtil().deleteTest(Qid);    

    3.4.7考试设置信息维护模块设计
    考试设置信息维护是管理员对考试设置信息维护,它包括对考试设置信息的添加,修改,删除。这些考试信息包括考试时间,各题的数量和分值等。设置时,系统先读取已存在的考试设置信息供给管理员查询,再提供给管理员操作。考试设置信护流程图如图3.14所示。
     
    图3.14考试设置信息维护流程
    添加/修改考试设置信息关键代码及说明如下:
    //获取课程名称,同样这里用gbk对接收到的信息进行编码
    String course = new String(request.getParameter("course").getBytes("iso8859-1"),"gbk");
    //获取单选题总数
            int singleCount =Integer.parseInt(request.getParameter("singleCount"));
        //获取单个单选题分值
        int perSingle = Integer.parseInt(request.getParameter("perSingle"));
        //获取多选题总数    
    int multiplyCount=Integer.parseInt(request.getParameter("multiplyCount"));
    //获取单个多选题分值
            int perMultiply = Integer.parseInt(request.getParameter("perMultiply"));
        //获取判断题总数 
        int judgeCount = Integer.parseInt(request.getParameter("judgeCount"));
    //获取单个判断题分值
        int perJudge = Integer.parseInt(request.getParameter("perJudge"));
            //获取简答题总数
    int jdCount = Integer.parseInt(request.getParameter("jdCount"));
        //获取单个简答题分值
    int perJd = Integer.parseInt(request.getParameter("perJd"));
        //获取设计题总数
        int programCount = Integer.parseInt(request.getParameter("programCount"));
        //获取单个设计题分值
        int perProgram = Integer.parseInt(request.getParameter("perProgram"));
        //获取总考试时间
    int totalTime = Integer.parseInt(request.getParameter("totalTime"));
        int flag = Integer.parseInt(request.getParameter("flag"));
        TestSetUtil tsu = new TestSetUtil();
        TestSet ts = new TestSet();
        ts.setCourse(course);
        ts.setSinChCount(singleCount);
        ts.setPerSinScore(perSingle);
        ts.setMulChCount(multiplyCount);
        ts.setPerMulScore(perMultiply);
        ts.setJudgeCount(judgeCount);
        ts.setPerJudScore(perJudge);
        ts.setJdCount(jdCount);
        ts.setPerJdScore(perJd);
        ts.setProgramCount(programCount);
        ts.setPerProScore(perProgram);
        ts.setTotaltime(totalTime);
        boolean success = tsu.insertOrUpdate(ts, flag);
        if(success)
        {
                response.sendRedirect(
    request.getContextPath()+"/admin/TestSucces      s.html");
                
            }else
            {
            response.sendRedirect(request.getContextPath()+"/Fail.html");
    }
    由于删除考试设置信息同删除考题功能类似,这时也不再详讲,如有疑问请参考前面删除考题信息功能。

    3.4.8用户管理模块设计
    用户管理是管理员对系统用户信息的管理。这些用户包括学生和教师。用户管理操作包括添加用户,更新用户和删除用户。添加用户时,删除管理用户时,系统会先将用户信息读出供给管理员参考,再提供给管理员操作。用户密码不用设置,系统默认为“123456”;修改用户时用户编号和用户密码不能被修改其它均能被修改;用户时,系统会先提醒管理员是否删除,若果确认删除才能删除用户。用户管理流程图如图3.15所示。

     
    图3.15用户管理流程
    添加/更新用户的关键代码及说明如下:
    //获取用户名,这里也用gbk对其进行编码
    String name=new String(request.getParameter("name").getBytes("iso8859-1"),"gbk").trim();
    //获取用户类型,1为学生,2为教师,3为管理员
          int type=Integer.parseInt(request.getParameter("type"));
          //获取性别,用gbk对其进行编著码
    String sex=new String(request.getParameter("sex").getBytes("iso8859-1"),"gbk").trim();
            String password = "123456";//初始密码设为123456
            //获取操作标志,0为添加用户信息,1为更新用户信息
            String flag = request.getParameter("flag").trim();
            UserUtil userUtil = new UserUtil(); 
            User user = new User();
            boolean success = false;
            user.setId(Uid);
            user.setType(type);
            user.setName(name);
            user.setPassword(password);
            user.setSex(sex);
            if("0".equals(flag))//添加用户
            {
              success= userUtil.insertUser(user);    
                
            }else if("1".equals(flag))//更新用户
            {
                success=userUtil.motifyUser(user);
            }
            if(success)
    {      response.sendRedirect(request.getContextPath()+"/admin/success.html");    
            }
            else
            {
            response.sendRedirect(request.getContextPath()+"/Fail.html");
    }
    由于删除用户信息同删除考题功能类似,这时也不再详讲,如有疑问请参考前面删除考题信息功能。

    3.4.9个人信息维护模块设计
    系统用户包括学生,教师,管理员都可以对个人信息进行维护。维护操作包括对个人基本信息进行修改,修改密码等。系统能提供极为友好的界面方便用户操作。对其本信息进行时,用户不能修改自己的编号。对密码进行修改时按昭一般系统的要求先确认旧密码,再输入新密码和确认新密码。
    个人基本信息信息维护的关键代码如下所示:
    UserUtil userUtil = new UserUtil();
            //得到session
    HttpSession session = request.getSession(true);
            //获取session中的用户编号
    String Uid = (String)session.getAttribute("Uid");
            //得到用户名,用gbk对其进行编码
    String name = new String(request.getParameter("name").trim().getBytes("iso8859-1"),"gbk");
    //得到用户类型
            String typeString=new String(request.getParameter("type").getBytes("iso8859-1"),"gbk");
            int type=1;
            if("教师".equals(typeString))
            {
                type=2;
            }else if("管理员".equals(typeString))
            {
                type=3;
            }
            String sex = new String(request.getParameter("sex").getBytes("iso8859-1"),"gbk").trim();
            User user = new User();
            user.setId(Uid);
            user.setName(name.trim());
            user.setType(type);
            user.setSex(sex);
            if(userUtil.motifyUser(user))
            {         response.sendRedirect(request.getContextPath()+"/success.html"   
            }else
            {
                response.sendRedirect(request.getContextPath()+"/Fail.html");
      } 

    4 系统测试

    4.1 系统运行环境 
         数据库:SQLServer2005
         Web服务器:Tomcat6.0及以上版本
         操作系统:能运行java虚拟机的操作系统均可

    4.2 测试目的
    系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。
    测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。系统测试应包括软件测试、硬件测试和网络测试。硬件测试、网络测试可以根据具体的性能指标来进行,此处所说的测试更多的是指软件测试。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。

    4.3 各功能模块测试
    将工程导入Tomcat的项目文件夹生即webapps文件夹中, 再启动TomCat服务器。在浏览器中输入工程的URL,如“www.localhost:8080/ExamOnline”可进入系统操作界面,用户可以选择操作。如图4.1所示。
     
    图4.1系统主界面


    4.3.1在线考试模块测试
    在主界面点击学生考试,可以进入学生登陆界面。此界面在提交数据时有简单验证功能,如学号不能为空等,科目必须选择等。如图4.2所示。
     
    图4.2学生登陆界面
       选择科目后进入确认信息页面,如图4.3所示。系统将考生的个人信息读出到该页面,供给考生确认。并将考试科目考试设置信息(题目分布、分值分布、考试时间等)读出到该页面,提供给考生。
     
    图4.3确认信息页面
    点击开始考试,将进入到考试页面,考生开台答题,如图4.4所示。在答题时系统提供剩余时间倒计时功能,以方便了角答题时间。当考试剩余时间为0时系统将自动提交试卷,并通知考生离开考场,如图4.5所示。
     
    图4.4学生考试页面
     
    图4.5考试结束

    4.3.2查看/修改试卷测试
    教师在主界面上点击教师管理,并输入正确的登陆信息后可以进入教师管理界面,在左边的菜单选项中点击“查看/修改试卷”,撑开子菜单。在撑开的子菜单中点击考生姓名可以查看到考生的考试试卷,在如图4.6所示。
    在此界面中系统会提醒教师对主观题进行评定,评分时系统也不一个简单的验证,如得分不能超过此题总分等,如图4.7所示。
     
    图4.6查看/修改试卷界面

     
    图4.7提交修改试卷

    4.3.3分数段统计测试 
        当教师提交评定后,系统会生考生成绩信息和该科各分数段统计信息。在教师管理主界面上点击“分数段统计”,操作子菜单。在子菜单中点击要统计的分数段信息。可以统计的分数段有及格率,60-69,70-79,80-89,90-100。图4.8是及格率的统计信息。
     
    图4.8分数段统计界面

    4.3.4成绩查询测试
        学生在主界面点击“学生管理”,并输入正确的登陆信息可以进入学生管理界面。在界面中点击左边菜单栏中的“成绩查询”选项,可以查询到学生的全部成绩信息,如图4.9所示。点击“查看详情”,学生可以看到该科的考卷及各题得分情况,如图4.10所示。
     
    图4.9学生成绩查询

     
    图4.10查看成绩详情

    4.3.5个人信息维护测试
       个人信息维护分为个人基本信息维护和修改密码。学生,教师,管理员在登陆,点击左边菜单栏上的“个人信息维护”选项,撑开子菜单。在子采单中选择主界面左边的选择“修改个人信息”进入个人基本信息维护界面如图4.11,用户可以对个人的基本信息进行维护。点击“修改密码”进入修改密码界面,修改密码时系统会对用户输入信息进行一个简单的验证如两次输入新密码必须相同等,如图4.12所示。
     
    图4.11 个人基本信息维护

     
    图4.12修改密码

    4.3.6 考题管理
    在浏览器中输入“http://localhost:8080/ExamOnline/admin/login.jsp”进入管理员登陆页面。当提交登陆信息时,系统会进行简单的数据验证,如验证码输入的正确性,如图4.13所示。
    输入正确的登陆信息后,进入后台管理主界面,在左边的菜单栏上点击“试题管理”选项进入试题管理界面,如图4.14所示。
     
    图4.13管理员登陆界面
     
    图4.14 试题管理界面
      在试题管理界面上,系统将试题信息读取到界面上,点击添加图标,转到添加试题界面,管理员可以输入考题信息,输入一道“javascript”的选择题,如图4.15。添加后在界面上找到该试题如图4.16所示。
     
    图4.15添加考题

     
    图4.16添加考题成功
    现点击考题右边的编辑图标可以对考题进行修改,现将刚添加的考题的科目改为“java”,如图4.17。修改后再在主界面找到试题,如图4.18所示。
     
    图4.17修改考题
     
    图4.18修改考题成功
    点击考题右边的删除图标,可以删除该考题,删除时系统会提醒用户是否确认删除,如果用户确认删除可以删除考题,现在刚添加的考题删除,如图4.19。
     
    图4.19删除考题

    4.3.7考试设置管理测试
    在管理员界面上点击左边菜单栏上的“考试设置管理”,进入考试设置管理界面。系统会选将考试设置信息读取到该界面上。用户点击操作按钮可以对基进行操作,如图4.20所示。
     
    图4.20考试设置管理 界面
    点击添加图标,可以进入添加界面,用户可以添加考试设置信息。现添加一条课程名为“javascript”的考试设置信息。添加后如图4.21所示。
     
    图4.21添加考试设置信息
    点击考试设置信息右边的删除图标可以删除考试设置信息。
    点击编辑图标将转到编辑界面,用户可以对该考试设置信息进行编辑。现将刚添加的考试设置信息的考试时间修改为80分钟。修改后如图4.22所示。
     
    图4.22修改考试设置
    4.3.8用户管理测试
    点击管理员菜单中“用户管理”按钮,进入用户管理界面,系统选将用户信息读取到该页面上,用户点击操作按钮可以对其进行操作。如图4.23所示。
     
    图4.23用户管理界面
    点击添加图标,可以进入到添加页面,管理员可以添加用户信息。现添加一个用户名为“student”的用户信息,添加后如图4.24所示。
     
    图4.24添加用户信息
    点击用户信息右边的删除图标,可以删除该用户信息。点击用户信息右边的编辑图标,可以进入编辑页面对该信息进行编辑,现将刚添加的用户的名字改为“测试者”,修改后如图4.25所示。
     
    图4.25修改用户信息
     

    5  结论

    本系统采用B/S模式结构设计,运用JSP技术和servlet技术结合,通过JDBC -ODBC桥连接操作数据库,实现了在线考试,成绩查询,考题管理等功能。学生考试时可以随机地为登陆的考生抽取试题组成考卷。当学生提交考卷后,系统会自动批改客观题,并将试卷提供给教师查看和提醒教师对试卷主观题进行修改。待教师修改完试卷后,系统会自动生成考生成绩和分数段统计信息。学生可以查询自己的成绩信息和试卷,以便更好地了解自己的学习情况。教师也可以通过分数段统计信息更好地了解学生的学生情况。后台管理员可以对考题,考试设置信息,用户信息进行维护。学生,教师,管理员都可以对个人信息进行维护。
        通过本次课程设计,系统的学习了HTML,CSS,javascript等前台知识和jsp,servlet,javabean等web程序设计知识。对数据库连接,数据库操作有了更进一步的理解。对面向对象程序设计思想有了进一步的体会。通过从系统的需求分析到总体设计到详细设计再到系统测试,进一步了解了规范的软件设计流程。
        在系统还存在很多不足之处。界面布局凌乱使界面不够美观且HTML代码和CSS代码混杂,不便于维护;系统设计没有严格按照MVC模式来设计,给系统维护带来了储多的不便等等。在以后的学习和开发中,我会注意这些问题,使其开发更规范,开发的系统更优异。
        
     

    致谢

       半年的光阴一晃就要过去了,毕业设计也接近尾声了,由于时间紧迫任务繁重,同时自己经验知识的匮乏,在本次设计中难免会遇到一些困难,但多亏了老师和同学的帮助才有幸完成了本次毕业设计。在此我要多谢我的指导老师伍建全老师。伍老师工作繁重,但在我做毕业设计的每个阶段,从查阅资料到设计草案的确定和修改,中期检查,后期详细设计,装配草图等整个过程中都给予了我悉心的指导。同时我还要感谢我的同学,感谢他们在我需要帮助的时候都默默的帮着我,无论是技术方面的还是生活方面的,他们都给了我很大的帮助,其次我要感谢学院感谢学校给了我们这样一个优良的设计环境,传授给我们计算机方面的专业知识,从而使我们有了一技之长。

         

    参考文献

    [1] 郝玉龙.JavaEE 编程技术.北京:清华大学出版社,2008.8
    [2] 王珊.数据库系统概论.北京:高等教育出版社,2006.5
    [3] 陈琦,刘儒德.信息技术教育应用.北京:人民邮电出版出,1997.1
    [4] 向学哲.JSP程序设计教程.北京:人民邮电出版社,2007.4
    [5] 严蔚敏、吴伟民.数据结构.北京:清华大学出版社,2003
    [6] 方盈.SQL server 2000从入门到精通.北京:中国铁道出版社,1999
    [7] Joseph J.Bambara.J2EE技术内幕.北京:机械工业出版社,2007年.
    [8] Bruce Eckel.Thinking In Java.英文第4版.北京:机械工业出版社,2007
    [9] 陈轶.姚晓昆编著.Java程序设计实验指导.北京:清华大学出版社,2006
    [10] 杨昭编著.二级Java语言程序设计教程.北京:中国水利水电出版社,2006
    [11] 赵文靖编著.Java程序设计基础与上机指导.北京:清华大学出版社,2006
    [12] 赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,2006
    [13] 王路群.Java高级程序设计.北京:中国水利水电出版社,2006
    [14] 雍俊海编著.Java程序设计习题集.北京:清华大学出版社,2006
    [15] 朱福喜编著.Java语言习题与解析.北京:清华大学出版社,2006
    [16] 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社,2006

    展开全文
  • 随着计算机网络技术和数据库技术的飞速发展,高校的信息化建设进程日益深入,其中数字化校园建设成为其核心内容。...为推动数字化校园建设进程,创建数字化教学环境,开发出适用于多学科的计算机在线考试软件系...

    随着计算机网络技术和数据库技术的飞速发展,高校的信息化建设进程日益深入,其中数字化校园建设成为其核心内容。纵观全国各高校的数字化校园建设,大多以建设数字化网络环境、数字化教学资源、数字化教学与学习环境、数字化管理手段和工作环境;实现数字化科研和管理;创建数字化生活空间;实现教育的信息化和现代化等为最终目标[1]。为推动数字化校园建设进程,创建数字化教学环境,开发出适用于多学科的计算机在线考试软件系统。通过此软件可以实现多学科网上在线考试,既能把教师从繁重的批阅试卷、复核试卷、试卷分析等工作中解放出来,又免去了印制纸质试卷、按考场分发试卷、纸质试卷保存等很多繁重工作,而且提高了试卷的保密性。

    1 C/S模式的多层结构

    C/S模式是一种普遍应用的网络计算模式。传统的C/S模式是两层结构,在这种模式下,网络中的计算机分为两个有机部分:客户机和服务器。服务器只负责各种数据的处理和维护,为各个客户机应用程序管理数据;客户机包含文档处理软件、决策支持工具、数据查询等应用逻辑程序,通过网络使用SQL语言发送、请求和分析从服务器接收数据。这是一种“胖客户机(Fat Client)”、“瘦服务器(Thin Server)”的网络结构模式。随着C/S结构应用范围的不断扩大和计算机网络技术的发展,这种结构的缺陷日益明显,如系统的可靠性有所降低、缺乏灵活性、资源浪费严重、维护费用较高等[2]。

    为解决这一问题,网络计算模式逐渐从两层扩展到N层,形成多层结构。在多层结构中把业务逻辑独立出来,使得应用系统的开发模式变为下面形式:

    (1)客户端。只注重人机界面的设计,不必关心业务逻辑和数据库的访问,使开发大大简化,并且使得原两层结构的胖客户机变成瘦客户机。

    (2)中间业务逻辑层。提供客户端程序调用的业务逻辑规则,以完成其业务操作。当业务逻辑改变时,客户端不必改变。

    (3)数据库服务层。提供对数据库进行各种操作的方法,由中间业务逻辑层调用完成业务逻辑。

    可以看出,在多层结构中,层次划分不是物理上的划分,而是结构逻辑上的划分,即按应用目标划分。如果客户端要求响应速度很快,业务组件的体积较小,业务组件可以放在客户端;如果业务组件包含大量对数据库的操作,可以配置在数据库服务器上,以减少网络负载,提高运算速度;如果业务组件可供大多数客户机程序访问,则可以使用业务组件构成一个应用服务器,供大家访问。由于多层结构的运行机制,使得多层结构具备以下优点[3]。

    (1)可伸缩性好。可按应用要求部署逻辑层次,适应于本地网和广域网。

    (2)网络效率高。通过合理布局,因网络传输的数据量大大减少,网络效率得到提高。

    (3)可管理性强。客户端基本实现“零维护”,主要管理工作集中在应用逻辑层,业务逻辑的修改对客户端没有影响。

    (4)可重用性好。按可提供的服务构筑应用,每种服务可以被不同的应用再次使用。由于系统采用面向对象的组件构成,进一步增加了可重用性。

    2 系统需求分析

    数字化教学环境是学校数据化校园建设的重要组成部分。而数字化教学环境以建立网上教务管理系统、网上考试系统、网上答疑系统和网上讨论系统等为主要内容。目前,已实现网上教务管理、网上答疑和网上讨论目标。为实现网上考试目标,探索开发适用于多学科的计算机在线考试软件系统成为关键。要开发出适用于多学科的平台型计算机在线考试系统,首先对试题内容、试题形式、评分标准、试题数量、试卷分析等问题要进行周密的考虑,据此设计出一种能够适用于多学科的平台型试卷模板,在网络环境正常运行的前提下,实现网上在线考试。通过该考试系统,完成自动抽取试卷、自动批阅试卷、自动回收成绩、自动分析试卷、打印成绩单等功能。针对软件系统的功能和性能等实际需求,设计服务器开发环境采用安全性较高稳定性较好的数据服务器SQL Server 2000,采用Windows 2003 Server 作为服务器操作系统,C/S结构前端采用Borland Delphi 7作为开发工具[4]。

    3 系统功能设计

    在需求分析的基础上,确定计算机在线考试软件系统包括服务器管理、学生管理、考试管理、题库管理、自动阅卷、试卷分析和系统维护等功能,其软件结构图如图1所示。

    1872bd89e7cae09855cf01da915515e5.png4 系统实现

    由于软件系统中的服务器要同时与大量的考试终端发生信息交互,为了避免由于服务器处理负荷过重而引起的系统崩溃,同时要保证整个系统在网络环境中的安全性,设计采用C/S模式多层网络计算模式。通过将任务合理分配到客户端和服务器端,再充分利用两端的硬件环境优势,提高系统的整体数据处理效率并实现考试终端和管理中心的双向通信。软件系统客户端运行时的主界面如图2所示。

    c49bc12b09a23e4b617ed523cda96327.png

    4.1 中间业务逻辑层设计

    中间层服务器是系统设计的关键,在中间层上设计了大量的远程方法供客户端调用,这种方式称为“瘦客户机,胖服务器”模式。使用该模式,当客户功能有所变动时,只需更改中间层上的方法,而不用重新分发客户端。在Delphi7中使用DataSetProvider控件提供RPC服务,对于客户端的每一个操作,都可以通过在中间层服务器中设计相应的方法实现[5]。在中间层设计的两个主要方法如下:

    (1)function ExeClientSQL(const MySql: WideString): WordBool; safecall;

    //执行SQL的更新、插入、删除等操作,返回是否成功;

    (2)function GetClientData(const MySql: WideString): OleVariant; safecall;

    //执行SQL的查询操作,返回查询结果。

    4.2 软件系统的主要技术特点

    (1)考试时由考生随机抽题组卷,同时确保相邻考生抽取不同的试题。实现该功能的存储过程如下:

    CREATE PROCEDURE cp_Paper_Sel

    @tblDL char(20),

    @MyPrior int,

    @MyNext int,

    @MyKM char(30)

    AS

    exec(′select top 1 套题编号,套题名称 from tblcrecord where 套题编号 not in

    (select 套题编号 from ′+@tblDL+′ where IP序号=′+@MyPrior+′or IP序号=′+@MyNext+′) and 科目名称=‘’‘+@MyKM+’‘’and 是否抽取=′′是′′ order by newid()′)

    GO

    (2)IP安全技术:考试系统中将考试IP限定在某一区域内,如192.168.36.1到192.168.36.200,可以防止在考场外进行替考,同时在考试时通过“禁止未登录考生参加考试”功能,在考生登录之后进一步避免了场外替考现象的发生。此外,将考生考号和考生机器IP地址进行绑定,考生在考试过程中,只能在一台计算机上答题,以防止考生之间相互换题等作弊行为。当考生登录到考试系统以后,将考生机器IP地址写入考生信息表以及登录IP表,防止一个考号在两台机器上登录。

    //检查是否同一IP登录

    with cds2 do

    begin

    Close ;

    SQL。Clear ;

    SQL.Add(′exec sp_Query_All:fldName,:tblName′);;

    Params.ParamByName(′fldname′).Value :=′*′;

    Params.ParamByName(′tblName′).Value:=

    dm。tblDL+′ where登录IP='''+dm。MyIP+''';

    try

    Open;

    if recordcount<>0 then

    begin

    sMessageDlg(′警告′,′无效的考试请求!′,

    mtWarning ,[mbOK],0);

    exit;

    end ;

    except

    raise ;

    end;

    (3)考试时间限制:考生第一次取题开始计时,到规定的时间结束,考生只有在该时间内可以取题,其他时间都不能取题,计时由服务器完成,同时,若考试过程中由于意外情况导致考试终止时,监考老师可以通过输入二次答题密码的方式让考生继续答题,从而实现考生考试时间的公平性,又加强了试题的安全性。

    (4)大量应用存储过程,保障系统的快速反应和高效运行。例如,将考生抽取的试题加入到考试数据库中的存储过程:

    CREATE PROCEDURE cp_Paper_Add

    @tblKS char(20),

    @MyNo char(10),

    @Mynum char(20),

    @Mytbl char(10)

    AS

    exec(′insert into′+@tblKS+′ (学生学号,套题编号,试题序号,试题内容,试题答案,试题分数,是否答题,套题名称,考试科目,试题类型,学生分数,类别序号) select '''+@MyNo+''','''+@Mynum+''',试题序号,试题内容,试题答案,试题分数,′′否′′,套题名称,科目名称,试题类型,0,类别序号 from ′+@Mytbl+′ where 套题编号='''+@mynum+''')

    GO

    (5)数据加密功能。软件系统中使用了关键数据加密和数据库动态加密两种技术。对于考试系统中的重要数据使用关键数据加密技术,如试题库中的试题采用加密的方式存储,用户登录时的密码加密后保存到数据库中,以免被他人获取并泄漏。而用户每次登录数据库时,系统都会自动修改数据库密码并进行加密存储,这样使得数据库密码具有不确定性,大大增加了数据库的安全性,实现数据库动态加密[6]。

    (6)试题录入功能独立于主系统。将试题录入功能与主系统分开,既保障了系统的安全性,又方便教师进行试题录入。通过设置登录账号和录入科目,限制教师只能在指定时间内根据指定的验证码录入指定科目试题,增加了题库的安全性。

    采用C/S模式多层结构开发数据库应用系统,比传统的C/S模式结构有着无法比拟的优势。该软件系统主要采用了多层结构使得业务逻辑从客户端分离出来,在最为关键的中间层上,设计了大量的远程方法供客户端调用,从而形成“瘦客户机,胖服务器”模式,不但很好地实现了软件系统的各项功能,而且简化了程序设计,大大减少了网络流量,从而提高软件系统的运行效率、可维护性和整体性能。

    展开全文
  • 实验环境:MySQL 8.0、IDEA 主题框架SpringBoot包含ssm框架内容的前后端分离项目 也可以先看下原来发的系统现在审核太严就不放太多图片了 java的开发工具 链接:https://pan.baidu.com/s/1RPQV0RMwd6TUmlzDIghNag ...
  • 1.引言1.1 编写目的该需求分析的软件对象是学生管理系统。开发学生管理系统能够为用户提供充足的信息和快捷的查询手段。作为计算机应用的一部分,使用计算机对学籍信息进行管理,具有着手工管理所无法比拟的优点。如...
  • 人生无处不赶考。在线考试小程序,是非常实用的小工具,人人都可出题!
  • 摘 要 II Abstract III 第一章 绪 论 1 1.1 研究背景及意义 1 ...第三章 需求分析 7 3.1 可行性分析 7 3.2 功能分析 8 3.3系统需求用例描述 10 3.4 本章小结 11 第四章 详细设计 12 4.1系统整体架构 12 4.2 数据库
  • 学生信息管理系统数据库需求分析学生信息管理系统一.项目简介二.项目开发环境三.数据库设计数据库名:studentInfo数据字典表名:Dectionary说明Dec_idint自增长 主键Dec_PIdVarchar(100)父标示Dec_nameVarchar(100)...
  • 软件需求分析期末考试

    千次阅读 多人点赞 2020-12-27 22:50:54
    涉众分析与硬数据采样 1. 如何进行涉众分析?不同类型信息系统,不同的方法 组织级系统(Organization-Wide System) 分析组织内各类人群的互动关系 战略信息系统(Strategic Information System) 分析组织内各类...
  • 需求分析使用java, Spring, SpringMVC, Hibernate实现一个在线考试系统, 能够实现用户管理, 资源管理, 在线考试, 试卷管理等功能本站提供其他类型的 在线考试系统网站源代码 点击查看运行环境java, jdk1.8,tomcat8.5...
  • 在线考试需求分析

    2021-07-04 13:24:46
    描述:下面就对在线考试系统的设计进行需求分析。 首先,系统开发的时候考虑到对象的特殊性质,所以对象在进入该系统的时候,要对其进行身份的验证。如果对象第一次使用该系统的时候,要进行注册,再次进入时候就...
  • 学术构想与思路(主要研究内容及拟解决的关键问题或技术)在线考试系统是基于网络技术进行开发的,诣在提高考试的可靠性、客观性、实用性和有效性。通过JAVA、.NET等各类开发环境与开发语言以及MySQL数据库技术开发的...
  • 基于java的在线考试系统毕业论文 芜湖信息技术职业学院 毕业设计(论文) 题目: 基于Java 技术的在线考试 系统的开发 专 业: 软件技术(嵌入式) 班 级: 2009级 1班 学 号: 20094039 学生姓名: 江子奇 指导老师: 刘力扬 ...
  • 基于PHP的在线考试系统的设计与实现学生姓名:XXX专业班级:计算机科学与技术X班学 号: XXXXXXXX院 (系):国际教育学院指导教师(职称):XX(高工)完成时间:2016年5月20日目录摘要IABSTRACTII1 绪论11.1研究背景及...
  • 在线考试系统的设计与实现(PHP,MySQL)(含录像)(毕业论文10000字,程序代码,MySQL数据库)根据在线考试系统特点,分为前台和后台两个部分。前台主要功能主要用于学生的注册和登录系统、在线考试和练习、查询成绩等。...
  • SSM框架在线考试系统实战开发教程开发软件: MyEclipse、Eclipse、Idea + JDK8.0以上 + Tomcat8.0 + MySQL5.7以上【Java开发环境&工具】链接: https://pan.baidu.com/s/1RPQV0RMwd6TUmlzDIghNag提取码: 9qrv环境...
  • Node.js在线考试系统1.布局总览准备界面.jpg答题界面.jpg2.页面布局模块分析1.navBar页面中的导航栏2.ready考试前的准备界面,由三个部分组成考试开始时间考试倒计时开始测试按钮2.1 deltaTime考试倒计时2.2 start...
  • 本文是对《软件需求分析(第二版)》进行总结而成的期末考试试题,分别是单选题、判断题、简答题和资料题。《软件需求分析(第二版)》计划共十七个章节,其他章节的内容请前往专栏内查看。
  • 摘要:当前多媒体和互联网已广泛应用在社会各行各业,教育行业更是走在行业中的前沿。随着社会加速发展,如何提高...在设计在线考试系统前,通过阅读文献,深入了解当前在线考试系统国内外的研究情况、研究方向和研究...
  • 在线考试系统设计与实现(MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文20000字,程序代码,MySQL数据库)教育的进步改革,不仅仅体现在教育理念的进步改革,也体现在教育技术和手段的改进提高。...
  • 在线考试系统的设计与实现(MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文18000字,程序代码,MySQL数据库)本文论述了一个以My Eclispe为网络平台、SSH三层架构考试系统的设计原理、设计思想及具体的...
  • (3)对在线考试系统进行从技术、经济上的可行性分析,使得从理论上具备实现的可能性,再根据是实际需求进行开发反馈。 (4)系统性的阐述在线考试系统的设计总体概要以及各个功能分支的细节,按...
  • 在线考试系统论文

    2021-06-16 08:41:29
    摘要智能化网上考试系统采用开放式的设计思想,可以承载各种课程的题库,计算机自动组卷,实施课程的考试;也可以通过网络传输一套或几套试卷,在保证试卷的安全保密性的前提下,实施课程的考试,解决课程考试中规模...
  • 摘要:随着计算机技术和网络技术的不断发展,传统的纸质考试形式已不能适应发展的需要。运用计算机考试,以其运作成本低、高效、灵活的突出优势,正在走进我们的工作和学习。 针对当前国家逐步展开的行业人员执业资格...
  • 网上测试系统PAGE28 / NUMPAGES29西南财经大学Southwestern University of Finance and Economics课程实验报告课程名称: 数据库学生姓名: 周小钰、李佳颖学 院: 经济信息工程学院专 业: 计算机科学与技术指导...
  • 考试系统微信小程序的设计与实现

    千次阅读 2021-05-01 08:56:08
    随着现在网络的快速发展,微信也逐渐快速发展起来,很快融入到了许多高校的眼球之中,他们利用微信小程序来做这个试卷答题的服务,随之就产生了“考试...数据库的设计是由考试系统需求进行设计,主要实现的功能模块分
  • 摘要:在各大高校中,考试都是一个十分重要的环节,是对在校学生对学习质量的把控和知识掌握程度的测评,以此判定学生知识了解和教学质量检测。...以Android为系统想移动智能设备的出现,很大程度的改变了原...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,591
精华内容 12,236
关键字:

在线考试系统需求分析