Uploaded by ugf

Работа с файлами

advertisement
Пензенский государственный университет
Кафедра "Информационно-вычислительные системы"
РАБОТА С ФАЙЛАМИ
Отчет о лабораторной работе №3
по дисциплине «Программирование»
Выполнил: ст-т гр. 19ВО1
Иванов А.A.
Проверил: К.т.н, доцент каф ИВС
Убиенных Г.Ф.
2020
2
1 Формулировка задачи
Дан текстовой файл, содержащий произвольный текст. Разработать
программу, которая читает этот файл и выводит в алфавитном порядке
все слова, имеющие заданную длину n.
2 Техническое задание
2.1 Введение
Программа «Слова в алфавитном порядке» применяется для
чтения заданного файла и вывода в алфавитном порядке всех слов,
имеющие заданную длину n.
2.2 Основания для разработки
Разработка программы «Слова в алфавитном порядке» ведётся
на основании документа «Варианты заданий к лабораторным
работам по дисциплине “Программирование”». Темой разработки
является работа с файлами в языке программирования C++.
2.3 Требования к программе
Программа должна:
-предоставлять пользователю возможность выбрать нужный файл в
формате txt;
-читать файл, содержащий текст на русском или английском языке;
-выдавать сообщение, если файл пустой;
-выводить на экран текст файла;
3
-предоставлять пользователю возможность вводить целую длину слов
n;
-выдавать сообщение «Недопустимый символ!», если в поле ввода
длины слов n введено не целое число;
-определять в тексте слова, имеющие заданную длину n;
-выводить слова, имеющие заданную длину n в алфавитном порядке.
2.4 Стадии и этапы разработки
Разработка технического задания.
Для решения поставленной задачи необходимо первоначально
разработать алгоритм решения программы. Алгоритм должен
выполнять все требования к программе и быть оформлен в виде блоксхемы.
Разработка программы.
По разработанному алгоритму требуется написать программу на
языке C++. Написанную программу тестируют на работоспособность.
По результатам проверки делается вывод о работоспособности
программы. На работоспособную программу создаётся документация.
2.5 Порядок контроля и приёмки
Для контроля правильности работы программы мы должны запустить
программу и выбрать нужный нам текстовый файл. После этого мы
должны открыть данный текстовый файл, выбрать длину n и с помощью
ручного подсчета выявить слова, имеющие заданную длину n и записать
их в алфавитном порядке. Если слова, записанные в алфавитном
порядке имеющие заданную длину n определенные с помощью ручного
подсчета совпадут с результатом работы программы, то это будет
означать,
что
программа
работает
правильно.
Для
проверки
4
работоспособности защиты от некорректного ввода, предусмотренной в
программе, необходимо выбрать неподходящий файл (пустой файл).
Программа верно обрабатывает входные данные из правильных адресов
файлов, защита от ошибок, предусмотренная в программе, работает
исправно.
3 Описание программы
3.1 Общие сведения
Программа разработана в среде Microsoft Visual Studio 2015, её текст
приведен в приложении А.
3.2 Функциональное назначение
Программа предназначена для чтения заданного файла и вывода в
алфавитном порядке всех слов, имеющие заданную длину n.
Для решения поставленной задачи необходимо разработать следующие
классы: fileReader.
5
Диаграмма классов представлена на рисунке 1.
fileReader
+ double textFromFile
+ double result
+ double n
+double readFile()
+double work()
Рисунок 1 – Диаграмма классов
Для выполнения поставленной задачи разработаны классы
fileReader
Класс fileReader имеет следующие атрибуты:
textFromFile – текст из файла
result – результат работы программы
n – длина слова
Класс fileReader имеет следующие методы:
Метод чтения текста из файла void readFile().
Метод нахождения всех слов, имеющие заданную длину n
void work().
6
Блок-схема метода «readFile» (страница 5):
1)Начало работы кнопки (блок 1).
2)Выбор файла (блок 2).
3)Запись текста из выбранного файла в поле на textFromFile (блок 3).
1
Начало
2
Выбор файла
3
Запись текста из
выбранного файла в
Поле textFromFile
4
Конец
Рисунок 1 — Схема метода «readFile»
Блок-схема метода void work() (Страница 7):
1)Начало работы кнопки (блок 1).
2)В строку s записывается текст из файла, строка delimStr принимает
значение знаков препинания, переменная k равняется 0 (блок 2).
3)Массив words= массив слов из текста (блок 3).
4)Ввод длины слов n (блок 4).
5)Строка m принимает значение английского и русского алфавита (блок
5).
6)Начало работы цикла А с установленным числом повторений и
условием 0 < g < последний символ m (блок 6).
7
7)Начало работы вложенного цикла Б с установленным числом
повторений и условием 0 < i < последнее слово words (блок 7).
8)Проверка условия длина слова words=n и m[g] == words[i][0]) (блок
8).
9)Если условие выполняется, то переменной result добавляется слово
words и переменная k увеличивает свое значение на 1 (блок 9).
10)Завершение работы вложенного цикла Б по i (блок 10).
11)Завершение работы цикла A по g (блок 11).
12)Проверка условия k=0 (блок 12).
13)Если условие выполняется, то переменной result присваивается
значение «Таких слов нет!» (блок 13).
8
1
Начало
2
A
8
s=текст из файла
delimStr=строка
знаков препинания
k=0
Длина слова words=n Нет
и m[g] == words[i][0])
Да
9
3
words=массив
слов из текста
4
k=k+1
Result += words
10
Цикл Б
i
Ввод длины слов n
5
11
m=английский и
русский алфавит
Цикл A
g
6
Цикл A
0<g<последний
символ m
7
12
k=0
13
Цикл Б
0<i<последнее
слово words
Да
Result =
«Таких слов нет»
14
A
Конец
Рисунок 1 — Схема метода void work()
Нет
9
4 Описание программы
4.1 Входные и выходные данные
После запуска программы пользователь должен нажать кнопку
«Выбрать файл». После нажатия на кнопку у пользователю предложат
выбрать нужный ему текстовый файл (рисунок Б.1).
Если во время ввода пользователь допустит ошибку (неверное имя
файла), то программа выведет на монитор сообщение об ошибке
открытия и существования файла (рисунок Б.2).
Затем пользователю нужно ввести длину слов n.
После того как файл выбран и длина слов n введена, программа
выводит на монитор содержимое файла (текст), а затем слова в
алфавитном порядке имеющие заданную длину слов n (рисунок Б.3).
Примеры работы программы находятся в Приложении Б.
4.2
Описание интерфейса программы
Текст программы представлен в приложении А.
Программа состоит из единственного модуля Form1.
На форме модуля
Form1 расположены следующие
объекты:
Один однострочный редактор textBox1(для ввода длины
слова n)
Три кнопки Button1(Выбор файла), Button2(вывод в
алфавитном порядке слов длинной n), Button3(выход) .
Два многосточных редакторов richTextBox1(для вывода
текста из файла), richTextBox2(для выхода из программы),
Метка label1, для вывода пояснений пользователю.
10
5 Программа и методики испытаний
5.1
Объект испытаний
Программа «Слова в алфавитном порядке» предназначена для:
-предоставления пользователю возможности выбора нужного файла в
формате txt;
-прочтения файла, содержащего текст на русском или английском
языке;
-вывода сообщения, если файл пустой;
-вывода на экран текста файла;
-предоставления пользователю возможности ввода целой длины слов n;
-вывода сообщения «Недопустимый символ!», если в поле ввода длины
слов n введено не целое число;
-определения в тексте слов, имеющие заданную длину n;
-вывода слов, имеющих заданную длину n в алфавитном порядке.
5.2 Цель испытаний
Испытания проводятся с целью выявления ошибок и недочётов в
работе программы.
5.3 Средства и порядок испытаний
Испытания проводятся внутри среды ОС Microsoft Windows 7.
Никаких дополнительных программных и технических средств, не
применяется. Испытания проводятся в следующем порядке:
Запуск программы с корректными входными данными (проверка работы
основной части программы).
11
Запуск программы с некорректными входными данными (проверка
работы защитной части программы).
5.4 Методы испытаний
Результаты испытаний программы находятся в Приложении Б.
Запуск программы с некорректными входными данными.
Запуск программы с корректными входными данными.
5.5 Контрольный тест
Для проведения контрольного теста мы запустим программу на
выполнение и введем корректные данные. На рисунке Б.3 показан результат
работы программы. Текст: кошка имеет четыре лапы и хвост. Заданная длина
слов n = 5. Слова в алфавитном порядке и заданной длиной слов 5: имеет,
кошка, хвост. Значения приведенные выше нужно сравнить с результатами
работы программы приведенными на рисунке Б.3 если они совпадут, это будет
означать что программа работает верно.
Если сравнить тестовые наборы приведенные выше с приведенными
результатами работы программы, несложно заметить, что они совпадают, а это
означает, что программа работает верно.
12
Выводы
В ходе выполнения лабораторной работы было сформулировано
техническое задание, разработан алгоритм программы использующий
работу с файлами и обработку текста для решения поставленной задачи и
описывающая его блок-схема.
В соответствии алгоритму, на языке программирования C++ была
написана программа, решающая поставленную задачу .
Были проведены испытания программы, которые позволили проверить
правильность работы программы в соответствии со всеми требованиями
Технического Задания.
Оформлена документация, содержащая в себе описание требований к
программе, методы тестирования программы, алгоритм решения задачи и
его блок-схема, описание и результаты тестирования программы, описание
работы с программой, текст программы, выводы по проведённой работе,
приложения к документации.
Требования Технического Задания выполнены в полном объёме.
13
ТЕКСТ ПРОГРАММЫ
Приложение А
(обязательное)
14
#pragma endregion
private: System::Void button2_Click(System::Object^ sender,
System::EventArgs^ e) //кнопка "Выбрать файл"
{
OpenFileDialog^ openFileDialog1 = gcnew
OpenFileDialog();
openFileDialog1->ShowDialog();
if (openFileDialog1->FileName == nullptr) return;
try
{
auto MyReader = gcnew
IO::StreamReader(openFileDialog1->FileName,
System::Text::Encoding::GetEncoding(1251));
richTextBox1->Text= MyReader->ReadToEnd();
MyReader->Close();
}
catch (IO::FileNotFoundException^ Ситуация)
{
MessageBox::Show(Ситуация->Message + "\nФайл
не найден", "Ошибка", MessageBoxButtons::OK,
MessageBoxIcon::Exclamation);
}
catch (Exception^ Ситуация)
{
MessageBox::Show(Ситуация->Message, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
}
if (richTextBox1->Text=="") MessageBox::Show(
"Ошибка, пустой файл");
}
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) //кнопка "Вывести в алфавитном порядке
слова длиной n"
{
String^ s = richTextBox1->Text;
String^ delimStr = " ,.;!?:\r\n\t";
int k=0;
array<Char>^ delimiter = delimStr->ToCharArray( );
array<String^>^ words = s->Split(delimiter);
if (textBox3->Text=="") MessageBox::Show( "Введите
длину слова!");
else
{
int n =Int32::Parse(textBox3->Text);
richTextBox2->Text =richTextBox2->Text + "Слова с
длинной "+n+":\r\n";
String^ m =
"ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdef
ghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
for (int g = 0;g<m->Length;g++)
for(int i = 0;i<words->Length;i++)
15
if ((words[i]->Length == n) && (m[g] ==
words[i][0]))
{
richTextBox2->Text =
richTextBox2-
>Text + words[i] +"\r\n";
k++;
}
if (k==0) richTextBox2->Text =richTextBox2>Text + "Слов с длинной "+n+" нет!\r\n";
}
}
private: System::Void button3_Click(System::Object^ sender,
System::EventArgs^ e) //кнопка "Выход"
{
Close();
}
private: System::Void textBox3_KeyPress(System::Object^ sender,
System::Windows::Forms::KeyPressEventArgs^ e) //защита от
неправильного ввода
{
if ((e->KeyChar != (char)8 ) && (e->KeyChar <
(char)48 || e->KeyChar > (char)57))
{
e->Handled = true;
MessageBox::Show("Недопустимый
символ!");
}
}
#pragma once
using namespace System::IO;
using namespace System::Text;
class fileReader
{
public:
String textFromFile;
String result;
int n;
void readFile()
{
OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog();
openFileDialog1->ShowDialog();
if (openFileDialog1->FileName == nullptr) return;
try
{
auto MyReader = gcnew IO::StreamReader(openFileDialog1>FileName, System::Text::Encoding::GetEncoding(1251));
textFromFile= MyReader->ReadToEnd();
MyReader->Close();
}
catch (IO::FileNotFoundException^ Ситуация)
{
MessageBox::Show(Ситуация->Message + "\nФайл не найден",
"Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
}
catch (Exception^ Ситуация)
{
MessageBox::Show(Ситуация->Message, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
}
16
if (textFromFile=="") MessageBox::Show( "Ошибка, пустой файл");
}
void work()
{
String^ s = textFromFile;
String^ delimStr = " ,.;!?:\r\n\t";
int k=0;
array<Char>^ delimiter = delimStr->ToCharArray( );
array<String^>^ words = s->Split(delimiter);
if (n==0) MessageBox::Show( "Введите длину слова!");
else
{
result =result + "Слова с длинной "+n+":\r\n";
String^ m =
"ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгд
еёжзийклмнопрстуфхцчшщъыьэюя";
for (int g = 0;g<m->Length;g++)
for(int i = 0;i<words->Length;i++)
if ((words[i]->Length == n) && (m[g] == words[i][0]))
{
result = richTextBox2->Text + words[i] +"\r\n";
k++;
}
if (k==0) result =result + "Слов с длинной "+n+" нет!\r\n";
}
}
};
17
РЕЗУЛЬТАТЫ ИСПЫТАНИЙ
Приложение Б
(обязательное)
18
Рисунок Б.1
Рисунок Б.2
19
Рисунок Б.3
Download