Question: I get some error in my cobol program : IDENTIFICATION DIVISION. PROGRAM-ID. STUDENT-REPORT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUFILE-IN-FILE ASSIGN TO STUFILE.txt ORGANIZATION IS
I get some error in my cobol program :
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT-REPORT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUFILE-IN-FILE ASSIGN TO "STUFILE.txt"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT PROGRAM-IN-FILE ASSIGN TO "PROGRAM.txt"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT REPORT-OUT-FILE ASSIGN TO "STUDENT-REPORT.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUFILE-IN-FILE.
01 STUDENT-RECORD.
05 STUDENT-NUMBER PIC 9(6).
05 TUITION-OWED PIC 9(6)V99.
05 STUDENT-NAME PIC X(40).
05 PROGRAM-OF-STUDY PIC X(5).
05 COURSES OCCURS 5 TIMES.
10 COURSE-CODE PIC X(7).
10 COURSE-AVERAGE PIC 9(3).
FD PROGRAM-IN-FILE.
01 PROGRAM-RECORD.
05 PROGRAM-CODE PIC X(6).
05 PROGRAM-NAME PIC X(20).
FD REPORT-OUT-FILE.
01 REPORT-RECORD.
05 STUDENT-NAME PIC X(40).
05 PIC X(3) VALUE SPACES.
05 STUDENT-AVERAGE PIC 999.
05 PIC X(4) VALUE SPACES.
05 PROGRAM-NAME PIC X(20).
05 PIC X(4) VALUE SPACES.
05 TUITION-OWED PIC ZZZ,ZZ9.99.
WORKING-STORAGE SECTION.
01 PROGRAM-TABLE.
05 PROGRAM-TABLE-ENTRY OCCURS 20 TIMES.
10 PT-PROGRAM-CODE PIC X(6).
10 PT-PROGRAM-NAME PIC X(20).
01 STUDENT-COUNTER PIC 9(5) VALUE 0.
01 REPORT-COUNTER PIC 9(5) VALUE 0.
01 END-OF-FILE PIC X(1) VALUE "N".
01 WS-COURSE-TOTAL PIC 9(4)V99 VALUE 0.
01 WS-STUDENT-AVERAGE PIC 999.
01 WS-PROGRAM-NAME PIC X(20).
01 WS-TUITION-OWED-STR PIC ZZ,ZZ9.99.
01 WS-TUITION-OWED PIC 9(6)V99.
01 WS-RECORD-COUNT PIC 9(5) VALUE 0.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
OPEN INPUT STUFILE-IN-FILE
INPUT PROGRAM-IN-FILE
OUTPUT REPORT-OUT-FILE.
PERFORM INITIALIZATION.
PERFORM PROCESS-STUDENT-RECORDS
UNTIL END-OF-FILE = "Y".
PERFORM WRITE-REPORT-HEADERS.
PERFORM WRITE-PROGRAM-REPORTS.
CLOSE STUFILE-IN-FILE
PROGRAM-IN-FILE
REPORT-OUT-FILE.
STOP RUN.
INITIALIZATION.
PERFORM LOAD-PROGRAM-TABLE.
MOVE 0 TO STUDENT-COUNT, REPORT-COUNT.
WRITE REPORT-OUT-RECORD FROM COLUMN-HEADERS.
MOVE "N" TO END-OF-FILE.
MOVE SPACES TO WS-STUDENT-RECORD.
LOAD-PROGRAM-TABLE.
PERFORM VARYING I FROM 1 BY 1
UNTIL I > 20
READ PROGRAM-IN-FILE
AT END
MOVE "Y" TO END-OF-FILE
GO TO EXIT-LOAD-PROGRAM-TABLE
END-READ
MOVE PROGRAM-CODE TO PROGRAM-TABLE (I).PROGRAM-CODE
MOVE PROGRAM-NAME TO PROGRAM-TABLE (I).PROGRAM-NAME
END-PERFORM
EXIT-LOAD-PROGRAM-TABLE.
EXIT.
PROCESS-STUDENT-RECORDS.
READ STUFILE-IN-FILE
AT END
MOVE "Y" TO END-OF-FILE
GO TO EXIT-PROCESS-STUDENT-RECORDS
END-READ
ADD 1 TO STUDENT-COUNT.
MOVE STUDENT-NAME TO WS-STUDENT-NAME
MOVE PROGRAM-OF-STUDY TO WS-PROGRAM-CODE
MOVE ZERO TO WS-COURSE-COUNT, WS-STUDENT-AVERAGE
PERFORM CALCULATE-STUDENT-AVERAGE
PERFORM LOOKUP-PROGRAM-NAME
PERFORM EDIT-TUITION-OWED
PERFORM WRITE-STUDENT-REPORT
ADD 1 TO REPORT-COUNT
END-PERFORM.
EXIT-PROCESS-STUDENT-RECORDS.
CALCULATE-STUDENT-AVERAGE.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
COMPUTE WS-STUDENT-AVERAGE = WS-STUDENT-AVERAGE + COURSE-AVERAGE (I)
ADD 1 TO WS-COURSE-COUNT
END-PERFORM
COMPUTE WS-STUDENT-AVERAGE = WS-STUDENT-AVERAGE / WS-COURSE-COUNT
COMPUTE WS-STUDENT-AVERAGE = FUNCTION CEILING (WS-STUDENT-AVERAGE)
MOVE WS-STUDENT-AVERAGE TO STUDENT-AVERAGE
MOVE WS-STUDENT-NAME TO REPORT-OUT-RECORD.
LOOKUP-PROGRAM-NAME.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 20
IF WS-PROGRAM-CODE = PROGRAM-TABLE (I).PROGRAM-CODE
MOVE PROGRAM-TABLE (I).PROGRAM-NAME TO PROGRAM-NAME
EXIT PERFORM
END-IF
END-PERFORM
MOVE WS-PROGRAM-CODE TO PROGRAM-CODE
MOVE WS-STUDENT-AVERAGE TO STUDENT-AVERAGE
MOVE WS-STUDENT-NAME TO REPORT-OUT-RECORD.
EDIT-TUITION-OWED.
COMPUTE WS-TUITION = TUITION-OWED / 100
MOVE WS-TUITION TO TUITION-OWED-OUT
UNSTRING TUITION-OWED-OUT DELIMITED BY ALL SPACES
INTO TUITION-OWED-OUT (1:LEN-TUITION)
MOVE ZEROS TO I, J
PERFORM VARYING K FROM LEN-TUITION BY -3 UNTIL K < 1
MOVE TUITION-OWED-OUT (K:3) TO WS-TUITION-AMOUNT
IF WS-TUITION-AMOUNT NOT = ZEROS
ADD 1 TO J
MOVE J TO K
PERFORM VARYING L FROM I BY 1 UNTIL L > J
MOVE TUITION-OWED-OUT (L:1) TO WS-CHAR
STRING WS-CHAR DELIMITED BY SIZE
INTO TUITION-OWED-OUT-EDITED (K:1)
ADD 1 TO K
END-PERFORM
STRING "," DELIMITED BY SIZE
INTO TUITION-OWED-OUT-EDITED (K:1)
ADD 1 TO K
SUBTRACT 3 FROM I
END-PERFORM
STRING "$" DELIMITED BY SIZE
INTO TUITION-OWED-OUT-EDITED (1:1).
COMPUTE STUDENT-AVERAGE = (COURSE-AVERAGE-1 + COURSE-AVERAGE-2 +
COURSE-AVERAGE-3 + COURSE-AVERAGE-4 +
COURSE-AVERAGE-5) / 5
ROUNDING MODE IS HALF_UP
MOVE STUDENT-AVERAGE TO STUDENT-AVERAGE-OUT.
PERFORM SEARCH-PROGRAM-TABLE.
ADD 1 TO REPORT-COUNT.
EXIT.
SEARCH-PROGRAM-TABLE.
SET FOUND-FLAG TO FALSE
SET I TO 1
PERFORM UNTIL FOUND-FLAG = TRUE OR I > MAX-PROGRAM-TABLE-ENTRIES
IF PROGRAM-CODE = PROGRAM-TABLE (I).PROGRAM-CODE
MOVE PROGRAM-TABLE (I).PROGRAM-NAME TO PROGRAM-NAME-OUT
SET FOUND-FLAG TO TRUE
END-IF
ADD 1 TO I
END-PERFORM.
WRITE-REPORT-HEADERS.
MOVE "NAME" TO NAME-HEADER
MOVE "AVERAGE" TO AVERAGE-HEADER
MOVE "PROGRAM" TO PROGRAM-HEADER
MOVE "TUITION OWED" TO TUITION-OWED-HEADER
WRITE REPORT-RECORD FROM REPORT-HEADER.
WRITE-PROGRAM-REPORTS.
SET REPORT-COUNT TO ZEROS
READ STUFILE-IN-FILE
AT END SET END-OF-FILE TO "Y"
NOT AT END PERFORM PROCESS-STUDENT-RECORD
END-READ.
MOVE "Total number of Student Records read:" TO REPORT-LINE-1
MOVE NUM-OF-STUDENT-RECORDS-READ TO REPORT-LINE-1 (38:6)
WRITE REPORT-RECORD FROM REPORT-LINE-1
MOVE "Total number of Student Report Records written:" TO REPORT-LINE-2
MOVE NUM-OF-STUDENT-REPORTS-WRITTEN TO REPORT-LINE-2 (46:6)
WRITE REPORT-RECORD FROM REPORT-LINE-2.
EXIT.
=============================
Here is request for this program:
A program is required to read student records and course records from external files, produce a student report for each student using the data on each student record, and produce the audit trail for the process (records read and records written). The specifics for the input student records (from the Student File STUFILE.txt), the processes required for each record, and the output format for each student report card are described below. The Program of Studies records (from the Program of Studies file -- PROGRAM.txt) contains the program code and the Program Name (e.g. Computer Programmer, Computer Technician etc.) For each record read in from the Student File, a Student Report Record is be printed as described below. Once all records have been processed, counters should be printed to indicate the number of Student Records read and the number of Student Report records written. Both files (STUFILE.txt and PROGRAM.txt) will be provided.
Input Record Structures The structure for each student record is below. The file to be used to test your code will be provided with the file name STUFILE.txt for the student records, and PROGRAM.txt for the different Programs of Study. There are five courses for each student record. Each course record (1 through 5) contains the Course Code followed by the average for that course. Program of Studies file (PROGRAM.txt) Record structure ( Note there will be a maximum of 20 occurrences of records) PROGRAM CODE 6 bytes alphanumeric PROGRAM NAME 20 bytes alphanumeric (Note This file is to be loaded into a table for use in the program)
Student Record (STUFILE.txt) STUDENT NUMBER 6 bytes numeric TUITION OWED 6 bytes numeric (including 2 assumed decimals) STUDENT NAME 40 bytes alphanumeric.. PROGRAM OF STUDY 5 bytes alphanumeric COURSE CODE 1 7 bytes alphanumeric COURSE AVERAGE 1 3 bytes numeric COURSE CODE 2 7 bytes alphanumeric COURSE AVERAGE 2 3 bytes numeric COURSE CODE 3 7 bytes alphanumeric COURSE AVERAGE 3 3 bytes numeric COURSE CODE 4 7 bytes alphanumeric COURSE AVERAGE 4 3 bytes numeric COURSE CODE 5 7 bytes alphanumeric COURSE AVERAGE 5 3 bytes numeric
Output Record Structure (Student Report Record) The output record will be a structured on a single line as described below. You must use the ORGANIZATION clause as LINE SEQUENTIAL in the SELECT ASSIGN statement. STUDENT NAME filler (3 spaces) STUDENT AVERAGE (This field must be rounded to a whole integer) filler (4 spaces) PROGRAM NAME ( retrieved from the table) filler 4 spaces TUITION OWED (this field must be edited with inserted decimal point, commas as suppression of leading zeros) Output Record Structure (Column Header) You must have a Column Header Record at the top of the report with the words NAME, AVERAGE, PROGRAM, TIUTION OWED in line with the beginning of each field.
Processing Notes The Student Average to be computed is the average mark from all 5 courses. Assume that all course averages contain valid values including zero. The Tuition Owed value on output must be edited as noted above. The Student Average is to be rounded to be an integer The records from the Program of Studies file are to be loaded into a table for use in the Student Report Records. Assume a maximum of 20 occurrences required for the table.
Hints Open all three files during Initialization Load the Table during Initialization Use the PERFORM VARYING code to load the table during initialization and to search the table in the main line process. Increment the counters for student records read and student report records written within the module for the READ and the WRITE as appropriate. =================
PROGRAM.txt
COMPRXCOMPUTER PRGRAMMER COMTCXCOMPUTER TECHNICIAN COMSCXCOMPUTER SIENCE BUSSXTBUSINESS MARKXTMARKETING ACCTGXACCOUNTING CSTABXXXXXXXXXXXXXXXXXXXXX CSTDEXXXXXXXXXXXXXXXXXXX cSTFGXXXXXXXXXXXXXXXXXXXX CSTHIXXXXXXXXXXXXXXXXXXXX CSTJKXXXXXXXXXXXXXXXXXXXX CSTLMXXXXXXXXXXXXXXXXXXXX CSTNOXXXXXXXXXXXXXXXXXXXX CSTPRXXXXXXXXXXXXXXXXXXXX CSTQSXXXXXXXXXXXXXXXXXXXX CSTTUXXXXXXXXXXXXXXXXXXXX CSTVWXXXXXXXXXXXXXXXXXXXX CSTXYXXXXXXXXXXXXXXXXXXXX
======================
STUFILE.txt
111111100000JONES, WILLIAM COMPRCST8283090CST2234090CST2235090DAT1800090ENG1001090 111111200000SMITH, FRED COMTCCST8283090CST2234080CST2235080DAT1800080ENG1001080 111113092000CROMWELL, OLIVER COMSCCST8283070CST2234070CST2235070DAT1800070ENG1001070 111115150000HEHEINLEN, HERBERT COMPRCST8283090CST2234090CST2235090DAT1800090ENG1001090 111119005000ASSIMOV, ISAAC COMPRCST8283045CST2234046CST22350470DAT180048ENG1001049
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
