Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_11_tipiz_file.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
872.45 Кб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]