Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания практические ООП 2012 час...doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
18.03 Mб
Скачать

1 Частина

Створимо новий проект

Розташуємо на формі кнопку

Створимо нову форму

та розташуємо на ній наступні едементи

Для завантаження форми створимо обробник події

#pragma endregion

String ^ filename;

// Объявляем filename здесь, чтобы эта переменная была "видна"

// в процедурах обработки обоих событий.

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

// Установка начальных значений:

textBox1->Multiline = true; textBox1->Clear();

textBox1->Size = Drawing::Size(268, 112);

button1->Text = "Открыть"; button1->TabIndex = 0;

button2->Text = "Сохранить";

Form_u::Text = "Здесь кодировка Unicode";

filename = "C:\\Text1.txt";

}

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

// Щелчок на кнопке Открыть.

// Русские буквы будут корректно читаться,

// если окурыть файл в кодировке UNICODE:

try

{

// Создание объекта StreamReader для чтения из файла:

IO::StreamReader^ Читатель = gcnew IO::StreamReader(filename);

// Непосредственное чтение всего файла в текстовое поле:

textBox1->Text = Читатель->ReadToEnd();

Читатель->Close(); // закрытие файла

// Читать текстовый файл в кодировке UNICODE в массив строк

// можно также таким образом (без Open и Close):

// array <String^>^ МассивСтрок =

// IO::File::ReadAllLines("C:\\Text1.txt");

}

catch (IO::FileNotFoundException^ Ситуация)

{ // Обработка исключительной ситуации:

MessageBox::Show(Ситуация->Message + "\nНет такого файла",

"Ошибка", MessageBoxButtons::OK,

MessageBoxIcon::Exclamation);

}

catch (Exception^ Ситуация)

{

// Отчет о других ошибках:

MessageBox::Show(Ситуация->Message, "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation);

}

}

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

// Щелчок на кнопке Сохранить:

try

{

// Создание объекта StreamWriter для записи в файл:

IO::StreamWriter^ Писатель = gcnew IO::StreamWriter(filename, false);

Писатель->Write(textBox1->Text);

Писатель->Close();

// Сохранить текстовый файл можно также таким образом

// (без Close), причем, если файл уже существует,

// то он будет заменен:

// IO::File::WriteAllText("C:\\tmp.tmp", textBox1->Text);

}

catch (Exception^ Ситуация)

{

// Отчет обо всех возможных ошибках:

MessageBox::Show(Ситуация->Message, "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation);

}

}

Повернемося до першої форми. До першої форми підключимо другу форму. Для події клацання на кнопці створимо обробник для відкриття другої форми

Запустимо прикладення

Якщо клацнемо на кнопці

Завершимо роботу із програмою.

Частина 2

Додамо на першу форму наступну кнопку

Створимо нову форму та розташуємо на ній наступні едементи

Створимо наступні обробники подій

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

this->Text = "Успеваемость студента";

label1->Text = "Номер п/п";

label2->Text = "Фамилия И.О.";

label3->Text = "Средний балл";

textBox1->Clear(); textBox2->Clear(); textBox3->Clear();

button1->Text = "Читать";

button2->Text = "Сохранить";

}

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

// ЧТЕНИЕ БИНАРНОГО ФАЙЛА

// Если такого файла нет

if (IO::File::Exists("C:\\student.usp") == false) return;

// Создание потока Читатель

IO::BinaryReader^ Читатель = gcnew IO::BinaryReader(

IO::File::OpenRead("C:\\student.usp"));

try

{

int Номер_пп = Читатель->ReadInt32();

String ^ ФИО = Читатель->ReadString();

Single СредБалл = Читатель->ReadSingle();

textBox1->Text = Convert::ToString(Номер_пп);

textBox2->Text = Convert::ToString(ФИО);

textBox3->Text = Convert::ToString(СредБалл);

}

finally { Читатель->Close(); }

}

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

// ЗАПИСЬ БИНАРНОГО ФАЙЛА

// Создаем поток Писатель для записи байтов в файл

IO::BinaryWriter^ Писатель = gcnew IO::BinaryWriter(

IO::File::Open("C:\\student.usp", IO::FileMode::Create));

try

{

int Номер_пп = Convert::ToInt32(textBox1->Text);

String^ ФИО = Convert::ToString(textBox2->Text);

Single СредБалл = Convert::ToSingle(textBox3->Text);

Писатель->Write(Номер_пп);

Писатель->Write(ФИО);

Писатель->Write(СредБалл);

}

finally { Писатель->Close(); }

}

Повернемося до першої форми. До першої форми підключимо потрібну форму. Для події клацання на кнопці створимо обробник для відкриття цієї форми.

Запустимо програму та натиснемо потрібну кнопку

Завершимо роботу із програмою.

Частина 3

Додамо на першу форму наступну кнопку

Створимо нову форму та розташуємо на ній наступні едементи

Створимо наступні обробники подій

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

Forn_rtf::Text = "Простой RTF-редактор"; richTextBox1->Clear();

openFileDialog1->FileName = "c:\\Text2.txt";

saveFileDialog1->Filter = "Файлы RTF (*.RTF)|*.RTF";

открытьВФорматеRTFToolStripMenuItem->Click += gcnew

EventHandler(this, &Forn_rtf::ОТКРЫТЬ);

ОткрытьВФорматеWin1251ToolStripMenuItem->Click += gcnew

EventHandler(this, &Forn_rtf::ОТКРЫТЬ);

}

private: Void ОТКРЫТЬ(System::Object^ sender, System::EventArgs^ e)

{ // Процедура обработки событий открытия

// файла в двух разных форматах.

// Выясняем, в каком формате открыть файл:

ToolStripMenuItem^ t = (ToolStripMenuItem^)sender;

// Читаем надпись на пункте меню:

String^ Формат = t->Text;

try

{ // Открыть в каком-либо формате:

if (Формат == "Открыть в формате RTF")

{

openFileDialog1->Filter =

"Файлы RTF (*.RTF)|*.RTF";

openFileDialog1->ShowDialog();

if (openFileDialog1->FileName == nullptr) return;

richTextBox1->LoadFile(openFileDialog1->FileName);

}

if (Формат == "Открыть в формате Win1251")

{

openFileDialog1->Filter =

"Текстовые файлы (*.txt)|*.txt";

openFileDialog1->ShowDialog();

if (openFileDialog1->FileName == nullptr) return;

richTextBox1->LoadFile(openFileDialog1->FileName,

RichTextBoxStreamType::PlainText);

}

richTextBox1->Modified = false;

}

catch (IO::FileNotFoundException^ Ситуация)

{

MessageBox::Show(Ситуация->Message +

"\nНет такого файла", "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation);

}

catch (Exception^ Ситуация)

{

// Отчет о других ошибках

MessageBox::Show(Ситуация->Message, "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation);

}

}

private: System::Void сохранитьВФорматеRTFToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {

saveFileDialog1->FileName = openFileDialog1->FileName;

if (saveFileDialog1->ShowDialog() ==

Windows::Forms::DialogResult::OK) Запись();

}

Void Запись()

{

try

{

richTextBox1->SaveFile(saveFileDialog1->FileName);

richTextBox1->Modified = false;

}

catch (Exception^ Ситуация)

{ // Отчет обо всех возможных ошибках:

MessageBox::Show(Ситуация->Message, "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation);

}

}

private: System::Void закрытьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {

this->Close();

}

Повернемося до першої форми. До першої форми підключимо потрібну форму. Для події клацання на кнопці створимо обробник для відкриття цієї форми.

Запустимо програму та натиснемо потрібну кнопку

Завершимо роботу із програмою.

Частина 4

Створимо нове прикладення. Розташуємо на формі наступні елементи

Створимо текстовий файл, наприклад наступного змісту

Информатика и программирование

1/23. Основные компоненты вычислительной системы:

процессор, звуковая карта, видеокарта, монитор, клавиатура;

монитор, клавиатура, материнская плата, процессор

процессор, ОП, внешняя память, монитор, клавиатура

3

2/23. Во время исполнения прикладная программа хранится:

в ПЗУ

в процессоре

в оперативной памяти

3

3/23. Иерархию усложнения данных можно представить в виде:

Бит - Байт - Поле - Запись - Файл - База Данных

Запись - Файл - Бит - Байт - База Данных - Поле

База Данных - Байт - Поле - Запись - Бит - Файл

1

4/23. Укажите строку, содержащую неверное утверждение

1 Кбайт = 1024 байт; 1 Гбайт = 1024 Мбайт

1 Мбайт это примерно миллион байт; 1 байт = 8 бит

1 Гбайт это примерно миллион байт; 1 Мбайт = 1024 Кбайт

3

5/23. Экспоненциальное представление числа -1,84E-04 соответствует числу:

-0,000184

-0,00184

-18400

1

6/23. Текстовые данные кодируют с использованием:

таблиц размещения файлов FAT, NTFS и др

таблиц символов Windows1251, Unicode, ASCII и др

структурированного языка запросов SQL

2

7/23. Сколько информации содержит лист текста в Блокноте, кодировка Win1251, если на странице — 20 строк, в каждой строке — 50 символов

1000 бит

8000 бит

16000 бит

2

8/23. Сколько информации содержит лист текста в Блокноте, кодировка UNICODE, если на странице — 20 строк, в каждой строке — 50 символов

1000 бит

8000 бит

16000 бит

3

9/23. Укажите неверное утверждение

В таблице символов Win1251 один символ кодируется одним байтом

В таблице символов ASCII один символ кодируется двумя байтами

В таблице символов UNICODE один символ кодируется двумя байтами

2

10/23. Основными параметрами (свойствами) растрового файла являются:

конфигурация, нормализация, цвет, дизайн, композиция

коэффициент анимации, унимодальность, контрастность, прозрачность

тип файла, количество точек, разрешение, глубина цвета

3

11/23. Укажите неверное утверждение

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

В RGB-модели любой цвет однозначно выражается тремя цветами: красным, зеленым и синим различной интенсивности

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

3

12/23. Базовым элементом в растровой графике является:

линия

точка

импликация цвета

2

13/23. Базовым элементом в векторной графике является:

линия

точка

импликация цвета

1

14/23. Назначение операционной системы - обеспечить:

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

восстановление ошибочно удаленных файлов

взаимодействие между пользователем, прикладными программами и устройствами компьютера

3

15/23. Принцип ассоциации файлов это:

регистрация каждого файла в таблице размещения файлов FAT или NTFS

связывание типа файла с программой, которая должна открывать этот файл

связывание группы файлов с соответствующей папкой

2

16/23. Файлы MDB, XLS, DWG, DOC, HTM открываются программами, соответственно:

Excel, Access, AutoCAD, WinWord, Internet Explorer

Access, Excel, AutoCAD, WinWord, Internet Explorer

Access, AutoCAD, WinWord, Excel, Internet Explorer

2

17/23. Назначение дефрагментации файлов:

чтобы найти потерянные кластеры и разрешить конфликт общих кластеров

чтобы связать тип файла с программой, которая должна открывать этот файл

чтобы кластеры, принадлежащие одному файлу оказались бы рядом

3

18/23. Какие логические ошибки исправляет сервис "Проверка диска":

правильность логич сложения и логич умножения логических дисков винчестера

потерянные кластеры и общие кластеры

соответствие табл размещения файлов FAT и NTFS и табл символов Win1251 и Unicode

2

19/23. Наиболее распространенными в практике являются:

иерархические базы данных

сетевые базы данных

реляционные базы данных

3

20/23. Наиболее точным аналогом реляционной базы данных может служить:

двумерная таблица

вектор

неупорядоченное множество данных

1

21/23. В каком диалоговом окне создают связи между полями таблиц базы данных:

схема связей

схема данных

таблица связей

2

22/23. Выберите верную запись формулы для электронной таблицы:

=A2*A3-A4

C3=C1+2*C2

C3+4*D4

1

23/23. Программа это:

набор команд над объектами с указанием порядка их выполнения

информационно-измерительная система для обработки данных

технология обработки растровых и векторных объектов

1

Створимо наступні обробники подій

#pragma endregion

// Программа тестирует студента по какому-либо предмету обучения

int СчетВопросов; // Счет вопросов

int ПравилОтветов; // Количество правильных ответов

int НеПравилОтветов; // Количество не правильных ответов

// Массив вопросов, на которые даны неправильные ответы:

array<String^>^ НеПравилОтветы;

int НомерПравОтвета; // Номер правильного ответа

int ВыбранОтвет; // Номер ответа, выбранный студентом

IO::StreamReader^ Читатель;

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

button1->Text = "Следующий вопрос";

button2->Text = "Выход";

// Подписка на событие изменение состояния

// переключателей RadioButton:

radioButton1->CheckedChanged +=

gcnew EventHandler(this, &Form1::ИзмСостПерекл);

radioButton2->CheckedChanged +=

gcnew EventHandler(this, &Form1::ИзмСостПерекл);

radioButton3->CheckedChanged +=

gcnew EventHandler(this, &Form1::ИзмСостПерекл);

НачалоТеста();

}

void НачалоТеста()

{

System::Text::Encoding^ Кодировка =

System::Text::Encoding::GetEncoding(1251);

try

{ // Создание экземпляра StreamReader для чтения из файла

Читатель = gcnew IO::StreamReader(

IO::Directory::GetCurrentDirectory()

+ "\\test.txt", Кодировка);

this->Text = Читатель->ReadLine(); // Название предмета

// Обнуление всех счетчиков:

СчетВопросов = 0; ПравилОтветов = 0; НеПравилОтветов = 0;

НеПравилОтветы = gcnew array<String^>(100);

}

catch (Exception^ Ситуация)

{ // Отчет о всех ошибках

MessageBox::Show(Ситуация->Message, "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Exclamation);

}

ЧитатьСледВопрос();

}

void ЧитатьСледВопрос()

{

label1->Text = Читатель->ReadLine();

// Считывание вариантов ответа:

radioButton1->Text = Читатель->ReadLine();

radioButton2->Text = Читатель->ReadLine();

radioButton3->Text = Читатель->ReadLine();

// Выясняем, какой ответ - правильный:

НомерПравОтвета = int::Parse(Читатель->ReadLine());

// Переводим все переключатели в состояние "выключено":

radioButton1->Checked = false; radioButton2->Checked = false;

radioButton3->Checked = false;

// Первую кнопку задаем не активной, пока студент не выберет

// вариант ответа:

button1->Enabled = false;

СчетВопросов = СчетВопросов + 1;

// Проверка, конец ли файла:

if (Читатель->EndOfStream == true) button1->Text = "Завершить";

}

private: Void ИзмСостПерекл(System::Object^ sender, System::EventArgs^ e)

{ // Кнопка "Следующий вопрос" становится активной, и ей

// передаем фокус:

button1->Enabled = true; button1->Focus();

RadioButton^ Переключатель = (RadioButton^)sender;

String^ tmp = Переключатель->Name;

// Выясняем номер ответа, выбранный студентом:

ВыбранОтвет = int::Parse(tmp->Substring(11));

}

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

// Щелчок на кнопке

// "Следующий вопрос/Завершить/Начать тестирование снач"

// Счет правильных ответов:

if (ВыбранОтвет == НомерПравОтвета)

ПравилОтветов = ПравилОтветов + 1;

if (ВыбранОтвет != НомерПравОтвета)

{ // Счет неправильных ответов:

НеПравилОтветов = НеПравилОтветов + 1;

// Запоминаем вопросы с неправильными ответами:

НеПравилОтветы[НеПравилОтветов] = label1->Text;

}

if (button1->Text == "Начать тестирование сначала")

{

button1->Text = "Следующий вопрос";

// Переключатели становятся видимыми, доступными для выбора:

radioButton1->Visible = true; radioButton2->Visible = true;

radioButton3->Visible = true;

// Переход к началу файла:

НачалоТеста(); return;

}

if (button1->Text == "Завершить")

{ // Закрываем текстовый файл:

Читатель->Close();

// Переключатели делаем невидимыми:

radioButton1->Visible = false; radioButton2->Visible = false;

radioButton3->Visible = false;

// Формируем оценку за тест:

label1->Text = String::Format("Тестирование завершено.\n" +

"Правильных ответов: {0} из {1}.\n" +

"Оценка в пятибальной системе: {2:F2}.", ПравилОтветов,

СчетВопросов, (ПравилОтветов * 5.0F) / СчетВопросов);

// 5F - это максимальная оценка

button1->Text = "Начать тестирование сначала";

// Вывод вопросов, на которые Вы дали неправильный ответ

String^ Str = "СПИСОК ВОПРОСОВ, НА КОТОРЫЕ ВЫ ДАЛИ " +

"НЕПРАВИЛЬНЫЙ ОТВЕТ:\n\n";

for (int i = 1; i <= НеПравилОтветов; i++)

Str = Str + НеПравилОтветы[i] + "\n";

// Если есть неправильные ответы, то вывести через

// MessageBox список соответствующих вопросов:

if (НеПравилОтветов != 0)

MessageBox::Show(Str, "Тестирование завершено");

}

if (button1->Text == "Следующий вопрос") ЧитатьСледВопрос();

}

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

// Щелчок на кнопке "Выход"

this->Close();

}

Запустимо програму та попрацюємо з нею

Завершимо роботу із програмою.

Завдання до виконання практичної роботи №5

Виконати завдання частин 1-4, створити індивідуальне прикладення, назви форм та зміст тестового файлу повинні відрізнятися від наведених у прикладу розробки. Для створення тесту потрібно получити завдання у викладача.

Критерії оцінювання :

на "3" студент виконує два із завдань на вибір , пояснює лістинги своїх програм

на "4" студент виконує три завдання, пояснює лістинги своїх програм

на "5" студент виконує чотири завдання, тестове завдання згідно зі своїм варіантом, пояснює лістинги своїх програм

Контрольні запитання:

  1. Яким чином відбувається робота із файлами у форматі Unicode?

  2. Чим відрізняються бінарні файли від текстових та як з ними працювати?

  3. Чим відрізняються файли RTF від текстових та як з ними працювати?

  4. Яким чином відбувається робота з тестовим файлом?

Практична робота №6

Тема: Редагування графічних даних

Мета: Навчитися роботі із графікою.

Хід роботи: