
лабораторная работа / лабораторные работы по LAZARUS / Отчет спо лазарус лаба 6 вариант 20
.docxЦель работы – изучить принцип работы с файлами и создать приложение, в котором используются файлы с помощью объектно-ориентированного языка Lazarus.
ЗАДАНИЕ: Дан список студентов, содержащий следующие поля: фамилия, имя; знак Зодиака; месяц рождения рождения. Написать программу, выполняющую следующие действия:
-сортировка записей по знаку Зодиака;
-вывод на экран информации о студентах, родившихся в месяц, значение которого введено с клавиатуры; если таких нет, вывести на экран соответствующее сообщение;
-запись массива записей в файл под заданным с клавиатуры именем.
ЛИСТИНГ ПРОГРАММЫ:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Grids,
Buttons, Spin, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtnSort: TBitBtn;
BitBtnNew: TBitBtn;
BitBtnOpen: TBitBtn;
BitBtnSave: TBitBtn;
BitBtn5: TBitBtn;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
SpinEdit1: TSpinEdit;
StringGrid1: TStringGrid;
procedure BitBtnNewClick(Sender: TObject);
procedure BitBtnOpenClick(Sender: TObject);
procedure BitBtnSaveClick(Sender: TObject);
procedure BitBtnSortClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
type
zap=record
family,name,znak: string[20];
data: integer;
end;
var
MZap: array[1..25] of zap;
FileZap: file of zap;
FileText: TextFile;
FileNameZap,FileNameText: string;
n: integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0,0]:='Фамилия';
Cells[1,0]:='Имя';
Cells[2,0]:='Знак зодиака';
Cells[3,0]:='Месяц рождения';
end;
BitBtnSort.Hide;
BitBtnSave.Hide;
end;
procedure TForm1.BitBtnSortClick(Sender: TObject);
var
i,j :integer;
vper:zap;
begin
for i:=1 to n do
with StringGrid1,MZap[i] do
begin
family:=Cells[0,i];
name:=Cells[1,i];
znak:=Cells[2,i];
data:=StrToInt(Cells[3,i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if MZap[i].znak>MZap[j].znak then
begin
vper:=MZap[i];
MZap[i]:=MZap[j];
MZap[j]:=vper;
end;
for i:=1 to n do
with StringGrid1,MZap[i] do
begin
Cells[0,i]:=family;
Cells[1,i]:=name;
Cells[2,i]:=znak;
Cells[3,i]:=IntToStr(data);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,x,a: integer;
begin
x:=StrToInt(Edit1.Text);
a:=0;
for i:=1 to n do
with StringGrid1,MZap[i] do
begin
if x=MZap[i].data
then
begin
Label1.Caption:=('Фамилия:'+#32+StringGrid1.Cells[0,i]+#13+'Имя:'+#32+StringGrid1.Cells[1,i]+#13+'Знак зодиака:'+#32+StringGrid1.Cells[2,i]);
a:=1
end;
end;
if a<>1
then
begin
MessageDlg('Такого ученика нет в списке', mtInformation, [mbOk], 0)
end;
end;
procedure TForm1.BitBtnNewClick(Sender: TObject);
var
i:integer;
begin
if MessageDlg('Содержимое существующего файла будет уничтожено. Вы уверены?',mtConfirmation, mbYesNoCancel, 0)=mrYes then
begin
for i:=1 to n do
with StringGrid1,MZap[i] do
begin
family:=Cells[0,i];
name:=Cells[1,i];
znak:=Cells[2,i];
data:=StrToInt(Cells[3,i]);
end;
with OpenDialog1 do
begin
Title:='Создание файла';
if Execute then
begin
FileNameZap:=FileName;
AssignFile(FileZap,FileNameZap);
ReWrite(FileZap);
for i:=1 to n do
write(FileZap,MZap[i]);
CloseFile(FileZap);
end;
end;
end;
end;
procedure TForm1.BitBtnOpenClick(Sender: TObject);
var
i:integer;
begin
with OpenDialog1 do
begin
Title:='Открытие файла';
if Execute then
begin
FileNameZap:=FileName;
AssignFile(FileZap,FileNameZap);
ReSet(FileZap);
n:=0;
while not EoF(FileZap) do
begin
n:=n+1;
read(FileZap,MZap[n]);
end;
SpinEdit1.Text:=IntToStr(n);
StringGrid1.RowCount:=n+1;
for i:=1 to n do
with StringGrid1,MZap[i] do
begin
Cells[0,i]:=family;
Cells[1,i]:=name;
Cells[2,i]:=znak;
Cells[3,i]:=IntToStr(data);
end;
CloseFile(FileZap);
end;
end;
BitBtnSort.Show;
BitBtnSave.Show;
end;
procedure TForm1.BitBtnSaveClick(Sender: TObject);
var
i: integer;
begin
with SaveDialog1 do
if Execute then
begin
FileNameText:=FileName;
AssignFile(FileText,FileNameText);
ReWrite(FileText);
for i:=1 to n do
with MZap[i] do
writeln(FileText,family:20,name:15,znak:10,data:12);
CloseFile(FileText);
end;
BitBtnSort.Hide;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
var i,m: integer;
begin
m:=StrToInt(SpinEdit1.Text);
with StringGrid1 do
begin
RowCount:=m+1;
if m>n then
for i:=n+1 to m do
begin
Cells[0,i]:=IntToStr(i);
Cells[1,i]:='';
Cells[2,i]:='';
Cells[3,i]:='';
end;
end;
n:=m;
end;
initialization
{$I unit1.lrs}
end.