You are on page 1of 9

IDENTIFICATION DIVISION.

PROGRAM-ID.
MCASE07C.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE
ASSIGN TO CUSTFILE
ORGANIZATION INDEXED
RECORD KEY CUST-ACCT
FILE STATUS CUST-STAT.
SELECT TRANFILE
ASSIGN TO TRANFILE
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS TRAN-SEQ
ALTERNATE RECORD KEY IS TRAN-ACCT
WITH DUPLICATES
FILE STATUS FS-TRAN.
SELECT PRINT-FILE ASSIGN TO PRNTFILE.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-REC.
03 CUST-ACCT
PIC X(5).
03 CUST-LAST-NAME
PIC X(10).
03 CUST-FIRST-NAME
PIC X(10).
03 CUST-HOME-ADDRESS
PIC X(20).
03 CUST-DOLT
PIC 9(8).
03 CUST-BALANCE
PIC 9(7)V99 COMP-3.
FD TRANFILE.
01 TRANREC.
03 TRAN-SEQ
PIC X(4).
03 TRAN-ACCT
PIC X(5).
03 TRAN-DATE
PIC 9(8).
03 TRAN-CODE
PIC X(3).
03 TRAN-AMOUNT
PIC 9(7)V99 COMP-3.
FD PRINT-FILE
LABEL RECORDS ARE OMITTED
RECORDING MODE IS F
RECORD CONTAINS 110 CHARACTERS
DATA RECORD IS PRINT-REC.
01 PRINT-REC
PIC X(110).
WORKING-STORAGE SECTION.
01 CUST-STAT
PIC XX.
88 CUST-OPEN-OK
VALUES '00'.
88 CUST-CLOS-OK
VALUES '00'.
88 CUST-READ-OK
VALUES '00' '10'.
01 FS-TRAN
PIC XX.
88 OPEN-OK
VALUE '00'.
88 READ-OK
VALUE '00', '02', '10'.

01 EVALUATE-CODE
PIC X(3).
88 DEPOSIT-CODE
VALUE '100'.
88 CREDIT-CODE
VALUE '200'.
88 WITHDRAW-CODE
VALUE '500'.
88 DEBIT-CODE
VALUE '600'.
01 WORK-AREA.
03 ACCT-SW
PIC 9.
03 REM
PIC 999.
03 TRAN-CTR
PIC 99 VALUE 0.
03 MAX-PAGE
PIC 99.
03 CUST-EOF
PIC X.
03 TRAN-EOF
PIC X.
03 PAGE-CTR
PIC 99.
03 DB-TRAN-CTR
PIC 9999.
03 CR-TRAN-CTR
PIC 9999.
03 DB-AMT-TOTAL
PIC 9(7)V99.
03 CR-AMT-TOTAL
PIC 9(7)V99.
03 RUNNING-BAL
PIC 9(7)V99.
03 TOTAL-BALANCE
PIC 9(7)V99.
03 REM-BALANCE
PIC 9(7)V99.
03 TRAN-PRNTD-CTR
PIC 99.
03 CODE-DESC
PIC X(10).
03 SV-CUST-ACCT
PIC X(5).
03 SV-TRAN-DATE
PIC 9(8).
03 SV-TRAN-CODE
PIC X(3).
03 SV-TRAN-SEQ
PIC X(4).
03 SV-TRAN-AMT
PIC 9(7)V99 COMP-3.
01 ARRAY-AREA.
03 A-MONTH
PIC X(36) VALUE
'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'.
03 MONTH-DATE REDEFINES A-MONTH OCCURS 12 TIMES.
05 MONTH-MM
PIC X(3).
01 W-CURRENT-DATE.
03 CURRENT-YEAR
PIC 9(4).
03 CURRENT-MONTH
PIC 9(2).
03 CURRENT-DAY
PIC 9(2).
01 PRINT-AREA.
03 HDG-A.
05 FILLER
PIC X(30) VALUE SPACES.
05 FILLER
PIC X(23) VALUE
'ACCENTURE - HOSTCENTRIC'.
05 FILLER
PIC X(20) VALUE SPACES.
05 FILLER
PIC X(4) VALUE 'PAGE'.
05 FILLER
PIC X(2) VALUE SPACES.
05 P-PAGE
PIC 99.
05 FILLER
PIC X(2) VALUE SPACES.
05 FILLER
PIC X(2) VALUE 'OF'.
05 FILLER
PIC X(2) VALUE SPACES.
05 P-MAX-PAGE
PIC 99.
03 HDG-B.

05 FILLER
PIC X(31) VALUE SPACES.
05 FILLER
PIC X(21) VALUE
'STATEMENT OF ACCOUNTS'.
03 DATE-COLHDG.
05 FILLER
PIC X(32) VALUE SPACES.
05 FILLER
PIC X(5) VALUE 'AS OF'.
05 FILLER
PIC X(2) VALUE SPACES.
05 P-MONTH
PIC X(3).
05 FILLER
PIC X(1) VALUE SPACES.
05 P-DAY
PIC 99.
05 FILLER
PIC X(1) VALUE ','.
05 FILLER
PIC X(1) VALUE SPACES.
05 P-YEAR
PIC 9(4).
03 NAME-STRING-LINE.
05 STRNG-DESTINATION
PIC X(30).
03 ADDRESS-LINE.
05 P-CUST-HOMEADD
PIC X(20).
03 COLHDG.
05 FILLER
PIC X(4) VALUE 'DATE'.
05 FILLER
PIC X(10) VALUE SPACES.
05 FILLER
PIC X(11) VALUE 'DESCRIPTION'.
05 FILLER
PIC X(20) VALUE SPACES.
05 FILLER
PIC X(5) VALUE 'DEBIT'.
05 FILLER
PIC X(10) VALUE SPACES.
05 FILLER
PIC X(6) VALUE 'CREDIT'.
05 FILLER
PIC X(10) VALUE SPACES.
05 FILLER
PIC X(7) VALUE 'BALANCE'.
03 DETAIL-LINE.
05 P-TRAN-DATE
PIC 9999/99/99.
05 FILLER
PIC X(5) VALUE SPACES.
05 P-TRAN-CODE
PIC X(10).
05 FILLER
PIC X(08) VALUE SPACES.
05 P-DEBIT
PIC Z,ZZZ,ZZZ.ZZ.
05 FILLER
PIC X(08) VALUE SPACES.
05 P-CREDIT
PIC Z,ZZZ,ZZZ,ZZ.
05 FILLER
PIC X(08) VALUE SPACES.
05 P-BALANCE
PIC Z,ZZZ,ZZZ,ZZ.
03 TOTAL-LINE.
05 FILLER
PIC X(6) VALUE 'TOTAL:'.
05 FILLER
PIC X(2) VALUE SPACES.
05 FILLER
PIC X(5) VALUE '(DR ='.
05 P-DB-COUNT
PIC 9999.
05 FILLER
PIC X(2) VALUE SPACES.
05 FILLER
PIC X(4) VALUE 'CR ='.
05 P-CR-COUNT
PIC 9999.
05 FILLER
PIC X(1) VALUE ')'.
05 FILLER
PIC X(5) VALUE SPACES.
05 P-TOTAL-DEBIT
PIC Z,ZZZ,ZZZ.ZZ.
05 FILLER
PIC X(06) VALUE SPACES.
05 P-TOTAL-CREDIT
PIC Z,ZZZ,ZZZ.ZZ.

05 FILLER
PIC X(06) VALUE SPACES.
05 P-TOTAL-BALANCE
PIC Z,ZZZ,ZZZ.ZZ.
03 NO-RECORD-LINE.
05 FILLER
PIC X(30) VALUE SPACES.
05 FILLER
PIC X(28) VALUE
'***** NO RECORDS FOUND *****'.
PROCEDURE DIVISION.
A100-MAINLINE.
PERFORM B100-HOUSEKEEPING
PERFORM B200-PROCESS
UNTIL CUST-EOF = 'Y'
PERFORM B900-WRAP-UP
PERFORM Z900-END-PROGRAM.
B100-HOUSEKEEPING.
INITIALIZE WORK-AREA
PERFORM B110-CUST-STATUS
PERFORM B120-TRAN-STATUS
OPEN OUTPUT PRINT-FILE
PERFORM B130-READ-CUST
PERFORM B140-READ-TRAN
MOVE TRAN-CODE TO SV-TRAN-CODE.
B110-CUST-STATUS.
OPEN INPUT CUSTOMER-FILE
DISPLAY 'CUSTFILE OPEN STATUS ' CUST-STAT
IF CUST-OPEN-OK
CONTINUE
ELSE
DISPLAY 'CUSTFILE OPEN ERROR ' CUST-STAT
PERFORM Y900-ERROR-EXIT
END-IF
MOVE 'N' TO CUST-EOF.
B120-TRAN-STATUS.
OPEN INPUT TRANFILE
DISPLAY 'TRANFILE OPEN STATUS ' FS-TRAN
IF NOT OPEN-OK
DISPLAY 'TRANFILE OPEN ERROR ' FS-TRAN
PERFORM Y900-ERROR-EXIT
END-IF
MOVE CUST-ACCT TO TRAN-ACCT.
B130-READ-CUST.
DISPLAY 'READ CUSTOMER'
READ CUSTOMER-FILE
AT END
MOVE 'Y' TO CUST-EOF
END-READ
MOVE CUST-ACCT TO TRAN-ACCT
MOVE CUST-ACCT TO SV-CUST-ACCT
DISPLAY 'READ CUST STATUS ' CUST-STAT
IF CUST-READ-OK
CONTINUE

ELSE
DISPLAY 'CUSTFILE READ ERROR ' CUST-STAT
PERFORM Y900-ERROR-EXIT
END-IF.
B140-READ-TRAN.
DISPLAY 'READ TRANFILE'
READ TRANFILE NEXT RECORD
AT END MOVE 'Y' TO TRAN-EOF
END-READ
IF CUST-ACCT = TRAN-ACCT
DISPLAY 'TRAN READ NEXT STATUS ' FS-TRAN
END-IF
DISPLAY 'TRAN NO:' TRAN-ACCT
IF NOT READ-OK
*
PERFORM B150-NO-REC-FOUND
DISPLAY 'TRAN UNEXPECTED STATUS ' FS-TRAN
PERFORM Y900-ERROR-EXIT
END-IF.
B150-NO-REC-FOUND.
PERFORM C190-HEADINGS
MOVE SPACES TO PRINT-REC
WRITE PRINT-REC
WRITE PRINT-REC FROM NO-RECORD-LINE
MOVE SPACES TO PRINT-REC
WRITE PRINT-REC
MOVE 0 TO DB-TRAN-CTR
MOVE 0 TO CR-TRAN-CTR
MOVE 0 TO DB-AMT-TOTAL
MOVE 0 TO CR-AMT-TOTAL
MOVE CUST-BALANCE TO TOTAL-BALANCE
PERFORM C200-UPDATE-TOTAL-VAR.
B200-PROCESS.
DISPLAY CUST-ACCT ' '
CUST-LAST-NAME ' '
CUST-FIRST-NAME ' '
CUST-HOME-ADDRESS ' '
CUST-DOLT ' '
CUST-BALANCE
PERFORM C100-CALC-MAX-PAGE
PERFORM C120-PRINT-STATEMENT
PERFORM B130-READ-CUST.
PERFORM B130-READ-tran.
C100-CALC-MAX-PAGE.
DISPLAY 'CALC MAX PAGE'
MOVE 0 TO TRAN-CTR
MOVE CUST-ACCT TO TRAN-ACCT
START TRANFILE
KEY = TRAN-ACCT
INVALID KEY

DISPLAY 'NO TRANSACTIONS FOR ACCOUNT' TRAN-ACCT


NOT INVALID KEY
MOVE 'N' TO TRAN-EOF
PERFORM C110-COUNT-TRAN-LOOP
DISPLAY 'NO. OF RECORDS PROCESSED:' TRAN-CTR
END-START
IF TRAN-CTR > 0
DIVIDE TRAN-CTR BY 8 GIVING MAX-PAGE REMAINDER REM
IF REM > 0
ADD 1 TO MAX-PAGE
END-IF
ELSE
MOVE 1 TO MAX-PAGE
END-IF.
C110-COUNT-TRAN-LOOP.
DISPLAY 'CNT TRAN LOOP'
MOVE 'N' TO TRAN-EOF
PERFORM UNTIL TRAN-EOF = 'Y'
PERFORM B140-READ-TRAN
IF TRAN-EOF = 'N' AND TRAN-ACCT = CUST-ACCT
DISPLAY 'PROCESSING '
TRAN-SEQ ' ' TRAN-ACCT
ADD 1 TO TRAN-CTR
END-IF
END-PERFORM.
C120-PRINT-STATEMENT.
DISPLAY 'PRINT STATEMENT'
MOVE 0 TO PAGE-CTR
PERFORM C190-HEADINGS
IF TRAN-CTR > 0
MOVE CUST-ACCT TO TRAN-ACCT
START TRANFILE
INVALID KEY
DISPLAY 'UNEXPECTED ERROR'
PERFORM Y900-ERROR-EXIT
NOT INVALID KEY
PERFORM C125-PRINT-TRAN-LOOP
END-START
ELSE
DISPLAY 'NO TRANSACTIONS'
END-IF
PERFORM C200-UPDATE-TOTAL-VAR
MOVE SPACES TO PRINT-REC
WRITE PRINT-REC
WRITE PRINT-REC FROM TOTAL-LINE AFTER 1.
C125-PRINT-TRAN-LOOP.
DISPLAY 'PRINT TRAN LOOP'
MOVE CUST-BALANCE TO RUNNING-BAL
MOVE 'N' TO TRAN-EOF

PERFORM UNTIL TRAN-EOF = 'Y'


PERFORM B140-READ-TRAN
DISPLAY 'CUST1:' CUST-ACCT
IF TRAN-EOF = 'N' AND CUST-ACCT = TRAN-ACCT
PERFORM C130-PRINT-DATA
END-IF
END-PERFORM.
C130-PRINT-DATA.
DISPLAY 'PRINT DATA'
IF TRAN-PRNTD-CTR > 8
PERFORM C190-HEADINGS
END-IF
MOVE TRAN-CODE TO EVALUATE-CODE
PERFORM C140-EVALUATE-CODE
PERFORM C145-MOVE-TO-PRINT
WRITE PRINT-REC FROM DETAIL-LINE AFTER 1
ADD 1 TO TRAN-PRNTD-CTR.
*
IF CUST-ACCT NOT = TRAN-ACCT
*
PERFORM C200-UPDATE-TOTAL-VAR
*
END-IF.
C140-EVALUATE-CODE.
EVALUATE TRUE
WHEN DEPOSIT-CODE
ADD 1 TO DB-TRAN-CTR
MOVE 'DEPOSIT' TO CODE-DESC
ADD TRAN-AMOUNT TO DB-AMT-TOTAL
ADD TRAN-AMOUNT TO RUNNING-BAL
GIVING REM-BALANCE
ADD REM-BALANCE TO TOTAL-BALANCE
MOVE TRAN-AMOUNT TO P-CREDIT
WHEN CREDIT-CODE
ADD 1 TO DB-TRAN-CTR
MOVE 'CREDIT' TO CODE-DESC
ADD TRAN-AMOUNT TO DB-AMT-TOTAL
ADD TRAN-AMOUNT TO RUNNING-BAL
GIVING REM-BALANCE
ADD REM-BALANCE TO TOTAL-BALANCE
MOVE TRAN-AMOUNT TO P-CREDIT
WHEN WITHDRAW-CODE
ADD 1 TO CR-TRAN-CTR
MOVE 'WITHDRAWAL' TO CODE-DESC
ADD TRAN-AMOUNT TO CR-AMT-TOTAL
SUBTRACT TRAN-AMOUNT FROM RUNNING-BAL
GIVING REM-BALANCE
ADD REM-BALANCE TO TOTAL-BALANCE
MOVE TRAN-AMOUNT TO P-DEBIT
WHEN DEBIT-CODE
ADD 1 TO CR-TRAN-CTR
MOVE 'DEBIT' TO CODE-DESC
ADD TRAN-AMOUNT TO CR-AMT-TOTAL

SUBTRACT TRAN-AMOUNT FROM RUNNING-BAL


GIVING REM-BALANCE
DISPLAY 'REM-BAL' REM-BALANCE
ADD REM-BALANCE TO TOTAL-BALANCE
MOVE TRAN-AMOUNT TO P-DEBIT
END-EVALUATE.
C145-MOVE-TO-PRINT.
* ARRANGE TRAN-DATE TO MMDDYYYY
MOVE TRAN-DATE TO P-TRAN-DATE
MOVE CODE-DESC TO P-TRAN-CODE
MOVE REM-BALANCE TO P-BALANCE.
C190-HEADINGS.
ADD 1 TO PAGE-CTR
MOVE PAGE-CTR TO P-PAGE
MOVE MAX-PAGE TO P-MAX-PAGE
WRITE PRINT-REC FROM HDG-A AFTER PAGE
MOVE SPACES TO PRINT-REC
WRITE PRINT-REC
WRITE PRINT-REC FROM HDG-B AFTER 1
PERFORM C191-DATE-ARRAY
WRITE PRINT-REC FROM DATE-COLHDG
MOVE SPACES TO PRINT-REC
WRITE PRINT-REC
PERFORM C192-NAME-STRING
WRITE PRINT-REC FROM COLHDG AFTER 1
MOVE SPACES TO PRINT-REC
WRITE PRINT-REC
*
MOVE 10 TO LINE-CTR
MOVE 0 TO TRAN-PRNTD-CTR.
C191-DATE-ARRAY.
MOVE FUNCTION CURRENT-DATE TO W-CURRENT-DATE
MOVE MONTH-MM(CURRENT-MONTH) TO P-MONTH
MOVE CURRENT-YEAR TO P-YEAR
MOVE CURRENT-DAY TO P-DAY.
C192-NAME-STRING.
MOVE SPACES TO STRNG-DESTINATION
STRING
CUST-LAST-NAME DELIMITED BY ' '
', '
DELIMITED BY SIZE
CUST-FIRST-NAME DELIMITED BY ' '
'-'
DELIMITED BY SIZE
TRAN-SEQ
DELIMITED BY ' '
INTO STRNG-DESTINATION
END-STRING
MOVE CUST-HOME-ADDRESS TO P-CUST-HOMEADD
WRITE PRINT-REC FROM NAME-STRING-LINE AFTER 1
WRITE PRINT-REC FROM ADDRESS-LINE AFTER 1.
C200-UPDATE-TOTAL-VAR.
MOVE DB-TRAN-CTR TO P-DB-COUNT
MOVE CR-TRAN-CTR TO P-CR-COUNT

MOVE DB-AMT-TOTAL TO P-TOTAL-DEBIT


MOVE CR-AMT-TOTAL TO P-TOTAL-CREDIT
MOVE TOTAL-BALANCE TO P-TOTAL-BALANCE.
*
MOVE SPACES TO PRINT-REC
*
WRITE PRINT-REC
*
WRITE PRINT-REC FROM TOTAL-LINE AFTER 1.
B900-WRAP-UP.
CLOSE CUSTOMER-FILE
DISPLAY 'CUSTFILE CLOSE STATUS ' CUST-STAT
IF CUST-CLOS-OK
CONTINUE
ELSE
DISPLAY 'CUSTFILE CLOSE ERROR ' CUST-STAT
PERFORM Y900-ERROR-EXIT
END-IF
CLOSE TRANFILE
DISPLAY 'TRANFILE CLOSE STATUS ' FS-TRAN
CLOSE PRINT-FILE.
Y900-ERROR-EXIT.
PERFORM Z900-END-PROGRAM.
Z900-END-PROGRAM.
STOP RUN.

You might also like