IDENTIFICATION DIVISION. PROGRAM-ID. CLBLHO2CJ-V. AUTHOR. GO, CATHRINA JANE B. *>********************************************************* *> PROGRAM ID CLBLHO2CJ-V *> PURPOSE : VALIDARE ENROLLEE FILE *> DATASETS USED : *> TRAN-FILE : INPUT *> PROV-FILE : OUTPUT *> REPORTS: *> UPDATE REGISTER: OUTREP-FILE *> AMENDMENT HISTORY *> PROG DATE DESCRIPTION *> AAV 2022/10/20 INITIAL CODE ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. JDOODLE. OBJECT-COMPUTER. BPI-MF. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUD-FILE ASSIGN TO "/uploads/mp.txt" ORGANIZATION IS LINE SEQUENTIAL ACCESS IS SEQUENTIAL FILE STATUS IS STUD-STAT. SELECT VALIDATED ASSIGN TO "/myfiles/Enrollee-Validated-Upload-File.txt" ORGANIZATION IS LINE SEQUENTIAL ACCESS IS SEQUENTIAL FILE STATUS IS VALIDATED-STAT. SELECT PROOFLIST-REPORT ASSIGN TO "/myfiles/Validation-Prooflist.txt" ORGANIZATION IS LINE SEQUENTIAL ACCESS IS SEQUENTIAL FILE STATUS IS PROOFLIST-REPORT-STAT. DATA DIVISION. FILE SECTION. FD STUD-FILE BLOCK CONTAINS 0 RECORD CONTAINS 200 LABEL RECORDS OMITTED. 01 STUD-REC. 05 Header-Date. 10 Stud-HD-YYYY PIC X(04). 10 Stud-HD-MM PIC X(02). 10 Stud-HD-DD PIC X(02). 10 FILLER PIC X(108). 05 STUD-INPUT-REC REDEFINES Header-Date. 10 Stud-School PIC X(25). 10 Stud-Number PIC 9(06). 10 Stud-TransCode PIC X(01). 10 Stud-Name. 15 Stud-Surname PIC X(20). 15 Stud-FirstName PIC X(20). 15 Stud-MI PIC X(02). 10 Stud-ContacInfo PIC X(18). 10 Stud-DateofBirth. 15 DOB-YYYY PIC X(04). 15 DOB-MM PIC X(02). 15 DOB-DD PIC X(02). 10 Stud-Course PIC X(16). FD VALIDATED BLOCK CONTAINS 0 RECORD CONTAINS 200 LABEL RECORDS OMITTED. 01 STUD-VALIDATED-REC. 05 Stud-Validated-Header-Date. 10 Stud-Validated-Date PIC X(08). 10 FILLER PIC X(108). 05 Stud-Validated-Details-Record REDEFINES Stud-Validated-Header-Date. 10 Stud-Validated-School PIC X(25). 10 Stud-Validated-Number PIC 9(06). 10 Stud-Validated-TransCode PIC X(01). 10 Stud-Validated-Name. 15 Stud-Validated-Surname PIC X(20). 15 Stud-Validated-FirstName PIC X(20). 15 Stud-Validated-MI PIC X(02). 10 Stud-Validated-ContacInfo PIC X(18). 10 Stud-Validated-DateofBirth PIC X(08). 10 Stud-Validated-Course PIC X(16). FD PROOFLIST-REPORT BLOCK CONTAINS 0 RECORD CONTAINS 200 LABEL RECORDS OMITTED. 01 STUD-REPREC. 05 PROOFLIST-REC PIC X(132). WORKING-STORAGE SECTION. 77 FILLER PIC X(72) VALUE 'THIS IS THE START OF WORKING-STORAGE'. 01 WS-VAR2. 05 STUD-STAT PIC X(02) VALUE SPACES. 05 VALIDATED-STAT PIC X(02) VALUE SPACES. 05 PROOFLIST-REPORT-STAT PIC X(02) VALUE SPACES. 05 VALID-FLAG PIC X VALUE 'N'. 05 STUD-HEADER PIC 9(08). 05 STUD-DOB PIC 9(08). 05 STUD-DOB-YYYY PIC 9(04). 05 STUD-YYYY PIC 9(04). 05 highdd pic x(02). 05 WS-YYYY PIC 9(04). 05 CURR-DATE PIC 9(08). 05 TOTALNO PIC 9(8)V99. 05 EOF-SW PIC X VALUE 'N'. 88 END-FILE VALUE 'Y'. 01 REMARKS-ARR OCCURS 09 TIMES. 05 REMARKS PIC X(26). 77 LINE-COUNT PIC 99 VALUE 00. 77 PAGE-COUNT PIC 99 VALUE 0000. 77 current-record PIC 99 VALUE 00. 77 TREAD-COUNT PIC 99 VALUE 00. 77 INVALID-COUNT PIC 99 VALUE 00. 77 VALID-COUNT PIC 99 VALUE 00. 77 AGE PIC 99 VALUE 00. 77 z PIC 99 VALUE 00. 77 y PIC 99 VALUE 00. 77 x PIC 99 VALUE 00. 77 z1 PIC 99 VALUE 00. 77 y1 PIC 99 VALUE 00. 77 x1 PIC 99 VALUE 00. 77 INDEX-CTR PIC 99 VALUE 00. 01 WS-DATE. 05 WS-DATE-YYYY PIC X(04). 05 WS-DATE-MM PIC X(02). 05 WS-DATE-DD PIC X(02). 01 WS-LITERAL-CONSTANTS. 05 WS-ERROR-HEADER PIC X(80) VALUE 'CBLHO2 : Error in file : CBLHO2I1 '. 05 WS-ERROR-STATUS-CODE PIC X(30) VALUE 'CBLHO2: File Status is'. 05 WS-ERROR-STATUS-CODE1 PIC X(80) VALUE 'CBLHO2: Processing Terminated'. 05 WS-NORMAL-PROCESSING PIC X(30) VALUE 'CBLHO1CJ successfully executed'. 05 WS-ERROR-HEADER1 PIC X(30) VALUE 'INVALID HEADER RECORD - '. 05 WS-ERROR-HEADER2 PIC X(80) VALUE 'NVALID HEADER RECORD - HEADER-DATE MUST <= CURRENT DATE '. 05 WS-ERROR-HEADER3 PIC X(30) VALUE 'PROCESSING TERMINATED'. 05 WS-ERROR-INVALID PIC X(30) VALUE 'has invalid format'. 05 WS-ERROR-INVALID1 PIC X(30) VALUE 'is required'. 01 WS-DTL3. 05 FILLER PIC X(96) VALUE SPACES. 05 DTL-REMARKS3 PIC X(26). 01 WS-DTL4. 05 FILLER PIC X(96) VALUE SPACES. 05 DTL-REMARKS4 PIC X(26). 01 WS-DTL5. 05 FILLER PIC X(96) VALUE SPACES. 05 DTL-REMARKS5 PIC X(26). 01 WS-DTL6. 05 FILLER PIC X(96) VALUE SPACES. 05 DTL-REMARKS6 PIC X(26). 01 WS-DTL7. 05 FILLER PIC X(96) VALUE SPACES. 05 DTL-REMARKS7 PIC X(26). 01 WS-DTL8. 05 FILLER PIC X(96) VALUE SPACES. 05 DTL-REMARKS8 PIC X(26). 01 WS-DTL9. 05 FILLER PIC X(96) VALUE SPACES. 05 DTL-REMARKS9 PIC X(26). 01 PROOFLIST-HEAD1. 05 FILLER PIC X(17) VALUE 'PROGRAM :CBLHO2CJ'. 05 FILLER PIC X(21) VALUE SPACES. 05 FILLER PIC X(19) VALUE 'MINERVA POLYTECHNIC'. 05 FILLER PIC X(40) VALUE 'PAGE '. 05 PAGE-NO PIC ZZ99. 01 PROOFLIST-HEAD2. 05 TODAY-DATE-MM PIC X(02). 05 FILLER PIC X(01) VALUE '/'. 05 TODAY-DATE-DD PIC X(02). 05 FILLER PIC X(01) VALUE '/'. 05 TODAY-DATE-YYYY PIC X(04). 05 FILLER PIC X(29) VALUE SPACES. 05 FILLER PIC X(20) VALUE 'VALIDATION PROOFLIST'. 01 PROOFLIST-HEAD3. 05 FILLER PIC X(03) VALUE SPACES. 05 FILLER PIC X(03) VALUE 'EMP'. 05 FILLER PIC X(03) VALUE SPACES. 05 FILLER PIC X(02) VALUE 'TC'. 05 FILLER PIC X(30) VALUE SPACES. 05 FILLER PIC X(13) VALUE 'STUDENT NAME/'. 05 FILLER PIC X(35) VALUE SPACES. 05 FILLER PIC X(05) VALUE 'BIRTH'. 05 FILLER PIC X(11) VALUE SPACES. 05 FILLER PIC X(35) VALUE 'COURSE'. 05 FILLER PIC X(10) VALUE SPACES. 05 FILLER PIC X(40) VALUE 'REMARKS'. 01 PROOFLIST-HEAD4. 05 FILLER PIC X(03) VALUE SPACES. 05 FILLER PIC X(03) VALUE 'NUM'. 05 FILLER PIC X(32) VALUE SPACES. 05 FILLER PIC X(28) VALUE 'CONTACT INFORMATION'. 05 FILLER PIC X(24) VALUE SPACES. 05 FILLER PIC X(04) VALUE 'DATE'. 01 PROOFLIST-DETAIL1. 05 ASTERISK-STUD-NO PIC X(01). 05 PROOFLIST-STUD-NO PIC 9(06). 05 FILLER PIC X(02) VALUE SPACES. 05 ASTERISK-STUD-TC PIC X(01). 05 PROOFLIST-STUD-TC PIC X(01). 05 FILLER PIC X(03) VALUE SPACES. 05 ASTERISK-STUD-LNAME PIC X(01). 05 PROOFLIST-STUD-LNAME PIC X(20). 05 FILLER PIC X(01) VALUE SPACES. 05 ASTERISK-STUD-FNAME PIC X(01). 05 PROOFLIST-STUD-FNAME PIC X(20). 05 FILLER PIC X(01) VALUE SPACES. 05 ASTERISK-STUD-MI PIC X(01). 05 PROOFLIST-STUD-MI PIC X(02). 05 FILLER PIC X(01) VALUE SPACES. 05 FILLER PIC X(02) VALUE SPACES. 05 ASTERISK-STUD-DOB PIC X(01). 05 PROOFLIST-STUD-DOB PIC X(08). 05 FILLER PIC X(15) VALUE SPACES. 05 ASTERISK-STUD-COURSE PIC X(01). 05 PROOFLIST-STUD-COURSE PIC X(16). 05 FILLER PIC X(09) VALUE SPACES. 05 PROOFLIST-REMARKS1 PIC X(50). 01 PROOFLIST-DETAIL2. 05 FILLER PIC X(14). 05 ASTERISK-STUD-CI PIC X(01). 05 PROOFLIST-STUD-CI PIC X(18). 05 FILLER PIC X(40). 05 PROOFLIST-REMARKS2 PIC X(50). 01 PROOFLIST-DETAIL3. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS3 PIC X(50). 01 PROOFLIST-DETAIL4. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS4 PIC X(50). 01 PROOFLIST-DETAIL5. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS5 PIC X(50). 01 PROOFLIST-DETAIL6. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS6 PIC X(50). 01 PROOFLIST-DETAIL7. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS7 PIC X(50). 01 PROOFLIST-DETAIL8. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS8 PIC X(50). 01 PROOFLIST-DETAIL9. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS9 PIC X(50). 01 PROOFLIST-DETAIL10. 05 FILLER PIC X(134). 05 PROOFLIST-REMARKS10 PIC X(50). 01 PROOFLIST-TOTAL-READ. 05 FILLER PIC X(14). 05 FILLER PIC X(38) VALUE 'TOTAL NUMBER OF RECORDS READ :'. 05 READ-COUNTER PIC 9(03). 01 PROOFLIST-VALID. 05 FILLER PIC X(14). 05 FILLER PIC X(40) VALUE 'TOTAL NUMBER OF VALID RECORDS :'. 05 VALID-COUNTER PIC 9(03). 01 PROOFLIST-INVALID. 05 FILLER PIC X(14). 05 FILLER PIC X(38) VALUE 'TOTAL NUMBER OF INVALID RECORDS: '. 05 INVALID-COUNTER PIC 9(03). 01 PROOFLIST-LASTPAGE. 02 FILLER PIC X(60). 02 FILLER PIC X(30) VALUE '--END OF REPORT—'. PROCEDURE DIVISION. 0000-MAIN. ACCEPT WS-DATE FROM DATE YYYYMMDD MOVE WS-DATE-MM TO TODAY-DATE-MM MOVE WS-DATE-DD TO TODAY-DATE-DD MOVE WS-DATE-YYYY TO TODAY-DATE-YYYY OPEN INPUT STUD-FILE IF STUD-STAT NOT = '00' THEN DISPLAY WS-ERROR-STATUS-CODE DISPLAY WS-ERROR-STATUS-CODE1, STUD-STAT DISPLAY WS-ERROR-STATUS-CODE1 STOP RUN END-IF OPEN OUTPUT VALIDATED IF VALIDATED-STAT NOT = '00' THEN DISPLAY WS-ERROR-STATUS-CODE DISPLAY WS-ERROR-STATUS-CODE1, VALIDATED-STAT DISPLAY WS-ERROR-STATUS-CODE STOP RUN END-IF OPEN OUTPUT PROOFLIST-REPORT IF PROOFLIST-REPORT-STAT NOT = '00' THEN DISPLAY WS-ERROR-STATUS-CODE DISPLAY WS-ERROR-STATUS-CODE1, PROOFLIST-REPORT-STAT DISPLAY WS-ERROR-STATUS-CODE STOP RUN END-IF PERFORM 1000-VALIDATE-HEADING DISPLAY WS-NORMAL-PROCESSING CLOSE STUD-FILE VALIDATED PROOFLIST-REPORT STOP RUN. 0000-EXIT. EXIT. 1000-VALIDATE-HEADING. READ STUD-FILE AT END SET END-FILE TO TRUE END-READ PERFORM 1100-VALIDATE-HEADER-DATE IF VALID-FLAG = 'Y' THEN PERFORM 1200-VALIDATE-RECORDS END-IF. 1000-EXIT. EXIT. 1100-VALIDATE-HEADER-DATE. MOVE STUD-HD-YYYY TO STUD-YYYY MOVE Header-Date TO STUD-HEADER IF Header-Date = SPACES THEN DISPLAY WS-ERROR-HEADER1, 'HEADER-DATE REQUIRED' DISPLAY WS-ERROR-HEADER3 ELSE IF STUD-HEADER IS NOT NUMERIC AND STUD-HEADER IS NOT ALPHABETIC THEN DISPLAY WS-ERROR-HEADER1, 'HEADER-DATE IS NOT NUMERIC' DISPLAY WS-ERROR-HEADER3 ELSE IF STUD-HEADER IS ALPHABETIC THEN DISPLAY WS-ERROR-HEADER1, 'HEADER-DATE IS NOT NUMERIC' DISPLAY WS-ERROR-HEADER3 ELSE IF STUD-HEADER < FUNCTION LENGTH(STUD-HEADER) THEN DISPLAY WS-ERROR-HEADER1, 'HEADER-DATE LENGTH INVALID' DISPLAY WS-ERROR-HEADER3 ELSE PERFORM 1110-VALIDATE-DATE END-IF END-IF END-IF END-IF. 1100-EXIT. EXIT. 1110-VALIDATE-DATE. IF STUD-HD-YYYY >= '1800' and STUD-HD-YYYY <= 9999 THEN IF STUD-HD-MM = '01' OR '03' OR '05' OR '07' OR '08' OR '10' OR '12' IF STUD-HD-DD <= 31 MOVE 'Y' TO VALID-FLAG ELSE DISPLAY WS-ERROR-HEADER1, 'INVALID DAY FORMAT' DISPLAY WS-ERROR-HEADER3 END-IF ELSE IF STUD-HD-MM = '04' OR '06' OR '09' OR '11' IF STUD-HD-DD <= 30 MOVE 'Y' TO VALID-FLAG END-IF ELSE DISPLAY WS-ERROR-HEADER1, 'INVALID DAY FORMAT' DISPLAY WS-ERROR-HEADER3 END-IF ELSE IF STUD-HD-MM = '02' then *> checking of leap year DIVIDE STUD-YYYY BY 400 GIVING z REMAINDER z1 IF z1 = 0 MOVE 29 TO highdd ELSE DIVIDE STUD-YYYY BY 4 GIVING y REMAINDER y1 IF y1 = 0 DIVIDE STUD-YYYY BY 100 GIVING x REMAINDER x1 IF x1 = 0 MOVE '28' TO highdd ELSE MOVE '29' TO highdd IF STUD-HD-DD <= highdd then IF Header-Date <= WS-DATE MOVE 'Y' TO VALID-FLAG ELSE DISPLAY WS-ERROR-HEADER1, 'INVALID DAY FORMAT' DISPLAY WS-ERROR-HEADER3 END-IF ELSE DISPLAY WS-ERROR-HEADER1, 'INVALID DAY FORMAT' DISPLAY WS-ERROR-HEADER3 ELSE DISPLAY WS-ERROR-HEADER1, 'INVALID MONTH FORMAT' DISPLAY WS-ERROR-HEADER3 ELSE DISPLAY WS-ERROR-HEADER1, 'INVALID YEAR FORMAT' DISPLAY WS-ERROR-HEADER3 END-IF END-IF. 1110-EXIT. EXIT. 1200-VALIDATE-RECORDS. IF Header-Date <= WS-DATE MOVE Header-Date TO Stud-Validated-Date Write STUD-VALIDATED-REC ADD 1 TO VALID-COUNT MOVE 'VALID' TO REMARKS(1) READ STUD-FILE INTO STUD-REC PERFORM UNTIL END-FILE IF current-record <> 1 IF Stud-School = 'MINERVA POLYTECHNIC' ADD 1 TO TREAD-COUNT ADD 1 TO LINE-COUNT DISPLAY PROOFLIST-DETAIL1 DISPLAY PROOFLIST-DETAIL2 PERFORM 1220-WRITE-PROOFLIST MOVE STUD-INPUT-REC TO Stud-Validated-Details-Record WRITE STUD-VALIDATED-REC PERFORM 1210-VALIDATE-REC END-IF READ STUD-FILE AT END SET END-FILE TO TRUE END-PERFORM ELSE DISPLAY WS-ERROR-HEADER2 DISPLAY WS-ERROR-HEADER3 END-IF. 1200-EXIT. EXIT. 1210-VALIDATE-REC. PERFORM 1212-VALIDATE-TC. PERFORM 1214-WRITE-DETAILS. 1210-EXIT. EXIT. 1212-VALIDATE-TC. IF Stud-TransCode <> 'A' AND 'W' AND 'E' MOVE Stud-TransCode TO PROOFLIST-STUD-TC MOVE '*' TO ASTERISK-STUD-TC MOVE 'TC INVALID FORMAT' TO REMARKS(INDEX-CTR) ELSE IF Stud-TransCode = 'A' MOVE Stud-TransCode TO PROOFLIST-STUD-TC PERFORM 1300-VAL-STUDENT-NUMBER PERFORM 1400-VAL-LNAME PERFORM 1500-VAL-FNAME PERFORM 1600-VAL-MI PERFORM 1700-VAL-CI PERFORM 1800-VAL-DOB PERFORM 1900-VAL-COURSE PERFORM 2000-TC-A ELSE IF Stud-TransCode = 'W' MOVE Stud-TransCode TO PROOFLIST-STUD-TC PERFORM 1300-VAL-STUDENT-NUMBER PERFORM 1400-VAL-LNAME PERFORM 1500-VAL-FNAME PERFORM 1600-VAL-MI PERFORM 2100-TC-W ELSE IF Stud-TransCode= 'E' MOVE Stud-TransCode TO PROOFLIST-STUD-TC PERFORM 1300-VAL-STUDENT-NUMBER PERFORM 1400-VAL-LNAME PERFORM 1500-VAL-FNAME PERFORM 1600-VAL-MI PERFORM 1700-VAL-CI PERFORM 1800-VAL-DOB PERFORM 1900-VAL-COURSE PERFORM 2200-TC-E ELSE MOVE ' ' TO ASTERISK-STUD-TC MOVE ' ' TO REMARKS(INDEX-CTR) END-IF. 1212-EXIT. EXIT. 1300-VAL-STUDENT-NUMBER. MOVE Stud-Number TO PROOFLIST-STUD-NO IF Stud-Number = SPACES THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-NO MOVE 'STUDENT NUMBER IS REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-Number IS NOT NUMERIC THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-NO MOVE 'STUDENT NUMBER NOT NUMERIC' TO REMARKS(INDEX-CTR) ELSE IF Stud-Number <> SPACES THEN MOVE ' ' TO ASTERISK-STUD-NO MOVE ' ' TO REMARKS(INDEX-CTR). 1300-EXIT. EXIT. 1400-VAL-LNAME. MOVE Stud-Surname TO PROOFLIST-STUD-LNAME IF Stud-Surname = SPACES THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-LNAME MOVE 'STUDENT SURNAME IS REQUIRED' TO REMARKS(INDEX-CTR) ELSE MOVE ' ' TO ASTERISK-STUD-LNAME MOVE ' ' TO REMARKS(INDEX-CTR). 1400-EXIT. EXIT. 1500-VAL-FNAME. MOVE Stud-Firstname TO PROOFLIST-STUD-FNAME IF Stud-Firstname = SPACES THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-FNAME MOVE 'STUDENT FIRSTNAME IS REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-Firstname IS NOT ALPHABETIC THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-FNAME MOVE 'STUDENT FIRSTNAME IS NOT ALPHABETIC' TO REMARKS(INDEX-CTR) ELSE MOVE ' ' TO ASTERISK-STUD-FNAME MOVE ' ' TO REMARKS(INDEX-CTR). 1500-EXIT. EXIT. 1600-VAL-MI. MOVE Stud-MI TO PROOFLIST-STUD-MI IF Stud-MI = SPACES THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-MI MOVE 'STUDENT MI IS REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-MI IS NOT ALPHABETIC THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-MI MOVE 'STUDENT MI IS NOT ALPHABETIC' TO REMARKS(INDEX-CTR) ELSE IF Stud-MI <> SPACES THEN MOVE ' ' TO ASTERISK-STUD-MI MOVE ' ' TO REMARKS(INDEX-CTR). 1600-EXIT. EXIT. 1700-VAL-CI. MOVE Stud-ContacInfo TO PROOFLIST-STUD-CI IF Stud-ContacInfo = SPACES THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-CI MOVE 'STUDENT CONTACTINFO IS REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-ContacInfo <> SPACES THEN MOVE ' ' TO ASTERISK-STUD-CI MOVE ' ' TO REMARKS(INDEX-CTR). 1700-EXIT. EXIT. 1800-VAL-DOB. MOVE Stud-DateofBirth TO PROOFLIST-STUD-DOB MOVE DOB-YYYY TO STUD-DOB-YYYY MOVE Stud-DateofBirth TO STUD-DOB IF Stud-DateofBirth = SPACES THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-DOB MOVE 'STUDENT DATEOFBIRTH IS REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF STUD-DOB IS NOT NUMERIC THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-DOB MOVE 'STUDENT DATEOFBIRTH IS NOT NUMERIC' TO REMARKS(INDEX-CTR) ELSE IF Stud-DateofBirth <> SPACES THEN MOVE ' ' TO ASTERISK-STUD-DOB MOVE ' ' TO REMARKS(INDEX-CTR) IF DOB-YYYY >= '1800' and DOB-YYYY <= 9999 THEN IF DOB-MM = '01' OR '03' OR '05' OR '07' OR '08' OR '10' OR '12' IF DOB-DD <= 31 MOVE 'Y' TO VALID-FLAG ELSE ADD 1 TO INDEX-CTR MOVE 'INVALID DAY FORMAT' TO REMARKS(INDEX-CTR) END-IF ELSE IF DOB-MM = '04' OR '06' OR '09' OR '11' IF DOB-DD <= 30 MOVE 'Y' TO VALID-FLAG END-IF ELSE ADD 1 TO INDEX-CTR MOVE 'INVALID DAY FORMAT' TO REMARKS(INDEX-CTR) END-IF ELSE IF DOB-MM = '02' then *> checking of leap year DIVIDE STUD-DOB-YYYY BY 400 GIVING z REMAINDER z1 IF z1 = 0 MOVE 29 TO highdd ELSE DIVIDE STUD-DOB-YYYY BY 4 GIVING y REMAINDER y1 IF y1 = 0 DIVIDE STUD-DOB-YYYY BY 100 GIVING x REMAINDER x1 IF x1 = 0 MOVE '28' TO highdd ELSE MOVE '29' TO highdd IF DOB-DD <= highdd then ADD 1 TO VALID-COUNT MOVE 'Y' TO VALID-FLAG ELSE ADD 1 TO INDEX-CTR MOVE 'INVALID DAY FORMAT' TO REMARKS(INDEX-CTR) ELSE ADD 1 TO INDEX-CTR MOVE 'INVALID MONTH FORMAT' TO REMARKS(INDEX-CTR) ELSE ADD 1 TO INDEX-CTR MOVE 'INVALID YEAR FORMAT' TO REMARKS(INDEX-CTR) END-IF END-IF END-IF END-IF. 1800-EXIT. EXIT. 1900-VAL-COURSE. MOVE Stud-Course TO PROOFLIST-STUD-COURSE IF Stud-Course = ' ' THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-COURSE MOVE 'STUDENT COURSE IS REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-Course = 'AUTOMOTIVE' OR Stud-Course = 'MACHINERY' OR Stud-Course = 'COMP TECH' OR Stud-Course = 'ELECTRICAL' OR Stud-Course = 'DRESSMAKING' OR Stud-Course = 'COSMETOLOGY' OR Stud-Course = 'HAIRDRESSING' THEN MOVE ' ' TO ASTERISK-STUD-COURSE MOVE 'VALID ' TO REMARKS(INDEX-CTR) ELSE IF Stud-Course <> 'AUTOMOTIVE' OR Stud-Course <> 'MACHINERY' OR Stud-Course <> 'COMP TECH' OR Stud-Course <> 'ELECTRICAL' OR Stud-Course <> 'DRESSMAKING' OR Stud-Course <> 'COSMETOLOGY' OR Stud-Course <> 'HAIRDRESSING' THEN ADD 1 TO INDEX-CTR MOVE '*' TO ASTERISK-STUD-COURSE MOVE 'STUDENT COURSE INVALID FORMAT' TO REMARKS(INDEX-CTR). 1900-EXIT. EXIT. 2000-TC-A. IF Stud-Number = SPACES MOVE '*' TO ASTERISK-STUD-NO MOVE 'ALL FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-Surname = SPACES MOVE '*' TO ASTERISK-STUD-LNAME MOVE 'ALL FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-FirstName = SPACES MOVE '*' TO ASTERISK-STUD-FNAME MOVE 'ALL FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-MI = SPACES MOVE '*' TO ASTERISK-STUD-MI MOVE 'ALL FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-ContacInfo = SPACES MOVE '*' TO ASTERISK-STUD-CI MOVE 'ALL FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-DateofBirth = SPACES MOVE '*' TO ASTERISK-STUD-DOB MOVE 'ALL FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-Course = SPACES MOVE '*' TO ASTERISK-STUD-COURSE MOVE 'ALL FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE MOVE ' ' TO ASTERISK-STUD-NO MOVE ' ' TO ASTERISK-STUD-LNAME MOVE ' ' TO ASTERISK-STUD-FNAME MOVE ' ' TO ASTERISK-STUD-MI MOVE ' ' TO ASTERISK-STUD-CI MOVE ' ' TO ASTERISK-STUD-DOB MOVE ' ' TO ASTERISK-STUD-COURSE MOVE ' ' TO REMARKS(INDEX-CTR) END-IF. 2000-EXIT. EXIT. 2100-TC-W. IF Stud-Number = SPACES AND Stud-Surname = SPACES AND Stud-FirstName = SPACES AND Stud-MI = SPACES MOVE '*' TO ASTERISK-STUD-NO MOVE '*' TO ASTERISK-STUD-LNAME MOVE '*' TO ASTERISK-STUD-FNAME MOVE '*' TO ASTERISK-STUD-MI MOVE 'STUDENT NUMBER AND NAME ONLY REQUIRED' TO REMARKS(INDEX-CTR) ELSE MOVE ' ' TO ASTERISK-STUD-NO MOVE ' ' TO ASTERISK-STUD-LNAME MOVE ' ' TO ASTERISK-STUD-FNAME MOVE ' ' TO ASTERISK-STUD-MI. 2100-EXIT. EXIT. 2200-TC-E. IF Stud-Number = SPACES THEN MOVE '*' TO ASTERISK-STUD-NO MOVE 'STUDENT NUMBER ARE REQUIRED' TO REMARKS(INDEX-CTR) IF Stud-Surname = SPACES MOVE '*' TO ASTERISK-STUD-LNAME MOVE 'ATLEAST ONE FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-FirstName = SPACES MOVE '*' TO ASTERISK-STUD-FNAME MOVE 'ATLEAST ONE FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-MI = SPACES MOVE '*' TO ASTERISK-STUD-MI MOVE 'ATLEAST ONE FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-ContacInfo = SPACES MOVE '*' TO ASTERISK-STUD-CI MOVE 'ATLEAST ONE FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-DateofBirth = SPACES MOVE '*' TO ASTERISK-STUD-DOB MOVE 'ATLEAST ONE FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE IF Stud-Course = SPACES MOVE '*' TO ASTERISK-STUD-COURSE MOVE 'ATLEAST ONE FIELDS ARE REQUIRED' TO REMARKS(INDEX-CTR) ELSE MOVE ' ' TO ASTERISK-STUD-NO MOVE ' ' TO ASTERISK-STUD-LNAME MOVE ' ' TO ASTERISK-STUD-FNAME MOVE ' ' TO ASTERISK-STUD-MI MOVE ' ' TO ASTERISK-STUD-DOB MOVE ' ' TO ASTERISK-STUD-COURSE MOVE ' ' TO REMARKS(INDEX-CTR). 2200-EXIT. EXIT. 1214-WRITE-DETAILS. 1214-EXIT. EXIT. 1220-WRITE-PROOFLIST. IF LINE-COUNT = 01 OR LINE-COUNT = 66 COMPUTE PAGE-COUNT = PAGE-COUNT + 1 MOVE PAGE-COUNT TO PAGE-NO DISPLAY PROOFLIST-HEAD1 WRITE STUD-REPREC FROM PROOFLIST-HEAD1 DISPLAY PROOFLIST-HEAD2 WRITE STUD-REPREC FROM PROOFLIST-HEAD2 DISPLAY PROOFLIST-HEAD3 WRITE STUD-REPREC FROM PROOFLIST-HEAD3 DISPLAY PROOFLIST-HEAD4 WRITE STUD-REPREC FROM PROOFLIST-HEAD4. 1220-EXIT. EXIT.
Write, Run & Share COBOL code online using OneCompiler's COBOL online compiler for free. It’s a reliable and accessible playground to practice and run COBOL code with ease. The compiler supports classic COBOL syntax and is great for learning, teaching, and experimenting with business logic programs.
COBOL (Common Business-Oriented Language) is a high-level programming language developed in the 1950s. It is primarily used in business, finance, and administrative systems for companies and governments. COBOL is known for its English-like syntax and is still widely used in legacy enterprise systems.
The following is a simple COBOL program that prints a greeting:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, OneCompiler!".
STOP RUN.
In COBOL, input is typically handled using the ACCEPT
keyword. Here’s an example that takes user input and prints it back.
IDENTIFICATION DIVISION.
PROGRAM-ID. GREET.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 USER-NAME PIC A(30).
PROCEDURE DIVISION.
DISPLAY "Enter your name: ".
ACCEPT USER-NAME.
DISPLAY "Hello, " USER-NAME "!".
STOP RUN.
COBOL programs are divided into four divisions:
Variables are declared in the DATA DIVISION
using PIC
clauses.
01 AGE PIC 99.
01 NAME PIC A(20).
01 SALARY PIC 9(5)V99.
DISPLAY "Welcome to COBOL!".
ACCEPT USER-INPUT.
IF AGE >= 18
DISPLAY "Eligible to vote."
ELSE
DISPLAY "Not eligible."
END-IF.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
DISPLAY "Count: " I
END-PERFORM.
This guide provides a quick reference to COBOL programming syntax and features. Start coding in COBOL using OneCompiler’s COBOL online compiler today!