201771010136-杨野 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

项目 内容
课程班级博客链接 班级博客
这个作业要求链接 作业要求
我的课程学习目标 学习软件项目开发流程
这个作业在哪些方面帮助我实现学习目标 github功能的使用,熟悉PSP流程,了解软件开发相关内容
项目Github的仓库链接地址 https://github.com/yy202901582/DieaseSubmitSystem

任务1:陈述学生疫情每日上报子系统使用体验

1.刚开始的时候windows上企业微信进不去填报系统
2.系统有时候响应过慢,偶尔会有卡住的情况
3.没有提醒打卡签到功能,常常会忘记

任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。

开发要求:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。

项目开发背景简介:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
参考文献:

  1. 中国抗击新型冠状病毒:进展和影响[EB/OL]. (2020-02-01)/[2020-03-04]. http://cn.chinadaily.com.cn/a/202002/01/WS5e358d1fa3107bb6b579c92b.html

需求分析:
对疫情信息查询和可视化的功能,使用编程语言对数据进行处理,方便用户了解疫情信息状况

功能设计:
1.查询学生或者老师信息
2.显示某个名字相关信息
3.显示各个信息柱状图
4.查询某个信息其它相关的内容
设计实现:
writetxt.java生成数据
listMain.java进行具体对数据处理的操作
测试运行:
功能1:查找某个人相关信息

功能2:查询所有学生状况

功能3:查询所有老师状况

功能3:地区图表

功能4:月份图表

功能5:日期图表

功能6:学院图表

功能:输入任意相关信息进行查询
输入相关学院

输入地区

查看已经感染的情况

查看正常的情况

修改添加

查看某一月的情况

查看某一日的情况

修改添加@2

统计所有字段人数



修改@3

图表改进后的显示:



5. 粘贴自己觉得比较独特的或满意的代码片段,用博客园代码控件来显示。

初始化计数显示函数:

    // 信息中各个字段
    static String[][] GraphList = new String[6][100];
    // 信息总数
    static int PERSON_LIST_SIZE;
    // 读取字段值填入数组中
    void graghTest(ArrayList<Person> a){
        PERSON_LIST_SIZE = a.size();
        int[] index = new int[]{0,0,0,0,0,0,0};
        for (Person i:a) {
            if (!Arrays.asList(GraphList[0]).contains(i.getCollege()))GraphList[0][index[0]++] = i.getCollege();
            if (!Arrays.asList(GraphList[1]).contains(i.getPlace()))GraphList[1][index[1]++] = i.getPlace();
            if (!Arrays.asList(GraphList[2]).contains(i.getID()))GraphList[2][index[2]++] = i.getID();
            if (!Arrays.asList(GraphList[3]).contains(i.getTimeD()))GraphList[3][index[3]++] = i.getTimeD();
            if (!Arrays.asList(GraphList[4]).contains(i.getTimeM()))GraphList[4][index[4]++] = i.getTimeM();
            if (!Arrays.asList(GraphList[5]).contains(i.getSituation1()))GraphList[5][index[5]++] = i.getSituation1();
        }
        /*
         *
         * 查看录入字段
        for (int i = 0; i < GraphList.length; i++) {
            for (int j = 0; j < GraphList[i].length; j++) {
                if (GraphList[i][j] != null)
                System.out.print(GraphList[i][j]+" ");
            }
            System.out.print("\n");
        }
        */
    }
    // 信息中字段计数的值
    static int[][] ListCount = new int[6][100];
    void BuildCount(ArrayList<Person> a){
        // 遍历计数
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < GraphList[i].length; j++) {

                if (GraphList[i][j]!=null)
                    for (int k = 0; k < a.size(); k++) {
                        if (a.get(k).getCollege().equals(GraphList[i][j]) && i==0) ListCount[i][j]++;
                        if (a.get(k).getPlace().equals(GraphList[i][j]) && i==1) ListCount[i][j]++;
                        if (a.get(k).getID().equals(GraphList[i][j]) && i==2) ListCount[i][j]++;
                        if (a.get(k).getTimeD().equals(GraphList[i][j]) && i==3) ListCount[i][j]++;
                        if (a.get(k).getTimeM().equals(GraphList[i][j]) && i==4) ListCount[i][j]++;
                        if (a.get(k).getSituation1().equals(GraphList[i][j]) && i==5) ListCount[i][j]++;
                    }
            }
        }
    }
    void ShowCount(){
        for (int i = 0; i < GraphList.length; i++) {
            for (int j = 0; j < GraphList[i].length; j++) {
                if (GraphList[i][j]!=null){
                    System.out.print(GraphList[i][j]+":"+ListCount[i][j]+"\n");
                }
            }
        }
    }

    void ShowAllGragh(){
        System.out.print("输入数字0 1 2 3 4 5 ");
        Scanner Input = new Scanner(System.in);
        int index = Input.nextInt();
        if (index<7 && index>=0){
            for (int i = 0; i < GraphList[index].length; i++) {
                if (GraphList[index][i]!=null){
                    int value = 100;
                    if (index == 5 || index == 2)value = 10;
                    for (int j = 0; j < ListCount[index][i]*value/PERSON_LIST_SIZE; j++) {
                        System.out.print("▆");
                    }
                    System.out.print(GraphList[index][i]+":"+ListCount[index][i]+"\n");
                }
            }
        }else {
            System.out.print("不合法的输入");
        }
    }

6. 总结:你设计的程序如何实现软件设计的“模块化”原则

模块化设计,顾名思义,一个系统有许多功能,每个功能由不同模块设计实现,通过对各个模块实现连接组成一个系统,修改与添加功能也会方便许多。我设计不同类执行不同的功能,添加功能在需要的类中添加函数,需要删除的在所在类中删除,通过各个类中相互连接调用组成系统运行。

扫描二维码关注公众号,回复: 9935382 查看本文章

7. 展示PSP,这个环节重要的是让自己看到自己的估计和实际消耗时间,哪个环节耗时最多,哪个环节估计和实践相差巨大?为什么?

Personal Software Process (PSP)

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

具体编码用时最长,事后代码复审和修改阶段超出了预料,用一个好的新方法替代旧方法过程也有许多麻烦,知识运用不熟练,处理已有的一些问题花费的时间有可能比做这个的时间更长。

任务3:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中。(50分)

push 仓库内容:

地址:

事后总结:
1.代码写规范,自己后续更改和阅读都容易许多,比如名字命名清楚,一下就会望而生意,不要写所有代码到Main方法中,遵循模块化设计的原则
2.提高代码复用性,减少工作量,提高阅读体验
2.学习软件工程在慢慢推进,主要是对软件开发流程再明确,PSP对自己能力进行评估
3.要不断进行持续性的学习新的知识新的内容

猜你喜欢

转载自www.cnblogs.com/2017xinghui/p/12452438.html
今日推荐