1.链接

031702241 苏杰隆

081700537 朱煜喆

[github仓库]https://github.com/kevintrey/031702241-081700537

2.分工

031702241 苏杰隆:代码编写
081700537 朱煜喆:需求分析

3.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate 估计这个任务需要多少时间 10 10
Development 开发 60 100
Analysis 学习新技术 600 840
Design Spec 生成设计文档 30 40
Design Review 设计复审 20 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 30
Design 具体设计 100 80
Coding 具体编码 480 600
Test 测试(自我测试,修改代码,提交修改) 120 140
Reporting 报告 30 40
Test Report 测试报告 30 20
Size Measurement 计算工作量 10 10
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 10
合计 1690 2680

4.解题思路描述与设计实现说明

  • 代码组织与内部实现设计(类图)

  • 算法的关键

代码的算法部分主要是输入数据的处理解析

var NAME= new Array(),degree=new Array(),year=new Array();
    var ID=0,PID=0;
    var hell,branch2=0;
    var teachernum=0,studentnum=new Array(),degreenum=new Array();  //有几个老师、每个学位有几个学生、每个导师带几个年段
    var help=new Array();
    function submittext() {             //解析输入 每个人赋予一个IDD和相应信息数组
        var Text = document.getElementById("inputtext").value;
        var Lines = Text.split("\n");
        var teacher=new Array(),nameLine=new Array();
        var name = new Array();
        // teacher标识是否是导师,degree标识学位,year标识年级,
        // nameLine存每行完整信息,nameString存:后内容,name存名字
        var branch= 0;
        for (var i = 0; i < Lines.length; i++) {
            if(Lines[i].length==0){             //跳过空行
                continue;
            }
            teacher[i] = Lines[i].substr(0,2);  //分割前两个字,判断是否是“导师”
            if(teacher[i]=="导师"){          //导师处理
                ID++;                          //每个人独有ID
                degree[ID]="导师";            //degree导师
                NAME[ID]= Lines[i].substring(3);
                degreenum[teachernum]=0;
                teachernum++;
            }
            else{                       //非导师处理
                var temp1= Lines[i].substring(0,4);
                var temp2= Lines[i].substr(5,2);
                var tempNameString  = Lines[i].substring(Lines[i].search(":")+1);
                name[i] = tempNameString.split("、");

                degreenum[teachernum-1]++;
                for(var j=0;j<name[i].length;j++){      //每个人分配ID  并且存储相关信息
                    ID++;
                    year[ID]=temp1;
                    degree[ID]=temp2;
                    NAME[ID]=name[i][j];

                }
                studentnum[branch]=name[i].length;
                branch++;
            }
        }
    }
  • 流程图

  • 代码片段

5.附加特点设计与展示

  • 设计意义

  • 实现思路

  • 最重要的代码片段

  • 实现成果展示

6.目录说明和使用说明

  • 目录组织

Ali文件存放jQuery库文件和antv库

  • 如何运行网页

下载所有文件后,打开index.html即可运行,测试样例.txt里提供参考输入,符号采用全角输入,生成树可用滑动滚轮调整大小,生成树数量太多可缩放网页大小或在右侧滑动滚轮查看。

7.单元测试

  • 测试工具

  • 测试代码

  • 考虑情况

8.Github代码签入记录

9.遇到的代码模块异常或结对困难及解决方法

  • 问题描述 调用AntV库失败,原方法采用的是根据路径从服务器获取JSON格式数据,是为AJAX设计的。在模块整合之前,本以为添加一个JSON格式的输出文档便可成功调用该方法,然而js基于安全性的考虑,不可读写本地文件,导致模块拼接出错。

  • 尝试 尝试过node.js和jQuery的方法,但都无法达到要求。尝试学AJAX,但是量太大且超过工程范畴,也以失败告终。

  • 是否解决 最后改变了获取JSON格式数据的方法,对方法接口改动,实现代码内部的传参。

  • 收获 对node.js和AJAX有初步了解(不敢动不敢动),也对库中的生成树函数原理有了进一步了解,并且扩展了一些IO流的知识。最重要的是,接口统一真的十分重要!!

10.评价队友

  • 值得学习的地方 队友编程能力比较强

  • 需要改进的地方 多从其他地方来学习相关的模板与框架