201771030106-葛佳诚 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程;
2.学习Github协作开发程序的操作方法。
结对方学号-姓名 201771030103-陈正丽
结对方本次博客作业链接
作业对我实现学习目标的帮助 1.掌握了两人结对编程软件项目的大致流程;
2.熟悉了GitHub协作开发程序的基本流程。
项目Github的仓库链接地址 https://github.com/luorrr/SchoolInfoSystem
https://github.com/luorrr/UniversityInfoSystem

任务一. 阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念

“代码规范”可以分成两个部分——代码风格规范和代码设计规范。其中代码风格规范是我们平时较容易忽略的,其原则是:简明、易读、无二义性,它主要包括代码的缩进、注释、括号等方面。

代码复审对我们代码中错误的改正十分有帮助,能够帮助减少最终代码的错误,同时也能在一定程度上优化其结构,使我们的代码更加简明、易读。

结对编程作为一种敏捷软件开发的方法,它是指两个程序员在一个计算机上共同工作,一个人输入代码,而另一个人审查对方输入的每一行代码。结对编程对于减少代码的错误率与实现更多更全面的功能有较大的帮助。


任务二. 两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价

对同伴的博客进行评价如下图。

图1.1.1 cnblogs

修改同伴的代码并将其提交至Github之上。

图1.1.2 pull requests

任务三. 采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统

(一). 需求分析

1. 设计一个具有GUI界面(Web或APP等)的程序;
2. 程序能够实现学校全校各类师生员工提交上报疫情信息;
3. 程序设计有各个部门的管理人员,且要能满足各个部门的管理人员查询成员的疫情信息填报情况;
4. 程序设计有一个总的管理人员,能满足查询全校师生成员的疫情信息填报情况;
5. 程序能够根据查询得到的结果导出为Excel文件;

(二). Web部分设计实现

为实现Web端的信息录入功能,我设计有以下几个类:

 (1). 学生类 Student.java
 (2). 教师类 Teacher.java
 (3). 学生功能类 StudentDao.java
 (4). 教师功能类 TeacherDao.java
 (5). 学生服务接口类 StudentService.java
 (6). 教师服务接口类 TeacherService.java
 (7). 学生服务实现类 StudentServiceImpl.java
 (8). 教师服务实现类 TeacherServiceImpl.java
 (9). 学生控制类 StudentController.java
 (10). 教师控制类 TeacherController.java

其中学生类与教师类存储学生与教师的所有数据;学生功能类与教师功能类负责与相应的xml结合来完成数据库的查询功能;学生、教师服务接口类提供学生与教师服务的接口;而学生、教师服务实现类实现相应的服务;学生控制类与教师控制类提供相应的控制器。

初次之外,为搭建SSM框架,我设计有以下资源:

 (1). StudentDao.xml
 (2). TeacherDao.xml
 (3). applicationContext.xml
 (4). db.properties
 (5). log4j.properties
 (6). mybatis-config.xml
 (7). springmvc-config.xml

Web部分的数据库设计见JAVA图形用户界面设计中的数据库设计部分。

(三). JAVA图形用户界面设计实现

 1. 程序功能实现

为实现基础的数据查询功能,我设计有以下几个类:

 (1). 学生类 Student.java
 (2). 教师类 Teacher.java
 (3). 管理员类 Manager.java
 (4). 数据库连接类 DbUtil.java
 (5). 学生功能类 StudentDao.java
 (6). 教师功能类 TeacherDao.java
 (7). 管理员功能类 ManagerDao.java
 (8). 柱状图生成类 BarChart.java
 (9). Excel工具类 ExcelUtil.java
 (10). 数据库语句生成类 SqlCreate.java
 (11). 系统测试类 ExamSystem.java

其中,学生类、教师类与管理员类提供学生与教师、管理员的数据类型,包含有个人基本的数据;数据库连接类中的数据库连接函数负责程序与mysql数据库的连接;学生功能类、教师功能类与管理员功能类提供程序查询数据库的函数方法;柱状图生成类负责柱状图的生成;Excel工具类的方法将List集合类型转换为Excel文件并导出至指定文件夹;数据库语句生成类用于在添加大量数据至数据库时SQL语句的生成;系统测试类中包含主函数Main,负责系统的运行测试。

 1. 程序界面实现

 (1). 成员添加面板类 AddInfoPanel.java
 (2). 管理员登录面板类 LoginPanel.java
 (3). 主菜单面板类 MenuPanel.java
 (4). 信息查询菜单面板类 SelectInfoPanel.java
 (5). 信息查询显示面板类 SelectShowPanel.java
 (6). 柱状图面板类 ShowChartPanel.java
 (7). 显示菜单类 SystemMenu.java //目前不再使用

其中,成员添加面板类用于显示添加成员时的GUI界面绘制;管理员登录面板类用于管理员登录GUI界面的绘制;主菜单面板类绘制各个菜单项用于选择功能;信息查询菜单面板类用于显示查询功能的菜单项;信息查询显示面板类显示根据指定条件查询得到的结果;柱状图面板类绘制统计柱状图;显示菜单类用于在命令行下的主菜单与其他二级菜单的打印,目前已不再使用。

 2. 数据部分设计

在数据部分我使用了MySQL数据库来完成实现,数据库名为schooldb,其中有三个表,分别为学生信息表studentinfo、教师信息表teacherinfo与管理员表Manager,三类表的设定如下图:

图2.3.1 studentinfo

图2.3.2 teacherinfo

图2.3.3 manager

其中学生信息主要包括学号id、姓名name、性别sex、学院college、专业major、电话号码phoneNumber、记录日期recordDate、所在省province、所在市city、是否感染diagnosed与体温temperature;教师的信息除了没有专业major一项以外,仅在工号id上有所不同,学生的学号设定为12位,教师的工号设定为4位。而管理员类记录管理员的登录信息,主要包括工号id、姓名name、所在部门/学院dept与登录密码password。

studentinfo与teacherinfo两张表均插入了随机生成的用户数据,学生表中有大约2400名学生在100余天内的信息,而教师表中越有50名教师在100余天内的信息,两个表中的数据加起来越有25万条左右。manager中的数据主要是十几个管理员的登录数据。

(四). Web端测试运行

 1. 网页界面

图2.4.1 主页

 2. 成员信息录入界面

图2.4.2 学生信息上报界面

图2.4.3 教师信息上报界面

 3. 教师信息录入测试

图2.4.4 教师信息上报

网页中点击学生信息上报或教师信息上报将弹出不同的模态框,在其上填写信息后点击提交将提交成员的信息,若当天已经上报过信息则会提示今天已经上报。

(五). JAVA程序测试运行

 1. 管理员登录界面

图2.5.1 管理员登录界面

 2. 程序主菜单界面

在管理员登录成功后,进入程序主菜单页面。

图2.5.2 主菜单界面

 3. 成员信息录入

程序可以选择学生信息录入或教师信息录入,如下是学生信息填写界面。

图2.5.3 学生信息填写界面1

图2.5.4 学生信息填写界面2

首先测试插入用户(教师/学生)数据如下图,可见数据插入成功。

图2.6.2 插入学生数据

图2.6.3 插入教师数据

之后测试通过学号或工号查询用户(教师/学生)数据信息如下,输入用户类型与学号/工号即可查询用户所有的上报数据,由于数据过多无法完全截取图片。

图2.6.4 查询教师数据

图2.6.5 查询学生数据

最后测试通过组合查询学号与工号的方式查询用户(教师/学生)数据信息如下,输入用户类型、学号/工号与需要查询的日期即可查询用户当天的上报数据。

图2.6.6 查询教师数据

图2.6.7 查询学生数据

 3. 其它功能测试

首先测试统计某一日期区间内的感染人数如下,输入需要查询的起始日期即可查询期间用户的疫情感染情况。

图2.6.8 用户感染情况初次数据

图2.6.8所绘制的是最初加入的2000人的数据,由于在随机生成数据的过程中考虑不周,将每个人在100天内的感染情况固定为了一个数据,即一个人在这100天内均没有感染或一个人在这100天内均感染,因此查询得到的结果每一天都是一致的。之后我又再次生成了300多人在100天内的随机感染数据如图2.6.9,从而使得感染人员数量统计有所变化,如图2.6.10

图2.6.9 新的随机数据录入

图2.6.10 添加数据后的用户感染情况数据

之后测试统计某一日期区间内的感染人员地区分布情况如下,输入需要查询的起始日期即可进行查询。

图2.6.11 感染人员地区分布情况

最后测试完成,退出系统。

图2.6.12 系统退出

(七). 代码展示

此段代码实现系统查询日期区间内的感染学生的人数与学生的人员地区分布情况。


    /**
    * ·通过起始日期查询数据
    * 
    * @param dateBegin
    * @param dateEnd
    * @param isProvince
    * @return 学生信息列表
    * @throws SQLException
    */
    public List<Student> quaryByDate(Date dateBegin, Date dateEnd, boolean isProvince) throws SQLException {
        Connection conn = DbUtil.getConnection();
        Statement stmt = conn.createStatement();
        //SQL
        String sql = "";
        if (isProvince) {
            sql = "select count(*) count,province from studentinfo where recordDate between '" + dateBegin + "' and '" + 
				dateEnd + "' and diagnosed = '1' Group By province;";
        } else {
            sql = "select count(*) count,recordDate from studentinfo where recordDate between '" + dateBegin + "' and '" + 
				dateEnd + "' and diagnosed = '1' Group By recordDate;";
        }
        //执行
        ResultSet rs = stmt.executeQuery(sql);
        //添加用户信息
        List<Student> stuList = new ArrayList<Student>();
        Student s = null;
        while(rs.next()) {
            if (isProvince) {
                s = new Student(rs.getInt("count"), null, rs.getString("province"));
            } else {
                s = new Student(rs.getInt("count"), rs.getDate("recordDate"), null);
            }
            stuList.add(s);
        }
        return stuList;
    }

(七). 实验总结

在此次实验中,我了解了PSP对于个人软件项目开发的重要性,也熟悉了PSP的基本流程,这对我之后的软件开发学习提供了帮助。同时,我在这次实验中也学习了模块化的开发原则,如在Java中使用类、包等结构来划分模块,而不是将大量无关代码方法写入一个类、一个包中。除了以上几点外,我也熟悉了在Github上创建项目并发表等操作。总的来说,在这次实验中我学习到了许多,希望在之后的实验中我能越做越好。

(八). PSP展示

PSP 任务内容 计划共完成需要的时间(h) 实际完成需要的时间(h)
Planning 计划 0.2 0.25
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 0.2 0.25
Development 开发 13.05 14.2
Analysis 需求分析 (包括学习新技术) 0.25 1.5
Design Spec 生成设计文档 0.1 0.1
Design Review 设计复审 (和同事审核设计文档) 0.1 0.1
Coding Standard 代码规范 (为目前的开发制定合适的规范) 0.1 0.2
Design 具体设计 1 0.8
Coding 具体编码 8 7
Code Review 代码复审 2 2
Test 测试(自我测试,修改代码,提交修改) 1.5 2.5
Reporting 报告 1.3 1.8
Test Report 测试报告 1 1.5
Size Measurement 计算工作量 0.1 0.1
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 0.2 0.2

在这次实验中,前期设计规划上用时基本符合预期。在代码部分用时最超出预期的有两个部分,一是前期或者中期查阅资料的时间,一是在数据库中录入数据的过程,查阅资料主要是因为有一段时间没有使用java语言有些生疏且需要查询柱状图生成方法,而数据库部分主要是因为数据过多,额外编写了随机生成sql语句的方法。在总结部分用时最多的书写博客部分,主要还是对Markdown语法不够熟悉的原因。总之,在这次的实验中我有许多的不足之处,希望之后能做得更好。


任务三. 完成任务二项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中。

GitHub提交界面如下,包括issues与在他人项目中pull requests。

图3.1.1 GitHub提交

图3.1.2 GitHub issues

图3.1.3 GitHub在他人项目中pull request


猜你喜欢

转载自www.cnblogs.com/luor/p/12590222.html