Tables: Election Example
IDENTIFICATION DIVISION.
PROGRAM-ID. TABLE-EXAMPLE.
AUTHOR. BILL ROGERS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE
ASSIGN TO 'C:\PCOBWIN\ROGERS\ELECTION.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUT-FILE
ASSIGN TO 'C:\PCOBWIN\ROGERS\REPORT.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE
DATA RECORD IS IN-RECORD.
01 IN-RECORD.
02 CANDIDATE-CODE PIC X.
88 A-VOTE-FOR-BUSH VALUE 'W'.
88 A-VOTE-FOR-GORE VALUE 'G'.
88 A-VOTE-FOR-NADER VALUE 'N'.
88 A-VOTE-FOR-BUCHANAN VALUE 'B'.
02 VOTER-GENDER PIC X.
88 MALE VALUE 'M'.
88 FEMALE VALUE 'F'.
FD OUT-FILE
DATA RECORD IS OUT-RECORD.
01 OUT-RECORD PIC X(80).
WORKING-STORAGE SECTION.
01 DETAIL-LINE.
02 DETAIL-GENDER PIC X(8).
02 DETAIL-TABLE.
03 DETAIL-ITEM OCCURS 4 TIMES.
04 DETAIL-COUNT PIC Z,ZZZ,ZZ9.
04 FILLER PIC X(5) VALUE SPACES.
01 HEADER-LINE.
02 PIC X(8) VALUE SPACES.
02 PIC X(14) VALUE ' GORE'.
02 PIC X(14) VALUE ' BUSH'.
02 PIC X(14) VALUE ' NADER'.
02 PIC X(14) VALUE ' BUCHANAN'.
01 ACCUMULATOR-TABLE.
02 ACC-CANDIDATE OCCURS 4 TIMES.
03 ACC-GENDER OCCURS 2 TIMES.
04 ACCUMULATED-COUNT PIC 9(7).
01 CANDIDATE-SUB PIC 9 COMP.
01 GENDER-SUB PIC 9 COMP.
01 WS-TOTAL PIC 9(7) VALUE ZERO.
01 EOF-FLAG PIC X VALUE SPACE.
88 END-OF-INPUT VALUE 'Y'.
PROCEDURE DIVISION.
MAINLINE.
PERFORM INITIALIZATION-ROUTINE.
PERFORM THE-LOOP
UNTIL END-OF-INPUT.
PERFORM PRINT-REPORT.
PERFORM EOJ-ROUTINE.
STOP RUN.
INITIALIZATION-ROUTINE.
OPEN INPUT IN-FILE.
OPEN OUTPUT OUT-FILE.
MOVE ZEROES TO ACCUMULATOR-TABLE.
READ IN-FILE
AT END MOVE 'Y' TO EOF-FLAG.
THE-LOOP.
EVALUATE TRUE
WHEN A-VOTE-FOR-GORE MOVE 1 TO CANDIDATE-SUB
WHEN A-VOTE-FOR-BUSH MOVE 2 TO CANDIDATE-SUB
WHEN A-VOTE-FOR-NADER MOVE 3 TO CANDIDATE-SUB
WHEN A-VOTE-FOR-BUCHANAN MOVE 4 TO CANDIDATE-SUB
END-EVALUATE.
EVALUATE TRUE
WHEN MALE MOVE 1 TO GENDER-SUB
WHEN FEMALE MOVE 2 TO GENDER-SUB
END-EVALUATE.
ADD 1 TO ACCUMULATED-COUNT (CANDIDATE-SUB, GENDER-SUB).
READ IN-FILE
AT END MOVE 'Y' TO EOF-FLAG.
PRINT-REPORT.
* Header
WRITE OUT-RECORD FROM HEADER-LINE.
* Male vote
MOVE 1 TO GENDER-SUB.
MOVE 'MALE' TO DETAIL-GENDER.
PERFORM MOVE-TOTALS
VARYING CANDIDATE-SUB FROM 1 BY 1
UNTIL CANDIDATE-SUB > 4.
WRITE OUT-RECORD FROM DETAIL-LINE.
* Female vote
MOVE 2 TO GENDER-SUB.
MOVE 'FEMALE' TO DETAIL-GENDER.
PERFORM MOVE-TOTALS
VARYING CANDIDATE-SUB FROM 1 BY 1
UNTIL CANDIDATE-SUB > 4.
WRITE OUT-RECORD FROM DETAIL-LINE.
* Total vote
MOVE 'TOTAL' TO DETAIL-GENDER.
PERFORM FINAL-TOTALS
VARYING CANDIDATE-SUB FROM 1 BY 1
UNTIL CANDIDATE-SUB > 4.
WRITE OUT-RECORD FROM DETAIL-LINE.
MOVE-TOTALS.
MOVE ACCUMULATED-COUNT (CANDIDATE-SUB, GENDER-SUB)
TO DETAIL-COUNT (CANDIDATE-SUB).
FINAL-TOTALS.
COMPUTE WS-TOTAL =
ACCUMULATED-COUNT (CANDIDATE-SUB, 1) +
ACCUMULATED-COUNT (CANDIDATE-SUB, 2).
MOVE WS-TOTAL TO DETAIL-COUNT (CANDIDATE-SUB).
EOJ-ROUTINE.
CLOSE IN-FILE.
CLOSE OUT-FILE.
Output
GORE BUSH NADER BUCHANAN
MALE 0 0 0 0
FEMALE 0 0 0 0
TOTAL 0 0 0 0
Cobol Home