Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по Visual Studio C++ (Волков) - ОТЧЁТЫ с подробным кодом / Лабораторная работа №7 (Индивидуальные задания - ВАРИАНТ 28).docx
Скачиваний:
1
Добавлен:
04.09.2024
Размер:
4.58 Mб
Скачать

3.2 Схемы алгоритмов индивидуального задания №3

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

Рисунок 47 – Схема алгоритма функции обработчика нажатия на кнопку «Закрыть» (btnClose_Click)

Для очистки поля результата при вводе в поле ввода строки реализуется алгоритм обработчика txtInStr_KeyPress, представленный на рисунке 48.

Рисунок 48 – Схема алгоритма функции обработки ввода txtInStr_KeyPress

При нажатии на кнопку «Выполнить» алгоритм, представленный на рисунке 49 – здесь цикл проверяет всю строку от начала и для каждой точки с запятой выводит её индекс, число символов до и после неё.

Рисунок 49 – Схема алгоритма функции обработки нажатия на кнопку «Выполнить» RunBtn4_Click

На рисунке 50 – алгоритм обработчика нажатия на кнопку «Ввод из файла» для осуществления функции ввода строки из тектового файла.

Рисунок 50 – Схема алгоритма функции обработчика нажатия на кнопку «Ввод из файла» FileInputBtn4_Click

Наконец, при нажатии на кнопку «Сохранить в файл» алгоритм, схема которого представлена на рисунках 51 – 53, выполняет сохранение (исходной строки и результата обработки) в файл методом дозаписи.

Рисунок 51 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click4

Рисунок 52 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click4, продолжение

Рисунок 53 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click4, продолжение

4.3 Текст программы индивидуального задания №4

private: System::Void RunBtn4_Click(System::Object^ sender, System::EventArgs^ e)

{

String^ FullString = txtInStr->Text;

bool NoSeparator = true;

if (FullString != "")

{

for (int i = 0; i < FullString->Length; i++)

{

if (FullString[i] == ';')

{

NoSeparator = false;

txtInStr->SelectionStart = i;

txtInStr->SelectionLength = 1;

txtInStr->SelectionBackColor = Color::Yellow;

txtResult4->Text +=

"Для точки с запятой с индексом " + (i + 1)

+ ":\n";

txtResult4->Text += "Число символов до ';' = " +

(i) + "\n";

txtResult4->Text += "Число символов после ';' = " +

(FullString->Length - i - 1) + "\n";

txtResult4->Text += "\n";

}

}

if (NoSeparator == true) // Если нет символа ;

DialogResult = MessageBox::Show(this,

"Пожалуйста, добавьте в строку символ ';' в качестве разделителя",

"Обработка строки",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation,

MessageBoxDefaultButton::Button1);

}

else // Если пустой ввод

DialogResult = MessageBox::Show(this,

"Пожалуйста, введите строку с символом ';'", "Обработка строки",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation,

MessageBoxDefaultButton::Button1);

}

private: System::Void txtInStr_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)

{

txtResult4->Text = "";

}

private: System::Void FileInputBtn4_Click(System::Object^ sender, System::EventArgs^ e)

{

IO::Stream^ myStream;

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;

// Создание элемента диалогового окна открытия файла

openFileDialog1->Title = "Открытие файла"; // Название окна

openFileDialog1->Filter = "txt files (*.txt)|*.txt";

// Выбор фильтра файлов

openFileDialog1->RestoreDirectory = false;

// Отключение восстановления директории

String^ Username = Environment::UserName;

// Получение имени пользователя

String^ FileDirectory = "c:\\Users\\" + Username + "\\Desktop\\";

// Директория

openFileDialog1->InitialDirectory = (FileDirectory);

// Присвоение директории

if (txtFileInput4->Text == "")

openFileDialog1->FileName = FileDirectory;

// Если своё имя файла не введено – выбор

// имени директории в качестве имени

else openFileDialog1->FileName = txtFileInput4->Text;

// Если введено имя файла - его ввод

if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) // Если файл успешно выбран

{

if ((myStream = openFileDialog1->OpenFile()) != nullptr)

// Если файл успешно открыт

{

StreamReader^ sr

= gcnew StreamReader(openFileDialog1->FileName);

String^ ReadedStr = sr->ReadToEnd();

// Чтение всего файла в строку

txtInStr->Text = (ReadedStr); // Запись прочитанной строки

txtInStr->SelectionStart = 0;

txtInStr->SelectAll();

txtInStr->SelectionBackColor = Color::Empty;

txtResult4->Text = ""; // Очистка результата

txtFileInput4->Text = openFileDialog1->FileName;

// Запись имени файла в соответстующее поле

sr->Close();

myStream->Close();

}

}

}

private: System::Void FileOutputBtn4_Click(System::Object^ sender, System::EventArgs^ e)

{

SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;

// Новый элемент диалогового окна сохранения файла

saveFileDialog1->Title = "Сохранение файла"; // Название окна

saveFileDialog1->Filter = "txt files (*.txt)|*.txt";

// Фильтр - текстовые файлы

String^ Username = Environment::UserName;

// Получение имени пользователя и его ввод в путь директории

String^ FileDirectory = "c:\\Users\\" + Username + "\\Desktop\\";

saveFileDialog1->InitialDirectory = (FileDirectory);

if (txtFileOutput4->Text == "")

saveFileDialog1->FileName = FileDirectory;

// Если поле имени файла вывода пустое, имя файла - сама директория

else saveFileDialog1->FileName = txtFileOutput4->Text;

// Если заполнено имя файла ввода - выбор этого имени файла

if (txtResult4->Text != "") // Если есть результат операции

{

if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)

// Если файл сохранения успешно выбран

{

txtFileOutput4->Text = saveFileDialog1->FileName;

// Вывод названия файла сохранения в соотвествующее поле

if (IO::File::Exists(saveFileDialog1->FileName))

// Если файл существует

{

StreamReader^ sr =

File::OpenText(saveFileDialog1->FileName);

array<String^>^ ArrLines = File::ReadAllLines(saveFileDialog1->FileName);

// Чтение всех строк файла в архив

sr->Close();

int InArrIndex =

ArrLines->IndexOf(ArrLines, txtInStr->Text);

// Переменная индекса строки

// исходного массива в файле

if (ArrLines->Length == 0) // Если файл пустой

{

ArrLines->Resize(ArrLines, 2);

// Смена размера массива

// Запись строк в массив, выбор

// стартовой позиции поиска текущей операции

ArrLines[0] = "Исходная строка: \n" +

txtInStr->Text + "\n";

ArrLines[1] = (txtResult4->Text);

}

else if (InArrIndex == -1)

// Если не найден текущий исходный массив

{

ArrLines->Resize(ArrLines,

ArrLines->Length + 4);

// Смена размеров массива

ArrLines[ArrLines->Length - 4] = "";

// Разделитель между массивами

ArrLines[ArrLines->Length - 3] = "";

// Разделитель между массивами

// Запись строк нового исходного и результата

// в массив, изменение стартовой позиции

// поиска текущей операции

ArrLines[ArrLines->Length - 2] = "Исходная

строка: \n" + txtInStr->Text + "\n";

ArrLines[ArrLines->Length - 1] =

(txtResult4->Text);

}

StreamWriter^ sw =

File::CreateText(saveFileDialog1->FileName);

// Создание текста в файле (запись)

for (int i = 0; i < ArrLines->Length; i++)

sw->WriteLine(ArrLines[i]);

// Построчная запись в файл из массива

sw->Close();

}

else // Если файл не существует

{

StreamWriter^ sw =

File::CreateText(saveFileDialog1->FileName);

// Создание текста в файле (запись)

// Построчная запись в файл

sw->WriteLine("Исходная строка: \n" +

txtInStr->Text + "\n");

sw->WriteLine(txtResult4->Text);

sw->Close();

}

}

}

else // Если нет результата операции - сообщение пользователю

DialogResult = MessageBox::Show(this,

"Пожалуйста, выполните операцию перед сохранением",

"Обработка строк",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation,

MessageBoxDefaultButton::Button1);

}