Код
program p128randacc;
type
cd = record
artist : string[40];
title : string[40];
style : char;
rating : integer;
filepos : longint;
end;
var
diskfile : file of cd;
single : CD;
counter : integer;
choice : char;
procedure newcd;
begin
with single do
begin
write('Enter artist: ');
readln(artist);
write('Enter title: ');
readln(title);
writeln('Enter style (C)lassical, (J)azzm (R)ock, (F)olk: ');
readln(style);
writeln('Enter rating (0-9)');
readln(rating);
filepos := counter;
end;
seek(diskfile,filepos);
write(diskfile,single);
counter := counter + 1;
end;
procedure showone(disk : CD);
begin
if single.artist[1] <> chr(255) then
with disk do
begin
writeln('Record number: ',filepos);
writeln(artist);
writeln(title);
writeln(style);
writeln(rating);
end;
end;
procedure display;
var
loop : integer;
begin
for loop := 1 to counter -1 do
begin
seek(diskfile,loop);
read(diskfile,single);
showone(single);
end;
end;
procedure search;
var
loop : integer;
target : string[40];
begin
writeln('Enter artist to search for: ');
readln(target);
for loop := 1 to counter-1 do
begin
seek(diskfile,loop);
read(diskfile,single);
if single.artist = target
then showone(single);
end;
end;
procedure editrec;
var
target : longint;
tstring : string[40];
tchar : char;
begin
write('Record number? ');
readln(target);
if (target>0) and (target<counter)
then begin
seek(diskfile,target);
read(diskfile,single);
showone(single);
write('Enter new name or [Enter]');
readln(tstring);
if length(tstring)>0 then single.artist := tstring;
write('Enter new title or [Enter]');
readln(tstring);
if lenght(string)> 0 then single.title := tstring;
write('Enter new style or [Enter]');
readln(tchar);
if char <> chr(13) then single.style := tchar;
write('Enter new rating or [Enter]');
readln(tchar);
if tchar<>chr(13)
then single.rating := ord(tchar)-48;
seek(diskfile,target);
write(diskfile,single);
end;
end;
procedure deleterec;
var
target : longint;
begin
write('Record number? ');
readln(target);
if (target>0) and (target<counter)
thenbegin
single.artist[1] := chr(255);
seek(diskfile,target);
write(diskfile,single);
end;
end;
procedure closefile;
begin
single.filepos := counter;
seek(diskfile,0);
write(diskfile,single);
close(diskfile);
end;
begin
assign(diskfile,'randcd.dat');
reset(diskfile);
read(diskfile);
read(diskfile,single);
counter := single,filepos;
writeln('CD collection organiser');
repeat
writeln('New CD..............1');
writeln('Display collection..2');
writeln('Search by artist....3');
writeln('Delete record.......4');
writeln('Exit................5');
readln(choice);
case choice of
'1' : newcd;
'2' : display;
'3' : search;
'4' : editrec;
'5' : deleterec;
'6' : closefile;
end;
until choice = '6';
end.
type
cd = record
artist : string[40];
title : string[40];
style : char;
rating : integer;
filepos : longint;
end;
var
diskfile : file of cd;
single : CD;
counter : integer;
choice : char;
procedure newcd;
begin
with single do
begin
write('Enter artist: ');
readln(artist);
write('Enter title: ');
readln(title);
writeln('Enter style (C)lassical, (J)azzm (R)ock, (F)olk: ');
readln(style);
writeln('Enter rating (0-9)');
readln(rating);
filepos := counter;
end;
seek(diskfile,filepos);
write(diskfile,single);
counter := counter + 1;
end;
procedure showone(disk : CD);
begin
if single.artist[1] <> chr(255) then
with disk do
begin
writeln('Record number: ',filepos);
writeln(artist);
writeln(title);
writeln(style);
writeln(rating);
end;
end;
procedure display;
var
loop : integer;
begin
for loop := 1 to counter -1 do
begin
seek(diskfile,loop);
read(diskfile,single);
showone(single);
end;
end;
procedure search;
var
loop : integer;
target : string[40];
begin
writeln('Enter artist to search for: ');
readln(target);
for loop := 1 to counter-1 do
begin
seek(diskfile,loop);
read(diskfile,single);
if single.artist = target
then showone(single);
end;
end;
procedure editrec;
var
target : longint;
tstring : string[40];
tchar : char;
begin
write('Record number? ');
readln(target);
if (target>0) and (target<counter)
then begin
seek(diskfile,target);
read(diskfile,single);
showone(single);
write('Enter new name or [Enter]');
readln(tstring);
if length(tstring)>0 then single.artist := tstring;
write('Enter new title or [Enter]');
readln(tstring);
if lenght(string)> 0 then single.title := tstring;
write('Enter new style or [Enter]');
readln(tchar);
if char <> chr(13) then single.style := tchar;
write('Enter new rating or [Enter]');
readln(tchar);
if tchar<>chr(13)
then single.rating := ord(tchar)-48;
seek(diskfile,target);
write(diskfile,single);
end;
end;
procedure deleterec;
var
target : longint;
begin
write('Record number? ');
readln(target);
if (target>0) and (target<counter)
thenbegin
single.artist[1] := chr(255);
seek(diskfile,target);
write(diskfile,single);
end;
end;
procedure closefile;
begin
single.filepos := counter;
seek(diskfile,0);
write(diskfile,single);
close(diskfile);
end;
begin
assign(diskfile,'randcd.dat');
reset(diskfile);
read(diskfile);
read(diskfile,single);
counter := single,filepos;
writeln('CD collection organiser');
repeat
writeln('New CD..............1');
writeln('Display collection..2');
writeln('Search by artist....3');
writeln('Delete record.......4');
writeln('Exit................5');
readln(choice);
case choice of
'1' : newcd;
'2' : display;
'3' : search;
'4' : editrec;
'5' : deleterec;
'6' : closefile;
end;
until choice = '6';
end.
Можете пожалусто помочь исправить ошибку в этом коде