精通cobol--9.7.1 如何进行顺序查找

  下面以一个银行账户管理系统为例子,具体分析在通常情况下是如何进行顺序查找的。对于银行账户管理系统而言,最主要的数据是以下两条。

q      账号

q      账号所对应的用户名

下面仍然针对顺序查找提取一个简化的模型。该模型只包含以上两类数据,并且假设用户数为10人。对此,可定义银行账户管理表如下。

01  BANK-ACCOUNT-TABLE.

05  ACCOUNT    OCCURS  10  TIMES.

     10   ACCOUNT-NUM     PIC 9(9).           /*定义账号。并假设其由9个数字组成*/

     10   ACCOUNT-NAME    PIC X(10).         /*定义用户名。并假设其由不超过10个的字符组成*/

将该表通过任意一种方式初始化后,假设表中数据如表所示。

  银行账户表

ACCOUNT-NUM

ACCOUNT-NAME

021845984

TOM

547874956

HARRY

201874698

PITTER

004847624

SMITH

478206045

JONES

032874512

ROBIN

064840574

SIMON

120873954

FRANK

657842216

SANDY

689-574-402

SUE

以上表格中的数据都是任意指定的。另外,这里需要再强调一下,数据编号和下标并不是一个概念。对于本例而言,数据编号就是账号ACCOUNT-NUM。该数据编号用以代表相应数据,即用户名ACCOUNT-NAME。数据通常是有具体意义的,如ACCOUNT-NAME数据表示人名。而编号则是没有具体意义的,只是为了更方便地表示数据。

通过上表可以看出,此处数据编号和数据存放的位置并不是一致的。为更好地说明这一点,银行账户表中的数据编号,数据以及数据存放位置的对应关系如表所示。

  数据编号,数据和数据存放位置的对应关系

数据编号

数据

数据存放位置

021845984

TOM

1

547874956

HARRY

2

201874698

PITTER

3

004847624

SMITH

4

478206045

JONES

5

032874512

ROBIN

6

064840574

SIMON

7

120873954

FRANK

8

657842216

SANDY

9

689574402

SUE

10

对于该表而言,不妨假设需要查找数据编号(即账号)为“064840574”的数据(即用户名)。则使用顺序查找方式的代码如下。

……

05   ACCOUNT-SUB     PIC 99  USAGE IS COMP.      /*定义下标*/

05   FOUND-FLAG       PIC X.                        /*定义找到标志*/

05   KEY-NUM           PIC 9(9).                      /*该变量用于存放指定的数据编号*/

05   FOUND-NAME      PIC X(10).                     /*该变量用于存放查找到的数据*/

……

MOVE ‘N’ TO FOUND-FLAG.                             /*将找到标志设为默认值‘N*/

MOVE ‘064840574’ TO KEY-NUM.                        /*将指定的数据编号MOVEKEY-NUM变量中*/

PERFORM  100-FIND-NAME

VARYING ACCOUNT-SUB FROM 1 BY 1

UNTIL   ACCOUNT-SUB > 10

OR

FOUND-FLAG = ‘Y’.

以上实际上是通过PERFORM VARYING语句从表的第一条数据开始,一条条顺次查找的。因此,这也是该查找方式被称为顺序查找方式的原因。

对于上面的100-FIND-NAME具体每一步的查找过程,代码如下。

100-FIND-NAME.

          IF  ACCOUNT-NUM  (ACCOUNT-SUB) = KEY-NUM

MOVE ‘Y’ TO FOUND-FLAG

MOVE ACCOUNT-NAME  (ACCOUNT-SUB) TO FOUND-NAME

          END-IF.

通过顺序查找方式查找后,最终找到的数据应该为“SIMON”。整个查找过程共进行了7次查找,查找过的数据如表所示。

  查找过的数据

ACCOUNT-NUM

ACCOUNT-NAME

021845984

TOM

547874956

HARRY

201874698

PITTER

004847624

SMITH

478206045

JONES

032874512

ROBIN

064840574

SIMON

上面最后一条记录中的数据“Simon”即为所要查找的数据。

此外,整个查找结束后,下标ACCOUNT-SUB也应该为7。数据的存放位置实际上是和下标对应的,而不是数据的编号。数据编号和数据都要通过下标引用。使用下标引用数据编号的方式如下。

ACCOUNT-NUM  (ACCOUNT-SUB)             

使用下标引用数据的方式如下。

ACCOUNT-NAME  (ACCOUNT-SUB)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值