Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интерфейс для редактирования цифровых потоков.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.93 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение

высшего профессионального образования

«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

                  1. Фомин г.В., Безуглова г.С.

                  1. Методические указания «Интерфейс для редактирования цифровых потоков»

для студентов 2 курса физического факультета

по курсу «Вычислительная практика по программированию»

Ростов-на-Дону

2014

Методические указания разработаны кандидатом физико-математических наук, доцентом кафедры теоретической и вычислительной физики Г.В.Фоминым и кандидатом физико-математических наук, ст. преподавателем кафедры теоретической и вычислительной физики Г.С. Безугловой.

Ответственный редактор д.ф.-м.н. Л.А. Бугаев

Компьютерный набор и верстка к.ф.-м.н. Г.В. Фомин

Печатается в соответствии с решением кафедры теоретической и вычислительной физики физического факультета ЮФУ, протокол № _ _ от __.__.2014 г.

Оглавление

Создание консольного приложения на C++, редактирующего бинарный файл

Введение …………………………………………………………………………….. 4

Форматирование текста…………………………………………………………….. 11

Создание Windows-приложения на C++, редактирующего бинарный файл

Файловый состав приложения……………………………………………………… 17

Пространство имен………………………………………………………………….. 19

Класс Form1………………………………………………………………………….. 19

Конструктор…………………………………………………………………………. 21

Деструктор…………………………………………………………………………… 21

Модификаторы доступа…………………………………………………………….. 22

Управляющие элементы и их свойства…………………………………………….. 22

Работа с цифровым потоком…………………………………………………………………………. 27

Введение

  1. Вначале создаем пустое решение (solution) с именем solWriteReadFiles. Для чего

    1. В меню File командой New->Projects… открываем окно New Project (новый проект).

    2. На левой панели окна Project types: (типы проектов) в разделе Other Project Types (другие типы проектов) выбираем команду Visual Studio Solutions (решения).

    3. На правой панели Templates: (шаблоны) выбираем Blank Solution (пустое решение).

    4. В нижней части окна в строке Location (положение) с помощью кнопки Browse… (просмотр) выбираем каталог …Documents\Visual Studio 2008\Projects. В этот каталог среда поместит каталог решения.

    5. В строке Name: (имя) набираем имя решения solWriteReadFiles.

  1. В решение solWriteReadFiles добавляем проект консольного приложения. Для чего

    1. Из меню View открываем окно Solution Explorer (обозреватель решения).

    2. Щелкаем правой кнопкой над именем решения solWriteReadFiles, открывая контекстное меню.

    3. Выбираем команду Add->New Project… (добавь->новый проект). Это откроет окно New Project.

    4. На левой панели Project Types: выбираем раздел Visual C++ и в нем команду CLR (Common Language Runtime, или общий язык времени выполнения).

    5. На правой панели Templates: выбираем шаблон CLR Console Application (консольное приложение).

    6. В строке Name: набираем имя prWriteReadFiles. Так будет называться консольное приложение.

  1. Заменяем заголовок и содержание метода main текстом, составляющим код приложения по созданию, записи и чтения файлов:

using namespace System::IO;

using namespace System::Data;

using namespace System::Xml;

void main()

{

// Описывается и создается в памяти объект rnd типа Random

// Он позволяет генерировать псевдослучайные числа

Random^ rnd = gcnew Random();

// Описывается переменная типа Double

Double d;

// Переменной типа double присваивается случайное значение в

// интервале [0;1)

d = rnd->NextDouble();

// На консоль выводится значение переменной d

Console::WriteLine("Число {0} получено из генератора случайных чисел", d);

// Работа с бинарным файлом

// Описывается массив байтов

array<Byte>^ bytes;

// Запись в бинарный файл

Console::WriteLine("Запись в бинарный файл числа с плавающей запятой");

// Для хранения битового представления переменной типа double в

// массив bytes засылаются байты, из которых состоит переменная d

bytes = BitConverter::GetBytes(d);

// Создается объект s типа Stream, ассоциированный с бинарным

// файлом Test.

// Файл создается в текущей директории - там, где находится exe-файл

// процесса

Stream^ s = File::Create("Test");

// В файл записывается массив с бинарным содержимым переменной

// типа double

s->Write(bytes, 0, bytes->Length);

// Закрывается объект s (поток) и файл, ассоциированный с ним,

// освобождается

s->Close();

Console::WriteLine("Число {0} записано в бинарный файл Test",d);

Console::ReadLine();

// Инициализация элементов массива. Не обязательная процедура.

// В данном случае происходит обнуление всех байтов для "чистоты

// эксперимента".

bytes->Initialize();

// Считывание из бинарного файла

Console::WriteLine("Считывание из бинарного файла числа с плавающей запятой");

// Создается объект s типа Stream, ассоциированный с

// существующим бинарным файлом Test.

s = File::OpenRead("Test");

// В массив считывается содержимое файла

s->Read(bytes, 0, bytes->Length);

// Закрывается объект s (поток) и файл, ассоциированный с ним,

// освобождается

s->Close();

// На консоль выводится содержимое массива в формате переменной

// типа double

Console::WriteLine("Число {0} прочитано из бинарного файла Test", BitConverter::ToDouble(bytes, 0));

Console::ReadLine();

// Запись в текстовой файл

Console::WriteLine("Запись в текстовой файл числа с плавающей запятой");

// Создается объект tw типа TextWriter, которому ставится в

// соответствие файл для записи текста

TextWriter^ tw = File::CreateText("Test.txt");

// В файл записывается число типа double и сносится строка

tw->WriteLine(d);

// Закрывается объект tw (поток) и файл, ассоциированный с ним,

// освобождается

tw->Close();

Console::WriteLine("Число {0} записано в текстовой файл Test.txt",d);

Console::ReadLine();

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

// Создается объект tr типа TextReader, ассоциированный с

// текстовым файлом,

TextReader^ tr = File::OpenText("Test.txt");

// В строку str считывается строка текста из потока tr

String^ str = tr->ReadLine();

// Закрывается объект tr (поток) и файл, ассоциированный с ним,

// освобождается

tr->Close();

// Строка str выводится на консоль

Console::WriteLine(str);

Console::ReadLine();

//Запись в xml-формате

Console::WriteLine("Запись в xml-файл числа с плавающей запятой");

// Создается объект xmlw типа XmlWriter, ассоциированный с

// xml-файлом

XmlWriter^ xmlw = XmlWriter::Create("Test.xml");

// Записывается узел типа элемент

xmlw->WriteStartElement("aDouble");

// Записывается содержание узла aDouble

xmlw->WriteValue(d);

// файл освобождается и объект xmlw закрывается

xmlw->Close();

// Чтение из xml-файла

// Создается объект xmlr типа XmlReader, ассоциированный с xml-

// файлом

XmlReader^ xmlr = XmlReader::Create("Test.xml");

// Считываются все узлы до конца файла

while (xmlr->Read())

if (xmlr->NodeType == XmlNodeType::Text) // Если узел текстовой

Console::WriteLine(xmlr->Value); // Значение узла распечатывается

Console::ReadLine();

// файл освобождается и объект xmlr закрывается

xmlr->Close();

// Запись в xml-файл кэшированных данных

Console::WriteLine("Запись в xml-файл кэшированной базы данных");

// Создается объект ds типа DataSet, кэширующий данные в памяти,

// с именем aDataSet

DataSet^ ds = gcnew DataSet("aDataSet");

// К объекту ds добавляется таблица с именем aTable

ds->Tables->Add(gcnew DataTable("aTable"));

// К таблице добавляется колонка с именем aColumn

ds->Tables["aTable"]->Columns->Add(gcnew

DataColumn("aColumn"));

// К таблице добавляется строка

ds->Tables[0]->Rows->Add(ds->Tables[0]->NewRow());

// В элемент 0,0 таблицы заносится число d

ds->Tables[0]->Rows[0][0] = d;

// Данные объекта ds записываются во вновь создаваемый xml-файл

ds->WriteXml("Test.ds.xml");//Console.Out

// Считывание xml-файла в память

// Создается объект dsr класса DataSet без имени

DataSet^ dsr = gcnew DataSet();

// В объект считывается информация из xml-файла

dsr->ReadXml("Test.ds.xml");

// Содержимое 0,0-элемента таблицы aTable выводится на консоль

Console::WriteLine(dsr->Tables["aTable"]

->Rows[0]["aColumn"]);

Console::ReadLine();

}

  1. Из меню Build (построить) компилируем приложение командой Rebuild prWriteReadFiles. Если возникают ошибки, проверяем внимательно, верно ли выполнено копирование кода.

  2. Если ошибок нет, активируем приложение командой Start Debugging (зеленая стрелочка). Приложение должно выполняться до конца без ошибок. При этом последовательно, в нужных местах (посмотрите, в каких) следует нажимать клавишу Enter.

  1. Попытайтесь отредактировать приложение, записывая в файл

    1. случайное число типа int,

    2. массив случайной длины, состоящий из случайных чисел