第4次作业-结对编程之实验室程序实现

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11277
队友博客 https://www.cnblogs.com/3xxxv5/
github项目地址 https://github.com/lzn2324/031702324and031802214
这个作业的目标 <学习前端技术与github协作>
学号 <031702324、031802214>

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Development 开发 120 180
Analysis 需求分析 (包括学习新技术) 480 600
Design Spec 生成设计文档 30 30
Design 具体设计 60 30
Coding 具体编码 150 180
Test 测试(自我测试,修改代码,提交修改) 60 180
Reporting 报告 30 60
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 30
合计 990 1320

二、具体分工

  • 林钊宁
    界面设计与博客撰写
  • 黄明浩
    数据处理与编码

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

思路

这次作业采用了jquery+bootstrap+echarts实现,本来只准备用bootstrap实现的,然后在查阅资料的时候发现了echarts,觉得echarts的树形图功能很契合这次的作业,而且也比较美观,就采用了echarts。解析文本,具体使用了split方法。首先逐行分解,提取出导师,记为根节点;再提取出学位记为导师的子节点;然后按'、'提取出姓名,记为学位的子节点;技能/经历作为姓名的子节点。最后通过根节点逐层生成树。

DFD图

关键代码部分

  • echart实现
var  myChart = echarts.init(document.getElementById("container"))
            myChart.setOption(option = {
                tooltip: {
                trigger: 'item',
                triggerOn: 'mousemove'
                },
                series: [
                    {
                    type: 'tree',
                    data: [tree_data],
                    top: '1%',
                    left: '7%',
                    bottom: '1%',
                    right: '20%',
                    symbolSize: 7,
                    label: {
                        normal: {
                            position: 'left',
                            verticalAlign: 'middle',
                            align: 'right',
                            fontSize: 9
                        }
                    },
                    leaves: {
                        label: {
                            normal: {
                                position: 'right',
                                verticalAlign: 'middle',
                                align: 'left'
                            }
                        }
                    },
                    initialTreeDepth: 10,
                    expandAndCollapse: true,
                    animationDuration: 550,
                    animationDurationUpdate: 750
                    }
                    ]
            });
  • 数据处理
        var text_str = document.getElementById('inputs').value;//得到输入框的值
        if(text_str == ""){
            alert("输入信息不能为空!");
        }
        /*将输入数据按导师分成块*/
        block_str = text_str.split('\n\n\n');//分开两份信息
        for(var i = 0;i < block_str.length;i++)
        {
            line_str = block_str[i].split('\n');//数据按行分开
            var item = line_str[0].split(':');//将每行数据的职位和姓名分开
            if(item[0] != "导师"){
                alert("导师行错误!");
            }
            var teacher = item[1];
            next_node[teacher] = [];//子节点
            jobs[teacher] = item[0];
            names.push(teacher);//保留导师的姓名以便使用
            Manage_Text(line_str,teacher);//处理学生数据
            Creat_Tree();
function Manage_Text(line_str,teacher)
    {
        /*处理学生信息*/
        for(var i = 1;i < line_str.length;i++)
        {
            if (line_str[i] === '') continue;
            if(!isNaN(line_str[i].slice(0, 4))){
                for(var val of students)
                {
                    /*按学生学历分别处理*/
                    if(line_str[i].indexOf(val) != -1)
                    {
                        var item = line_str[i].split(':');//将学生学历与姓名分开
                        var stu_str = item[0]+teacher;
                        next_node[teacher].push(stu_str);//将导师与学生学历节点连接
                        jobs[stu_str] = val;
                        next_node[stu_str] = [];
                        parents[stu_str] = 1;
                        names.push(stu_str);//保留学生学历以便使用
                        break;
                    }
                }
                /*处理学生姓名*/
                var stu_names = item[1].split('、');//将同行学生分开处理
                for(var val of stu_names)
                {
                    next_node[stu_str].push(val);//将学生学历与学生姓名节点连接
                    parents[val] = 1;//标记学生有导师
                    jobs[val] = item[0];
                    next_node[val] = [];
                    names.push(val);//保留学生姓名以便使用
                    sname.push(val);
                }
            }
            else
            {
                /*处理技能*/
               var item1 = line_str[i].split(':');//姓名与技能分开
                for(var val of names)
                {
                    if(item1[0].indexOf(val) != -1)
                    {
                        var skill_str = item1[0] + val;
                        next_node[val].push(skill_str);
                        jobs[skill_str] = val;
                        next_node[skill_str] = [];
                        parents[skill_str] = 1;
                        name.push(skill_str); 
                    }
                    var skills = item1[1].split('、');
                    for(var val of skills)
                    {
                        next_node[skill_str].push(val);//技能与学生姓名连接
                        parents[val] = 1;//标记有父节点
                        jobs[val] = item1[0];
                        names.push(val);
                    }
                }
            }
        }
    }

四、成果展示

实现了树之间的关联,即能够找到导师的导师

五、目录说明和使用说明


TStree.html是主页面,用户直接双击文件夹中的TStree.html或右键选择浏览器打开就能运行我们的网页。其余文件均为所要引用的js文件和css文件

六、Github的代码签入记录

七、遇到的困难与解决办法

之前都没接触过web的编程,这次算是一周入门,不过感受到html css挺好玩的。首先遇到的困难就是在实现树方面了,找了好几天bootstrap实现树的方法,但是看来看去都是不是很满意,而且实现起来也比较麻烦(懒,怕麻烦)最后发现了echarts,很符合这次作业的要求,实现起来也不是太麻烦。然后就是输入文本处理了,遇到了各种各样的问题,最后也只是能做出一棵树来,还有很多功能没能实现,接下来会慢慢去完善吧。这次作业还是收获很多的,既给了我一个接触之前就有兴趣的web的机会,也学到了不少东西。

八、单元测试

因为时间来不及,就采用了白盒了测试,白盒测试

单张图

数据
导师:a
2018级硕士生:b、c、d
2017级博士生:e、f、g
2019级本科生:h、i、g
结果:

单独一棵树,其中某一叶节点点了技能

数据:
导师:a
2018级硕士生:b、c、d
2017级博士生:e、f、g
2019级本科生:h、i、g

a:ab、cd

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

关联树

数据:
导师:a
2018级硕士生:b、c、d
2017级博士生:e、f、g
2019级本科生:h、i、j

导师:e
2020级本科生:k、l、m
结果:

九、队友评价

  • 优点:很好学,这次作业我们两个都是零基础,他学了很多东西
  • 缺点:没有体现出结对编程的优势,两个人就是各自做各自的事
posted @ 2020-10-12 15:04  L-Doragon  阅读(145)  评论(1编辑  收藏  举报