000010 @OPTIONS MAIN 000020*---------------------------------------------------------------------- 000030* The SEARCH statement (format 2) can also perform a random search. 000040*---------------------------------------------------------------------- 000050 IDENTIFICATION DIVISION. 000060 PROGRAM-ID. SAMPLE. 000070 DATA DIVISION. 000080 WORKING-STORAGE SECTION. 000090 01 GET-GOODS PIC X(15). 000100 01 GET-NUM PIC 9(4) BINARY. 000110 01 TOTAL PIC 9(4) BINARY VALUE ZERO. 000120 01 COUNTER PIC 9(1). 000130 01 PRICE-ED PIC $$$$$9. 000140 01 TOTAL-ED PIC ZZZZZ9. 000150 CONSTANT SECTION. 000160 01 GOODS-DATA. 000170 02 PIC X(15) VALUE "DESKTOP TYPE". 000180 02 PIC 9(4) VALUE 1500. 000190 02 PIC X(15) VALUE "HARD DISK". 000200 02 PIC 9(4) VALUE 280. 000210 02 PIC X(15) VALUE "MODEM". 000220 02 PIC 9(4) VALUE 80. 000230 02 PIC X(15) VALUE "NOTEBOOK TYPE". 000240 02 PIC 9(4) VALUE 2200. 000250 02 PIC X(15) VALUE "PRINTER". 000260 02 PIC 9(4) VALUE 400. 000270*---------------------------------------------------------------------- 000280* An index key and index name are specified for the table used by the 000290* SEARCH statement (format 2). 000300* The data used as the search key must be in ascending (ASCENDING) or 000310* descending (DESCENDING) order. 000320*---------------------------------------------------------------------- 000330 01 REDEFINES GOODS-DATA. 000340 02 GOODS OCCURS 5 TIMES 000350 ASCENDING KEY IS NAME INDEXED BY IX. 000360 03 NAME PIC X(15). 000370 03 PRICE PIC 9(4). 000380*---------------------------------------------------------------------- 000390 PROCEDURE DIVISION. 000400 PERFORM TEST BEFORE 000410 VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 5 000420 MOVE PRICE(COUNTER) TO PRICE-ED 000430 DISPLAY COUNTER "." NAME(COUNTER) PRICE-ED 000440 END-PERFORM. 000450 DISPLAY " ". 000460 DISPLAY "What would you like to buy? Goods name >> " 000470 WITH NO ADVANCING. 000480 ACCEPT GET-GOODS FROM CONSOLE. 000490 DISPLAY "How many would you like? >> " 000500 WITH NO ADVANCING. 000510 ACCEPT GET-NUM. 000520*---------------------------------------------------------------------- 000530* For the SEARCH statement (format 2), the initial value of the index 000540* is ignored. The value of the index used for searching is changed 000550* based on the search method determined by the compiler. 000560* Use formats 1 or 2 based on the required situation. 000570*---------------------------------------------------------------------- 000580 SEARCH ALL GOODS 000590 WHEN NAME(IX) = GET-GOODS 000600 MOVE PRICE(IX) TO TOTAL 000610 END-SEARCH. 000620*---------------------------------------------------------------------- 000630 DISPLAY " ". 000640 IF TOTAL NOT = ZERO THEN 000650 COMPUTE TOTAL = TOTAL * GET-NUM 000660 MOVE TOTAL TO TOTAL-ED 000670 DISPLAY "The total amount is " TOTAL-ED " dollars." 000680 ELSE 000690 DISPLAY "The input data is incorrect." 000700 END-IF. 000710 END PROGRAM SAMPLE.