• 2020软件工程作业05


    这个作业属于哪个课程 <https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1>
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10619
    这个作业的目标 结对完成家庭树
    作业正文 此文
    其他参考文献 jstree使用说明,百度

    GitHub链接

    https://github.com/Lesviii/20177694-20177688

    具体分工

    周佳欣:界面设计,编写博客(博客地址:https://www.cnblogs.com/Aleonx/)
    曾扬威:家庭树设计,测试(博客地址:https://www.cnblogs.com/Lesvi/)

    PSP表格

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

    解题思路与设计实现

    在查阅了相关资料后,发现完成此树可以使用jstree插件实现
    jsTree 是一个jquery 插件, 提供交互式树.它是完全免费的,开源的,并根据MIT许可进行分发。jsTree易于扩展,可定义和配置,它支持HTML和JSON数据源以及AJAX加载。
    jsTree可以在盒子模型(内容框或边框)中正常运行,可以作为AMD模块加载,并具有用于响应式设计的内置移动主题,可以轻松自定义。它使用jQuery的事件系统,因此对树中各种事件的绑定回调是熟悉且容易的。
    同时jstree还可以
    1.拖放支持
    2.内联编辑,创建和删除
    3.三态复选框
    4.可定制的节点类型
    树的结构设计:树的主节点是导师,导师之下是三个学位,三个学位点开后是入学的年份,点开入学年份就是学生

    设计实现

    首先要使用jstree必须引入jquery,jstree是jquery的一个插件
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"> </script>
    <script src="./jstree/dist/jstree.min.js"></script>      
    <link rel="stylesheet" href="./jstree/dist/themes/default/style.min.css"/>
    

    前端UI页面使用css来完成

    body {
       
        display: flex;
        flex-direction: row;
        font-family:微软雅黑;
        background:#494ca2;
        font-size:100%;
        line-height:1em;color:#d53939;
        min-920px;
        border-top:10px solid #0c0e0e
        background-image: url("QQ图片20200415111125.jpg");
    }
    
    #tree {
        display: flex;
        flex-wrap: wrap;
        align-items: flex-start;
         40%;
        background-color: #e3e7f1;
        padding: 20px 20px 20px 200px;
        box-shadow: inset 4px 0px 10px 3px rgba(0,0,0,0.5);
        background-image: url("QQ图片20200415111611.jpg");
        
    }/*生成的树文本*/
    
    #original_tree {
         80%;
        min-height: 300px;
        border-radius: 10px;
        background-color: rgba(255, 255, 255, 0.5);
        padding: 15px;
        border: 0px;
        box-shadow: inset 0px 1px 1px rgba(0,0,0,0.075);
        font-size: 15px;
        font-family:微软雅黑;
        margin-top: 80px;
        box-shadow: 0px 0px 10px 2px #494ca2;
        background-image: url("QQ图片20200415111611.jpg");
    }/*输入文本框*/
    
    #textarea {
        position: absolute;
         45%;
        text-align: center;
        margin-top: 200px;
        background:#494ca2;
        outline: 0;
        border: 1px solid #f95d5d;
        box-shadow: 0px 0px 10px 0px #f95d5d;
        
      
    }
    /*文本输入框*/
    
    #input {
         50%;
        height: 800px;
        background-color: #494ca2;
        min-height: 850px;
        outline: 0;
        border: 1px solid #f95d5d;
        box-shadow: 0px 0px 10px 0px #f95d5d;
        background-image: url("QQ图片20200415110915.jpg");
    }
    
    #confirm_button {
    border:1px solid #b42323;
    box-shadow: 0 1px 2px #e99494 inset,0 -1px 0 #954b4b inset,0 -2px 3px #e99494 inset;
    background: -webkit-linear-gradient(top,#d53939,#b92929);
    background: -moz-linear-gradient(top,#d53939,#b92929);
    background: linear-gradient(top,#d53939,#b92929);
    position: absolute;
    left: 10%;
    border-radius: 5px;
     35%;
    height: 10%;
        
    }
    /*确定按钮框*/ 
    
    #empty_button
    {
        border:1px solid #b42323;
    box-shadow: 0 1px 2px #e99494 inset,0 -1px 0 #954b4b inset,0 -2px 3px #e99494 inset;
    background: -webkit-linear-gradient(top,#d53939,#b92929);
    background: -moz-linear-gradient(top,#d53939,#b92929);
    background: linear-gradient(top,#d53939,#b92929);
        left: 54%;
        position: absolute;
         35%;
        height: 10%;
        border-radius: 5px;
    }
    /*重置按钮*/
    
    div[id^="tree_"]
    {
         20%;
        background-color: yellow;
        padding: 15px;
        border-radius: 8px;
        margin-right: 60px;
    }
    /*树背后的框*/

    通过jstree实现树节点的展开与收缩,同时还添加修改节点,删除节点,添加节点的操作

    $(function(){$("#tree_"+k+num+"").jstree({
            plugins : ["types","contextmenu"], 
            'core' : {
                        
                        "check_callback" : true,},
          "types": {
              "default" : {
                "icon" :false,  
              },
          },
          'contextmenu':{
                        'items' : {
                            'add':{
                                'label':'新增分类',
                                'action':function(obj){
                                   
                                   var inst = jQuery.jstree.reference(obj.reference);
                                    
                                    var clickedNode = inst.get_node(obj.reference);
                                    
                                    var newNode = inst.create_node(clickedNode,
                                        {    //'id': 'ajson20',
                                            //'parent' : 'ajson2',
                                            'icon' : 'jstree-file',
                                            'text':'新节点'},'last',function(node){
                                            
                                            inst.edit(node,node.val);
                                        },'');
                                }
                            },
                            'rename':{
                                'label':'修改分类',
                                'action':function(obj){
                                    var inst = jQuery.jstree.reference(obj.reference);
                                    var clickedNode = inst.get_node(obj.reference);    
                                    inst.edit(obj.reference,clickedNode.val);
                                }
                            },
                            'delete':{
                                "label": "删除分类",
                                'action':function(obj){
                                    var inst = jQuery.jstree.reference(obj.reference);
                                    var clickedNode = inst.get_node(obj.reference);
                                    inst.delete_node(obj.reference);
                                }
                            }
                        }
                    }
          });});
    

    成品展示

    首页面

    家庭树输入后,树的展示与节点的展开

    多组家庭树输入中间空格便可以展示多组家庭树,或者输入一组家庭树后点击重置按键再输入新的家族树

    当输入空或格式不正确时,会弹出提示

    可直接在已创建好的家庭树上进行,修改、添加、删除

    单元测试

    使用Mocha进行测试

    目录说明和使用说明

    已在GitHub上传了README文件

    Github签入记录

    结对困难与解决方法

    因为我们两人其实都不是很会编程,我们都只是略懂一二,所以在设计树和实实在在体现出设计中
    的要素上我们遇到了很大的问题,不知道应该如何去实现自己的设计,但是之后我们查阅了相关的
    资料,然后知道可以使用jstree来实现,于是我们就解决了这个问题,通过这个问题我们同时也明
    白了,我们需要学习的还有很多很多。。

    评价队友

    周佳欣:我的搭档是一个很聪明的人,他总是能想出好的解决办法,同时他也知道如何去查阅相关
    的资料,去学习新的知识。
    曾扬威:我们这是第二次进行结对编程了,我一直很信任我的搭档,我认为她总是能够完成我心里
    的想法,我们两非常的有默契,而且她也是一个非常nice的好兄弟。

    自评表

    博客评分项目满分自评分
    Github项目地址11
    给出具体分工11
    给出PSP表格11
    代码组织与内部实现设计(类图)55
    说明算法的关键与关键实现部分流程图105
    有价值的代码片段53
    创意独到之处32
    实现思路33
    重要的/有价值的代码片段22
    实现成果展示22
    说明你的目录是如何组织的22
    测试人员如何运行你的网页22
    说明你们选用的测试工具42
    展示出项目部分单元测试代码32
    说明构造测试数据的思路30
    Github的代码签入记录11
    结对困难及解决方法44
    评价队友22
    程序评分项目满分自评分
    输出呈现87
    各种输入情形的处理75
    美观性1510
    方便65
    附加特点105
    自评分总计10072
  • 相关阅读:
    dapi 基于Django的轻量级测试平台七 怎样部署到生产环境
    dapi 基于Django的轻量级测试平台六 怎样使用压测功能
    dapi 基于Django的轻量级测试平台五 测试报告
    dapi 基于Django的轻量级测试平台四 任务设置
    【Spark 内核】 Spark 内核解析-上
    【数据结构与算法】—— 插入排序
    大数据框架开发基础之Sqoop(1) 入门
    【数据结构与算法】—— 二分查找
    【数据结构与算法】—— 插入排序
    【数据结构与算法】—— 选择排序
  • 原文地址:https://www.cnblogs.com/Lesvi/p/12715443.html
Copyright © 2020-2023  润新知