Файл: Разработка программ с графическим интерфейсом на С++ (Особенности объектно-ориентированной парадигмы программирования).pdf
Добавлен: 04.04.2023
Просмотров: 237
Скачиваний: 4
Следующий этап – создание собственного класса с методами, позволяющими выполнить задание. Класс MyClassFindWords содержит закрытое поле words (массив строк, в котором хранятся слова переданного текста), а также открытые методы getWords (функция, возвращающая все найденные слова согласно заданию) и setTextForAnalyze (функция, разбивающая переданный в виде строки текст в массив строк – слов текста). Этот класс объявлен в заголовочном файле MyClasses.h (листинг 2).
Рисунок 7 – Вид главной формы приложения
Листинг 2. Объявление собственного класса на языке C++
public ref class MyClassFindWords
{
array <System::String^>^ words;
public:
System::String^ getWords(); void setTextForAnalyze(System::String ^a);
};
Теперь остается определить объявленные методы в отдельном файле MyClasses.cpp. Подобное отделение объявления от реализации позволяет упростить управление классом и работу с ним. Для использования заголовков (то есть прототипов объявленных методов) необходимо добавить строку #include "MyClasses.h".
Метод setTextForAnalyze получает массив слов, используя строку, содержащую последовательность символов, позволяющую разделить текст по словам. Согласно указанным делителям текст разбивается на подстроки (листинг 3).
Листинг 3. Реализация функции setTextForAnalyze
void MyClassFindWords::setTextForAnalyze(System::String^ text)
{
System::String^ delimStr = " ,.!:\t\n";
words = text->Split( delimStr->ToCharArray());
}
Исходный код функции getWords с комментариями приводится в листинге 4.
Листинг 4. Реализация функции getWords
System::String^ MyClassFindWords::getWords()
{
// Строка, содержащая только согласные буквы
System::String^ s = "бвгджзйклмнпрстфхцчшщ";
// Результирующая строка, содержащая искомые слова
System::String^ resultText = "";
// Проход по массиву
for(int j = 0; j < words->Length; j++ )
{
int count = 0; // количество согласных
System::String^ word = words[j];
// Цикл по всем буквам текущего слова
for(int k = 0; k < word->Length; k++)
// Цикл по всем согласным буквам
for(int i = 0; i < s->Length; i++)
if(s[i] == word[k])
count++;
if (count == 3)
resultText = resultText + " " + word;
}
// Вернуть найденные слова
return resultText;
}
Заключительный этап разработки – выполнение обработки нажатия кнопки button1. В листинге 5 приведен исходный код обработчика события. Здесь создается экземпляр собственного класса для поиска слов, текст из текстового поля передается методу класса для разбиения его на слова, затем запрашиваются слова с тремя согласными, которые выводятся в другое текстовое поле.
Листинг 5. Обработка нажатия на кнопку button1
private: System::Void button1_Click
(System::Object^ sender, System::EventArgs^ e)
{
MyClassFindWords^ classFind =
gcnew MyClassFindWords();
classFind->setTextForAnalyze(richTextBox1->Text);
richTextBox2->Text = classFind->getWords();
}
Пример работы программы проиллюстрирован на рисунке 8. Полный исходный код приведен в приложении.
Рисунок 8 – Пример работы созданного приложения
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсовой работы были рассмотрены принципиальные особенности, связанные с созданием и использованием графического интерфейса в приложениях на языке С/С++ в среде MS Visual Studio, приведены основные возможности Windows.Forms, а также конкретный пример создания и использования пользовательского графического интерфейса. Таким образом, выполнены все поставленные задачи, и цель курсовой работы достигнута в полном объеме.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
-
-
-
- Давыдов В.Г. Visual С++. Разработка Windows-приложений с помощью MFS и API функций– СПб.: БХВ – Петербург, 2008. – 576 с.
- Культин Н.Б. Delphi 6. Программирование на Object Pascal. – СПб.: БХВ – Петербург, 2012. – 528 с.
- Троелсен Э. Язык программирования C# 5.0 и платформа .NET 4.5, 6-е изд.: ООО И.Д. Вильямс, 2013 - 1312 с.
- Оберг Роберт Дж., Торстейнсон,Питер. Архитектура .NET и программирование с помощью Visual C++. :Пер.с англ. М.:Издательский дом "Вильям", 2002. 656 с.
- Шилдт Герберт. Полный справочник по С, 4-ое издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2015. – 704 с.
- Яцюк О. Основы графического дизайна на базе компьютерных технологий (+СD), 2014, 240 c.
- Джеффри Рихтер CLR via C#. Программирование на платформе .NET Framework 4.0 на языке C#. 3-е изд. = CLR via C#, 3 ed. — СПб.: Питер, 2011. — ISBN 978-5-459- 00297-3
- Костельцев А. GTK+. Разработка переносимых графических интерфейсов. – BHV – Санкт-Петебург, 2013. – 368 с. ISBN: 5941571615
- Richard Coyne. The Tuning of Place: Sociable Spacer and Pervasive Digital Media - MIT Press. 2018. – p.52 – 344 p. ISBN 9780262013918.
- Средства построения графиков для .NET // Хабрахабр [Электронный ресурс]. – URL: http://habrahabr.ru/post/204308/ (дата обращения: 22.04.2019).
-
-
Приложение 1. Исходный код программы
Файл Form1.h:
#pragma once
#include "MyClasses.h"
namespace Task2 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Summary for Form1
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
protected:
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::Label^ label2;
private: System::Windows::Forms::Label^ label3;
private: System::Windows::Forms::Button^ button1;
private: System::Windows::Forms::RichTextBox^ richTextBox1;
private: System::Windows::Forms::RichTextBox^ richTextBox2;
private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->label1 = (gcnew System::Windows::Forms::Label());
this->label2 = (gcnew System::Windows::Forms::Label());
this->label3 = (gcnew System::Windows::Forms::Label());
this->button1 = (gcnew System::Windows::Forms::Button());
this->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox());
this->richTextBox2 = (gcnew System::Windows::Forms::RichTextBox());
this->SuspendLayout();
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(26, 27);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(437, 13);
this->label1->TabIndex = 1;
this->label1->Text = L"Задание: Найти все слова в тексте, которые содержат только три согласных буквы";
//
// label2
//
this->label2->AutoSize = true;
this->label2->Location = System::Drawing::Point(26, 59);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(92, 13);
this->label2->TabIndex = 2;
this->label2->Text = L"Исходный текст:";
//
// label3
//
this->label3->AutoSize = true;
this->label3->Location = System::Drawing::Point(498, 59);
this->label3->Name = L"label3";
this->label3->Size = System::Drawing::Size(101, 13);
this->label3->TabIndex = 4;
this->label3->Text = L"Найденные слова:";
//
// button1
//
this->button1->Location = System::Drawing::Point(341, 407);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(131, 35);
this->button1->TabIndex = 5;
this->button1->Text = L"Поиск слов";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// richTextBox1
//
this->richTextBox1->Location = System::Drawing::Point(29, 85);
this->richTextBox1->Name = L"richTextBox1";
this->richTextBox1->Size = System::Drawing::Size(281, 357);
this->richTextBox1->TabIndex = 6;
this->richTextBox1->Text = L"";
//
// richTextBox2
//
this->richTextBox2->Location = System::Drawing::Point(501, 85);
this->richTextBox2->Name = L"richTextBox2";
this->richTextBox2->Size = System::Drawing::Size(281, 357);
this->richTextBox2->TabIndex = 7;