Code for PROGRAM THAT READS IN STATES UNTIL END OF DATA in Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. ASSIGNMENT4.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL. SELECT STATE-DATA ASSIGN TO "ASSIGN4.DAT".
SELECT STATE-OUTPUT ASSIGN TO "ASSIGN4.OUT".
DATA DIVISION.
FILE SECTION.
FD STATE-DATA LABEL RECORDS ARE STANDARD.
01 STATE-RECORD.
05 STATE-NO PIC 99.
05 COUNTY-NO PIC X(2).
05 DISTRICT-NO PIC X(2).
05 POPULATION PIC 9(6).
FD STATE-OUTPUT LABEL RECORDS ARE STANDARD.
01 STATE-PRINT PIC X(132).
WORKING-STORAGE SECTION.
01 WORK-AREAS.
05 WS-DATE PIC 9(6).
05 DATE-OTHER REDEFINES WS-DATE.
10 DATE-YEAR PIC 99.
10 DATE-MONTH PIC 99.
10 DATE-DAY PIC 99.
05 WS-PAGE-COUNT PIC 99 VALUE ZEROS.
05 STATE-COUNT PIC 99 VALUE ZEROS.
05 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'.
88 MORE-RECORDS VALUE 'YES'.
88 NO-MORE-RECORDS VALUE 'NO '.
05 STATE-POP PIC 9(8).
05 TOTAL-POP PIC 9(9).
05 STATE-HOLD PIC 99 VALUE ZEROS.
01 HEADER-1.
05 FILLER PIC X(40) VALUE SPACES.
05 FILLER PIC X(17) VALUE 'POPULATION REPORT'.
05 FILLER PIC X(3) VALUE SPACES.
05 DATE-OUT.
10 MONTH-OUT PIC 99.
10 FILLER PIC X VALUE '/'.
10 DAY-OUT PIC 99.
10 FILLER PIC X VALUE '/'.
10 YEAR-OUT PIC 99.
05 FILLER PIC X(2) VALUE SPACES.
05 FILLER PIC X(4) VALUE 'PAGE'.
05 FILLER PIC X VALUE SPACE.
05 PAGE-OUT PIC Z9.
05 FILLER PIC X(55) VALUE SPACES.
01 HEADER-2.
05 FILLER PIC X(19) VALUE SPACES.
05 FILLER PIC X(8) VALUE 'STATE NO'.
05 FILLER PIC X(13) VALUE SPACES.
05 FILLER PIC X(16) VALUE 'TOTAL POPULATION'.
05 FILLER PIC X(77) VALUE SPACES.
01 FOOTER-1.
05 FILLER PIC X(40) VALUE SPACES.
05 FILLER PIC X(20) VALUE 'TOTAL USA POPULATION'.
05 TOTAL-USA-POP PIC ZZZ,ZZZ,ZZ9.
05 FILLER PIC X(61) VALUE SPACES.
01 POPULATION-DETAILS.
05 FILLER PIC X(23).
05 STATE-NO-OUT PIC Z9.
05 FILLER PIC X(16).
05 POPULATION-OUT PIC ZZ,ZZZ,ZZ9.
05 FILLER PIC X(81).
PROCEDURE DIVISION.
100-MAIN-MODULE.
OPEN INPUT STATE-DATA
OUTPUT STATE-OUTPUT.
PERFORM 200-DATE-ROUTINE THRU 300-HEADING-ROUTINE.
READ STATE-DATA
AT END MOVE 'NO ' TO ARE-THERE-MORE-RECORDS.
IF MORE-RECORDS
MOVE STATE-NO TO STATE-HOLD.
PERFORM 400-POPULATION-ROUTINE
UNTIL NO-MORE-RECORDS.
PERFORM 700-TOTAL-ROUTINE.
CLOSE STATE-DATA
STATE-OUTPUT.
STOP RUN.
200-DATE-ROUTINE.
ACCEPT WS-DATE FROM DATE
MOVE DATE-MONTH TO MONTH-OUT.
MOVE DATE-DAY TO DAY-OUT.
MOVE DATE-YEAR TO YEAR-OUT.
300-HEADING-ROUTINE.
ADD 1 TO WS-PAGE-COUNT.
MOVE WS-PAGE-COUNT TO PAGE-OUT.
IF STATE-COUNT<10
WRITE STATE-PRINT FROM HEADER-1
AFTER ADVANCING 2 LINES
ELSE WRITE STATE-PRINT FROM HEADER-1
AFTER ADVANCING PAGE.
WRITE STATE-PRINT FROM HEADER-2
AFTER ADVANCING 2 LINES.
400-POPULATION-ROUTINE.
IF STATE-NO NOT EQUAL TO STATE-HOLD
PERFORM 800-STATE-BREAK
MOVE STATE-NO TO STATE-HOLD.
ADD POPULATION TO STATE-POP.
READ STATE-DATA
AT END MOVE 'NO ' TO ARE-THERE-MORE-RECORDS.
IF NO-MORE-RECORDS
PERFORM 800-STATE-BREAK.
500-WRITE-ROUTINE.
MOVE STATE-HOLD TO STATE-NO-OUT.
MOVE STATE-POP TO POPULATION-OUT.
WRITE STATE-PRINT FROM POPULATION-DETAILS
AFTER ADVANCING 2 LINES.
ADD STATE-POP TO TOTAL-POP.
600-BREAK-ROUTINE.
PERFORM 300-HEADING-ROUTINE.
MOVE ZEROS TO STATE-COUNT.
700-TOTAL-ROUTINE.
MOVE TOTAL-POP TO TOTAL-USA-POP.
WRITE STATE-PRINT FROM FOOTER-1
AFTER ADVANCING 10 LINES.
800-STATE-BREAK.
ADD 1 TO STATE-COUNT.
IF STATE-COUNT>10
PERFORM 600-BREAK-ROUTINE.
PERFORM 500-WRITE-ROUTINE.
MOVE ZEROS TO STATE-POP.