D0I:10.13374/j.issn1001-053x.1995.05.020 第17卷第5期 北京科技大学学报 Vol.17 No.5 199510 Journal of University of Science and Technology Beijing 0t1995 FOXBASE+上弹菜单的使用与功能扩展 高福家吴继庚 北京科技大学成人教育学院,北京100083 摘要为扩展FOXBASE+系统上弹式菜单的使用范围,提出】种“多数组”连续使用的方法, 并对该方法进行了详细的分析: 关键词计算机,管理程序/OX数据库,上弹菜单 中图分类号TP311.52,TP315 Usage and Function Extension of Pop-up Menu in FOXBASE+ Gao Fujia Wu Jigeng Adult Education College,USTB,Beijing 100083,PRC ABSTRACT To extend the usage range of pop-up menu in FOXBASE+system,a method of continuous usage of "Multi-Array"is provided.Its detailed analysis is al- so made. KEY WORDS computer,supervisors/FOXBASE,pop-up menu FOXBASE+管理系统为用户提供了上弹菜单、亮条菜单、下拉菜单等几种菜单命令, 利用这些命令可以编制出画面美观、交互性强且操作简便的菜单程序,特别是上弹式菜单, 使用起来方便灵活,可在多方面使用,深收用户欢迎,但使用中有时感到其功能还不足.本 文论述其功能的扩展及应用· 1上弹式莱单的使用 上弹菜单的命令格式是: @menu,[,]tite] 要求:必须是一维数组,各元素是字符型且长度不超过50个字符;的值不能大于128,且不大于数组中元素的个数;的值不大于17; 的值不能超过50个字符:包括菜单中的所有菜单项,其项 数由决定,本文介绍的功能扩展是指要显示的菜单项数超过128时的程 序处理方法, 作为程序选择菜单,是以选择的方式去执行某功能程序,上弹菜单是一种较好的方法, 1994-09-24收稿第一作者男58岁副教授
第 卷 第 期 北 京 科 技 大 学 学 报 望巧 年 月 巧 交巧 上 弹菜单的使用 与 功 能扩展 高福 家 吴继 庚 北京科技大学成人教 育学 院 , 北 京 侧 摘要 为扩展 系 统上 弹式菜单 的使用 范 围 , 提 出 种 “ 多 数组 ” 连 续使 用 的方 法 , 并 对该方法 进行 了详细 的分析 关键词 计算机 , 管理 程序 数据库 , 上 弹菜单 中图分类号 下 , 一 月夕 “ 五 例 , , , 一 , “ 一 ” , , 一 十 管理 系 统 为用 户提 供 了上 弹 菜 单 、 亮 条 菜 单 、 下 拉 菜 单 等 几 种 菜 单命 令 , 利用 这些命令 可 以 编 制 出画 面美 观 、 交互性 强且 操作 简便 的菜单程 序 特 别 是 上 弹 式 菜 单 , 使用起来方便 灵 活 , 可 在 多方 面使用 , 深 收 用 户欢迎 , 但使用 中有 时感到其功 能还不足 本 文论述其 功 能 的扩展及 应 用 上弹式菜单 的使用 上 弹菜单 的命令格 式是 【 ’ 行号 , 列 号 数组 , 数 字表 达 式 , 数字表 达式 【 字 符 表 达 式 〕 要 求 数组 必 须是 一 维数组 , 各元 素是 字符 型且 长度不 超过 个字符 数字表 达式 的值不 能大于 , 且不大于数组 中元素的个数 数字表达式 的值不 大 于 字符表 达 式 的值 不 能 超 过 个 字 符 数 组 包 括 菜 单 中 的 所 有 菜 单 项 , 其 项 数 由 数字表达式 决定 本文介绍 的功 能 扩展 是指要 显 示 的 菜单 项 数 超 过 时 的 程 序处理方法 作为程序 选 择菜单 , 是 以 选择 的方式 去 执行 某 功 能程 序 , 上 弹 菜 单 是 一 种 较 好 的方 法 , 哭洲 一 的 一 收稿 第 一作 者 男 岁 副 教 授 DOI :10.13374/j .issn1001-053x.1995.05.020
Vol.17 No.5 高福家等:FOXBASE+上弹菜单的使用与功能扩展 495. 但一般说来,菜单项不能太多,有几项到0多项.这时在定义数组之后可以直接将各菜单 项赋值给数组的各元素,然后利用上弹菜单选择执行, 2扩展上弹式菜单功能的1种方法 在实际应用中,如果要显示的菜单项如课程名称等,但其数目超过128,则需要进行如 下处理: 首先要建立1个字典库,将所有的菜单项输入其中,这时的记录数已不止128个,可能 有数百个·由于FOXBASE+系统设计的菜单项数最多不超过128个,所以采用了“分段送 入”的办法,即定义若干个数组,每个数组元素数定义为128,将1个大字典库中的数据依 次送人若干个数组之中,再用若干个上弹菜单依次显示,选择时依次在各菜单中查找,找到 时选择执行,查找不到时进人下一菜单,直到最后·在每段菜单的最后1项显示“按回车键 继续”,在选择这一项目时按回车键即进入下段菜单· 下面是1个上弹菜单功能扩展的例子,假设某学校课程设置中课程名称数量多达370 个,因此,定义了3个数组,每个数组为128个元素,总共为384个,由于每段菜单中有1 项被提示信息所占用,实际供显式菜单用的为127个,3个数组总共显示381个(若多于 381时可再多定义数组)·具体作法是: (1)定义3个数组mkcl(128),mkc2(128),mkc3(128).在使用数组时,送入下标变量的 实际数量可少于128. (2)打开课程设置总库,利用3组循环语句,将370门课程名称分别送人3个数组· dimension mkcl(128).mkc2(128),mkc3(128)3个数组说明 nx=0 计数器充零 do while nx<127 循环127次 nx=nx+1 计数器加1 mkcl(nx)=课程号+’’+课程名 库记录送下标变量 skip 下跳1个记录 enddo 循环结束 mkc1(128)='按回车键继续' 连接下1个菜单的变量 g0128 开始 nx=0 送第二个数组 do while nx<127 nx兰nx+1 mkc2nx)=课程号+’'+课程名 skip 下跳1个记录 enddo 结束 mkc2(128)='按回车键继续' 连接下一菜单的变量 g0255 从255条记录开始 nx=0 送第三个数组
高福 家等 上 弹菜单的使用 与功 能扩展 但 一般说来 , 菜单项 不 能太 多 , 有 几项 到 多项 这 时在 定义 数 组 之 后 可 以 直 接 将 各 菜单 项 赋值给数组 的各元 素 , 然 后利 用上 弹菜单 选 择 执行 扩展上弹式菜单功能 的 种方 法 在 实 际应 用 中 , 如果要 显示 的菜单项 如 课 程 名 称 等 , 但 其 数 目超 过 , 则需要 进行 如 下处理 首先要 建立 个 字典库 , 将所 有 的菜单项 输入其 中 , 这 时 的记 录数 已 不 止 个 , 可 能 有 数百 个 由于 系 统设计 的菜单项 数 最 多不超 过 个 , 所 以 采 用 了 “ 分 段 送 人 ” 的办法 即定义若干个数组 , 每个 数组 元 素数 定 义 为 , 将 个大字典库 中的数据依 次送人若干个数组 之 中 , 再 用若 干个上 弹菜单依次显示 , 选 择时依次在 各菜单 中查 找 , 找到 时选 择执行 , 查 找不到 时进人 下 一菜单 , 直 到 最 后 在每段 菜单 的最 后 项 显示 “ 按 回车键 继 续 ” , 在 选 择这一项 目时按 回车键 即进 人下 段 菜 单 下 面是 一 个 上 弹菜单功 能扩 展 的例子 假 设 某 学 校 课 程 设 置 中 课 程 名 称 数 量 多 达 个 , 因此 , 定义 了 个数组 , 每 个数组 为 个元 素 , 总共 为 个 由于每 段 菜 单 中 有 项被提示 信息 所 占用 , 实 际供 显 式 菜 单 用 的 为 个 , 个 数 组 总共 显 示 个 若 多 于 时可再多定 义数组 具 体作法 是 定义 个数组 , , , 在 使用 数 组 时 , 送 人 下 标 变 量 的 实 际数量 可 少于 打开课程设置 总库 , 利 用 组 循 环语句 , 将 门课程名称分别送 人 个数组 人 , , 。 个数组说 明 计数器充零 循 环 次 计数器加 二 课程 号 ” 课程 名 库记 录送 下标 变量 下 跳 个记 录 循 环结束 ’ 按 回车键继 续 ’ 连接 下 个菜单的变量 开 始 送 第 二 个数组 二 课程 号 十 ” 十 课程 名 下跳 个记 录 即 结束 。 ’ 按 回车键继 续 ’ 连接下 一菜单的变量 从 条记 录 开始 二 送第 三 个数组
…496· 北京科技人学学报 1995年No.5 do while nx<116 nx=nx+1 mkc3nx)=课程号+'·+课程名 skip enddo 结束 mkc3(117)='按回车键继续' 连接下一菜单的变量 (3)注意:每个数组的最后1个下标变量送入“按回车键继续”的字符串,当选择该 项时,菜单变量mcho的值即为128,此时在程序中利用条件语句判断,若mcho=128时,则 继续显示并激活第二组上弹菜单,依次处理,当再次出现mch0=128时,则继续显示并激 活第三组上弹菜单(若超过3个数组时,依此类推)· (4)显示上弹菜单命令与激活上弹菜单命令分别为: do while.t. @3,40 clear to 21,77 清屏 @3,40 menu mkcl,l28,17tile“课程设置” 形成上弹菜单 read menu to mcho 激活菜单 mchon =mcho 将选中记录号赋给变量mchon if mcho=128 若选中第128项则进人第二段菜单 @3.40 clear to21.77 清屏 (@3.40 menu mkc2,128,17 title“课程设置” read menu to mcho mchon 127+mcho 将127+mcho赋给nchon if mcho=128 若选中第二段末项则进人第三段 @3,40 clear to 21.77 @3,40 menu mkc3,117,17 title“课程设置" read menu to mcho mchon=127+127+mcho if mcho=117 若选中最未项则返回 loop endif endif endif exit enddo 循环结束 go mchon 将记录指针移到选中的项 (S)根据移动光标选择的课程顺序号mcho作为课程设置的记录指针值,go mchon则 可将该记录的全部信息通过内存变量传递出来,以便程序使用
· 北 京 科 技 大 学 学 报 年 业 二 课 程 号 十 ” 课程 名 结束 川 ’ 按 回 车键继 续 ’ 连接下 一菜单 的变量 注意 每 个 数组 的最后 个下 标 变 量 送 人 “ 按 回 车 键 继 续 ” 的 字 符 串 当选 择 该 项 时 , 菜单变量 的值 即为 , 此 时在程序 中利用条件语句判断 , 若 时 , 则 继 续 显示 并 激 活第二 组上 弹菜 单 , 依次处理 , 当再次 出现 犯 时 , 则 继 续显 示 并 激 活第三 组上 弹 菜单 若超 过 个数组 时 , 依此类 推 显示 上 弹菜单命令 与激 活上 弹菜单命令分别为 , , 清屏 , , , “ 课程设置 ” 形 成上 弹菜单 坦 。 激活菜单 口 二 将选 中记录 号 赋给变量 江 若选 中第 项则进人第二段菜单 , , 清屏 , , , “ 课程 设 置 ” 代戈几 。 将 赋 给 汀 。 若 选 中第二段 末 项 则进 入第 三段 , , , , , “ 课 程 设 置 ” …段 江 。 二 若 选 中最 末项 则返 回 即 汪 循 环 结 束 将 记录指针移到选 中的项 根 据 移 动光 标 选 择 的课 程 顺 序 号 作 为课 程设 置 的 记 录 指 针 值 , 则 可将该记录 的全部 信息通过 内存 变量传递 出来 , 以 便 程 序 使用
Vol.17 No.5 高福家等:FOXBASE+上弹菜单的使用与功能扩展 497. 3几个注意的问题 (1)菜单项的最大个数.如上所述,菜单显示项数虽可以超过128,直到数百个,因为 它和内存有关,要受到内存变量空间和苹单空间的限制,在FOXBASE+系统中,规定这2 个空间的取值最大数分别为64K和32K字节川.并规定1个元素显示的长度不超过50个字 符.若按50个字节计算,将64K内存变量空间全部占满、则可显示的菜单项不能超过 64K/50=1.2K个,当然,如果1个元素显示的长度少于50个字节时,此数目可稍多一些. (2)数组个数的确定,定义几个数组、要根据可能显示的最大菜单项数也即字典库中 的记录数来确定.将字典库记录数除以127.若恰为整数,则商数即为数组个数:若商数不 是整数,则商数加1即为数组个数, (3)修改config.fx·在运行程序时、若出现错误信息: String memory variable area overflow 则表明字符型内存变量空间溢出,须修改文件config.fx的设置),在此文件中,规定内存变 量空间的取值范围为1~64K,默认值为6K,出现上述错误时,表明取值不够大,可适 当加大config.fx中MVARIZ的值,若上弹菜单中内存变量的长度(即1个菜单项的长度) 为L个字节,字典库中的记录总数为R条,则MVARIZ的取值应不小于L·R.为了节省 内存空间,也不必取得过大,调正到够用即可, (4)虽然按此方法可扩展上弹菜单的功能,但建议读者最多不要超过3个数组.因为数 组过多,即菜单项高达数百个,尽管可用PgUp键或PgD键整屏移动光标,但移动光标次 数过多,毕竞会引起操作人员的烦恼,因此,菜单项太多时可改用其它方式,如输入编码, 利用sk查询的办法来移动字典库的记录指针;或者选用下拉式菜单(二维数组)的方 法,可使操作简单一些· 上面论述的方法在实践中已得到应用、如国家教委成教管理系统、同仁堂药材供应管理 系统、广西运管局办公室管理系统等,现已正常运行,效果良好, 参考文献 1庄德秀,宋长龙,刘吉军,汉字dos及树络环境下FoxBASE+实用程序设计,北京:清华大学出版 社,1993.281~324 2刘宝林,粤智,FoxBASE实用大全,北京.电子上业出版社.1992.9~89
高 福 家等 上 弹 菜单 的 使用 与功 能扩 展 几个注意的问题 菜单 项 的最大 个 数 如 上 所述 , 菜单 显 示 项 数虽 可 以 超过 , 直到数百个 因为 它 和 内存 有 关 , 要 受到 内存 变量 空 间和菜 单 空 间的 限制 , 在 系 统 中 , 规 定 这 个 空 间 的取值 最 大 数分别 为 和 字节 ’ , 并规定 个元 素显示 的长度不 超过 个字 符 若 按 个 字 节计算 , 将 内存 变 量 空 间 全 部 占满 , 则 可 显 示 ’ 的 菜单项 不 能超 过 个 当然 , 如果 个元 素 显示 的长 度 少于 个字节 时 , 此数 目可稍多一些 数组 个数 的确 定 定 义几 个数组 , 要 根 据 可 能 显不 的 最 大 菜 单项 数 也 即字 典 库 中 的记 录 数来确 定 将字典库记 录 数除 以 , 若 恰 为 整 数 , 则 商 数 即 为数组个数 若商数不 是 整 数 , 则商数加 即为数组 个数 修改 在运 行程 序 时 , 若 出现错 误 信息 盼 则 表 明字 符 型 内存 变量 空 间溢 出 , 须 修改 文 件 雌 的设置 在 此 文 件 中 , 规 定 内存变 量 空 间 的取 值 范 围 为 一 , 默认 值 为 出现 上述 错 误 时 , 表 明取 值 不 够 大 , 可 适 当加 大 中 的 值 若 一 弹 菜 单 中 内存 变 量 的 长 度 即 个 菜 单 项 的长 度 为 个 字 节 , 字典 库 中的记 录总数 为 条 , 则 止 的 取 值 应 不 小 于 · 为 了节 省 内存 空 间 , 也 不 必取 得 过大 , 调正 到够 用 即可 虽 然 按此方法 可 扩展上 弹菜单的功 能 , 但建议读 者最 多不 要 超过 个数组 因 为数 组 过 多 , 即菜单项 高 达 数百 个 , 尽 管可 用 键或 键整屏 移动 光标 , 但 移 动 光 标 次 数过 多 , 毕竟 会 引起 操作 人员 的烦恼 因此 , 菜 单 项太 多 时可 改 用 其 它 方 式 , 如 输人 编 码 , 利 用 查 询 的 办 法 来 移 动 字 典 库 的 记 录 指 针 或 者 选 用 下 拉 式 菜 单 二 维 数 组 的 方 法 , 可 使操 作 简单 一些 上 面论述 的方 法在 实践 中 已 得到应 用 , 如 国 家教 委 成教 管理 系统 、 同仁堂药 材供 应管 理 系 统 、 广 西 运 管 局 办公 室 管理 系统等 , 现 已 正 常运 行 , 效 果 良好 参 考 文 献 庄 德 秀 , 社 , 刘 宝 林 , 宋长龙 , 刘吉 军 汉 字 及 网络环 境 下 十 实 用 程 序 设 计 北 京 清 华大 学 出 版 一 廖 智 实 用 大 全 北 京 电子 上 业 出 版社 , 卯 一