• 软件工程实践2019第五次作业


    软件工程实践2019第五次作业

    结队成员学号:

    <031702327>:MrHe&Husky
    <031702326>: x辣椒
    我们的GitHub地址:【familytree

    PSP表格

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

    写在前面

    从零开始的前端学习并应用,10天内学html5+css3+javascript并根据需求做出一个能够生成动态数的网页...
    这些天,我已经忘记我做过什么了,只记得看着屏幕上右下角的时钟走到3:30左右我就必须去睡觉,因为几乎每天都有早课等着我。而在3:30之前,都是盯着屏幕上文档、入门教程、各种各样的有做过类似项目人写的博客。
    慢慢地...时间过去,可是学到的知识依旧不足以支撑我从零写出这一个网页,于是最后决定套别人现有的的框架,再加上自己这几天紧急储备的破碎的知识来完成这一个项目,说实在的,到我写这篇博客时我都不知道我做出来的是个什么东西,里面有着多少bug,有着多少我不理解的语句.....但是还是完成了,最后,一个看起来算完成的作品————看一下吧

    结果展示

    最开始学习语言做的测试程序所产生的奇奇怪怪的东西就展示了吧,直接看运用框架后的;

    大致测试

    最后结果

    加点细节

    .......没时间了,细节就不做了,先发布吧(其实是css没学到能用的程度(>_<))

    实现过程

    使用G6框架生成有动画的树形图,生成过程都通过现有程序,有了这个框架,我们实现就只需专注于这几个点:

    • 如何从表单读入数据
    • 理解现有框架需要怎样的数据才能生成树图(API)
    • 如何把输入数据变成指定的生成树的数据格式
    • 如何去链接框架和我们的代码

    重点代码代码

    如何从表单读入数据:

    < html部分: >

    <div id="input_text">
              <textarea id="intext" rows="20" cols="50" wrap="hard"></textarea>
              <button id="go_and_change">转换</button>
         </div>
    

    < JavaScript部分: >

    go_and_change连接到html中id为go_and_change的按钮,发生“单击"(onclick)事件时,text读入并赋值为id为intext的多行文本框中字符串。

     const go_and_change = document.getElementById('go_and_change');
              go_and_change.onclick = () => {
                   var text = document.getElementById('intext').value;
                   }
    

    框架所需的数据结构是?

    大概就是下面这种结构,点和一个子点的数组相互嵌套

    function point(the_id) {   
                        this.id = the_id;
                        this.children = [];
                   }    //点对象的构造函数
    

    最后大概就嵌套成下面这一种结构

    {
        "id": "张三",
        "children": [
            { "id": "2016级博士生",
              "children": [
                    { "id": "天一", "children": [] },
                    { "id": "王二", "children": [] },
                    { "id": "吴五", "children": [] }
                ]
            }
    }
    

    如何把输入数据变成指定的生成树的数据格式?

    具体看注释吧..其中频繁使用到了JavaScript的正则表达式来划分字符串,正则表达式详见:https://www.liaoxuefeng.com/wiki/1022910821149312/1023021582119488
    除此之外还有很多的学习时看到的资料,我稍微挑选了一下,把用处比较大的列了出来:
    < JavaScript正则表达式 >
    < JavaScript split() 方法 >
    < JS 生成树状结构 >
    < 常见数据结构和Javascript实现总结 >
    < Map数据结构使用 >

    下面是代码:

        var text = document.getElementById('intext').value;
        function point(the_id) {   //点对象的构造函数
            this.id = the_id;
            this.children = [];
        }
        var i = 0;
        var heighpoint = 0;//新画布的高度位置
        var j = 0;//作为在后面遍历数组用变量;
        var k = 0;//作为在输出遍历数组用变量;
        var regexp_teacher = /^导师:(.+)$/;//用于查找老师的正则表达式
        var regexp_grade = /^(.+):(.+)$/;//用于查找年级和学位的正则表达式
        var studentstr = "";//学生的字符串(后用)
        var data = [];//存储数据,之后转成JSON传送至绘图api
        var blocks = text.split("
    
    ");//第一次拆分,拆分出大块
        for (j = 0; j < blocks.length; j++) {
            var lines = blocks[j].split('
    ');//按行划分
            data.push(new point(regexp_teacher.exec(lines[0])[1]));//创建并返回一个老师节点压入data内(第0行)
            for (i = 1; i < lines.length; i++) {
                if (lines[i] === "") {
                    break;
                }
                var p = new point(regexp_grade.exec(lines[i])[1]);
                data[j].children.push(p);//创建并返回一个学历节点压入老师节点内
                studentstr = regexp_grade.exec(lines[i])[2];//划分出学生字符串
                var students = studentstr.split('、');
                for (var student of students) {
                    var stu = new point(student);
                    data[j].children[i - 1].children.push(stu);//将学生节点压入学历节点内
            }
        }
    

    如何去链接框架和我们的代码

    把我们上面生成的规格化传入它的函数中就行了,自动化生成(膜拜开发团队),AntvG6本家链接:https://antv.alipay.com/zh-cn/g6/3.x/demo/tree/tree-compact-box.html

    for (k = 0; k < blocks.length; k++) {
        t(data[k]);//给它的函数命了个名为t,data为我们储存规格化后数据的数组,具体代码见上面链接
    }
    

    GitHub上源代码使用说明

    只是一个html文件(familytree),使用浏览器打开即可使用,记得联网。
    问为什么不把框架下载下来再用相对路径引用?.................我也想啊,可好像不允许。

    GitHub上标签

    对队友印象

    一起通过了一段艰辛又漫长的学习过程,我们两个最开始都十分迷茫不知从何开始,好在队友擅长交流并寻求到了dalao指点了该向哪方面专攻,也剩下了我们很多无用功,学习和实际编码过程中相互交流,帮上了很大的忙。Great.

  • 相关阅读:
    第一个只出现一次的字符
    把数组排成最小的数
    整数中1出现的次数
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
    字符串的排列
    二叉搜索树与双向链表
    numpy中ravel()和flatten()
    复杂链表的复制
  • 原文地址:https://www.cnblogs.com/MrHe-Husky/p/11705987.html
Copyright © 2020-2023  润新知