Задание 9. работа с упорядоченными файлами
Подготовить список из N наименований товаров. Конкретное значение N указано в варианте. Информация о каждом товаре содержит:
1. Название товара.
2. Цену.
3. Год выпуска.
4. Количество.
Список должен быть упорядочен по одному из параметров, указанных в конкретном варианте. Сведения по каждому товару необходимо представить в виде записи.
Разработать программу, которая заносит во внешний файл записи упорядоченного списка, и программу, которая добавляет в сформированный внешний файл данные об М товарах, при этом, не нарушая упорядоченности исходного файла. Если среди добавляемых товаров встречается товар, сведения о котором в файле уже есть, то необходимо их обновить, т. е. старую запись исключить.
Товары упорядочены по неубыванию года выпуска, N=10, M=3.
Program dom9;
type zap=record
name: string;
cost: integer;
date: 1900..2222;
quantity: integer;
end;
fpk=file of zap;
var fizap,rb:fpk; s1,a,b:zap; i,j:integer;
procedure PrintFile(fizap:fpk);
var a:zap; i:integer; s:string;
begin
i:=1;
reset(fizap);
repeat
read(fizap,a);
writeln(i:2,' Наименование: ',a.name,', цена: ', a.cost, ', дата: ',a.date,', кол-во: ',a.quantity);
i:=i+1;
until eof(fizap);
close(fizap);
end;
procedure InSortfile(var f: file of zap; newrec: zap);
var r: zap; g: file of zap;
begin
assign(g,'l.dat');
rewrite(g);
reset(fizap);
while not eof(f) do
begin read (f,r);
if newrec.quantity < r.quantity then break
else if(newrec.name <> r.name) then write(g,r)
end;
write(g,newrec);
if not eof(f) then if(newrec.name <> r.name) then write(g,r);
while not eof(f) do
begin read (f,r);
if(newrec.name <> r.name) then write(g,r);
end;
rewrite(fizap);
reset(g);
repeat
read(g,a);
write(fizap,a);
until eof(g);
close(g);
close(fizap);
erase(g);
end;
begin
assign(fizap,'res.dat'); rewrite(fizap);
s1.name:='молоток';
s1.cost:=1500;
s1.date:=1989;
s1.quantity:=15;
write(fizap,s1);
s1.name:='пила';
s1.cost:=21500;
s1.date:= 1990;
s1.quantity:=212;
write(fizap,s1);
s1.name:='отвертка';
s1.cost:=500;
s1.date:=1998;
s1.quantity:=50;
write(fizap,s1);
s1.name:='линейка';
s1.cost:=200;
s1.date:=2000;
s1.quantity:=165;
write(fizap,s1);
s1.name:='плоскогубцы';
s1.cost:=1500;
s1.date:=2001;
s1.quantity:=78;
write(fizap,s1);
s1.name:='уровень';
s1.cost:=1000;
s1.date:=2005;
s1.quantity:=710;
write(fizap,s1);
s1.name:='нивелир';
s1.cost:=21500;
s1.date:=2005;
s1.quantity:=76;
write(fizap,s1);
s1.name:='лобзик';
s1.cost:=500;
s1.date:=2011;
s1.quantity:=577;
write(fizap,s1);
s1.name:='шпатель';
s1.cost:=200;
s1.date:=2012;
s1.quantity:=185;
write(fizap,s1);
s1.name:='шуруповерт';
s1.cost:=1000;
s1.date:=2012;
s1.quantity:=100;
write(fizap,s1);
s1.name:='топор';
s1.cost:=21500;
s1.date:=2013;
s1.quantity:=126;
write(fizap,s1);
s1.name:='трубогиб';
s1.cost:=500;
s1.date:=2014;
s1.quantity:=124;
write(fizap,s1);
s1.name:='фрезер';
s1.cost:=200;
s1.date:=2015;
s1.quantity:=274;
write(fizap,s1);
close(fizap);
writeln(' -- до вставки --');
PrintFile(fizap);
s1.name:='карандаш';
s1.cost:=200;
s1.date:=2005;
s1.quantity:=5;
InSortfile(fizap, s1);
writeln(' -- после вставки `карандаш` --');
PrintFile(fizap);
s1.name:='пила';
s1.cost:=28400;
s1.date:=2004;
s1.quantity:=10;
InSortfile(fizap, s1);
writeln(' -- после вставки `пила` --');
PrintFile(fizap);
s1.name:='молоток';
s1.cost:=1200;
s1.date:=2015;
s1.quantity:=22;
InSortfile(fizap, s1);
writeln(' -- после вставки `молоток` --');
PrintFile(fizap);
s1.name:='пробник';
s1.cost:=3500;
s1.date:=2010;
s1.quantity:=254;
InSortfile(fizap, s1);
writeln(' -- после вставки `пробник` --');
PrintFile(fizap);
s1.name:='бензопила';
s1.cost:=1200;
s1.date:=2015;
s1.quantity:=122;
InSortfile(fizap, s1);
writeln(' -- после вставки `бензопила` --');
PrintFile(fizap);
s1.name:='перфоратор';
s1.cost:=3500;
s1.date:=2010;
s1.quantity:=54;
InSortfile(fizap, s1);
writeln(' -- после вставки `перфоратор` --');
PrintFile(fizap);
end.
Результаты выполнения программы: