4. Схема программы
5. Текст программы
Program nal_vagonov; {Филиппова Т.П., гр.2-78-11, 07.02.2010б, вариант №10, Программа создания и обработки одного типизированного файла}
uses crt;
type tzap=record
punkt:string[15];
nom_poezda:longint;
nom_vag:longint;
kol_bil:longint;
end;
var f,f2: file of tzap;
kontrol, z:tzap;
i,kvag, kbil, minkb, maxkb, minnv, minnp, maxnv, maxnp, j:longint;
minp, maxp:string[15];
flag, konf, flag2, flag3: boolean;
otv:byte;
procedure sozdanie; {создание файла}
var name:string;
begin
assign(f,'C:\nal_vagonov.dat');
rewrite(f);
i:=1;
z.punkt:='a';
kontrol.punkt:='a';
kontrol.nom_poezda:=0;
writeln('Введите данные');
while z.punkt<>' ' do
begin
write(i,'. Пункт прибытия:');
readln(z.punkt);
if z.punkt<> ' ' then
begin
write('номер поезда: ');
readln(z.nom_poezda);
write('номер вагона ');
readln(z.nom_vag);
write('количество билетов ');
readln(z.kol_bil);
if (kontrol.punkt<=z.punkt) and ((kontrol.nom_poezda<z.nom_poezda) or (z.punkt<>kontrol.punkt)) then
begin
write(f,z);
inc(i);
kontrol.punkt:=z.punkt;
kontrol.nom_poezda:=z.nom_poezda;
end
else writeln('Данные не отсортированны. Используйте режим "Корректировка"');
end;
end;
clrscr;
close(f);
end;{sozdanie}
procedure polnyy_prosmotr; {_олнvй просмотр всех записей}
begin
assign(f,'C:\nal_vagonov.dat');
kvag:=0;
kbil:=0;
i:=0;
reset(f);
writeln('Путь',' ':7,'№ поезда',' ':8,'№ вагона',' ':11,'Количествово билетов');
writeln;
while not eof(f) do
begin
read(f,z);
if ((kontrol.punkt<>z.punkt) and (kontrol.nom_poezda<>z.nom_poezda) and (kvag<>0)) then
begin
writeln('Количество вагонов: ',kvag:15,' Количество билетов:', kbil:11);
kvag:=0;
kbil:=0;
end;
kontrol.punkt:=z.punkt;
kontrol.nom_poezda:=z.nom_poezda;
inc(kvag);
kbil:=kbil+z.kol_bil;
writeln(z.punkt,' ',z.nom_poezda:15-length(z.punkt)+3,' ',z.nom_vag:15,' ',z.kol_bil:30);
end;
writeln('Количество вагонов: ',kvag:15,' Количество билетов:', kbil:11);
close(f);
end;{polnyy_prosmotr}
procedure vybor_prosmotr;
begin
flag:=false;
kvag:=0;
kbil:=0;
write('Введите диапазон просмотра пункта: от ');
read(minp);
write('до ');
readln(maxp);
write('Введите диапазон просмотра по номеру поезда: от ');
read(minnp);
write('до ');
readln(maxnp);
write('Введите диапазон просмотра по номеру вагона: от ');
read(minnv);
write('до ');
readln(maxnv);
write('Введите диапазон просмотра по количеству билетов: от ');
read(minkb);
write('до ');
readln(maxkb);
assign(f,'C:\nal_vagonov.dat');
reset(f);
konf:=false;
while not eof(f) and((maxp>z.punkt)or((maxnp>z.nom_poezda)and(maxp=z.punkt))) do
begin
read(f,z);
with z do
begin
if (punkt>=minp) and (punkt<=maxp) and (nom_poezda<=maxnp) and (nom_poezda>=minnp) and (nom_vag>=minnv) and (nom_vag<=maxnv) and (kol_bil>=minkb) and (kol_bil<=maxkb)then
begin
if (kontrol.punkt<>punkt) and (j<>0) then
begin
writeln('Количество вагонов: ',kvag:15,' Количество билетов:', kbil:11);
kvag:=0;
kbil:=0;
end;
writeln(z.punkt,' ',z.nom_poezda:15-length(z.punkt)+3,' ',z.nom_vag:15,' ',z.kol_bil:30);
kbil:=kbil+kol_bil;
inc(j);
flag:=true;
kontrol.punkt:=punkt;
inc(kvag);
end;
end;
end;
if not flag then writeln('Не найдено')
else writeln('Количество вагонов: ',kvag:15,' Количество билетов:', kbil:11);
close(f);
end; {vybor_prosmotr}
Procedure udalenie;
begin with z do
begin
flag:=false;
writeln('Введите пункт прибытия и номер поезда:');
write('Пункт: ');
readln(kontrol.punkt);
write('Номер поезда: ');
readln(kontrol.nom_poezda);
assign(f,'C:\nal_vagonov.dat');
reset(f);
assign(f2,'C:\nal_vag2.dat');
rewrite(f2);
punkt:='a';
nom_poezda:=0;
while not eof(f) do
begin
read(f,z);
if (kontrol.punkt=punkt) and (kontrol.nom_poezda=nom_poezda) then
begin
flag:=true;
end
else write(f2,z);
end;
close(f);
close(f2);
if flag then begin
reset(f2);
rewrite(f);
while not eof(f2) do
begin
read(f2,z);
write(f,z);
end;
end
else writeln('*Не найден*');
close(f);
close(f2);
end;
end;{udalenie}
procedure vvod_vnov;
begin
writeln('Введите новую запись');
with z do
begin
j:=0;
flag:=true;
flag2:=true;
flag3:=true;
write('Пункт :');
readln(kontrol.punkt);
write('Номер поезда: ');
readln(kontrol.nom_poezda);
write('Номер вагона: ');
readln(kontrol.nom_vag);
write('Количество билетов: ');
readln(kontrol.kol_bil);
assign(f,'C:\nal_vagonov.dat');
reset(f);
assign(f2,'C:\nal_vag2.dat');
rewrite(f2);
while (not eof(f)) and (flag3) do
begin
if flag2 then
read(f,z);
flag3:= not((kontrol.punkt=punkt) and (kontrol.nom_poezda=nom_poezda));
if flag3 and ((not flag) or ((kontrol.punkt>=punkt) and ((kontrol.nom_poezda>nom_poezda) or (kontrol.punkt<>punkt)))) then
begin
write(f2,z);
inc(j);
flag2:=true;
end
else
begin
inc(j);
write(f2,kontrol);
flag:=false;
flag2:=false;
end;
end;
if flag then write(f2,kontrol);
if (not flag) and (i=j) then write(f2,z);
close(f);
close(f2);
if not flag3 then writeln('Указанная запись уже существует')
else
begin
assign(f2,'C:\nal_vag2.dat');
reset(f2);
assign(f,'C:\nal_vagonov.dat');
rewrite(f);
while not eof(f2) do
begin
read(f2,z);
write(f,z);
end;
close(f);
close(f2);
end;
end;
end;{vvod_vnov}
procedure izmenenie;
begin
flag:=false;
with z do
begin
writeln('Введите пункт прибытия и номер поезда: ');
write('Пункт: ');
readln(kontrol.punkt);
write('Номер поезда: ');
readln(kontrol.nom_poezda);
assign(f,'C:\nal_vagonov.dat');
reset(f);
assign(f2,'C:\nal_vag2.dat');
rewrite(f2);
punkt:='a';
nom_poezda:=0;
while (not eof(f)) and (((kontrol.punkt>punkt)or((kontrol.nom_poezda>nom_poezda)and(kontrol.punkt=punkt)))or(flag)) do
begin
read(f,z);
if (kontrol.punkt=punkt) and (kontrol.nom_poezda=nom_poezda) then
begin
writeln('Введите новые значения для ');
write('Номер вагона: ');
readln(kontrol.nom_vag);
write('Количество билетов: ');
readln(kontrol.kol_bil);
write(f2,kontrol);
flag:=true;
end
else write(f2,z);
end;
close(f);
close(f2);
end;
if not flag then writeln('Запись с указанным ключом не найдена')
else
begin
assign(f2,'C:\nal_vag2.dat');
reset(f2);
assign(f,'C:\nal_vagonov.dat');
rewrite(f);
while not eof(f2) do
begin
read(f2,z);
write(f,z);
end;
close(f);
close(f2);
end;
end;{izmenenie}
Procedure Korrektirovka;
begin clrscr;
writeln('Выберите пункт меню:');
writeln('1. Удаление');
writeln('2. Ввод вновь');
writeln('3. Изменение');
writeln('0. Выход');
readln(otv);
case otv of
1: udalenie;
2: vvod_vnov;
3: izmenenie;
0:
else begin
writeln('Неверный ввод, нажмите Enter');
readln;
korrektirovka;
end;
end;
end;{korrektirovka}
procedure prosmotr;
begin clrscr;
writeln('Выберите пункт меню:');
writeln('1. Полный просмотр');
writeln('2. Просмотр по выбору');
writeln('0. Выход');
readln(otv);
clrscr;
case otv of
1: polnyy_prosmotr;
2: vybor_prosmotr;
0:
else begin
writeln('Неверный ввод, нажмите Enter');
readln;
prosmotr;
end;
end;
end; {prosmotr}
procedure menu;
begin
writeln('Выберите пункт меню:');
writeln('1. Создание');
writeln('2. Корректировка');
writeln('3. Просмотр');
writeln('0. Выход');
readln(otv);
case otv of
1: begin
sozdanie;
menu;
end;
2: begin
korrektirovka;
menu;
end;
3: begin
prosmotr;
menu;
end;
0:
else
begin
writeln('Неверный ввод, нажмите Enter');
readln;
menu;
end;
end;
end; {menu}
begin
menu;
end.