-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathacct-processing.cbl
More file actions
100 lines (89 loc) · 3.15 KB
/
acct-processing.cbl
File metadata and controls
100 lines (89 loc) · 3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
IDENTIFICATION DIVISION.
PROGRAM-ID. ACCT-PROC.
AUTHOR. LEGACY-SYSTEMS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ACCT-IN ASSIGN TO 'ACCT-IN.DAT'
ORGANIZATION IS SEQUENTIAL.
SELECT ACCT-OUT ASSIGN TO 'ACCT-OUT.DAT'
ORGANIZATION IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ACCT-IN.
01 ACCT-IN-REC.
05 AI-CUST-ID PIC 9(10).
05 AI-LAST-NAME PIC X(20).
05 AI-FIRST-NAME PIC X(15).
05 AI-BALANCE PIC S9(11)V99 COMP-3.
05 AI-ACCT-TYPE PIC X(2).
88 TYPE-SAVINGS VALUE 'SA'.
88 TYPE-CHECKING VALUE 'CH'.
05 AI-STATUS PIC X.
88 STATUS-ACTIVE VALUE 'A'.
88 STATUS-CLOSED VALUE 'C'.
FD ACCT-OUT.
01 ACCT-OUT-REC.
05 AO-CUST-ID PIC 9(10).
05 AO-NEW-BALANCE PIC S9(11)V99 COMP-3.
05 AO-INTEREST PIC S9(7)V99 COMP-3.
05 AO-RETURN-CODE PIC XX.
WORKING-STORAGE SECTION.
01 WS-COUNTERS.
05 WS-TOTAL-READ PIC 9(7) VALUE ZEROS.
05 WS-TOTAL-PROC PIC 9(7) VALUE ZEROS.
05 WS-TOTAL-ERR PIC 9(7) VALUE ZEROS.
01 WS-INTEREST-RATE PIC V9(4) VALUE .0325.
01 WS-INTEREST-AMT PIC S9(11)V99 COMP-3.
01 WS-EOF PIC X VALUE 'N'.
88 END-OF-FILE VALUE 'Y'.
01 WS-MIN-BALANCE PIC 9(9)V99 VALUE 100.00.
PROCEDURE DIVISION.
0000-MAIN.
PERFORM 1000-OPEN-FILES.
PERFORM 2000-PROCESS-ACCOUNTS
UNTIL END-OF-FILE.
PERFORM 3000-CLOSE-FILES.
STOP RUN.
1000-OPEN-FILES.
OPEN INPUT ACCT-IN.
OPEN OUTPUT ACCT-OUT.
READ ACCT-IN
AT END MOVE 'Y' TO WS-EOF.
2000-PROCESS-ACCOUNTS.
ADD 1 TO WS-TOTAL-READ.
IF STATUS-ACTIVE
PERFORM 2100-CALC-INTEREST
PERFORM 2200-VALIDATE-BALANCE
PERFORM 2300-WRITE-OUTPUT
ADD 1 TO WS-TOTAL-PROC
ELSE
MOVE 'SK' TO AO-RETURN-CODE
ADD 1 TO WS-TOTAL-ERR
END-IF.
READ ACCT-IN
AT END MOVE 'Y' TO WS-EOF.
2100-CALC-INTEREST.
IF TYPE-SAVINGS
COMPUTE WS-INTEREST-AMT =
AI-BALANCE * WS-INTEREST-RATE
ELSE
MOVE ZEROS TO WS-INTEREST-AMT
END-IF.
2200-VALIDATE-BALANCE.
IF AI-BALANCE < WS-MIN-BALANCE
MOVE 'LB' TO AO-RETURN-CODE
ELSE
MOVE 'OK' TO AO-RETURN-CODE
END-IF.
2300-WRITE-OUTPUT.
MOVE AI-CUST-ID TO AO-CUST-ID.
COMPUTE AO-NEW-BALANCE =
AI-BALANCE + WS-INTEREST-AMT.
MOVE WS-INTEREST-AMT TO AO-INTEREST.
WRITE ACCT-OUT-REC.
3000-CLOSE-FILES.
DISPLAY 'RECORDS READ: ' WS-TOTAL-READ.
DISPLAY 'RECORDS PROCESSED: ' WS-TOTAL-PROC.
DISPLAY 'RECORDS SKIPPED: ' WS-TOTAL-ERR.
CLOSE ACCT-IN ACCT-OUT.