Program zadacha2; Uses crt; type str=record FIO:string[30]; tel:longint; god:integer; kab:integer; plt:integer; end; Fl=file of str; const name:string='H:\Program Files\TurboPascal7.1\лаба №4\2.dat'; Var f:Fl; p:char;a:str; Fi,Fr:text; {---------вывод шапки таблицы-----------} procedure tabl; begin writeln('Абонентская плата за телефон'); writeln(' --------------------------------------------------------- '); writeln('| Ф.И.О. | Телефон | Год | Количество | Плата за |'); writeln('| абонента | | установки | абонентов | телефон |'); writeln(' --------------------------------------------------------- '); end; {---------чтение данных одной записи--------} procedure danzap; begin Assign(f,'2.dat'); Reset(f); p:=' '; seek(f,0); writeln(a.FIO,p,a.tel,p,a.god,p,a.kab,p,a.plt); Close(f); end; procedure cht; forward; procedure zap; forward; {---------создание файла--------} procedure sozd; begin writeln('создание файла'); Assign(f,'2.dat'); Rewrite(f); Close(f); writeln('файл создан'); end; {---------дополнение файла---------} procedure dop; begin writeln('дополнение файла'); zap; writeln('после дополнения файла'); cht; end; {---------заполнение файла---------} procedure zap; var fid:text; n,i:integer; begin Assign(f,'2.dat'); reset(f); writeln('Сколько записей вы хотели бы ввести:'); readln(n); for i:=1 to n do begin seek(f,filesize(f)); writeln('Введите даные'); readln(a.FIO,a.tel,a.god,a.kab,a.plt); end; write(f,a); Close(f); end; {---------чтение файла---------} procedure cht; var n:integer; {- количество записей в файле} begin writeln('чтение файла'); Assign(f,'2.dat'); reset(f); p:=' '; tabl; while not eof(f) do begin read(f,a); writeln; write(a.FIO,p,a.tel,p,a.god,p,a.kab,p,a.plt); end; close(f); end; {---------модификация файла--------} procedure modif; label mk; var a:str; f:file of str; nfio:string;nplt:integer; begin writeln ('модификация файла'); Assign(f,'2.dat'); Assign(fi,'22.dat'); reset(fi); reset(f); repeat readln(a.fio,a.plt); writeln('фамилия и новый размер платы:'); writeln('''',nfio,'''','plt=',a.plt); if nfio='' then begin writeln('нет фамилии для модификации');continue end; seek(f,0); repeat read(f,a); if nfio=a.fio then begin danzap; a.plt:=nplt; danzap; seek(f,filepos(f)-1); write(f,a); goto mk; end; until eof(f); writeln(fr,'фамилия ошибочна'); mk: until (eof(fi)); close(fi); close(f); write('после модификации файла:');cht; end; {-------------поиск записей файла---------------} procedure poisk; var q:boolean; begin assign(f,'2.dat'); reset(f); q:=false; writeln; writeln('записи абонентов,имеющих задолженность или год установки до 1980 г.'); while not eof(f) do begin read(f,a); if (a.god<1980)or(a.plt<0) then begin q:=true; writeln; write(a.fio,' ',a.tel,' ',a.god,' ',a.kab,' ',a.plt); end; end; if q=false then write('таких не найдено'); writeln; close(f); end; {----------удаление записей из типизированного файла-----------} procedure udalenie; var nf:string; kol,i:longint; begin assign(f,'2.dat'); reset(f); kol:=filesize(f); writeln('удаление данных'); writeln('введите фамилию абонента, запись о котором вы хотите удалить'); readln(nf); repeat read(f,a); if nf=a.fio then begin writeln('запись удалена'); if eof(f) then seek(f,kol-1) else for i:=filepos(f) to kol-1 do begin seek(f,i);read(f,a); seek(f,i-1);write(f,a); end; truncate(f); exit; end; until eof(f); write('такой записи нет'); close(f); end; Begin Clrscr; tabl; sozd; zap; danzap; dop; poisk; udalenie; cht; readln; End.