201771030130-张芹 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
我的课程学习目标 | 掌握软件项目个人开发流程和Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 掌握软件的开发流程,学会使用PSP |
项目Github的仓库链接地址 | https://github.com/zhangqin1013/anti-process |
实验内容
任务一:陈述学生疫情每日上报子系统使用体验
学生疫情每日上报子系统在刚开始使用的时候经常进不去,需要刷新好多次,而且个人信息每次都需要填写,使用很不方便。在后期每次打卡时都会选择错过高峰期,所以进入系统很快,而且系统也做了一些改进,其对于我们已填写的信息在选项栏中已经填好,如果自身情况没有变动的话信息将无需再反复填写,这使系统使用起来要比以前方便很多。但是最近可能是因为开学的缘故,每天早起打卡的人比较多,有时候进入系统时间比较长,而且数据也加载很慢。
任务二:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
在两类任务中,我选择了第一类任务,任务内容如下:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
1.项目开发背景简介:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
2.需求分析
根据上述项目开发背景以及任务的描述,可以得到任务一的需求分析如下:
(1)根据疫情统计数据,对数据进行整理并将其存储。
(2)设计命令行程序。
(3)对所存储的数据进行简单的操作。
(4)对数据在操作的基础上进行可视化。
功能设计
(1)基本功能:
支持查询某人在某一天的疫情情况。
查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果
(2)拓展功能:
查询全部确诊信息
录入信息
查询某天的疫情统计情况,并用柱状图显示
3.设计实现
(1)数据部分:
在数据部分,利用自动生成程序,随机生成了大量疫情数据并将其存入数据库中,其中主要包括九项信息,如下图所示:
其中id为学号,name为姓名,sex为性别,area为所在省份,sy0为是否确证,sy1为是否有疑似病例,sy2为是否在武汉,sy3为是否与相关人员接触,Dtime为时间。
(2)功能实现:
在功能实现部分主要通过定义类和相关函数来实现,主要有以下类:
数据库连接类
数据操作类(包含相关查询以及数据插入的函数)
柱状图生成类(包含柱状图的实现与柱状图的设置函数)
操作选项显示类(主要是对选项的设置)
根据上述的结构定义,项目中所需的每个操作都由专门的函数实现,后面通过调用各类中的函数来实现相关功能,并且在程序出错时能够快速找到错误并改正。
4.测试运行
(1)主页面
(2)当前确诊信息查看
由于数据随机生成,有一些数据会重复出现。
(3)疫情具体信息查询
通过日期查询
通过学号查询(由于数据随机生成,学号查询时可先查看全部信息)
通过学号和日期查询
(4)疫情具体信息录入
(5)疫情信息图表显示(按性别划分)
某天疫情信息统计
最近一周确诊信息统计
本月确诊信息统计
上月确诊信息统计
将项目打包成可执行的jar文件
5.主要代码
//柱状图中文字乱码问题的解决
//柱状图显示设置
public void SHOW(JFreeChart freeChart,int width,int height) {
//以面板显示,创建一个图表面板
ChartPanel chartPanel=new ChartPanel(freeChart);
//设置大小
chartPanel.setPreferredSize(new java.awt.Dimension(560,400));
//创建一个主窗口来显示面板
JFrame frame=new JFrame("疫情统计图");
frame.setLocation(500,400);
frame.setSize(width,height);
//将图表面板设置为主窗口的内容面板
frame.setContentPane(chartPanel);
//显示主窗口
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
//设置图表
freeChart.getTitle().setFont(new Font("隶书", Font.ITALIC, 15));//设置标题
//设置图例类别字体
freeChart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
freeChart.setBackgroundPaint(Color.WHITE);
CategoryPlot categoryPlot=freeChart.getCategoryPlot();//用于设置显示特性
categoryPlot.setBackgroundPaint(Color.WHITE);
categoryPlot.setDomainGridlinePaint(Color.BLACK);//分类轴网格线条颜色
categoryPlot.setDomainGridlinesVisible(true);
categoryPlot.setRangeGridlinePaint(Color.GREEN);//数据轴网格线条颜色
CategoryAxis domainAxis=categoryPlot.getDomainAxis(); //水平底部列表
domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14)); //水平底部标题
domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12)); //垂直标题
ValueAxis rangeAxis=categoryPlot.getRangeAxis();//获取柱状
rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15)); //设置柱状标题
CategoryAxis axis = categoryPlot.getDomainAxis(); //x轴
axis.setMaximumCategoryLabelLines(10); //标题行数,每个字显示一行
axis.setMaximumCategoryLabelWidthRatio(0.5f); //每个标题宽度,控制为1个字的宽度
NumberAxis axis1 = (NumberAxis)freeChart.getCategoryPlot().getRangeAxis();
//axis1.setTickUnit(new NumberTickUnit(0.5D);//0.5为一个间隔单位
axis1.setTickUnit(new NumberTickUnit(1D));//1为一个间隔单位
}
6.项目总结
在这次项目完成过程中运用了PSP,对项目各个阶段的任务都做了明确的划分,在项目实现阶段能够很好的按照PSP去进行,合理的利用了时间,并且项目的完成度及质量也都有所提高。通过做这次项目,认识到了PSP的重要性,同时对软件的项目的个人开发也有了一定的了解,并且学会了用自动生成程序去生成大量数据以完成项目的测试。但是经过这次项目实践也认识到自己在一些基础知识上有一定程度的欠缺,而且动手实践能力也有点薄弱,所以在后期通过学习相关知识一定会尽快补上这些不足。
7.PSP展示
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 40 | 30 |
·Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 40 | 30 |
Development | 开发 | 800 | 1300 |
·Analysis | 需求分析 (包括学习新技术) | 100 | 240 |
·Design Spec | 生成设计文档 | 30 | 60 |
·Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
·Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 40 | 60 |
·Design | 具体设计 | 90 | 120 |
·Coding | 具体编码 | 380 | 500 |
·Code Review | 代码复审 | 60 | 100 |
·Test | 测试(自我测试,修改代码,提交修改) | 100 | 220 |
Reporting | 报告 | 90 | 130 |
·Test Report | 测试报告 | 50 | 90 |
·Size Measurement | 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 30 |
在上述PSP表中可以看出,在具体编码以及测试部分所花费的时间与自己所估算的理想时间有很大的差距。在具体编码部分主要是对生成柱状图部分不太熟悉,有很多地方都要不断去修改,所以在编码时耗费了很长时间。其次是在测试的时候,刚开始只是用一些小数据去测试,后面在用大量数据测试的时候会出现一些问题,而且在测试过程中会发现有些功能还需进一步改进,所以在测试部分也花费了较多的时间。
任务三:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中,完成个人项目报告博文作业。
总结
在完后项目的这些时间,充分认识到了合理安排任务的重要性,对每一部分的任务进行划分能够督促我去及时完成相关模块,而且在遇到不太清楚的知识时也会有一定的时间去学习,通过做这次个人项目,也提高了我解决问题和分析问题的能力,虽然项目实现过程困难重重,但好在最终都做到了解决,并且按时完成了任务。总的来说,各阶段任务的划分在项目实现时能够给我很大的帮助,这也为我以后的项目实现提供了很好的经验。