Program to print presence report based on provided data.
IDENTIFICATION DIVISION. PROGRAM-ID. PRESENCE-RPT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILE-READ ASSIGN TO DISK ORGANIZATION IS LINE SEQUENTIAL. SELECT FILE-WRITE ASSIGN TO DISK ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD FILE-READ VALUE OF FILE-ID "ATENDNCE.DAT". 01 F-REC-IN. 02 F-SRNO PIC 999. 02 F-DATE PIC 999999. 02 F-STATUS PIC X OCCURS 60 TIMES. FD FILE-WRITE VALUE OF FILE-ID "ATENDNCE.RPT". 01 F-REC-OUT PIC X(78). WORKING-STORAGE SECTION. 77 L-COUNT PIC 99 VALUE 08. 77 EOF PIC X VALUE 'N'. 77 PRE-COUNTER PIC 999 VALUE ZEROS OCCURS 60 TIMES. 77 IND PIC 99 VALUE 1. 77 TEMP-PER PIC 99V99. *12345678901234567890123456789012345678901234567890123456789012345678901234567890 *<-----------------------------PRESENCE REPORT--------------------------------> * DATE : MM/DD/YY * PAGE : 99 * LACTURES : 999 *<----------------------------------------------------------------------------> * ROLL NO. TOTAL ATTENDENCE PERCENTAGE * ----------------------------------------------------------------------------- * 99 999 99.99 77 HEAD-LINE1 PIC X(78) VALUE"<-----------------------------PRESENCE REPORT--------- - "----------------------->". 01 HEAD-LINE2. 05 S1 PIC X(56) VALUE" DATE - " :". 05 DATE-OUT. 10 DD2 PIC 99. 10 PIC X VALUE '/'. 10 MM2 PIC 99. 10 PIC X VALUE '/'. 10 YY2 PIC 99. 01 HEAD-LINE3. 05 S2 PIC X(56) VALUE" PAGE - ": ". 05 PAGE-COUNT PIC 99 VALUE 1. * 01 HEAD-LINE4. * 05 S1 PIC X(60) * VALUE" LACTU *- "RES : ". 77 COUNTER PIC 99 VALUE ZERO. 77 HEAD-LINE5 PIC X(78) VALUE"<----------------------------------------------------- - "----------------------->". 77 HEAD-LINE6 PIC X(78) VALUE" ROLL NO. TOTAL ATTENDENCE P - "ERCENTAGE". 77 DASH-LINE PIC X(78) VALUE ALL "-". 01 DATE-IN. 05 YY1 PIC 99. 05 MM1 PIC 99. 05 DD1 PIC 99. 01 REC-OUT. 02 PIC X(19). 02 ROLLNO PIC Z9. 02 PIC X(13). 02 TOTAL-ATTEN PIC ZZZ9. 02 PIC X(17). 02 PER-ATTEN PIC Z9.99. PROCEDURE DIVISION. BEGIN. OPEN INPUT FILE-READ. OPEN OUTPUT FILE-WRITE. PERFORM DATE-PARA. PERFORM HEADING-PARA. PERFORM UNTIL EOF = 'Y' READ FILE-READ AT END MOVE 'Y' TO EOF NOT AT END ADD 1 TO COUNTER PERFORM PROCESS-PARA END-READ END-PERFORM. PERFORM MOVE-PARA. CLOSE FILE-READ. CLOSE FILE-WRITE. STOP RUN. DATE-PARA. ACCEPT DATE-IN FROM DATE. MOVE DD1 TO DD2. MOVE MM1 TO MM2. MOVE YY1 TO YY2. HEADING-PARA. WRITE F-REC-OUT FROM HEAD-LINE1. WRITE F-REC-OUT FROM HEAD-LINE2. WRITE F-REC-OUT FROM HEAD-LINE3. * WRITE F-REC-OUT FROM HEAD-LINE4. WRITE F-REC-OUT FROM HEAD-LINE5. WRITE F-REC-OUT FROM HEAD-LINE6. WRITE F-REC-OUT FROM DASH-LINE. PROCESS-PARA. MOVE 1 TO IND PERFORM 60 TIMES IF F-STATUS (IND) = 'P' ADD 1 TO PRE-COUNTER (IND) ADD 1 TO IND ELSE ADD 1 TO IND END-IF END-PERFORM. MOVE-PARA. MOVE 1 TO IND PERFORM 60 TIMES MOVE IND TO ROLLNO MOVE PRE-COUNTER (IND) TO TOTAL-ATTEN COMPUTE TEMP-PER = (100 * PRE-COUNTER (IND) ) / COUNTER MOVE TEMP-PER TO PER-ATTEN WRITE F-REC-OUT FROM REC-OUT ADD 1 TO L-COUNT IF L-COUNT > 23 ADD 1 TO PAGE-COUNT MOVE 8 TO L-COUNT PERFORM HEADING-PARA END-IF ADD 1 TO IND END-PERFORM.