*> ============================================================ *> caller : 计费子程序调用者 (Billing Subprogram Caller) *> Input : WS-N1, WS-N2 (用量参数) *> Output: WS-RESULT (CALL计算结果) *> Coverage: C-N001~N008, C-A001, C-R001, C-R002 *> ============================================================ IDENTIFICATION DIVISION. PROGRAM-ID. caller. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-PGM-NAME PIC X(8) VALUE "callee ". 01 WS-N1 PIC 9(10). 01 WS-N2 PIC 9(10). 01 WS-RESULT1 PIC 9(10). 01 WS-RESULT2 PIC 9(10). 01 WS-RESULT3 PIC 9(10). 01 WS-ALL-PASS PIC X VALUE 'Y'. 88 WS-ALL-PASS-YES VALUE 'Y'. PROCEDURE DIVISION. MAIN. *> Test 1: CALL literal program name MOVE 100 TO WS-N1 MOVE 200 TO WS-N2 CALL "callee" USING WS-N1 WS-N2 WS-RESULT1 IF WS-RESULT1 = 300 DISPLAY "Test 1: PASS" ELSE DISPLAY "Test 1: FAIL (expected 300, got " WS-RESULT1 ")" MOVE 'N' TO WS-ALL-PASS END-IF *> Test 2: CALL variable program name MOVE 10 TO WS-N1 MOVE 20 TO WS-N2 CALL WS-PGM-NAME USING WS-N1 WS-N2 WS-RESULT2 IF WS-RESULT2 = 30 DISPLAY "Test 2: PASS" ELSE DISPLAY "Test 2: FAIL (expected 30, got " WS-RESULT2 ")" MOVE 'N' TO WS-ALL-PASS END-IF *> Test 3: CALL IS INITIAL (forces subprogram reinitialization) MOVE 1 TO WS-N1 MOVE 2 TO WS-N2 CALL "callee" IS INITIAL USING WS-N1 WS-N2 WS-RESULT3 IF WS-RESULT3 = 3 DISPLAY "Test 3: PASS" ELSE DISPLAY "Test 3: FAIL (expected 3, got " WS-RESULT3 ")" MOVE 'N' TO WS-ALL-PASS END-IF IF WS-ALL-PASS-YES DISPLAY "25-subprogram: PASS" STOP RUN RETURNING 0 ELSE DISPLAY "25-subprogram: FAIL" STOP RUN RETURNING 1 END-IF . END PROGRAM caller.