6.2.2. Задание на алгоритмизацию и программирование задач на файлы данных
Необходимо разработать алгоритм и написать программы для:
- создания файла данных;
- чтения созданного файла данных;
- добавления записей в созданный файл данных;
- обработка созданного файла данных по заданному условию.
7. Структура записи данных
Шифр товара |
Наименование |
Цена |
План продажи (руб) |
Факт. Продано (руб) |
|
|
|
|
|
Напечатать в выходном документе:
Процент выполнения плана и фактическую денежную сумму реализации для произвольно заданного товара.
-
Создание файла:
Нет
Да
Программа создания файла данных:
program Soz; {Программа создает типизированный файл.}
uses crt;
type t=record
shifr:string[6]; {Шифр товара}
naim:string[12]; {Наименование}
cena:real; {Цена}
plan:real; {План продажи}
fact:real; {Факт. продано}
end;
var
fl:file of t; {Файловая переменная}
d:t; {Переменная для обмена}
im:String[12]; {Строковая переменная для имени файла}
p:Byte; {переменная используемая для циклов}
begin
ClrScr; {Очистка экрана}
Write('Введите имя файла который будет создан (маска: ????????.???):');
ReadLn(im);
WriteLn;
assign(fl,im); {Связывание файловой переменной fl}
rewrite(fl); {Открытие файла для создания}
p:=1;
while p=1 do {Выполнить пока есть данные}
begin
Write('Введите шифр товара (не более 6 символов):');
ReadLn(d.shifr);
Write('Введите наименование товара (не более 12 символов):');
ReadLn(d.naim);
Write('Введите цену товара :');
ReadLn(d.cena);
Write('Введите план продажи (руб):');
ReadLn(d.plan);
Write('Введите сколько факт. продано(руб):');
ReadLn(d.fact);
write(fl,d); {Запись данных в файл}
Write('Будете продолжать вводить данные? (Да - 1; Нет - 0):');
ReadLn(p);
end;
close(fl); {Закрытие файла}
end.
Пример выполнения программы:
-
Чтение файла:
Нет
Да
Да
Нет
Да
Нет
Да
Нет
Программа чтения файла данных:
program Chten; {Программа считывает данные из файла данных и выводит на экран}
uses crt;
type t=record
shifr:string[6];
naim:string[12];
cena:real;
plan:real;
fact:real;
end;
var
fl:file of t;
d:t;
im:String[12];
osh:Boolean; {Логическая переменная для проверки существования файла, который
открывается}
p:byte;
begin
osh:=True; {Задание начальных значений}
while Osh do {Задавать вопрос о открытии файла пока не будет введено правильное}
{имя файла}
begin
ClrScr;
Write('Введите имя созданного ранее файла (маска: ????????.???):');
ReadLn(im);
WriteLn;
assign(fl,im);
{$I-} {Отключаем контроль ошибок ввода-вывода}
reset(fl); {Открыть файл для обработки}
{$I+} {Включаем контроль ошибок ввода-вывода}
If IOResult<>0 then
begin
WriteLn('Такого файла не существует.');
Write('Хотите ввести другое имя (Да - 1; Нет - 0):');
ReadLn(p);
If p=1 Then Osh:=true
Else halt;
end
Else Osh:=False;
end;
ClrScr;
WriteLn('┌──────┬────────────┬────────────┬────────────┬────────────┐');
WriteLn('│ Шифр │Наименование│ Цена │План продажи│Факт.Продано│');
WriteLn('│товара│ │ │ (руб) │ (руб) │');
WriteLn('├──────┼────────────┼────────────┼────────────┼────────────┤');
while not eof(fl) do {Продолжать до тех пор пока не будет достигнут конец файла}
begin
with d do begin
Read(fl,d); {Считывание данных из файла}
WriteLn('│',shifr:6,'│',naim:12,'│',cena:12:2,'│',plan:12:2,'│',fact:12:2,'│');
end; {Вывод данных на экран.}
end;
ReadLn;
Close(fl); {Закрытие файла}
end.
Пример выполнения программы:
-
Добавление записей:
Нет
Да
Да
Нет
Нет
Да Да
Нет
Программа добавления записей в файл данных:
program Dobav; {Программа добавляет в файл данных новые данные}
uses crt;
type t=record
shifr:string[6];
naim:string[12];
cena:real;
plan:real;
fact:real;
end;
var
fl:file of t;
d:t;
im:String[12];
p:Byte;
Osh:Boolean;
l:Integer; {Счетчик}
begin
osh:=True;
while Osh do
begin
ClrScr;
Write('Введите имя созданного ранее файла (маска: ????????.???):');
ReadLn(im);
WriteLn;
assign(fl,im);
{$I-}
reset(fl);
{$I+}
If IOResult<>0 then
begin
WriteLn('Такого файла не существует.');
Write('Хотите ввести другое имя (Да - 1; Нет - 0):');
ReadLn(p);
If p=1 Then Osh:=true
Else halt;
end
Else Osh:=False;
end;
l:=filesize(fl); {Определение количества записей в файле}
seek(fl,l); {Установка указателя за пределы файла, чтобы новые данные добавлялись}
{ в конце файла}.
WriteLn('Введите новые данные.');
p:=1;
while p=1 do
begin
Write('Введите шифр товара (не более 6 символов):');
ReadLn(d.shifr);
Write('Введите наименование товара (не более 12 символов):');
ReadLn(d.naim);
Write('Введите цену товара :');
ReadLn(d.cena);
Write('Введите план продажи (руб):');
ReadLn(d.plan);
Write('Введите сколько факт. продано(руб):');
ReadLn(d.fact);
write(fl,d);
Write('Будете продолжать вводить данные? (Да - 1; Нет - 0):');
ReadLn(p);
end;
close(fl);
end.
Пример выполнения программы:
-
Обработка записей:
Нет
Да
Нет
Закрыть файл
Да
Да
Да
Нет
Нет
Нет
Нет
Да
Программа обработки записей в файле данных:
program Obrab; {Программа по обработке файла данных по определенному условию}
uses crt;
type t=record
shifr:string[6];
naim:string[12];
cena:real;
plan:real;
fact:real;
end;
var
fl:file of t;
d:t;
im:String[12];
Vern, osh:Boolean; {Vern\ True – если поиск параметров был успешен
False – если поиск не успешен}
p:byte;
st:String;
pr:Real;
begin
osh:=True;
while Osh do
begin
ClrScr; {Очистка экрана}
Write('Введите имя созданного ранее файла (маска: ????????.???):');
ReadLn(im);
WriteLn;
assign(fl,im);
{$I-}
reset(fl);
{$I+}
If IOResult<>0 then
begin
WriteLn('Такого файла не существует.');
Write('Хотите ввести другое имя (Да - 1; Нет - 0):');
ReadLn(p);
If p=1 Then Osh:=true
Else halt;
end
Else Osh:=False;
end;
p:=1;
while p=1 do begin { Пока р=1, исходные данные для ввода есть}
ClrScr;
p:=1;
Write('По каким параметрам будите искать: (Шифр товара - 2, Наименование - 3):');
ReadLn(p);
Write('Введите какой товар будете искать: ');
ReadLn(st);
{Вывод шапки таблицы} WriteLn('┌──────┬────────────┬────────────┬────────────┬────────────┬────────────┐');
WriteLn('│ Шифр │Наименование│ Цена │План продажи│Факт.Продано│Процент вып.│');
WriteLn('│товара│ │ │ (руб) │ (руб) │ плана │');
WriteLn('├──────┼────────────┼────────────┼────────────┼────────────┼────────────┤');
Vern:=False;
while not eof(fl) do {Пока не достигнут конец файла}
begin
with d do begin {Работа с типизированной переменной d}
Read(fl,d);
If p=2 Then begin {Анализирование данных из файла по условию поиска}
If st=shifr Then
Vern:=True;
end
Else If p=3 Then begin {Анализирование данных из файла по условию поиска}
If st=naim Then
Vern:=True;
end;
If Vern Then begin {Если поиск успешен вычисляем проценты.}
pr:=(fact/plan)*100;
WriteLn('│',shifr:6,'│',naim:12,'│',cena:12:2,'│',plan:12:2,'│',fact:12:2,'│',pr:12:2,'│'); {Вывод данных на экран}
Break;
end;
end;
end;
If not Vern Then WriteLn('Вы ввели не правильный параметр.');
Write('Хотите продолжить? (Да - 1; Нет - 0):');
ReadLn(p);
end;
ReadLn;
Close(fl);
end.
Пример выполнения программы: