Главная страница
Навигация по странице:

  • ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ ПРОГРАММЕ

  • ООП. ООП 2лек. Разработка программного кода приложения. События и обработчики событий


    Скачать 26.61 Kb.
    НазваниеРазработка программного кода приложения. События и обработчики событий
    Дата11.11.2021
    Размер26.61 Kb.
    Формат файлаdocx
    Имя файлаООП 2лек.docx
    ТипПрограмма
    #268905

    РАЗРАБОТКА ПРОГРАММНОГО КОДА ПРИЛОЖЕНИЯ.
    СОБЫТИЯ И ОБРАБОТЧИКИ СОБЫТИЙ
    Приложения, созданные с помощью C++ Builder, – это приложения для Windows.Одним из основных свойств таких приложений является управлениепо событиям. Это означает, что программа выполняется на основе генерируе-мых сообщений о событиях, которые обрабатываются программным кодом приложения. Такой код необходимо написать для каждого события, на которое должна реагировать программа. Процедура, предназначенная для реагирования на какое-либо событие, называется в С++ Builder функцией обработки собы-тия.Выделяются две категории событий:события,обусловленные действия-ми пользователя, – пользовательские события и обычные события – про-граммно-управляемые события.
    Функции обработки пользовательских событий составляют главную часть кода приложения. Они обеспечивают интерактивное взаимодействие приложе-ния и пользователя. В C++ Builder для этого применяются предварительно оп-ределенные обработчики событий, которые могут использоваться практиче-ски всеми компонентами. Сюда относятся обработчики событий мыши и кла-виатуры.


      • обычным (программно-управляемым) событиям относятся события ак-тивизации, завершения, события изменения состояния отдельных компонентов




    • прочие события, которые являются косвенным результатом действия пользо-вателя.


    C++ Builder генерирует функции обработки каждого события и дает имимена в соответствии с именами компонентов, для которых эти процедуры предназначены. Например, если дважды щелкнуть по кнопке Button1, в модуле формы будет сгенерирована пустая функция обработки события, которая вы-глядит следующим образом:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {

    }

    Далее необходимо вписать нужный программный код в составной блок. Выделите кнопку «Вычислить», перейдите на страницу «Events» в инспек-
    торе объектов и дважды щелкните по имени обработчика события OnClick. Система добавит в текст модуля пустую функцию обработки щелчка по кноп-ке.
    Что должна выполнять эта функция? Во-первых, в ней должно считывать-ся содержимое полей ввода коэффициентов a, b и c; далее считанные значения должны быть превращены в числа, поскольку свойство Text компонента Edit имеет строковый тип; затем должны быть выполнены необходимые вычисления и результат помещен в поля Edit4 и Edit5.

    17


    Добавьте в функцию программный код, приведенный ниже.
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    float a,b,c,d,x1,x2;
    a=StrToFloat(Edit1->Text);
    b=StrToFloat(Edit2->Text);
    c=StrToFloat(Edit3->Text);
    d=b*b-4*a*c;
    if (d>=0)
    {
    x1=(-b-sqrt(d))/(2*a);
    x2=(-b+sqrt(d))/(2*a);
    Edit4->Text=FloatToStr(x1);
    Edit5->Text=FloatToStr(x2);
    }
    else
    ShowMessage("Нет действительных корней");
    }


    • разделе директив препроцессора модуля формы добавьте строку


    #include

    Данный заголовочный файл позволит воспользоваться библиотекой мате-

    матических функций (в нашем случае – функцией вычисления квадратного корня).
    Отметим в тексте следующие моменты.

    Для вычислений мы использовали только локальные переменные, так как их не надо использовать в других процедурах.
    Для превращения строки символов в число и обратного преобразования используются функции StrToFloat( ) и FloatToStr( ) соответственно. Для выда-чи сообщения «Нет действительных корней» используется функция Windows вызова диалогового окна ShowMessage( ).
    Определим функцию обработки щелчка по кнопке «Выход». Щелкните дважды по данной кнопке и в появившемся окне редактора кода добавьте в функцию Button2Click строку

    18

    Form1->Close( );
    (Close( ) – метод, закрывающий окно нашего приложения.)

    Сохраните проект и запустите его на выполнение. Проверьте его работу при различных исходных данных. Если система обнаружит ошибки, устраните их и снова запустите проект на выполнение.
    Определим теперь события меню и нажатия кнопок на панели инструмен-тов. Для этого нам не понадобится писать никакого кода. Мы свяжем нужные события с уже определенными событиями – щелчками по кнопкам «Вычис-лить» и «Выход».
    Щелкните по строке меню и затем выберите первый пункт меню «Вычис-лить». В инспекторе объектов на странице «Events» в строке обработчика On-Click в списке имеющихся функций выберите функцию Button1Click.Щелкнитемышью по форме и то же самое проделайте с пунктом меню «Выход», только теперь свяжите его с функцией Button2Click. Выберите пункт меню «Справка»,


    • инспекторе объектов дважды щелкните в строке обработчика OnCliсk, в ре-дакторе кодов в функцию N3Click добавьте команду


    Form2->ShowModal( );

      • разделе директив модуля главной формы не забудьте добавить директи-ву подключения заголовочного файла модуля справки


    #include "имя_модуля_справки.h".

    Здесь имя_модуля_справки – имя, с которым вы сохранили модуль на дис-

    ке.

    Метод ShowModal( ) вызывает окно справки, причем пока оно не будет за-крыто, перейти в главное окно приложения не удастся (модальное состояние окна).
    Выделите кнопку «Вычислить» на панели инструментов и в инспекторе объектов для обработчика OnClick выберите функцию Button1Click; для кнопки Выход – функцию Button2Click. Для кнопки «Справка» создайте процедуру, об-
    рабатывающую щелчок аналогично тому, как вы сделали это для пункта ме-ню «Справка».
    Осталось определить работу строки состояния StatusBar1. Выделите ее на форме, перейдите на страницу «Properties» инспектора объектов, найдите свой-ство SimplePanel и присвойте ему значение true.
    Щелкните дважды по форме и в теле функции FormCreate поместите сле-дующий код:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    StatusBar1->SimpleText="Введите коэффициенты уравнения";
    }
    Сохраните проект и проверьте работу приложения.



    19

    ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ


        • ПРОГРАММЕ




      • разработанной программе мы не учли возможные ошибки ввода данных. Во-первых, пользователь может ввести последовательность символов, которая не является числом. Во-вторых, пользователь может ввести значение коэффи-циента a = 0, что приведет к попытке деления на ноль в операторах, вычис-ляющих корни уравнения. Обе ситуации называются исключительными. При-мерами других исключительных ситуаций являются переполнение, попытка от-крыть несуществующий файл и т. п. Для контроля за подобными ситуациями в системе C++ Builder существует так называемый механизм обработки исклю-чительных ситуаций. При возникновении исключительной ситуации программа генерирует так называемое исключение и выполнение дальнейших вычислений




    • данном блоке прекращается. Исключение – это объект специального вида, характеризующий возникшую в программе исключительную ситуацию. Осо-бенностью исключений является то, что они сугубо временные объекты. Как только они обрабатываются каким-либо обработчиком, они разрушаются. Если исключение нигде не перехвачено в программе, то оно обрабатывается стан-дартным методом Tapplication.HandleException. Данный метод обеспечивает выдачу пользователю краткой информации в окне сообщений и уничтожение экземпляра исключения.


    Наиболее кардинальный способ борьбы с исключениями – обработка их с помощью логических блоков try и catch:
    try
    {
    //операторы, которые могут вызвать возникновение исключительной
    //ситуации
    }
    catch (Тип &e)
    {


    • команды, обрабатывающие данную исключительную ситуацию


    }
    Здесь Тип – это тип (класс) исключения.


    • С++ Builder определен целый ряд классов исключений.Рассмотрим дваиз них, нужных в нашей программе: класс EConvertError, связанный c ошибкой преобразования строк или объектов (в частности, в функции StrToFloat), класс EZeroDivdide,связанный с попыткой деления на нуль числа с плавающей запя-той.

    20

    Измените текст функции Button1Click в соответствии с приведенным ниже текстом.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    float a,b,c,d,x1,x2;
    try
    {
    a=StrToFloat(Edit1->Text);
    b=StrToFloat(Edit2->Text);
    c=StrToFloat(Edit3->Text);
    }
    catch(EConvertError &e)
    {
    ShowMessage("Ошибочные данные!");
    return;
    }
    d=b*b-4*a*c;
    if (d>=0)
    {
    try
    {
    x1=(-b-sqrt(d))/(2*a);
    x2=(-b+sqrt(d))/(2*a);
    }
    catch(EZeroDivide &e)
    {
    ShowMessage("Коэффициент а не может быть равен нулю!");
    return;
    }
    Edit4->Text=FloatToStr(x1);

    21

    Edit5->Text=FloatToStr(x2);
    }
    else


    ShowMessage("Действительных корней нет");
    }
    Сохраните изменения в тексте модуля и проверьте отсутствие ошибок.


    написать администратору сайта