• 201771030102-常梦娇 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告


    项目 内容
    课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
    本次作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12416880.html
    我的课程学习目标 掌握软件工程课的所学知识,并运用于软件开发中
    这个作业在哪些方面帮助我实现学习目标 掌握了软件开发流程,并用于软件开发中
    项目Github的仓库链接地址 https://github.com/Lemon517/Java

    1.实验目的与要求

    1.掌握软件项目个人开发流程。

    2.掌握Github发布软件项目的操作方法。

    2.实验内容和步骤

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

    1.限制每日十点之前提交,容易忘记,如果可以设置按时提醒会更好。

    2.系统在后期设置了记忆功能,可记录上次提交的信息,使用起来较之前更加方便。

    3.如果添加定位功能,可省去填写所在地的时间。

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

    我选择了第二类开发要求:

    1.系统可采集学生疫情有效信息;

    2.系统支持用户在线使用;

    3.每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;

    4.各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;

    5.学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。

    1.需求分析

    • 2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。

    • 为了统计本校学生的疫情信息及汇总工作,运用java编程,利用java自带图形用户界面完成此疫情上报子系统。

    2.功能设计

    • 基本功能

      • 系统可采集学生疫情有效信息;

      • 系统支持用户在线使用;

      • 每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;

      • 各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;

      • 学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。

    • 拓展功能

      • 提交窗口增加验证功能,有任一信息为空时提示提交失败;

      • 院方与校方管理平台增加数据刷新功能,在登录以后刷新可重新获取此刻之前的所有学生疫情信息。

    • 功能设计类图

    3.设计实现

    • 学生类:实现登录,采集学生疫情信息;

    • 学院管理类:查看本学院所有学生详细疫情信息,可刷新最新数据,无误后上报学校;

    • 学校管理类:查看全校所有学生关键疫情信息,可刷新最新数据,可将数据导出到Excel;

    • user表:存储系统所有管理员及用户信息;

    • form表:存储学生上报的所有疫情信息;

    • institute表:存储学校各个学院信息,通过代码实现,按照学院划分,将学生疫情信息上报给各个学院审核。

    4.测试运行

    (1)基本功能运行截图:

    • 登录:


    - 学生疫情信息提交:


    - 学院指定负责人查看:


    • 学校防控办查看:


    • 导出数据到Excel:


    #### (2)拓展功能运行截图:
    • 提交窗口验证功能:


    • 数据刷新功能(可多次插入最新数据,在此拿学院负责人举例):


    ### 5.关键代码展示:
    public Db() {
            try {
            	//指定连接类型  
                Class.forName(name);
                //获取连接  
                conn = DriverManager.getConnection(url, user, password);                 
                Workbook book = new HSSFWorkbook();             
                String Table_Name = "form";             
                Sheet sheet = book.createSheet(Table_Name);        
                Statement st = (Statement) conn.createStatement();  
                String sql = "select * from yy." + Table_Name;  
                ResultSet rs = st.executeQuery(sql);  
                Row row1 = sheet.createRow(0);  
                ResultSetMetaData rsmd = rs.getMetaData();  
                int colnum = rsmd.getColumnCount();  
                for (int i = 1; i <= colnum; i++) {  
                    String name = rsmd.getColumnName(i);   
                    Cell cell = row1.createCell(i - 1);   
                    cell.setCellValue(name);  
                }   
                int idx = 1;  
                while (rs.next()) {  
                    Row row = sheet.createRow(idx++);  
                    for (int i = 1; i <= colnum; i++) {  
                        String str = rs.getString(i);   
                        Cell cell = row.createCell(i - 1);  
                        cell.setCellValue(str);  
                    }  
                }  
                book.write(new FileOutputStream("E://" + Table_Name + ".xls"));  
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        //查询操作
        public void changeMySqlDate(String sql) {
            try {
                System.out.println("接收到的参数为:" + sql);
                pst = conn.prepareStatement(sql);
                pst.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        //插入操作
        public ResultSet selectSqlDate(String sql) {
            try {
                System.out.println("接收到的插入参数为:" + sql);
                pst = conn.prepareStatement(sql);
                ret = pst.executeQuery();
                return ret;
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            }
        }
    

    6.总结

    ​ 我按照要求将系统的所有用户分为学生类、学院管理类和学校管理类,并针对数据的统计建了相应的数据库,各自的功能分类编写代码,由此实现模块化。基于自己的个人能力,没有很好的用到软件工程模块化,由于数据太多不好截图,因此删除了一部分,以上只展示了用于测试的个别数据,后面会不断修改、提升。

    7.psp展示

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

    ​ 时间差距较大的地方在于具体设计和编码阶段,由于起初只设计了学生和管理员两类用户,后面在逐渐编码实现的过程中发觉自己逻辑有些不清晰,设计第三类用户思路更加明了才将管理员又分为学院管理类与学校管理类,在此处消耗时间较多;测试阶段是不是会有一些问题需要处理也花费的时间较多。

    任务三:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中,完成个人项目报告博文作业。

    已将工程提交到自己GitHub账号的项目仓库中



    3.总结:

    ​ 这次实验总体来说对我的帮助很大,在了解了软件开发流程之后总是对于整个系统应该如何着手,下一步该做什么有了一个比较清晰的认识,不再像之前一直把时间和心力都一味的放在了代码实现上面,导致耗时太久,效率不高。此次作业虽然按时完成,但不足的地方很多,后面将留出充足的时间不断进行修改完善。

  • 相关阅读:
    Clojure新手入门
    背包问题——第一篇
    矩阵快速幂的最简单用法
    加密的病历单
    JAVA NIO学习四:Path&Paths&Files 学习
    JAVA NIO学习三:NIO 的非阻塞式网络通信
    JAVA NIO学习二:通道(Channel)与缓冲区(Buffer)
    JAVA NIO学习一:NIO简介、NIO&IO的主要区别
    JAVA IO分析三:IO总结&文件分割与合并实例
    JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流
  • 原文地址:https://www.cnblogs.com/cybc/p/12493957.html
Copyright © 2020-2023  润新知