- •Часть 2
- •Лабораторная работа № 6. Программирование циклических вычислительных процессов. Итерационные циклы
- •Отладка модулей проекта
- •Отладка синтаксических ошибок
- •Отладка логических ошибок
- •Итерационные циклы
- •Текст модуля UnIterate
- •Пример создания приложения
- •Сохранение проекта
- •Размещение компонентов на Форме
- •6.4. Выполнение индивидуального задания
- •Лабораторная работа № 7. Программирование с использованием строк
- •Краткие теоретические сведения
- •7.1.1. Символьные типы
- •7.1.2. Строковые типы
- •7.1.3. Процедуры и функции для работы со строками
- •Применение компонентов ListBox и ComboBox для работы со строками
- •7.3. Пример создания приложения
- •7.3.1. Сохранение проекта
- •7.3.2. Размещение компонентов на Форме
- •7.3.3. Создание процедуры-обработчика события активизации Формы FormActivate.
- •7.3.4. Создание процедуры-обработчики события ComboBox1KeyPress
- •7.3.5. Создание процедуры-обработчики события нажатия клавиши «мыши» ComboBox1Click
- •7.3.6. Работа с приложением
- •7.4. Текст модуля UnStr
- •7.5. Выполнение индивидуального задания
- •С использованием записей
- •8.1. Краткие теоретические сведения
- •8.2. Пример создания приложения
- •8.2.1. Указания по созданию приложения
- •8.2.2. Размещение компонентов по Форме
- •8.2.3.Создание процедур обработки событий FormCreate и ButtonClick
- •8.2.4. Работа с приложением
- •8.2.5. Текст модуля UnZap
- •8.3. Выполнение индивидуального задания
- •Лабораторная работа № 9. Програмирование с использованием файлов
- •9.1. Краткие теоретические сведения
- •9.2. Пример создания приложения
- •9.2.1. Указания по созданию приложения
- •9.2.2.Размещение компонентов по Форме.
- •9.2.3.Создание процедур обработки событий
- •9.2.4. Текст модуля UnFile
- •9.2.5. Работа с приложением
- •9.3. Выполнение индивидуального задания
- •Лабораторная работа № 10. Программирование с использованием функций и процедур. Процедурные типы. Создание модулей
- •10.1. Краткие теоретические сведения
- •10.1.1. Объявление и описание функций и процедур
- •10.1.2. Различные варианты передачи параметров в функции и процедуры
- •10.1.3. Процедурные типы
- •Текст модуля UnFancProc
- •Текст модуля UnModul
- •Выполнение индивидуального задания
- •Лабораторная работа № 11. Программирование с использованием динамических структур данных
- •11.1. Краткие теоретические сведения
- •11.1.1. Указатели
- •11.2. Использование динамических переменных
- •Пример создания приложения
- •11.3.1. Сохранение проекта
- •Размещение компонентов на Форме
- •11.3.3. Создание процедуры обработки событий FormCreate
- •Текст модуля UnDinMas
- •11.5. Выполнение индивидуального задания
- •Лабораторная работа № 12. Программирование с использованием средств для построения и отображения графиков
- •12.1. Методика построения графиков с помощью компонента tChart
- •12.2. Пример написания программы
- •12.2.1. Настройка формы
- •12.2.2. Работа с компонентом tChart
- •12.2.3. Написание программы обработчика события создания формы
- •12.2.4. Написание программ обработчика событий нажатия на кнопки
- •12.3. Модуль программы построения и отображения графиков
- •12.4. Выполнение индивидуального задания
- •Приложение 1 п1. Свойства и методы компонентов п1.1. Общие свойства компонентов
- •2. Компоненты страницы standard
- •3. Компоненты страницы additional
- •4. Компоненты страницы dialogs
- •П2. Простые типы данных языка object pascal
- •П3. Процедуры и функции для работы со строками
- •Литература
9.2.3.Создание процедур обработки событий
Двойным нажатием клавиши “мыши” в свободном поле формы откроем процедуру обработки события FormCreate и введем текст процедуры.
Процедуры обработки событий нажатия кнопок создаются так же, как в предыдущих работах, вывод этих процедур на экран осуществляется двойным щелчком по компонентам. Процедура обработки события SpinEditChange выводится двойным щелчком по компоненту SpinEdit.
Пользуясь текстом модуля UnFile, внимательно наберите операторы этих процедур.
9.2.4. Текст модуля UnFile
Unit UnFile;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, Spin;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
BitBtnNew: TBitBtn;
BitBtnOpen: TBitBtn;
BitBtnSave: TBitBtn;
SpinEdit1: TSpinEdit;
procedure FormCreate(Sender: TObject);
procedure BitBtnNewClick(Sender: TObject);
procedure BitBtnOpenClick(Sender: TObject);
procedure BitBtnSaveClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
zap=record //объявление записи
fio : string[20];
dohod: integer;
mat,soch,english,inf: integer;
end;
zap1=record //объявление записи
fio : string[20];
dohod: integer;
mat,soch,english,inf: integer;
srball: extended;
end;
var
MZap,MZap2: array[1..10] of zap; / /объявление массива записей
MZap1: array[1..10] of zap1;
FileZap: file of zap; // объявление типизированного файла
FileText: TextFile; // объявление текстового файла
FileNameZap,FileNameText: string; // имена файлов
n,k: integer; // n – текущее количество элементов исходных записей;
// к – количество элементов списка второй очереди
{ Обработчик события создания формы}
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='22'; // начальное значение поля минимальной зарплаты
SpinEdit1.Text:='9'; // начальное значение для количества записей
n:=9;
with StringGrid1 do
begin
Cells[0,0]:='Фамилия,инициалы';
Cells[1,0]:='Доход';
Cells[2,0]:='Математика';
Cells[3,0]:='Социология';
Cells[4,0]:='Английский';
Cells[5,0]:='Информатика';
end;
with StringGrid2 do
begin
Cells[0,0]:='Фамилия,инициалы';
Cells[1,0]:='Доход';
Cells[2,0]:='Математика';
Cells[3,0]:='Социология';
Cells[4,0]:='Английский';
Cells[5,0]:='Информатика';
end;
with StringGrid3 do
begin
Cells[0,0]:='Фамилия,инициалы';
Cells[1,0]:='Доход';
Cells[2,0]:='Математика';
Cells[3,0]:='Социология';
Cells[4,0]:='Английский';
Cells[5,0]:='Информатика';
Cells[6,0]:='Средний балл';
end;
BitBtnSave.Hide; // Спрятать кнопку "Создать текстовый файл"
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
fio:=Cells[0,i];
dohod:=StrToInt (Cells[1,i]);
mat:=StrToInt(Cells[2,i]);
soch:=StrToInt(Cells[3,i]);
english:=StrToInt(Cells[4,i]);
inf:=StrToInt(Cells[5,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;
StringGrid2.RowCount :=n+1;
StringGrid3.RowCount :=n+1;
for i:=1 to n do
with StringGrid1,MZap[i] do
begin
Cells[0,i]:=fio;
Cells[1,i]:=IntToStr(dohod);
Cells[2,i]:=IntToStr(mat);
Cells[3,i]:=IntToStr(soch);
Cells[4,i]:=IntToStr(english);
Cells[5,i]:=IntToStr(inf);
end;
CloseFile(FileZap); // закрытие файла
end;
end;
BitBtnSave.Show; // показать кнопку “Сохранить текстовый файл”
end;
{запись текстового файла}
procedure TForm1.BitBtnSaveClick(Sender: TObject);
Var
i:integer;
begin
with SaveDialog1 do
if Execute then //выполнение стандартного диалога выбора имени файла
begin
FileNameText:=FileName;//присваивание имени файла
AssignFile(FileText,FileNameText);//назначить файлу FileText имя
//FileNameText
ReWrite(FileText); //открыть текстовый файл на запись
for i:=1 to n do
with MZap[i] do //запись в текстовый файл
writeln(FileText,i:3,fio:20,mat:5,english:5,soch:5,inf:5);
CloseFile(FileText); //закрытие текстового файла по окончании записи
end;
end;
{Сортировка исходных записей по возрастанию дохода на одного члена семьи}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
vper:zap;
begin
for i:=1 to n do // пересылка данных в массив записей
with StringGrid1,MZap[i] do
begin
fio:=Cells[0,i];
dohod:=StrToInt(Cells[1,i]);
mat:=StrToInt(Cells[2,i]);
soch:=StrToInt(Cells[3,i]);
english:=StrToInt(Cells[4,i]);
inf:=StrToInt(Cells[5,i]);
end;
for i:=2 to n do // сортировка методом пузырька
for j:=n downto i do
if MZap[j-1].dohod>MZap[j].dohod then
begin
vper:=MZap[j-1];
MZap[j-1]:=MZap[j];
MZap[j]:=vper;
end;
for i:=1 to n do // Пересылка рассортированных данных из массива
// записей в StringGrid1
with stringgrid1,mzap[i] do
begin
Cells[0,i]:=fio;
Cells[1,i]:=IntToStr(dohod);
Cells[2,i]:=IntToStr(mat);
Cells[3,i]:=IntToStr(soch);
Cells[4,i]:=IntToStr(english);
Cells[5,i]:=IntToStr(inf);
end;
end;
{ Вывод списка первоочередников в StringGrid2, а всех остальных записей в массив Mzap1}
procedure TForm1.Button2Click(Sender: TObject);
var
i,j,m: integer;
dd: integer;
begin
dd:=StrToInt(Edit1.Text); // ввод значения минимальной зарплаты в
//переменную dd
for i:=1 to n do
with StringGrid2 do // очистка StringGrid2
begin
Cells[0,i]:='';
Cells[1,i]:='';
Cells[2,i]:='';
Cells[3,i]:='';
Cells[4,i]:='';
Cells[5,i]:='';
end;
for i:=1 to n do
with StringGrid1,MZap[i] do // ввод данных в массив записей
begin
fio:=Cells[0,i];
dohod:=StrToInt (Cells[1,i]);
mat:=StrToInt(Cells[2,i]);
soch:=StrToInt(Cells[3,i]);
english:=StrToInt(Cells[4,i]);
inf:=StrToInt(Cells[5,i]);
end;
m:=0;
j:=0;k:=0;
for i:=1 to n do
begin
with StringGrid2,MZap[i] do
if dohod<=dd then // выбор списка первой очереди
begin
j:=j+1;
Cells[0,j]:=fio;
Cells[1,j]:=IntToStr(dohod);
Cells[2,j]:=IntToStr(mat);
Cells[3,j]:=IntToStr(soch);
Cells[4,j]:=IntToStr(english);
Cells[5,j]:=IntToStr(inf);
end
else
begin
k:=k+1; // выбор списка второй очереди в массив MZap1
MZap1[k].fio:=MZap[i].fio;
MZap1[k].dohod:=MZap[i].dohod;
MZap1[k].mat:=MZap[i].mat;
MZap1[k].soch:=MZap[i].soch;
MZap1[k].english:=MZap[i].english;
MZap1[k].inf:=MZap[i].inf;
MZap1[k].srball:=(MZap[i].mat+MZap[i].soch+MZap[i].english+MZap[i].inf)/4
end;
end;
end;
{сортировка списка второй очереди методом "пузырька" по убыванию среднего балла и вывод в StringGrid3}
procedure TForm1.Button3Click(Sender: TObject);
Var
i,j:integer;
vper:Zap1;
begin
for i:=2 to k do
for j:=k downto i do
if MZap1[j-1].srball<MZap1[j].srball then
begin
vper:=MZap1[j-1];
MZap1[j-1]:=MZap1[j];
MZap1[j]:=vper;
end;
for i:=1 to k do
with stringgrid3,mzap1[i] do
begin
Cells[0,i]:=fio;
Cells[1,i]:=IntToStr(dohod);
Cells[2,i]:=IntToStr(mat);
Cells[3,i]:=IntToStr(soch);
Cells[4,i]:=IntToStr(english);
Cells[5,i]:=IntToStr(inf);
Cells[6,i]:=FloatToStrF(srball,ffFixed,2,1);
end;
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]:='';
Cells[1,i]:='';
Cells[2,i]:='';
Cells[3,i]:='';
Cells[4,i]:='';
Cells[5,i]:='';
end;
end;
With StringGrid2 do
begin
RowCount:=m+1;
if m>n then
for i:=n+1 to m do
begin
Cells[0,i]:='';
Cells[1,i]:='';
Cells[2,i]:='';
Cells[3,i]:='';
Cells[4,i]:='';
Cells[5,i]:='';
end;
end;
With StringGrid3 do
begin
RowCount:=m+1;
if m>n then
for i:=n+1 to m do
begin
Cells[0,i]:='';
Cells[1,i]:='';
Cells[2,i]:='';
Cells[3,i]:='';
Cells[4,i]:='';
Cells[5,i]:='';
end;
end;
n:=m;
end;
end.
