COBOL 错误不是记录名称
COBOL Error Not a Record Name
我正在编写一个简单的 COBOL 程序来读取数据并根据学分计算学费。我的程序是完整的,除了一个我不明白的错误。在 CALC 例程的最后一行,我尝试写入 TUITION 变量,但出现错误:"Not a record name"。我仍在学习 COBOL 程序的基本结构和设置,所以我知道这是我忘记的一些小错误。
代码:
IDENTIFICATION DIVISION.
PROGRAM-ID. prg1-lankford.
AUTHOR. Lankford.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT DISK-FILE ASSIGN TO 'prg1.dat'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT PRINT-FILE ASSIGN TO 'prg1-lankford.rpt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD DISK-FILE
RECORD CONTAINS 80 CHARACTERS.
01 DISK-REC.
05 STUDENT-NAME-INPUT PIC X(20).
05 NUM-CREDITS-INPUT PIC 9(2).
05 PIC X(58).
FD PRINT-FILE
RECORD CONTAINS 66 CHARACTERS.
01 PRINT-REC.
05 STUDENT-NAME-OUTPUT PIC X(20).
05 PIC X(20).
05 NUM-CREDITS-OUTPUT PIC 9(2).
05 PIC X(20).
05 TUITION PIC 9(4).
WORKING-STORAGE SECTION.
01 MORE-RECORDS PIC X VALUE 'Y'.
01 FULL-TIME-TUITION PIC 9(4) VALUE 6300.
01 PER-CREDIT PIC 9(3) VALUE 525.
PROCEDURE DIVISION.
100-MAIN-MODULE.
OPEN INPUT DISK-FILE
OUTPUT PRINT-FILE
PERFORM UNTIL MORE-RECORDS = 'N'
READ DISK-FILE
AT END
MOVE 'N' TO MORE-RECORDS
NOT AT END
PERFORM 200-CALC-RTN
END-READ
END-PERFORM
CLOSE DISK-FILE
PRINT-FILE
STOP RUN.
200-CALC-RTN.
MOVE STUDENT-NAME-INPUT TO STUDENT-NAME-OUTPUT
MOVE NUM-CREDITS-INPUT TO NUM-CREDITS-OUTPUT
IF NUM-CREDITS-INPUT < 12 THEN
MULTIPLY NUM-CREDITS-INPUT BY PER-CREDIT
GIVING TUITION
ELSE
MOVE FULL-TIME-TUITION TO TUITION
WRITE TUITION.
尝试
Write PRINT-REC
您只能写入完整记录,不能写入部分记录。
另外你缺少 end-if Write 所以尝试:
200-CALC-RTN.
MOVE STUDENT-NAME-INPUT TO STUDENT-NAME-OUTPUT
MOVE NUM-CREDITS-INPUT TO NUM-CREDITS-OUTPUT
IF NUM-CREDITS-INPUT < 12 THEN
MULTIPLY NUM-CREDITS-INPUT BY PER-CREDIT
GIVING TUITION
ELSE
MOVE FULL-TIME-TUITION TO TUITION
end-if
WRITE PRINT-REC.
我正在编写一个简单的 COBOL 程序来读取数据并根据学分计算学费。我的程序是完整的,除了一个我不明白的错误。在 CALC 例程的最后一行,我尝试写入 TUITION 变量,但出现错误:"Not a record name"。我仍在学习 COBOL 程序的基本结构和设置,所以我知道这是我忘记的一些小错误。
代码:
IDENTIFICATION DIVISION.
PROGRAM-ID. prg1-lankford.
AUTHOR. Lankford.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT DISK-FILE ASSIGN TO 'prg1.dat'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT PRINT-FILE ASSIGN TO 'prg1-lankford.rpt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD DISK-FILE
RECORD CONTAINS 80 CHARACTERS.
01 DISK-REC.
05 STUDENT-NAME-INPUT PIC X(20).
05 NUM-CREDITS-INPUT PIC 9(2).
05 PIC X(58).
FD PRINT-FILE
RECORD CONTAINS 66 CHARACTERS.
01 PRINT-REC.
05 STUDENT-NAME-OUTPUT PIC X(20).
05 PIC X(20).
05 NUM-CREDITS-OUTPUT PIC 9(2).
05 PIC X(20).
05 TUITION PIC 9(4).
WORKING-STORAGE SECTION.
01 MORE-RECORDS PIC X VALUE 'Y'.
01 FULL-TIME-TUITION PIC 9(4) VALUE 6300.
01 PER-CREDIT PIC 9(3) VALUE 525.
PROCEDURE DIVISION.
100-MAIN-MODULE.
OPEN INPUT DISK-FILE
OUTPUT PRINT-FILE
PERFORM UNTIL MORE-RECORDS = 'N'
READ DISK-FILE
AT END
MOVE 'N' TO MORE-RECORDS
NOT AT END
PERFORM 200-CALC-RTN
END-READ
END-PERFORM
CLOSE DISK-FILE
PRINT-FILE
STOP RUN.
200-CALC-RTN.
MOVE STUDENT-NAME-INPUT TO STUDENT-NAME-OUTPUT
MOVE NUM-CREDITS-INPUT TO NUM-CREDITS-OUTPUT
IF NUM-CREDITS-INPUT < 12 THEN
MULTIPLY NUM-CREDITS-INPUT BY PER-CREDIT
GIVING TUITION
ELSE
MOVE FULL-TIME-TUITION TO TUITION
WRITE TUITION.
尝试
Write PRINT-REC
您只能写入完整记录,不能写入部分记录。
另外你缺少 end-if Write 所以尝试:
200-CALC-RTN.
MOVE STUDENT-NAME-INPUT TO STUDENT-NAME-OUTPUT
MOVE NUM-CREDITS-INPUT TO NUM-CREDITS-OUTPUT
IF NUM-CREDITS-INPUT < 12 THEN
MULTIPLY NUM-CREDITS-INPUT BY PER-CREDIT
GIVING TUITION
ELSE
MOVE FULL-TIME-TUITION TO TUITION
end-if
WRITE PRINT-REC.