2020软件工程作业05

软件工程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
作业要求 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10619
作业目标 结对编程完成家族树的实现
作业正文 见下文
其他参考文献 百度,CSDN,博客园

Github 项目地址:https://github.com/ming-1225/20177699-20177709

结对成员具体分工

20177699 梁明:界面设计编写博客。
20177709 王屹杰:家庭树设计,测试。

PSP 表格:

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

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

实现流程图如下:

代码如下:
调用getvalue函数,从文本框读取数据,再用split对数据分行,循环找出为空的行并返回,这样就找到一组数据,再分别对每组数据进行处理就能实行多棵树并存。数据处理就是把数据处理成有层次性的数据,以便使用echart生成树。

function getvalue(){
var treedata=Array();
    var i,j,k,l=0;
    var str=$("#input").val();  //获取输入
    var arrstr=Array();
    arrstr=str.split("\n");//数据分行

    for(i=0;i<arrstr.length;)
    {
        for(j=i+1;j<arrstr.length;j++)
        {
            if(arrstr[j]=='')
            {
                break;
            }

        }  //此时i~j-1为一组数据


        var doctor=[],master=[],bachelor=[]; //存放学生数据
        for(k=i;k<j;k++)
        {

            var d=0,m=0,b=0;
            if(k==i)
            {
                treedata.push({"name":"",
                    "children":[{"name":"博士生",
                        "children":[]},{"name":"硕士生","children":[]},
                        {"name":"本科生","children":[]}]
                });
            }
            var item=arrstr[k].split(':');
            if(item[0].includes("导师")){
                treedata[l]["name"]=item[1];
            }
            else if(arrstr[k].includes("博士生")){

                for(d=0;d<doctor.length;d++){
                    if(arrstr[k].slice(0,5)==doctor[d]["name"]){
                        var student=item[1];
                        var students=item[1].split("、");//存放每个学生姓名
                        for(var x=0;x<students.length;x++){
                            var studentName=students[x];
                            student={"name":studentName,"children":[]};
                            doctor[d]["children"].push(student);
                        }
                        break;
                    }
                }
                if(d==doctor.length){
                    var student={"name":arrstr[k].slice(0,5),"children":[]};
                    doctor.push(student);
                    student=item[1].split("、");

                    for(var x=0;x<student.length;x++){
                        var s={"name":student[x],"children":[]};
                        doctor[d]["children"].push(s);
                    }
                }
            }
            else if(item[0].includes("硕士生")){
                for(d=0;d<master.length;d++){
                    if(arrstr[k].slice(0,5)==master[d]["name"]){
                        var student=item[1];
                        var students=item[1].split("、");//存放每个学生姓名
                        for(var x=0;x<students.length;x++){
                            var studentName=students[x];
                            student={"name":studentName,"children":[]};
                            master[d]["children"].push(student);
                        }
                        break;
                    }
                }
                if(d==master.length){
                    var student={"name":arrstr[k].slice(0,5),"children":[]};
                    master.push(student);
                    student=item[1].split("、");
                    for(var x=0;x<student.length;x++){
                        var s={"name":student[x],"children":[]};
                        master[d]["children"].push(s);
                    }
                }
            }
            else{
                for(d=0;d<bachelor.length;d++){
                    if(arrstr[k].slice(0,5)==bachelor[d]["name"]){
                        var student=item[1];
                        var students=item[1].split("、");//存放每个学生姓名
                        for(var x=0;x<students.length;x++){
                            var studentName=students[x];
                            student={"name":studentName,"children":[]};
                            bachelor[d]["children"].push(student);
                        }
                        break;
                    }
                }
                if(d==bachelor.length){
                    var student={"name":arrstr[k].slice(0,5),"children":[]};
                    bachelor.push(student);
                    student=item[1].split("、");
                    for(var x=0;x<student.length;x++){
                        var s={"name":student[x],"children":[]};
                        bachelor[d]["children"].push(s);
                    }
                }
            }


        }
        treedata[l]["children"][0]["children"]=doctor;
        treedata[l]["children"][1]["children"]=master;
        treedata[l]["children"][2]["children"]=bachelor;


        l=l+1;
        i=j+1;
    }
    for(i=0;i<treedata.length;i++)
    {
        var data=[];
        data[0]=treedata[i];
        var x=i.toString();

        $("body").append("<div id='x' style=\"width:100px0;height:900px;\"></div>");
        $("#x").attr('id',x);
        data[0]=treedata[i];
        drawTree(data,x);
    }
} 

drawTree函数是在csdn上找的用echart构建树的函数

function drawTree(treedata,x) { var myChart = echarts.init(document.getElementById(x));//div元素节点的对象 myChart.setOption({ tooltip : { trigger : 'item', triggerOn : 'none' }, series : [ { type : 'tree', name : 'TREE_ECHARTS', data : treedata, top : '2%', left : '10%', bottom : '30%', right : '15%', symbolSize : 20, label : { normal : { position : 'left', verticalAlign : 'middle', align : 'right', fontSize: 30, color:"black" } }, leaves : { label : { position : 'right', verticalAlign : 'middle', align : 'left' } }, expandAndCollapse : true , initialTreeDepth : 10 //展示层级数 } ] });

成果展示

目录说明和使用说明

遇到的代码模块异常及解决方法

之前完全没接触过网页的开发,所以花了很长时间来学习有关网页的设计。在处理数据时,没有把数据整理成层次性的,一直生成不了树,在同学的帮助下,学习了echart构建树,总算完成了任务。

评价队友

梁明:我队友很厉害,懂得查阅资料,人很聪明,这是我们第二次结对,收获很多。
王屹杰:条理清晰,行动迅速,主动积极,动手能力强。

posted @ 2020-04-17 17:32  梁大明  阅读(144)  评论(0编辑  收藏  举报