Тема: Структура данных – файл. Файловые потоки С++
Цель. Получение навыков по обработке данных, хранящихся во внешней памяти.
Задание 1. Создание модуля с операциями над текстовым файлом.
- Разработать функции для выполнения операций над текстовым файлом С++:
· создание текстового файла, содержащего числовые значения по одному на строку;
· вывод содержимого текстового файла;
· добавление новой записи в конец файла:
· разработать функции для дополнительных операций, указанных в варианте
- Разработать приложение и выполнить тестирование всех функций.
- Создать модуль и перенести в него все отлаженные функции. Исключить функции из приложения. Отладить приложение, подключив к нему модуль с функциями.
- Разработать функции для реализации дополнительных операций, определенных вариантом и сохранить их в модуле с остальными функциями.
Текстовый файл
№ | Дополнительные операции |
Удаление значения строки с заданным номером, путем создания нового файла, удаление старого и переименование нового, указав ему имя удаленного файла. | |
Скопировать числа исходного файла, которые кратны 7, в новый файл | |
Добавить в файл новую строку перед первой строкой. Путем создания нового файла. | |
Создать новый файл из значений исходного, записав в него числа, полученные путем деления каждого числа исходного файла на минимальное число, хранящееся в исходном файле. | |
Создать новый файл из значений исходного, умножив каждое число на значение последнего элемента исходного файла. | |
Создать новый файл из значений исходного, умножив каждое число на сумму первого и последнего чисел исходного файла. | |
Создать новый файл из значений исходного, поделив каждое числое на число, равное количеству строк в файле. | |
Создать новый файл из значений исходного, поменяв местами первое число и и последнее. | |
Создать новый файл из значений исходного, заменив все отрицательные числа файла, на квадрат минимального числа исходного файла. | |
Создать новый файл из значений исходного, умножив каждое четное число на максимальное число в файле. | |
Создать новый файл из значений исходного, разделив все нечетные по абсолютной величине числа на среднее арифметическое чисел в файле | |
Создать новый файл из значений исходного, сформировав число по правилу: прибавить к каждому числу первое четное число исходного файла. | |
Создать новый файл из значений исходного, поделив каждое число на наибольший общий делитель чисел файла. | |
Создать новый файл из значений исходного, добавив к каждому числу наибольшее и наименьшее из чисел файла исходного файла. | |
Создать новый файл из значений исходного, увеличив его на среднее арифметическое всех отрицательных чисел исходного файла. | |
16* | Создать новый файл из значений исходного, размещая в одной строке исходное число и через пробел количество цифр в числе. |
17* | Создать новый файл из значений исходного, размещая в каждой строке три числа: исходное, количество цифр в числе, сумма цифр в числе. |
18* | Создать новый файл из значений исходного, размещая на строке по три числа из исходного файла. |
19* | Создать новый файл из значений исходного, размещая на строке значения: количество чисел до конца строки, сами числа через пробел. |
20* | Создать новый файл из значений исходного, размещая на строке значения: четное число – количество чисел до конца строки, сами числа через пробел. |
Задание 2. Создание модуля с операциями над двоичными файлами. Файл состоит из записей определенной структуры. Записи имеют ключ, уникальный в пределах файла, создается он как счетчик: количество записей + 1.
|
|
|
|
- Подготовьте тестовые данные в текстовом файле с кодировкой ASCII.
- Разработайте структуру записи двоичного файла согласно варианту задания.
- Разработайте функции для операций:
· преобразование тестовых данных в двоичный файл
· отображение всех записей двоичного файла
· манипулирование записями в двоичном файле: согласно операций определенных в варианте
Удаление записи производить путем замены на последнюю запись.
- Сохраните функции в новом модуле.
- Разработать приложение, демонстрирующее выполнение всех операций, подключив к нему модуль с функциями.
№ | ||
Структура записи | Читательский абонемент: номер читательского - целое пятизначное число, ФИО, Адрес | |
Доп. операция | 1. Поиск записи с заданным значением ключа. 2. Удаление найденного значения. | |
Структура записи | Счет в банке: номер счета 7 разрядное число, ФИО, Адрес | |
Доп. операция | 1. Поиск записи с заданным значением ключа. 2. Обновить значение одного поля. | |
Структура записи | Владелец телефона: номер телефона – последовательность символов, адрес, ФИО | |
Доп. операция | 3. Сформировать текстовый файл из фамилий владельцев, чьи номера начинаются с введенных первых трех цифр(например, 434) 4. Удалить сведения о владельцах телефонов, которые начинаются с заданной цифры. | |
Структура записи | Владельцев автомобилей. номер машины, марка, сведения о владельце, сведения об угоне (логического типа). | |
Доп. операция | 5. Список автомобилей числящихся в угоне. 6. Установить факт угона автомобиля с заданным номером. | |
Структура записи | Пациент поликлиники: номер карточки, код хронического заболевания, Фамилия лечащего врача | |
Доп. операция | 7. Сформировать двоичный файл с записями о пациентах с заданным кодом заболевания. 8. Заменить фамилию, имя, отчество врача у указанных пациентов(список пациентов – это массив номеров карточек) | |
Структура записи | Товар: название, код – шестиразрядное число, завод изготовитель, цена, страна(название0 | |
Доп. операция | 9. Сформировать текстовый файл о поставках заданной страны, размещая на строке все сведения о товаре, кроме страны. Название страны записать в первой строке файла. 10. Добавить новую запись о товаре в конец файла. | |
Структура записи | Специализация вуза: код специальности, название вуза, название специальности | |
Доп. операция | 11. Сформировать список вузов, которые ведут подготовку специалистов по специальности с указанным номером. Список представить в текстовом файле. 12. Изменить код специальности по названию специальности | |
Структура записи | Книга: ISBN – двенадцатизначное число, Автор, Название, год издания | |
Доп. операция | 13. Создать новый типизированный файл и перенести в него записи о книгах указанного автора за указанный год. 14. Удалить книги изданные в указанном году. | |
Структура записи | Страховой полис: номер, компания, фамилия владельца | |
Доп. операция | 15. Сформировать список клиентов заданной страховой компании. Список сохранить в текстовом файле, где сведения об одном клиенте в одной строке. 16. Изменить название компании у всех клиентов. Старое и новое названия известны. | |
Структура записи | Англо – русский словарь: английское слово, русское слово | |
Доп. операция | 17. Сформировать список английских слов, начинающихся с указанной буквы и их русский перевод. 18. Обновить запись, записав новый вариант русского переводв по заданному слову. | |
Структура записи | Железнодорожная справка: номер поезда, пункт отправления, пункт назначения, время отправления | |
Доп. операция | 19. Сформировать справку по поездам, отправляющимся в указанный пункт назначения. Результаты записать в новый двоичный файл такой же структуры, как и исходный. 20. Удалить сведения по указанному поезду. | |
Структура записи | Регистрация малого предприятия: номер лицензии(текстовое значение), название, учредитель, признак действия лицензии(0 действует, 1 отозвана) | |
Доп. операция | 21. Сформировать список лицензий одного заданного учредителя. Записать полученные данные в текстовый файл, располагая записи построчно. 22. Отозвать указанные лицензии. Номера отзываемых лицензий находятся в текстовом файле, каждый номер на отдельной строке. | |
Структура записи | Студент: номер зачетной книжки, номер группы, ФИО | |
Доп. операция | 23. Сформировать список студентов одной группы в двоичном файле той же структуры, что и исходный. 24. Перевести некоторых студентов в другую группу. Номера зачетных книжек переводимых студентов находятся в текстовом файле, каждый номер на отдельной строке. Номер новой группы известен и передается в операцию. | |
Структура записи | Справочная межгорода: код города, название города, страна | |
Доп. операция | 25. Сформировать в текстовом файле таблицу кодов указанной страны. В строке файла должны храниться: название города и код. 26. Обновить код города по названию города. | |
Структура записи | Расписание занятий группы: номер группы, Название дисциплины, номер пары, номер недели, номер дня недели, вид занятия, номер аудитории. | |
Доп. операция | 27. Сформировать в двоичном файле расписание заданной группы на заданный день недели. 28. Обновить расписание, найти дисциплины, которые стоят на одинаковых парах в одну аудиторию и у определить для них новые аудитории. | |
Структура записи | Частотный словарь: слово, количество вхождений в текст | |
Доп. операция | 29. Определить, какое слово встречалось чаще всего в тексте. 30. Добавить в файл новую запись по слову. Обновить количество вхождений некоторых слов, увеличив их количество на 1. | |
Структура записи | Читательский билет: Номер, инвентарный номер книги, дата выдачи, дата возврата | |
Доп. операция | 31. Сформировать список читателей, которые не вернули книги в срок (дата возврата<текущей), полученные данные записать в двоичный файл. 32. Найти запись по заданным критериям: номер, инвентарный номер и вернуть указатель на запись. 33. Удалить запись о книге, которую читатель вернул в библиотеку. | |
Структура записи | Вызов такси: Номер, Фамилия водителя, время выезда, отметка о присутствии в гараже | |
Доп. операция | 34. Сформировать список машин, находящихся в гараже. Полученные данные записать в двоичный файл с той же структурой. 35. Обновить сведения о машины при выезде из гаража. | |
Структура записи | Продажи товаров: Код товара, название, цена, дата продажи. | |
Доп. операция | 36. Посчитать сумму, на которую были продан товары за указанную дату. 37. Сформировать двоичный файл на основе записей исходного файла, содержащий сведения о товаре: код товара, количество продаж, цена товара. 38. Произвести расчет выручки от продаж на основе данных нового файла. | |
Структура записи | Сотрудник: Табельный номер, Должность, оклад, количество детей | |
Доп. операция | 39. Увеличить оклад вдвое тех сотрудников, которые занимают указанные в текстовом файле должности. 40. Удалить сотрудников с табельными номерами, которые хранятся в двоичном файле. |
1 Файловые потоки.
|
|
|
|
1.1. Классы потоков
ifstream – класс входных файловых потоков (для чтения данных)
ostream – класс выходных файловых потоков (для создания файлов и добавления записей)
fstream – класс двунаправленных потоков (для обеих типов операций)
Файл – это экземпляр соответствующего класса.
1.2. Операции над файлами
Файл – это экземпляр соответствующего класса – поток..
1.2.1. Создание потока
Способ 1. Без связывания с файлом
ifstream if; // для ввода данных в файл
ostream of; // для чтения данных из файла
fstream ff; // для чтения и записи
Способ 2. Связывая его с файлом
ifstream if(“A.txt”);
ostream of(“A.txt”);
fstream ff(“A.txt”);
1.2.2. Открытие потока и связывание его с файлом
Так как поток это объект класса, то открытие осуществляет метод
open([имя файла,][способ открытия файла])
имя файла – строковое значение, которое задает имя физического файла или переменную типа строка.
Способ открытия файла
Способ открытия файла задается перечисляемой переменной