动态目录树

2024-09-15

动态目录树(精选4篇)

动态目录树 篇1

0 引言

根据教育技术规范, 讲授一门课程至少应该有课程标准、课程教学设计、每堂课的课堂教学设计、每堂课的教案等文档, 除此之外, 有些教师还会设计每堂课的教学PPT, 为了生动地讲授课程而收集的各种影音文件, 为学生自主学习准备的电子文档等多种学习资源。这些大量的文档资源如何合理组织, 并能快速实现精确查询迫在眉睫。课程资源管理系统正是在这种背景下设计开发的, 通过该系统教师可以非常方便地组织管理课程相关的各种资源。

目前在各类应用系统中, 目录树导航是一种很常见的导航方式, 它能够清晰地表现数据之间的层次和分类关系。目录树分为两种, 一种是静态目录树, 另一种是动态目录树。静态目录树是指在系统设计阶段就被开发者固定设置好目录内容的目录树, 在系统运行阶段不能被更改;而动态目录树是指在系统运行阶段, 根据用户的操作动态生成目录内容的目录树。动态目录树要比静态目录树更加实用方便, 允许用户任意添加修改目录树内容。课程资源管理系统中, 主要功能就是管理大量动态的有层次和分类关系的课程资源, 而动态目录树恰好可以在该系统中发挥优势。

1 开发工具与技术

由于考虑到每门课程都会有大量的数据资源, 学校的服务器存在无法满足所需的存储空间、网络传输速度不够理想、无法处理大量数据冗余等问题, 课程资源管理系统目前采用了单机个人版的形式。本系统的开发平台采用的是微软公司的Visual Studio 2008, 具体程序设计语言为C#, 数据库采用了微软的Access2003, 使用到的主要技术有ADO.NET数据访问技术。

1.1 Visual Studio 2008

Visual Studio 2008是微软公司推出的开发平台。该平台支持用户使用微软研发的多种程序设计语言, 例如, C#、VB、J#和VC++等创建传统的Windows桌面程序和网络应用程序, 也可以用来创建网络服务、智能设备应用程序和 Office 插件等。Visual Studio 2008最大的特点就是继承了微软公司各类软件的一贯特色, 简单易用, 且开发效率极高, 功能强大。

1.2 C#语言

C#是当今非常热门的面向对象程序设计语言, 微软主要用其对抗风靡全球的Java。由于C#是在Java之后开发, 所以继承了Java的全部优点, 并加入了一些先进的面向对象理念, 因此, C#可以说是一门相当优秀的面向对象语言。使用C#, 可以创建传统的Windows桌面应用程序、Web服务、B/S应用程序以及很多其它类型的程序。C#的语法类似C语言, 所以熟悉C、C++或Java的开发人员都可以快速上手, 在短时间内就能够使用C#高效地工作。

1.3 TreeView控件

TreeView控件又称为树型视图控件, 主要用于显示具有分类和层次关系的数据。该控件以树状视图方式向用户展示层次化的数据, 同时允许用户对这些数据和显示方式进行控制更改。

TreeView 控件中显示的每个数据项都是一个TreeNode (节点) 对象, 这些节点对象都被包含在Nodes集合内。通过Nodes集合的Add、Remove、Find等方法, 可以实现向集合添加节点、从集合删除节点和从集合内查找节点等功能。本系统中主要的TreeView控件在主界面上, 如图1中的左侧目录树所示。

1.4 ADO.NET数据访问技术

ADO.NET 是一组类的集合, 这些类提供了对关系数据、XML 和应用程序数据的一致访问功能, 是 .NET Framework 中不可缺少的一部分。通过这些类, 可以连接各种数据源、执行查询命令、调用存储过程、存储、添加和更新数据等。例如, 连接Access数据库使用的是OleDbConnection类, 执行查询命令使用的是OleDbCommand类, 存储查询结果用到DataSet类等。

2 动态目录树导航实现

课程资源管理系统主要实现的是目录的分层次管理。通过需求调查, 目录的管理主要包括目录的动态添加、删除和修改, 以及高效查找。对于这些管理需求, 使用TreeView控件可以很好地实现其功能, 并且能够清晰表现目录的层次结构。具体开发过程主要分为两个环节, 一是数据库的设计, 二是相关功能的设计。

2.1 数据库设计与实现

课程资源管理系统中的数据被存储在一个Access数据库文件里, 并创建了一个单独的tb_Tree数据表专门放置目录树的数据, 表中的每条记录都对应目录树中显示的一个数据项 (节点) 。tb_Tree表的关系模式如下所示:

tb_Tree (节点编号, 节点名称, 父节点编号)

为了能够在各记录之间建立层次关系, 在tb_Tree表中加入了pid (父节点编号) 字段, 如图2所示, pid字段中存放的是该记录节点的父节点编号, 例如, “47”表示该记录节点是节点编号 (Cid) 为“47”的节点的子节点。其中, 数字“0”表示该记录节点无父节点, 是树的根节点。

2.2 功能设计与实现

系统的功能方面, 主要介绍连接数据库并获取数据、创建目录树、导航功能的实现等3项内容。

2.2.1 连接数据库并获取数据

对于课程资源管理系统, 目录树的信息都被保存在数据库内, 所以需要使用ADO.NET数据访问技术将目录树信息读取到程序中, 之后通过这些信息创建目录树。连接数据库和获取数据的大致步骤是:①创建一个自定义的DBHelper类, 在其构造方法中加入连接数据库的语句。连接Access数据库用到的是OleDbConnection类;②在DBHelper类中, 编写具体获取数据的方法getMyDataSet。该方法有一个参数, 用于接收外部的SELECT语句, 并返回DataSet类型的查询结果集;③需要获取数据的时候, 用DBHelper类创建一个对象变量, 调用其getMyDataSet方法即可。

2.2.2 动态创建目录树

动态创建目录树用到的是tb_Tree表中的数据, 其pid字段决定了节点 (数据) 之间的层次关系, cname字段作为节点的文本, cid字段作为节点的Tag属性值。创建目录树用到了CreateTree和CreateTreeNode两种方法。其中CreateTree方法从数据表中找到父节点编号为0的节点, 并用这类节点作为树根, 调用CreateTreeNode方法创建其下面的所有子节点; CreateTree方法的伪代码如下所示:

2.2.3导航功能实现

因为给节点的Tag属性赋值了cid字段的值, 因此, 每个节点的Tag属性值都是唯一的, 所以Tag属性是实现导航功能的关键。当用户选择某个节点时, 便将该节点的Tag值作为查询条件执行不同的SELECT语句, 以此实现导航功能。

3结语

课程资源管理系统为教师提供了方便快捷的资源管理途径。在设计中由于使用了TreeView控件, 从而实现了分层显示、动态添加、修改、删除和快速查找目录等功能。TreeView控件使得用户界面清晰直观、操作灵活方便, 很好地满足了用户需求。

摘要:树型视图控件TreeView是Visual Studio 2008中的标准控件, 该控件以树的形式展现具有层次关系的数据, 能够非常方便地实现导航功能。课程资源管理系统中主要涉及目录和文件的分层次管理, 所以使用TreeView控件实现目录管理会非常恰当。使用TreeView控件可以实现清晰的目录分级显示和动态管理目录等功能, 并使得用户界面清晰直观, 操作灵活方便。

关键词:TreeView,目录树,数据导航,资源管理,课程管理

参考文献

[1]MSDN.C#语言和.NET Framework介绍[EB/OL].http://ms-dn.microsoft.com/zh-cn/library/z1zx9t92 (v=vs.80) .aspx.

[2]MSDN.ADO.NET[EB/OL].http://msdn.microsoft.com/zh-cn/library/e80y5yhx.aspx.

[3]斯琴巴图.SQL技术与网络数据库开发详解[M].北京:清华大学出版社, 2009.

动态目录树 篇2

在PowerBuilder信息管理系统使用树形目录技术,可以清晰地表达数据信息的层次及主次关系。从技术知识和应用举例两方面来阐述这个问题。

2 实现思路

(1)初始显示时只显示根节点。

(2)点击一节点,显示所有子节点同时下载数据更新。

(3)TreeView+Datawindow控件同时使用。

3 技术难点

3.1 通过TreeView控件创建目录树

通过数据窗口对象将数据库中的数据依据分类或级别字段显示在TreeView控件中,多级目录则通过For循环嵌套读取,然后利用相关的代码完成实现在不同目录之间切换和浏览的操作。

3.2 实时查询、显示数据信息

创建了TreeView控件之后,可以通过设置属性与调用方法对各结点对象进行操作,这些操作包括添加、删除等。在检索查询时可将TreeView控件与数据窗口后台的表通过外键建立关联实现。

4 相关知识

树视图项TreeViewItem是TreeView控件实现动态目录树的重要环节。因此掌握其属性及函数至关重要。

4.1 树视图项TreeViewItem属性

Label:树视图项的显示信息,类型为字符串。

Data:树视图项的内部值,可以为任意类型。

Level:树视图项在树视图中级别,必须为整型。

Children:它决定该项是否有下一层(如图1中班级名),为布尔型。

PictureIndex:该项非选中时所用的图标在图标队列中的编号,值为整型。

SelectedPictureIndex:该项选中时所用的图标在图标队列中的编号,值为整型。

4.2 生成TreeViewItem项的函数

ExpandAll():用来展开TreeView控件中所有项目。

InsertItemFirst():将加入项作为第一项。

InsertItemLast():将加入项作为最后一项。

InsertItem():将加入项插入到指定项的后面。

InsertItemSort():按顺序放置。

4.3 常用事件

Click:单击TreeViewItem项时,执行查询程序。

ItemPopulate:该事件在某TreeViewItem项首次展开时触发,触发的同时系统会将该TreeViewItem项的句柄通过参数handle传递过来。它主要用来生成对应项的下层信息项。

Selectionchanged:该事件在选择不同级别目录中触发,并传回newhandle和oldhandle参数值。

5 实现过程

5.1 窗口布局

如图1所示,首先建立数据表(字段为ID,JIBIE,XIBIE,CLASS,BZR,ZRS),然后生成d_sxsy(JIBIE,XIBIE,CLASS,BZR,ZRS),d_jb(JIBIE,XIBIE,CLASS,BZR,ZRS),d_jibie(JIBIE)数据窗口。最后给d_jb创建CLASS字段查询。在主窗体上拖一个TreeView控件,建立数据窗口控件dw_1、dw_2和dw_3,分别与d_sxsy、d_jibie和d_jb建立关联。

5.2 实现代码

5.2.1 窗口的open事件脚本

5.2.2 TreeView控件的Selectionchanged事件脚本

6 结语

在了解PB的采用目录树技术显示数据的优势后,提出实现该技术的思路以及难点,并简单罗列了用到的知识,以分级显示班级组织结构为例,描述了实现该技术的关键环节,加深了初学者对其的认识和应用。

参考文献

[1]周岐.PowerBuilder程序开发[M].北京,清华大学出版社,2004.

[2]刘大本.PowerBuilder程序设计教程[M].北京:中国水利水电出版社,2004.

动态目录树 篇3

工作流引擎是根据角色、分工和条件的不同, 提供对各应用系统有决定作用的信息传递路由解决方案[1]。目前, 市场上的工作流引擎系统, 流程事项的各环节和流转路径相对比较固定, 当流程发生变化时, 只能通过修改代码方式进行解决, 因此, 程序维护量比较大[2]。

工作流的变动不仅影响到程序的更改, 同时, 还会影响到占用该工作流的任务正常流转, 造成任务流转受阻。虽然现在推出了很多工作流引擎的框架, 例如, Shark和JBPM[3], 可以在此基础上制定个性化工作流引擎, 来满足我们对工作流灵活性和易维护性得要求[4], 但是当工作流进行更改时, 必须将正在使用该工作流的任务进行清理, 任务必须走完流程或者被删除重新发布, 否则无法修改工作流内容。因此, 虽然解决了灵活性问题, 但在工作流维护方面又增加了额外的工作量。为此, 基于.Net平台, 开发了一种较轻量级的工作流引擎, 用于任务流转。

同时, 为了保证在修改工作流的同时能够正确处理占用该工作流且未流转结束的任务。最终确定设计方案为:在更新或删除工作流时, 如存在使用该工作流且未结束流转过程的任务, 需要对任务的路由方向重新设置。

2 工作流引擎模型构建

本工作流引擎在架构上采用了目录树结构方式, 审批环节和审批人作为树的叶子节点, 若为审批组则该节点下需要关联审批组人员, 则审批组内的审批人员作为叶子节点。

2.1 节点模型

2.1.1 审批环节名称

在审批环节名称设置方面, 所有名称采用结构化处理, 即环节名称全部从节点名称表中选取。

2.1.2 审批对象

审批人即审批对象是在任务流转至各环节时处理该文的经办人, 每个审批环节均有不同审批人负责任务审核、批阅和签批。审批对象分为五类:审批个人、审批组、返回发文者、本部门负责人、总负责人。

1) 审批个人

即选择指定的人员作为审批人, 当任务流转至特定环节时, 由此人负责任务的审批, 其他人均看不到该文, 也无法进行审批。

2) 审批组

审批组可以选择一个部门, 例如, 测试组、研发组、项目组;也可以预先设置一个小组作为审批组, 例如, 部门领导组、工会小组、党员组。当任务流转至特定环节前, 需要用户从该审批组中选择人员作为下一审批人。

3) 返回发文者

任务在上一环审批结束后会自动返回至发文者进行处理。例如, 当系统维护费的预算经中心领导审批后返回给发文者, 发文者上传发票后继续下一流程审批。

4) 本部门负责人

任务在发布后或上一审批结束后, 自动流转至本部门领导进行审批, 当本部门领导大于两位以上, 则需要用户手工选择其中一位审批领导。

5) 总负责人

任务在发布后或上一审批结束后, 自动流转至总负责人进行审批, 当总负责人大于两位以上, 则需要用户手工选择其中一位审批领导。

2.2 工作流操作

工作流的操作包括工作流的建立、删除, 以及更新工作流, 工作的修改操作还包括了:删除节点、插入节点、更新节点内容。其中删除工作流、更新工作流 (包括:删除节点、插入节点、更新节点内容) , 此类操作在执行时, 需要判断当前操作的工作流是否被占用, 如有任务使用此工作流并且该任务未流转结束, 则该任务将被“挂起”, 需要将该任务转向其他节点, 进行下一步流转。

2.3 工作流接口设计

在工作流设置过程中, 通过调用workflow_interface () 接口选择节点类型并对工作流进行实例化。最终能够实现三种类型的工作流, 第一个种是以个人为审批对象的工作流person_approveflow () ;第二种是以组为审批对象的工作流group_approveflow () , 每次任务在流转到下一环节之前, 需要从该组选择下一审批人, 然后进行流转;第三种是个人审批与组审批相结合的工作流person_groupflow () , 即有些环节需要从组中选择下一审批人, 有些环节已固定审批人员, 不用选择。

3 工作流引擎实现

3.1 工作流创建

在工作流构建的过程中, 需要将用户的选项内容以及关联的表内容进行抓取, 传输至工作流程表中, 并生成目录树。具体事项如下:

1) 通过public Action Result Index () 函数进行初始化;

2) 通过递归方式:函数Action Result Create (Data Table table, LCSZ lcsz, string id) , 分别创建各子树, 并进行实例化。

3.2 工作流调用

通过前序遍历树的递归方式调用工作流进行流转, 并自左向右遍历树的每一个节点, currentnode为当前节点, nextnode为下一节点, 先访问第一个子树, 直到访问至叶子节点, 再访问该层的兄弟节点, 再遍历另一个兄弟子树, 直至遍历全部节点, 即流程全部走完。

3.3 工作流修改/删除

工作流程内容一旦发生变化, 例如, 工作流被修改, 包括:增加节点、删除节点、修改节点、删除工作流, 都将触发check_trigger触发器。通过check_trigger扫描当前流转过程中的任务是否占用该工作流, 如果有任务被占用, 工作流引擎自动将任务置为“挂起”状态, 需要将该任务进行重置, 重置方案为:1) 将任务退回至初始状态;2) 转到其他工作流节点;3) 转到本工作流未被删除/修改的节点, 如果该工作流即将被删除, 那么只能转移到其他工作流节点;最后更新或删除工作流。在程序执行的过程中, 首先一旦出现Trigger Action.Delete和Trigger Action.Update操作, 则执行trigg Context.Trigger Action触发任务, 即将其变为挂起”状态, 由修改者对任务重新设置。

4 工作流引擎性能测试

一般的工作流引擎是通过数据库调取流转路径的数据, 而本设计则是直接访问已生成的目录树, 来调取任务流转路由。记录了1 个用户, 10 个用户、50 个用户, 100 个用户并发调用两种工作流的平均执行时间, 过程为从任务流转活动开始到结束。其中, 1 个用户时, 使用一般工作流引擎平均执行时间为2.607s, 基于目录树的工作流引擎平均执行时间为1.477s;10 个用户时, 平均执行时间分别为3.261s与1.763s;50 个用户时, 平均执行时间分别为3.715s与1.904s;100 个用户时, 平均执行时间分别为4.213s与2.024s。以上测试可以看出, 对于执行同一类活动, 使用本设计的工作流引擎比一般工作流引擎所用要少得多。且随着并发数量的增加, 这一现象变得更加显著。

5 结束语

基于目录树的工作流引擎在建立工作流的过程中, 操作简单, 易于修改。在工作流调用过程中, 通过性能测试得出平均执行时间为1.792 秒, 时间复杂度为O (n) , 执行效率较高。并针对现有工作流设置过程中存在修改后造成流转中任务路由错误或受阻的情况, 设计了工作流修改与任务流转联动的机制, 保证了占用所修改工作流的任务能够重新选择节点进行新的路由。由于该工作流的设计刚初步完成, 在有些流转功能上还需要手工的参与, 在实现全部自动化路由方面, 需要进一步完善。

摘要:目前, 大多数工作流引擎流程复杂、环节较多, 维护起来难度较大。并且在工作流发生变动的情况下, 很容易影响到任务正常流转。为应对工作流引擎在使用过程中出现的加载效率低、灵活性小、流转受阻等问题, 提出了基于目录树结构的工作流引擎设计。

关键词:工作流,工作流引擎,目录树,节点

参考文献

[1]武凌.工作流知识管理系统工作流引擎的研究[J].计算机技术与发展, 2010, 20 (8) :112-115.Wu Ling.Study on workflow knowledge management system workflow engine.Computer technology and development.2010, 20 (8) :112-115.

[2]许悦珊.嵌入式工作流引擎的设计与应用[J].计算机时代, 2009, 199 (1) :20-24.Xu Rui Shan.Design and application of embedded workflow engine.Computer Era.2009, 199 (1) :20-24.

[3]马亚锋, 张玉扣.教研视野下主流开源工作流引擎对比分析[J].成才之路, 2014, 413 (1) :60.Ma Yafeng, Zhang Yukou.Analysis of teaching from the perspective of mainstream open source workflow engine.The road to success, 2014, 413 (1) :60.

动态目录树 篇4

目录树分类法, 就如树上有一只苹果让你去摘, 你是一个树枝一个树枝地找吗?这样你可能找了999个树枝最后终于找到了。你也可以从树根向上爬, 当你爬到第一个树杈的时候, 做一个判断, 这个苹果是在左边还是在右边。判断完成之后, 再向上爬, 遇到第二个树杈的时候你再做一个判断, 如此反复。可能很快你就能找到那个苹果。

例:一辆3.1L的奥斯莫比尔, 故障现象是蓄电池亏电。蓄电池亏电可能是内部漏电, 也可能是外部漏电。如果是内部漏电很简单换个蓄电池就行了。如果是外部漏电, 这个故障可能存在于车上的任何一个用电器上。

我们先取下蓄电池正极电缆, 在蓄电池正极和电缆之间串接一个试灯。这个试灯就是我们最简单、最直观和最有效的检测设备。当车上有用电器工作或有火线对地短路时, 这个试灯应当点亮;否则这个试灯应当熄灭。我们关闭点火开关发现试灯依然点亮着, 这说明车上可能有用电器或者是某个开关一直在接通中。下面我们就是要找“这棵树”上的第一个分叉点, 对于电气系统来说第一个“树杈”就是保险丝盒。我们一个保险丝一个保险丝地拔, 当拔下“FUEL PUMP”的保险丝时, 试灯熄灭。由此我们判断这个故障一定是在油泵供电的子系统中。

液压试验 1.完全预热变速器。 2.用 , 使驱动轮能够转。 3.连 , 将它放在容易看。 4.将专用油压表 (MD998330、MD999563) 和接头 (MD998332) 接至各液压出油。 当试验倒挡位置压力时, 应使用 30kg/ cm2的油压表。 5.测 , 并检查测量“标准液压表”所示的。 如果液压不在规定的范围内, 则应按 “液压不正常时的排除方法 ”、 进行检。

重新接上保险丝, 到油箱口一听发现油泵一直在运转。原来是停车后, 油泵一直在运转造成蓄电池亏电。下一步是第二个“树杈”, 我们拔下油泵继电器, 发现这个试灯还是亮着。这个问题出在哪里呢?

对于通用车系来说, 油泵是油泵继电器和机油压力开关2个部件并联控制的 (如图1所示) 。当拔下机油压力开关接头时, 试灯熄灭。原来这个车是机油压力开关内部短路, 造成油泵一直工作, 从而使电瓶亏电。更换机油压力开关后故障排除。

二、反证法

反证法就是先假设某一部件失效, 由这个失效的部件开始推导出一个结果。如果这个结果和当前的现象相矛盾, 则可以得知原部件是正常的。

例 : 一辆三菱 太空SPACE WAGON, 自动变速器型号是F4A23。故障现象是冷车时无挡, 即前进挡和倒挡都没有;热车后一切正常。当时修理工更换了自动变速器电脑, 我们用反证法来推论一下是否正确。先假设电脑损坏, 如果电脑损坏一定会发生锁挡, 这时的自动变速器应当处于失效保护模式。也就是说这个变速器应当有倒挡, 同时所有的前进挡都变成3挡。但这辆车的故障现象是冷车无挡, 假设的结果与当前的故障现象相矛盾。由此可以推断这辆车的自动变速器电脑没有问题。

使用反证法需要修理工对各部件的失效现象都非常熟悉, 也就是要有大量的工作经验。正确地使用它不仅可以使工作事半功倍, 也可以有效地防止因错换配件而产生不必要的损失。

对于这辆车的故障诊断, 需要注意以下几点。第一就是这辆车只在冷车状态下发生故障, 热车后正常。所以任何检测都必须在故障发作的状态即冷车下进行, 这是最基本的原则。第二是对于前进挡和倒挡都没有的自动变速器故障, 需要进行液压测试、迟滞测试和失速测试。但是, 所有的原厂维修手册和自动变速器教科书对于以上测试都要求一个先决条件, 就是完全预热自动变速器, 如图2。

如果按照维修手册的要求等完全预热后再测试, 检测的一切结果都是徒劳, 因为热车后故障现象已经消失。液压测试、迟滞测试和失速测试在维修手册上都必须要以热车为条件, 那么冷车情况下自动变速器无挡还算不算故障呢?我的答案是:当然是故障!

上一篇:固定剂量复合制剂下一篇:纤维滤棒成型机