实验二《西北师范大学学生疫情上报系统》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
我的课程学习目标 | (1)掌握软件项目个人开发流程; (2)掌握Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | (1)在程序设计方面提高了自己的编程能力; |
项目Github的仓库链接地址 | https://github.com/lipeishan82/- |
实验内容
任务一:陈述学生疫情每日上报子系统使用体验
(1)之前使用的时候不能够记录前一天的信息,经过升级后,能够记录前一天的信息,这给信息不变的人提供了很大的便利;
(2)界面比较简洁,统计的防疫信息也比较全面;
(3)填写时间相对有限,存在当天忘记填写的情况,可以添加提醒的功能,这样可以减少当天数据不全的现象。
任务二:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
我选择了第一类开发:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
1.需求分析:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
2.功能设计:
- 基本功能:
- 查询某人在某一天的疫情情况
- 查询某种数据的周/月的疫情统计情况
- 用柱状图显示统计结果
- 扩展功能
- 对学生,教师以及患病人员信息查看
- 给出时间的区间进行查询段时间内的人员疫情情况
- 对于教师,教师疫情信息,学生,学生疫情信息的添加
3.设计实现:
我的数据库设计:我设计了四张表,分别是教师表,学生表,教师防疫表以及学生防疫表,我认为教师表和学生表是从学校的教务处可以直接获取,而且疫情突然,如果重新组建一张新的表格未免有点浪费时间,故没有将信息表和防疫表组建为一张表。
具体设计如下:
教师表(工号,姓名,性别,所在省份,所在城市)
教师防疫表(工号,是否有症状,是否确诊,当日温度,填写日期)
学生表(学号,姓名,性别,所在省份,所在城市)
学生防疫表(学号,是否有症状,是否确诊,当日温度,填写日期)
根据数据库我创建了如下几个类:
(1)定义了一个用来进行数据库连接的类。
(2)定义学生类,申明私有变量student_id(学号),stu_sex(性别),stu_pro(学生所在省份),stu_city(学生城市);教师类定义变量内容与教师表的数据库相对应,还有教师防疫信息表以及学生信息表在这两个类中除了数据库对应的两个表中的属性外除此之外我还定义了一个统计确诊人数的变量checknum,方便产生柱状图。
(3)定义了用来进行数据操作的类,分别可以对教师,学生以及二者同时进行操作。
(4)定义了用来产生柱状图的类,由于我的柱状图的设计是将学生和教师分别产生对应的柱状图,故含有两个不同的类。采用JfreeChart技术实现。
重要函数:
(1)数据库连接,如果这个不存在,那么连接不上数据库更谈何进行数据的查询以及柱状图的生成。
(2)产生数据集的函数,它所产生的数据对于后面产生柱状图的结果表起了至关重要的作用。
(3)进行数据库操作的一系列函数,是输出精确的第一步。
4.测试运行:
我将我的项目导出为jar,可以直接在命令行下进行运行,由于数据是我向数据库中导入了2000条数据,可能与实际的情况有一定的出入,而且数据量较少,当数据量过大时可能会出现一定时间上的影响
上图为在命令行中,执行了关于人员及信息添加的功能
以上两张图显示了关于教师和学生的防疫信息,可以看出在命令行中添加的数据成功
还可以进行确诊人员信息输出
根据日期以及ID可以进行查询,也可以只提供id进行全部信息的查询,以及提供一段时间的所有人员的信息查询,由于学生和教师都可以进行故在此仅展示一个
柱状图的显示是根据对于确诊人员每日男女人数进行制作的
教师柱状图如图:
学生柱状图:
5.关键代码:
/**
* 使用查询数据库的数据
* @return 数据集
* @throws Exception
*/
private static CategoryDataset getDataSet() throws Exception {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
java.util.List<Teacherinfo> list = CheckTeacher();
//装成JFreeChart需要的数据集
for (Teacherinfo teacherinfo : list) {
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
String str = sdf.format(teacherinfo.getDate());
dataset.addValue(teacherinfo.getChecknum(), teacherinfo.getSex(), str);
}
return dataset;
}
/**
* 根据工号查询信息
*
* @param con 连接数据库
* @param teacher_id 针对teacher_id进行查询
*/
public void selectTeacherById(Connection con, int teacher_id) throws SQLException {
String sql = "select * from teacher t, teacher_info t1 where t.teacher_id = t1.teacher_id and t.teacher_id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, teacher_id);
rs = pstmt.executeQuery();
display();
}
6.总结
我对于每一个对象创建了各一个类,针对不同人群的查询搜索等操作也进行了不同类的创建,以及最后柱状图的展示也是进行分类编写,由此实现了模块化。刚开始撰写博客时数据比较少,所以整体的速度比较快,除了柱状图的产生输出可能要用近10s的时间产生,然后我又将数据增加到了2000条,速度稍微慢了一些,再后面数据不断增加后,我也会不断进行测试该项目实现功能的耗时情况。由于后面数据库增大截图不好截,所以,截图时是在较小的数据库中进行的。代码存在了一些冗余的情况,我也会不断进行修正,删减。
7.PSP:
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 8 | 8 |
·Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 8 |
Development | 开发 | 665 | 710 |
·Analysis | 需求分析 (包括学习新技术) | 60 | 100 |
·Design Spec | 生成设计文档 | 20 | 20 |
·Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
·Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 15 | 15 |
·Design | 具体设计 | 90 | 120 |
·Coding | 具体编码 | 360 | 320 |
·Code Review | 代码复审 | 60 | 45 |
·Test | 测试(自我测试,修改代码,提交修改) | 60 | 90 |
Reporting | 报告 | 65 | 90 |
·Test Report | 测试报告 | 30 | 60 |
·Size Measurement | 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 15 | 20 |
由于在每次运行过程中,多多少少会出现一些不可避免的问题,所以在不断改进,在最后撰写博客的时候,还是觉得有些功能有问题,也在不断修改自己的程序,希望有较好的体验感。之前撰写程序的时候其实没有很注意代码规范,通过这次查看《码出高效_阿里巴巴Java开发手册》学习了代码规范,对以后的代码撰写以及可读性有了很大的帮助。
任务三:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中,完成个人项目报告博文作业。
已将工程提交GitHub 在这里,期中撰写README时可以参考这篇博客哟
已完成博客撰写
总结:
通过此次防疫系统的实现,我对PSP的重要性有了深刻的了解,也对SQL语句的书写有了一定的回顾,同时也学会了如何利用JFreeChart进行图形用户界面的设计,提高了编程能力同时也知道了关于编程规范的具体实施。我也会不断提升我的系统性能,向着更好的方向努力。