Program zadacha2; Uses crt; type str=record FIO:string[30]; tel:longint; god:integer; kab:integer; plt:integer; end; Fl=file of str; Var f:Fl; p:char; a:str; name:string; k:byte;z:integer;label l; {---------вывод шапки таблицы-----------} procedure tabl; begin writeln('Абонентская плата за телефон'); writeln(' --------------------------------------------------------- '); writeln('| Ф.И.О. | Телефон | Год | Количество | Плата за |'); writeln('| абонента | | установки | абонентов | телефон |'); writeln(' --------------------------------------------------------- '); end; {---------чтение данных одной записи--------} procedure danzap; begin Assign(f,'2.dat'); Reset(f); writeln; writeln('чтение данных одной записи');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; var name:string; begin writeln('создание файла'); Assign(f,'2.dat'); Rewrite(f); Close(f); writeln('файл 2.dat создан'); end; {---------дополнение файла---------} procedure dop; begin writeln; writeln('дополнение файла'); zap; writeln('после дополнения файла:'); cht; end; {---------заполнение файла---------} procedure zap; var fid:text; n,i:integer; begin Assign(f,'2.dat'); reset(f); writeln; writeln('Сколько записей вы хотели бы ввести:'); readln(n); seek(f,filesize(f)); for i:=1 to n do begin writeln('Введите даные'); readln(a.FIO,a.tel,a.god,a.kab,a.plt); write(f,a); seek(f,filesize(f)); end; Close(f); cht; end; {---------чтение файла---------} procedure cht; var n:integer; {- количество записей в файле} begin writeln; 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; var nfio:string; nplt,n,i:integer;q:boolean; begin writeln; writeln ('модификация файла'); Assign(f,'2.dat'); writeln('сколько записей вы хотели бы редактировать:'); readln(n); q:=false; for i:=1 to n do begin writeln('введите фамилию,записи о которой вы хотели бы редактировать'); readln(nfio); reset(f); repeat read(f,a); if nfio=a.fio then begin q:=true; danzap; reset(f); seek(f,filepos(f)-1); writeln('введите новые данные'); readln(a.tel,a.god,a.kab,a.plt); seek(f,filesize(f)); write(f,a); seek(f,filesize(f)); close(f); end else writeln('такая фамилия не найдена'); until {eof(f);} q=true; end; if q=false then writeln('такая фамилия не найдена'); 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('удаление данных'); 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; procedure povtor; begin writeln; writeln('----------------------------------------------------'); writeln('для продолжения работы нажмите клавишу ');readln; end; Begin Clrscr; l:writeln; writeln('1 - создание файла'); writeln('2 - вывод шапки таблицы'); writeln('3 - запись данных в файл'); writeln('4 - дополнение файла'); writeln('5 - вывод данных одной записи'); writeln('6 - чтение данных файла'); writeln('7 - модификация ряда записей файла'); writeln('8 - поиск в файле'); writeln('9 - удаление записей файла'); writeln('0 - выход'); writeln('введите желаемое действие'); readln(k); case k of 1:begin sozd; povtor; goto l;end; 2:begin tabl; povtor; goto l;end; 3:begin zap; povtor; goto l;end; 4:begin dop; povtor; goto l;end; 5:begin danzap; povtor; goto l;end; 6:begin cht; povtor; goto l;end; 7:begin modif; povtor; goto l;end; 8:begin poisk; povtor; goto l;end; 9:begin udalenie; povtor; goto l;end; 0:exit; end; readln; End.