实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
我的课程学习目标 | (1)体验软件项目开发中的两人合作,练习结对编程; (2)掌握Github协作开发程序的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | (1)在程序设计方面提高了自己的编程能力; (2)让我了解了团队协作、分工的重要性 |
结对方学号-姓名 | 201771030130-张芹 |
结对方本次博客作业链接 | https://www.cnblogs.com/zhangqin1/p/12580394.html |
项目Github的仓库链接地址 | https://github.com/lipeishan82/EPS |
实验内容
任务一:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;
代码风格规范:主要是文字上的规定。代码风格的原则是:简明、易读、无二义性,包括对于缩进、行宽、括号、分行、命名、下划线、注释、大小写以及断行与空白的{}行的处理; 代码设计规范:牵扯到程序设计、模块之间的关系、设计模式等。比如针对函数,他的最重要的原则就是:只做一件事,并且要做好。可以使用goto实现单一的出口。还有错误处理方面的一些内容,比如断言的正确使用等规范。 代码复审:看代码是否在代码规范的框架内正确地解决了问题。代码复审的三种形式:自我复审、同伴复审、团队复审。 进行代码复审的目的:
结对编程:是指一起分析,一起设计,一起写测试用例,一起做单元测试,一起做集成测试,一起写文档等等。 |
任务二:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
对方博客链接:https://www.cnblogs.com/zhangqin1/p/12494691.html
结对方Github项目仓库链接:https://github.com/zhangqin1013/anti-process
博客评论:
代码核查表:
将对方的仓库fork并clone仓库,修改完成提交
1.概要部分 2.设计规范部分 3.代码规范部分 4.具体代码部分 5.效能 6.可读性 7.可测试性 |
任务三:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:
(1)可采集全校各类师生员工疫情信息; (2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能; (3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件; (4)人机交互界面要求GUI界面(WEB页面、APP页面都可); (5)附加分功能:定时填报提醒 |
编码规范在github仓库下的regular中
任务四:完成结对项目报告博文作业
PSP:
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 80 | 120 |
·Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 80 | 120 |
Development | 开发 | 1330 | 1920 |
·Analysis | 需求分析 (包括学习新技术) | 150 | 200 |
·Design Spec | 生成设计文档 | 90 | 130 |
·Design Review | 设计复审 (和同事审核设计文档) | 100 | 160 |
·Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 100 | 120 |
·Design | 具体设计 | 120 | 150 |
·Coding | 具体编码 | 500 | 700 |
·Code Review | 代码复审 | 150 | 210 |
·Test | 测试(自我测试,修改代码,提交修改) | 120 | 250 |
Reporting | 报告 | 100 | 160 |
·Test Report | 测试报告 | 50 | 90 |
·Size Measurement | 计算工作量 | 30 | 40 |
· Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 30 |
需求分析
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。在此基础上提供了高级查询,相对的可视化功能,定时功能以及导出到excel表中的功能。
软件设计说明
功能设计:
|
软件实现及核心功能代码展示
我们根据实际的情况组成了如下的四张表:
(1)学生/教师信息表(由于填写内容一样,因此将其设计为了同一张表)
(2)学生/教师登录表(用于存放学生教师的账号以及密码)
(3)二级防控办登录表(我们设计由各个学院担任二级防控办,根据学院进行显示,登录时自动获取学院)
(4)防控办登录表(存放防控办人员的信息供登录)
在我们设计的系统中设计了如下类:
(1)定义了一个用来进行数据库连接的类连接:DbUtil;
(2)定义了用来判断实型、整形以及字符型内容是否为空的类:FloatUtil、IntUtil、StringUtil;
(3)定义了针对数据库中各个表实例化的类:Admin对应防控办登录时的账号和密码,college除了账号、密码外添加了学院名称,用来判定具体登陆的是哪个二级防控办,User对应学生和教师的账号和密码,UserMes则申明了私有变量userId(用户账号),userName(用户姓名),userSex(用户性别),userCollege(所属二级防控办)等与数据库对应的信息,除此之外还申明了num变量用来获取人数以及status获取填报的状态;
(4)进行数据库操作的类:LogOnDao(登录时针对不同的人员进行识别进入不同界面),UserDao(实现人员查询,显示,信息添加)
(5)具体功能实现的类:扇形图的实现PieChart,导出到Excel的DBtoExcel,柱状图实现的ChartTest以及定时的TimeTrigger
(6)界面相关的类:登录界面LogOn,师生填写界面Main_user,二级防控办界面Main_college和防控办的Main_admin
登录界面根据人员身份不同,调用LogOnDao中相对应的方法,根据登录身份进入不同的界面中,利用TimeTrigger实现时间的提醒,如果9:55会进行时间提醒,超过十点则用户无法进入填写界面;Main_user填写当日的防疫信息,调用UserDao中userAdd实体化到个人信息获取填写数据,存入数据库中;Main_college则获取登录账号所对应的二级防控办的名称,调用UserDao中的SelectedList方法显示本二级防控办的防疫信息,高级查询调用UserDao中的Select方法实现,图表则利用柱状图显示的ChartTest类实现,根据UserDao中的ChartSex和ChartCheck方法实现数据的处理;最后,Main_user调用UserDao中的StudentList方法显示所有人员的防疫信息以及高级查询,通过DBtoExcel将结果存入指定的Excel表中,根据学院的填写情况用UserDao中的PieChart获得显示数据集,调用PieChart可实现饼状图的显示,在UserDao中的Chart以及ChartCheckAll方法可以实现对高级查询进行柱状图的数据集,再利用ChartTest即可显示对应柱状图。
重要的方法:
(1)数据库连接:用来连接数据库进行一系列操作的方法
(2)用来对数据库进行数据处理的一系列方法,尤其是对于图像进行数据集处理的方法,如UserDao中的ChartCheck,Chart,PieChart等方法以及进行数据高级查询和显示的方法
(3)具体功能实现的方法,导出Excel的方法以及各种图表显示的方法
(4)从界面部分获取输入并传输到后台进行数据处理的方法
关键代码:
/**
* 柱状图显示
*
* @param evt 相应事件
* @throws Exception
*/
protected void jb_graphActionPerformed(ActionEvent evt) throws Exception {
// TODO Auto-generated method stub
String userID = this.idTxt.getText();
String userName = this.nameTxt.getText();
String userSex = this.sexTxt.getText();
String userPro = this.proTxt.getText();
String userCity = this.cityTxt.getText();
String userArrive = this.arriveTxt.getText();
String userCheck = this.checkTxt.getText();
String date = this.dateTxt.getText();
if (StringUtil.isEmpty(userID)) {
userID = "-1";
}
if (StringUtil.isEmpty(date)) {
date = "-1";
}
if (StringUtil.isEmpty(userSex)) {
if (StringUtil.isEmpty(userCheck)) {
userCheck = "是";
}
UserMes user = new UserMes(Integer.parseInt(userID), userName, userSex, userPro, userCity, userArrive,
userCheck, Integer.parseInt(date));
Connection con = null;
con = dbUtil.getCon();
ResultSet rs = userDao.ChartSex(con, user);
ChartTest chart = new ChartTest();
chart.getChart1(rs);
} else {
UserMes user = new UserMes(Integer.parseInt(userID), userName, userSex, userPro, userCity, userArrive,
userCheck, Integer.parseInt(date));
// userMes user = getUser();
Connection con = null;
con = dbUtil.getCon();
ResultSet rs = userDao.ChartCheck(con, user);
ChartTest chart = new ChartTest();
chart.getChart2(rs);
}
}
/**
* 饼状图使用查询数据库的数据
*
* @return 数据集
* @throws Exception
*/
private static DefaultPieDataset getDataSet(String college) throws SQLException, Exception {
DefaultPieDataset dataset = new DefaultPieDataset();
java.util.List<UserMes> list = Check(college);
// 装成JFreeChart需要的数据集
for (UserMes usermes : list) {
dataset.setValue(usermes.getStatus(), usermes.getNum());
}
return dataset;
}
程序运行
(1)登录界面:可根据不同身份进行选择,如果是用户登录超过10点则无法进入并显示错过打卡时间
(2)用户界面
在该界面进行用户防疫信息的填写,成功则会提示添加成功
如果在9:55则会进行提醒还没有进行打卡
(3)学院界面:以登录物理学院为例
查询性别为女的信息,图中显示的为本学院女生确诊情况
查询其他信息如确诊情况则显示男女在搜索条件下的确诊情况,以患病情况为例
(4)防控办界面,显示所有信息并进行查询
若根据省份查询,并将查询结果导出
导出成功
根据学员进行人员填写情况进行统计,将搜索的学院填入,此处以计算机为例
也可以针对其他关键信息进行查询(如果进行学号,姓名查询则不会出现柱状图),同在二级防控办中的
结对过程
实验总结:
因为不能面对面交流,可能对于结对编程的效率有一定的影响,但是,结对编程我认为还是对项目的有效进行有了非常大的帮助,首先,有明确的分工,代码设计规范等,不断沟通,完善,当存在问题时,不再是一个人闷头苦想,可以进行有效的沟通、交流共同解决问题;两人共同协作,可以更有效的发现已经撰写好的项目中存在的bug,进行修改。
通过本次实验我对于github的使用有了更深入的了解,也对于结对编程不再是停留在表面上的理解,让我感受到了团队的力量,也能够一定程度上提高编程的效率。