课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
我的课程学习目标 | 1. 认真完成本课程学习; 2. 了解一个软件项目制作的完整过程; 3. 紧跟老师脚步,尽量多的进行实战演练。 |
这个作业在哪些方面帮助我实现学习目标 | 1. 写博客; 2. 提高编程能力; 3. 掌握GitHub的基本使用。 |
项目GitHub的仓库链接地址 | https://github.com/Jenna-yuan/DataStructure.Demo.CSharp |
主要目的
(1) 掌握软件项目个人开发流程;(2) 掌握GitHub发布软件项目的操作方法。
需求分析
随着19年底爆发的新型冠状病毒(2019-nCoV)感染的肺炎疫情,虽然影响了全国人民的生活,但同时也激励了各行各业以自身所处行业为基础和导向,为这个国家,这个社会做出了相应的贡献。就例如本次作业中所提到的:
中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为统计数据以及相应党的号召,我们学校也在西施易通APP上所开发的疫情上报系统,由于时间关系网信办处老师所开发出的简单疫情上报系统遭到了很多人的吐槽。很多人都认为有以下几点不足:
(1)界面太过简陋,但是所采集到的信息比较全; (2)填报时间是10点之前,相对于很多人来说很容易忘记这件事情,所以设计一个提醒功能会有更好效果; (3)后期补加“记忆”功能,给用户提供了很大的方便,而且也提高了效率。 |
功能设计
- 设计说明
本次设计我选择的是第二类开发要求:
1. 系统可采集学生疫情有效信息;2. 系统支持用户在线使用;3. 每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;4. 各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;5. 学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。
- 基本功能
(1)设计主界面,主界面上显示学生疫情填报和学院学校管理人员入口; (2)学生填报界面遵循学校所指定的信息采集方式,对学生信息进行全面的采集。学生提交信息后自动返回主界面; (3)设置学生填报截止时间为20点,来提高所采集更多数据的概率; (4)管理人员登录时设置了学校还是学院管理人员进行登录,但是两者所做的功能都是一样的; (5)管理人员登录成功后进入《西北师范大学疫情防控信息统计》页面,浏览所有学生填报的相关信息,并通过“导出”按键能够得到疫情数据的EXCEL文件。
- 拓展功能
此次设计预实现管理员可通过“信息统计”按键对所看到的数据进行统计,但未实现。
设计实现
- 数据相关设计实现
此次个人项目实现中,对涉及到的相关数据表,我将其分为两个:管理员表(admin)和学生疫情信息表(student-infor)这两张。其相关内容如下:
管理员表中设置了staus,其中0表示院负责人,1表示校负责人。
- 代码相关设计实现
编程过程中主要设置了学生和管理员两个类别,相关内容如下图所示:
其功能分别是: (1)学生类:实现相关疫情信息的上报; (2)管理员类:浏览统计数据,并可导出数据的相关EXCEL文件。
测试运行
-
代码运行测试
-
首页
-
学生信息填报
-
管理员登录
-
信息统计
-
导出文件
-
GitHub提交
代码片段
下面是实现登录界面的相关代码:
package com.nwnu.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.nwnu.pojo.Mannager;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object obj) throws Exception {
// 获取请求URL
String url = req.getRequestURI();
// 除login外,拦截所有控制
if (url.indexOf("admin") >= 0) {
return true;
}
// 获取Session
HttpSession session = req.getSession();
Mannager mannager = (Mannager) session.getAttribute("USER_SESSION");
if (mannager != null) {
return true;
}
// 不符合条件,添加提示信息,并页面转向
req.setAttribute("msg", "您还没有登录,请登录");
req.getRequestDispatcher("admin.jsp").forward(req, res);
return false;
}
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
}
总结——如何实现软件设计的“模块化”原则
模块化是把程序划分成独立命名而且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,而且可以完成指定的功能满足用户的需求。此次系统设计中,用户进入系统首先选择是学生身份还是管理员身份,从相应的入口进入。然后执行其相对应的功能。设计这些功能时,由于对项目的开发不是很熟练,所以,选择了最简单的方式,那就是将每个功能所对应的类分开来写,做到简单、明了和易读。该系统的“模块化”体现的就不是很明显。在以后的学习过程中,相信自己可以从实践过程中真正的理解“模块化”的内涵和重要性。
###PSP展示Planning | 计划 | 30 | 30 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 30 |
Development | 开发 | 1920 | 2003 |
·· Analysis | 需求分析 (包括学习新技术) | 20 | 20 |
· Design Spec | · 生成设计文档 | 5 | 6 |
· Design Review | · 设计复审 (和同事审核设计文档) | 4 | 6 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 4 | 4 |
· Design | 具体设计 | 25 | 20 |
· Coding | 具体编码 | 1000 | 1207 |
· Code Review | · 代码复审 | 18 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 90 | 120 |
Reporting | 报告 | 20 | 39 |
·· Test Report | · 测试报告 | 17 | 15 |
· Size Measurement | 计算工作量 | 5 | 7 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 5 | 5 |
小记
1、做项目期间出现错误,最好用特定方式记录下来。例如笔记本; 2、遇到问题尽量要自己搜寻各种方法自行解决; 3、本次设计时间稍微有点紧,以后要勤加练习,多谢程序,多做系统。