用树型结构表示科目代码的一种高效算法(1) 用树型结构表示科目代码的一种高效算法 松本电工实业有限公司电脑部 舒嵩嵩 ---- 在很多常见的财务软件中,科目代码一般都用树型结构来显示。要实现这一点,通常的做法是用多个(嵌套)循环,甚至递归等算法,将科目表中的代码"织"成树,但这样不但算法复杂,而且执行效率低。本人在实际的开发应用中,摸索出一种简单高效的算法,在此和盆托出,只在抛砖引玉,找出最佳解决方案。下面介绍在Delphi中的实现方法。 一.表结构 ---- 首先建立如下结构的数据表Code.DB,并输入一些测试数据: 字段名 类型 长度 说明aCode 字符型 20 科目代码aName 字符型 30 科目代码名称...... ...... ...... ......表(一) ---- 其中,科目代码aCode的数据类型一定要字符型(一定),长度按具体要求而定,假如要支持六级编码,且代码结构是"3-2-2-2-2-2",则该字段的长度不小于18,而其他字段则不作要求 。另外,要为字段aCode建一索引(切记),因为要用它来排序。 二.编写程序 ---- 1.新建一Project:CodeTree.drp,主窗体命名为frmMain,单元存为Main.Pas。在frmMain上添加一TtreeView控件,命名为tveCode,一个TImageList,命名为imgIcon,并装入三个Icon和Bmp,最后添加一Ttable控件,命名tblCode。 frmMain和各控件的属性按表(二)设置:组件 属性 设置FrmMain Caption '科目代码' Font 宋体 9号 BorderStyle BsDialogTvwCode Images ImgIcon ReadOnly TrueImgIcon ImageList 装入三个图标BtnClose Caption 关闭(C) 表(二)---- 2. 单元main.pas的完整源代码如下: