The EVALUATE statement represents a fundamental component of multi-way selection and case logic in COBOL, serving as a sophisticated alternative to nested IF statements for complex conditional processing. This statement embodies structured programming principles by providing clear, readable case-based logic, enabling efficient multi-condition evaluation, and supporting the development of maintainable decision-making structures that can handle complex business logic with precision and clarity.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141IDENTIFICATION DIVISION. PROGRAM-ID. EVALUATE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 SELECTION-VARIABLES. 05 GRADE-LETTER PIC X. 05 NUMERIC-SCORE PIC 9(3). 05 STUDENT-STATUS PIC X(10). 05 DEPARTMENT-CODE PIC X(3). 05 EMPLOYEE-LEVEL PIC 9(2). 01 PROCESSING-RESULTS. 05 GRADE-DESCRIPTION PIC X(20). 05 SALARY-RANGE PIC X(15). 05 PROCESSING-MESSAGE PIC X(50). PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM DEMONSTRATE-SIMPLE-EVALUATE PERFORM DEMONSTRATE-RANGE-EVALUATE PERFORM DEMONSTRATE-MULTIPLE-SUBJECT-EVALUATE PERFORM DEMONSTRATE-COMPLEX-EVALUATE STOP RUN. DEMONSTRATE-SIMPLE-EVALUATE. DISPLAY 'Demonstrating simple EVALUATE...' MOVE 'A' TO GRADE-LETTER EVALUATE GRADE-LETTER WHEN 'A' MOVE 'Excellent' TO GRADE-DESCRIPTION DISPLAY 'Grade A: Excellent performance' WHEN 'B' MOVE 'Good' TO GRADE-DESCRIPTION DISPLAY 'Grade B: Good performance' WHEN 'C' MOVE 'Average' TO GRADE-DESCRIPTION DISPLAY 'Grade C: Average performance' WHEN 'D' MOVE 'Below Average' TO GRADE-DESCRIPTION DISPLAY 'Grade D: Below average performance' WHEN 'F' MOVE 'Failing' TO GRADE-DESCRIPTION DISPLAY 'Grade F: Failing performance' WHEN OTHER MOVE 'Invalid Grade' TO GRADE-DESCRIPTION DISPLAY 'Invalid grade entered' END-EVALUATE. DEMONSTRATE-RANGE-EVALUATE. DISPLAY 'Demonstrating range EVALUATE...' MOVE 95 TO NUMERIC-SCORE EVALUATE NUMERIC-SCORE WHEN 90 THRU 100 MOVE 'A' TO GRADE-LETTER MOVE 'Outstanding' TO GRADE-DESCRIPTION DISPLAY 'Score ' NUMERIC-SCORE ': Grade A' WHEN 80 THRU 89 MOVE 'B' TO GRADE-LETTER MOVE 'Good' TO GRADE-DESCRIPTION DISPLAY 'Score ' NUMERIC-SCORE ': Grade B' WHEN 70 THRU 79 MOVE 'C' TO GRADE-LETTER MOVE 'Satisfactory' TO GRADE-DESCRIPTION DISPLAY 'Score ' NUMERIC-SCORE ': Grade C' WHEN 60 THRU 69 MOVE 'D' TO GRADE-LETTER MOVE 'Needs Improvement' TO GRADE-DESCRIPTION DISPLAY 'Score ' NUMERIC-SCORE ': Grade D' WHEN 0 THRU 59 MOVE 'F' TO GRADE-LETTER MOVE 'Failing' TO GRADE-DESCRIPTION DISPLAY 'Score ' NUMERIC-SCORE ': Grade F' WHEN OTHER MOVE 'Invalid Score' TO GRADE-DESCRIPTION DISPLAY 'Invalid score: ' NUMERIC-SCORE END-EVALUATE. DEMONSTRATE-MULTIPLE-SUBJECT-EVALUATE. DISPLAY 'Demonstrating multiple subject EVALUATE...' MOVE 'IT' TO DEPARTMENT-CODE MOVE 5 TO EMPLOYEE-LEVEL EVALUATE DEPARTMENT-CODE ALSO EMPLOYEE-LEVEL WHEN 'IT' ALSO 1 THRU 3 MOVE 'Junior IT' TO SALARY-RANGE DISPLAY 'Junior IT Staff: Entry level salary' WHEN 'IT' ALSO 4 THRU 6 MOVE 'Senior IT' TO SALARY-RANGE DISPLAY 'Senior IT Staff: Mid-level salary' WHEN 'IT' ALSO 7 THRU 10 MOVE 'IT Manager' TO SALARY-RANGE DISPLAY 'IT Management: Senior level salary' WHEN 'HR' ALSO 1 THRU 3 MOVE 'Junior HR' TO SALARY-RANGE DISPLAY 'Junior HR Staff: Entry level salary' WHEN 'HR' ALSO 4 THRU 6 MOVE 'Senior HR' TO SALARY-RANGE DISPLAY 'Senior HR Staff: Mid-level salary' WHEN 'FIN' ALSO 1 THRU 3 MOVE 'Junior Finance' TO SALARY-RANGE DISPLAY 'Junior Finance Staff: Entry level salary' WHEN OTHER MOVE 'Unclassified' TO SALARY-RANGE DISPLAY 'Unclassified position' END-EVALUATE. DEMONSTRATE-COMPLEX-EVALUATE. DISPLAY 'Demonstrating complex EVALUATE...' MOVE 'ACTIVE' TO STUDENT-STATUS MOVE 85 TO NUMERIC-SCORE EVALUATE TRUE WHEN STUDENT-STATUS = 'ACTIVE' AND NUMERIC-SCORE >= 90 MOVE 'Dean''s List Candidate' TO PROCESSING-MESSAGE DISPLAY 'Eligible for Dean''s List' WHEN STUDENT-STATUS = 'ACTIVE' AND NUMERIC-SCORE >= 80 MOVE 'Honor Roll Candidate' TO PROCESSING-MESSAGE DISPLAY 'Eligible for Honor Roll' WHEN STUDENT-STATUS = 'ACTIVE' AND NUMERIC-SCORE >= 70 MOVE 'Good Standing' TO PROCESSING-MESSAGE DISPLAY 'Student in good standing' WHEN STUDENT-STATUS = 'ACTIVE' AND NUMERIC-SCORE >= 60 MOVE 'Academic Warning' TO PROCESSING-MESSAGE DISPLAY 'Student on academic warning' WHEN STUDENT-STATUS = 'ACTIVE' AND NUMERIC-SCORE < 60 MOVE 'Academic Probation' TO PROCESSING-MESSAGE DISPLAY 'Student on academic probation' WHEN STUDENT-STATUS = 'INACTIVE' MOVE 'Not Enrolled' TO PROCESSING-MESSAGE DISPLAY 'Student not currently enrolled' WHEN OTHER MOVE 'Status Unknown' TO PROCESSING-MESSAGE DISPLAY 'Unable to determine student status' END-EVALUATE.