$ SET SOURCEFORMAT"FREE" IDENTIFICATION DIVISION. PROGRAM-ID. MonthTable. AUTHOR. Michael Coughlan. * This program counts the number of students born in each month and * displays the result. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT StudentFile ASSIGN TO "STUDENTS.DAT" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD StudentFile. 01 StudentDetails. 88 EndOfStudentFile VALUE HIGH-VALUES. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 DateOfBirth. 03 YOBirth PIC 9(4). 03 MOBirth PIC 9(2). 03 DOBirth PIC 9(2). 02 CourseCode PIC X(4). 02 Gender PIC X. WORKING-STORAGE SECTION. 01 MonthTable. 02 TableValues. 03 FILLER PIC X(18) VALUE "January February". 03 FILLER PIC X(18) VALUE "March April". 03 FILLER PIC X(18) VALUE "May June". 03 FILLER PIC X(18) VALUE "July August". 03 FILLER PIC X(18) VALUE "SeptemberOctober". 03 FILLER PIC X(18) VALUE "November December". 02 FILLERh REDEFINES TableValues. 03 Month OCCURS 12 TIMES PIC X(9). 01 MonthCount OCCURS 12 TIMES PIC 999 VALUE ZEROS. 01 MonthIdx PIC 999. 01 HeadingLine PIC X(19) VALUE " Month StudCount". 01 DisplayLine. 02 PrnMonth PIC X(9). 02 FILLER PIC X(4) VALUE SPACES. 02 PrnStudentCount PIC ZZ9. PROCEDURE DIVISION. Begin. OPEN INPUT StudentFile READ StudentFile AT END SET EndOfStudentFile TO TRUE END-READ PERFORM UNTIL EndOfStudentFile ADD 1 TO MonthCount(MOBirth) READ StudentFile AT END SET EndOfStudentFile TO TRUE END-READ END-PERFORM DISPLAY HeadingLine PERFORM VARYING MonthIdx FROM 1 BY 1 UNTIL MonthIdx > 12 MOVE Month(MonthIdx) TO PrnMonth MOVE MonthCount(MonthIdx) TO PrnStudentCount DISPLAY DisplayLine END-PERFORM. CLOSE StudentFile STOP RUN.