Как ни странно при проверке процедуры soz(отвечает за создание базы данных) с директивой {$I-} вплоть до write(f,zap) у меня ioresult=0. Помогите, пожалуйста, я уже четвертый час не могу исправить эту "чудесную" ошибку. Компилировал прогу с помощью Borland 7.0, Borland 7.1 и FPC 2.6.0 - результат один и тот же. Скриншот прилагается.
Собственно, код:
- Код: Выделить всё
program kursa4;
uses crt;
const imf='baza.dat';
rf=20;
rs=16;
rfio=20;
rb=4;
rk=13;
type z=record
fak:string[rf];
stud:integer;
fiodek:string[rfio];
ball:string[rb];
kaf:integer;
end;
var f:file of z;
o:char;
otv,ot,i:integer;
zap:z;
pr:boolean;
slov:string[rf];
{______________________________________________________________________}
function prov:boolean; {проверяет наличие файла и его состояние}
begin prov:=false;
assign (f,imf);
{$I-} reset(f);{$I+}
if ioresult<>0 then
writeln ('Файл с базой не найден')
else
if filesize(f)=0 then
writeln('Файл с базой пуст')
else
prov:=true;
close(f);
end;
{______________________________________________________________________}
function prunik(pole:string):boolean; {проверяет уникальность записи}
var prsovp:boolean;
lokzap:z;
begin
prunik:=false; prsovp:=false;
assign(f,imf); reset(f);
while not eof(f) and not prsovp do
begin
read(f,lokzap);
if lokzap.fak=pole then prsovp:=true;
if lokzap.fiodek=pole then prsovp:=true;
end;
if prsovp=false then prunik:=true;
close(f);
end;
{______________________________________________________________________}
procedure vivod; {табличку в ASCII рисует}
begin
if prov then
writeln('┌────────────────────┬────────────────┬────────────────────┬────┬─────────────┐');
writeln('│Название факультета │Кол-во студентов│ ФИО декана │Балл│Кол-во кафедр│');
writeln('├────────────────────┼────────────────┼────────────────────┼────┼─────────────┤');
assign(f,imf);
reset(f);
while not eof(f) do
begin
read(f,zap);
with zap do
writeln('│',fak:rf,'│',stud:rs,'│',fiodek:rfio,'│',ball:rb,'│',kaf:rk,'│');
end;
writeln('└────────────────────┴────────────────┴────────────────────┴────┴─────────────┘');
close(f);
end;
{______________________________________________________________________}
procedure soz; {создает базу данных}
begin
assign(f,imf);
rewrite(f);
repeat
write('Введите название факультета: ');
readln(zap.fak);
write('Введите ФИО декана: ');
readln(zap.fiodek);
if prunik(zap.fak) and prunik(zap.fiodek) then
begin
write('Введите количество студентов: ');
readln(zap.stud);
write('Введите проходной балл: ');
readln(zap.ball);
write('Введите количество кафедр: ');
readln(zap.kaf);
write(f,zap);
end
else
begin
writeln('В базе уже есть запись с таким же деканом/факультетом!');
end;
write('Добавить еще одну запись? Y/N= ');
readln(o);
until (o='n') or (o='N');
close(f);
writeln('Созданная база имеет вид: ');
vivod;
end;
{_____________________________________________________________________}
BEGIN
repeat
begin
writeln;
writeln('База данных "Институт"');
writeln('Главное меню: ');
writeln('1: Создание БД (Внимание! Старая БД будет удалена!)');
writeln;
writeln('2: Вывод базы данных на экран.');
writeln;
writeln('9: Выход из программы');
repeat
write('Выберите пункт: ');
readln(ot);
until (ot>=1) and (ot<=9);
case ot of
1:soz;
2:vivod;
9:exit;
end;
write('Продолжить работу? Y/N= ');
readln(o);
end;
until (o='n') or (o='N');
END.