Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная 1 - Калькулятор

.pdf
Скачиваний:
72
Добавлен:
11.02.2016
Размер:
136.87 Кб
Скачать

Лабораторная работа №1 «Простой калькулятор» Цель работы:

В ходе разработки простого калькулятора, изучить работу со стандартными компонентами Delphi: TButton, TEdit, TCheckBox, TRadioButton.

Задание на лабораторную работу

Используя среду разработки BDS Delphi разработать приложение (VCL Forms Application), которое предназначено для создания простого калькулятора.

Дизайн интерфейса приложения разработать, как показано на рисунке 1.

Рисунок 1 – Внешний вид проектируемого приложения

Приложение должно:

Вводить числовые данные в поле ввода

Производить простейшие арифметические вычисления

Вычислять тригонометрические функции в градусной и радианной мере углов

Изменять внешний вид и размеры формы в зависимости от режимов работы (простой/расширенный)

1

Конструирование главного окна приложения

Шаг 1 Создание проекта

Создать новый проект, используя шаблон VCL Forms Application. Командой «Save All» (Сохранить все) сохранить файлы проекта в отдельную папку. Имя модуля формы главного окна задать CalculatorUnit. Имя проекта задать CalculatorPr.

Шаг 2 Настройка свойств формы

Используя Object Inspector (F11), установить следующие свойства главной формы приложения.

Имя главной формы.

Name = MainForm

Текст заголовка окна.

Caption = Калькулятор

Размеры окна задать при помощи следующей пары свойств:

Height = 340

Width = 380

Начальное положение окна после запуска приложения - по центру экрана.

Position = poScreenCenter

Остальным свойствам формы оставить значения, заданные по умолчанию.

Шаг 3 Конструирование формы главного окна

Из панели инструментов Standart выбрать и поместить на форму следующие элементы управления:

Поле ввода TEdit – 1 экземпляр

Кнопка TButton – 18 экземпляров (для уменьшения времени можно воспользоваться операцией копирования)

Флажок TCheckBox – 1 экземпляр

Группу TGroupBox – 1 экземпляр

Выделите компонент-группу (TGroupBox) и поместите на неё:

Кнопка TButton – 4 экземпляра

Группу переключателей TRadioGroup – 1 экземпляр Расположит компоненты в соответствии с рисунком 2.

2

TEdit

TButton

TCheckBox

TGroupBox

Рисунок 2 – Компоновка компонентов на форме приложения

Установить значения свойства Name компонентов так, чтобы было понято их назначение и тип. Для компонентов, которые не упоминаются в процедурах-обработчиках событий устанавливать «понятные» имена не обязательно.

Настроить свойства текстового поля Edit1. Изменить его имя (свойство Name) на ResultField. Очистить свойство Text. Ширину поля ввода сделать равной 300 пикселей.

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

Примечание:

Скорее всего, при изменении свойств кнопок, вы нарушите их положение на форме. Выравнивание – это один из важных аспектов при создании профессионального графического интерфейса. Для выравнивания компонентов необходимо выделить более чем один компонент на форме (удерживая нажатой кнопку Shift или «обводя их рамкой»). После этого из контекстного меню, открывающегося щелчком правой кнопки мыши по форме, выбрать последовательно пункты Position - Align… как показано на рис. 3а. Должно открыться вспомогательное окно Alignment (рис 3б.), в котором можно выбрать варианты выравнивания выделенных компонентов по вертикали или горизонтали.

3

.

а)

б)

Рис.3. Способ взаимного расположения компонентов на форме. Выбрать кнопку Button1. Задать его ширину (свойство width) и

высоту (свойство height) равной 30 пикселей. Изменить свойство Caption на 1. Повторить те же действия для кнопок Button2…Button10, задав заголовки кнопок в диапазоне от 2 до 0. Обратите внимание, что при размещении кнопок, первый щелчок по ней позволяет задать заголовок. Если же вы выделите другой элемент на форме, то редактирование заголовка кнопки возможна лишь через свойство text панели свойств.

Изменить имена кнопок с арифметическими действиями и функциями. Кнопка должна носить смысловое имя, из которого понятно её назначение. Задать имена в соответствии с рис. 4.

ButtonComma ButtonPM

ButtonС

ButtonPlus

ButtonMinus

ButtonMulti

ButtonEqual

ButtonDivide

ButtonTan

ButtonSin

ButtonCo

ButtonSqrt

Рисунок 4 – Название кнопок

4

Компоненту RadioGroup1 задайте свойство Items, указав в открывшемся окне пункты Радианы и Градусы. Измените также следующие свойства:

Columns = 2

ItemIndex = 0

На этом шаг первый разработки приложения завершен. Сохраните содержимое проекта командой File-Save All… (Shift+Ctrl+S). Скомпилируйте и запустите проект клавишей F9.

Разработка обработчиков событий и вспомогательных процедур и функций

Шаг 4 Создание основных процедур

Выделите кнопку с заголовком 1. Нам необходимо запрограммировать реакцию щелчка пользователя по этой кнопке. Давайте разберем, что необходимо сделать. По щелчку нужно прочитать текущее значение поля ResultField и добавить к его содержимому символ «1». Приступим к реализации описанного.

Сделать двойной щелчок по кнопке (или создать обработчик события onClick на закладке Events в ObjectInspector). Delphi переходит к закладке «Code» для написания программного кода обработчиков событий. В заготовке процедуры Button1Click следует набрать следующий текст:

Листинг 1 – Процедура щелчка по кнопке «1».

procedure TMainForm.Button1Click (Sender: TObject); begin

ResultField.Text := ResultField.Text+'1';

end;

Сохранить сделанные изменения, скомпилировать проект и запустить приложение на выполнение. Проверьте, что кнопка 1 корректно отрабатывает щелчки пользователя.

Можно, поступая аналогичным образом, запрограммировать щелчки и по другим кнопкам с цифрами. Но вместо этого, давайте подумаем – чем отличаются щелчки по этим кнопкам? Только значением, отображенным в их заголовках. Поэтому лучше сделать следующие действия:

Изменить текст процедуры onClick.на следующий:

Листинг 2 – Процедура щелчка по кнопке «1».

procedure TMainForm.Button1Click (Sender: TObject); begin

ResultField.Text := ResultField.Text+TButton(Sender).Caption; end;

Параметр процедуры с именем Sender указывает, какой объект вызывает процедуру-обработчик. Так как в нашем случае это кнопка, надо

5

привести его к типу TButton, заключить его для этого в скобки. После этого можно обращаться к свойству заголовка. В таком виде процедура работает так же, как и процедура, приведенная в листинге 1, но эту процедуру можно один раз назначить для всех цифровых кнопок. Перейдите не закладку Design (или нажмите клавишу F12). Вам следует одну за другой выделить все цифровые кнопки, перейти на закладку Events в Object Inspector и нажать на кнопку с треугольной стрелкой в обработчике onClick. Из выпадающего списка надо выбрать пункт ButtonClick. Теперь все кнопки выполняют одну и ту же процедуру, но со своим индивидуальным параметром TButton(Sender).Caption.

Проверить работоспособность этого метода.

Наступила очередь программировать поведение кнопок арифметических операций. Начнем с кнопки «+». По щелчку этой кнопкой мы должны:

1)преобразовать текст, хранящийся в поле ввода в число;

2)запомнить это число в переменную для дальнейшей работы;

3)очистить поле для ввода следующего числа.

Для запоминаемого числа нужно создать глобальную переменную valA (типа real). В обработчике щелчка по кнопке «+» написать следующий текст:

Листинг 3 – Процедура щелчка по кнопке «+».

procedure TMainForm.ButtonPlusClick(Sender: TObject); begin

valA := StrToFloat(ResultField.Text); ResultField.Text:='';

end;

Чтобы увидеть результат сложения, осталось запрограммировать щелчок по кнопке «=».

Листинг 4 – Процедура щелчка по кнопке «=».

procedure TMainForm.ButtonEqualClick (Sender: TObject); var Result: real;

begin

valB := StrToFloat(ResultField.Text); Result := valA+valB;

ResultField.Text:= FloatToStr(Result);

end;

Проверьте корректность работы операции сложения.

Теперь давайте запрограммируем реакцию щелчка по кнопкам «-» и «*». Как и в случае с цифровыми кнопками подключим к ним единый обработчик. Заготовка для него уже есть – это процедура щелчка по кнопке «плюс». Действительно, во всех арифметических операциях нужно запомнить текущее значение в поле ввода и очистить его. Но теперь нам нужно запомнить какую кнопку нажимали. У каждого элемента

6

управления в Delphi есть полезное свойство – тэг (Tag). Это свойство имеет тип integer. Достаточно установить у кнопки «+» это свойство равным 0, у кнопки «-» - 1, у кнопки «*» - 2, а у кнопки «/» - 3. Объявляем глобальную целочисленную переменную – operation. Допишем в описание метода щелчка по плюсу дополнительную строку:

Листинг 5 – Процедура щелчка по кнопке «+».

procedure TMainForm.ButtonPlusClick(Sender: TObject); begin

valA := StrToFloat(ResultField.Text); operation:= TButton(Sender).Tag;

ResultField.Text:='';

end;

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

Последнее что осталось сделать – изменить процедуру кнопки «=».

Листинг 6 – Процедура щелчка по кнопке «=».

procedure TMainForm.ButtonEqualClick (Sender: TObject); var Result: real

begin

valB := StrToFloat(ResultField.Text); case operation of

0:Result := valA+valB;

1:Result := valA-valB;

2:Result := valA*valB;

3:if (valB<>0) then Result := valA/valB else ResultField.Text('Ошибка') ;

end;

ResultField.Text:= FloatToStr(Result);

end;

Сохраните приложение и проверьте его работу. Если программа работает правильно, можно считать, что шаг 4 выполнен успешно.

Шаг 5 Создание дополнительных процедур

Разработанное приложение является целочисленным калькулятором. Поэтому его использование весьма ограничено. Необходимо переработать его для возможности ввода вещественных чисел.

На первый взгляд решение очевидно – прибавить к содержимому ResultField символ «,». Однако ситуация несколько усложняется тем, что на одних компьютерах в качестве разделителя целой и дробной частей может использоваться запятая, а на других – точка. Как же программе распознать текущее значение этой переменной Windows? Ведь если ошибиться в наборе этого разделителя, операционная система не сможет воспринять набираемые нами символы как число и выдаст ошибку. На помощь

7

приходит переменная DecimalSeparator из стандартного пакета SysUtils. Текст процедуры щелчка по кнопке ButtonCommaClick лучше записать так:

Листинг 7 – Процедура щелчка по кнопке «,».

procedure TMainForm. ButtonCommaClick (Sender: TObject); begin

ResultField.Text:= ResultField.Text+DecimalSeparator; end;

Предусмотрим возможность работы нашего калькулятора в двух режимах :

«простой» - рассмотренный выше вариант для выполнения четырех арифметических действий

«расширенный» - для выполнения также тригонометрических

расчетов.

Очевидно, что при «простом» режиме показывать пользователю кнопки ButtonSin … ButtonSqrt не надо. Пусть за показ (сокрытие) этих компонентов отвечает флажок CheckBox1. Создайте процедуру-обработчик щелчка по этому флажку.

Листинг 8 – Процедура щелчка по флажку «CheckBox1»

procedure TCalcForm.CheckBox1Click(Sender: TObject); begin

GroupBox1.Visible:= CheckBox1.Checked; if CheckBox1.Checked then

CheckBox1.Caption:='Простой' else

CheckBox1.Caption:='Расширенный'

end;

Все операции, выполняемые с помощью кнопок, вынесенных на группу TGroupBox являются унарными – для их вычисления достаточно ввести в

поле ввода значение и нажать кнопку с операцией. В качестве примера рассмотрим вычисление синуса:

Листинг 9 – Процедура щелчка по кнопке «ButtonSin»

procedure TCalcForm.ButtonSinClick(Sender: TObject); begin

valA := StrToFloat(ResultField.Text);

ResultField.Text:=FloatToStr(Sin(valA));

end;

Помните, что все тригонометрические вычисления в Delphi выполняются в радианной мере углов. Для расчета синуса угла, заданного в градусах, вам необходимо будет перевести углы в радианы.

8

Задание на самостоятельную работу.

1.Запрограммируйте оставшиеся кнопки панели TGroupBox .

2.Предоставьте пользователю выбирать градусную или радианную меру углов при помощи радио-переключателя TRadioGroup.

3.Запрограммируйте кнопку очистки.

Состав отчета по лабораторной работе:

1.Перечислите назначение и перечень основных свойств элементов управления и их обработчиков событий, которые вам потребовались при разработке приложения.

2.Приведите листинг фрагмента, отвечающего за реализацию п.1- 3. задания на самостоятельную работу

9