我的树结构是这样的,是通过对话框弹出生成的,
2005级
---函授
---高起本(鼠标右击,弹出POPMENU,生成专业名)
---计算机应用(鼠标右击,弹出POPMENU,生成1班,2班)
---1班
---2班
---专科
---通信工程
---1班
---专升本
---二本
---脱产
---高起本
---专科
---专升本
---二本
---业余
---高起本
---专科
---专升本
---二本
2006级
---函授
---高起本
---专科
---通信工程
---专升本
---工程管理
---1班
---2班
---二本
---脱产
---高起本
---专科
---专升本
---二本
---业余
---高起本
---专科
---专升本
---二本
看这个TREEVIEW,大家能看书,除了根结点和第四层及第五层之外,中间的第二层和第三层是固定的,根结点可以添加若干的,但是每个根结点下面的第二层和第三层都是一样的。第四层是专业名,第五层是班级名,我建立了几张表,给大家看看,
GradeTable(GradeNum,ProNum,GradeName),用来存储年级的,GradeNum,年级编号,ProNum,专业编号,GradeName年级名,比如“2005级”
ProfessionTable(ProNum,GNum,Profession),用来存储专业名的,ProNum,专业编号,GNum年级编号,Profession专业名,比如“计算机应用”
ClassTable(ClassNum,GNum,ClassName),用来存储班级号的,ClassNum,班级编号,GNum年级编号,ClassName班级名,比如“1班”。
用来存储树的深度和父结点的,再用一张表TreeLinkFatherSon(ID,Name,ParentID,Depth)
我思路比较乱,请问如何来实现。
2005级
---函授
---高起本(鼠标右击,弹出POPMENU,生成专业名)
---计算机应用(鼠标右击,弹出POPMENU,生成1班,2班)
---1班
---2班
---专科
---通信工程
---1班
---专升本
---二本
---脱产
---高起本
---专科
---专升本
---二本
---业余
---高起本
---专科
---专升本
---二本
2006级
---函授
---高起本
---专科
---通信工程
---专升本
---工程管理
---1班
---2班
---二本
---脱产
---高起本
---专科
---专升本
---二本
---业余
---高起本
---专科
---专升本
---二本
看这个TREEVIEW,大家能看书,除了根结点和第四层及第五层之外,中间的第二层和第三层是固定的,根结点可以添加若干的,但是每个根结点下面的第二层和第三层都是一样的。第四层是专业名,第五层是班级名,我建立了几张表,给大家看看,
GradeTable(GradeNum,ProNum,GradeName),用来存储年级的,GradeNum,年级编号,ProNum,专业编号,GradeName年级名,比如“2005级”
ProfessionTable(ProNum,GNum,Profession),用来存储专业名的,ProNum,专业编号,GNum年级编号,Profession专业名,比如“计算机应用”
ClassTable(ClassNum,GNum,ClassName),用来存储班级号的,ClassNum,班级编号,GNum年级编号,ClassName班级名,比如“1班”。
用来存储树的深度和父结点的,再用一张表TreeLinkFatherSon(ID,Name,ParentID,Depth)
我思路比较乱,请问如何来实现。
id 父结点 当前结点 当前结点名称
1 0 1 2005级
2 0 2 2006级
3 1 3 函授
4 3 4 高起本
5 4 5 计算机应用
6 5 6 1班
7 5 7 2班
基本结构就是这样
你还可以根据实际情况进行优化
递归遍历 所有结点 就可以得到树
和文件的遍历一样的
比如遍历 父结点 为 0 的所有 结点
得到 1 2 结点
在 遍历 1 2
递归 就ok 了
具体你再优化实现
一个表存结构个人感觉比多个表好
最好是数据从数据库中读出,当新增后再写入数据库。
思路就是这样,至于代码麻,自己先写写看吧
设计1可以用建一个字段存储指针, 即存储parent结点, 0表示是root
查询的时候按大小排序, 然后就很容易构造树了.
设计2可以用一个可变长的字符串存储目录结构, 如
000 表示root
000001 表示第一个
000001001 表示..
000002001 表示..
根节点的层数是0
在VB使用循环向treeview中加节点,打开表的时候排序按照层数排序,这样就不会找不到父节点了