设计报告
在科技高速发展的当下,互联网也进入了一个新时期,无论是离不开网络的我们,还是收益于互联网的生活,对于作业采用网上管理也是一个必然的方向,这次借着JavaEE大作业的机会,进行对作业管理系统的设计。作业管理系统要适用于在校师生。而且不应考虑经济效益,应将服务器成本以及设计成本控制在预期范围内。
这次不仅是JavaEE的设计作业,更是一次本学期软件工程学习成果的检验。本次开发文档将会按照软件工程开发的方式编写。
为了能够使的项目在规定时间内完成,特此设立如下阶段:
第一阶段:第一天
确定开发项目课题,并根据课题内容进行需求分析并且根据分析结果建立数据库。
第一阶段主要的工作:
(1) 就是建立数据库,将其完善。
(2) 确定功能模块。
(3) 确定该项目每个功能需要使用的技术,并且需要在这个基础之上进行代码的编写。
(4) 根据写好的数据库,给出操作数据库的实体类和操作类。
本阶段的硬性要求就是数据库必须建立好,以方便后期各组的工作。
第二阶段:第二到第四天
思考目前进度存在的问题以及需要解决的问题的方案。
第二阶段主要的工作:
(1) 完善第一阶段写好的数据库操作对象。
(2) 写好需要的工具类。
(3) 进行前端以及绘图等工作。
(4) 编写逻辑部分代码。
(5) 对项目进行第一次的完善
第三阶段:第五到第六天
将前段时间写好的代码进行整合并且测试项目找出其中的问题,然后将之前需要将项目完善完全,最后进行文档的编写。
第三阶段主要的工作:
(1) 进行整合并进行测试,对其中问题进行处理。
(2) 在这期间将文档编写并且完善。
[1] 张继军 董卫.Java EE 框架开发技术与案例教程 2016
[2] 吕云翔.软件工程理论与实践.北京:机械工业出版社,2017.
[1] 学生: 网站的主要使用人员,由教师创建或导入,不能独立存在于该系统。
[2] 教师: 网站身份为教师的用户,拥有发布、修改、删除、批阅作业的权限,并能对学生用户进行管理。
[3] 作业: 由教师创建,并由学生完善后交付给教师批阅,批阅后批阅信息交付给学生。
教师可以将一个教学班的学生信息一次导入(也可以单独添加一个学生),用户名和密码默认为学号,并且按教学班组织管理。可以发布作业(一次可以发布多个题目)每个题目包含:题号、题干(题目内容)、要求、并且给出作业提交的最迟时间等相关内容。可以批阅作业(对每个题目给出评阅意见和成绩),批阅完成后,自动形成该次的评阅成绩和意见。并且对于上传的附件文档,可以直接打开(不要下载),这样方便教师的批阅。具有统计成绩功能,教师可以统计到目前为止,学生作业完成情况以及相应的成绩与评价。
学生可以查阅所布置的作业,并选择题目完成解答并提交(可以上传附件文件)。可以查阅教师返回的批阅意见和成绩,若对成绩或评阅有问题,可以返回信息给教师。可以列出到目前所作的所有作业情况(包括成绩与评阅信息)
模块编号 | 名称 | 模块功能描述 |
---|---|---|
101 | 注册 | 不对学生开放 |
102 | 登录 | 已注册用户登录系统 |
103 | 查看个人信息 | 学生或老师查看个人信息 |
104 | 修改个人信息 | 学生或老师修改个人信息 |
105 | 学生管理 | 老师可以对学生信息进行管理 |
106 | 学生导入 | 老师可以批量导入也可以单个添加 |
107 | 删除成员 | 老师可以删除创建的学生 |
201 | 发布作业 | 老师可以发布作业 |
202 | 查看作业 | 老师可以查看作业 |
203 | 修改作业 | 老师可以修改作业 |
204 | 删除作业 | 老师可以删除作业 |
205 | 批改作业 | 老师可以批改已经提交的作业 |
206 | 成绩分析 | 老师可以对已经批改的作业进行成绩统计 |
301 | 完成作业 | 学生可以完成作业并上传附件 |
302 | 查阅评级 | 学生可以查阅老师的评价 |
303 | 联系老师 | 学生可以联系老师对批阅情况进行反馈 |
首次开发采用MVC模式+Struts2框架技术,前端采用Vue和Jquery技术。
二次开发采用Spring框架进行整合
三次开发采用Hibernate框架进行数据库整合
处理器:Intel(R) Core(TM) i7-8750 CPU @2.80Ghz 3.60GHz
内存:24.00GB
显卡:Nvidia 1050Ti 4G
服务器:Tomcat 9.0
数据库:Mysql 8.0
Web项目:Eclipse 2019-9
前端界面:HBuilerX
部分代码编辑:VScode
编号 | 102 | 用例名称 | 登录 |
---|---|---|---|
使用人员 | 所有用户 | 扩展点 | 无 |
输入 | 账户密码 | ||
系统响应 | 数据库查询密码是否符合 | ||
输出 | 符合后跳转至主页,不符合给出提示信息 | ||
前置条件 | 未登录 | 后置条件 | 已登录 |
活动步骤 | 用户在登陆界面输入账号密码系统查询数据库检验是否账号密码对应符合后跳转至主页,不符合给出提示信息 | ||
异常处理 | 无此用户账号不为纯数字学号 |
异常处理
编号 | 201 | 用例名称 | 发布作业 |
---|---|---|---|
使用人员 | 教师 | 扩展点 | 无 |
输入 | 系统自动转换,不需输入 | ||
系统响应 | 系统将相应的作业信息添加到数据库中 | ||
输出 | 作业列表栏中新增刚添加的作业,并且给学生消息提醒 | ||
前置条件 | 用户是教师并且处于发布作业 | 后置条件 | 用户发布作业成功 |
活动步骤 | 用户点击“发表作业”按钮用户输入作业信息用户完成输入,点击“发布作业”按钮返回原界面 | ||
异常处理 | 用户未登录或非本人或教师,则没有发表作业功能系统异常,系统给出相应提示信息 |
异常处理
编号 | 202 | 用例名称 | 查看作业 |
---|---|---|---|
使用人员 | 所有用户 | 扩展点 | 无 |
输入 | 系统自动转换,不需输入 | ||
系统响应 | 系统对数据库中相应的作业进行提取 | ||
输出 | 将被选中的作业信息呈现给申请者 | ||
前置条件 | 已登录且点击查看作业 | 后置条件 | 用户查看作业成功 |
活动步骤 | 用户点击“查看作业”按钮查看成功,返回作业界面 | ||
异常处理 | 系统异常,并给出相应的提示信息 |
异常处理 系统异常,并给出相应的提示信息
编号 | 203 | 用例名称 | 修改作业 |
---|---|---|---|
使用人员 | 教师 | 扩展点 | 无 |
输入 | 系统自动跳转,不需要输入 | ||
系统响应 | 系统对数据库中相应的作业信息进行修改 | ||
输出 | 被选中的作业信息被修改 | ||
前置条件 | 用户是教师并且处于修改界面 | 后置条件 | 用户修改作业成功 |
活动步骤 | 用户点击“修改作业”按钮用户输入修改的信息用户完成输入,点击“提交”按钮修改成功,返回原界面 | ||
异常处理 | 系统异常,并给出相应的提示信息 |
异常处理 系统异常,并给出相应的提示信息
编号 | 204 | 用例名称 | 删除作业 |
---|---|---|---|
使用人员 | 教师 | 扩展点 | 无 |
输入 | 系统自动跳转,不需要输入 | ||
系统响应 | 系统修改数据库,将该作业从作业列表中删除。 | ||
输出 | 系统提示作业删除成功 | ||
前置条件 | 用户是教师并且处于个用户列表页面 | 后置条件 | 用户删除作业成功 |
活动步骤 | 用户点击“删除作业”按钮评论成功,返回原界面 | ||
异常处理 | 无 |
异常处理 无
编号 | 205 | 用例名称 | 批改作业 |
---|---|---|---|
使用人员 | 教师 | 扩展点 | 无 |
输入 | 系统将已提交的作业添加到带批改的作业列表中,教师点击作业并对作业进行评价。 | ||
系统响应 | 将批阅信息写入数据库 | ||
输出 | 系统提示作业批阅成功 | ||
前置条件 | 用户是教师并且处于批阅页面 | 后置条件 | 批阅作业成功 |
活动步骤 | 教师选择需要批阅的作业并点击批阅选项系统提示教师将批阅信息输入 系统提示批阅成功并返回带批阅列表页面 | ||
异常处理 | 系统异常,并给出相应的提示信息 |
异常处理 系统异常,并给出相应的提示信息
编号 | 206 | 用例名称 | 成绩分析 |
---|---|---|---|
使用人员 | 教师 | 扩展点 | 无 |
输入 | 系统自动跳转,不需要输入 | ||
系统响应 | 系统调取数据库中的信息 | ||
输出 | 系统跳转到学生成绩列表 | ||
前置条件 | 用户是教师并且处查看成绩页面 | 后置条件 | 查看成绩 |
活动步骤 | 教师点击成绩分析选项跳转之成绩列表查看成功,返回原界面。 | ||
异常处理 | 系统异常,并给出相应的提示信息 |
异常处理 系统异常,并给出相应的提示信息
编号 | 301 | 用例名称 | 完成作业 |
---|---|---|---|
使用人员 | 学生 | 扩展点 | 无 |
输入 | 完成的作业信息或上传附件 | ||
系统响应 | 将作业信息或附件写入数据库 | ||
输出 | 系统提示作业提交成功 | ||
前置条件 | 用户是学生并处于完成作业页面 | 后置条件 | 作业提交成功 |
活动步骤 | 用户点击“完成作业”按钮用户输入作业内容或上传附件用户完成输入,点击“发表留言”按钮返回原界面 | ||
异常处理 | 系统异常,并给出相应的提示信息 |
异常处理 系统异常,并给出相应的提示信息
编号 | 302 | 用例名称 | 查阅评级 |
---|---|---|---|
使用人员 | 学生 | 扩展点 | 无 |
输入 | 系统自动跳转,不需要输入 | ||
系统响应 | 系统加载数据库中相应的用户成绩信息 | ||
输出 | 系统跳转到自己成绩页面 | ||
前置条件 | 用户是学生并且处于查看成绩页面 | 后置条件 | 查阅评级 |
活动步骤 | 用户点击“查阅评级”按钮查阅成功,返回原界面 | ||
异常处理 | 系统异常,并给出相应的提示信息 |
异常处理 系统异常,并给出相应的提示信息
编号 | 303 | 用例名称 | 联系老师 |
---|---|---|---|
使用人员 | 学生 | 扩展点 | 无 |
输入 | 与老师反馈的信息 | ||
系统响应 | 系统将信息写入数据库,并提醒老师。 | ||
输出 | 反馈成功的提示信息 | ||
前置条件 | 用户使学生并处联系老师用户页面 | 后置条件 | 反馈成功 |
活动步骤 | 用户点击“联系老师”按钮用户输入反馈内容用户完成输入,点击“反馈信息”按钮 返回原界面 | ||
异常处理 | 系统异常,并给出相应的提示信息 |
异常处理 系统异常,并给出相应的提示信息
系统的使用者必须是教师分配的学生账号,而不能通过自己注册得到账号。一个学生账号信息有:学号、密码、真实名字、班级等信息。
用户登录:在登录时,如果用户名和密码正确,进入系统页面。
这里,将注册表单提交后,有后台structs检验是否符合要求,不符合要求跳转至密码错误页面页面并弹出提示框,符合要求后将跳转至登陆页面,并弹出提示框。 登录Form表单中的元素由账号和密码组成。
一个作业包含信息有:序号(id)、教学班、作业名称、发布日期、截止日期、作业内容等。需要完成对作业有关的管理操作,主要有:
(1)发布作业:增加作业信息到数据库内。
(2)修改作业:修改作业信息如要求等。
(3)查询作业:用教学班号为关键字查询
(4)删除作业: 删除作业一般是直接删除
作业展示功能没有用Jquery,虽然功能强大,但是确实没有JSP方便,直接用JSP调用
这里首先应该写出作业题目的实体类,用于MVC模式,通过DAO完成信息交互。发布作业将作业信息写入数据库。
对于用户的查询,通过Mysql语言的通配符%来代替,通过WHERE LIKE,从而达到模糊查询的效果,比如输入计算机,就要把计算机18-1、计算机18-2、计算机18-3、等班级的作业查出来,没有使用通配符_,是因为只能代替一个字,不符合我们的需求。
对于删除,直接从过调用Junit从数据库中删除数据即可。
对于浏览,我一开始打算用Jquery传Jason放到Html容器里,后来还是采用老师上课用的jsp方法,那我直接用JSP输出成一个表格就很方便,这里通过DAO,在JSP页面获得一个List,通过JSP的java表达式直接输出成一个表格,这里我觉得这个方法比他们方法要方便,前后端的分离是产品化开发的产物,而不是高效完成工作的用途,既然我开发全栈,那么我觉得JSP的方法更加适合我。
老师可以增加用户,可以单个导入也可以批量导入,单个导入等同于在管理员的权限下调用用户注册的接口,因此可以简化为用户注册,但是只能由教师进行操作。批量导入,首先要选择教学班号,然后按照学号 姓名两栏的Excel进行导入,默认密码是他的学号。
删除操作,是将学生信息从数据库中删除的操作,Servlet的实现跟作业删除相似,仅是调用不同的Dao。
学生可以查阅所布置的作业,老师按教学班号布置作业,然后学生可以查看,学生完成作业,将作业编号、学号以及完成内容写入数据库,成为一条记录,有时需要选择上传附件,数据库中由文件一栏的表项,存的是地址。上传的服务器后,会有专门的位置存放文件,查询时会返回一个URL。
学生可以根据老师的批阅记录联系老师,反馈批阅信息,具体实现跟提交作业一样,填入内容即可。都是形成一条记录写入数据库。
该系统分为两个角色:系统教师、学生用户。每种角色功能要求如下。
(1)系统教师
系统教师,可以完成系统中所规定的所有功能,且可以对所有数据具有操作权限,并可以对学生用户进行管理(删除),注意,当删除该注册用户时,对应于该用户的所有提交的作业记录也全部删除。
(2)学生用户
由老师进行注册用户,只能对分配给自己的作业记录有操作权限(完成和修改)。对于其它的学生的记录是不可见的。
字段名 | # | 数据类型 | 非空 | 自增 | 键 | 缺省 |
---|---|---|---|---|---|---|
TeaID | 1 | int | TRUE | FALSE | PRI | [NULL] |
TeaName | 2 | varchar(66) | FALSE | FALSE | [NULL] | [NULL] |
TeaPwd | 3 | varchar(55) | FALSE | FALSE | [NULL] | [NULL] |
字段名 | # | 数据类型 | 非空 | 自增 | 键 | 缺省 |
---|---|---|---|---|---|---|
id | 1 | int | TRUE | FALSE | PRI | [NULL] |
Name | 2 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
File | 3 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
TijiaoTime | 4 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
Student_id | 5 | int | FALSE | FALSE | [NULL] | [NULL] |
ZuoYeID | 6 | int | FALSE | FALSE | [NULL] | [NULL] |
FanKuiWenTi | 7 | varchar(255) | FALSE | FALSE | [NULL] | [NULL] |
字段名 | # | 数据类型 | 非空 | 自增 | 键 | 缺省 |
---|---|---|---|---|---|---|
id | 1 | int | TRUE | FALSE | PRI | [NULL] |
Name | 2 | varchar(66) | FALSE | FALSE | [NULL] | [NULL] |
File | 3 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
FileName | 4 | varchar(55) | FALSE | FALSE | [NULL] | [NULL] |
Time | 5 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
Deleted | 6 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
字段名 | # | 数据类型 | 非空 | 自增 | 键 | 缺省 |
---|---|---|---|---|---|---|
id | 1 | int | TRUE | FALSE | PRI | [NULL] |
NeiRong | 2 | varchar(2000) | FALSE | FALSE | [NULL] | [NULL] |
Time | 3 | varchar(55) | FALSE | FALSE | [NULL] | [NULL] |
Student_ID | 4 | int | FALSE | FALSE | [NULL] | [NULL] |
Tea_HuiFu | 5 | varchar(2000) | FALSE | FALSE | [NULL] | [NULL] |
HuiFu_Time | 6 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
字段名 | # | 数据类型 | 非空 | 自增 | 键 | 缺省 |
---|---|---|---|---|---|---|
stu_id | 1 | int | TRUE | FALSE | PRI | [NULL] |
Stu_Xuehao | 2 | varchar(66) | FALSE | FALSE | [NULL] | [NULL] |
Stu_Name | 3 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
Stu_Sex | 4 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
Stu_Age | 5 | varchar(55) | FALSE | FALSE | [NULL] | [NULL] |
Stu_Pwd | 6 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
字段名 | # | 数据类型 | 非空 | 自增 | 键 | 缺省 |
---|---|---|---|---|---|---|
id | 1 | int | TRUE | FALSE | PRI | [NULL] |
Name | 2 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
File | 3 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
YaoQiu | 4 | varchar(255) | FALSE | FALSE | [NULL] | [NULL] |
Fabu_Time | 5 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
JieZhi_Time | 5 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
Tea_ID | 6 | int | FALSE | FALSE | [NULL] | [NULL] |
字段名 | # | 数据类型 | 非空 | 自增 | 键 | 缺省 |
---|---|---|---|---|---|---|
Tea_id | 1 | int | TRUE | FALSE | PRI | [NULL] |
Tea_Xuehao | 2 | varchar(66) | FALSE | FALSE | [NULL] | [NULL] |
Tea_Name | 3 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
Tea_Sex | 4 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
Tea_Age | 5 | varchar(55) | FALSE | FALSE | [NULL] | [NULL] |
Tea_Pwd | 6 | varchar(50) | FALSE | FALSE | [NULL] | [NULL] |
(1)测试工具软件:Eclipse 2019-10
(2)操作系统:Windows 10
(3)浏览器:Google Chrome 87.0.4280.66 正式版 (x64 zh-CN)
(1)处理器:2.40 GHz Intel Core i7-8750H
(2)内存:24.00GB 非对称双通道
(3)图形卡:NVIDIA GeForce GT 1050Ti
(4)网络:1000M网卡
3.1 测试描述
对于单元测试,主要采用静态分析法和白盒测试方法,辅之以黑盒测试法进行设计。由于本系统主要为网页开发,并未涉及过多算法,且页面代码中并没有带有返回值的函数,因此单元测试(函数测试)在实现模块后直接测试,并进行改善。对于数据库中的数据操作的测试则包含在系统测试中。
在开发过程中,每当完成一个模块就进行一次测试,对于每个模块的每个功能也都进行了独立的测试。
3.2 测试结果
单元测试阶段完成后,已修复跳转BUG以及数据显示不全的BUG和缺陷,最后全部模块和组件测试正常,并无缺陷发现。
4.1 测试描述
集成测试,是在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,主要测试软件单元的组合能否正常工作。故本项目的集成测试重点是页面间的跳转是否正确以及页面间的参数传递是否正确。
对于页面间跳转的测试,主要测试单击本系统中的各个界面的导航链接提示是否跳转到相应界面。对于参数传递的测试,主要测试页面间传递参数所产生的结果是否正确。
4.2 测试结果
集成测试阶段完成后,本系统的各个界面的导航链接都能跳转到相应的界面,页面间传递参数所产生的结果正确。
5.1 测试描述
按照老师所给定的要求进行测试,每个功能都要进行测试,除此之外,个页面之间的跳转,Struts的跳转,等功能都进行了反复的测试。
我在调试这些功能时选择了按操作类型逐项调试,进行增删改查的调试,过程持续地比较久。在调试中出现了点击修改信息完成后,数据库中未进行更新的错误,后来经分析,是由于发送的请求里缺少了一些属性,导致操作失败。后来也都进行改正。
这是第一次接触框架的开发,比单纯的Web开发更加的工程化,商业化,一开始用的时候觉得这东西很麻烦后来发现,原来Struts2框架能够替代Servlet使用,大大减少类的创建个数,减少了工作量,确实有他的优点。慢慢的就用的顺手了,在写的时候也是查书,查资料发现Struts和最新的技术的Controller很相似,也就是说师傅领进门修行在个人,一门技术的只是将你领进门,技术的更新非常快,不能说SSM火就要去学SSM,那是对于上班找了工作的人来说,而对于学生,我们更多的属于学术,要学精髓,而不是一味追求最新的,就像李开复教授说的一样。
Struts2的拦截器一直没用好,正常拦截还是可以的,想把没登录的用户拦截在外边,不让他们访问主页以及各种功能页,但是一直没改出来,不是全部登陆不进去,要么就是全都放进去了,有时候还会在跳转页面被拦截,这一点是我比较遗憾的,因为时间比较紧张,希望在以后的时间能够更加熟练的使用Struts2框架以及融会贯通其他的框架技术。最后感谢张继军老师一学期的指导,获益匪浅。