• 2020软件工程05


    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10619
    这个作业的目标 结对用代码实现家庭树
    作业正文 下文
    其他参考文献 树状图实现树状图实现2json长度获取

    GitHub地址

    结对成员博客及分工

    20177719肖璐瑶:用户界面及家庭树设计与实现,单元测试

    20177721李子妍:界面优化,流程图绘制,程序测试

    共同完成:博文编写

    PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(分钟)
    Planning 计划 1 1
    Estimate 估计这个任务需要多少时间 52 66
    Development 开发 47 60
    Analysis 需求分析 (包括学习新技术) 15 25
    Design Spec 生成设计文档 5 5
    Design Review 设计复审 2 1
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 1 1
    Design 具体设计 6 5
    Coding 具体编码 10 15
    Code Review 代码复审 2 2
    Test 测试(自我测试,修改代码,提交修改) 6 6
    Reporting 报告 5 6
    Test Repor 测试报告 2 2
    Size Measurement 计算工作量 1 1
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 2 3
    合计 53 67
    具体编码 预计时间(小时) 实际时间(小时)
    用户界面 1 2
    文本获取及保存 3 3
    家庭树实现 5 10
    合计 9 15

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

    解题思路

    • 用户界面
    • 文本数据的获取、保存和使用
    • 家庭树的实现

    代码组织与内部实现设计

    • 用户界面(html,css)

    • main():文本数据的获取、保存和使用

      通过document.getElementById("text").value获取文本数据,

      将数据用split()通过“ ",” “,“:”,“、”依次进行分割,并存为json格式

    • findTeacher():检查导师间是否关联

    • getJsonLength():计算学生个数

    • tree():树的实现

      这个部分对我来说太难了,为此查了许多资料,可是找到的方法都是用d3实现的,没办法,只能硬着头皮研究了

      • d3.layout.tree()

        使用默认设置创建一个新的树状布局:

      • tree.nodes(root)

        根据传入数据计算树的布局返回一组节点数组

      • tree.links(nodes)

        根据节点数组返回节点之间的父子连接关系

      • tree.separation([separation]):

        设置或取得两个节点之间的间距

      • tree.size([size])

        指定树布局的尺寸一个

      • d3.svg.diagonal.projection()

        绘制bezier曲线

        。。。。。。

    svg,api,node.js等等,总之,都是些没学过的东西,短时间完全学会是不可能的!目前只能看懂,会用,别的就先不管了

    算法的关键与流程图

    除了树图绘制外,最关键的当然是对文本数据的获取,处理,保存

    我认为重要的代码

    我认为最重要的部分当然是main(),里面包含了对文本数据的处理,和对其他函数的调用,其解释见代码内注释

    function main() {
        var textdata = document.getElementById("text").value;
        var group_data = textdata.split("
    
    ");//将文本以空行按段拆分
       //将文本处理保存为json格式
        for (var j = 0; j < group_data.length; j++) {
            var count = 0;
            var flag = 0;
            var tree_count = 0;
            var row_data = group_data[j].split("
    ");//将文本数据按行拆分
            for (var i = 0; i < row_data.length; i++) {
                var hb = row_data[i].split(":"); //将行以“:”分割
                var head = hb[0];//冒号前
                var body = hb[1];//冒号后
                if (head == "导师") {
                    var teacher = {
                        "name": body,
                        "children": [{}]
                    }
                    treeData[j] = teacher; //将导师名字嵌入父节点
                } else {
                    var children = {
                        "name": head,
                        "children": [{}]
                    }
                    treeData[j].children[count] = children; //将年级及职业嵌入子节点
                    var student = body.split("、");//分割出学生的名字
                    for (var m = 0; m < student.length; m++) {
                        var children = {
                            "name": student[m]
                        }
                        treeData[j].children[count].children[m] = children;//将学生名字嵌入孙子节点
                    }
                    count++;
                }
            }
            var teacher_number = treeData[j];
            var teacher_name = treeData[j].name;
            for (n = 0; n < j; n++) {
                findTeacher(treeData[n], teacher_name, teacher_number);
            }
            if (flag != 0) {
                tree_count++;
            }
        }
        for (var i = 0; i <= tree_count; i++) {
            tree(i)
        }
    }
    

    附加特点设计与展示

    设计的创意独到之处,这个设计的意义

    在title加入了小图标,使用户能够更直观的了解到该网站功能
    在树的显示框用加上滚动条,防止树过大超出页面显示范围

    实现思路

    想使网页功能更加直观美观

    实现代码

    在容器的样式表里加上滚动条

        overflow:scroll;
    

    实现成果展示

    • 文本输入及家庭树创建

    • 家庭树的缩放
    • 家庭树的错误使用实例

    目录说明和使用说明

    目录

    • FamilyTree3.0
      • index.html(在浏览器运行)
      • style.css(外部样式表)
      • tree.js(文本的获取使用及家族树的生成代码)
      • d3.v3.min.js(js的函数库)
      • README.md(使用说明书)
      • picture(存放图片)
        • background.jpg(背景图片)
        • icon.png(title图标)

    使用方法(测试人员运行方法)

    下载或clone该项目到本地,打开index.html,进入家庭树生成界面,在文本框中输入家庭树文本形式,点击“创建家庭树”按钮,即可在下方生成家庭树。

    文本格式

    输入:

    学术家族树以文本形式输入,点击“创建家庭树”,即可。

    学术家族树的文本格式如下:
    导师:张三
    2016级博士生:天一、王二、吴五
    2015级硕士生:李四、王五、许六
    2016级硕士生:刘一、李二、李三
    2017级本科生:刘六、琪七、司四

    其中,"导师:","级博士生:","级硕士生:","级本科生:"和"、"当做关键词处理;若有多组输入,中间空一行,如:

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

    导师:天一
    2016级博士生:天二、王二、吴五
    2015级硕士生:李四、王五、许六
    2016级硕士生:刘一、李二、李三
    2017级本科生:刘七、琪七、十四

    导师:刘七
    2016级博士生:天二、王二、吴五
    2015级硕士生:李四、王五、许六
    2016级硕士生:刘一、李二、李三
    2017级本科生:刘八、琪七、十四

    注意!!!不能有多余的空行。否则,无法生成树。

    输出:

    树的节点,鼠标点击后是可以缩放的。同时,支持呈现多棵树并存、两棵关联树共存等形式

    单元测试

    测试工具:Mocha

    简易教程:

    • 首先在命令行
    $ git clone https://github.com/ruanyf/mocha-demos.git
    
    • 安装Node后,进入mocha-demos目录,安装依赖
    $ cd mocha-demos
    $ npm install
    $ npm install --global mocha
    
    • 经过以上已经安装好了,具体使用内容可见测试框架 Mocha 实例教程,里面有的内容,我就不多赘述了

      建立一个后缀为.test.js的文件(文件名随意,最好与被测对象同名),内容见教程或下方截图,与被测代码放置同一路径,被测代码函数大括号外要加上module.exports = 函数名,然后在命令行进入文件所在目录,使用mocha 文件名.test.js即可

    单元测试代码:

    测试根节点个数计算是否正确

    构造测试数据的思路:

    刚学会使用mocha,对单元测试也不太熟悉,挑了个看上去测试起来较方便的函数,好在测试成功了,有时间会测试其他函数

    Github的代码签入记录

    遇到的困难及解决方法

    问题描述1:用户界面简陋

    原因:html、css的使用不熟练

    尝试:网上搜索美观界面,进行参考学习,在w3school学习相关知识。

    是否解决:已解决

    收获:对html、css有了更深入的了解

    问题描述2:文本框数据如何获取并用于家庭树

    原因:对前端的各种技术不了解不熟悉

    尝试:百度搜索解决方法,学习json

    是否解决:已解决

    收获:简单的学习了json的使用

    问题描述3:不知如何实现家庭树

    原因:对前端技术不熟悉,掌握技术太少

    尝试:网上搜索相关内容,了解到了d3,但是短期无法学会,只能使用模板,进行学习和编写

    是否解决:已解决

    收获:对前端技术有了更进一步的了解,前端技术深不可测,我所知道的只是冰山一角,希望我能够一步一步将冰山化开。

    问题描述4:作业太多,太难,太痛苦

    原因:每天花超大把时间在作业上,天天熬夜,不知道多久没看过动画漫画小说电视剧了,尽管如此还是受限于技术,做不完作业,无比烦躁。

    尝试:想要循序渐进学习各项技术,但是作业没完成,没时间学先完成作业吧,又受限于技术......(死循环中)

    我有个大胆的想法!

    是否解决:解决不了了

    收获:比我的大眼睛还大的黑眼圈,凉飕飕的头

    评价你的队友

    • 今天又不开心:队友学习能力很强大,可以快速掌握一些新的技能(希望我也可以拥有:D)请我的队友一定要保护好头发(23333)和自己的美貌,不要被黑眼圈侵蚀了!
    • kami233:队友做事速度快,效率高,很有责任感,虽然代码编写能力较弱,但是其实大家都菜的差不多,希望我们能够健康快乐的开学吧(ノД`)

    自评表

  • 相关阅读:
    jQuery给动态添加的元素绑定事件的方法
    无法加载父级样式或设置IIS的asp站点启用父路径
    ASP.NET MVC 必须设置 ErrorMessageString 或 ErrorMessageResourceName,但不能同时设置二者。
    layer弹窗监控键盘事件
    js 刷新windows.open另一个窗口页面或window.open的页面如何刷新(父页面)上层页面
    jquery提交表单,回调函数
    iis Server Error in '/' Application
    jni&&jvmti&&JMC
    Backpropagation
    k-means-algorithm
  • 原文地址:https://www.cnblogs.com/jtybkx-re/p/12708192.html
Copyright © 2020-2023  润新知