Создание процедур обработки событий 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание процедур обработки событий



Двойным нажатием клавиши “мыши” в свободном поле формы откроем процедуру обработки события FormCreate и введем текст процедуры.

Процедуры обработки событий нажатия кнопок создаются так же, как в предыдущих работах, вывод этих процедур на экран осуществляется двойным щелчком по компонентам. Процедура обработки события SpinEditChange выводится двойным щелчком по компоненту SpinEdit.

Пользуясь текстом модуля UnFile, внимательно наберите операторы этих процедур.

 

Текст модуля 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.

9.2.5. Работа с приложением

Выполните созданное приложение. Занесите в соответствующе поля компонента StringGrid1 исходную информацию. Кнопкой «Сохранить файл» сохраните данные в файле. Завершите выполнение приложения.

Вновь запустите приложение кнопкой «Открыть файл» откройте только что созданный файл. Убедитесь, что информация не содержит ошибок. При необходимости обнаруженные ошибки можно исправить, а также дополнить ведомость новой информацией и снова нажать кнопку «Сохранить файл».

Для сортировки ведомости в порядке возрастания дохода на члена семьи воспользуйтесь кнопкой «Сортировка» и сохраните отсортированную информацию в текстовый файл (кнопкой «Сохранить текстовый файл»). Далее выведите список первоочередников и список второй очереди, воспользовавшись соответствующими кнопками.

Еще раз завершите и вновь запустите приложения.

Кнопкой «Открыть файл» откройте файл и убедитесь, что в нем теперь содержится ведомость, отсортированная в порядке возрастания дохода на члена семьи. Кнопкой «Создать текстовый файл» сохраните информацию в текстовом файле. Для просмотра содержимого текстового файла воспользуйтесь, например, приложением «Microsoft Word».

Используя все управляющие компоненты панели, убедитесь в правильном функционировании приложения во всех предусмотренных режимах работы.

9.3. Выполнение индивидуального задания

По указанию преподавателя выберете свое индивидуальное задание. Создайте приложение и протестируйте его работу

Во всехзаданиях предусмотреть сохранение вводимых данных в файле и возможность чтения из ранее созданного файла. Создать текстовый файл исходных данных.

Индивидуальные задания

1. Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О.абитуриента, оценки по трем дисциплинам. Определить средний балл каждого абитуриента, средний балл по университету и вывести список абитуриентов, средний балл которых выше среднего балла по университету в порядке убывания среднего балла.

2. В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы изделий (телевизор, радиоприемник и ч. п.), марка изделия, дата приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию о состоянии заказов по отдельной, введенной с клавиатуры группе в порядке возрастания даты приемки в ремонт.

3. У администратора железнодорожных касс хранится информация о свободных местах в поездах дальнего следования на ближайшую неделю в следующем виде: дата выезда, пункт назначения, время отправления, число свободных мест. Оргкомитет международной конференции обращается к администратору с просьбой зарезервировать места до города N на некоторую дату с временем отправления поезда не позднее t часов вечера. Вывести информацию о наличии свободных мест или сообщение о невозможности выполнить заказ. Название города, дата и самое позднее время отправления вводятся с клавиатуры.

4. Разработать программу формирования ведомости об успеваемости студентов. Каждая запись этой ведомости должна содержать: номер группы, Ф.И.О. студента, оценки за последнюю сессию. Подсчитать средний балл каждого студента. Вынести список успевающих студентов (не имеющих ни одной двойки) по группам. В каждой группе Ф.И.О. студентов должны быть расположены в порядке убывания среднего балла.

5. В справочной аэропорта хранится расписание вылета самолетов на следующие сутки. Для каждого рейса указаны: номер рейса, тип самолета, пункт назначения, время вылета. Вывести все номера рейсов, типы самолетов и времена вылета для заданного пункта назначения в порядке возрастания времени вылета.

6. В исполкоме формируется список учета нуждающихся в улучшении жилищных условий. Каждая запись этого списка содержит, порядковый номер, Ф.И.О., величину жилплощади на одного члена семьи и дату постановки на учет. По заданному количеству квартир, выделенных по данному списку в течение года, вывести список претендентов, если известно, что квартиры выделяются в порядке возрастания даты постановки на очередь тем семьям, у которых на одного члена семьи приходится менее заданного количества метров.

7. Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О., адрес, оценки по трем дисциплинам. Определить количество абитуриентов, проживающих в г. Минске и сдавших экзамены со средним баллом не ниже 4.5, вывести их фамилии в алфавитном порядке.

8. Имеется список женихов и невест. Каждая запись списка содержит пол, имя, возраст, рост, вес, а также требования к партнеру: наименьший и наибольший возраст, наименьший и наибольший вес, наименьший и наибольший рост. Для первых трех девушек (в алфавитном порядке имен) вывести списки претендентов.

9. Различные цеха завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают: наименование, количество, номер цеха. Для заданного цеха необходимо вывести количество выпущенных изделий по каждому наименованию в порядке убывания количества.

10. Информация о сотрудниках предприятия содержит: Ф.И.О., номер отдела, должность, дату начала работы. Вывести списки сотрудников заданного отдела в порядке убывания стажа.

11. Информация о сотрудниках фирмы включает: Ф.И.О., табельный номер, количество проработанных часов за месяц, почасовый тариф. Рабочее время свыше 144 часов считается сверхурочным и оплачивается в двойном размере. Вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 12% от суммы заработка

12. Информация о сотрудниках предприятия содержит: Ф.И.О., номер отдела, должность, дату начала работы. Вывести списки сотрудников заданного отдела в порядке убывания стажа.

13. В магазине имеется список поступивших в продажу автомобилей. Каждая запись этого списка содержит: марку автомобиля, стоимость, расход топлива на 100 км, надежность (число лет безотказной работы), комфортность (отличная, хорошая, удовлетворительная). Вывести перечень автомобилей, удовлетворяющих требованиям покупателя, которые вводятся с клавиатуры в виде некоторого интервала допустимых значений.

14. Для книг, хранящихся в библиотеке, задаются: регистрационный номер книги, автор, название, год издания, издательство, количество страниц. Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года.

15. На междугородной АТС информация о разговорах содержит дату разговора, код и название города, время разговора, тариф, номер телефона в этом городе и номер телефона абонента. Вывести по заданному городу все разговоры с подсчетом стоимости в порядке убывания даты, а так же общее время разговоров и общую стоимость.

16. Информация об участниках спортивных соревнований содержи; наименование страны, название команды, Ф.И.О. игрока, игровой номер, возраст, рост, вес. Вывести информацию о самом молодом, рослом и легком игроке заданной команды.

17. Для участия в конкурсе на замещение вакантной должности сотрудника фирмы желающие подают следующую информацию: Ф.И.О, год рождения, образование (среднее, специальное, высшее), знание иностранных языков (английский, немецкий, французский, владею свободно, читаю и перевожу со словарем), владение компьютером (MSDOS, Windows), стаж работы, наличие рекомендаций. Вывести список претендентов в соответствии с требованиями руководства фирмы.

18. В технической службе аэропорта имеется справочник, содержащий записи следующей структуры: тип самолета, год выпуска, расход горючего на 1 000 км. Для определения потребности в горючем техническая служба запрашивает расписание полетов. Каждая запись расписания содержит следующую информацию: номер рейса, пункт назначения, дальность полета. Вывести суммарное количество горючего, необходимое для обеспечения полетов на следующие сутки, если известно, что в полетах будут только самолеты заданного типа и заданного года выпуска.

19. В библиотеке имеется список книг. Каждая запись этого списка содержит: фамилии авторов, название книги, год издания. Вывести информацию о книгах, в названии которых встречается некоторое ключевое слово (ввести с клавиатуры).

20. Каждая запись списка вакантных рабочих мест содержит: наименование организации, расстояние в км от центра города, должность, продолжительность ежегодного оплачиваемого отпуска. Вывести список рабочих мест в соответствии с требованиями клиента.

21. При постановке на учет в ГАИ автолюбители указывают следующие данные: марка автомобиля, год выпуска, номер двигателя, номер кузова, цвет, номерной знак, Ф.И.О и адрес владельца. Вывести список автомобилей, проходящих техосмотр в текущем году, сгруппированных по маркам автомобилей. Учесть, что если текущий год четный, техосмотр проходят автомобили с четными номерами двигателей, иначе с нечетными номерами.

22. В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время отправления и прибытия. Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в заданный пункт назначения раньше заданного времени в порядке убывания времени прибытия.

23. Для участия в конкурсе исполнителей необходимо заполнить следующую анкету: Ф.И.О., год рождения, название страны, класс музыкального инструмента (гитара, фортепиано, скрипка, виолончель). Вывести список самых молодых (моложе заданного возраста) лауреатов конкурса по классам инструментов в порядке занятых мест.

24. Для получения места в общежитии формируется список студентов, который включает Ф.И.О. студента, группу, средний балл, доход на одною члена семьи. Общежитие в первую очередь предоставляется успевающим студентам (не имеющим ни одной двойки) в порядке уменьшения среднего балла. Вывести список очередности предоставления мест в общежитии.

25. Список группы студентов содержит следующую информацию: Ф.И.О.. рост и вес. Вывести в алфавитном порядке Ф.И.О. студентов, рост и вес которых чаще всего встречаются в списке.

26. Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц товара, цену единицы и дату поступления товара на склад. Вывести в алфавитном порядке список товаров, хранящихся больше месяца, стоимость которых превышает 10 000 руб., а также общую стоимость всех этих товаров.

27. Список группы студентов содержит следующую информацию: Ф.И.О., рост и вес. Вывести Ф.И.О. студентов, рост и вес которых являются в списке уникальными,

28. В магазине формируется список лиц, записавшихся на покупку товараповышенного спроса. Каждая запись этого списка содержит: порядковый номер, Ф.И.О., домашний адрес покупателя и дату постановки на учет. Удалитьиз списка все повторные записи,проверяя Ф.И.О. и домашний адрес.

29. Разработать приложение, которое формирует файл F1, содержащий целые числа, и переписывает этот файл в другой файл F2, помещая в него из F1 только положительные числа.

30. Разработать приложение, переписывающее в текстовый файл Т2 содержимое текстового файла Т1, но без строк, содержащих цифры.

31. Разработать приложение для слияния двух отсортированных по убыванию значения некоторого элемента файлов F1 и F2. Результатом слияния должен быть файл F3, элементы которого упорядочены по возрастанию. Все файлы имеют одинаковую структуру записи.


Лабораторная работа № 10. ПРОГРАММИРОВАНИЕ

С ИСПОЛЬЗОВАНИЕМ ФУНКЦИЙ И ПРОЦЕДУР.

ПРОЦЕДУРНЫЕ ТИПЫ. СОЗДАНИЕ МОДУЛЕЙ

Цель работы: освоить методику создания модулей, содержащих процедуры и функции.



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 480; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.174.156 (0.117 с.)