列出管理结构树

 

问题

下表是某企业员工表,记录了每位员工的 ID 和名字:

EMPNO ENAME
7902 Ford
7788 Scott
7900 James
7844 Turner
7654 Martin
7521 Ward
7499 Allen
7934 Miller
7876 Adams
7782 Clark
7698 Blake
7566 Jones
7369 Smith
7839 King

下表记录了员工之间的从属关系,例如第一条记录就代表编号为 7902 的员工其经理是编号为 7566 的员工,第 14 条记录代表员工 7839 没有经理,他是最上层的经理。

EMPNO MGR
7902 7566
7788 7566
7900 7698
7844 7698
7654 7698
7521 7698
7499 7698
7934 7782
7876 7788
7782 7839
7698 7839
7566 7839
7369 7902
7839

请返回一个结果集,描述整个表的层次关系,它的结构要求如下:

EMP_TREE
King
King – Blake
King – Blake – Allen
King – Clark
King – Clark – Miller

思路

大致思路:首先找出某一员工 A,通过关系表找到该员工对应的上级 B,再查找 B 的上级 C,找到之后在进行循环。直至该上级已经是最高的领导者,跳出内层循环,对下一个员工的上级进行循环查找。

最后把结果排序,即可得到题目要求的结果。

代码

A B C D
1 =file("C:\\txt\\Employees2.txt").import@t() 查找出员工信息
2 =file("C:\\txt\\Relationships.txt").import@t() 查找员工之间的关系
3 =[] 存储已经找到的上下级关系树
4 for A1 对着员工表进行循环
5 =A4.EMPNO 获取当前员工的编号
6 =A4.ENAME 获取当前员工的姓名
7 for
8 =A2.select(EMPNO==B5).MGR 获取当前员工的上级
9 if C8==null break 如果当前员工没有上级,则结束内层循环,跳转至下一个员工
10 =A1.select(EMPNO==C8).ENAME 获取当前员工上级的姓名
11 >B6=C10+"-"+B6 将当前员工上级的姓名添加到 B6 单元格
12 >B5=C8 继续查找上级的上级
13 next
14 >A3=A3|B6 将已经找到的上下级关系树存放到 A3 单元格
15 =A3.sort() 将 A3 单元格排序,按照题目要求显示结果

结果

imagepng