项目 | 内容 |
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
我的课程学习目标 | (1)掌握软件项目个人开发流程;(2)掌握Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 个人项目的开发以及使用GitHub方面 |
项目Github的仓库链接地址 | https://github.com/1957877441/System |
任务1:陈述学生疫情每日上报子系统使用体验;
这个系统刚开发出来使用的第一天是不完善的,网络拥堵进不去,到了第二天使用的时候,这个问题已经解决了,但是还是有问题,就是每次同样的数据都需要用户手动输入进去,到目前为止,这个小问题也已经解决了,没有变化的数据会保留下来,不需要再去一次次输入了。就是有个小小的遗憾,没有提醒功能,用户老是会忘记打卡。总的来说这个系统还是不错的,以表单的方式简单做了一个系统,功能也随着用户的使用在不断的完善,感谢开发人员的辛苦付出。
任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
一、项目实施过程:
1、需求分析
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施:2020年1月23日10时起对武汉“封城”,全国31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
参考文献:
1.中国抗击新型冠状病毒:进展和影响[EB/OL].(2020-02-01)/[2020-03-04]. http://cn.chinadaily.com.cn/a/202002/01/WS5e358d1fa3107bb6b579c92b.html
《西北师范大学学生疫情上报系统》的用户需求:
为配合防控机构采集疫情信息,对学校各类人员的基本情况、所在区域及活动轨迹及健康状况进行收集,开发此疫情上报系统。用户的需求如下:
管理员能够登陆系统,对普通用户的信息进行增删查等功能,可以查看与疫情相关的信息生成的柱状图。
2、功能设计
项目开发要求:
- 第一类开发要求:
有一个数据文件,保存了100天2000个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况,查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。 - 第二类开发要求:
1、系统可采集学生疫情有效信息;
2、系统支持用户在线使用;
3、每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;
4、各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;
5、学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。 - 我的选择:
第一类开发
基本功能:
- 存储学校中学生/教职工的基本信息、所在区域、每日的健康情况;
- 查询某人在某一天的疫情情况;
- 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
扩展功能:
- 管理员可以登录系统;
- 管理员可以添加用户信息;
- 管理员可以删除用户信息。
3、设计实现
- 数据存储:
之前想的是读入一个“.txt”的数据文件,后来仔细考虑之后,觉得用数据库来存储更好一点,以便后期对项目进行改进。
本项目用到了两张表:- manager(uid,uname,upass,type)其中,uid是管理员的工号,uname是管理员的登录名,upass是管理员的登录密码,type是登录权限,type=1表示是管理员,type=2则表示普通用户登录。
- user(academy,grade,date,name,phone,province,city,region,IsReturn,IsSuspect,IsInfect)其中,academy表示的是用户所在学院,grade为用户所在年级,且grade可以为空,为空时user表可用来表示职工信息,date表示用户的上报日期,name表示用户的姓名,phone表示用户的联系电话,province表示用户所在省,city表示用户所在市,region表示用户所在区,IsReturn表示用户是否返校,IsSuspect表示用户是否有疑似症状,IsInfect表示用户是否确诊。
- 项目程序的设计
项目用到了五个包:- com.tjl.bean 用户类
该包用来封装用户类,有两个类:User.java和Manager.java。 - com.tjl.controller 控制层
该包中有Control.java,该类中有系统的入口,控制业务逻辑。 - com.tjl.dao 对数据库访问的实现类
ManagerDao.java这个接口来实现管理员的增删查等操作。
ManagerDao_Imp.java是ManagerDao.java这个接口的实现类。
Selectbar.java用来实现柱状图。 - com.tjl.jdbc 数据库连接
JDBCUtils.java这个类用于JDBC工具类的封装,连接、释放数据库资源。 - com.tjl.view 视图包
View.java包含各类视图菜单。
此外,我用了以下函数: - managerMenuView()函数:管理员菜单视图
- addMenuView()函数:管理员添加普通用户信息
- deleteMenuView()函数:管理员删除普通用户信息
- selectMenuView()函数:查看用户的信息
- barMenuView()函数:查看疫情情况生成的柱状图
- com.tjl.bean 用户类
4、测试运行
基本功能
- 查询功能:
- 按照学院进行查询
- 按照所在地查询
- 按照是否有疑似症状查询
- 按照是否返校查询
- 查看确诊人员的柱状图
- 查看所在地是武汉的柱状图
-
查看各个学院某一天的确诊情况
-
查看某个学院某周的确诊情况柱状图,下图是查询的计工院的
扩展功能:
- 管理员登录系统:
- 管理员添加用户信息
- 管理员可以删除用户信息。
5、代码展示
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
// 静态语句块
static {
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
// 创建Property类型的对象
Properties p = new Properties();
// 加载流文件
try {
p.load(is);
driver = p.getProperty("driver");
url = p.getProperty("url");
username = p.getProperty("username");
password = p.getProperty("password");
// 加载Mysql驱动
Class.forName(driver);
// System.out.println("驱动加载成功");
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
// 获得连接对象的方法
public static Connection getConnection() {
try {
// System.out.println("数据库连接成功");
return DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("数据库连接失败");
}
return null;
}
// 释放资源的方法
public static void close(Connection con, Statement st, ResultSet rs) {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (st != null) {
st.close();
st = null;
}
if (con != null) {
con.close();
con = null;
}
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
之所以展示数据库连接部分的代码,是因为我觉得这个方法虽然简单,但是在没有掌握之前实现起来还是有一定困难的。
6、总结
我编写的代码封装成了不同的包,每个包负责一部分,一个类实现一个特定的功能。通过Control.java来调用其他相应的函数来实现整个项目的功能。每个包中有不同的模块来是想相应的功能,实现了简单的模块化功能,但是程序稍微有点问题,在查看柱状图的时候,需要调用两次,柱状图才会显示出来,在后期,我会改进这些问题。
7、展示PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 8 | 7 |
·Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 7 |
Development | 开发 | 480 | 2880 |
·· Analysis | 需求分析 (包括学习新技术) | 30 | 35 |
·Design Spec | 生成设计文档 | 5 | 30 |
·Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
·Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
·Design | 具体设计 | 300 | 450 |
·Coding | 具体编码 | 600 | 2700 |
·Code Review | 代码复审 | 60 | 120 |
·Test | 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 60 | 100 |
··Test Report | 测试报告 | 50 | 110 |
·Size Measurement | 计算工作量 | 5 | 7 |
·Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 8 | 20 |
二、经验分享:
通过做项目发现自己有好多的问题,好久不写代码了,有点生疏,关于java编程的好多东西都忘了,就连一些快捷键也忘得差不多了,相信好多人跟我有一样的感受。在本次的项目中,我也学习到了很多知识,重温了java编程,也学会了生成柱状图的方法。感觉还是做项目的经验太少了,以至于在写程序的时候花费了大量的时间。在本次做项目的时候发现了自己的编程能力还是很弱的,了解的技术方法也很少,在今后的学习中,需要花费大量的时间去尝试做一些项目,我还学到一个不错的方法,就是我们在写程序的时候,可以给每个方法写一个测试类,这样就便于项目的检查了。动动脑子,动动手,还是收获很大的。能力不足的时候不能退缩,要用于迎难而上。遇到不会的就要不断的学习去解决而不是把问题放着。