Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба 1 Филиппова.doc
Скачиваний:
1
Добавлен:
19.08.2019
Размер:
1.6 Mб
Скачать

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.