Существует множество различных аспектов этого кода, которые вы можете изменить. Во-первых, нет особого c требования к капитализации. Можно использовать строчные буквы, и лично я считаю, что это будет намного проще для глаз.
Вам также не нужно использовать 'picture', и это может быть сокращено до 'pi c', что экономит время на разработку.
использование переменной с именем 'END OF FILE' необязательно, намного проще просто сделать флаг и инициализировать его как false для начала, прежде чем можно будет манипулировать этим при необходимости, переменные уровня 88 хороши за это.
Опять же, это полностью зависит от личных предпочтений, но я не люблю использовать абзацы и придерживаться разделов, я чувствую, что это облегчает управление структурой вашей программы.
В вашем коде вы использовали точки остановки в конце чтения, точка останова сама по себе будет выглядеть как «конец чтения», поэтому, так как у вас уже есть одна, компилятор читает первую точку остановки как 'end-execute' и выбрасывает ошибку для этого. То, как я использую точки полного останова, заключается в том, чтобы иметь один в конце каждого раздела, ясно видимый, чтобы я знал его там.
Я реорганизовал ваш код так, как я бы его написал. Пожалуйста, посмотрите на это и посмотрите, что вы думаете.
identification division.
program-id. Tuition.
environment division.
input-output section.
file-control.
select in-student-file
assign to 'name.dat'
organization is line sequential.
select out-student-file
assign to 'tuition.dat'
organization is line sequential.
data division.
file section.
fd in-student-file.
01 in-student-rec.
05 studentname-in pic x(20).
05 numcred-in pic 99.
05 pic X(58).
fd out-section-file.
01 out-student-rec.
05 studentname-out pic X(20).
05 pic X(20).
05 numcred-out pic 99.
05 pic X(20).
05 tuition-out pic X(4).
working-storage section.
01 tuition pic 9(4).
01 ws-file-at-end pic x.
88 fl-eof value "Y" false "N".
procedure division.
*************************************************
*********Structure of programme******************
*************************************************
main section.
perform startup
perform main-process until fl-eof-true
perform closedown
go-back
.
*************************************************
***********Open necessary files******************
*************************************************
startup section.
open input in-student-file
open output out-student-file
set fl-eof to false
.
*************************************************
********Reads until flag end of file*************
*************************************************
main-process section.
read in-student-file
at end
set fl-eof to true
not at end
perform process-and-return
end-read
.
*************************************************
******Process the student tuition****************
*************************************************
process-and-return section.
move studentname-in to studentname-out
move numcred-in to numcred-out
if numcred-in < 12 then
multiply numcred-in by 525 giving tuition
else
set tuition to 6300
end-if
move tuition to tuition-out
display out-student-rec
write out-student-rec
.
*************************************************
******Close all necessary files******************
*************************************************
closedown section.
close in-student-file
close out-student-file
.