Я пишу простую программу COBOL для чтения данных и расчета стоимости обучения в зависимости от количества часов кредитования. Моя программа завершена, за исключением одной ошибки, которую я не понимаю. В последней строке подпрограммы CALC я пытаюсь написать переменную TUITION, и я получаю ошибку: «Не имя записи». Я все еще изучаю базовую структуру и настройку программы COBOL, поэтому я знаю, что это небольшой туман, о котором я забыл.Ошибка 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.
Попробуйте 'Написать PRINT-REC' можно писать только полные записи не части записей –
Не особенно связанных с COBOL, но процедуры, которые вы выполняете/вызываете, должны иметь одну задачу, и это имя должно отражать это. Ваш «200-CALC-RTN» подразумевает, что он вычисляет, но он делает больше, чем это: он также пишет! Я бы переместил WRITE сразу после инструкции PERFORM. –
Это также хорошая идея поставить период, который закрывает абзац на своей собственной линии, чтобы люди точно знали, что это такое. В более старой версии COBOL не было терминатора ограничений (например, END-IF), поэтому для всех прерываний использовался период. Ввод его в ту же строку, что и WRITE TUITION, может быть немного запутанным, но не конец света – SaggingRufus