201771030126-王元宗 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
课程学习目标 | 掌握软件项目个人开发流程和Github发布软件项目的操作方法 |
我的学习目标 | 掌握软件的开发流程,学会使用PSP |
项目Github的仓库链接地址 | https://github.com/Wang-yuanz/-2 |
任务1:陈述学生疫情每日上报子系统使用体验
通过使用学生疫情每日上报子系统,前期我觉得有一些问题,比如第一天早上系统崩溃,大家都进不去,而且每次使用都需要重新填报自己的信息,十分麻烦,经过一段时间的改正,系统变得非常灵活方便,使用起来觉得也很顺手,虽然有时候会遇到高峰期,进入的时候回比较卡,但是稍微等一下就可以进去。
任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
我选择第一类任务,任务内容如下:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
1.项目开发背景简介:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
2.需求分析
(1)统计疫情数据,对数据进行整理并存储
(2)对数据进行操作
(3)统计并可视化数据
3.功能设计
基本功能
(1)查询老师或学生在某一天的疫情情况。
(2)查询某天老师或学生疫情情况。
(3)查询当前确诊/疑似/在武汉/在湖北的人员信息
(4)查询10天内老师和学生的疫情统计情况,并用柱状图显示统计结果
系统功能
主要类
主要函数
4.程序设计实现
(1)数据部分:
在数据部分,保存了1000个教师和1000个学生10天的数据并将其存入数据库中,其中主要包括以下信息,如下图所示:
这是一张学生表,其中各项数据为 序号,姓名,学号,学院,班级,填报日期,是否在武汉,是否在湖北,是否疑似病例,是否确诊病例
这是一张教师表,其中各项数据为序号,姓名,学号,学院,填报日期,是否在武汉,是否在湖北,是否疑似病例,是否确诊病例
实现过程
如果想要实现查询某一天全部的疫情信息,只要将时间作为查询的条件来进行查询即可,写入到sql语句中就可以查询出全部的数据。在绘制柱状图方面,很感谢老师提供的帮助,我们在准备绘制柱状图的数据时,需要对数据库的数据进行查找,但是我们只需要计算所查到的个数,而不用将数据存储和输出。
5.测试运行
(1)主页面
(2)按照日期或者学号/教工号查询
(3)查询当前确诊或疑似/在武汉或在湖北人员信息
在武汉或在湖北人员
疑似/确诊
(4)用柱状图显示近十天统计结果
6.主要代码
public static void selectStuByIdAndTime() throws SQLException {
String sql = "select * from tb_stu where sno=? and time=?"; //书写sql语句
//加载驱动,创建连接
Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生学号和学生的报告提交时间:");//提示用户输入学生的学号和学生提交报告的时间
String sno1 = scanner.next(); //输入学号
String time1 = scanner.next(); //输入提交报告的时间
//将用户输入的内容存放,利用sql语句调用
ps.setString(1, sno1);
ps.setString(2, time1);
//创建一个List,用来存放查找到的数据
List<Stu> res = new ArrayList<Stu>();
ResultSet rs = ps.executeQuery();
//对学生信息进行查找,只要还有下一条数据就进行查找,
while(rs.next()) {
int id = rs.getInt("id");
String sno = rs.getString("sno");
String stuname = rs.getString("stuname");
String college = rs.getString("college");
String stuclass = rs.getString("stuclass");
String time = rs.getString("time");
String isinwh = rs.getString("isinwh");
String isinhb = rs.getString("isinhb");
String islike = rs.getString("islike");
String isconfirm = rs.getString("isconfirm");
Stu stu = new Stu(id, sno, stuname, college, stuclass, time, isinwh, isinhb, islike, isconfirm);
res.add(stu);
System.out.println(stu);
}
System.out.println(res.size());
//关闭链接
DBUtil.free(null, ps, conn);
}
7.总结程序如何实现软件设计的“模块化”原则
“模块化”之后,程序在修改一个问题时,如果不在同一个模块,能够很大程度上避免对其他模块的影响。通过做这次项目,我清晰的感受到了PSP的重要性,我学会了很多知识,比如:JAVA绘图,大量数据的生成等等,这也锻炼了自己的动手实践能力。
8.展示PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
planning | 计划 | 50 | 50 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 50 | 60 |
Development | 开发 | 1000 | 1500 |
Analysis | 需求分析 (包括学习新技术) | 150 | 200 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 50 | 50 |
Design | 具体设计 | 100 | 250 |
Coding | 具体编码 | 800 | 1200 |
Code Review | 代码复审 | 60 | 100 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 100 | 150 |
Test Report | 测试报告 | 100 | 150 |
Size Measurement | 计算工作量 | 30 | 50 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 30 | 30 |
通过PSP表的比较不难发现,我在具体设计和具体编码花费的时间与自己所估算的理想时间有很大的差距,在具体设计中,我程序设计的思路不清晰,有一些方面没有考虑清楚所以迟迟不能开始具体的编码过程,在具体编码过程中,因为有很久没使用Java语言,所以出了很多问题,在数据测试方面,小数据可以很快完成查询,但是要查询大量数据,查询速度不是很好,并且大量数据在控制台显示不是很全面,只能显示一小部分。
任务三:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中。
感谢观看~