Structured COBOL Programming Nancy Stern Robert A. Stern James P. Ley

Download Report

Transcript Structured COBOL Programming Nancy Stern Robert A. Stern James P. Ley

Structured COBOL Programming
10th edition
John Wiley & Sons, Inc.
Nancy Stern
Hofstra University
Robert A. Stern
Nassau Community College
James P. Ley
University of Wisconsin-Stout
PowerPoint
Presentation
Winifred J. Rex
Bowling Green 28
State University
10-1
Chapter 10
Control Break Processing
28
10-2
Chapter Objectives
To familiarize you with
• Main types of computer-generated
reports
• Techniques used for efficient printing of
group reports and control totals
•  Control break processing and
control break printing
28
10-3
Chapter Contents
• Introduction to Control Break
Processing
• Program Requirements for Control
Break Processing
•  Multiple-Level Control Breaks
– Program 5
28
10-4
Types of Reports
• Detail or Transaction Reports
– Include one or more lines of output for
each input record read
• Exception Reports
– Printout of individual records that meet
(or fail to meet) certain criteria
• Summary Reports
– Summarizes rather than itemizes to
provide more comprehensive information
28
10-5
Control Break Processing
• Produces summary report using control
fields to indicate when totals are to print
• Records with same value for control
field grouped together in file
• Totals printed for each group of records
with same control field value
28
10-6
Control Break Example
• Consider file of sales records, each with
three fields:
– Salesperson's department number,
salesperson's number, sales amount
• Department number is control field
• Records in sequence by control field
– All records for salespeople in Dept 01
followed by records for those in Dept 02, …
28
10-7
Sample Sales Input Data
01 12345 098855
01 12346 353700
01 12347 003499
02 12222 987700
02 12234 008777
Amt-Of-Sales-In
SlsNo-In (Salesman Number)
Dept-In
28
Note: data is SORTED!!!
10-8
Control Break Example
• Report includes detail printing
– One line for each record with salesperson's
amount of sales
• Report also includes summary lines or
group printing
– Total line written for each department
– After all records for Dept 01 read and
printed, total for Dept 01 printed
– Same is done for Dept 02, and so on
28
10-9
Control Break Sample Report
Dept
Salesperson No
01
12345
01
12346
01
12347
Total for Dept is
02
12222
02
12234
Total for Dept is
Amt of Sales
$988.55
$3,537.00
$34.99
$4,560.54
$9,877.00
$87.77
$9,964.77
28
10-10
Control Break Example
• Records must be in sequence by some control field
(department number)
– Here, dept number
– Could be classification (frosh, soph, junior, …)
– Any kind of meaningful classification…
• Sales records for Dept 01 read in, printed, Dept total
accumulated
• Continues until record read in with different Dept
number
• Change in Dept triggers printing of Dept total for
Dept 01
• May want a grand total for all departments at the
end too.
28
10-11
Single-Level Control Break
• Single-level means program has only
one control field whose value triggers
printing of totals
• Control break occurs when there is
change in control field value from one
record to the next
– Recall: data is sorted.
28
10-12
Single-Level Control Break
• Many steps (initialization, heading
routines) same as previous programs
•  Detail routine must be modified to
check for control breaks
•  New module added to handle
control break processing
28
10-13
Detecting a Control Break
• For first record read, move control field
to hold area in WORKING-STORAGE
– Then process this record.
• If control field of subsequent records is
same as hold area
– Perform detail processing
• If they are not equal, control break
occurs
– Perform control break routine
28
10-14
Detail Processing
When control field is equal to hold area
• Add amount to control total or other
values that are being accumulated…
• Print detail record (if desired)
• Read next record
• Continue until there is a change in the
value of the control field.
28
10-15
Control Break Routine
If control field of record read is not equal to hold
area, you must suspend normal record
processing to handle the control break:
– Print control total for previous group
– Initialize control total field to zero
– Reinitialize hold field with new control field value
of the record just read,
• Perform detail processing of this new ‘first’
record and proceed as before.
28
10-16
Handling first record
• First record has no previous control field
value for comparison
• Add field to use as "flag" to determine if
record is first one processed (e.g., FirstRecord initialized to 'YES')
• When record read, if First-Record =
'YES'
– Save control field value in hold area
– Turn "off" flag by setting it to 'NO'
28
10-17
Forcing Final Control Break
• Totals printed when record with new
control field is read
• Last group of records has no
subsequent record to trigger printing
because we hit end of file.
• Include statements in end of job routine
to move final group total to output
record and print it with its totals as you
would on a normal control break.
28
10-18
Printing a Final Total
• May accumulate final total by
– Adding amount from each record to
“control group total” and “final total” in
detail routine
– Adding control group total to final total in
control break routine
• Second method more efficient since
additions made once for each group
instead of once for each record
28
10-19
Multiple Level Control Breaks
• Suppose a sales record is created each
time a salesperson makes a sale
• Each salesperson may have multiple
sales records
• Report will include two levels of totals
– Total sales for each salesperson
– Total sales for each department
28
10-20
Multiple Level Control Breaks
• Two control fields: Dept-In and SlsNo-In
• Records sorted by major control field
(Dept-In)
• Within department, sorted by minor
control field (SlsNo-In)
28
10-21
Sample Sales Input Data
Dept-In SlsNo-In
Amt-Of-Trans-In
01
004
127.23
01
004
100.14
In sequence
01
006 within Dept 01 027.45
01
006
052.23
01
006
126.27
02
003
111.14
02
003
027.23
Discuss the sort sequence…
28
10-22
Double-Level Control Break
• Two hold areas, one for each control field
•  Check for control break on each
– If no change in Dept-In or SlsNo-In, just add AmtOf-Trans-In to salesperson total
– If Dept-In changes, perform major control break
routine
– If no change in Dept-In but SlsNo-In changes,
perform minor control break routine
–  But this requires care, especially when printing
totals, resetting control variable values (for next
record) and clearing accumulators for the minor
break without messing up the totals for the major
break.
28
10-23
Major Control Break Routine
• Begins by forcing minor control break
– This processes last salesperson’s total for previous department
– Do all that is required for a single control break based on
salesman number….
– This may involve printing salesman totals, etc…Now:
•
•
•
•
•
•
Print department total
Reinitialize department total to zero
Save new Dept-In in hold area
Print heading for new department and all that.
Note: you will likely have a new department.
Don’t forget EOF considerations, which will force both a
major and minor control break.
28
10-24
SORTED INPUT FILE - FOR DEMO ON SINGLE CONTROL BREAK
\DEPTNAME
SALES
1
1
1
2
2
3
ALBERT
BOZO
CONNER
AMATO
BISHOP
ALPHONSE
426.00
726.00
260.00
4567.00
634.00
300.00
3
3
3
4
4
4
4
COOK
JASPER
MOTHER
JOCKO
JULIET
NOVEMBER
OSCAR
500.00
395.00
2496.00
789.00
000.00
100.00
2000.00
7
7
7
8
8
8
9
ALPHA
BRAVO
COCOA
DELTA
FOXTROT
GOLF
ROMEO
6299.00
7000.00
420.00
....
9
9
10
SIERRA
TANGO
EOF
OTHER FIELDS
28
10-25
Minor Control Break Routine
• Print total for previous SlsNo-In
• Add salesperson total to department
total
• Initialize salesperson total to zero
• Move new SlsNo-In to hold area
28
10-26
Chapter Summary
• Control break program may have any
number of control fields
• All input records must be in sequence
by minor control fields within
intermediate control fields within major
control fields
• Sort file before processing if records are
not already in this order
28
10-27
Chapter Summary
• Control break routines
– Higher-level breaks force lower-level
breaks
– Appropriate control total line printed
– Appropriate control total is initialized
– Appropriate control field is initialized
28
10-28