МУ_ЛР7_ОП (1079938), страница 6
Текст из файла (страница 6)
memcpy( pMasNew + p , &SAdd , sizeof(Student));
StudMasToFileWR( "BDStud.bin" , pMasNew , RazmF + 1 );
free ( pMasNew );
printf( "ПОСЛЕ ДОБАВЛЕНИЯ (по номеру)!\n" ); //
StudPrintFileWR( "BDStud.bin");
Результат работы фрагмента текста (NumAdd= 2):
ДО ДОБАВЛЕНИЯ (по номеру)!
Запись: Имя = Второй Номер = 2 Стипендия = 2000,00
Запись: Имя = Третий Номер = 3 Стипендия = 3000,00
Запись: Имя = Четвертый Номер = 4 Стипендия = 4000,00
ПОСЛЕ ДОБАВЛЕНИЯ (по номеру)!
Запись: Имя = Второй Номер = 2 Стипендия = 2000,00
Запись: Имя = ADDED Номер = 33 Стипендия = 15,00
Запись: Имя = Третий Номер = 3 Стипендия = 3000,00
Запись: Имя = Четвертый Номер = 4 Стипендия = 4000,00
39 Модификация записи в двоичном файле.
Фрагмент программы для модификации одной записи в существующем двоичном файле структур. Операция выполняется через прямое чтение записи по номеру, ее изменения и запись на тоже место модифицированной записи. Нумерация записей при удалении начинаетчи с единицы.
…
// ИЗМЕНЕНИЕ ЗАПИСИ
int nChange = 3;
Student SBuf;
printf( "ДО ИЗМЕНЕНИЯ (по номеру = %d)!\n" , nChange ); //
system("attrib -R BDStud.bin ");
StudPrintFileWR( "BDStud.bin");
pF = fopen( "BDStud.bin" , "r+b"); // Открытие файла для чтения и записи
if (filelength(pF->_file)/sizeof(Student) >= nChange )
{
Pos1 = fseek( pF, (nChange - 1)*sizeof(Student), SEEK_SET);//Перемещение указателя на (nChange-1)
fread( &SBuf, sizeof(Student) , 1, pF); // чтение одной записи
strcpy(SBuf.Name , "ИЗМЕНЕНИЕ!");
Pos1 = fseek( pF, (nChange - 1)*sizeof(Student), SEEK_SET); // Перемещение указателя на (nChange-1)
fwrite( &SBuf, sizeof(Student) , 1, pF); // запись одной записи
}
else
printf( "Ошибка номера записи- %d !\n" , nChange ); // Ошибка номера
fclose( pF );
printf( "ПОСЛЕ ИЗМЕНЕНИЯ (по номеру = %d)!\n" , nChange ); //
StudPrintFileWR( "BDStud.bin");
…
Результат работы фрагмента текста (nChange = 3):
ДО ИЗМЕНЕНИЯ (по номеру = 3)!
Запись: Имя = Второй Номер = 2 Стипендия = 2000,00
Запись: Имя = Первый Номер = 1 Стипендия = 1000,00
Запись: Имя = Третий Номер = 3 Стипендия = 3000,00
Запись: Имя = Четвертый Номер = 4 Стипендия = 4000,00
ПОСЛЕ ИЗМЕНЕНИЯ (по номеру = 3)!
Запись: Имя = Второй Номер = 2 Стипендия = 2000,00
Запись: Имя = Первый Номер = 1 Стипендия = 1000,00
Запись: Имя = ИЗМЕНЕНИЕ! Номер = 3 Стипендия = 3000,00
Запись: Имя = Четвертый Номер = 4 Стипендия = 4000,00
40 Программа сравнения двух файлов.
/0.12. Функция сравнения двух файлов.
char FileName1[]="File1.txt";
char FileName2[]="File2.txt";
FILE * pF1;
FILE * pF2;
int flag = 0;
pF1 = fopen( FileName1 , "r"); // Открытие для чтения
pF2 = fopen( FileName2 , "r"); // Открытие для чтения
if ( pF1 != NULL || pF2 != NULL)
{
while (!feof(pF1)&&!feof(pF2))
{
char ch1 = getc(pF1);
char ch2 = getc(pF2);
int fl1 =feof(pF1);
int fl2 =feof(pF2);
if ( ch1 != ch2 ) { flag = 1; break ;};
if ( feof(pF1) != feof(pF2)) { flag = 1; break ;};
};
if( flag == 1) printf( "Файлы %s и %s не равны!\n" , FileName1 , FileName2 );
else printf( "Файлы %s и %s равны!\n" , FileName1 , FileName2 );
fclose(pF1);
fclose(pF1);
};
41 Программа печати списка текстовых файлов из параметров командной строки.
// Ввод из файл ов по списку аргументоа (gets)
char FName[32] = "";
int ArgCount = 1;
while ( ArgCount < Argc )
{
strcpy ( FName , Argv[ArgCount]);
///
pF = fopen( FName , "r"); //Открытие текстового файла для чтения
//
printf( "\nФайл - %s\n" , FName);
fgets( line , 80 , pF );
while (!feof(pF)|| strlen(line) !=NULL )
{
printf( "%s", line);
line[0] ='\0'; // для обнуления строки при новом чтении из файла
fgets( line , 80 , pF ); // Чтение строки из файла
};
fclose(pF); // Закрытие файла
///
ArgCount ++; // Новый файл из списка аргументов командной строки
};
Нужно создать пустой проект в MS VS, как описано выше, скопировать через буфер обмена в него текст данного примера, отладить его и выполнить.
42 Контрольные задания ЛР №7.
43 Запись простого файла текстовыми данными и его чтение
Создать и заполнить в цикле текстовый файл из массива строк. Массив инициализируется строками с фамилиями студентов вашей группы. После создания файл (а не массив) прочитать и распечатать. Продемонстрировать преподавателю содержание файла с использованием файл менеджера (можно Far).
44 Создать функцию распечатки текстового файла по строкам
Сделать и проверить функцию (PrintTextFile) распечатки текстового файла. Проверить ее по шагам в отладчике. Распечатать файл предыдущего задания этой функцией.
45 Сделать функцию копирования текстовых файлов
Сделать программу для копирования текстового файла в другой текстовый файл. Программу копирования оформить в виде функции (CopyFile). После копирования распечатать файлы с помощью своей функции PrintTextFile.
46 Программа для слияния 2-х файлов в результирующий файл.
Сделать программу для слияния двух файлов, имена которых заданы в командной строке. Тип файла : текстовый или двоичный задается вариантом. Исходные файлы и результирующий файл распечатать (PrintTextFile). Если исходные файлы не найдены, то выдать сообщение об ошибке.
47 Запись двоичного файла случайными данными и его чтение
Для своей структуры по варианту создается двоичный файл и заполняется данными. Одно из полей записи должно формироваться датчиком случайных чисел (функция rand). Символьное поле заполняется из массива строк значениями, осмысленными для своей структуры. Число генерируемых записей задается по варианту: фиксировано (целая константа), переменная этапа компиляции (#define) или константная переменная (const int). После заполнения файл распечатать. Для решения задачи использовать пример из теоретической части данных методических указания (раздел “ Работа с текстовым файлом построчно ”). Файл распечатать на основе своей функции.
48 Поиск заданного текста в строках текстового файла.
В двоичном файле, созданном ранее, выполняется поиск осмысленного символьного значения. При этом записи последовательно считываются из файла и сравниваются с искомым эталоном. Напечатать запись и ее номер в файле.
49 Функция записи в файл из массива своих структур
Написать функцию для записи структурных переменных из массива в файл. Использовать примеры, рассмотренные выше. Проверить ее использование.
50 Функция записи из файла в массив своих структур
Написать функцию для чтения записей из файла и размещения их в динамическом массиве. Использовать примеры, рассмотренные выше. Проверить ее использование.
51 Поиск минимума в файле по числовому полю
В своем файле из записей структурных переменных найти запись с минимальным значением. Тип поля взять из списка вариантов.
52 Варианты заданий для студентов СУЦ.
Варианты заданий приведены ниже. Номер варианта должен соответсвовать номеру студента в групповом журнале.
| № п/п | Структура ДЗ 5 полей, 3 первых из них числовые | Задание числа записей в файле при генерации | Типы файла для слияния | Поле для случайной генерации | Поле для поиска минимума в файле |
| | Кафедра | 10 (фикс.) | Текстовый | Целое | Вещественное |
| | Книга | #define | Двоичный | Вещественное | Целое |
| | Файл | Const int | Текстовый | Символьное | Вещественное |
| | Автомобиль | 10 (фикс.) | Двоичный | Целое | Целое |
| | Компьютер | #define | Текстовый | Вещественное | Вещественное |
| | Группа | Const int | Двоичный | Символьное | Целое |
| | Человек | 10 (фикс.) | Текстовый | Целое | Вещественное |
| | Стеллаж | #define | Двоичный | Вещественное | Целое |
| | Дом | Const int | Текстовый | Символьное | Вещественное |
| | Студент | #define | Двоичный | Символьное | Целое |
53 Дополнительные требования для студентов СУЦ (д.т.).
Для продвинутых студентов, по желанию, можно построить программу с дополнительными требованиями. Дополнительные требования выполняются в дополнение основным требованиям ЛР.
54 Сделать функцию копирования файлов
Весь файл считывается в память единым фрагментом, а затем целиком копируется в новый файл. Имена файлов заданы в параметрах командной строки (аргументы main).
55 Слияние 2-х двоичных файлов в третий.
Оба файла считываются в память едиными фрагментами, сливаются в единый фрагмент, а затем целиком копируются в новый файл. Имена файлов заданы в аргументах командной строки (аргументы main).
56 Программа печати списка файлов на основе списка, заданного в другом файле.
Распечатывается список файлов, перечень которых задан в отдельном текстовом файле. Имя этого файла задано аргументом командной строки (аргументы main).
57 Функция чтения файла в список структур
Свой файл, со своей структурой по варианту, считывается в список с динамическим добавлением элементов списка. Результат чтения распечатывается из списка.
58 Функция записи файла из списка структур
Из списка, заполненного своими структурами, выполняется запись в последовательный двоичный файл. Фал распечатывается.
59 Поиск заданного текста и целого числа в полях записи двоичного файла.
В двоичном файле, созданном на основе своей структуры, выполняется поиск подстроки на совпадение в одном из символьных полей (по выбору, например, в фамилии) и/или целочисленного значения на совпадение. Управление поиском: только подстрока, толлько число или и подстрока и число, задается значением шаблонов поиска: шаблон подстроки – пустая строка, а шаблон числа – нуль. Файл, критерии поиска и результат поиска распечатать.
60 Сортировка в двоичном файле по символьному полю.
Выполнить сортировку в двоичном файле структур по символьному полю записи. Сортировка может быть по возрастанию и по убыванию. Строчные и прописные символы различаются. Проверить и, при необходимости настроить, сортировку по русскому тексту (локализация). Результат до сортировки и после распечатать.
61 Сортировка в двоичном файле по действительному полю.
Выполнить сортировку в двоичном файле структур по целочисленному полю записи. Сортировка может быть по возрастанию и по убыванию. Строчные и прописные символы различаются. Результат до сортировки и после распечатать.
62 Демонстрация, защита ЛР и отчет по ЛР.
После выполнения всех необходимых шагов по ЛР, работающую программу нужно продемонстрировать преподавателю, проводящему ЛР, о чем он в журнале делает отметку. Далее студент на основе шаблона и примера оформляет отчет по ЛР. После оформления отчета, который может быть представлен преподавателю в электронном виде, выполняется защита ЛР. Студент дает ответы на вопросы по отчету и на контрольные вопросы приведенные ниже. ЛР считается полностью зачтенной, если выполнены все перечисленные требования и действия: демонстрация, отчет и защита ЛР.
63 Контрольные вопросы по ЛР.
-
Что можно делать с данными в программе?
-
Дайте определение понятия файл.
-
Какие разновидности определений понятия файл вы знаете?
-
Зачем нужно обозначать конец файла, и как он задается?
-
Что такое поток ввода вывода, какая система ими управляет?
-
Как ОС управляет файлами и устройствами?
-
Какие основные типы файлов вы знаете?
-
Как задается имя файла и его расширение? В разных файловых системах?
-
Какие важнейшие характеристики файлов вы знаете?
-
Зачем используются операции открытия и закрытия файлов?
-
Что такое дескриптор файла?
-
Как программе описывается файл, дескриптор файла?
-
Какие режимы открытия файлов вы знаете?
-
Какой тип файлов соответствует программам в компьютере?
-
Какие основные операции работы с файлами вы знаете?
-
Какие уровни работы с файлами вы знаете?
-
Как описать структуру FILE? Как она используется?
-
Чем отличаются текстовые и двоичные файлы?
-
Как в программе выполняется проверка конца файла?
-
Какие функции и библиотеки используются для ввода и вывода в СИ?
-
Какие функции используются для чтения файлов?
-
Какие функции используются для записи файлов?
-
Какие функции позволяют работать с файлом вцелом?
-
Какие библиотеки нужно подключить для низкоуровневого ввода и вывода?
-
Как можно перемещаться по файлу при работе с ним?
-
Как перенаправить стандартные потоки ввода и вывода?
-
Для чего нужны файл менеджеры? Какие из нмх вы знаете?
-
Как работать с консолью ввода и вывода?
64 Литература.
Основная литература
-
Список литературы, доступные книги и необходимые пособия для ЛР ОП размещены на сайте www.sergebolshakov.ru на страничке “2-й к СУЦ”. Пароль для доступа можно взять у преподавателя или старосты группы.
-
Керниган Б., Ритчи Д. К36 Язык программирования Си.\Пер. с англ., 3-е изд., испр. - СПб.: "Невский Диалект", 2001. - 352 с.: ил.
-
Касюк, С.Т. Курс программирования на языке Си: конспект лекций/С.Т. Касюк. — Челябинск: Издательский центр ЮУрГУ, 2010. — 175 с.
-
MSDN Library for Visual Studio 2005 (Vicrosoft Document Explorer – входить в состав дистрибутива VS. Нужно обязательно развернуть при установке VS VS или настроить доступ через Интернет.)
Дополнительная литература
-
Общее методическое пособие по курсу для выполнения ЛР и ДЗ (см. на сайте 1-й курс www.sergebolshakov.ru) – см. кнопку в конце каждого раздела сайта!!!
-
Другие методические материалы по дисциплине с сайта www.sergebolshakov.ru.
-
Конспекты лекций по дисциплине “Основы программирования”.
-
Подбельский В.В. Язык Си++: Учебное пособие. – М.: Финансы и статистика, 2003.
-
5. Подбельский В.В. Стандартный СИ++: Учебное пособие. – М.: Финансы и статистика, 2008.
-
Г. Шилдт “С++ Базовый курс”: Пер. с англ.- М., Издательский дом “Вильямс”, 2011 г. – 672с
-
Фридланд А.Я. Информатика и компьютерные технологии. Основные термины: толковый слов. : 3-е изд. Испр. и доп./ А.Я. Фридланд, Л.С. Хааамирова, И.А. Фридланд. – М.:ООО «Издательство Астрель»: ООО «Издательство АСТ». 2003 – 272с.
-
Г. Шилдт “С++ Руководство для начинающих” : Пер. с англ. - М., Издательский дом “Вильямс”, 2005 г. – 672с
-
Г. Шилдт “Полный справочник по С++”: Пер. с англ.- М., Издательский дом “Вильямс”, 2006 г. – 800с
-
Бьерн Страуструп "Язык программирования С++"- М., Бином, 2010 г.
65 Приложение: фрагменты программ для низкоуровневого ввода и вывода
66 Запись из массива в файл _write.
В данном разделе приведем два варианта записи массива структур в файл: низкоуровневый и на основе потоков. Используем структуру Student:















