`

项目中树的设计

阅读更多

 

62.  现在开始做分销商这一块的功能,主要有一个树形的功能。这个树形结构功能我们做得不是很好,不太灵活 ,关于这个树形结构有一些组件,做的比较好。在这个项目里不使用。

 

 

63.  先来看一下,树的几种设计方式:

1,不带冗余字段,id,pid    一般使用id,pid已经足够了。但是这种方式在

遍的时候有一个效率的问题,因为我要看一下下面有没有结点。

 

 

2, 带冗余字段  id,pid,isleaf,childrencount     这种方式:通常引入一个看它是不是叶子,我也可以加入他有多少孩子。这样我容易算出来 ,我拿到这个字段一看,下面有多少孩子我知道了。而没有必要每次算,

 

 

3, 采用固定的字符串,00  01 001 0001

    1.    00所有分销商

    2.    01华北区

    3.    001北京市

    4.    0001北京医药股份有限公司

 

 

 

 

64.  再来看一下这张分销商信息的表,这个一个自连接,在这里有一个pid,pid里面的值全部来源于id,

 

 

65.  分销商在这棵树形结构上都 是平等的。比如说北京市下面有北京医药股份有限公司,这可能是一级分销商,如果还有一个二级分销商也是在北京市下面,不会在北京医药股份有限公司下面还显示二级。

 

 

66.  我们分销商要属于一个区域,华北区,北京市,这些都是区域,区域下面挂了分销商,我们的设计是这样的,就放在一张表里面,这张表里面既放了区域又放了分销商,以前 提到过,这样不太好,冗余量太大,因为假如说是区域的话,它有名称,id,pid,那级别,分销商代码,其它的都没有,那么就都冗余了,         另外还有一个终端客户表,里面也有一个树形结构要做,其实和分销商差不多,那么在终端客户里面你又会重复写区域相关的记录,如北京 ,,,,,,当时 说过最好是把树形结构区域抽出来。区域是一个树形结构,分销商只属于它,所以单独建一张分销商表,再抽一个区域这样会好点。分销商,终端都不是树形结构,只要把这两个往上挂就可以了。区域是一个树形结构,但是我们没有采用这种方式,就放一张表里面,因为放一张表里面,大家要处理一些事情,有点麻烦,为了给大家增加一点难度,左连接,右连接,

 

 

/**

* 得到顶级目录

* @param regionColumnId

* @return

*/

public int getMyTopRegionColumnId(int regionColumnId){

RegionColumn regionColumn = getBeanById(regionColumnId);

if(regionColumn.getParentId() == 0){

return regionColumn.getRegionColumnId();

} else {

return getMyTopRegionColumnId(regionColumn.getParentId());

}

}

 

 

 

/** 得到栏目树 **/

public String getCateTree(String tree, int rootColumnId,int regionId) {

RegionColumn rootBean = regionColumnDAO.getBeanById(rootColumnId);

StringBuffer treeStrBuf = new StringBuffer();

if (rootBean != null) {

treeStrBuf.append(tree + ".add(");

treeStrBuf.append(rootColumnId);

treeStrBuf.append(",-1,");

treeStrBuf.append("\"<span  onclick=showLoad(" + rootColumnId + ",'"

+ rootBean.getName() + "')>" + rootBean.getName()

+ "</span>\",");

treeStrBuf.append("'/admin/article/list.htm?cata_id=" + rootColumnId

+ "',");

treeStrBuf.append("''," + "'body_iframe');\r\n");

List<RegionColumn> subList = getSubCategory(rootColumnId, 0, regionId);

if (subList != null && subList.size() > 0) {

dumpCatalogTree(tree, subList, treeStrBuf, rootColumnId,regionId);

}

}

return treeStrBuf.toString();

}

public String getCateTree(String tree, int regionId){

return this.getCateTree(tree, 0, regionId);

}

 

/** 递归得到树 **/

private void dumpCatalogTree(String tree, List<RegionColumn> lisBean,

StringBuffer treeStrBuf, int parentId,int regionId) {

for (RegionColumn bean : lisBean) {

treeStrBuf.append(tree + ".add(");

treeStrBuf.append(bean.getRegionColumnId());

treeStrBuf.append("," + parentId + ",");

treeStrBuf.append("\"<span  onclick=showLoad("

+ bean.getRegionColumnId() + ",'" + bean.getName() + "')>"

+ bean.getName() + "</span>\",");

if (bean.getIdentifier() != null

&& bean.getIdentifier().equals("qzz"))

treeStrBuf.append("'/admin/article/getResumeByRegionId.htm',");

else if (bean.getIdentifier() != null

&& bean.getIdentifier().equals("zpr"))

treeStrBuf.append("'/admin/article/getEmployByRegionId.htm',");

else

treeStrBuf.append("'/admin/article/list.htm?cata_id="

+ bean.getRegionColumnId() + "',");

treeStrBuf.append("''," + "'body_iframe','','',false);\r\n");

List<RegionColumn> subList = getSubCategory(bean

.getRegionColumnId(), 0,regionId);

if (subList != null && subList.size() > 0) {

dumpCatalogTree(tree, subList, treeStrBuf, bean

.getRegionColumnId(),regionId);

}

 

}

}

 

public RegionColumn getRegionColumn(int id) {

return regionColumnDAO.getBeanById(id);

}

 

public List<RegionColumn> getSubCategory(int cataId, int rootCloumnId,int regionId) {

return regionColumnDAO.getSubCategory(cataId, rootCloumnId,regionId);

}

 

public int getTopRegionColumnId(int cata_id) {

return regionColumnDAO.getTopRegionColumnId(cata_id);

}

 

 

分享到:
评论

相关推荐

    哈夫曼树 课程设计 实验报告

    总的来说,这个课程设计项目通过实践操作加深了对哈夫曼树和编码的理解,同时也展示了如何将这些理论知识应用于实际的数据压缩问题中。通过这样的实验,学生可以更好地掌握数据压缩的基本原理,提升编程能力和问题...

    树形结构设计总结java demo

    总结来说,“树形结构设计总结java demo”可能涵盖了如何在Java中创建树形结构、进行基本操作、以及可能的高级应用。通过分析“tms”文件中的源代码,我们可以更深入地学习和理解这些概念,提高我们的编程技能。对于...

    课程设计基于C语言B树存储的图书管理系统源码+文档说明(高分项目)

    课程设计基于C语言B树存储的图书管理系统源码+文档说明(高分项目)课程设计基于C语言B树存储的图书管理系统源码+文档说明(高分项目)课程设计基于C语言B树存储的图书管理系统源码+文档说明(高分项目)课程设计...

    基于QT+C++实现B树可视化+源码+项目文档+效果展示(毕业设计&课程设计&项目开发)

    基于QT+C++实现B树可视化+源码+项目文档+效果展示,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于QT+C++实现B树可视化+源码+项目文档+效果...

    金地_高端项目_产品价值树研究.pptx

    【产品价值树】是房地产行业中一种用于分析和构建产品定位及价值策略的工具,尤其在高端项目中,它显得尤为重要。在金地的高端项目研发过程中,产品价值树被用来评估和确定项目的各项核心价值,以提升产品的市场竞争...

    不错的适合练手、课程设计、毕业设计的JSP项目源码:JSP无限级分类目录树-sorttree.rar

    不错的适合练手、课程设计、毕业设计的JSP项目源码:JSP无限级分类目录树_sorttree.rar不错的适合练手、课程设计、毕业设计的JSP项目源码:JSP无限级分类目录树_sorttree.rar不错的适合练手、课程设计、毕业设计的...

    JSP项目中JAVASCRIPT 树形菜单

    总结来说,在JSP项目中,利用JavaScript实现树形菜单涉及HTML结构设计、CSS样式美化、JavaScript逻辑处理以及可能的数据交互。通过这些技术,我们可以为用户提供直观且易于操作的树状结构,提升用户体验。

    easy ui tree 前后端树形结构项目 权限管理demo

    在这个项目中,Tree组件用于展示树形结构数据,常用于表示组织结构、目录层级等。它支持多级展开、选择节点、拖拽排序等功能,便于用户直观地操作和管理权限。 2. **权限管理**:权限管理是系统安全的核心部分,...

    AVL树课程设计(演示程序)

    在课程设计中,还加入了背景音乐这一创新元素,这可能旨在使学习过程更加愉快,提高用户的参与度和兴趣。 总结来说,这个“AVL树课程设计”项目是一个实用的教学工具,通过实际的Java代码展示了AVL树的数据结构和...

    QT结构树界面设计,一级部门,二级部门,人员等

    这个“QT结构树界面设计”项目显然展示了如何在QT应用中构建一个层次化的视图,用于表示一级部门、二级部门以及人员的组织结构。 首先,我们要理解QT中的`QTreeWidget`或`QTreeView`类。这两个类是实现树状视图的...

    基于Java的cq_xw_default_tree重庆星网故障树项目设计源码

    该项目为重庆星网故障树的Java实现,源码包含41个文件,其中Java源文件28个,XML配置文件9个,Git忽略文件2个,YML配置文件1个,并附带一个JAR包文件。

    基于决策树的垃圾邮件分类器的设计与实现1

    资源概述:该项目旨在设计和实现基于决策树的垃圾邮件分类器,以判定电子邮件是否为垃圾邮件。该项目使用 Python 语言作为开发语言,使用 Django 框架作为 Web UI 框架,并使用了多种依赖库,如 jieba、numpy、scipy...

    数据结构哈夫曼树课程设计

    ### 数据结构哈夫曼树课程设计相关知识点 #### 哈夫曼树基础概念 - **定义**: 哈夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度最短的二叉树,即对于同一棵二叉树叶节点的权值保持不变的情况下,...

    论文研究-基于决策树算法的设计模式抽取 .pdf

    设计模式是软件开发中应用广泛的一种经验总结,它能指导开发者更高效地解决软件设计中常见的问题。设计模式不仅包括架构层面,而且涵盖程序设计、项目管理和系统工程等多个方面。然而,在软件系统的生命周期中,尤其...

    数据结构二叉平衡树课程设计

    这样的平衡状态使得在树中进行查找、插入和删除等操作的时间复杂度都能保持在对数级别,极大地提高了效率。在数据结构的学习中,理解和掌握二叉平衡树是至关重要的。 1. **二叉搜索树(BST)基础**: - 二叉搜索树...

    数据结构课程设计 二叉排序树与平衡二叉排序树

    在这个课程设计中,我们将重点探讨如何利用二叉链表作为存储结构来实现二叉排序树,并进一步研究平衡二叉排序树的概念。 首先,二叉排序树的特性是每个节点的左子树只包含小于该节点的元素,而右子树则包含大于或...

    课程设计——二叉查找树

    在这个“课程设计——二叉查找树”项目中,开发者创建了一个桌面应用程序,用于实现对二叉查找树的操作。用户可以通过界面进行交互,进行查找操作,同时能够直观地观察到操作的结果。这对于学习和理解二叉查找树的...

    C++课程设计-基于B+树数据库的图书管理系统+源代码+文档说明(高分项目)

    C++课程设计-基于B+树数据库的图书管理系统+源代码+文档说明(高分项目)个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做大作业课程设计的学生和需要项目实战练习的学习者,可...

    管道铺设算法三级项目(最小生成树)

    在IT领域,尤其是在图论和算法设计中,"最小生成树"是一个重要的概念。这个概念主要应用于网络设计、数据通信和资源分配等场景,旨在找到一个连接所有节点的树形结构,使得边的总权重最小。Prim算法是解决这一问题的...

Global site tag (gtag.js) - Google Analytics