考试管理系统【软件工程实践课设报告】

若本文对你有用,请点赞、关注我哟!

软件工程专业大四上学期课设之一,随便乱写的,报告评分不高,仅供参考。

一、软件工程实践课程任务目标

  1. 掌握软件工程问题调研、问题分析和原型设计;
  2. 掌握从技术、经济、社会等方面对系统软件的评估;
  3. 掌握运用软件工程原理、方法与技术进行软件系统设计实践能力;
  4. 培养学生项目管理与团队协调沟通的能力;
  5. 掌握数据库模式设计与实现;
  6. 掌握软件工程项目的测试流程;
  7. 熟练掌握UML建模、开发、数据库设计和测试工具的使用。

二、软件工程实践需求分析能力培养

1.实践目的

       掌握UML软件建模工具的使用,掌握问题的分析、可行性研究和相关技术约束评估,熟练绘制数据流图;学习快速原型工具的使用和需求分析文档撰写。

2.实践基本能力要求

(1)针对XXX系统进行文献查阅和调研,问题细化,团队协调和沟通,需求分析进行详细设计;

(2)安装 VISIO 2008 以上版本软件,熟练应用VISIO绘制DFD图,绘制XXX系统业务流图,完成系统的软件逻辑模型;

(3)安装 Axure RP Pro 或者 Balsamiq Mockups 原型设计软件,学习绘制软件原型,完成XXX系统的软件原型设计。

3.实践方式

       需求文档撰写和项目组成员讨论;

4.实践报告格式与内容

(1)XXX系统任务分析;

(2)XXX系统需求分析;

(3)XXX 系统的软件逻辑模型;

(4)XXX 系统的软件原型设计;

(4)提交XXX系统需求分析设计书。

三、软件工程实践系统功能设计

1.实践目的

       系统功能的详细设计和概要设计,学习UML绘制类图、功能图、活动图,掌握面向对象分析与设计方法,协调团队之间的合作与分工以及项目的管理。

2.实践基本能力要求

(1)具备面向对象分析与设计能力;

(2)安装Star UML和Rational Rose软件,熟练使用UML软件工具,对目标系统进行设计;完成类图、序列图、状态图、活动图等软件建模图形的绘制;

(3)学习 UML 模型和源代码的双向工程。

3.实践方式

       实验上机和项目开发;

4.实验报告格式与内容

(1)基于UML对目标系统进行概要和详细设计,绘制软件模型;

(2)描述UML模型和源代码的逆向工程、正向工程;

(3)提交绘制的图形和设计文档。

四、软件工程实践编码规范约束设计

1.实践目的

       学习PHP、.Net、JAVA 等集成语言环境,熟悉各语言的编码规范,进行系统编码规范约束设计。

2.实践基本要求

(1)熟悉各种语言的编程环境;

(2)学习各语言的编码技巧和调试方法;

(3)设计系统编码规范与约束。

3.实验方式

       上机编程与文档设计;

4.实验报告格式与内容

       选择PHP、.Net、JAVA 三种语言和集成编程环境其中之一,介绍环境的基本使用方法,调试技术。

五、软件工程实践项目版本控制

1.实践目的

       掌握SVN源代码版本管理工具,会部署Tortoise SVN服务端、客户端,实现不同IDE环境下的集成。例如:Ankh SVN(VS2008 插件) + Visual SVN Server 在Visual Studio环境下进行代码版本管理。

2.项目版本控制的基本要求

(1)安装SVN服务器和客户端软件,建立代码仓库,创建用户及授权;

(2)学习代码的同步、管理和协同开发方法;

(3)在Visual Studio环境下对所选系统的源代码进行版本管理;

(4)在Eclipse环境下对所选系统的源代码进行版本管理。

3.实践方式

       上机实践和项目开发协同管理;

4.实践报告格式与内容

(1)Visual Studio环境下源代码版本管理;

(2)Eclipse环境源代码版本管理。

六、软件工程实践项目测试

1.实践目的

       熟练掌握IBM Rational Robot、IBM Purify、Win Runner、NUnit、JUnit、CPPUnit、Webstress等各类软件测试工具的使用;编写项目测试计划、设计测试用例;掌握软件自动化测试方法,完成对系统的功能测试和性能测试。

2.软件工程实践项目测试的基本要求

(1)下载、安装IBM Rational Robot、IBM Purify、Win Runner、NUnit、JUnit、CPPUnit、Webstress、QTP、Load Runner和Test Manager等测试工具,熟练掌握其使用;

(2)掌握IBM Rational Robot中测试脚本录制、测试代码编写方法,针对实验代码进行自动测试;

(3)了解程序运行错误分析软件IBM Purify的工作原理,使用IBM Purify 进行代码错误检测,分析检测结果;

(4)采用Win Runner等黑盒测试工具进行所选系统的黑盒测试;

(5)运用NUnit、JUnit、CPPUnit工具软件进行白盒测试用例设计及自动测试;

(6)运用Webstress工具软件进行性能自动测试;

(7)了解Test Manager测试管理工具的使用方法;

(8)学习.Net、JAVA等集成开发工具中的软件测试、调试。

3.实践方式

       上机实践和测试文档的撰写;

4.实践报告格式与内容

(1)说明测试脚本录制、测试代码编写、针对实验代码进行自动测试的步骤、方法和实现情况;

(2).Net 或者JAVA等集成开发工具中的软件测试、调试方法;

(3)针对目标系统,使用各种测试工具的测试过程。

七、软件工程实践系统数据库设计

1.实践目的

       掌握数据库分析和设计并熟练掌握数据库的安装、操作和使用;完成对表的设计、实体关系图设计;学习使用数据库软件(例如:Power Designer)的使用。

2.实践基本要求

       使用数据库软件(Power Designer)设计数据库物理模型,并创建数据库。

(1)安装数据库软件Power Designer;

(2)设计目标系统的CDM;

(3)设计目标系统的PDM。

3.实验方式

       上机实践和数据库设计文档;

4.实验报告格式与内容

(1)数据库实体关系设计;

(2)数据库表的设计;

(3)使用数据库软件(Power Designer)构建目标系统数据库模型。

参考题目(仅供参考,也可自选题目由教师审核)

  1. 工资管理系统
  2. 宾馆客房管理系统       
  3. 人事管理系统      
  4. 学生学籍管理系统
  5. 员工档案管理系统
  6. 银行储蓄管理系统           
  7. 考试管理系统    
  8. 民航(铁路)订票系统
  9. 商场销售管理系统       
  10. 水电管理系统       
  11. 证券交易分析系统

需求说明书

一、给出完成系统的主要业务流程

                                                                          图1 系统主要业务活动图

二、给出完成系统的主要用例

                                                                          图2 系统用例图

三、根据每个用例给出相应的时序图

                                                                          图3 注册时序图

                                                                          图4 登录时序图

                                                                          图5 学生在线考试时序图

                                                                          图6 学生浏览历史试卷时序图

                                                                          图7 学生浏览历史错题时序图

                                                                          图8 考试管理时序图

                                                                          图9 管理员设计考试时序图

                                                                          图10 统计分析时序图

软件工程实践报告

1. 实践题目及实现功能

       实践题目:考试管理系统

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

       共分为两个界面:一个界面用于管理员登录,主要负责进行基本资料、题库、试卷、成绩的管理以及查询等;另外一个界面用于普通用户登录,主要负责在线考试、查询以往考试成绩等。

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

       对管理员来说,包括试卷管理、题库管理、成绩管理、学生管理、考试安排。

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

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

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

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

       考试安排:管理员可以发布指定时期的考试任务,学生只能在规定的时间内完成考试。

       对普通用户来说,包括在线考试、查询以往考试成绩、错题浏览等。

       在线考试:学生可以任选时间进行在线测试,考试结束后,系统会根据已有的标准答案进行在线判卷,考生可以立刻知道考试成绩。

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

       错题浏览:系统自动汇总学生以往所有错题,方便学生后期复习。

2. 软件需求分析

2.1考试管理系统任务分析

       传统的考试方式一般要经过人工出卷、考生考试、人工阅卷等过程。对于一些课程来说,随着考生数量的增加,教师出卷阅卷的工作量将会越来越大,并且其工作十分繁琐和非常容易出错。在线考试系统课题产生的背景是当今教育信息化的趋势及我国高校教育信息化系统的建设,目的是充分利用学校现有的计算机软、硬件和网络资源实现无纸化考试以避免传统手工考试的不足。与传统考试模式相比,网上考试渗入了更多的技术环节,对实现安全性的途径、方法也提出了更高的技术要求。

2.2考试管理系统的软件逻辑模型

       在需求分析过程中,通过用例建立系统模型,展示系统外部角色对系统的功能需求。

       1、识别参与者与用例,在本系统中,把教师(出题者)、学员(考试人员)、考试管理员、系统管理员等确定为参与者;系统主要用例:考纲管理、考点管理、题库管理、专题测试管理、试卷管理、试卷生成、考试管理、成绩管理、公告管理、统计分析、学生登录、学生考试、模拟考试、考试信息、考试过程管理、注册、基本信息管理、班级管理、角色管理。

       2、建立用例图,利用 Microsoft Office Visio 建模环境,创建系统的考生用例图、教师与考试管理员用例图、系统管理员用例图、客户端脚本对象用例图如图1~3所示,其中图3为一级用例图。

                                                                          图1 系统管理员和客户端浏览器用例

                                                                          图2 考生用例

                                                                          图3 教师与考试管理员用例

       3、用例文档,以试卷生成的为例:用例编号:001。用例名:试卷生成。用例描述:出题人根据自身权限定义试卷后,由计算机自动生成试卷。参与者:计算机或用户。前置条件:用户已登录,并进入后台管理系统,在系统里事前定义好了试卷。后置条件:向管理员发送审核通知。事件路径:①用户选择定义试卷,并保存;②系统提示是否成生试卷;③按试卷配置生成试卷,3a试卷不符合考纲覆盖要求和试卷难度系统,3b循环执行生成试卷;④循环结束判断试卷生成结果,成功保存试卷至数据库;⑤系统显示操作成功。

2.3考试管理系统的软件原型

①前台首页模块设计

       考生通过“考生登录”模块的验证后,可以登录到网络在线考试的前台首页,如图4所示。前台首页主要用于实现前台功能导航,在该页面中只包括在线考试、成绩查询、修改个人资料和退出4个导航链接。

       由于本系统的前台首页主要用于进行系统导航,所以在实现时,采用了为图像设置热点的方法,这样可以增加页面的灵活度,使页面不至于太枯燥。下面将对如何设置图像的热点进行详细介绍。为图像设置热点,也可以称作图像映射,是指一幅图像可以建立多个超链接,即在图像上定义多个区域,每个区域链接到不同的地址,这样的区域称为热点。 

       图像映射有服务器端映射(Server-side-Image Map)和客户端映射(Client-side-Image Map)两种。目前使用最多的是客户端映射,因为客户端映射使图像上对应的坐标以及超链接的URL地址都在浏览器读入,省去和服务器之间互传坐标和URL的时间。

                                                                          图4 前台首页图

②考生信息模块设计

       考生信息模块主要包括考生注册、考生登录、修改个人资料以及找回密码等四个功能。考生首先要注册成为网站用户,然后才能被授权登录网站进行一系列操作的权限;登录后考生还可以修改个人的注册资料。如果考生忘记了登录密码,还可以通过网站提供的找回密码功能快速找回密码。考生信息注册模块的系统如图5所示:

                                                                          图5 考生信息注册图

       考生信息模块的Action实现类Student继承了Action类。在该类中,首先需要在该类的构造方法中分别实例化考生信息模块的StudentDAO类。Action实现类的主要方法是execute(),该方法会被自动执行,这个方法本身没有具体的事务,它是根据HttpServletRequest的getParameter()方法获取的action参数值执行相应方法的。

③在线考试模块设计

       在线考试模块的主要功能是允许考生在网站上针对指定的课程进行考试。在该模块中,考生首先需要阅读考试规则,在同意所列出的考试规则后,才能选择考试,在选择考试课程后,系统将随机抽取试题,然后进入考试页面进行答题,当考生提交试卷或者到达考试结束时间时,系统将自动对考生提交的试卷进行评分,并给出最终考试成绩。在线考试模块的系统流程如图6所示:

                                                                          图6 在线考试流程图

       考生登录到网络在线考试的前台首页后,单击“在线考试”超链接,将进入到考试规则页面,在该页面中单击“同意”按钮,即可进入到选择考试课程页面,在该页面中将以下拉列表框的形式显示需要参加考试的课程.在该页面中,单击“开始考试”按钮,将关闭当前窗口,并打开新的窗口显示试题,如图7所示:

                                                                          图7 考试试题图

④考试题目管理模块设计

       网络在线考试系统的后台首页是管理员对网站信息进行管理的首页面。在该页面中,管理员可以清楚地了解网站后台管理系统包含的基本操作。

       a)管理员信息管理:主要包括管理员信息列表、添加管理员、修改管理员和删除管理员。

       b)考生信息管理:主要包括查看注册考生信息列表和删除已注册的考生信息。

       c)考生成绩查询:主要用于根据准考证号、考试课程或考试时间模糊查询考生成绩。

       d)课程信息管理:主要包括查看课程列表、添加课程信息和删除课程信息。

       e)套题信息管理:主要包括查看套题信息列表、添加套题信息、修改套题信息和删除套题信息。

       f)考试题目管理:主要包括查看考试题目列表、添加考试题目、修改考试题目和删除考试题目。

       g)退出管理:主要用于退出后台管理系统。

       为了方便管理员管理,在网络在线考试系统的后台首页中显示考生成绩查询页面,其运行结果如图8所示:

                                                                          图8 后台首页图

       管理员登录系统后,单击“考试题目管理”超链接,进入到查看考试题目列表页面,在该页面中单击“添加考试题目”超链接,进入到添加考试题目页面。在该页面的“属性课程”下拉列表框中选择“计算机专业英语”,在“所属套题”下拉列表框中将显示该课程对应的套题名称。添加考试题目页面的运行结果如图9所示:

                                                                          图9 添加考试题目图

3. 面向对象的软件分析与设计

3.1系统类图

       以用例模型为输人,对用例模型进行分析,把系统分解为相互协作的分析类时,以MVC模式识别系统的类、对类进行划分、建立初步模型、确定类的属性和操作、确定类之间的联系,最后建立类图。系统的类图如图4所示,实现时,类主要体现在视图所对应的后置文件中,除了数据库操作、加密算法等公共业务类以外。

3.2时序图

       在线考试系统中,用顺序图更能表示系统服务流程,通过图4可以识别出系统里的对象,考试服务子系统的各对象执行的顺序如图5所示,先定义考纲,再定义试卷。考试终端子系统的工作时序为:考生登录,如有考试自动切换进入考试界面,否则由考生选择专题进行测试。一旦进入考试,客户端脚本对象开始倒计时,考生可以自由选择考题类型和考题进行作答。与此同时,考试数据将实时备份至客户端,并在设置时间隔内异步备份至服务端,如图6所示。专题测试在服务端的定义与试卷定义及生成执行时序类似,而专题测试的考试终端仅获取考题,考试结東后给出评价分数。

3.3状态图

       状态图主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件,以及因状态转移而伴随的动作。考试与测试状态图如图7所示,考试分为测试和期末考试,测试包含专题测试与期末模拟考试。考试试卷的状态如图8a所示,其中考试备份为服务器端对考生考试过程进行备份的状态。一般数据对象状态如图8b所示,一般数据对象包含题库考题、考纲考点等,所有数据信息的添加、编辑均需要审核通过后方可使用,为此将信息类型分为活动状态和非活动状态。

                                                                          图10 在线考试系统服务端类图

                                                                          图11 考试管理子系统的顺序图

                                                                          图12 考试终端子系统顺序图

                                                                          图13 考试与测试的状态图

                                                                          图14 一般数据对象的状态图

3.4描述UML模型和源代码的逆向工程、正向工程

                                                                          图15 UML模型的正向工程图

                                                                          图16 源代码的逆向工程图

4. 集成编程环境、编码规范及程序清单

4.1环境的基本使用方法,调试技术

       选择MySql作为后台的数据库,选择MyEclipse作为应用程序开发工具,应用JAVA、JSP、JavaScript、Html、Tomcat服务器技术,整个系统完全基于B/S (Browser/Server)模式进行设计,采用strus框架进行架构。

       在开发网络在线考试系统时,需要具备下面的软件环境:

  1. 操作系统:Windows10。 
  2. Web服务器:Tomcat8.5。 
  3. Java开发包:JDK1.8。 
  4. 开发工具:MyEclipse2019。
  5. 数据库:MySQL及其图形化管理工具SQLyog。 
  6. 浏览器:火狐、IE、Chrome游览器。 

4.2程序清单

                                                                          图17 目录详情

1、主函数

package com.songlea.springboot.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;

// 相关于使用@Configuration,@EnableAutoConfiguration与@ComponentScan的默认属性
@SpringBootApplication
// @EnableAutoConfiguration:尝试根据你添加的jar依赖自动配置你的Spring应用
// 扫描WebServlet,WebFilter,WebListener注解,只有使用servlet容器时作用
@ServletComponentScan(value = {"com.songlea.springboot.demo.servlet"})
// 启注解事务管理,等同于xml配置方式的<tx:annotation-driven />,可以使用@Transactional注解
@EnableTransactionManagement
@MapperScan(basePackages = "com.songlea.springboot.demo.mapper")
public class DemoApplication  /* extends SpringBootServletInitializer */ {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

2、.properties配置文件

# spring boot配置文件:部分配置属性与说明
# 是否开启压缩,默认为false
server.compression.enabled=true
# 设定http监听端口
server.port=8080
# datasource config (use druid)
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据库url,用户名与密码(界面有表格故使用前需要导入ci_host_compare表结构与数据)
spring.datasource.url=jdbc:mysql://localhost:3306/student_test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.initialSize=2
spring.datasource.minIdle=2
spring.datasource.maxActive=50
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.filters=stat,wall,log4j
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

mybatis.type-aliases-package=com.songlea.springboot.demo.pojo
mybatis.mapper-locations=classpath:mapper/*.xml
# 驼峰命名映射
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.mapUnderscoreToCamelCase= true
#pagehelper.helper-dialect=oracle
# 启用合理化时如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页;禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据,默认为false
pagehelper.reasonable=true
# 支持通过Mapper接口参数来传递分页参数
pagehelper.support-methods-arguments=true
# 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值
# 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值.不理解该含义的前提下,不要随便复制该配置
# pagehelper.params=count=countSql
# 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用,默认false
pagehelper.offset-as-page-num=true
# 设置为true时使用RowBounds分页会进行count查询,默认为false
pagehelper.row-bounds-with-count=true
# 设置为true时,如果pageSize=0或者RowBounds.limit=0就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是Page类型)
pagehelper.page-size-zero=true

#org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties配置类
# 是否开启模板缓存,默认true
spring.thymeleaf.cache=true
# 是否检查模板路径是否存在,默认true
spring.thymeleaf.check-template-location=true
# 指定Content-Type,默认为:text/html
spring.thymeleaf.content-type=text/html
# 是否允许MVC使用Thymeleaf,默认为: true
spring.thymeleaf.enabled=true
# 指定模板的编码,默认为: UTF-8
spring.thymeleaf.encoding=UTF-8
# spring.thymeleaf.excluded-view-names: 指定不使用模板的视图名称,多个以逗号分隔.
# 指定模板的模式,具体查看StandardTemplateModeHandlers,默认为:HTML5
spring.thymeleaf.mode=HTML5
# 指定模板的前缀,默认为:classpath:/templates/
spring.thymeleaf.prefix=classpath:/templates/
# 指定模板的后缀,默认为:.html
spring.thymeleaf.suffix=.html
# 指定模板的解析顺序,默认为第一个
spring.thymeleaf.template-resolver-order=1
# spring.thymeleaf.view-names:指定使用模板的视图名,多个以逗号分隔.

3、用户接口

package com.songlea.springboot.demo.common;

public interface UserRole {
    public static final String STUDENT = "student";
    public static final String TEACHER = "teacher";
    public static final String USER = "user";
}

4、用户常态接口

package com.songlea.springboot.demo.common;
public interface Constant {
    public static final String PAPERID = "paperId";
    public static final String EXAMROOMID = "examroomId";
    public static final String PROBLEMSLIST = "problemsList";
    public static final String EXAMROOMLIST = "examroomList";
    public static final String  USERLIST= "userList";
    public static final String ERRORMESSAGE = "errorMessage";
    public static final String CHOICE = "选择题";
    public static final String CHOICELIST = "choicelist";
    public static final String SHORTANS = "简答题";
    public static final String SHORTANSLIST = "shortanslist";
    public static final String HASVIEWPAPER = "yes";
    public static final String NOTVIEWPAPER = "no";
    public static final String SUCCESS = "success";
    public static final String FAIL = "fail";
    public static final String MESSAGE = "message";
}

5、pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.songlea.springboot</groupId>
    <artifactId>examroom</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>examination</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
        <thymeleaf-layout-dialect.version>2.0.5</thymeleaf-layout-dialect.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!--mybatis支持与分页插件-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!--page helper-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--数据库连接池与驱动jar包-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>

        <!--使用mysql数据库时需要-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <!--spring boot 热部署-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>

            <!--mybatis-generator-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.39</version>
                    </dependency>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.5</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--允许移动生成的文件 -->
                    <verbose>true</verbose>
                    <!-- 是否覆盖 -->
                    <overwrite>true</overwrite>
                    <!-- 自动生成的配置 -->
                    <configurationFile>
                        src/main/resources/generatorConfig.xml
                    </configurationFile>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

5. 源代码版本管理

1、进入Github首页,点击New repository新建一个项目。

                                                                          图18 上传至GitHub

2、填写相应信息后点击create即可。

        Repository name: 仓库名称

        Description(可选): 仓库描述介绍

        Public,Private: 仓库权限(公开共享,私有或指定合作者)

        Initialize this repository with a README: 添加一个README.md

        gitignore: 不需要进行版本管理的仓库类型,对应生成文件.gitignore

        license: 证书类型,对应生成文件LICENSE

                                                                          图19 获取SHH密钥

3、点击copy这个地址备用。

                                                                          图20 复制SHH密钥

4、接下来就到本地操作了,首先右键项目,我之前已安装git,故右键会出现两个新选项,分别为Git Gui Here,Git Bash Here,选择Git Bash Here,进入如下界面,springboot即为我的项目名。

                                                                          图21 git bash进入项目目录

5、接下来输入如下代码(关键步骤),把github上面的仓库克隆到本地。

                                                                          图22 克隆到本地

6、本地项目文件夹下面就会多出个文件夹,该文件夹名即为我github上面的项目名,如图我多出了个ExamManage文件夹,把本地项目文件夹下的所有文件(除了新多出的那个文件夹不用),其余都复制到那个新多出的文件夹下。

                                                                          图23 克隆后的本地情况

7、接着依次输入以下代码即可完成其他剩余操作:

        cd ExamManage,进入Test文件夹

        git add .(把ExamManage文件夹下面的文件都添加进来)

        git commit -m "提交信息"

        git push -u origin master(把本地仓库push到github上面,此步骤需要输入帐号和密码)

                                                                          图24 弹出输入账户和密码的任务框

                                                                          图25 git bash上的执行过程

                                                                          图26 最终上传结果

6. 自动软件测试

6.1软件开发技术概述 

        Ajax技术是Asynchronous JavaScript and XML的缩写,意思是异步的JavaScript和XML。Ajax并不是一门新的语言或技术,它是JavaScript、XML、CSS、DOM等多种已有技术的组合,它可以实现客户端的异步请求操作。这样可以实现在不需要刷新页面的情况下与服务器进行通信的效果,从而减少了用户的等待时间。 

6.2通过Ajax技术实现计时与显示剩余时间 

        在通过Ajax技术实现计时与显示剩余时间,首先需要创建一个封装Ajax必须实现的功能的对象AjaxRequest,并将其代码保存为AjaxRequest.js,然后在开始考试页面中包含该文件,具体代码如下:<script language =“javascript” src=“..//JS/AjaxRequest.js”></script>由于通过Ajax技术实现计时与显示剩余时间表的方法类似,下面以实现自动计时为例进行介绍。编写调用AjaxRequest对象的函数、错误处理函数和返回值处理函数。

        计时方法showStartTime()中,首先需要获取保存在Session中的考试开始时间,并将其转化为对应的毫秒数,然后获取当前时间的毫秒数;再应用这两个时间生成两位的小时数、分钟数和秒数,并组合为新的时间;最后将其保存到showStartTime参数中,并转到输出计时时间的页面。

7. 设计数据库表

7.1描述使用Power Designer设计目标系统数据库模型的过程

7.1.1概念模型

        实体-联系图(Entity Relationship Diagram),E-R模型即实体联系数据模型,它属于概念数据模型。其中,构成E-R图的基本要素主要包括实体型、属性和联系3个部分。本系统的数据需求局部模型如所图9示,为了简化E-R图,每个实体的属性省略,具体的实体属性表示如下。

        班级(C-C):班级编号、班级名称、班级成员、创建者;

        教师(A)(系统、试卷管理员):用户名、密码、角色、数据权限;

        考纲(O):编号、课程编号、考纲名称、创建者、创建时间、审核状态、审人、审核时间;

        考点(P):编号、课程编号、考点名称、最小分数、最大分数;

        考题(Q):编号、课程编号、考点编号、课程章节、题干、参考答案、解题分析、难度系数,参考答案是集合,用特殊符号区分,答案所存储的图文表以HIML标记及文件资源构成,依此处理题干所包含选择题的选项;

        课程(C):编号、课程名称、所属单位、创建者、创建时间、关键字、课程描述等;

        试卷(T):试卷编号、考试名称、测试类型、班级编号、课程编号、试卷总分、考试时间、考试地址、考纲编号、考试时长、考卷难度、考点覆盖范围、试卷状态、创建者、创建日期、审核状态、审核人、审核日期,试卷的试题详表记录,试题详表(T-D):试卷编号、题目类型、每个类型题目数量、每个类型题目分数、每个类型题目的单个试题分数;

        考生(S):考号、帐号、姓名、密码、班级編号、登录标志;

        考试信息(T-I):课程编号、创建者、标题、关键字、描述、简介、内容。

7.1.2逻辑数据模型

        关系数据库的逻辑结构由一组关系模式组成,从概念结构到关系数据库的逻辑结构的转换就是从E-R图转换为关系模式,其转换过程和规则为:实体和实体属性的转换方法为一个实体转换为一个关系模式;实体之间的联系和联系属性的转换视具体情况进行,图9中角色和权限经优化后不再另外转换为关系模式。联系为1:n的转换方法:在n端的子表中增加父表的关键字列2.于是系统的逻辑数据模式为:

        C-C(classId,className,classMember,creator)

        A (userId,userName,userPwd,userRole,userDataAuthority)

        O(outlineld,courseId,outlineName,creator,addTime,checkState,checker,checkTime)

        P (testPointId,courseId,testPointName,minimumGrade,maximumGrade)

        Q(questionId,courseId,testpointId,courseChapterName,question,anwser,anwserAnalysis,questionDifficultyDegree)

        C(courseId,courseName,subordinateUnit,creator,addTime,courseKeyword,courseDescription)

        T(paperld,testName,testType,classId,courseId,totalGrade,testDate,testAddress,outlineld,durationTime,testDifficulty,testRange,testState,creator,addTime,chechState,checkUser, checkDate)

        T-D(paperId,questionType,eachTypeQuantity,eachTypeGrade,eachTypeQuestionGrade)

        S(testId, userAccount, userName, userPwd, classId, isLogin)

        T-I (courseId,author,title,keyword,description,introduction,content)

        成绩(G):考号、科目编号、试卷编号、答案、每个题目的得分情况、平时成绩、在线学习成绩、总成绩,每种威绩的加权系统由任课教师设定。其关系模式表示为:

        G(testId,courseld,testNumber,single-optionGrade,judgeGrade,blankGrade,multipleChoiceGrade,appQuestionGrade,processGrade,e-learningGrade,totalGrade)

        考生答题记录表,该表应该记录着考生的在线考试近3分钟前的答题情况,当考试过程发生故障而又不能从客户端不能进行考试恢复时,从服务器端恢复备份。考生答题记录(B):试卷编号、考号试卷编号、试题编号、试题解答。其关系模式表示为:

        B(paperld, testid, courseld, questionid, solutionresult)

        系统的物理模型是给定的逻辑数据模型选取一个合适应用要求的物理结构,包括数据库的存储记录格式、存取方法等,且数据库的物理模型依赖给定硬件环境和数据库产品。

                                                                          图26 数据需求局部模型

7.2数据库设计表

①tb_manager(管理员信息表) 

        管理员信息表用来保存管理员信息,该表的结构如表1所示:

②tb_Student(考生信息表) 

        考生信息表用来保存考生信息,该表的结构如表2所示:

③tb_stuResult(考生成绩信息表) 

        考生成绩信息表用来保存考生成绩,该表中的所属课程字段whichLesson与tb_Lesson表中的Name字段相关联,并且设置为级联更新。考生成绩信息表的结构如表3所示:

④tb_TaoTi(套题信息表) 

        套题信息表用来保存套题信息,该表中保存着所属套题ID,套题名称,套题所属课程以及套题的添加时间信息。该表的结构如表4所示:

⑤tb_Lesson(课程信息表) 

        课程信息表用来保存课程信息,该表中保存着所属课程的ID,课程名以及课程的添加时间信息。该表的结构如表5所示:

⑥tb_Questions(考试题目信息表) 

        考试题目信息表用来保存考试题目信息。考试题目信息表的结构如表6所示:

7.3数据表关系设计

        本系统设计了如图10所示的数据表之间的关系,该关系实际上也反映了系统中各个实体之间的关系。

                                                                          图27 数据表之间的关系图

8. 实践工作总结

8.1在设计及编程过程中遇到的问题及解决的方法

                                                                          图28 样式加载不出来

        问题的点在于引用的jquery以及各种css样式都是静态的,所以解析出现错误,把css样式和jQuery的js文件都放在静态资源下就可以解决这个问题,看最后的静态目录,其中需要注意,静态资源的文件夹的名称必须要写成static,不然不能识别,然后在静态资源下放各种js和css文件以及html和图片。

8.2对软件工程与工匠精神的理解

        “臣之所好者道也,进乎技矣。”庖丁之语,解答了自己解牛何以神乎其技,道出了一个工匠追求技艺的价值所在。从历史的维度来看,工匠是现代社会之前的一个群体,他们的工作和劳动,主要依靠手工完成。工业革命之后,机器化大生产代替了手工作坊的生产,工匠逐渐受到了冷落。然而,在机器化大生产的时代,更注重产品的精度和品质,更需要工匠精神。当前,中国正在由“制造大国”向“制造强国”迈进,培育工匠精神迫在眉睫。学校要大力加强实践教育,让“心灵手巧”成为衡量人才的标准,尤其在职业教育与应用技术教育中要予以体现。企业要有奖励工匠的体制机制,技艺精湛的工匠,应该在企业内部受到应有的重视,多注重从政策上对工匠倾斜。工匠和简单从事体力劳动的群体不同,他们的劳动中闪耀着智慧的灵光,具有创造性和开拓性,社会各方对他们理应给予足够的人文关怀。

        软件在当今的信息社会中占有重要的地位,软件产业是信息社会的支柱产业之一。随着软件应用日益广泛、软件规模日益扩大,人们开发、使用、维护软件不得不采用工程的方法,以求经济有效地解决软件问题。对于软件工程的学习需要借助于计算机科学技术、数学、管理科学与工程诸多学科,如今的软件工程已由最初的一个学科方向发展成为以计算机科学技术为基础的一个新兴交叉学科。

        软件工程是计算机学科中一个年轻且充满活力的研究领域。现代科学技术将人类带入了信息社会,计算机软件扮演着十分重要的角色,软件工程已成为信息社会高技术竞争的关键领域之一。

        从软件工程专业的种种特性来看,软件工程与工匠精神密不可分,软件工程是一门构建优质、高效软件、知识涉略广泛、逻辑严谨的技术性学科,一丝的差错可能导致严重的后果,故当我们在开发软件时一定要时刻保持着工匠精神!

8.3对《软件工程师职业道德规范和实践要求 5.2版》的理解

        飞速发展的技术使得这个世界对人类的要求越来越高,她越发希望甚至迫使我们要自觉跟踪技术发展动态,积极参与各种技术交流、技术培训和继续教育活动,不断改进和提高自己的技能,自觉参与项目管理和软件过程改进活动。要能注意对个人软件过程活动的监控和管理,积累工程数据,研究和不断改进自己的软件生产效率和质量,并积极参与发展高效的团队软件过程管理,使各项软件产出,都能达到国际和国家标准与规范。

        社会上的大多数职业,倘若不能主动学习,不能自我进步,那么至少你将失去对于你来讲最有价值的手段,用来获得高薪机会的手段。对软件工程师来讲,这一点尤其明显。一方面是技术的不断普及,一方面是公司对经验人员的迫切需求。在开发领域甚至在任何其他领域一个默认的共识是才华横溢绝对不是你想象的那么重要,从才华横溢到事业成功,要付出艰辛的劳动。你再去问问资深软件工程师,成为资深工程师所需要的不是天份,而是1万小时定律支配下的时间和你的肝功能。软件业是一个不断变化和不断创新的行业,面对层出不穷的新技术,软件人才的求知欲和进取心就显得尤为重要,它是在这个激烈竞争的行业中立足的基本条件。软件工程师应具有较强的学习总结能力、需求理解能力和对IT新技术比较敏感,同时,掌握最新的IT实用技术。

        一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法论。程序员是个很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但学习也要找准目标,不能三心二意、盲目泛读,技术不是学得越多越好,而是即使你只掌握一门技术,精益求精、不断钻研,终有一天你会成为这个领域的佼佼者。

质量目标指标样例及属性详细说明

分类

指标

指标内容

详细说明

功能性

适合性

行业适合性

软件支持业务(或领域应用)的必要功能必须存在,这些功能应当与其应用的业务(或领域)场景相适宜,是软件最根本的质量属性。

准确性

需求的吻合程度

应100%覆盖用户的需求。

互操作性

如系统进行互联和互通等

如本系统的某些信息能够与民政网站上的某些信息相对应,进行信息共享。

依从性

是否遵守规范

指系统所依循的书目和文档等参考资料。

安全性

 

指软件产品所具备防止未经授权访问程序或数据的能力,以免造成意外的损失。

可靠性

 

成熟性

可用度

用功能度量即可,能够满足客户一般使用即可。

初期故障率

指系统完成初期,在一定时间内,发生系统不能正常使用(如系统崩溃)或影响客户正常工作的问题数。

偶然故障率

系统运行一定时间内,发生系统不能正常使用(如系统崩溃)或影响客户正常工作的问题数。

容错性

平均失效前时间(MTTF)

指软件在失效前正常工作的平均统计时间。其中失效指造成系统崩溃的错误,时间为验收后,系统能够正式稳定运行。

平均失效间隔时间(MTBF)

指软件在相继两次失效之间正常工作的平均统计时间。其中失效指造成系统崩溃的错误,时间为验收后,系统能够正式稳定运行。

缺陷密度(FD)

指缺陷数/代码行数。

易恢复性

平均失效恢复时间(MTTR)

指系统失效后重新启动的平均时间。

易用性

易理解性

 

指用户认识软件的结构、功能、逻辑、概念、应用范围、接口等难易程度的软件属性。

易学习性

 

指用户学习软件应用(运行控制、输入、输出)难易程度的软件属性。

易操作性

 

指用户操作和运行控制软件的难易程度的软件属性。

效率

时间特性

性能

输出结果更新周期(页面反应时间)

不能超过用户所能忍受的限度。

并发

指系统允许多少个相同的动作在同一时间进行操作。

压力

系统所能承受的最大数据。

可维护性

易分析性

 

指代码名称等是否符合规范,是否完整,

数据库表格命名等是否符合规范。

可扩展性

 

指能与其他系统相连,扩展之后的程序修改不大。

可修改性

 

从系统的架构、层次、文档、代码注释等方面考虑。

可移植性

适应性

 

指在不同浏览器、数据库和操作系统上都可运行使用。

易安装性

 

指用户使用系统所用的安装方式。

易替换性

 

指更新版本后系统是否容易更新。

交付产品清单

猜你喜欢

转载自blog.csdn.net/qq_41587612/article/details/113395971