CHAPTER 7 各部之间的关系及程序举例
一.各部之间的关系:?
二.程序举例:?
例1:?
读入一组产品销售记录,每读入一个记录,计算出销售总额(数量X单价).然后打印出该产品的全部数据.数据形式如下:
1? 9? 9? 2? 1? 2? 3? 1? 0? 0? 0? 0? 0? 1? A? A? A ?A? 0? 1? 0? 0? 5? 0? 0? 0?
1? 9? 9? 3? 1? 2? 3? 1? 1? 0? 0? 0? 0? 1? B? B? B B? 0? 2? 0? 0? 6? 0? 0? 0?
-------------------------? -----------------?? ------------? ------------? -----------?
???????? DATE??????????????? PRODCODE???? CUST??????? AMT??? ??? PRICE?
程序如下:?
IDENTIFICATION?????? DIVISION.?
PROGRAM-ID.???????????? PEXAM1?
ENVIRONMENT????????? DIVISION.?
CONFIGRATION???????? SECTION.?
INPUT-OUTPUT????????? SECTION.?
FILE-CONTROL.?
??????? SELECT???? INPUT-FILE???????? ASSIGN??? TO???? FILE1?
?????????????????????????? ORGANIZATION??????????????????? IS????? SEQUENCIAL?
?????????????????????????? ACCESS??? MODE??????????????????? IS????? SEQUENCIAL?
?????????????????????????? FILE-STATUS????????????????????????? IS???? WS-INPUT-FILE-STATUS.?
??????? SELECT??? OUTPUT-FILE??????? ASSIGN? TO???? P-FILE?
?????????????????????????? ORGANIZATION??????????????????? IS????? SEQUENCIAL?
?????????????????????????? ACCESS??? MODE??????????????????? IS????? SEQUENCIAL?
?????????????????????????? FILE-STATUS????????????????????????? IS???? WS-OUTPUT-FILE-STATUS.?
DATA?????????????????????????? DIVISION.?
FILLE?????????????????????????? SECTION.?
FD????? INPUT-FILE?????? LABEL???? RECORD??? IS???? STANDARD.?
01?????? IN-REC.?
?????????? 05????? DATE????????? ??PIC??? 9(8).??
?????????? 05????? PROD-CODE??PIC??? 9(6).?
?????????? 05????? CUSTOMER-CODE??PIC??? X(4).?
?????????? 05????? QUANTITY??PIC??? 9(4).?
?????????? 05????? UNIT-PRICE?? ??PIC??? 9(4).?
FD????? OUTPUT-FILE?????? LABEL???? RECORD??? IS???? STANDARD.?
01?????? OUT-REC.?
?????????? 05????? DATE????????? ??PIC??? 9999B99B99.??
?????????? 05????? FILLER???PIC??? X(5).?
?????????? 05????? PROD-CODE??PIC??? 9(6).?
?????????? 05????? FILLER???PIC??? X(5).??
?????????? 05????? CUSTOMER-CODE?PIC??? X(4).?
?????????? 05????? FILLER???PIC??? X(5).?
?????????? 05????? QUANTITY??PIC??? ZZZ9.?
?????????? 05????? FILLER???PIC??? X(5).???????????
???????? ? 05????? UNIT-PRICE?????????? PIC??? $(5).?
????????? ?05????? FILLER????????? PIC??? X(5).?
????????? ?05????? SALES-VALUE????? PIC??? $(8).
WORKING-STORAGE??????????????? SECTION.?
01?????? WS-VARIBLES.?
?????????? 05????? WS-INPUT-FILE-STATUS ?PIC??? 9(2).?
???????????????????? 88?????? WS-INPUT-FILE-SUCCESSFUL???????? VALUE???? 0.?
???????????????????? 88?????? WS-INPUT-FILE-EOF????????????????????????? VALUE??? 23.?
?????????? 05????? WS-OUTPUT-FILE-STATUS?PIC??? 9(2).?
???????????????????? 88?????? WS-OUTPUT-FILE-SUCCESSFUL???? VALUE???? 0.????
PROCEDURE??????????????????????????????? DIVISION.
A000-MAIN.?
????????? PERFORM???????? A100-OPEN-FILES??????????
????????? PERFORM???????? R000-READ-FILE?????????????
????????? PERFORM???????? A200-PROCESS-RECORD UNTIL WS-INPUT-FILE-EOF?
????????? PERFORM???????? A300-CLOSE-FILES????????????
????????? STOP RUN?
????????? .?
A000-EXIT.?
????????? EXIT?
????????? .?
A100-OPEN-FILES.?
?????????? OPEN?INPUT??????? INPUT-FILE?
???????????????????????? ?OUTPUT??? OUTPUT-FILE?
?????????? IF??? ?NOT?????????? WS-INPUT-FILE-SUCCESSFUL??????
?DISPLAY?? ‘INPUT-FILE????????????? OPEN???? NOT?? SUCCESSFUL’??? UPON??? CONSOLE?
?PERFORM? Z000-ABEND?
????????? END-IF??
?????????? IF??? ?NOT??????????? WS-OUTPUT-FILE-SUCCESSFUL??????
?DISPLAY?? ‘OUTPUT-FILE???????? OPEN????? NOT?? SUCCESSFUL’??? UPON??? CONSOLE?
?PERFORM? Z000-ABEND???????
?????????? END-IF??
????????? .?
A200-PROCESS-RECORD.?
?????????? INITIALIZE? OUT-REC?
?????????? MOVE?????????? CORR???????? IN-REC??? ?TO?????????? OUT-REC?
?????????? COMPUTE?? SALES-VALUE?? =? QUANTITY? OF? IN-REC?? *?? UNIT-PRICE?? OF?? OUT-REC?
?????????? PERFORM?? W000-WRITE-FILE??
?????????? PERFORM??? R000-READ-FILE?????
?????????? .?
A300-CLOSE-FILE.?
?????????? CLOSE???????? INPUT-FILE???????????
???????????????????????????????? OUTPUT-FILE?
?????????? .?
R000-READ-FILE.?
?????????? READ ?INPUT-FILE?
?????????? IF??? ?NOT?? WS-INPUT-FILE-SUCCESSFUL?? AND? NOT??? WS-INPUT-FILE-EOF???
?DISPLAY?? ‘INPUT-FILE? READ NOT?? SUCCESSFUL’??? UPON??? CONSOLE?
?PERFORM? Z000-ABEND??????????? THRU????? Z000-EXIT?
?????????? END-IF?
????????? .?
W000-WRITE-FILE.?
?????????? WRITE ?OUT-REC???????? AFTER???? 1?
?????????? IF??? ?NOT?? WS-OUTPUT-FILE-SUCCESSFUL?????
?DISPLAY?? ‘OUTPUT-FILE? WRITE? NOT?? SUCCESSFUL’??? UPON??? CONSOLE?
?PERFORM? Z000-ABEND??
?????????? END-IF?
?????????? .?
Z000-ABEND.?
????????? DISPLAY?? ‘PROGRAM?? ABEND !’??? UPON??? CONSOLE?
????????? PERFORM? A300-CLOSE-FILES????????? THRU??? A300-EXIT?
????????? MOVE???????? 16???????????????????????????????????????? TO???????? RETURN-CODE?
????????? GOBACK?
????????? .?
输出的数据形式如下:?
1992 12 31???? 000001???? AAAA????? 100????? $5000????? $500000
1993 12 31???? 100001???? BBBB?????? 200????? $6000????? $1200000?
例2:?
Program : INVI300??? Update? inventory?? file (random)?
???????????????????????????
?
??????? If the program finds a master record with the same item number as a transaction, it uses the?
transaction data to update the master record .It does this by increasing the on hand quantity?
in the master record by the receipt quantity in the transaction record.?
??????? If the program cannot find a master record for a transaction, it writes the transaction record on?
the file of error transactions (ERRTRAN). The record format format for ERRTRAN is same as?
for VALTRAN.
The basic processing requirements are:
1. Read a transaction record.
2. Read the master record with the same item number as in the transaction record.
3. If the master? record is found , update and rewrite the matching master record.
4. If the transaction is not found , write the transaction record on the file of error? transactions.?
程序如下:?
IDENTIFICATION?DIVISION.?
PROGRAM-ID.?INV1300.
ENVIRONENT ?DIVISON.?
INPUT-OUTPUT ?SECTION.?
FILE-CONTROL.?
??????? SELECT? VALTRAN??? ASSIGN? TO?? SYS020-AS-VALTRAN.?
??????? SELECT? INVMAST???? ASSIGN? TO?? SYS021-INVMAT?
????????????? ORGANIZATION IS? INDEXED?
????????????? ACCESS???????????????? IS??? RANDOM?
????????????? RECORD KEY?????? IS?? MR-ITEM-NO?
????????????? FILE STATUS??????? IS?? INVMAST-ERROR-CODE.?
???????? SELECT? ERRTRAN??? ASSIGN? TO?? SYS022-AS-ERRTRAN.?
DATA??DIVISION.?
FILE??SECTION.?
FD??? VALTRAN?
???????? LABEL? RECORDS? ARE? STANDARD.?
01???? VALID-TRANSACTION-AREA??PIC? X(21).?
FD??? INVMAST?
???????? LABEL RECORDS? ARE? STANDARD.?
01???? MASTER-RECORD-AREA.?
???????? 05?? MR-ITEM-NO??PIC? X(5).?
???????? 05?? FILLER???PIC? X(45).?
FD??? ERRTRAN?
???????? LABEL? RECORDS ARE STANDARD.?
01???? ERROR-TRANSACTION??PIC? X(21).?
WORKING-STORAGE?SECTION.?
01??? SWITCHES.?
??????? 05??? VALTRAN-EOF-SWITCH?PIC? X?? VALUE? ‘N’.?
??????????????? 88??? VALTRAN-EOF????????????????????????????????? VALUE? ‘Y’.?
??????? 05??? MASTER-FOUND-SWITCH?PIC? X.?
??????????????? 88??? MASTER-FOUND?????????????????????????????? VALUE? ‘Y’.
01??? FILE-STATUS-FIELD.?
??????? 05??? INVMAST-ERROR-CODE?PIC? X(2).
01??? INVENTROY-TRANSACTION-RECORD.?
??????? 05??? IT-ITEM-NO??PIC? X(5).?
??????? 05??? IT-VENOR-NO??PIC? X(5).?
??????? 05??? IT-RECEIPT-DATE??PIC? X(6).?
??????? 05??? IT-RECEIPT-QUANTITY???????????? PIC? S9(5).?
01??? INVENTORY-MASTER-RECORD.?
??????? 05??? IM-DESCRIPTIVE-DATA.?
??????????????? 10??? IM-ITEM-NO??PIC? X(5).?
??????????????? 10??? IM-ITEM-DESC??PIC? X(20).?
??????????????? 10??? IM-UNIT-COST??PIC? S9(3)V9(2).?
??????????????? 10??? IM-UNIT-PRICE??????? ?PIC? S9(3)V9(2).?
??????? 05??? IM-INVENTORY-DATA.?
??????????????? 10??? IM-REORDER-POINT?PIC? S9(5).?
??????????????? 10??? IM-ON-HAND??PIC? S9(5).?
??????????????? 10??? IM-ON-ORDER??PIC? S9(5).???
PROCEDURE?DIVISION.?
A000-UPDATE-INVENTORY-FILE.?
???????? OPEN???????????? INPUT??????? VALTRAN?
??????????????????????????????? I-O?????????????? INVMAST?
??????????????????????????????? OUTPUT???? ERRTRAN?
???????? PERFORM??? B000-PROCESS-INVENTORY-TRAN????? THRU???? B000-EXIT?
??????????????????????????????? UNTIL???????? VALTRAN-EOF?
???????? CLOSE????????????????? VALTRAN?
?????????????????? INVMAST?
?????????????????? ERRTRAN?
???????? DISPLAY????? ‘PROGRAM?? INV1300? NORMAL? END’?
???????? GOBACK.?
B000-PROCESS-INVENTORY-TRAN.?
??????? PERFORM????????????????????? B100-READ-INVENTORY-TRAN???????????????
??????? IF????? NOT?????????????????????? VALTRAN-EOF?
????????????????? PERFORM??????????? B200-READ-INVENTORY-MASTER??????????
????????????????? IF???? MASTER-FOUND?
?????????????????????????? PERFORM?? B300-UPDATE-INVENTORY-MASTER?????
????????????????? ELSE?
?????????????????????????? PERFORM?? B400-WRITE-ERROR-TRAN????????????????????????
????????????????? END-IF?
??????? END-IF.?
B000-EXIT.?
??????? EXIT.?
???????????????????
B100-READ-INVENTRORY-TRAN.?
??????? READ?? VALTRAN??????? INTO??? INVENTORY-TRANSACTION-RECORD?
???????????????????? AT?? END?????????? MOVE? ‘Y’???????? TO??????? VALTRAN-EOF-SWITCH.?
B100-EXIT.?
??????? EXIT.
B200-READ-INVENTORY-MASTER.?
??????? MOVE?? IT-ITEM-NO??????????????????????????????????? TO???????? MR-ITEM-NO?
??????? READ??? INVMASST????????????????????????????????????? INTO??? INVENTORY-MASTER-RECORD?
??????? IF?????????? INVMAST-ERROR-CODE????????????? = ‘00’?
????????????????????? MOVE? ‘Y’??????????????????????????????????????? TO???????? MASTER-FOUND-SWITCH?
??????? ELSE????
????????????????????? MOVE? ‘N’??????????????????????????????????????? TO???????? MASTER-FOUND-SWITCH?
??????? END-IF.
B300-UPDATE-INVENTORY-MASTER.?
??????? ADD???? IT-RECEIPT-QUANTITY??????????????? TO????????? IM-ON-HAND?
??????? REWRITE? MASTER-RECORD-AREA?????? FROM??? INVENTORY-MASTER-RECORD?
??????? IF????????? INVMAST-ERROR-CODE????????????? NOT?????? =?? ‘00’?
???????????????????? DISPLAY?? ‘ INV1300? REWRITE?? INVMAST ERROR . ITEM? NUMBER = ’ IM-ITEM-NO?
???????????????????? DISPLAY?? ‘ FILE? STATUS??? = ’??? INVMAST-ERROR-CODE?
???????????????????? MOVE? ‘Y’???????????????????????????????????????? TO???????? VALTRAN-EOF-SWITH?
??????? END-IF.?
B300-EXIT.?
??????? EXIT.
B400-WRITE-ERROR-TRAN.?
??????? WRITE?? ERROR-TRANSACTION??????????????? FROM?? INVENTORY-TRANSACTION-RECORD.?
B400-EXIT.?
??????? EXIT.??????
?????? IDENTIFICATION DIVISION.?
?????? PROGRAM-ID.??? PROGRAM3.?
???????
?????? ENVIRONMENT DIVISION.?
??????
?????? DATA DIVISION.?
?????? WORKING-STORAGE SECTION.
?????? 01? WS-RESP??? PIC S9(8)? COMP.? ??
?????????? 88? WS-RESP-NORMAL?? VALUE? 0.
?????? 01? PGM3COM.?
??? 05? CUST-NO??PIC? 9(8).?
??? 05? PGM3-OUT.?
?????????????? ???????? 10? PGM3-RETURN-CODE?PIC? X(2).?
?????????????? 88? PGM3-SUCCESSFUL??????????????????? VALUE '? '.?
??????????????????????????????? 88? PGM3-CUST-NBR-ERR??????????????? VALUE '01'.?
??????????????? 88? PGM3-CUST-NOT-FND?????????????? VALUE '02'.??
???????? 10? PGM3-AC?? PIC? 9(5).?
???????? 10? PGM3-BAL?? PIC? 9(11).???
?01? MASTER-RECORD.?
?????? 05? MASTER-KEY?? ?? PIC? 9(8).?
?????? 05? CUST-NAME ?? PIC? X(20).?
?????? 05? CHECK-AC??? PIC? 9(5).?
?????? 05? BAL??? PIC? 9(11).???????????
LINKAGE SECTION.?
Micr