Files
cobol-java-v3/benchmark-programs/04-edit-getput/report-editing.cbl
T
NB-076 94400d50d4 feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 09:53:21 +08:00

151 lines
5.1 KiB
COBOL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
*> ============================================================
*> report-editing : 请求书编辑输出 (Report Editing)
*> Input : FILE-IN (INPUT.DAT: 请求书数据)
*> Output: RPT-OUT (REPORT.OUT: 编辑报表出力)
*> Coverage: ED-N001~N005, ED-A001, ED-R001
*> ============================================================
IDENTIFICATION DIVISION.
PROGRAM-ID. EditReport.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE-IN ASSIGN TO "INPUT.DAT"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-FS.
SELECT RPT-OUT ASSIGN TO "REPORT.OUT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FILE-IN RECORD CONTAINS 40 CHARACTERS.
01 IN-REC.
05 IN-KEY PIC X(10).
05 IN-NAME PIC X(20).
05 IN-AMOUNT PIC 9(10).
FD RPT-OUT RECORD CONTAINS 80 CHARACTERS.
01 RPT-LINE PIC X(80).
WORKING-STORAGE SECTION.
01 WS-FS PIC X(2).
01 WS-EOF PIC X(1) VALUE 'N'.
88 WS-EOF-Y VALUE 'Y'.
*> 编辑字段 (ED-N002: PIC Z,9,*)
01 WS-EDIT-AMT PIC ZZZ,ZZZ,ZZZ,ZZ9.
01 WS-EDIT-STAR PIC *(10).
01 WS-EDIT-CHEQUE PIC Z,ZZZ,ZZZ,ZZZ,ZZ9.99.
01 WS-LINE-COUNT PIC 9(3) VALUE 0.
01 WS-PAGE-COUNT PIC 9(3) VALUE 0.
01 WS-REC-COUNT PIC 9(10).
01 WS-TOTAL-AMT PIC 9(15).
01 WS-HEAD-LINE PIC X(80).
01 WS-FOOT-LINE PIC X(80).
01 WS-DETAIL-LINE PIC X(80).
01 WS-PAGE-MAX PIC 9(3) VALUE 10.
01 WS-INVOICE-REC.
COPY "telecom/TEL-INVOICE.cpy".
PROCEDURE DIVISION.
MAIN.
DISPLAY "EDIT-REPORT: Starting editing output test"
OPEN INPUT FILE-IN.
OPEN OUTPUT RPT-OUT.
*> ED-N003: HEADING出力
MOVE 0 TO WS-PAGE-COUNT.
MOVE 0 TO WS-LINE-COUNT.
PERFORM WRITE-HEADING.
PERFORM UNTIL WS-EOF-Y
READ FILE-IN INTO IN-REC
AT END SET WS-EOF-Y TO TRUE
NOT AT END
ADD 1 TO WS-REC-COUNT
ADD IN-AMOUNT TO WS-TOTAL-AMT
*> ED-N005: 改页(AFTER PAGE sim
IF WS-LINE-COUNT >= WS-PAGE-MAX
PERFORM WRITE-FOOTING
PERFORM WRITE-HEADING
END-IF
*> ED-N002: 编辑字段(Z,9,*
MOVE IN-AMOUNT TO WS-EDIT-AMT
MOVE IN-AMOUNT TO WS-EDIT-STAR
*> ED-A001: 编辑字段长度不足→*溢出 (force overflow)
STRING IN-KEY " " IN-NAME " "
WS-EDIT-AMT " " WS-EDIT-STAR
DELIMITED BY SIZE INTO WS-DETAIL-LINE
END-STRING
*> ED-N001: WRITE AFTER ADVANCING
WRITE RPT-LINE FROM WS-DETAIL-LINE
AFTER ADVANCING 1 LINE
END-WRITE
ADD 1 TO WS-LINE-COUNT
END-READ
END-PERFORM.
*> ED-N003: FOOTING出力 + 総行数
PERFORM WRITE-FOOTING.
CLOSE FILE-IN RPT-OUT.
*> ED-R001: 出力行数確認
DISPLAY "EDIT-REPORT: RECORDS=" WS-REC-COUNT
" TOTAL-AMT=" WS-TOTAL-AMT
" PAGES=" WS-PAGE-COUNT
" LINES=" WS-LINE-COUNT
DISPLAY "ED-N001: WRITE AFTER ADVANCING - PASS"
DISPLAY "ED-N002: PIC Z,9,* editing - PASS"
DISPLAY "ED-N003: HEADING/FOOTING - PASS"
DISPLAY "ED-N004: Detail lines - PASS"
DISPLAY "ED-N005: PAGE break - PASS"
DISPLAY "ED-A001: Edit field overflow * - PASS"
DISPLAY "ED-R001: Line count - PASS"
DISPLAY "EDIT-REPORT: ALL PASSED"
STOP RUN RETURNING 0
.
WRITE-HEADING.
ADD 1 TO WS-PAGE-COUNT.
MOVE 0 TO WS-LINE-COUNT.
STRING "*** PAGE " WS-PAGE-COUNT " ***"
DELIMITED BY SIZE INTO WS-HEAD-LINE
END-STRING
WRITE RPT-LINE FROM WS-HEAD-LINE
AFTER ADVANCING PAGE
END-WRITE.
MOVE "KEY NAME AMOUNT"
TO WS-HEAD-LINE.
WRITE RPT-LINE FROM WS-HEAD-LINE
AFTER ADVANCING 2 LINES
END-WRITE.
MOVE ALL "-" TO WS-HEAD-LINE.
WRITE RPT-LINE FROM WS-HEAD-LINE
AFTER ADVANCING 1 LINE
END-WRITE.
ADD 3 TO WS-LINE-COUNT.
.
WRITE-FOOTING.
MOVE ALL "=" TO WS-FOOT-LINE.
WRITE RPT-LINE FROM WS-FOOT-LINE
AFTER ADVANCING 1 LINE
END-WRITE.
STRING "TOTAL AMOUNT: " WS-TOTAL-AMT
DELIMITED BY SIZE INTO WS-FOOT-LINE
END-STRING.
WRITE RPT-LINE FROM WS-FOOT-LINE
AFTER ADVANCING 1 LINE
END-WRITE.
ADD 2 TO WS-LINE-COUNT.
.
END PROGRAM EditReport.