program kursov;
uses crt;
type
student=record
name,part,prof:string[23]; {имя и инициалы}
number,vozrast:integer; {номер группы}
{ ball:array[1..5] of integer;} {успеваемость}
{srball:real;} {средняя оценка}
end;

var
f1,f2:file of student; {файловая переменная массива}
zap:student;
repeatkey:char;
num:integer; {общее количество записей в массиве}
i,j:integer;
gg,gg2,gg3,sor:longint;
sel:integer; {выбор пункта меню}
sum:longint; {сумма значений полей}
m1,m2:student; {для сортировки записей}
s:boolean; {ключ сортировки}
filename:string; {имя файла с записями}
z:string; {фильтрация пробелов}
pball:string[9]; {Оценки для ввода и вывода}

{описание вспомогательных процедур}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure shapka; {заголовок таблицы}
begin
writeln (' TABLICA ZAPISEU');
writeln;
writeln ('/===============TT==========TT==========TT=========TT=============\');
writeln ('[ fAMILIIA I.O. ][ #okryga ][ vozrast ][ partiia ][ professiia ]');
writeln ('\===============++==========++==========++=========++=============/');
end;
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure undertable; {низ таблицы}
begin
writeln ('\==================¦===========¦===========¦==========+===========/');
end;
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure nofile; {отсутствие файла}
begin
clrscr;
writeln;
writeln (' OSHIBKA!');
writeln (' Faul ',filename,' otsytstvyet! Najmite Enter.');
readkey;
end;
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure opening; {процедура открытия файла с f1}
begin
writeln;
write (' VVedite imia faula ');
readln (filename);
assign (f1,filename);
end;
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure printing; {процедура вывода текущей строки}
begin
with zap do
begin
write ('¦ ',name:5,' ');
write (number:10,' ');
pball:='';
{формирование строки оценок и вывод на экран}
write (vozrast:10,' ');

write (part:10,' ');
write (prof:10,' ');
writeln;
end;
end;
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure obmen;
begin
sor:=sor-2;
seek(f1,sor);
write(f1,m2);
write(f1,m1);
sor:=sor+2;
sor:=sor-1;
seek(f1,sor);
end;
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure editforedit; {Процедура выбора пункта изменения и изменения}
begin
repeat
clrscr;
Writeln(' vy xotite izmenit:');
Writeln(' -----------------------');
Writeln(' 1. familiy I.O.');
Writeln(' 2. Nomer okryga');
Writeln(' 3. vozrast');
Writeln(' 4. naimen partii');
Writeln(' 5. professiy');
Writeln(' -----------------------');
Write(' >>');
Readln(sel);
clrscr;
writeln;
writeln (' zapis ',gg);
writeln;
writeln (' vvedite novye dannye: ');
writeln;
case sel of
1:begin
write (' familiia i.o. ');
readln (zap.name);
writeln;
writeln(' familiia v zapisi ',gg,' izmenena');
end;
2:begin
write (' # okryga ');
readln (zap.number);
writeln;
writeln(' # okryga',gg,' izmenen');
end;
3:begin

writeln (' vvedite novyu vozrast');
readln (zap.vozrast);
writeln(' vozrast ',gg,' izmenen');

end;
4:begin
write (' Naim partii ');
readln (zap.part);
writeln;
writeln(' naim partii ',gg,' izmeneno');
end;
5:begin
write (' professiia ');
readln (zap.prof);
writeln;
writeln(' professiia ',gg,' izmenena');
end;
{Подсчет Среднего Балла}
{sum:=0;
for j:=1 to 5 do
sum:=sum+zap.ball[j];
zap.srball:=sum/5; }

{writeln(' vozrast ',gg,' izmenen');
end; }
end;
clrscr;
Writeln;
Write(' vy xotite izmenit chto nibyd eshe ? [Y/N] либо [Д/Н] ');
Readln(repeatkey);
until (UpCase(repeatkey) in ['N','Н']);
seek(f1,gg-1);
write(f1,zap);
end;

{Основные подпрограммы 1-7}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure create; {процедура создания нового файла}{(1 подпрограмма)}
begin
clrscr;
Writeln(' vvedite imia faula');
Write(' ');
Readln(filename);
Assign(f1,filename);
Rewrite(f1);
Writeln(' faul s imenem ',filename,' sozdan. najmite ENTER.');
readkey;
close(f1);
end; {процедура создания нового файла}{(конец 1 подпрограммы)}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure enter; {процедура добавления записи в файл}{(2 подпрограмма)}
begin
clrscr; {ассоциация с файлом и переход в конец}
writeln (' dobavlenie zapisi v faul');
opening;
{$I-}
reset (f1);
{$I+}
if IOResult=0 then
begin
if not eof(f1) then
begin
gg:=filesize(f1);
seek(f1,gg);
end;
clrscr;
writeln (' vvod zapiseu');
writeln;
write (' vvedite kol-vo zapiseu ');
readln (num);
for i:=1 to num do
begin
clrscr;
writeln;
writeln (' zapis ',i);
with zap do
begin

write (' familiia i.o. ');
readln (name);
write ('# okryga ');
readln (number);

writeln (' vozrast : ');

readln (vozrast);
writeln ('Naimenovanie partii : ');

readln (part);
writeln (' professia ');

readln (prof);
end;



write(f1,zap);
writeln;
end;
close(f1);
end
else nofile;
end; {процедура добавления записи в файл}{(конец 2 подпрограммы)}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure udalen; {процедура удаления записи}{(3 подпрограмма)}
begin
clrscr;
writeln (' ydalenie zapisi iz faula');
opening;
{$I-}
reset (f1);
{$I+}
if IOResult=0 then
begin
assign (f2,'buf');
rewrite (f2);
clrscr;
writeln (' ydalenie zapisi');
writeln;
write (' vvedite nomer zapisi ');
readln (num);
for i:=1 to num-1 do
begin
read(f1,zap);
write(f2,zap);
end;
read(f1,zap);
while (not(eof(f1))) do
begin
read(f1,zap);
write(f2,zap);
end;
close(f1);
close(f2);
erase(f1);
rename(f2,filename);
clrscr;
Writeln(' zapis ',num,' ydalena. najmite ENTER.');
readkey;
end
else nofile;
end; {процедура удаления записи}{(конец 3 подпрограммы)}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure edit; {процедура корректировки записи}{(4 подпрограмма)}
begin
clrscr;
repeatkey:=' ';
writeln (' korrektirovka zapisi v faule');
opening;
{$I-}
reset (f1);
{$I+}
if IOResult=0 then
begin
repeat
clrscr;
writeln (' korrektirovka zapisi');
writeln;
write (' vvedite nomer zapisi ');
readln (gg);
seek(f1,gg-1);
read(f1,zap);
editforedit;
clrscr;
Writeln;
Write(' vy xotite izmenit drygyy zapis? [Y/N] libo [Д/Н] ');
Readln(repeatkey);
until (UpCase(repeatkey) in ['N','Н']);
close(f1);
end
else nofile;
end; {процедура корректировки записи}{(конец 4 подпрограммы)}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure view; {вывод массива на экран}{процедура просмотра файла}{(5 подпрограмма)}
begin
clrscr;
writeln (' prosmotr faula');
opening;
{$I-}
reset (f1);
{$I+}
if IOResult=0 then
begin
clrscr;
shapka;
while (not Eof(f1)) do
begin
read(f1,zap);
with zap do
printing;
end;
undertable;
readkey;
end
else nofile;
end; {вывод массива на экран}{процедура просмотра файла}{(конец 5 подпрограммы)}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
procedure disp; {процедура вывода на дисплей при условии}{(7 подпрограмма)}
begin
clrscr;
writeln;
opening;
{$I-}
reset (f1);
{$I+}
if IOResult=0 then
begin
clrscr;
shapka;
s:=false;

while (not Eof(f1)) do
begin
read(f1,zap);
with zap do
if vozrast>4 then
begin
printing;
s:=true;
end;
end;
if s=false then writeln ('¦ poisk neydachen ¦ ¦ ¦ ¦');
undertable;
readkey;
end
else nofile;
end; {процедура вывода на дисплей при условии}{(конец 7 подпрограммы)}
{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
BEGIN
repeat
clrscr;
writeln;
writeln (' ychebnaia praktika');
writeln;
writeln;
writeln (' baza dannyx ======== Kandidaty');
writeln;
writeln (' ------------------------------------');
writeln (' 1. Sozdanie faula');
writeln (' 2. Dobavlenie zapisi v faul');
writeln (' 3. Ydalenie ykazannou zapisi');
writeln (' 4. Korektirovka ykazannou zqapisi');
writeln (' 5. Prosmotr faula');
writeln (' 6. tyt doljen byt poisk');
writeln (' 7. vyxod');
writeln (' ------------------------------------');
writeln;
write (' > ');
readln (sel);
case sel of
1:create;
2:enter;
3:udalen;
4:edit;
5:view;
6:disp;
7:break;
end;
until false;
END.




pomogite plz vmesto procedyry disp sdekat poisk xotia by po imeni
i eshe sdelat' vyxo bez soxraneniia


zaranee spasibo