IDENTIFICATION DIVISION.
PROGRAM-ID. PROG004.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE1 ASSIGN TO DD1
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS INFS1.
SELECT INFILE2 ASSIGN TO DD2
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS INFS2.
SELECT OUTFILE ASSIGN TO DD3
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS OUTFS.
DATA DIVISION.
FILE SECTION.
FD INFILE1.
01 FS-INREC1.
88 IN1-EOF VALUE HIGH-VALUES.
05 FS-ID PIC 9(3).
05 FILLER PIC X(1).
05 FS-NAME PIC X(25).
05 FILLER PIC X(1).
05 FS-CLASS PIC X(5).
05 FILLER PIC X(45).
FD INFILE2.
01 FS-INREC2.
88 IN2-EOF VALUE HIGH-VALUES.
05 IS-ID PIC 9(3).
05 FILLER PIC X.
05 IS-SUB1M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB2M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB3M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB4M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB5M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB6M PIC 9(3).
05 FILLER PIC X(53).
FD OUTFILE.
01 FS-OUTREC.
05 OS-ID PIC 9(3).
05 FILLER PIC X.
05 OS-NAME PIC X(25).
05 FILLER PIC X.
05 OS-CLASS PIC X(5).
05 FILLER PIC X.
05 OS-TOTAL PIC 9(3).
05 FILLER PIC X.
05 OS-GRADE PIC X(2).
05 FILLER PIC X(38).
WORKING-STORAGE SECTION.
77 INFS1 PIC XX.
77 INFS2 PIC XX.
77 OUTFS PIC XX.
01 TOTAL-M PIC 9(3).
01 AVG-M PIC 9(3).
01 GRADE-M PIC X(2).
01 STUDMRK1 PIC 9(2).
01 STUDMRK2 PIC 9(2).
01 STUDMRK3 PIC 9(2).
01 STUDMRK4 PIC 9(2).
01 STUDMRK5 PIC 9(2).
01 STUDMRK6 PIC 9(2).
EXEC SQL
INCLUDE STUDBLE
END-EXEC.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
EXEC SQL
DECLARE CUR_STU CURSOR FOR SELECT STUD_ID,STUD_NAME,
STUD_CLASS,STUD_MRK1,
STUD_MRK2,STUD_MRK3,STUD_MRK4,STUD_MRK5
STUD_MRK6 FROM OZA062.STUDBLE
END-EXEC.
PROCEDURE DIVISION.
*** MAIN PARA IS SUSED TO DIRECT THE FLOW FOR THE PROGRAM IN ***
*** RIGHT DIRECTION ***
001-MAIN-PARA.
PERFORM 002-OPEN-PARA.
PERFORM 003-READ-PARA UNTIL IN1-EOF.
PERFORM 009-CLOSE-PARA.
*** OPEN PARA WHERE ALL THE FLAT FILES ARE OPENED ***
002-OPEN-PARA.
OPEN INPUT INFILE1.
IF INFS1 NOT = '00'
DISPLAY "ERROR IN OPEN INFILE1 : " INFS1
PERFORM 009-CLOSE-PARA
END-IF.
OPEN INPUT INFILE2.
IF INFS2 NOT = '00'
DISPLAY "ERROR IN OPEN INFILE2 : " INFS2
PERFORM 009-CLOSE-PARA
END-IF.
OPEN OUTPUT OUTFILE.
IF OUTFS NOT = '00'
DISPLAY "ERROR IN OPEN OUTFILE : " OUTFS
END-IF.
EXEC SQL
OPEN CUR_STU
END-EXEC.
IF SQLCODE NOT = 0 THEN
DISPLAY "ERROR IN OPEN CURSOR" SQLCODE
END-IF.
*** READ PARA IS USED TO READ THE FIRST INFILE TO CHECK ***
003-READ-PARA.
READ INFILE1 AT END PERFORM 005-FETCH-PARA.
IF INFS1 NOT = '00' THEN
DISPLAY "ERROR IN READING INFILE1: " INFS1
PERFORM 009-CLOSE-PARA
ELSE
PERFORM 031-CHECK-PARA
END-IF.
*** CHECK PARA IS TO CHECK WEATHER THE FILE IS IN FILE2 ***
031-CHECK-PARA.
READ INFILE2 AT END SET IN2-EOF TO TRUE
NOT AT END
IF FS-ID = IS-ID THEN
DISPLAY "INSERT PROCEED"
PERFORM 004-INSERT-PARA
ELSE
DISPLAY "FILE NOT MATCH"
PERFORM 032-LCHECK-PARA
END-IF.
*** LCHECK PARA IS TO CHECK WEATHER THE FILE IS PRESENT OR NOR ***
032-LCHECK-PARA.
READ INFILE2 PERFORM UNTIL FS-ID = IS-ID
END-PERFORM.
IF FS-ID = IS-ID THEN
DISPLAY "FILE FOUND AT LCHECK"
PERFORM 004-INSERT-PARA
ELSE
DISPLAY "FILE IS NOT PRESENT"
END-IF.
*** HERE THE VALUES ARE INSERTED IN DATABASE TABLE ***
004-INSERT-PARA.
MOVE FS-ID TO STUD-ID.
MOVE FS-NAME TO STUD-NAME.
MOVE FS-CLASS TO STUD-CLASS.
MOVE IS-SUB1M TO STUD-MRK1.
MOVE IS-SUB2M TO STUD-MRK2.
MOVE IS-SUB3M TO STUD-MRK3.
MOVE IS-SUB4M TO STUD-MRK4.
MOVE IS-SUB5M TO STUD-MRK5.
MOVE IS-SUB6M TO STUD-MRK6.
EXEC SQL
INSERT INTO OZA062.STUDBLE VALUES(:STUD-ID,:STUD-NAME,
:STUD-CLASS,:STUD-MRK1,:STUD-MRK2,:STUD-MRK3,
:STUD-MRK4,:STUD-MRK5,:STUD-MRK6)
END-EXEC.
IF SQLCODE NOT = 0 THEN
DISPLAY "ERROR SQLCODE: " SQLCODE
PERFORM 009-CLOSE-PARA
ELSE
DISPLAY "INSERT SUCCESS"
END-IF.
*** FETCH PARA IS USED TO FETCH THE VAUES FROM THE TABLE ***
005-FETCH-PARA.
EXEC SQL
FETCH CUR_STU INTO :STUD-ID,:STUD-NAME,:STUD-CLASS,
:STUD-MRK1,:STUD-MRK2,:STUD-MRK3,:STUD-MRK4,
:STUD-MRK5,:STUD-MRK6
END-EXEC.
IF SQLCODE = 0 THEN
DISPLAY "FETCH SUCCESS"
MOVE STUD-MRK1 TO STUDMRK1
DISPLAY STUDMRK1
MOVE STUD-MRK2 TO STUDMRK2
MOVE STUD-MRK3 TO STUDMRK3
MOVE STUD-MRK4 TO STUDMRK4
MOVE STUD-MRK5 TO STUDMRK5
MOVE STUD-MRK6 TO STUDMRK6
PERFORM 006-CALC-PARA
ELSE
DISPLAY "ERROR IN FETCH PARA"
PERFORM 009-CLOSE-PARA
END-IF.
*** CALC PARA IS USED TO CALCULATE THE VALUES FOR GRADE ***
006-CALC-PARA.
IF STUDMRK1 > 35 AND STUDMRK2 > 35 THEN
IF STUDMRK3 > 35 AND STUDMRK4 > 35 THEN
IF STUDMRK5 > 35 AND STUDMRK6 > 35 THEN
DISPLAY "WRITE PARA"
PERFORM 007-WRITE-PARA
ELSE
DISPLAY "CALCULATION STARTED"
PERFORM 005-FETCH-PARA
END-IF
ELSE
PERFORM 005-FETCH-PARA
END-IF
ELSE
PERFORM 007-WRITE-PARA
END-IF.
* EVALUATE STUD-MRK1 >= 35 ALSO STUD-MRK2 >= 35 ALSO
* STUD-MRK3 >= 35 ALSO STUD-MRK4 >= 35 ALSO
* STUD-MRK5 >= 35 ALSO STUD-MRK6 >= 35
* WHEN TRUE ALSO TRUE ALSO TRUE ALSO TRUE ALSO TRUE
* ALSO TRUE PERFORM 007-WRITE-PARA
* WHEN OTHER PERFORM 005-FETCH-PARA
* END-EVALUATE.
*** WRIRE PARA HERE THE VALUES ARE WRITTEN INTO THE OUFILE ***
007-WRITE-PARA.
DISPLAY "WRITING STARTED".
COMPUTE TOTAL-M = STUDMRK1 + STUDMRK2 + STUDMRK3 +
STUDMRK4 + STUDMRK5 + STUDMRK6.
COMPUTE AVG-M = TOTAL-M / 6.
EVALUATE AVG-M
WHEN 35 THRU 60 MOVE 'C' TO GRADE-M
WHEN 61 THRU 70 MOVE 'B' TO GRADE-M
WHEN 71 THRU 90 MOVE 'A' TO GRADE-M
WHEN 91 THRU 100 MOVE 'A+' TO GRADE-M
END-EVALUATE.
MOVE STUD-ID TO OS-ID.
MOVE STUD-NAME TO OS-NAME.
MOVE STUD-CLASS TO OS-CLASS.
MOVE TOTAL-M TO OS-TOTAL.
MOVE GRADE-M TO OS-GRADE.
WRITE FS-OUTREC.
PERFORM 005-FETCH-PARA.
*** HERE THE END OF FILE AND TABLE ***
009-CLOSE-PARA.
EXEC SQL
CLOSE CUR_STU
END-EXEC.
CLOSE INFILE1 INFILE2 OUTFILE.
STOP RUN.
PROGRAM-ID. PROG004.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE1 ASSIGN TO DD1
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS INFS1.
SELECT INFILE2 ASSIGN TO DD2
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS INFS2.
SELECT OUTFILE ASSIGN TO DD3
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS OUTFS.
DATA DIVISION.
FILE SECTION.
FD INFILE1.
01 FS-INREC1.
88 IN1-EOF VALUE HIGH-VALUES.
05 FS-ID PIC 9(3).
05 FILLER PIC X(1).
05 FS-NAME PIC X(25).
05 FILLER PIC X(1).
05 FS-CLASS PIC X(5).
05 FILLER PIC X(45).
FD INFILE2.
01 FS-INREC2.
88 IN2-EOF VALUE HIGH-VALUES.
05 IS-ID PIC 9(3).
05 FILLER PIC X.
05 IS-SUB1M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB2M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB3M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB4M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB5M PIC 9(3).
05 FILLER PIC X.
05 IS-SUB6M PIC 9(3).
05 FILLER PIC X(53).
FD OUTFILE.
01 FS-OUTREC.
05 OS-ID PIC 9(3).
05 FILLER PIC X.
05 OS-NAME PIC X(25).
05 FILLER PIC X.
05 OS-CLASS PIC X(5).
05 FILLER PIC X.
05 OS-TOTAL PIC 9(3).
05 FILLER PIC X.
05 OS-GRADE PIC X(2).
05 FILLER PIC X(38).
WORKING-STORAGE SECTION.
77 INFS1 PIC XX.
77 INFS2 PIC XX.
77 OUTFS PIC XX.
01 TOTAL-M PIC 9(3).
01 AVG-M PIC 9(3).
01 GRADE-M PIC X(2).
01 STUDMRK1 PIC 9(2).
01 STUDMRK2 PIC 9(2).
01 STUDMRK3 PIC 9(2).
01 STUDMRK4 PIC 9(2).
01 STUDMRK5 PIC 9(2).
01 STUDMRK6 PIC 9(2).
EXEC SQL
INCLUDE STUDBLE
END-EXEC.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
EXEC SQL
DECLARE CUR_STU CURSOR FOR SELECT STUD_ID,STUD_NAME,
STUD_CLASS,STUD_MRK1,
STUD_MRK2,STUD_MRK3,STUD_MRK4,STUD_MRK5
STUD_MRK6 FROM OZA062.STUDBLE
END-EXEC.
PROCEDURE DIVISION.
*** MAIN PARA IS SUSED TO DIRECT THE FLOW FOR THE PROGRAM IN ***
*** RIGHT DIRECTION ***
001-MAIN-PARA.
PERFORM 002-OPEN-PARA.
PERFORM 003-READ-PARA UNTIL IN1-EOF.
PERFORM 009-CLOSE-PARA.
*** OPEN PARA WHERE ALL THE FLAT FILES ARE OPENED ***
002-OPEN-PARA.
OPEN INPUT INFILE1.
IF INFS1 NOT = '00'
DISPLAY "ERROR IN OPEN INFILE1 : " INFS1
PERFORM 009-CLOSE-PARA
END-IF.
OPEN INPUT INFILE2.
IF INFS2 NOT = '00'
DISPLAY "ERROR IN OPEN INFILE2 : " INFS2
PERFORM 009-CLOSE-PARA
END-IF.
OPEN OUTPUT OUTFILE.
IF OUTFS NOT = '00'
DISPLAY "ERROR IN OPEN OUTFILE : " OUTFS
END-IF.
EXEC SQL
OPEN CUR_STU
END-EXEC.
IF SQLCODE NOT = 0 THEN
DISPLAY "ERROR IN OPEN CURSOR" SQLCODE
END-IF.
*** READ PARA IS USED TO READ THE FIRST INFILE TO CHECK ***
003-READ-PARA.
READ INFILE1 AT END PERFORM 005-FETCH-PARA.
IF INFS1 NOT = '00' THEN
DISPLAY "ERROR IN READING INFILE1: " INFS1
PERFORM 009-CLOSE-PARA
ELSE
PERFORM 031-CHECK-PARA
END-IF.
*** CHECK PARA IS TO CHECK WEATHER THE FILE IS IN FILE2 ***
031-CHECK-PARA.
READ INFILE2 AT END SET IN2-EOF TO TRUE
NOT AT END
IF FS-ID = IS-ID THEN
DISPLAY "INSERT PROCEED"
PERFORM 004-INSERT-PARA
ELSE
DISPLAY "FILE NOT MATCH"
PERFORM 032-LCHECK-PARA
END-IF.
*** LCHECK PARA IS TO CHECK WEATHER THE FILE IS PRESENT OR NOR ***
032-LCHECK-PARA.
READ INFILE2 PERFORM UNTIL FS-ID = IS-ID
END-PERFORM.
IF FS-ID = IS-ID THEN
DISPLAY "FILE FOUND AT LCHECK"
PERFORM 004-INSERT-PARA
ELSE
DISPLAY "FILE IS NOT PRESENT"
END-IF.
*** HERE THE VALUES ARE INSERTED IN DATABASE TABLE ***
004-INSERT-PARA.
MOVE FS-ID TO STUD-ID.
MOVE FS-NAME TO STUD-NAME.
MOVE FS-CLASS TO STUD-CLASS.
MOVE IS-SUB1M TO STUD-MRK1.
MOVE IS-SUB2M TO STUD-MRK2.
MOVE IS-SUB3M TO STUD-MRK3.
MOVE IS-SUB4M TO STUD-MRK4.
MOVE IS-SUB5M TO STUD-MRK5.
MOVE IS-SUB6M TO STUD-MRK6.
EXEC SQL
INSERT INTO OZA062.STUDBLE VALUES(:STUD-ID,:STUD-NAME,
:STUD-CLASS,:STUD-MRK1,:STUD-MRK2,:STUD-MRK3,
:STUD-MRK4,:STUD-MRK5,:STUD-MRK6)
END-EXEC.
IF SQLCODE NOT = 0 THEN
DISPLAY "ERROR SQLCODE: " SQLCODE
PERFORM 009-CLOSE-PARA
ELSE
DISPLAY "INSERT SUCCESS"
END-IF.
*** FETCH PARA IS USED TO FETCH THE VAUES FROM THE TABLE ***
005-FETCH-PARA.
EXEC SQL
FETCH CUR_STU INTO :STUD-ID,:STUD-NAME,:STUD-CLASS,
:STUD-MRK1,:STUD-MRK2,:STUD-MRK3,:STUD-MRK4,
:STUD-MRK5,:STUD-MRK6
END-EXEC.
IF SQLCODE = 0 THEN
DISPLAY "FETCH SUCCESS"
MOVE STUD-MRK1 TO STUDMRK1
DISPLAY STUDMRK1
MOVE STUD-MRK2 TO STUDMRK2
MOVE STUD-MRK3 TO STUDMRK3
MOVE STUD-MRK4 TO STUDMRK4
MOVE STUD-MRK5 TO STUDMRK5
MOVE STUD-MRK6 TO STUDMRK6
PERFORM 006-CALC-PARA
ELSE
DISPLAY "ERROR IN FETCH PARA"
PERFORM 009-CLOSE-PARA
END-IF.
*** CALC PARA IS USED TO CALCULATE THE VALUES FOR GRADE ***
006-CALC-PARA.
IF STUDMRK1 > 35 AND STUDMRK2 > 35 THEN
IF STUDMRK3 > 35 AND STUDMRK4 > 35 THEN
IF STUDMRK5 > 35 AND STUDMRK6 > 35 THEN
DISPLAY "WRITE PARA"
PERFORM 007-WRITE-PARA
ELSE
DISPLAY "CALCULATION STARTED"
PERFORM 005-FETCH-PARA
END-IF
ELSE
PERFORM 005-FETCH-PARA
END-IF
ELSE
PERFORM 007-WRITE-PARA
END-IF.
* EVALUATE STUD-MRK1 >= 35 ALSO STUD-MRK2 >= 35 ALSO
* STUD-MRK3 >= 35 ALSO STUD-MRK4 >= 35 ALSO
* STUD-MRK5 >= 35 ALSO STUD-MRK6 >= 35
* WHEN TRUE ALSO TRUE ALSO TRUE ALSO TRUE ALSO TRUE
* ALSO TRUE PERFORM 007-WRITE-PARA
* WHEN OTHER PERFORM 005-FETCH-PARA
* END-EVALUATE.
*** WRIRE PARA HERE THE VALUES ARE WRITTEN INTO THE OUFILE ***
007-WRITE-PARA.
DISPLAY "WRITING STARTED".
COMPUTE TOTAL-M = STUDMRK1 + STUDMRK2 + STUDMRK3 +
STUDMRK4 + STUDMRK5 + STUDMRK6.
COMPUTE AVG-M = TOTAL-M / 6.
EVALUATE AVG-M
WHEN 35 THRU 60 MOVE 'C' TO GRADE-M
WHEN 61 THRU 70 MOVE 'B' TO GRADE-M
WHEN 71 THRU 90 MOVE 'A' TO GRADE-M
WHEN 91 THRU 100 MOVE 'A+' TO GRADE-M
END-EVALUATE.
MOVE STUD-ID TO OS-ID.
MOVE STUD-NAME TO OS-NAME.
MOVE STUD-CLASS TO OS-CLASS.
MOVE TOTAL-M TO OS-TOTAL.
MOVE GRADE-M TO OS-GRADE.
WRITE FS-OUTREC.
PERFORM 005-FETCH-PARA.
*** HERE THE END OF FILE AND TABLE ***
009-CLOSE-PARA.
EXEC SQL
CLOSE CUR_STU
END-EXEC.
CLOSE INFILE1 INFILE2 OUTFILE.
STOP RUN.
No comments:
Post a Comment