
- •Органsзацiя роботи з типізованими файлами
- •Мета роботи
- •Основнi теоретичнi вiдомостi
- •Файли даних
- •Описання типiзованих файлів
- •Процедури для роботи з типізованими файлами
- •Функцiї для роботи з типізованими файлами
- •Послідовність роботи з файлами
- •Контроль операцiй читання даних
- •3. Приклад складання програми з типізованим файлом
- •Текст програми:
- •Контрольнi запитання
- •Лабораторне завдання
- •Iндивiдуальнi завдання
3. Приклад складання програми з типізованим файлом
Завдання. Скласти проект програми, за допомогою якого можна створити файл записів з відомостями про товари на складі: найменування, кількість, ціну та рік виготовлення. Вивести зміст файла у вікно StringGrid. Знайти:
загальну кількість товарів на складі,
товар з найменшою ціною,
відсортувати записи за ціною.
В
игляд
форми проекту наведено на рис. 11.1.
Рисунок 11.1 – Форма та результати проекту
Пояснення. Меню команд “Вихід” створено за допомогою компонента MainMenu. Команда “Вихід |Очистити все” очищує файл і всі компоненти, окрім StringGrid1.
За допомогою компонента opendialog (під час запускання проекту) відшуку-ється на диску тека, у якій знаходиться чи буде створено файл з даними. Властивість opendialog1.Execute набуває значення True, якщо обрано теку та ім’я файла на диску. Властивість opendialog1.FileName набуває значення імені файла на диску.
Текст програми:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, Grids;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
OpenDialog1: TOpenDialog;
Button1: TButton; Button2: TButton; Button3: TButton;
Button4: TButton; Button5: TButton; Button6: TButton;
Edit1: TEdit; Edit2: TEdit; Edit3: TEdit;
Edit4: TEdit; Edit5: TEdit; Edit6: TEdit;
Label1: TLabel; Label2: TLabel; Label3: TLabel;
Label4: TLabel; Label5: TLabel;
StringGrid1: TStringGrid;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure TForm1.FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
…………………………….
implementation
{$R *.DFM}
type tovar=record
name:string[12];
kol:integer;
cena:real;
god:integer;
end;
// глобальні параметри проекту
var f:file of tovar; {файлова змінна}
z:tovar; {змінна типу “запис”}
namefile:string; {ім’я фізичного файла на диску}
// підпрограма запускання проекту ( створення форми)
procedure TForm1.FormCreate(Sender: TObject);
begin
if opendialog1.Execute then namefile:=opendialog1.FileName;
AssignFile(F,namefile);
if FileExists(namefile) then
begin
reset(f);
ShowMessage('Файл вже існує. Перегляньте зміст файла ');
end else
begin
rewrite(f); ShowMessage('Введіть відомості про товар');
end;
end;
// підпрограма кнопки “Додати новий запис”
procedure TForm1.Button1Click(Sender: TObject);
begin
{перевірка наявності значень про товар у вікнах edit}
if (length(edit1.text)=0) or (length(edit2.text)=0) or
(length(edit3.text)=0) or (length(edit4.text)=0) then
begin
showmessage('Введіть усі відомості про товар');
еxit;
end ;
{записування у файл значень про товар }
reset(f);
seek(f,FileSize(f)); {<− переведення покажчика на кінець файла}
with z do
begin
name:=edit1.text;
kol:=StrToInt(edit2.text);
cena:=StrToFloat(edit3.text);
god:=StrToInt(edit4.text);
end;
write(f,z);
{очищення вікон edit для нових значень про товар }
edit1.Clear; edit2.Clear;edit3.Clear; edit4.Clear;
closefile(f);
end;
// підпрограма команди меню “Товари на складі”
procedure TForm1.Button2Click(Sender: TObject);
var scena:string;
i:integer;
begin
reset(f);
seek(f,0); {<− переведення покажчика на початок файла}
i:=0;
StringGrid1.Cells[0,0]:='Найменування';
StringGrid1.Cells[1,0]:='Кількість';
StringGrid1.Cells[2,0]:='Ціна';
StringGrid1.Cells[3,0]:='Рік випуску';
while not eof(f)do
begin
read(f,z);
i:=i+1;
with z do
begin
str(cena:1:2,scena);
StringGrid1.Cells[0,i]:=name;
StringGrid1.Cells[1,i]:=IntTostr(kol);
StringGrid1.Cells[2,i]:=scena;
StringGrid1.Cells[3,i]:=IntToStr(God);
end;
closefile(f);
end;
end;
//підпрограма кнопки “Загальна кількість”
procedure TForm1.Button3Click(Sender: TObject);
var k:integer;
begin
reset(f);
seek(f,0); {<− переведення покажчика на початок файла}
k:=0;
while not eof(f)do
begin
read(f,z);
k:=k+z.kol;
end;
edit5.text:=IntToStr(k);
closefile(f);
end;
// підпрограма кнопки “Товар з min ценой”
procedure TForm1.Button4Click(Sender: TObject);
var zmin:tovar; min:real; s:string;
begin
reset(f);
seek(f,0); {<− переведення покажчика на початок файла}
read(f,z);
zmin:=z; min:=z.cena;
while not eof(f)do
begin
read(f,z);
with z do
if cena<min then
begin min:=cena; zmin:=z;end;
end;
with zmin do
s:=name+' | '+IntTostr(kol)+' | '+floatToStr(cena)+' | '+IntToStr(God);
edit6.text:=s;
closefile(f);
end;
// підпрограма кнопки “Сортування за ціною”
procedure TForm1.Button5Click(Sender: TObject);
var k,i,j:integer; zi,zj:tovar; s:string;
begin
reset(f);
seek(f,0); {<− переведення покажчика на початок файла}
Memo1.Clear;
k:=FileSize(F); {<− визначення кількісті елементів файла}
{Cортування даних файла}
for i:=0 to k-2 do
begin
for j:=i+1 to k-1 do
begin
seek(f,j);read(f,zi);
seek(f,i); read(f,zj);
if zi.cena>zj.cena then
begin
seek(f,j); write(f,zi);
seek(f,i); write(f,zj);
end;
end;
end;
{Виведення відсортованих даних у Memo}
seek(f,0); {<− переведення покажчика на початок файла}
while not eof(f) do
with z do
begin
read(f,z);
s:=name+' | '+IntTostr(kol)+' | '+floatToStr(cena) +' | '+IntToStr(God);
memo1.Lines.Add(s);
end;
closefile(f);
end;
// підпрограма команди меню “Вихід | Очистити все”
procedure TForm1.N2Click(Sender: TObject);
begin
{очищення файла}
rewrite(f); closefile(f);
{очищення форми}
memo1.Clear;
edit1.Clear; edit2.Clear;edit3.Clear;
edit4.Clear;edit5.Clear;edit6.Clear;
end;
// підпрограма команди меню “ Вихід | Закрити проект”
procedure TForm1.N3Click(Sender: TObject);
begin
close;
end;
end.