201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)。
(2)掌握Github协作开发程序的操作方法。
实现目标 (1)提高了我的动手能力;
(2)体验了结对编程;
(3)掌握了GitHub的基本操作。
结对方学号-姓名 201771030122-王瑞梅
结对方Github项目仓库链接 https://github.com/xcpxhyyqx1128/shiyansan
结对方博客链接 https://www.cnblogs.com/xcp-yyqx/p/12561517.html
项目GitHub的仓库链接地址 https://github.com/hbc110/hbc110.github.io

任务二评论区截图:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

代码复审核查表:

项目
概要部分 (1)代码符合需求和规格说明;
(2)代码设计考虑周全;
(3)代码可读性强;
(4)代码容易维护;
(5)代码的每一行都执行并检查过了。
设计规范部分 (1)设计遵从已知的设计模式;
(2)有个别硬编码或者字符串的存在;
(3)代码可移植性强;
(4)开发者新写的代码可以用已有的Framewoek中的功能实现;
(5)没有无用代码可以清除。
代码规范部分 (1)修改的部分符合代码标准和风格。
具体代码部分 (1)对错误进行了处理,对于调用的外部函数,检查了返回值并处理了异常;
(2)参数传递无错误,长度以0开始计数;
(3)边界条件都有处理,循环未出现死循环;
(4)使用了断言来保证我们认为不变的条件得到满足;
(5)资源的利用从内存中申请和释放,有可能存在资源泄露风险,还有优化空间;
(6)数据结构中未见到用不到的元素。
效能 (1)代码效能良好,最坏情况无法运行,不过都是环境问题;
(2)代码中未见多余循环,无需优化;
(3)系统和网络的调用有可能超时,无法处理。
可读性 (1)代码可读性好,有足够多的注释。
可测试性 (1)代码无需更新或创建新的单元测试;
(2)数据库测试未见异常;
(3)网页测试未见明显异常。

结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据截图:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

clone成功截图:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

  1. 需求分析:

    (1)可采集全校各类师生员工疫情信息;

    (2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;

    (3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;

    (4)人机交互界面要求GUI界面(WEB页面、APP页面都可);

    (5)附加分功能:定时填报提醒
    总结:本次实验准备用python完成,寻找到了matplotlib(用来画可视化图像),tkinter(用来做图形用户界面),pymysql库(用来链接数据库),smtplib(用来发送提醒邮件),xlwt库(用来导出excel表),本次数据纯属虚构,请浏览者勿作他用。

  2. 软件设计说明:

    本次软件设计功能思维导图如下:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

软件实现及核心功能代码展示:

流程图如下所示:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

首先需要构造数据库表,数据库名称为yiqing,做两张表一张管理员登录表admin,一张存储信息表infotable。

admin表如下图所示:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

infotable表如下图所示:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

主要函数图如下:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

StatPage类:主要显示主界面;

PageTwo类:学生/教职工信息采集页面;

usr_login1类:二级负责人登录界面;

PageFour:疫情防控填报统计类,其中还有两个函数showmessage(查看汇总信息)和showTianBao函数(数据可视化,生成柱状图),

usr_login2类:防控办负责人登录界面;

PageFive:高级查询功能,其中含有showMessage函数(查看汇总信息),showImage函数(数据可视化,生成柱状图),pageExcel函数(导出汇总信息到excel本地文件)和pageEmail函数(定时填报发送邮件功能)。

测试运行:

  • 主界面:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

  • 疫情上报界面:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

  • 管理员界面:

    登录界面:
    201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

    防控办负责人界面:

    查看所有信息:

    201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

    信息填报情况:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

疫情信息情况:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

导出excel表:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

邮件提醒:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

高级查询功能:
主界面:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

学生教师确诊情况:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

学生教师填报情况:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

二级部门负责人界面:

主界面:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

查看当前部门信息:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

显示当前部门柱状图:

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

导出excel表:
201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

  1. 代码片段:

全部代码已上传至GItHUb,以下python发送邮件和导出excel的代码:

发送邮件代码:

`

import smtplib
import time

HOST = 'smtp.qq.com' # 服务器主机,相当于第三方客户端

PORT = '465' # 端口 使用SSL,端口号465或587

FROM = '' # 发件人的邮箱账号
TO = [''] # 接收邮件的人的账号.

SUBJECT = '上报疫情提醒' # 邮件的标题

CONTENT = '请速速上报疫情' # 邮件的内容

smtp_obj1 = smtplib.SMTP()

smtp_obj = smtplib.SMTP_SSL()

smtp_obj.connect(host=HOST, port=PORT)

res = smtp_obj.login(user=FROM, password='授权码')

print(res, '登录成功')

for to in TO:
print(to)
msg = ' '.join(['From: {}'.format(FROM), 'To: {}'.format(to), 'SUBJECT:{}'.format(SUBJECT), '', CONTENT]) # 发送邮件,这里是我们按照邮箱的格式拼接一下.
smtp_obj.sendmail(from_addr=FROM, to_addrs=[to], msg=msg.encode('utf-8'))
print('发送成功')

`

导出excel代码:

`

import pymysql
import xlwt
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='000000', database="yiqing",charset="utf8")
curs = conn.cursor()

sql = '''select * from infotable'''
curs.execute(sql)
rows = curs.fetchall()

w = xlwt.Workbook(encoding='utf-8')
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = "微软雅黑"
style.font = font # 为样式设置字体
ws = w.add_sheet("信息", cell_overwrite_ok=True)

title = "id,number,name,college,mail,area,is_heat,,is_maybe,is_sure,type"
title = title.split(",")
for i in range(len(title)):
ws.write(0, i, title[i], style)
# 开始写入数据库查询到的数据
for i in range(len(rows)):
row = rows[i]
for j in range(len(row)):
if row[j]:
item = row[j]
ws.write(i + 1, j, item, style)

path = 'daochu.xls'
w.save(path)
conn.close()

`

  1. 讨论截图:

    201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

201771030101-程保华 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

  1. PSP:

    PSP3.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 30 25
    · Estimate · 估计这个任务需要多少时间,并规划大致工作步骤 20 30
    Development 开发 840 970
    ·· Analysis 需求分析(包括学习新技术) 200 220
    · Design Spec · 生成设计文档 20 25
    · Design Review · 设计复审 (和同事审核设计文档) 60 75
    · Coding Standard 代码规范(为目前的开发制定合适的规范) 20 15
    · Design 具体设计 120 140
    · Coding 具体编码 350 400
    · Code Review · 代码复审 30 50
    · Test · 测试(自我测试,修改代码,提交修改) 40 45
    Reporting 报告 70 75
    ·· Test Report · 测试报告 30 30
    · Size Measurement 计算工作量 20 25
    · Postmortem & Process Improvement Plan · 事后总结 ,并提出过程改进计划 20 20
  • 小结感受

  通过此次实验,我觉得两人合作真的能够带来1+1>2的效果,首先我们可以从结对方哪里学习到对方的优点和习惯,其次还可以锻炼我们团队一起解决问题的能力,尤其在此次项目当中,我们合作的非常融洽,在这么短的时间中,我们从需求分析到总结报告一直讨论和合作尽我们所能完成了这个项目,尤其在一些细节的问题上,都得到了同样的观点和看法。