zoukankan      html  css  js  c++  java
  • 201771030110-李松谕 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

    项目 内容
    课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
    作业要求 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
    学习目标 (1)在软件项目开发中,学会两人合作,结对编程;
    (2)联系GitHub协作开发程序的操作方法
    作业在哪些方面帮助我实现学习目标 (1)学会了使用GitHub的一些基本操作
    (2)掌握了软件项目结对开发的流程以及结对编程的重要性
    结对方学号-姓名 201771030111-刘维
    结对方本次博客作业链接 https://www.cnblogs.com/Summer-Sy/p/12556274.html
    本项目Github的仓库链接地址 https://github.com/Unicorn-snow/EIS

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

     1.代码风格规范:
      原则:简明、易读、无二义性;

      ①缩进:最好为4个空格;
      ②行宽:可以限定为100个字符;
      ③括号:在复杂运算中要善用括号、巧用括号;
      ④分行:要注意不要将多条语句放置在一行;
      ⑤命名:命名的时候要注意言简意赅,尽量避免不必要的修饰;
      ⑥下划线:下划线用来分隔变量名字中的作用域标注和变量的语义;
      ⑦大小写:区分复合词组中的不同单词;
      ⑧注释:解释程序做什么,为什么这么做;

     2.代码设计规范:
      >代码设计规范不光是程序书泻的格式问题,而且牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里又有不少内容与具体程序设计语言息息相关(如C、C++. Java、C#)。

     3.代码复审:
      >看代码是否在代码规范的框架内正确地解决了问题。代码复审在于找出代码的错误,不管是代码错误、逻辑错误还是算法错误都要努力发现并尽量解决,发现潜在错误和回归性错误,寻找可能需要改进的对方,开发人员之间相互“教育”,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。

     4.结对编程:
      >结对编程是个渐进的过程,有效率的结对编程不是一天 就能做到的。结对编程是一个相互学习 、相互磨合的渐进过程。开发人员需要时间来适应这种新的开发模式。一开始,结对编程很可能不比单独开发效率更高,但是在度过了学习阶段后,结对编程小组的开发质量、开发时间通常比两个人单独开发会更有明显的改善。

    任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,具体要求如下:

    • 结对方博客链接
    • 结对方Github项目仓库链接
      (1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
        
      (2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
        
      (3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。
        
        
        
        
        

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

    1.需求分析:

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

      此次作业便是给我们一个理论与实际相结合,充分利用我们所学知识的大好机会,面对疫情,作为大学生的我们将继续利用专业优势,制作疫情上报系统,贡献自己绵薄之力,方便防控机构对疫情相关信息进行采集、统计和排查,并实现可视化效果并将筛选信息通过Excel表的方式导出。

    2.软件设计说明:

     (1)功能设计
      ①可采集全校各类师生员工疫情信息;
      ②要能实现师生以及管理员不同种身份的登录;
      ③学院疫情防控工作负责人可查看本学院人员疫情汇总;
      ④为学院疫情防控工作负责人提供高级查询功能进行多属性组合查询并将查询结果进行可视化统计功能;
      ⑤学校防控办指定负责人登录系统,可浏览所有人员填报汇总数据清单;
      ⑥学校防控办负责人可以利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,并将查询列表导出为【导出】EXCEL文件;
      ⑦实现人机交互的GUI界面;
      ⑧附加分功能:定时填报提醒部分。

     (2)整体设计:
      
     (3)数据库设计:
      ①admin表
      
      ②basic表
      
      ③information表
      

    3.软件实现及核心功能代码展示:
      Excel导出部分:

    
    //使用poi扩展库,将输入的Jtable对象写入HSSFWork对象中,然后输出
    public class JtableDownload {   
    
        JTable table;   
        FileOutputStream fos;
        JFileChooser jfc = new JFileChooser();   
        public static  boolean flag;
    
        public JtableDownload(JTable table) {
            this.table = table;   
            jfc.setSelectedFile(new File(""));  
            int result= jfc.showSaveDialog(null);
            File file = jfc.getSelectedFile();
            try { 
                if (result == JFileChooser.APPROVE_OPTION) {
                    this.fos = new FileOutputStream(file + ".xls"); 
                    flag=true;
                } else {
                    flag=false;
                    JOptionPane.showMessageDialog(null,"您取消了下载!");
                }
            } catch (FileNotFoundException ex) {
                JOptionPane.showMessageDialog(null, "已存在文件名相同的文件,要替换请先关闭!");
            } 
        }   
    
        public void export() {   
            HSSFWorkbook wb = new HSSFWorkbook();   
            HSSFSheet hs = wb.createSheet();   
            TableModel tm = table.getModel();   
            int row = tm.getRowCount();   
            System.out.println(row);
            int cloumn = tm.getColumnCount(); 
            System.out.println(cloumn);
            String te = table.getColumnName(0);
            System.out.println(te);
            
            //样式设计
            HSSFCellStyle style = wb.createCellStyle();   
            style.setAlignment(HorizontalAlignment.CENTER); // 居中
            HSSFFont font = wb.createFont();   
            font.setFontHeightInPoints((short) 11);   
            style.setFont(font);   
    
            for (int j = 0; j < cloumn; j++) {
                hs.setColumnWidth( j, (1 * 4000));   //设置列宽
            }
              
    
            //写入HSSF对象
            for (int i = 0; i < row + 1; i++) {   
                HSSFRow hr = hs.createRow(i);   
                for (int j = 0; j < cloumn; j++) {   
                    if (i == 0) {   
                        String value = table.getColumnName(j);  
                        System.out.println(value); 
                        HSSFCell hc = hr.createCell(j);   
                        hc.setCellStyle(style);   
                        hc.setCellValue(value);   
                    } 
                    else {   
                        if (tm.getValueAt(i - 1, j) != null) {   
                            String value = tm.getValueAt(i - 1, j).toString();   
                            HSSFRichTextString srts = new HSSFRichTextString(value);   
                            HSSFCell hc = hr.createCell((short) j);   
                            hc.setCellStyle(style);   
                            if (value.equals("") || value == null) {   
                                hc.setCellValue(new HSSFRichTextString(""));   
                            } else {   
                                hc.setCellValue(srts);   
                            }   
                        }   
                    }   
                }   
            }   
           
            try {   
                wb.write(fos);   
                fos.close();  
                JOptionPane.showMessageDialog(null,"下载完成");
            } catch (IOException ex) {  
    
            }   
        }   
    } 
    

      乱码的解决部分:

    //从这里开始
            CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
            CategoryAxis domainAxis=plot.getDomainAxis();         //水平底部列表
            domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));         //水平底部标题
            domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  //垂直标题
            ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
            rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
            chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
            chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体
    

    4.程序运行:
     (1)登录部分:(存在管理员登录和用户登录两个登录方式)
      
     (2)疫情上报部分:
      
     (3)二级部门负责人查询部分:
      
      ①查询结果:
       
      ②可视化情况:
       
     (4)学校负责人查询部分:
      
      ①高级查询结果:
       
      ②可视化情况:
       
      ③Excel导出情况:
       
      
       
       导出成功
       
      
       
      
       导出结果
       

    5.结对过程:

    ①参考代码规范共同列出本次结对实验的代码规范。
    ②互相阅读对方的代码,了解对方代码编写习惯,并按照制定的代码规范改进对方代码。
    ③一起讨论并填写PSP计划时间。
    ④共同进行本次项目的需求分析和总体设计,尤其在实验二基础上新增的功能的实现。
    ⑤由我主要负责框架的搭建、和GUI界面部分,刘维主导Excel的导出功能和附加功能的实现,在主导位置的互换过程中,另一人则进行对代码规范的监督和提醒,提供功能实现上的不同想法,之后选择出更好的思路,在出现Bug时,一起对代码进行阅读,找出逻辑错误,比独自编码效率更高。
    ⑥整个项目完成后,两人共同根据代码规范进行复审,对多余的语句进行简化。
    ⑦填写PSP实际所用时间。
    ⑧撰写报告文档。
      
      
      

    6.PSP展示:

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

      
    7.小结:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会
      在本次结对编程的过程中,我体会了合作的重要性,两人合作真的能够带来1+1>2的效果通过相互的讨论和监督使得代码更规范,功能更完善,逻辑较为严谨,特别是在单元测试和代码复审时,能更快的发现代码的错误,结对编程的效率比较高,在代码规范方面,意识到随意编写的危害,读代码改代码都很费劲,在按编写规范写程序后,逐渐改善了这种情况,但在结对编程中也遇到了问题,比如刚开始分工上打算一人主导一人辅助,但发现主导的人思维有时会混乱,所以就交换充当主导者的角色。
      本次结对编程,让我们深刻认识到jar包放在本地的弊端,本次项目做出改进在编程的过程中经常会出现都感觉自己的想法是对的,这样使得讨论陷入僵局,这时我们采用独自编程的方法,最后谁的能较好实现功能就用哪个,这样不仅提升了学习效率又可以取长补短,弥补自己的不足。

  • 相关阅读:
    2017.02.20 ,学习C#第三天,基础运算符的运用~
    Linux上如何安装Mysql数据库并使用?
    Linux(CentOS6)上安装python3.6 并创建虚拟环境 -----最牛逼的方法
    python ----Linux上安装scrapy
    Scrapy selenium 设置头部信息headers-------UA
    python 将Excel表格中的一列数据转化成多行数据
    python中的一些小技巧(个人觉得哈 )
    scrapy selenium 设置chromedriver不加载图片
    Scrapy中添加随机User-Agent
    linux centOs 6.4版本 安装python 2.7.3 中的pip
  • 原文地址:https://www.cnblogs.com/Unicorn-snow/p/12573679.html
Copyright © 2011-2022 走看看