cobol语言基础培训教程
程序如下:
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.
01 DFHCOMMAREA PIC X(26).
PROCEDURE DIVISION.
A000-MAIN-PROCESS.
MOVE DFHCOMMAREA TO PGM3COM
INITIALIZE PGM3-OUT
PERFORM B000-VALIDATION THRU B000-EXIT
IF PGM3-SUCCESSFUL
PERFORM C000-PROCESS THRU C000-EXIT
END-IF
.
A999-RETURN.
MOVE PGM3COM TO DFHCOMMAREA.
EXEC CICS RETURN END-EXEC.
GOBACK.
*
B000-VALIDATION.
IF CUST-NO NOT NUMERIC
SET PGM3-CUST-NBR-ERR TO TRUE
END-IF
.
B000-EXIT.
EXIT.
*
C000-PROCESS.
MOVE CUST-NO TO MASTER-KEY
EXEC CICS READ FILE (‘VMASTER’)
RIDFLD(MASTER-KEY)
INTO (MASTER-RECORD)
LENGTH(LENGTH OF MASTER-RECORD)
RESP (WS-RESP)
END-EXEC
IF WS-RESP NOT = DFHRESP(NORMAL)
IF WS-RESP = DFHRESP(NOTFND)
SET PGM3-CUST-NOT-FND TO TRUE
ELSE
EXEC CICS ABEND ABCODE(‘ABCD’) END-EXEC
END-IF
ELSE
MOVE CHECK-AC TO PGM3-AC
MOVE BAL TO PGM3-BAL
END-IF
.
C000-EXIT.
EXIT.
CHAPTER 8 联机及批量程序的一些差异
| 批量 | 联机 |
| 对大量数据的集中处理 | 对特定的少量数据操作 |
| 一般在非营业时间运行 | 一般在营业时间运行 |
| 对效率要求较高 | 对实时性要求较高 |
| 在操作系统中通过后台作业流来调度运行 | 在CICS平台上通过CICS激活运行 |
| 资源由作业流和程序管理 | 资源由CICS集中管理,程序对资源使用通过调用CICS提供的语句 |
| 一般会使用INPUT-OUTPUT SECTION. FILE-CONTROL. FILE SECTION. |
不会使用INPUT-OUTPUT SECTION. FILE-CONTROL. FILE SECTION. |
| 出错处理通过检测文件状态字 | 出错处理通过检测CICS返回状态字 |
CHAPTER 9 COBOL 编程规范
1.使用結構化的編程方法 ,開發一致的、可理解的和易于維護的COBOL程序 .結構化編程應遵循”KISS”法則,即:”Keep It Simple & Stupid” for EASY TO READ ,EASY TO DEBUG ,EASY TO MAINTAIN.
2.只用顺序,循环,选择3种程序結構及組合去表示程序邏輯
3.每個控制結構只有一個入口和一個出口(結構可以是一個模塊,段,節,子程序)。
4.不要爲了時空效率而犧牲清晰性。
5.程序的清晰性首先在於邏輯的清晰,然後才是格式的清晰。
6.清晰的格式有助於清晰的思維。
7.確信所有變量在被使用時都被正確地置初值。
8.避免濫用語言特色,應使程序簡潔易讀。
9.使用有意義的、簡化的變量名及詞語標號。
10.盡量使用標準的公用子程序執行既定的程序功能。
11.避免不必要的複雜的算術和邏輯表達式。
12.避免重復的控制序列以及不必要的轉移。
13.不要用注釋去精確地重復程序代碼,要使得注釋有價值。
14.嚴格控制非限制性轉移語句”GOTO”的使用,除非下面兩種情況:當不使用時將會模糊而不是澄清功能;
在同一程序單元内正向轉移。

















