Записи и типизированные файлы. Описание структуры с именем Price - Turbo Pascal
Формулировка задачи:
Описать структуру с именем PRICE, содержащую следующие поля:
- название товара;
- название магазина, в котором продается товар;
- стоимость товара в грн.
Написать программу, выполняющую следующие действия с помощью
процедур или функций:
- ввод с клавиатуры данных в файл, состоящий из элементов типа PRICE;
записи должны быть размещены в алфавитном порядке по названиям товаров;
- чтение данных из этого файла;
- вывод на экран информации о товаре, название которого введено с кла-
виатуры;
- если таких товаров нет, выдать на дисплей соответствующее сообщение
Решение задачи: «Записи и типизированные файлы. Описание структуры с именем Price»
textual
Листинг программы
uses crt; type price=record name:string[20]; shop:string[20]; cost:real; end; var f:file of price; t,t1,t2:price; i,j,k:integer; ok:boolean; procedure waitspace; begin writeln('Press Space to see the next screen...'); repeat until readkey=#32; end; begin assign(f,'goods.dat'); {$i-} reset(f); {$i+} if IoResult<>0 then rewrite(f); repeat clrscr; writeln('1. Add data'); writeln('2. Read data'); writeln('3. Search goods for name'); writeln('0. Exit'); k:=ord(ReadKey)-48; case k of 1:begin clrscr; write('Caption:');readln(t.name); write('Shop:');readln(t.shop); write('Cost:');readln(t.cost); seek(f,filesize(f)); write(f,t);close(f);reset(f); seek(f,0); for i:=0 to filesize(f)-2 do begin seek(f,i); read(f,t); for j:=i to filesize(f)-1 do begin seek(f,j); read(f,t1); if t1.name>t.name then begin t2:=t1;t1:=t;t:=t2;end; seek(f,j); write(f,t1); seek(f,i); write(f,t); end; end; end; 2:begin clrscr; i:=1; seek(f,0); while not eof(f) do begin read(f,t); writeln(t.name,' ',t.shop,' ',t.cost:0:2); i:=i+1; if i=20 then begin waitspace; clrscr; i:=1; end; end; waitspace; end; 3:begin clrscr; write('Enter goods caption:');readln(t1.name); seek(f,0);ok:=false; while not eof (f) do begin read(f,t); if t.name=t1.name then begin writeln(t.name,' ',t.shop,' ',t.cost:0:2); ok:=true; end; end; if not ok then writeln('Nothing find'); waitspace; end; end; until k=0; end.
Объяснение кода листинга программы
- В начале программы объявляются переменные и создается файл для записи и чтения данных о товарах.
- Затем идет цикл, в котором пользователю предлагается ввести данные о товаре (название, магазин, стоимость), которые затем записываются в файл.
- После этого происходит поиск товара в файле. Если товар найден, то его данные выводятся на экран, а затем происходит повторный поиск. Если товар не найден, выводится сообщение
Nothing find
. - После завершения поиска выводится сообщение
Exit
, после чего происходит выход из программы. - В конце программы выводится сообщение
Press Space to see the next screen...
, после чего начинается цикл ожидания нажатия пробела.