一、先打开excel然后新建表格。
二、然后,开始队表格做树型结构 。
三、然后,在Excel主页面找到“数据”点击打开。
四、将图中的三行数据同时选中。
五、然后,在菜单栏找到“创建组”点击选中“创建组”。
六、等待系统完成“-"显示在界面上就可以了。
七、选中”-“可以将树型收起来。
八、或者选快捷菜单的小箭头。
九、在窗口中点击勾选“明细数据的下方”,确定。
十、"+"与“-"在数据上方,excel 树型结构完成。
常见的网络拓扑结构主要有哪几种,各有什么特点
1、常见的网络拓扑结构主要有星型结构、环型结构、总线结构、分布式结构、树型结构、网状结构、蜂窝状结构等。
2、特点
①星型结构。星型结构是最古老的一种连接方式,大家每天都使用的电话属于这种结构。一般网络环境都被设计成星型拓扑结构。星型网是广泛而又首选使用的网络拓扑设计之一。
星型结构是指各工作站以星型方式连接成网。网络有中央节点,其他节点(工作站、服务器)都与中央节点直接相连,这种结构以中央节点为中心,因此又称为集中式网络。
星型拓扑结构便于集中控制,因为端用户之间的通信必须经过中心站。由于这一特点,也带来了易于维护和安全等优点。端用户设备因为故障而停机时也不会影响其它端用户间的通信。同时星型拓扑结构的网络延迟时间较小,系统的可靠性较高。
②环型结构。环型结构在LAN中使用较多。这种结构中的传输媒体从一个端用户到另一个端用户,直到将所有的端用户连成环型。数据在环路中沿着一个方向在各个节点间传输,信息从一个节点传到另一个节点。这种结构显而易见消除了端用户通信时对中心系统的依赖性。
环行结构的特点是:每个端用户都与两个相临的端用户相连,因而存在着点到点链路,但总是以单向方式操作,于是便有上游端用户和下游端用户之称;信息流在网中是沿着固定方向流动的,两个节点仅有一条道路,故简化了路径选择的控制;环路上各节点都是自举控制,故控制软件简单;由于信息源在环路中是串行地穿过各个节点,当环中节点过多时,势必影响信息传输速率,使网络的响应时间延长;环路是封闭的,不便于扩充;可靠性低,一个节点故障,将会造成全网瘫痪;维护难,对分支节点故障定位较难。
③总线型。总线上传输信息通常多以基带形式串行传递,每个结点上的网络接口板硬件均具有收、发功能,接收器负责接收总线上的串行信息并转换成并行信息送到PC工作站;发送器是将并行信息转换成串行信息后广播发送到总线上,总线上发送信息的目的地址与某结点的接口地址相符合时,该结点的接收器便接收信息。由于各个结点之间通过电缆直接连接,所以总线型拓扑结构中所需要的电缆长度是最小的,但总线只有一定的负载能力,因此总线长度又有一定限制,一条总线只能连接一定数量的结点。
④分布式。分布式结构的网络是将分布在不同地点的计算机通过线路互连起来的一种网络形式。分布式结构的网络具有如下特点:由于采用分散控制,即使整个网络中的某个局部出现故障,也不会影响全网的操作,因而具有很高的可靠性;网中的路径选择最短路径算法,故网上延迟时间少,传输速率高,但控制复杂;各个结点间均可以直接建立数据链路,信息流程最短;便于全网范围内的资源共享。缺点为连接线路用电缆长,造价高;网络管理软件复杂;报文分组交换、路径选择、流向控制复杂;在一般局域网中不采用这种结构。
⑤树型结构是分级的集中控制式网络,与星型相比,它的通信线路总长度短,成本较低,节点易于扩充,寻找路径比较方便,但除了叶节点及其相连的线路外,任一节点或其相连的线路故障都会使系统受到影响。
⑥网状拓扑结构。网状拓扑结构主要指各节点通过传输线互联连接起来,并且每一个节点至少与其他两个节点相连。网状拓扑结构具有较高的可靠性,但其结构复杂,实现起来费用较高,不易管理和维护,不常用于局域网。
将多个子网或多个网络连接起来构成网状拓扑结构。在一个子网中,集线器、中继器将多个设备连接起来,而桥接器、路由器及网关则将子网连接起来。根据组网硬件不同,主要有三种网状拓扑:
网状网:在一个大的区域内,用无线电通信链路连接一个大型网络时,网状网是最好的拓扑结构。通过路由器与路由器相连,可让网络选择一条最快的路径传送数据,如图5-4所示。
主干网:通过桥接器与路由器把不同的子网或LAN连接起来形成单个总线或环型拓扑结构,这种网通常采用光纤做主干线。
星状相连网:利用一些叫做超级集线器的设备将网络连接起来,由于星型结构的特点,网络中任一处的故障都可容易查找并修复。
⑦蜂窝拓扑结构是无线局域网中常用的结构,它以无线传输介质(微波、卫星、红外等)点到点和多点传输为特征,是一种无线网,适用于城市网、校园网、企业网。
拓展资料:
拓扑这个名词是从几何学中借用来的。网络拓扑是网络形状,或者是网络在物理上的连通性。网络拓扑结构是指用传输媒体互连各种设备的物理布局,即用什么方式把网络中的计算机等设备连接起来。拓扑图给出网络服务器、工作站的网络配置和相互间的连接。网络的拓扑结构有很多种,主要有星型结构、环型结构、总线结构、分布式结构、树型结构、网状结构、蜂窝状结构等。
数据结构课程设计报告 树的遍历:文件目录结构的显示
数据结构课程设计报告
树的遍历:文件目录结构显示
专业 计算机科学与技术(软件工程)
学生姓名 施利华
班级 M计算机101
学号 0751401208
指导教师 吴 素 芹
起止日期 2012.1.7-2012.1.14
目 录
1 简介 1
2算法说明 2
3测试结果 3
4分析与探讨 6
5小结 8
参考文献 9
附录 10
附录1 源程序清单 10
树的遍历:文件目录结构的显示
1 简介
1. 树形结构
树形结构是一类十分重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,如操作系统的文件构成、人工智能搜索算法的模型表示以及数据库系统的信息组织形式等。
2.输入要求:
输入数据包含几个测试案例。每一个案例由几行组成,每一行都代表了目录树的层次结构。第一行代表了目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被列出,同时用一对圆括号“()”界定。同样,如果这些孩子节点中某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,由一对圆括号将首尾界定。目录的输入格式为:*name size,文件的输入格式为:name size,其中*代表当前节点是目录,表示文件或目录的名称,由一串长度不大于10的字符组成,并且name字符串中不能含有‘(’,‘),’[‘,’]‘和’*‘。size是该文件/目录的大小,为一个大于0的整数。每一个案例中最多只能包含10层,每一层最多有10个文件/目录。
3.输出要求:
对每一个测试案例,输出时要求:第d层的文件/目录名前需要插入8*d个空格,兄弟节点之间要在同一列上。不要使用Tab(制表符)来统一输出的缩进。每一个目录的大小(size)是它所包含的所有子目录和文件大小以及它自身大小的总和。
4.输入例子:
*/usr1
(*mark1*alex1)
(hw.c3*course1)(hw.c5)
(aa.txt12)
*/usr1
()
表示有两个不同的根目录,目录名都是/usr,第一个根目录/usr下包含mark和alex两个子目录,mark目录下包含大小为3的文件hw.c和子目录course,alex目录下有一个大小为5的文件hw.c,子目录course下包含文件aa.txt,其大小为12;第二个根目录/usr下为空。
5.输出例子:
|_*/usr[24]
|_*mark[17]
| |_hw.s[3]
| |_*course[13]
| |_aa.txt[12]
|_*alex[6]
|_hw.c[5]
|_*/usr[1]
2算法说明
typedef struct TreeNode{
int data;
TreeNode *left;
TreeNode *right;
}TreeNode,*Tree;
先序:
void first(Tree *root)
{
printf("%d ",root->data);
first(root->left);
first(root->right);
}
中序:
void mid(Tree *root)
{
mid(root->left);
printf("%d ",root->data);
mid(root->right);
}
后序:
void last(Tree *root)
{
last(root->left);
last(root->right);
printf("%d ",root->data);
}
3测试结果
将代码打入Microsoft Visual C++ 6.0软件中,改完相关错误后运行代码,开始不能出现正确的运行结果,在相关文件中新建文本文件,文件命名为”input.txt“。在文本文件中,打入输入数据,得出下列截图。
图3-1 输入数据
得出”input.txt”记事后,重新运行代码,在相关文件夹的“output.txt”会出现相关的正确的输出结果,此时得出下列两张截图。
图3-2 输出结果
图3-3 输出结果
输入正确的代码后运行程序,得出下列截图。
图3-4 运行结果
4分析与探讨
目录结构是一种典型的树形结构,为了方便对目录的查找,遍历等操作,可以选择孩子兄弟双亲链表来存储数的结构。程序中要求对目录的大小进行重新计算,根据用户的输入来建立相应的孩子兄弟双亲链表,最后输入树形结构。可以引入一个Tree类,将树的构造,销毁,目录大小的重新计算(reSize),建立树形链表结构(parse),树形结构输出(outPut)等一系列操作都封装起来,同时对于每一个树的借点,它的私有变量除了名称(Name),大小(Size)和层数(Depth)之外,根据孩子兄弟双亲链表表示的需要,还要设置三个指针,即父指针(Tree*parent),下一个兄弟指针(Tree*NextSibling)和第一个孩子指针(Tree*Firstchild)。下面是几个主要函数的实现。
1.建立树形链表结构的函数parse()
根据输入来确定树形关系是,首先读取根借点目录/文件名和大小值,并根据这些信息建立一个新的节点;然后读入后面的各行信息,对于同一括号中的内容,即具有相同父节点的那些节点建立兄弟关联。这个函数实际上是采用层数遍历建立树形链表结构。
定义一个Tree*类型的数组treeArray[ ],用来存放目录的节点信息,并定义两个整型变量head和rear,head值用来标记当前节点的父节点位置,每处理完一对括号,head需要增加1,即下一对待处理括号的父节点在treeArray[ ]中要往后移一个位置。如果当前处理的节点是目录类型,则将它放在treeArray[ ]数组中,rear是treeArray[ ]的下标变量,加入一个树的节点,并和head所指的父节点建立关联,但是不用放入treeArray[ ]中。
2.目录大小重新计算函数reSize()
输入数据中对目录大小的初始化值一般为1,而目录的真正大小应该是自身的大小和它包含的所有文件及子目录的大小之和。因此,在计算目录大小的时候,需要遍历它下面所有的文件和子目录,可以采用递归嵌套的后序遍历方式。另外要注意,采用孩子兄弟双亲链表表示时,父目录下的所有子目录和子文件都在该父目录的左子树上(右字数第一个节点是该目录的兄弟节点),所以遍历的时候只需要遍历目录的左字数即可。
3.输出树形结构的函数outPut()
输出是一个线序遍历的过程。为完成对树形的输出,兄弟目录之前需要相同的缩进,用’|’上下相连,而斧子目录或父目录和子文件之间需要设定正确的缩进,子目录或子文件要比父目录向右缩进8个空格。设置一个标志数组flag[11](每个目录下最大层次数为10),当前Tree*temp指针所指的节点如果有兄弟节点,则置flag数组值为1,否则置为0;并由此节点反复查询它的祖先节点的情况,知道根节点位置。输出时,遇到flag[ ]=1时,屏幕输出“| ”,表明是兄弟节点;遇到flag[ ]=0时则输出“ ”,这样就可以保证兄弟节点之间有相同的缩进,而子节点总比父节点享有缩进8个空格。
treeArray[]
4.消除输入总多余空格的函数skipwhiteSpace(string&s,int*i)
从用户输入数据中读入一行后,调用该函数来跳过s字符串中s[i]之后的空格,以方便后面的处理。
此外,关于读入目录名称,大小,以及将string类型的Size值转换成int类型的函数的实现,相对比较简单,此外不再赘述。
图4-1 数据异常测试案例
5小结
参考文献
[1] 刘振安,刘燕君.C程序设计课程设计[M].[北京]机械工业出版社,2004年9月
[2] 谭浩强.C程序设计(第三版).清华大学出版社,2005年7月
[3] 严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社,1997年4月
[4]吴文虎.程序设计基础.清华大学出版社,2003年
[5]王立柱.C/C++与数据结构.清华大学出版社,2002年
[6]顾元刚.数据结构简明教程.东南大学出版社,2003年
[7]郭福顺,王晓芬,李莲治.数据结构(修订本).大连理工大学出版社,1997年
[8]严蔚敏,陈文博.数据结构及应用算法教程.清华大学出版社,2004年
附录
附录1 源程序清单
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
string s = "";
int startPos = 0;
ofstream outfile;
ifstream infile;
/**构造Tree类**/
class Tree{
string Name; /* 树的根结点名称 */
int Size; /* 树的大小,用于统计这棵树本身及其包含的所以子树大小的总和*/
Tree* FirstChild; /* 指向它的第一个孩子结点 */
Tree* NextSibling; /* 指向它的下一个兄弟结点 */
Tree* parent; /* 指向双亲结点 */
public:
Tree(string Name = "", int Size = 0);/* 构造函数 */
void parse(); /* 根据输入数据来建立树形结构 */
void reSize(); /* 重新统计树结点的大小 */
void outPut(); /* 输出树形结构 */
~Tree(); /* 析构函数 */
};
/*** 树结点数组treeArray[],以及用来标注双亲结点位置的head和目录结点的rear***/
Tree* treeArray[100];
int head = 0, rear = 0;
/*** 建立只有一个结点的树,其三个指针域均为空 ***/
Tree::Tree(string Name, int Size){
this->Name = Name;
this->Size = Size;
FirstChild = NULL;
NextSibling = NULL;
parent = NULL;
}
/*** 析构函数,删除同一根结点下的各个子结点,释放空间 ***/
Tree::~Tree()
{
Tree* temp;
Tree* temp1;
temp = FirstChild;
while(temp != NULL)
{
temp1 = temp;
temp = temp->NextSibling;
delete temp1;
}
}
/* 先序遍历根结点下的所有结点,将每一个结点的Size值都加到根结点的Size中去**/
void Tree::reSize()
{
Tree* temp = this;
/*** 如果当前的结点没有孩子结点,则它的Size值不变,即为输入时候的值 ***/
if(temp->FirstChild != 0){
temp = temp->FirstChild;
while(temp != 0){
temp->reSize();
Size += temp->Size;
temp = temp->NextSibling;
}
}
}
/***检查Name中有无非法字符**************/
bool checkName(string s)
{
if(s[0]!='*' && s.length() > 10)
return false;
if(s[0]=='*' && s.length() > 11)
return false;
if(s[0]!='*' && (s[0]=='(' || s[0]==')' || s[0]=='[' || s[0]==']'))
return false;
for(int i=1;i<s.length();i++){
if(s[i]=='*' || s[i]=='(' || s[i]==')' || s[i]=='[' || s[i]==']')
return false;
}
return true;
}
/*** 按照先序遍历的方式有缩进地来输出树形结构 ***/
void Tree::outPut()
{
Tree* temp; /*用来指向当前结点的祖先结点*/
Tree* temp1;
bool flag[11];/*用来标志输出缩进、层次情况的数组*/
int i;
outfile.open("output.txt",ios::app);
if(!outfile){
cout<<"cannot append the output file.\n";
exit(0);
}
if(!checkName(Name)){
cout<<"input error!--"<<Name<<endl;
exit(0);
}
outfile<<"|_"<<Name<<"["<<Size<<"]\n";
outfile.close();
/* 输出当前的结点信息 */
temp1= FirstChild;/* 用来指向当前结点的子结点 */
while(temp1 != NULL)
{
outfile.open("output.txt",ios::app);
if(!outfile){
cout<<"cannot append the output file.\n";
exit(0);
}
i = 0;
temp = temp1;
while(temp->parent != NULL)
{
/*当前temp指针所指的结点如果有兄弟结点,则置flag数组值为1,否则置为0;并由此结点反复查询它的祖先结点的情况,直到根结点为止*/
if(i>=10){
//检查当前的父目录包含的子文件(或目录数)是否大于10;
cout<<"input error!--dictionary contains more than 10 levels."<<endl;
exit(0);
}
temp = temp->parent;
if(temp->NextSibling != NULL)
flag[i++] = true;
else
flag[i++] = false;
}
/*兄弟结点之间有相同的缩进,子结点比父结点向右缩进8个空格*/
while(i--)
{
if(flag[i] == true)
outfile<<"| ";
else
outfile<<" ";
}
outfile.close();
temp1->outPut();
temp1 = temp1->NextSibling;
}
}
/*** 跳过字符串s中,第(*i)个之后多余的空格 ***/
void skipWhiteSpace(string& s, int* i)
{
while(s[*i] == '\t' || s[*i] == ' ')
(*i)++;
}
/*** 获取输入行中一对'()'之间的字符串,即为同一双亲结点下的子结点 ***/
string getSubDir(string& line, int* startPos)
{
string res = "";
skipWhiteSpace(line,startPos);
while(line[*startPos] != ')')
res += line[(*startPos)++];
res += line[(*startPos)++];
skipWhiteSpace(line, startPos);
return res;
}
/*** 由于用户输入时候目录的大小Size值为String类型,因此需要将它转变成integer类型***/
int stringToNum(string s)
{
int num = 0;
unsigned int i = 0;
while(i < s.length())
{
num *= 10;
num += s[i++] - '0';
}
return num;
}
/*** 提取目录/文件的名称 ***/
string getName(string& s, int* i)
{
string name = "";
while(s[*i] != ' ' && s[*i] != '\t')
name += s[(*i)++];
return name;
}
/*** 提取目录/文件的大小,然后将string类型转换成integer类型 ***/
int getSize(string&s, int* i)
{
string size = "";
while((unsigned int)(*i) < s.length() && s[*i] != ' ' && s[*i] != '\t' && s [*i] != ')')
size += s[(*i)++];
return stringToNum(size);
}
/*** 根据用户的输入字符串来构建树的结构 ***/
void Tree::parse()
{
Tree* temp;
string line;
string name;
int size;
/***head值用来标记当前结点的双亲结点位置;如果当前处理的结点是目录类型,则将它放在treeArray[]数组中,下标用rear来记录;如果是文件类型的目录,只需要按照name和size建立一个树的结点,但是不用放入treeArray[]中 ***/
while(getline(infile,line,'\n'))
{
startPos = 0;
while(1)
{
s = getSubDir(line, &startPos);
int i = 1;
skipWhiteSpace(s, &i);
if(s[i] != ')')
{
skipWhiteSpace(s,&i);
name = getName(s,&i);
skipWhiteSpace(s,&i);
size = getSize(s,&i);
temp = treeArray[head%100]->FirstChild = new Tree(name,size);
temp->parent = treeArray[head%100];
if(name[0] == '*')
treeArray[(rear++)%100] = temp;
skipWhiteSpace(s,&i);
}
while(s[i] != ')')
{
skipWhiteSpace(s,&i);
name = getName(s,&i);
skipWhiteSpace(s,&i);
size = getSize(s,&i);
temp->NextSibling = new Tree(name,size);
skipWhiteSpace(s,&i);
temp = temp->NextSibling;
temp->parent = treeArray[head%100];
if(name[0] == '*')
treeArray[(rear++)%100] = temp;
}
head ++;
/***测试是否一行扫描完毕***/
if((unsigned int)startPos >= line.length())
break;
}
/***只有一个根结点的情况***/
if(head == rear)
break;
}
}
///////////////////////////////////////////////////////////
//**** 主测试文件main.cpp******/////
//////////////////////////////////////////////////////////
int main()
{
Tree* fileTree;
string s;
string name;
int size;
outfile.open("output.txt");
if(!outfile){
cout<<"cannot open the output file!\n";
exit(0);
}
outfile<<"The result is as follows:\n";
outfile.close();
infile.open("input.txt",ios::out);
if(!infile){
cout<<"cannot open the input file!\n";
exit(0);
}
while(getline(infile,s,'\n'))
{
int i = 0;
skipWhiteSpace(s, &i);
name = getName(s,&i);
skipWhiteSpace(s,&i);
size = getSize(s,&i);
fileTree = new Tree(name, size);
if(name[0] == '*')
{
treeArray[rear++] = fileTree;
fileTree->parse();
}
fileTree->reSize();
fileTree->outPut();
delete fileTree;
}
infile.close();
return 0;
}
项目工作分解结构是什么
工作分解结构(简称WBS)跟因数分解是一个原理,就是把一个项目,按一定的原则分解,项目分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的日常活动中,直到分解不下去为止。即:项目→任务→工作→日常活动。工作分解结构以可交付成果为导向,对项目要素进行的分组,它归纳和定义了项目的整个工作范围,每下降一层代表对项目工作的更详细定义。WBS总是处于计划过程的中心,也是制定进度计划、资源需求、成本预算、风险管理计划和采购计划等的重要基础。
目录
1基本定义
2基本内容
▪ 分解原则
▪ 创建要求
▪ 分解方式
3主要用途
4结构种类
▪ 纲要结构
▪ 项目结构
▪ 合同结构
5工作包
6使用
▪ 实践经验
▪ 分解作用
▪ 分解优点
7分解结构
1基本定义编辑
工
作分解结构(WorkBreakdownStructureWBS):以可交付成果为导向对项目要素进行的分组,它归纳和定义了项目的整个工作范围每下降
一层代表对项目工作的更详细定义。无论在项目管理实践中,还是在PMP考试中,工作分解结构(WBS)都是最重要的内容。WBS总是处于计划过程的中心,
也是制定进度计划、资源需求、成本预算、风险管理计划和采购计划等的重要基础。WBS同时也是控制项目变更的重要基础。项目范围是由WBS定义的,所以WBS也是一个项目的综合工具。
2基本内容编辑
分解原则
1、将主体目标逐步细化分解,最底层的日常活动可直接分派到个人去完成;
2、每个任务原则上要求分解到不能再细分为止;
3、日常活动要对应到人、时间和资金投入。
二、任务分解的方法
1、采用树状结构进行分解;
2、以团队为中心,自上而下与自下而上的充分沟通,一对一个别交流与讨论,分解单项工作。
三、任务分解的标准
1、分解后的活动结构清晰,从树根到树叶,一目了然,尽量避免盘根错节;
2、逻辑上形成一个大的活动,集成了所有的关键因素包含临时的里程碑和监控点,所有活动全部定义清楚,要细化到人、时间和资金投入。
在我们日常管理项目时,要学会分解任务,只有将任务分解得足够细,足够明了,才能统筹全局,安排人力和财力资源,把握项目的进度。
创建要求
创建WBS时需要满足以下几点基本要求:
1、某项任务应该在WBS中的一个地方且只应该在WBS中的一个地方出现。
2、WBS中某项任务的内容是其下所有WBS项的总和。
3、一个WBS项只能由一个人负责,即使许多人都可能在其上工作,也只能由一个人负责,其他人只能是参与者。
4、WBS必须与实际工作中的执行方式一致。
5、应让项目团队成员积极参与创建WBS,以确保WBS的一致性。
6、每个WBS项都必须文档化,以确保准确理解已包括和未包括的工作范围。
7、WBS必须在根据范围说明书正常地维护项目工作内容的同时,也能适应无法避免的变更。
五、表示方式
WBS可以由树形的层次结构图或者行首缩进的表格表示。
在实际应用中,表格形式的WBS应用比较普遍,特别是在项目管理软件中。
工作分解结构(分级的树型结构)
树型结构图的WBS层次清晰,非常直观。结构性很强,但不是
工作分解结构
很容易修改,对于大的、复杂的项目也很难表示出项目的全景。由于主观性,一般在小的,适中的项目中的较多。
分解方式
WBS的分解可以采用多种方式进行,包括:
1、按产品的物理结构分解。
2、按产品或项目的功能分解。
3、按照实施过程分解。
4、按照项目的地域分布分解。
5、按照项目的各个目标分解。
6、按部门分解。
7、按职能分解。
3主要用途编辑
WBS具有4个主要用途:1、WBS是一个描述思路的规划和设计工具。它帮助项目经理和项目团队确定和有效地管理项目的工作。
2、WBS是一个清晰地表示各项目工作之间的相互联系的结构设计工具。
3、WBS是一个展现项目全貌,详
相关书籍
细说明为完成项目所必须完成的各项工作的计划工具。
4、WBS定义了里程碑事件,可以向高级管理层和客户报告项目完成情况,作为项目状况的报告工具。
WBS是面向项目可交付成果的成组的项目元素,这些元素定义和组织该项目的总的工作范围,未在WBS中包括的工作就不属于该项目的范围。WBS每下降一层就代表对项目工作更加详细的定义和描述。项目可交付成果之所以应在项目范围定义过程中进一步被分解为WBS,是因为较好的工作分解可以:
防止遗漏项目的可交付成果。帮助项目经理关注项目目标和澄清职责。建立可视化的项目可交付成果,以便估算工作量和分配工作。帮助改进时间、成本和资源估计的准确度。帮助项目团队的建立和获得项目人员的承诺。为绩效测量和项目控制定义一个基准。辅助沟通清晰的工作责任。为其他项目计划的制定建立框架。帮助分析项目的最初风险。
4结构种类编辑
纲要结构
(SWBS:SummaryWBS)纲要性工作分解结构是指导性的、战略性的工作分解结构。该分解结构只
工作分解结构
有上面的三级:
第一级:整个系统即防务装备项目,如:飞机系统、电子系统、导弹系统、军械系统、空间系统和地面车辆系统。
第二级:防务装备项目的重大单元,如航空飞行器、舰船、系统实验和资料等。
第三级:从属于第二级的单元,如机体、推进装置、资料、服务和技术出版物等。
项目结构
(PSWBS,ProjectSWBS)
项目纲要性工作分解结构是针对某一特定项目,对纲要性工作分解结构进行裁剪得到的工作分解结构。
合同结构
(CWBS,ContractWBS)
合同工作分解结构是适用于特定合同或采购活动的完整的工作分解结构。CWBS概括了项目的任务,确定了这些任务与项目的组织机构、技术状态的关系,为项目的性能、技术目标、进度和费用之间的联系,确定了逻辑上的约束框架。合同工作分解结构应与合同规定的层次相一致。合同应指出在合同的哪一级别上进行费用累计。承包商为控制其费用而用到的合同WBS的扩延级,应具有费用累计的追溯能力。
而在其他某些具体的应用领域,常见的其他分解结构主要包括:
A、合同工作分解结构(CWBS)——它主要用于定义卖方提供给买方报告的层次,通常不如卖方管理工作使用的工作分解结构(WBS)详细。
B、组织分解结构(OBS)——它用于显示各个工作元素被分配到哪个组织单元。
C、资源分解结构(RBS)——它是组织分解结构的一种变异,通常在将工作元素分配到个人时使用。
D、材料清单(BOM)——表述了用于制造一个加工产品所需的实际部件、组件和构件的分级层次。
E、项目分解结构(PBS)——它基本上与工作分解结构(WBS)的概念相同。
5工作包编辑
WBS的最低层次的项目可交付成果称为工作包(WorkPackage),具有以下特点:1、工作包可以分配给另一位项目经理进行计划和执行。
工作分解结构
2、工作包可以通过子项目的方式进一步分解为子项目的WBS。
3、工作包可以在制定项目进度计划时,进一步分解为活动。
4、工作包可以由惟一的一个部门或承包商负责。用于在组织之外分包时,称为委托包(CommitmentPackage)。
5、工作包的定义应考虑80小时法则(80-HourRule)或两周法则(TwoWeekRule),即任何工作
包的完成时间应当不超过80小时。在每个80小时或少于80小时结束时,只报告该工作包是否完成。通过这种定期检查的方法,可以控制项目的变化。[编辑]
创建WBS的过程
创建WBS的过程非常重要,因为在项目分解过程中,项目经理、项目成员和所有参与项目的职能经理都必须考虑该项目的所有方面。制定WBS的过程是:
1、得到范围说明书(ScopeStatement)或工作说明书(StatementofWok,承包子项目时)。
2、召集有关人员,集体讨论所有主要项目工作,确定项目工作分解的方式。
3、分解项目工作。如果有现成的模板,应该尽量利用。
4、画出WBS的层次结构图。WBS较高层次上的一些工作可以定义为子项目或子生命周期阶段。
5、将主要项目可交付成果细分为更小的、易于管理的组分或工作包。工作包必须详细到可以对该工作包进行估算(成本和历时)、安排进度、做出预算、分配负责人员或组织单位。
验证上述分解的正确性。如果发现较低层次的项没有必要,则修改组成成分。如果有必要,建立一个编号系统。随着其他计划活动的进行,不断地对WBS更新或修正,直到覆盖所有工作。
6使用编辑
对WBS需要建立WBS词典(WBSDictionary)来描述各个工作部分。WBS词典通常包括工作包描述、进度日期、成本预算和人员分配等信息。对于每个工作包,应尽可能地包括有关工作包的必要的、尽量多的信息。当WBS与OBS综合使用时,要建立账目编码(CodeofAccount)。账目编码是用于惟一确定项目工作分解结构每一个单元的编码系统。成本和资源被分配到这一编码结构中。
实践经验
最多使用20个层次,多于20层是过度的。对于一些较小的项目4-6层一般就足够了。
WBS中的支路没有必要全都分解到同一层次,即不必把结构
工作分解结构
强制做成对称的。在任意支路,当达到一个层次时,可以作出所要求准确性的估算,就可以停止了。
分解作用
1.明确和准确说明项目的范围;
2.为各独立单元分派人员,规定这些人员的相应职责;
3.针对各独立单元,进行时间、费用和资源需要量的估算,提高时间、费用和资源估算的准确度;
4.为计划、成本、进度计划、质量、安全和费用控制奠定共同基础,确定项目进度测量和控制的基准;
5.将项目工作与项目的财务帐目联系起来;
6.便于划分和分派责任;
7.确定工作内容和工作顺序;
8.估算项目整体和全过程的费用。
分解优点
(一)能够为工作定义提供更有效的控制。
一般来说,良好的项目管理具有下列几个原则:
1.通过设施的结构化分解来进行管理;
2.关注结果:实现什么,而不是怎样实现;
3.通过工作分解结构,技术和人员、系统和组织之间可以平衡结果;
4.在项目涉及的所有部门之间,通过定义角色、责任和工作关系来建立一个契约;
5.采用一个简明的报告结构。
使用工作分解结构可以满足有效项目管理的五个原则中的前三个,而避免了计划的误区——即只在一个详细的层次上定义工作。以一个结构化的方式来定义工作可以保证得到更好的结果。通过可交付成果来进行工作定义,在项目向前进行时,只有那些对生产设施有必要的工作才做,因此计划也变得更加固定。在环境不断变化的情况下,项目所需的工作可能发生变化,但不管怎么变化,一定要对最终结果的产生有益。
(二)把工作分配到相应的工作包中(相应的授权)。
WBS中的工作包是自然的,因为WBS的目的是生产产品,在分配责任的同时也赋予每个产品或服务的单独的部门。如果
工作只是在一个详细的层次上定义,并汇集成工作包,那么这个工作包就不是自然的了,项目经理只能每天忙于告诉人们一些技术和方法,而不是让他们自己独立去
完成工作。
(三)便于找到控制的最佳层次。
人们在较低层次上进行控制可能意味着在控制上所花的时间要比完成工作所需的时间更多,而在较高层次上进行控制则意味着有些重要情况在我们不经意时会溜走。通过WBS,我们可以找到控制的最佳层次。一般情况下,控制活动的长短应该与控制会议召开的频度相一致。
(四)有助于限定风险。
在以上讨论时我们都限定计划和控制的范围都不包含较高的风险。实际上WBS的分解层次不一定是固定不变的,WBS的最低层次可根据风险的水平来确定。在风险较低的项目中,工作分解的最低层次可以是工作包,而在一个风险较高的项目中,我们可以继续到项目的一个最低层次上。
项目经理在规划和控制其工程项目的过程中,工作分解结构是非常有用的工具。编制完整的WBS确定了工程项目的总目标,并确定了各项单独的工作(部分)与整个项目(整体)的关系。
(五)是信息沟通的基础。
在现代大型复杂项目中,一般要涉及大量的资源,涉及许多公司、供应商、承包
工作分解结构
人
等等,有时还会有政府部门的高技术设施或资金投入,因而要求的综合信息和信息沟通的数量往往相当大。这些大项目涉及巨资并历时若干年,因此项目开始进行时
设想的项目环境会随着项目的进展而发生很大的变化,即我们已经多次提到的项目早期阶段的不确定性[pp1]。这就要求所有的有关集团要有一个共同的信息基
础,一种各有关集团或用户从项目一开始到最后完成都能用来沟通信息的工具。这些集团包括:业主、供应商、承包人、项目管理人员、设计人员以及政府有关部门等等。而一个设计恰当的工作分解结构将能够使得这些集团或用户有一个较精确的信息沟通连接器,成为一种相互交流的共同基础。利用工作分解结构作为基础来编制预算、进度和描述项目的其它方面,能够使所有的与项目有关的人员或集团都明了为完成项目所需要做的各项工作以及项目的进展情况等。
(六)为系统综合与控制提供了有效手段。典型的项目控制系统包括进度、费用、会计等不同的子系统。这些子系统在某种程度上是相互独立的,但是各个子系统之间的系统信息转移是不可缺少的,必须将这些子系统很好地综合起来,才能够真正达到项目管理的目的。而工作分解结构的应用可以提供一个这样的手段。
在WBS的应用中,各个子系统都利用它收集数据,这些系统都是在与WBS有直接联系的代码词典和编码结构的共同基础
上来接受信息的。由于WBS代码的应用使所有进入到系统的信息都是通过一个统一的定义方法作出来的,这样就能确保所有收集到的数据能够与同一基准相比较,
并使项目工程师、会计师以及其他项目管理人员都参照有同样意义的同种信息,这对于项目控制的意义是显而易见的。
例如:许多项目中的典型问题之一是会计系统和进度控制系统不是采用完全相同的分类或编码,但是在一个有组织的共同基础之上对成本和进度作出统一、恰当的解释、分析和预测对于项目的有效管理是非常重要的。此外,各个子系统之间在WBS基础上的共同联系越多,对项目控制就越有益,因为这样可以减少或消除分析中的系统差异。
7分解结构编辑
WBS将项目的“交付物”自顶向下逐层分解到易于管理的若干元素,以此结构化地组织和定义了项目的工作范围。 工作细目(WORK ITEM),工作包(WORK PACKAGE)
WBS的制定没有固定的方法,但一般可以参考以下原则:
◇确保能把完成每个底层工作包的职责明确地赋予一个成员、一组成员或者一个组织单元,同时考虑尽量使一个工作细目容易让具有相同技能的一类人承担。
◇根据80小时的原则,工作包的时间跨度不要超过2周时间,否则会给项目控制带来一些困难;同时控制的粒度不能太细,否则往往会影响项目成员的积极性
◇可以将项目生命周期的各个阶段做为第一层,将每个阶段的交付物做为第二层。如果有的交付物组成复杂,则将交付物的组成元素放在第三层。
◇分解时要考虑项目管理本身也是工作范围的一部分,可以单独做为一个细目。
◇对一些各个阶段中都存在的共性工作可以提取出来,例如人员培训作为独立的细目
◇确保能够进行进度和成本估算。
在windows操作系统中,文件的目录结构什么型的啊
1.文件目录结构一般有一级目录结构、二级目录结构和多级目录结构。
2.您所说的windows操作系统的目录结构是树形结构。
3.就像一棵树,它的树干就是根目录,然后第一个分枝之后是第一层目录
总结:这种类型的结构就是树形文件目录结构,希望有帮到你!
c#中TreeView如何建立一个简单得树结构(即节点结构)
在以下方法中,TreeView的树节点信息源自DataTable DT1,在DT1中,有3个关键列(ID,PID,NAME),一个辅助列(ROAD)。
例如,树结构如下:
一级节点A1
二级节点B1
三级节点C1
一级节点A2
那么,在DT1中保存的信息为:
ID PID NAME ROAD
ID1 0 一级节点A1 /A1
ID2 ID1 二级节点B1 /A1/B1
ID3 ID2 三级节点C1 /A1/B1/C1
ID4 0 一级节点A2 /A2
列ID和PID是用于判断各个节点的层次结构
列NAME保存节点名称
列RODA可以在添加记录时自动生成,进行操作如,当节点信息不是按层次循序生成时,要查找节点A1的所属节点时,用like语句就可以很方便实现。
文件的目录的作用是什么?有哪几种基本的目录结构
一个计算机系统中有成千上万个文件,为了便于对文件进行存取和管理,计算机系统建立文件的索引,即文件名和文件物理位置之间的映射关系,这种文件的索引称为文件目录。
文件目录作用:
1、归档和分类。
计算机文件的目录是为了方便用户和计算机检索,缩短文件的访问时间,提高存储器的利用率。
2、区分同名文件
可能一台计算机上有多个文件名为 A . txt 的文件,但他们存放的目录不一样,所以他们在该计算机上都是惟一的。并且支持允许文件重名.
文件目录(file directory)为每个文件设立一个表目。
文件目录表目至少要包含文件名、物理地址、文件结构信息和存取控制信息等,以建立起文件名与物理地址的对应关系,实现按名存取文件。
转载请注明出处51数据库 » 方便建立树形结构的软件 怎么做excel树型结构