Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
← Back to Real-World Scenarios
Real-World Scenarios | Advanced | COBOL

Student Grade Management

Problem Description

Manage student records: add students, record marks for 5 subjects, calculate total/average/grade, show class topper.

Expected Output

Complete grade management with rankings

Hints

Use 2D table for marks. Track highest scorer.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. GRADES. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-STUDENTS. 05 WS-STU OCCURS 20 TIMES. 10 WS-STU-ID PIC 9(3). 10 WS-STU-NAME PIC X(20). 10 WS-MARKS PIC 9(3) OCCURS 5 TIMES. 10 WS-TOTAL PIC 9(4). 10 WS-AVG PIC 9(3)V99. 10 WS-GRADE PIC X(1). 01 WS-STU-COUNT PIC 9(2) VALUE 0. 01 WS-CHOICE PIC 9. 01 WS-I PIC 9(2). 01 WS-J PIC 9. 01 WS-HIGH-AVG PIC 9(3)V99 VALUE 0. 01 WS-TOPPER-IDX PIC 9(2). PROCEDURE DIVISION. PERFORM UNTIL WS-CHOICE = 4 DISPLAY "=== STUDENT GRADE SYSTEM ===" DISPLAY "1. ADD STUDENT WITH MARKS" DISPLAY "2. VIEW ALL STUDENTS" DISPLAY "3. SHOW CLASS TOPPER" DISPLAY "4. EXIT" ACCEPT WS-CHOICE EVALUATE WS-CHOICE WHEN 1 PERFORM ADD-STUDENT WHEN 2 PERFORM VIEW-ALL WHEN 3 PERFORM SHOW-TOPPER END-EVALUATE END-PERFORM. STOP RUN. ADD-STUDENT. ADD 1 TO WS-STU-COUNT. MOVE WS-STU-COUNT TO WS-STU-ID(WS-STU-COUNT). DISPLAY "NAME: ". ACCEPT WS-STU-NAME(WS-STU-COUNT). MOVE 0 TO WS-TOTAL(WS-STU-COUNT). PERFORM VARYING WS-J FROM 1 BY 1 UNTIL WS-J > 5 DISPLAY "ENTER MARKS FOR SUBJECT " WS-J ": " ACCEPT WS-MARKS(WS-STU-COUNT, WS-J) ADD WS-MARKS(WS-STU-COUNT, WS-J) TO WS-TOTAL(WS-STU-COUNT) END-PERFORM. COMPUTE WS-AVG(WS-STU-COUNT) = WS-TOTAL(WS-STU-COUNT) / 5. EVALUATE TRUE WHEN WS-AVG(WS-STU-COUNT) >= 90 MOVE "A" TO WS-GRADE(WS-STU-COUNT) WHEN WS-AVG(WS-STU-COUNT) >= 80 MOVE "B" TO WS-GRADE(WS-STU-COUNT) WHEN WS-AVG(WS-STU-COUNT) >= 70 MOVE "C" TO WS-GRADE(WS-STU-COUNT) WHEN WS-AVG(WS-STU-COUNT) >= 60 MOVE "D" TO WS-GRADE(WS-STU-COUNT) WHEN OTHER MOVE "F" TO WS-GRADE(WS-STU-COUNT) END-EVALUATE. IF WS-AVG(WS-STU-COUNT) > WS-HIGH-AVG MOVE WS-AVG(WS-STU-COUNT) TO WS-HIGH-AVG MOVE WS-STU-COUNT TO WS-TOPPER-IDX END-IF. DISPLAY "STUDENT ADDED! GRADE: " WS-GRADE(WS-STU-COUNT). VIEW-ALL. DISPLAY "ID NAME TOTAL AVG GRADE". PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-STU-COUNT DISPLAY WS-STU-ID(WS-I) " " WS-STU-NAME(WS-I) " " WS-TOTAL(WS-I) " " WS-AVG(WS-I) " " WS-GRADE(WS-I) END-PERFORM. SHOW-TOPPER. IF WS-STU-COUNT > 0 DISPLAY "CLASS TOPPER: " WS-STU-NAME(WS-TOPPER-IDX) DISPLAY "AVERAGE: " WS-AVG(WS-TOPPER-IDX) ELSE DISPLAY "NO STUDENTS ADDED YET" END-IF.

Explanation:

Multi-dimensional table usage, grade calculation, finding maximum.