项目 | 内容 |
---|---|
课程班级博客链接 | https://edu\.cnblogs\.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www\.cnblogs\.com/nwnu\-daizh/p/12416880\.html |
我的课程学习目标 | 掌握软件项目个人开发流程和Github发布软件项目的操作方法 |
这个作业在哪些方面帮助我实现学习目标 | 掌握软件的开发流程,学会使用PSP |
项目Github的仓库链接地址 | https://github.com/Fan-bozhen/Expriment |
实验内容
任务一:陈述学生疫情每日上报子系统使用体验
学校的疫情上报系统总体的使用感还是很好的,因为在使用过程中,系统刚开始有所不足的地方都被改进了。刚开始的问题比如,人数太多导致进不去,或者说个人信息无法被保存等等问题。都被解决的很好。之前系统中缺少有关于疑似患者的选项也被添加上了。总体来说,学校的疫情上报系统做的还好很好的。无论是电脑端还是手机用户都可以很好的完成疫情上报的过程。从学校的上报系统中我能学到很多的东西,用户使用体验在整个软件产品中确实占比很大一部分,这是很重要的,一个号的软件产品,应该八用户体验感和使用情况放在一个重要的位置。
任务二:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
在两类任务中,我选择了第一类任务:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
1.需求分析:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在**指导下,各级*部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
利用我们所学的知识,对于此次疫情防控中需要使用的疫情上报系统做一个命令行查询的程序。更方便管理人员的查询和使用。
2.功能设计:
结合任务要求,我对于本次项目的功能设计如下:
1.保存大量教职工/学生的防疫信息
2.设计命令行程序
3.能够将周、月信息使用柱状图展示。
4.支持使用学号和日期查询。
5.本月、本周、过去七天信息查询。
3.设计实现:
- 数据存储:
info表:用来存储学生信息
其中id为每个学生的学号,做主键,name为学生姓名,address为学生住址
risk表:用来存储学生每日上报信息
其中risk为学生是否患病,date为上报日期,学号id做外键链接info表,num为学生上报序号,做主键
- 功能实现:
- 工具:
1.python数据库连接函数MySQLdb
2.python日期时间函数datetime
3.python绘图函数matplotlib - 自定义函数:
1.IDDATE(学号日期查询)
2.DATE(日期查询)
3.THISMONTH(本月信息查询)
4.PAST7DAYS(过去七天信息查询)
5.LASTWEEK(上周信息查询)
- 工具:
4.测试运行:
- 主界面:由于python文件在命令行运行有乱码所以我改成了英文
- 1.通过学号和日期查询
- 2.通过日期查询
3.查询本月信息并绘制柱状图
- 4.查询过去七天信息并绘制柱状图
5.查询上周信息并绘制柱状图
5.部分代码展示:
这部分的代码主要展示通过学号和日期查询以及绘制图形函数
#打开数据库连接
db = MySQLdb.connect("localhost", "root", "root", "reporting", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
#绘制图形
def Matplotlib(a,b):
name_list = ['have risk','not risk']
num_list = [a,b]
plt.bar(range(len(num_list)), num_list,color='rgb',tick_label=name_list)
plt.show()
#学号日期查询
def IDDATE(n,p):
sql = "select risk.risk,risk.date,risk.id,info.name,info.address \
from info,risk \
where info.id = risk.id and info.id='%d'and risk.date='%s'"%(n,p)
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results1 = cursor.fetchall()
sql = "select count(*) \
from risk,info \
where info.id = risk.id and info.id='%d'and risk.date='%s'"%(n,p)
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results2 = cursor.fetchall()
#将读出数据转换成整型
b=int(np.array(results2))
if b==0:
print("No infomation for this day\n")
elif b>0:
print ("risk date id name address")
#每一项都输出
for it in results1:
for i in range(len(it)):
print it[i],
print ('\n')
6.展示PSP:
PSP2.1 | 任务内容 | 计划需要完成的时间(min) | 实际需要完成的时间(min) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
·Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 30 |
Development | 开发 | 920 | 1350 |
·Analysis | 需求分析 (包括学习新技术) | 50 | 100 |
·Design Spec | 生成设计文档 | 60 | 80 |
·Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
·Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 40 | 60 |
·Design | 具体设计 | 60 | 40 |
·Coding | 具体编码 | 400 | 600 |
·Code Review | 代码复审 | 100 | 50 |
·Test | 测试(自我测试,修改代码,提交修改) | 100 | 180 |
Reporting | 报告 | 120 | 120 |
·Test Report | 测试报告 | 50 | 90 |
·Size Measurement | 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 20 |
实验总结:
本次实验我自己认为我做的并不是很好,本来是想试着用C语言实现以下系统的设计的,但是我的code blocks和dev C++都是32位的,和64位的mysql不能连接,所以想用python实现,刚好利用这次机会学习一下python。在动手实践之前并没有先设计PSP和学习先做好预备工作,而是像以前一样准备直接上手写代码,但是,等到开始动手做才发现,之前只在脑海里想了一遍的设计思路都有很多问题,实现起来很麻烦而且不合理。所以又回头好好准备了一下PSP和在实验之前的准备工作,上手就容易多了。后来我把记录PSP时间生成表格很直观的展现出来,看到了写代码不是软件工程的第一要紧事,前期的设计规划和思考是更重要的。