Initial commit: COBOL+JCL credit card billing system with COMP-3, OCCURS, COPY REPLACING, INSPECT, and JCL runner
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. CRDRPT.
|
||||
|
||||
* GENERATE MONTHLY STATEMENT AND SUMMARY REPORT
|
||||
* INPUT: BILLING RESULT FROM CRDCALC
|
||||
* OUTPUT: MONTHLY STATEMENT (PER CARD)
|
||||
* SUMMARY REPORT (AGGREGATE)
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT CALC-IN ASSIGN TO "BILLING"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT STMT-OUT ASSIGN TO "STMT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT SUMM-OUT ASSIGN TO "SUMMARY"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD CALC-IN.
|
||||
01 CALC-LINE PIC X(200).
|
||||
|
||||
FD STMT-OUT.
|
||||
01 STMT-LINE PIC X(200).
|
||||
|
||||
FD SUMM-OUT.
|
||||
01 SUMM-LINE PIC X(200).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-SWITCHES.
|
||||
05 WS-EOF-CALC PIC X VALUE 'N'.
|
||||
88 WS-END-OF-CALC VALUE 'Y'.
|
||||
|
||||
01 WS-COUNTERS.
|
||||
05 WS-LINE-COUNT PIC 9(5) VALUE 0.
|
||||
05 WS-CARD-COUNT PIC 9(5) VALUE 0.
|
||||
05 WS-DETAIL-COUNT PIC 9(5) VALUE 0.
|
||||
|
||||
01 WS-REPORT-DATE.
|
||||
05 WS-RPT-YYYY PIC 9(4).
|
||||
05 WS-RPT-MM PIC 9(2).
|
||||
05 WS-RPT-DD PIC 9(2).
|
||||
|
||||
01 WS-HEADER1.
|
||||
05 WS-H1-DATE PIC X(8).
|
||||
05 WS-H1-SPACE PIC X(5) VALUE SPACES.
|
||||
05 WS-H1-TITLE PIC X(30)
|
||||
VALUE 'MONTHLY CREDIT CARD STATEMENT'.
|
||||
|
||||
01 WS-HEADER2.
|
||||
05 WS-H2-FILLER PIC X(50) VALUE ALL '-'.
|
||||
|
||||
01 WS-DETAIL-LINE.
|
||||
05 WS-DL-CARD PIC X(16).
|
||||
05 WS-DL-SP1 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-TYPE PIC X(8).
|
||||
05 WS-DL-SP2 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-AMOUNT PIC -(9)9.99.
|
||||
05 WS-DL-SP3 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-INTEREST PIC -(7)9.99.
|
||||
05 WS-DL-SP4 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-FEE PIC -(7)9.99.
|
||||
05 WS-DL-SP5 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-DESC PIC X(30).
|
||||
|
||||
01 WS-SUMMARY-LINE.
|
||||
05 WS-SL-CARD PIC X(16).
|
||||
05 WS-SL-SP1 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-TOTAL PIC -(9)9.99.
|
||||
05 WS-SL-SP2 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-INT PIC -(9)9.99.
|
||||
05 WS-SL-SP3 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-FEE PIC -(9)9.99.
|
||||
05 WS-SL-SP4 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-GRAND PIC -(9)9.99.
|
||||
05 WS-SL-SP5 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-TXCNT PIC Z(4)9.
|
||||
|
||||
01 WS-TRAILER.
|
||||
05 WS-TR-TOTAL-CARDS PIC Z(5)9.
|
||||
05 WS-TR-SP1 PIC X(5) VALUE SPACES.
|
||||
05 WS-TR-TOTAL-LINES PIC Z(5)9.
|
||||
05 WS-TR-SP2 PIC X(5) VALUE SPACES.
|
||||
05 WS-TR-MSG PIC X(20)
|
||||
VALUE 'END OF REPORT'.
|
||||
|
||||
* PARSE FIELDS FROM INPUT LINE
|
||||
01 WS-PARSE.
|
||||
05 WS-P-CARD PIC 9(16).
|
||||
05 WS-P-TYPE PIC X.
|
||||
05 WS-P-AMOUNT PIC S9(9)V99.
|
||||
05 WS-P-INTEREST PIC S9(7)V99.
|
||||
05 WS-P-FEE PIC S9(7)V99.
|
||||
05 WS-P-DESC PIC X(30).
|
||||
05 WS-P-IS-SUMMARY PIC X VALUE 'N'.
|
||||
88 WS-P-SUMMARY-LINE VALUE 'Y'.
|
||||
|
||||
05 WS-PARSE-REMAIN PIC X(150).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN INPUT CALC-IN
|
||||
OUTPUT STMT-OUT
|
||||
OUTPUT SUMM-OUT.
|
||||
|
||||
ACCEPT WS-REPORT-DATE FROM DATE YYYYMMDD.
|
||||
MOVE WS-REPORT-DATE(1:4) TO WS-RPT-YYYY.
|
||||
MOVE WS-REPORT-DATE(5:2) TO WS-RPT-MM.
|
||||
MOVE WS-REPORT-DATE(7:2) TO WS-RPT-DD.
|
||||
MOVE WS-REPORT-DATE TO WS-H1-DATE.
|
||||
|
||||
PERFORM 1000-WRITE-HEADER.
|
||||
|
||||
MOVE 0 TO WS-CARD-COUNT WS-DETAIL-COUNT.
|
||||
|
||||
PERFORM 2000-PROCESS-CALC UNTIL WS-END-OF-CALC.
|
||||
|
||||
PERFORM 3000-WRITE-TRAILER.
|
||||
|
||||
CLOSE CALC-IN STMT-OUT SUMM-OUT.
|
||||
DISPLAY 'CRDRPT: ' WS-CARD-COUNT ' CARDS, '
|
||||
WS-DETAIL-COUNT ' LINES'.
|
||||
GOBACK.
|
||||
|
||||
1000-WRITE-HEADER.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE FROM WS-HEADER1.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE FROM WS-HEADER2.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
|
||||
2000-PROCESS-CALC.
|
||||
READ CALC-IN
|
||||
AT END SET WS-END-OF-CALC TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-LINE-COUNT
|
||||
PERFORM 2100-PARSE-LINE
|
||||
END-READ.
|
||||
|
||||
2100-PARSE-LINE.
|
||||
* CHECK IF THIS IS A GRAND TOTAL LINE
|
||||
IF CALC-LINE(1:11) = 'GRAND TOTAL'
|
||||
MOVE CALC-LINE TO SUMM-LINE
|
||||
WRITE SUMM-LINE
|
||||
EXIT PARAGRAPH
|
||||
END-IF.
|
||||
|
||||
* CHECK IF THIS IS A CARD SUMMARY LINE
|
||||
MOVE CALC-LINE TO WS-PARSE-REMAIN.
|
||||
UNSTRING WS-PARSE-REMAIN DELIMITED BY SPACE
|
||||
INTO WS-P-CARD WS-P-AMOUNT WS-P-INTEREST
|
||||
WS-P-FEE WS-P-AMOUNT WS-P-DESC
|
||||
END-UNSTRING.
|
||||
|
||||
* IF FIRST FIELD IS 16-DIGIT NUMBER AND HAS TX-COUNT
|
||||
* AT END, IT'S SUMMARY; OTHERWISE DETAIL
|
||||
IF CALC-LINE(18:1) NOT = ' '
|
||||
PERFORM 2200-WRITE-DETAIL
|
||||
ELSE
|
||||
PERFORM 2300-WRITE-CARD-SUMMARY.
|
||||
|
||||
2200-WRITE-DETAIL.
|
||||
MOVE CALC-LINE TO WS-DETAIL-LINE.
|
||||
MOVE WS-DETAIL-LINE TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
ADD 1 TO WS-DETAIL-COUNT.
|
||||
|
||||
2300-WRITE-CARD-SUMMARY.
|
||||
MOVE CALC-LINE TO WS-SUMMARY-LINE.
|
||||
MOVE WS-SUMMARY-LINE TO SUMM-LINE.
|
||||
WRITE SUMM-LINE.
|
||||
MOVE WS-SUMMARY-LINE TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
ADD 1 TO WS-CARD-COUNT.
|
||||
|
||||
3000-WRITE-TRAILER.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
MOVE WS-CARD-COUNT TO WS-TR-TOTAL-CARDS.
|
||||
MOVE WS-LINE-COUNT TO WS-TR-TOTAL-LINES.
|
||||
WRITE STMT-LINE FROM WS-TRAILER.
|
||||
|
||||
MOVE WS-TRAILER TO SUMM-LINE.
|
||||
WRITE SUMM-LINE.
|
||||
Reference in New Issue
Block a user