2020软件工程第二次结对作业

学术家族树的web端实现

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11277
这个作业的目标 学习HTML+CSS+JS,实现web端的树状结构师门树;进一步学习GitHub以及结对协作,为之后的团队作业打下基础
学号 031802207 031802208

一、链接

GitHub:https://github.com/helttt/031802208-031802207

二、具体分工:

031802207 傅显荣:需求分析,原型设计、js代码设计、收集资料及素材 博客链接
031802208 高兴:前端html、css页面设计实现及代码优化 博客链接
共同完成:单元测试、博客内容撰写

三、PSP表格

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

四、解题思路与设计实现

读题后的直观感受:又是我不会的题
分析之后得如下要点:
1.文本数据的解析提取
2.树形结构的构建和生成
3.树的缩放功能的实现
4.其他(多棵树并存、关联树共存等)
使用HTML+CSS+JavaScript实现,可以使用bootstrap框架。

从静态实现动态的第一步!!!(树它活了)

关键实现的DFD

初步讨论得出的粗糙的数据流图(第0层DFD)

进一步考虑精化(第1层DFD)

五、特点设计与展示

1、html部分:
`

<head> <meta charset="utf-8"> <title>Academic-Family Tree</title> </head> <body> <script type="text/javascript" src="d3.v3.min.js"></script> <script type="text/javascript" src="tree.js"></script> <link href="style.css" type="text/css" rel="stylesheet" />
<div class="bg-container"></div>
<div class="flex-container">
    <div class="flex-item1">
        <p id="titlename">输入文本</p>
    </div>
    <div class="flex-item2">
        <textarea style="background:none;border-style:none;" id="user"></textarea>
        </br>
        <button id="text" onClick="chase()">确认</button>
    </div>
    <div class="flex-item3">
        <p id="show-tree">Academic-Family Tree</p>
    </div>
</div>
</body> ` html代码仅负责框架部分,主要就是body部分的三个< div >标签作为大框架、一个< textarea >标签负责输入文本,style.css则负责网页样式

2、css部分:

  这个部分就是一点点开着live server进行调试,把位置调整和大小合适,然后再是颜色等更细致的调节。

  选用了flex有利于不同分辨率下设备都能进行正常显示,当然它本身的使用也非常简单易学

  flex布局文章:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

  主要思路:

  透明背景为底,然后水平方向进行分割布局,左提交文本框+确认按钮,右显示学术家族树

  家族树的样式主要是修改颜色为绿色,还有一些比如连接线的粗细设置,整体的透明度和位置等等

  代码此处略。  

3、js部分:

make()函数,即点击“确认”按钮触发的主函数的代码:

function make() {
             var count = 0; //定义儿子节点的编号
             var flag = 0; //定义标志是否为关联树值为1
             var all_data = document.getElementById("user").value;
             var sclice_data = [];
             var model_data = [];
             model_data = all_data.split("\n\n");
             //生成树型结构数据

             for (var j = 0; j < model_data.length; ++j) {
                 //初始化变量
                 count = 0;
                 quanju_flag = 0;
                 count_shu = 0
                 sclice_data = model_data[j].split("\n");

                 for (var i = 0; i < sclice_data.length; ++i) {
                     var head_tmp = "";
                     var body_tmp = "";

                     var hb = sclice_data[i].split(":"); //从冒号分割一层字符串
                     head_tmp = hb[0];
                     body_tmp = hb[1];
                     //处理冒号前的部分
                     if (head_tmp == "导师") {
                         var daoshi2 = {
                             "name": body_tmp,
                             "parent": "null",
                             "children": [{}]
                                        }
                         treeData[j] = daoshi2; //将导师嵌入节点
                                             } 

                     else {

                         //document.write("<br />");
                         var children = {
                             "name": head_tmp,
                             "parent": "null",
                             "children": [{}]
                         }
                         treeData[j].children[count] = children; 
                         //处理冒号后的部分
                         var bodies = body_tmp.split("、");
                         for (var kk = 0; kk < bodies.length; ++kk) {
                             var children = {
                                     "name": bodies[kk],
                                     "parent": "null",
                                 }
                             treeData[j].children[count].children[kk] = children; //将姓名嵌入节点
                         }
                         count++; //第二子节点编号加一,生成下一个第二子节点
                     }
                 }
                 //一棵树型数据构造完成
                 //alert(treeData[j].length);
                 //和前面所有的树比较,判断是否为关联树
                 var tree_tmp = treeData[j];
                 var name_tmp = treeData[j].name;
                 for (num_tmp = 0; num_tmp < j; num_tmp++) {
                     check(treeData[num_tmp], name_tmp, tree_tmp, num_tmp);
                 }
                 if (!quanju_flag) count_shu++; //若有关联树则独立树的棵数不增加
             }

             for (var i = 0; i <= count_shu; i++) {
                 shuInit(i)
             }
         }

make函数主要实现:树形结构数据的生成、家族树的生成、检验树和树之间是否存在关联关系的功能,对关联树和不同的树会进行正确的处理和区分。
结果展示:

目前只实现了单独一棵树的建立

六、目录及使用说明

说明

目录说明:
- 1.jpg:背景图片素材
- d3.v3.min.js: d3框架文件
- index.html:学术家族树文件
- style.css: 网页的css样式
- tree.js:家族树生成函数
- README:使用说明文件
使用说明:
GitHub上将所有文件clone到本地,后在Chrome上运行index.html文件,
在文本框内输入对应格式的数据,点击下方的确认按钮,即可生成对应的家族树。
刷新页面可以重新输入

七、单元测试

一开始看到单元测试我是一脸懵逼的,心里苦但为了自己项目不会出奇奇怪怪的错误,还是必须得做
时间紧任务重,先采用白盒测试,其他测试仍在学习实践中 白盒测试

单独一棵树
数据:
导师:张三
2016级博士生:天一、王二、吴五
2015级硕士生:李四、王五、许六
2016级硕士生:刘一、李二、李三
2017级本科生:刘六、琪七、司四
结果:

单独一棵树,其中某一叶节点点了技能
数据:
导师:张三
2016级博士生:天一、王二、吴五
2015级硕士生:李四、王五、许六
2016级硕士生:刘一、李二、李三
2017级本科生:刘六、琪七、司四

刘六:JAVA、数学建模

结果:
数据输入后无法提交,努力解决中……

两棵相互独立的树
数据:
导师:张三
2016级博士生:天一、王二、吴五
2015级硕士生:李四、王五、许六

导师:赵十
2016级硕士生:刘一、李二、李三
2017级本科生:刘六、琪七、司四

结果:


由于两棵树太大故分成两张图显示

关联树
数据:
导师:张三
2016级博士生:天一、王二、吴五
2015级硕士生:李四、王五、许六
2016级硕士生:刘一、李二、李三
2017级本科生:刘六、琪七、司四

导师:吴五
2018级本科生:齐天、吴久、陆十

结果:

关联树,某一叶节点点了技能
数据:
导师:张三
2016级博士生:天一、王二、吴五
2015级硕士生:李四、王五、许六
2016级硕士生:刘一、李二、李三
2017级本科生:刘六、琪七、司四

导师:吴五
2018级本科生:齐天、吴久、陆十

李二:字节跳动、京东云

结果:
数据输入后无法提交,努力解决中……

测试数据构建思路:分析样例数据,从最简单的单独一棵家族树设计,如果一棵树都建不起来后面的功能直接gg;然后考虑独立的两棵树,进而自然地考虑到两棵关联树、一棵树的叶节点带技能、关联树叶节点带技能等情况。
面对潜在的***难:对于输入的处理还是比较粗糙,假设输入文本有英文、半角全角、没有按格式换行等等,水平有限暂时没法实现对这些情况的报错等处理。

八、GitHub记录

九、遇到的问题及解决方法

1.最大的困难就是对HTML+CSS+JS的陌生。
解决方法:花费了较多的时间学习这方面的内容
2.对文本关键字的解析提取
解决方法:面向CSDN及百度学习
3.用mocha等实现较为全面的单元测试暂时没法完成
解决方法:先采用白盒测试进行较基础的测试,后续有时间再学习mocha并编写脚本进行测试
4.当GitHub和markdown莫名其妙地抽风时(比如我博客中显示出格式不一的代码段以及git莫名从master改成了main?
解决方法:死磕
5.千辛万苦历经九九八十一难做出来的树居然输入有问题,测试的时候好几种情况都没法实现(菜鸡自闭)
解决方法:目前实现了关联树,但是技能树部分仍无法实现

十、队友评价

我的队友,高兴同学,属实老肝帝。连肝五十多节网课还各种熬夜通宵。这种不要命也要完成任务的精神属实让我感动。向他学习!
对于自己,平时还是算有点懒散,不太敢去尝试,html之类的内容也是碰上了才学,显得比较手足无措。
加上课余时间比较紧张,没有很好地安排自己的任务,总是到了ddl前才发愤图强。还是得学时间管理啊
脚步再匆匆,人生需从容。希望高兴同学跟我都做到这一点,与君共勉

posted @ 2020-10-11 22:55  吐魂君  阅读(94)  评论(0编辑  收藏  举报