项目 | 内容 |
班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
软件工程课程要求 | https://www.cnblogs.com/nwnu-daizh/p/12369881.html |
课程学习目标 | (1)自行实现项目任务(2)掌握Github发布软件项目的操作方法; |
如何实现学习目标 | 做好规划、克服畏难情绪、多读多问多思考 |
Github仓库地址 | https://github.com/Tycmoon/test1 |
项目开发背景
-
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。 -
任务1:陈述学生疫情每日上报子系统使用体验;
(1)初期使用时,网络承载量较低容易崩掉;
(2)界面不美观;
(3)提交的时候要点两次按钮且没有反馈。
(4)不用每日重复填写(很方便)
(5)没有填报提醒,容易忘记。 -
任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
我选择第一类开发。
要求:有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序,支持查询某人在某一天的疫情情况,查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。 -
1.需求分析
在此次疫情下,学校都需要每日调查人员情况并及时做出统计分析,光靠人为的工作量实在是太大,因此我们需要一个管理系统来登记疫情情况并对上报的数据进行分析。在本次设计中,我将使用python实现。
-
2.功能设计
作为学校内部人员,我们需要对上报的数据具有以下功能:查看所有人员情况;查询某一人情况;修改、删除某条数据(极少数情况),并对所统计到的数据进行分析(制成统计图简单明了)
-
3.设计实现&测试运行
在本次设计中主要用到的函数有add()、del()、mod()、show()、read()、save()以及main函数,它们分别对应项目功能的添加信息、删除信息、修改信息、显示信息以及存入文件和文件的读取,从main函数中调用前面的这些函数来实现项目功能。
0.菜单栏
1.录入信息
2.显示信息
3.删除信息
4.修改信息
5.年龄排序(高到低/低到高)
6.存入txt文件
7.统计图
-
4.关键代码片段
import csv
import matplotlib
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#读取表格
df = pd.read_excel('E:\python\excel.xlsx')
total = pd.read_excel('E:\python\total.xlsx')
#允许显示汉字
plt.rcParams['font.sans-serif'] = ['SimHei']
#窗格大小及标题
plt.figure(figsize = [10,7])
plt.suptitle("疫情统计图")
#柱状图,做一个可叠加对比的柱状图
plt.bar(x = total.index.values,height = total['fever'],color = 'steelblue',
label = 'fever',tick_label = ['2020/1/19','2020/1/20','2020/1/21'])
plt.bar(x = total.index.values,height = total['infect'],color = 'yellow',
label = 'infect',bottom = total['fever'],
tick_label = ['2020/1/19','2020/1/19','2020/1/21'])
plt.bar(x = total.index.values,height = total['school'],color = 'red',
label = 'school',bottom = total['fever']+total['infect'],
tick_label = ['2020/1/19','2020/1/20','2020/1/21'])
plt.ylabel('人数(人)')
#图例
plt.legend(loc = 'best')
plt.show()
-
6.小结
-
功能不足
在已实现的功能中,每次添加信息都会把前一次添加好的信息覆盖掉。
还没有找到把txt文件存为csv文件的方法,导致疫情登记表和疫情统计表是两个表。
能够从几百条数据的csv文件中查找某人某一天的情况,但无法从该csv文件中读取需要的行列重新生成csv文件然后制成统计图。
-
项目自评
能够查询某人在某一天的情况,但还没有实现查询某种数据的周/月的疫情统计情况;统计图的数据录入太少。
以上不足的地方,我还会不断改进。 -
“模块化”原则
在本次的程序编写中,我所理解的“模块化”是指把我们所要实现的功能看成一个个子模块,最后经过主程序的调用而构成一个新系统。这些子模块可以不断的融入新模块,即增加越来越多的功能。将程序模块化可以降低程序的复杂度,使得后续软件调试、维护更简单。对应到此次完成的项目中,我认为每个函数所实现的一个功能就是“子模块”,多个功能(模块)组合在一起便构成了一个系统。当然,我们后续还会对每个功能不断的修改完善,这样分模块的设计会大大降低我们后续修改的难度,逻辑清晰、节省时间。
-
-
7.PSP展示
PSP2.1 | 内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 30 | 20 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 70 |
Development | 开发 | 600 | 900 |
Analysis | 需求分析 (包括学习新技术) | 120 | 300 |
Design Spec | 生成设计文档 | 30 | 40 |
Design Review | 设计复审 (和同学审核设计文档) | / | / |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
Design | 具体设计 | 240 | 300 |
Coding | 具体编码 | 480 | 120 |
Code Review | 代码复审 | 60 | 50 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 180 |
Reporting | 报告 | 60 | 120 |
Test Report | 测试报告 | 40 | 20 |
Size Measurement | 计算工作量 | 40 | 30 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 40 | 60 |
总结反思:对于此次的项目设计,我有很多地方还很不完善。一开始拿到题目时,我打算选择C语言开发,因为之前数据结构的课程设计中有个题目跟这个有类似之处(高校人事管理系统),当我在sql server中建好库、表之后,对于C与数据库的链接犯了难,又想到数据库课程中我们学过java和数据库的链接,要不改用java?但是我对于java的掌握实在是不怎么有信心。最后我选择了python,因为在上学期的一门课中用到了python分析数据,对于此次题目要求(查询和对数据做统计)很符合。但是做的时候又出了各种问题,比如:如何找数据(我用excel建的,自动填充,花费了不少时间);如何将新添加的数据读入文件(只实现了读入txt,不能读入现有的csv中);还有很多问题,比如缺少包、格式错误什么的......因此,在psp中的需求分析和具体设计阶段的实际用时比预期长了许多,开发时间也比有效的具体编码时间多了许多。希望能借此次教训,在以后的项目开发中能够实打实的考虑好项目需求、自身情况,选定一个方向不再更改,尽量避免做无用功。除此之外,在需求分析中,我的预期和实践相差较大,因为我原本以为熟悉一下python的书写规范就可以上手开发了,但是没有预料到好久没有写代码了,尤其是python对数据的处理这块的知识有了好多模糊的地方,不得不查阅一些资料、视频来唤醒记忆。在这次的开发中,我更加体会到用python分析数据和做项目差别确实蛮大,更何况我这只是一个最简单的、还未成型的项目。总之,在此次的实验内容中我学到了许多东西,python小白上路了,也不知道能不能走上大路......
-
任务三:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中。