MainframeMaster

COBOL Tutorial

COBOL PARAGRAPH

PARAGRAPH structure in COBOL represents sophisticated program organization and comprehensive modular programming capabilities within enterprise development environments, providing advanced code structuring mechanisms for procedure organization, enhanced flow control features for program execution, and intelligent modularity patterns that enable systematic code organization, optimal program maintainability workflows, and structured programming requirements while maintaining code clarity, ensuring proper execution flow, and enabling scalable program architectures across business applications requiring organized code structure, reusable components, and reliable program flow throughout sophisticated enterprise programming scenarios.

Basic PARAGRAPH Structure

Fundamental PARAGRAPH Syntax
cobol
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
PROCEDURE DIVISION. *> Basic paragraph structure MAIN-PROCESSING. DISPLAY "Starting main processing" PERFORM INITIALIZE-PROGRAM PERFORM PROCESS-DATA PERFORM CLEANUP-PROGRAM STOP RUN. *> Initialization paragraph INITIALIZE-PROGRAM. DISPLAY "Initializing program variables..." MOVE ZEROS TO WS-COUNTERS MOVE SPACES TO WS-WORK-AREAS OPEN INPUT CUSTOMER-FILE OPEN OUTPUT REPORT-FILE. *> Data processing paragraph PROCESS-DATA. DISPLAY "Processing customer data..." PERFORM READ-CUSTOMER-RECORD PERFORM UNTIL EOF-FLAG = 'Y' PERFORM VALIDATE-CUSTOMER-DATA PERFORM CALCULATE-COMMISSION PERFORM WRITE-REPORT-LINE PERFORM READ-CUSTOMER-RECORD END-PERFORM. *> Cleanup operations paragraph CLEANUP-PROGRAM. DISPLAY "Cleaning up resources..." CLOSE CUSTOMER-FILE CLOSE REPORT-FILE DISPLAY "Processing complete". *> Data validation paragraph VALIDATE-CUSTOMER-DATA. IF CUSTOMER-ID = SPACES DISPLAY "Error: Missing customer ID" ADD 1 TO ERROR-COUNT END-IF IF CUSTOMER-NAME = SPACES DISPLAY "Error: Missing customer name" ADD 1 TO ERROR-COUNT END-IF IF SALES-AMOUNT NOT NUMERIC DISPLAY "Error: Invalid sales amount" ADD 1 TO ERROR-COUNT END-IF. *> Business calculation paragraph CALCULATE-COMMISSION. IF SALES-AMOUNT > 10000 COMPUTE COMMISSION = SALES-AMOUNT * 0.05 ELSE IF SALES-AMOUNT > 5000 COMPUTE COMMISSION = SALES-AMOUNT * 0.03 ELSE COMPUTE COMMISSION = SALES-AMOUNT * 0.02 END-IF END-IF ADD COMMISSION TO TOTAL-COMMISSION. *> File I/O paragraph READ-CUSTOMER-RECORD. READ CUSTOMER-FILE AT END MOVE 'Y' TO EOF-FLAG NOT AT END ADD 1 TO RECORD-COUNT END-READ. *> Report generation paragraph WRITE-REPORT-LINE. MOVE CUSTOMER-ID TO REPORT-CUSTOMER-ID MOVE CUSTOMER-NAME TO REPORT-CUSTOMER-NAME MOVE SALES-AMOUNT TO REPORT-SALES-AMOUNT MOVE COMMISSION TO REPORT-COMMISSION WRITE REPORT-RECORD FROM REPORT-LINE ADD 1 TO LINES-WRITTEN
Code Organization
Modular Programming
Flow Control

Advanced PARAGRAPH Techniques

Complex PARAGRAPH Organization
cobol
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
*> Hierarchical paragraph organization *> Level 0 - Main control EMPLOYEE-PAYROLL-SYSTEM. PERFORM SYSTEM-INITIALIZATION PERFORM PAYROLL-PROCESSING PERFORM SYSTEM-TERMINATION. *> Level 1 - Major functional areas SYSTEM-INITIALIZATION. PERFORM OPEN-FILES PERFORM LOAD-PARAMETERS PERFORM INITIALIZE-COUNTERS PERFORM DISPLAY-STARTUP-MESSAGE. PAYROLL-PROCESSING. PERFORM PROCESS-EMPLOYEE-RECORDS PERFORM GENERATE-SUMMARY-REPORTS PERFORM CALCULATE-TOTALS. SYSTEM-TERMINATION. PERFORM CLOSE-FILES PERFORM DISPLAY-STATISTICS PERFORM CLEANUP-TEMPORARY-FILES. *> Level 2 - Detailed operations OPEN-FILES. OPEN INPUT EMPLOYEE-MASTER-FILE OPEN INPUT TIMECARD-FILE OPEN OUTPUT PAYROLL-REGISTER OPEN OUTPUT CHECK-FILE OPEN I-O EMPLOYEE-HISTORY-FILE. LOAD-PARAMETERS. PERFORM READ-TAX-TABLES PERFORM READ-DEDUCTION-CODES PERFORM READ-HOLIDAY-SCHEDULE PERFORM SET-PAYROLL-PERIOD. PROCESS-EMPLOYEE-RECORDS. PERFORM READ-EMPLOYEE-MASTER PERFORM UNTIL EMPLOYEE-EOF PERFORM PROCESS-SINGLE-EMPLOYEE PERFORM READ-EMPLOYEE-MASTER END-PERFORM. *> Level 3 - Specific business logic PROCESS-SINGLE-EMPLOYEE. PERFORM CALCULATE-GROSS-PAY PERFORM CALCULATE-DEDUCTIONS PERFORM CALCULATE-NET-PAY PERFORM WRITE-PAYROLL-RECORD PERFORM UPDATE-EMPLOYEE-HISTORY. CALCULATE-GROSS-PAY. PERFORM GET-HOURS-WORKED PERFORM APPLY-OVERTIME-RULES PERFORM CALCULATE-REGULAR-PAY PERFORM CALCULATE-OVERTIME-PAY PERFORM ADD-BONUS-PAYMENTS. CALCULATE-DEDUCTIONS. PERFORM CALCULATE-FEDERAL-TAX PERFORM CALCULATE-STATE-TAX PERFORM CALCULATE-FICA-TAX PERFORM CALCULATE-INSURANCE-DEDUCTIONS PERFORM CALCULATE-RETIREMENT-DEDUCTIONS. *> Specialized utility paragraphs GET-HOURS-WORKED. MOVE ZERO TO TOTAL-HOURS PERFORM READ-TIMECARD-RECORDS PERFORM UNTIL TIMECARD-EOF OR EMPLOYEE-CHANGE PERFORM VALIDATE-TIMECARD-DATA IF TIMECARD-VALID ADD TIMECARD-HOURS TO TOTAL-HOURS END-IF PERFORM READ-TIMECARD-RECORDS END-PERFORM. VALIDATE-TIMECARD-DATA. MOVE 'Y' TO TIMECARD-VALID IF TIMECARD-DATE NOT NUMERIC MOVE 'N' TO TIMECARD-VALID PERFORM LOG-VALIDATION-ERROR END-IF IF TIMECARD-HOURS < 0 OR TIMECARD-HOURS > 24 MOVE 'N' TO TIMECARD-VALID PERFORM LOG-VALIDATION-ERROR END-IF. *> Error handling paragraphs LOG-VALIDATION-ERROR. ADD 1 TO ERROR-COUNT STRING "Employee: " EMPLOYEE-ID " - Timecard error: " TIMECARD-RECORD DELIMITED BY SIZE INTO ERROR-MESSAGE END-STRING WRITE ERROR-LOG-RECORD FROM ERROR-MESSAGE. *> Mathematical calculation paragraphs APPLY-OVERTIME-RULES. IF TOTAL-HOURS > 40 COMPUTE REGULAR-HOURS = 40 COMPUTE OVERTIME-HOURS = TOTAL-HOURS - 40 ELSE MOVE TOTAL-HOURS TO REGULAR-HOURS MOVE ZERO TO OVERTIME-HOURS END-IF. CALCULATE-FEDERAL-TAX. *> Progressive tax calculation MOVE ZERO TO FEDERAL-TAX IF GROSS-PAY > 1000 COMPUTE TAX-BRACKET-1 = 1000 * 0.10 COMPUTE REMAINING-INCOME = GROSS-PAY - 1000 IF REMAINING-INCOME > 2000 COMPUTE TAX-BRACKET-2 = 2000 * 0.15 COMPUTE TAX-BRACKET-3 = (REMAINING-INCOME - 2000) * 0.25 ELSE COMPUTE TAX-BRACKET-2 = REMAINING-INCOME * 0.15 MOVE ZERO TO TAX-BRACKET-3 END-IF ELSE COMPUTE TAX-BRACKET-1 = GROSS-PAY * 0.10 MOVE ZERO TO TAX-BRACKET-2 MOVE ZERO TO TAX-BRACKET-3 END-IF COMPUTE FEDERAL-TAX = TAX-BRACKET-1 + TAX-BRACKET-2 + TAX-BRACKET-3

Complete PARAGRAPH System Implementation

cobol
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
IDENTIFICATION DIVISION. PROGRAM-ID. PARAGRAPH-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Customer order processing system 01 WS-CONTROL-FLAGS. 05 EOF-CUSTOMER PIC X VALUE 'N'. 05 EOF-PRODUCT PIC X VALUE 'N'. 05 VALID-ORDER PIC X VALUE 'Y'. 05 SYSTEM-ERROR PIC X VALUE 'N'. 01 WS-COUNTERS. 05 ORDERS-PROCESSED PIC 9(6) VALUE 0. 05 ORDERS-ACCEPTED PIC 9(6) VALUE 0. 05 ORDERS-REJECTED PIC 9(6) VALUE 0. 05 ERROR-COUNT PIC 9(4) VALUE 0. 01 WS-TOTALS. 05 TOTAL-ORDER-VALUE PIC 9(10)V99 VALUE 0. 05 TOTAL-COMMISSION PIC 9(8)V99 VALUE 0. 05 TOTAL-DISCOUNT PIC 9(8)V99 VALUE 0. PROCEDURE DIVISION. *> ========================================== *> MAIN CONTROL PARAGRAPHS *> ========================================== MAIN-ORDER-PROCESSING-SYSTEM. DISPLAY "=== ORDER PROCESSING SYSTEM ===" PERFORM SYSTEM-STARTUP PERFORM ORDER-PROCESSING-CYCLE PERFORM SYSTEM-SHUTDOWN STOP RUN. SYSTEM-STARTUP. DISPLAY "Starting order processing system..." PERFORM INITIALIZE-SYSTEM-COMPONENTS PERFORM VALIDATE-SYSTEM-READINESS PERFORM DISPLAY-SYSTEM-STATUS. ORDER-PROCESSING-CYCLE. DISPLAY "Beginning order processing cycle..." PERFORM PROCESS-CUSTOMER-ORDERS PERFORM GENERATE-PROCESSING-REPORTS PERFORM UPDATE-MANAGEMENT-STATISTICS. SYSTEM-SHUTDOWN. DISPLAY "Shutting down order processing system..." PERFORM CLOSE-SYSTEM-RESOURCES PERFORM ARCHIVE-PROCESSING-DATA PERFORM DISPLAY-FINAL-STATISTICS. *> ========================================== *> INITIALIZATION PARAGRAPHS *> ========================================== INITIALIZE-SYSTEM-COMPONENTS. PERFORM OPEN-SYSTEM-FILES PERFORM LOAD-SYSTEM-PARAMETERS PERFORM INITIALIZE-WORK-AREAS PERFORM SET-PROCESSING-DATE. OPEN-SYSTEM-FILES. OPEN INPUT CUSTOMER-FILE OPEN INPUT PRODUCT-FILE OPEN INPUT ORDER-FILE OPEN OUTPUT ORDER-REPORT OPEN OUTPUT ERROR-LOG OPEN I-O INVENTORY-MASTER. LOAD-SYSTEM-PARAMETERS. PERFORM READ-TAX-RATES PERFORM READ-DISCOUNT-SCHEDULES PERFORM READ-COMMISSION-RATES PERFORM READ-SHIPPING-COSTS. VALIDATE-SYSTEM-READINESS. PERFORM CHECK-FILE-AVAILABILITY PERFORM VERIFY-PARAMETER-INTEGRITY PERFORM TEST-CALCULATION-MODULES PERFORM CONFIRM-OUTPUT-DESTINATIONS. *> ========================================== *> ORDER PROCESSING PARAGRAPHS *> ========================================== PROCESS-CUSTOMER-ORDERS. PERFORM READ-FIRST-ORDER PERFORM UNTIL EOF-CUSTOMER = 'Y' PERFORM PROCESS-SINGLE-ORDER PERFORM READ-NEXT-ORDER END-PERFORM. PROCESS-SINGLE-ORDER. ADD 1 TO ORDERS-PROCESSED PERFORM VALIDATE-ORDER-DATA IF VALID-ORDER = 'Y' PERFORM EXECUTE-ORDER-PROCESSING ADD 1 TO ORDERS-ACCEPTED ELSE PERFORM HANDLE-ORDER-REJECTION ADD 1 TO ORDERS-REJECTED END-IF. VALIDATE-ORDER-DATA. MOVE 'Y' TO VALID-ORDER PERFORM VALIDATE-CUSTOMER-INFORMATION PERFORM VALIDATE-PRODUCT-INFORMATION PERFORM VALIDATE-ORDER-QUANTITIES PERFORM VALIDATE-PRICING-DATA. EXECUTE-ORDER-PROCESSING. PERFORM CALCULATE-ORDER-TOTALS PERFORM APPLY-DISCOUNTS-AND-TAXES PERFORM UPDATE-INVENTORY-LEVELS PERFORM GENERATE-ORDER-DOCUMENTS PERFORM UPDATE-CUSTOMER-HISTORY. *> ========================================== *> VALIDATION PARAGRAPHS *> ========================================== VALIDATE-CUSTOMER-INFORMATION. IF CUSTOMER-ID = SPACES OR CUSTOMER-ID = ZEROS MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Missing Customer ID" END-IF PERFORM LOOKUP-CUSTOMER-RECORD IF CUSTOMER-NOT-FOUND MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Customer not found" END-IF IF CUSTOMER-STATUS = 'INACTIVE' MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Inactive customer" END-IF. VALIDATE-PRODUCT-INFORMATION. IF PRODUCT-CODE = SPACES MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Missing Product Code" END-IF PERFORM LOOKUP-PRODUCT-RECORD IF PRODUCT-NOT-FOUND MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Product not found" END-IF IF PRODUCT-STATUS = 'DISCONTINUED' MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Product discontinued" END-IF. VALIDATE-ORDER-QUANTITIES. IF ORDER-QUANTITY <= 0 MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Invalid quantity" END-IF IF ORDER-QUANTITY > AVAILABLE-INVENTORY MOVE 'N' TO VALID-ORDER PERFORM LOG-VALIDATION-ERROR WITH "Insufficient inventory" END-IF. *> ========================================== *> CALCULATION PARAGRAPHS *> ========================================== CALCULATE-ORDER-TOTALS. PERFORM CALCULATE-LINE-ITEM-TOTALS PERFORM CALCULATE-SUBTOTAL PERFORM CALCULATE-SHIPPING-CHARGES PERFORM CALCULATE-TAX-AMOUNTS. CALCULATE-LINE-ITEM-TOTALS. COMPUTE LINE-TOTAL = ORDER-QUANTITY * UNIT-PRICE ADD LINE-TOTAL TO ORDER-SUBTOTAL. APPLY-DISCOUNTS-AND-TAXES. PERFORM CALCULATE-CUSTOMER-DISCOUNT PERFORM CALCULATE-VOLUME-DISCOUNT PERFORM CALCULATE-PROMOTIONAL-DISCOUNT PERFORM APPLY-TOTAL-DISCOUNTS PERFORM CALCULATE-SALES-TAX. CALCULATE-CUSTOMER-DISCOUNT. EVALUATE CUSTOMER-TYPE WHEN 'PREMIUM' COMPUTE CUSTOMER-DISCOUNT = ORDER-SUBTOTAL * 0.10 WHEN 'STANDARD' COMPUTE CUSTOMER-DISCOUNT = ORDER-SUBTOTAL * 0.05 WHEN OTHER MOVE ZERO TO CUSTOMER-DISCOUNT END-EVALUATE. CALCULATE-VOLUME-DISCOUNT. IF ORDER-SUBTOTAL > 10000 COMPUTE VOLUME-DISCOUNT = ORDER-SUBTOTAL * 0.03 ELSE IF ORDER-SUBTOTAL > 5000 COMPUTE VOLUME-DISCOUNT = ORDER-SUBTOTAL * 0.02 ELSE MOVE ZERO TO VOLUME-DISCOUNT END-IF END-IF. *> ========================================== *> UTILITY PARAGRAPHS *> ========================================== LOG-VALIDATION-ERROR. USING ERROR-MESSAGE. ADD 1 TO ERROR-COUNT STRING "Order: " ORDER-NUMBER " Error: " ERROR-MESSAGE " Time: " CURRENT-TIMESTAMP DELIMITED BY SIZE INTO ERROR-LOG-ENTRY END-STRING WRITE ERROR-RECORD FROM ERROR-LOG-ENTRY. LOOKUP-CUSTOMER-RECORD. MOVE 'N' TO CUSTOMER-FOUND MOVE CUSTOMER-ID TO SEARCH-KEY PERFORM SEARCH-CUSTOMER-TABLE IF CUSTOMER-FOUND = 'Y' PERFORM LOAD-CUSTOMER-DATA END-IF. UPDATE-INVENTORY-LEVELS. SUBTRACT ORDER-QUANTITY FROM AVAILABLE-INVENTORY IF AVAILABLE-INVENTORY < REORDER-POINT PERFORM GENERATE-REORDER-NOTICE END-IF PERFORM WRITE-INVENTORY-UPDATE. *> ========================================== *> REPORTING PARAGRAPHS *> ========================================== GENERATE-PROCESSING-REPORTS. PERFORM GENERATE-ORDER-SUMMARY-REPORT PERFORM GENERATE-ERROR-ANALYSIS-REPORT PERFORM GENERATE-INVENTORY-STATUS-REPORT. GENERATE-ORDER-SUMMARY-REPORT. PERFORM WRITE-REPORT-HEADER PERFORM WRITE-SUMMARY-STATISTICS PERFORM WRITE-DEPARTMENT-BREAKDOWNS PERFORM WRITE-REPORT-FOOTER. DISPLAY-FINAL-STATISTICS. DISPLAY " " DISPLAY "📊 ORDER PROCESSING STATISTICS" DISPLAY "==============================" DISPLAY "Orders processed: " ORDERS-PROCESSED DISPLAY "Orders accepted: " ORDERS-ACCEPTED DISPLAY "Orders rejected: " ORDERS-REJECTED DISPLAY "Error count: " ERROR-COUNT DISPLAY "Total order value: $" TOTAL-ORDER-VALUE DISPLAY "Total commission: $" TOTAL-COMMISSION DISPLAY "Processing complete." *> ========================================== *> CLEANUP PARAGRAPHS *> ========================================== CLOSE-SYSTEM-RESOURCES. CLOSE CUSTOMER-FILE CLOSE PRODUCT-FILE CLOSE ORDER-FILE CLOSE ORDER-REPORT CLOSE ERROR-LOG CLOSE INVENTORY-MASTER. ARCHIVE-PROCESSING-DATA. PERFORM BACKUP-TRANSACTION-LOGS PERFORM ARCHIVE-COMPLETED-ORDERS PERFORM CLEANUP-TEMPORARY-FILES.

PARAGRAPH Features and Benefits

Code Organization
  • • Logical grouping of related statements
  • • Hierarchical program structure
  • • Clear separation of concerns
  • • Improved code readability
Modularity Benefits
  • • Reusable code components
  • • Easier testing and debugging
  • • Simplified maintenance
  • • Enhanced code sharing
Flow Control
  • • PERFORM statement execution
  • • Conditional paragraph calls
  • • Structured programming support
  • • Program flow management
Development Benefits
  • • Team development support
  • • Code standardization
  • • Documentation enhancement
  • • Maintenance efficiency

Best Practices

Related Pages