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.