Организовать работу с файлом, содержащим сведения об автовладельцах - PascalABC.NET
Формулировка задачи:
Как организовать работу с файлом, содержащим следующие сведения
об автовладельцах: ФИО, год рождения, марка автомобиля, год выпуска
автомобиля, госномер. Поиск осуществлять по следующим параметрам:
а) фамилия;
б) марка автомобиля и год выпуска (не позднее);
в) марка автомобиля, при этом определить количество автомобилей
данной марки, самого молодого и самого старшего владельца.
Какой код должен быть?
Спасибо!
Решение задачи: «Организовать работу с файлом, содержащим сведения об автовладельцах»
textual
Листинг программы
type
avto=record
fio:string[50];
year:integer;
brand:string[20];
date:integer;
id:string[10];
end;
var
a:array of avto;
t,tmol,tstar:avto;
f:file of avto;
i,c:integer;
S:string;
begin
assign(f,'avto.dat');
repeat
writeln('==================================================');
writeln('*** 1. Ввод данных ***');
writeln('*** 2. поиск по фамилии ***');
writeln('*** 3. поиск по марке автомобиля и год выпуска ***');
writeln('*** 4. марка автомобиля ***');
writeln('==================================================');
writeln(' 0. ВЫХОД');
write('Ваш выбор (цифра)');
readln(s);
if not FileExists('avto.dat') then begin
writeln('Отсутствует файл БД avto.dat');
writeln('необходимо внести данные!');
s:='1';
end;
if s='1' then begin
if FileExists('avto.dat')then reset(f) else rewrite(f);
repeat
seek(f,filesize(f));
write('ФИО:');readln(t.fio);
write('год рождения:');readln(t.year);
write('марка автомобиля:');readln(t.brand);
write('год выпуска автомобиля:');readln(t.date);
write('госномер:');readln(t.id);
write(f,t);
write('Запись сохранена! Будете еще вносить данные (1-Да)?');
readln(s);
until s<>'1';
close(f);
s:='1';
end;
if s='2' then begin
reset(f);
writeln('поиск по Фамилии');
write('ведите фамилию:');
readln(s);
c:=0;
while not eof(f) do begin
read(f,t);
if pos(uppercase(s),uppercase(t.fio))>0 then begin writeln(t);c:=1;end;
end;
close(f);
if c=0 then writeln('Нет результатов,удовлетворяющих вашему фильтру');
writeln('Вывод результаттов завершен. Нажмите "enter" для выхода...');
readln;
s:='';
end;
if s='3' then begin
reset(f);
writeln('поиск по поиск по марке автомобиля и год выпуска');
write('ведите марку автомобиля:');
readln(s);
writeln('введите год выпуска:');
readln(i);
c:=0;
while not eof(f) do begin
read(f,t);
if (uppercase(s)=uppercase(t.brand)) and (i >=t.date) then begin writeln(t);c:=1;end;
end;
close(f);
if c=0 then writeln('Нет результатов,удовлетворяющих вашему фильтру');
writeln('Вывод результатов завершен. Нажмите "enter" для выхода...');
readln;
s:='';
end;
if s='4' then begin
reset(f);
writeln('поиск по поиск по марке ');
write('ведите марку автомобиля:');
readln(s);
i:=0;c:=0;
while not eof(f) do begin
read(f,t);
if (uppercase(s)=uppercase(t.brand)) then begin
c:=c+1;
writeln(t);
if c=1 then begin
tmol:=t;
tstar:=t;
end else
if t.year<tstar.year then tstar:=t;
if t.year>tmol.year then tmol:=t;
end;
end;
close(f);
if c=0 then writeln('Нет результатов,удовлетворяющих вашему фильтру') else
begin
writeln('Количество автомобилей данной марки:',c);
writeln(' Самый старый владелец:',tstar.fio);
writeln(' Самый молодой владелец:',tmol.fio);
end;
writeln('Вывод результатов завершен. Нажмите "enter" для выхода...');
readln;
s:='';
end;
until s='0';
end.
Объяснение кода листинга программы
В данном коде используется язык программирования PascalABC.Net.
- Тип данных avto представляет собой запись (record) с полями:
- fio (string[50]) - Фамилия, имя, отчество владельца автомобиля;
- year (integer) - Год рождения владельца автомобиля;
- brand (string[20]) - Марка автомобиля;
- date (integer) - Год выпуска автомобиля;
- id (string[10]) - Государственный номер автомобиля.
- Объявлены следующие переменные:
- a (array of avto) - Массив объектов типа avto;
- t, tmol, tstar (avto) - Переменные типа avto для хранения текущего, самого старого и самого молодого владельца;
- f (file of avto) - Файл для работы с данными;
- i, c (integer) - Переменные для хранения количества и текущего года;
- S (string) - Строка для хранения введенных пользователем данных;
- s (string) - Строка для хранения выбора пользователя.
- После инициализации переменных происходит открытие файла 'avto.dat' для чтения и записи.
- Затем пользователю предлагается выбрать действие из списка:
- Ввод данных;
- Поиск по фамилии;
- Поиск по марке автомобиля и году выпуска;
- Поиск по марке автомобиля.
- Если выбрано действие '1', то происходит считывание данных из файла и добавление новой записи. Пользователю предлагается ввести данные о владельце автомобиля.
- Если выбрано действие '2', то пользователю предлагается ввести фамилию для поиска. Затем происходит поиск всех записей, удовлетворяющих условию, и вывод результатов.
- Если выбрано действие '3', то пользователю предлагается ввести марку автомобиля и год выпуска. Затем происходит поиск всех записей, удовлетворяющих условию, и вывод результатов.
- Если выбрано действие '4', то пользователю предлагается ввести марку автомобиля. Затем происходит поиск всех записей, удовлетворяющих условию, и вывод информации о самом старом и самом молодом владельце.
- После выполнения любого действия пользователю предлагается ввести '0' для выхода из программы.
- Если файл 'avto.dat' отсутствует или не содержит данных, то выводится сообщение об ошибке и предлагается внести данные.
- В конце программы выводится сообщение о завершении работы и предлагается нажать 'enter' для выхода.