School management system in cobol using file operations. PROGRAM WHICH READ THE MARKS FROM THE FILE GENERATE THE TOTAL,FIND PERSENTAGE & FIND CLASS AND THEN WRITE THE MARKSHEET IN THE FILE.
IDENTIFICATION DIVISION. PROGRAM-ID.file-read-write. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT in-emp ASSIGN TO DISK ORGANIZATION IS LINE SEQUENTIAL. SELECT out-emp ASSIGN TO DISK ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD in-emp VALUE OF FILE-ID IS "empin.txt". 01 inemp-rec. 05 rno1 PIC 99. 05 name1 PIC x(20). 05 marks1 PIC 99 OCCURS 5 TIMES. FD out-emp VALUE OF FILE-ID IS "empout.txt". 01 outemp-rec PIC X(80). WORKING-STORAGE SECTION. 01 eof PIC x value'n'. 01 I PIC 9. 01 HEAD. 05 H1 PIC x(30) VALUE "ROLL NAME ". 05 H2 PIC x(36) VALUE "<---MARKS---> TOTAL PERSENTAGE". 05 H3 PIC x(10) VALUE " RESULT". 01 HEAD2. 05 He1 PIC x(26) VALUE " NO ". 05 He2 PIC X(35) VALUE " FOP FCO BDP BMA DMS". 01 SUM1. 05 F1 PIC X(52) VALUE "DISTICTION FIRST SECOND PASS FAIL". 01 DASH. 05 PIC X(80) VALUE ALL "-". 01 det-line. 05 drno PIC Z99. 05 FILLER PIC XX. 05 dname PIC X(22). 05 dmarks PIC ZZ99 OCCURS 5 TIMES. 05 dtot PIC zzzzzzz99. 05 dper PIC zzzzzzz9.99. 05 FILLER PIC XX. 05 dresult PIC X(12). 01 total PIC 999. 01 per PIC 999V99. 01 flag PIC 9 VALUE 0. 01 TOTAL1. 02 DT PIC 9 OCCURS 5 TIMES. 01 TOTAL2. 02 DT1 PIC ZZZZZZ9 OCCURS 5 TIMES. PROCEDURE DIVISION. para1. PERFORM OPEN INPUT in-emp. OPEN OUTPUT out-emp. PERFORM READ1. CLOSE in-emp. CLOSE out-emp. STOP-RUN. READ1. PERFORM VARYING I FROM 1 BY 1 UNTIL I>5 MOVE 0 TO DT(i) MOVE 0 TO DT1(i) END-PERFORM. READ in-emp AT END MOVE 'y' TO eof END-READ. WRITE outemp-rec FROM HEAD. WRITE outemp-rec FROM HEAD2. WRITE outemp-rec FROM DASH. PERFORM UNTIL eof='y' PERFORM WRITE1 READ in-emp AT END MOVE 'y' TO eof END-READ END-PERFORM. WRITE outemp-rec FROM DASH. WRITE outemp-rec FROM SUM1. PERFORM VARYING I FROM 1 BY 1 UNTIL I>5 MOVE DT(i) TO DT1(i) END-PERFORM. WRITE outemp-rec FROM TOTAL2. WRITE1. MOVE 1 TO flag. MOVE 0 TO total. MOVE rno1 TO drno. MOVE name1 TO dname. PERFORM VARYING i FROM 1 BY 1 UNTIL i>5 MOVE marks1(i) TO dmarks(i) ADD marks1(i) TO total IF marks1(i) < 40 MOVE 0 TO flag END-IF END-PERFORM. MOVE total TO dtot. COMPUTE per = total * 100 / 500. MOVE per TO dper. IF flag=1 THEN IF per>=70 AND per<=100 THEN MOVE "distinction" TO dresult ADD 1 TO DT(1) ELSE IF per>=60 THEN MOVE "first class" TO dresult ADD 1 TO DT(2) ELSE IF PER>=50 THEN MOVE "second class" TO dresult ADD 1 TO DT(3) ELSE IF PER>=45 THEN MOVE "pass class" TO dresult ADD 1 TO DT(4) ELSE MOVE "fail" TO dresult ADD 1 TO DT(5) ELSE MOVE "fail" TO dresult ADD 1 TO DT(5). WRITE outemp-rec FROM det-line. ************************INPUT********************************** 01vd 7585778085 02hemal 6550707050 03bharat 3050605545 ************************OUTPUT********************************** ROLL NAME <---MARKS---> TOTAL PERSENTAGE RESULT NO FOP FCO BDP BMA DMS -------------------------------------------------------------------------------- 01 vd 75 85 77 80 85 402 80.40 distinction 02 hemal 65 50 70 70 50 305 61.00 first class 03 bharat 30 50 60 55 45 240 48.00 fail -------------------------------------------------------------------------------- DISTICTION FIRST SECOND PASS FAIL 1 1 0 0 1