Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ЯВУ. Мет.ук. к лаб. работам...doc
Скачиваний:
14
Добавлен:
22.08.2019
Размер:
126.98 Кб
Скачать

Работа с файлами. Использование процедур и функций Методические указания

При выполнении лабораторной работы приобретаются навыки работы с файлами. Исходные данные следует сохранять в структурах. Для сохранения и работы с информацией в программе следует создать файл, в который будут записываться структуры. Результаты работы программы, кроме вывода на экран, следует сохранить в текстовом файле с последующим выводом его содержимого на принтер.

В соответствии с полученным вариантом задания следует:

  1. Составить блок-схему решения задачи на уровне процедур и функций. Блок-схема должна отражать логическую структуру алгоритма.

  2. По разработанному алгоритму написать программу, удовлетворяющую следующим требованиям:

- в программу необходимо включить меню работы с программой, которое должно содержать следующие пункты:

а) создание файла исходных данных;

б) просмотр содержимого файла;

в) поиск заданной информации в файле;

г) корректировка информации в файле (дозапись информации в файл, удаление информации из файла, изменение значения компонент файла);

д) выход из программы;

- алгоритм, соответствующий каждому пункту меню, должен быть реализован в виде функции. Входные данные для работы функций и результаты их работы следует передавать через параметры функций. Не следует все переменные программы описывать как глобальные объекты;

- перемещение по пунктам меню можно организовать с помощью клавиш <стрелка вверх> и <стрелка вниз> или вводом номера выбранного пункта меню;

- предусмотреть ввод информации в файл из заранее подготовленного текстового файла. Для этого в текстовом редакторе системы заранее набрать входную информацию и сохранить ее в файле исходных данных;

- пользовательские типы можно описывать с помощью спецификатора typedef;

- если при корректировке файлов создавались вспомогательные файлы, их необходимо удалить после работы программы.

Пример задания

Описать в виде структуры зачетную книжку студента. Записать в файл содержимое зачетных книжек некоторой группы студентов. После сессии добавить в файл результаты сдачи экзаменов студентами. Исключить из файла сведения о студентах, не сдавших сессию.

Зачетную книжку студента и файл, содержащий сведения о студентах группы, опишем следующим образом:

#include <stdio.h>

typedef struct {

char subject[30];

unsigned short int mark;

} examination;

typedef examination sessia[5];

typedef sessia setofsessia[10];

typedef struct {

long number;

char name[60];

char groupcode[8];

setofsessia marks;

} studcard;

studcard rec;

FILE *f;

Таким образом, структура объединяет в единое целое любое число полей данных разных типов. Чтобы присвоить значение переменной типа структура, нужно присвоить значения всем полям структуры. Ввод и вывод информации в файл при выполнении лабораторной работы осуществлять блоками, размер которых кратен размеру структуры (функции fread и fwrite).

Для работы с файлом его надо открыть, обработать и закрыть. При открытии файла программы с ним связывается определенный физический поток (физический файл). Файл должен иметь указатель на структуру типа FILE (этот тип определён в файле stdio.h). Когда файл открывается с помощью функции fopen, структуре типа FILE выделяется память, адрес которой получает указатель на структуру, и поток связывается со структурой типа FILE. Структура содержит информацию о файле или устройстве, с которым связан файл программы. Указатель типа FILE используется для операций с файлами с помощью библиотечных функций ввода-вывода. Открытие файла производится функцией fopen. Прототип функции

FILE * fopen(char *filename, char *type);

где filename – определяет полное имя физического файла;

type определяет способ (режимы) доступа к файлу.

Допустимые значения способов доступа

Способ доступа

Назначение способа доступа – открыть файл для

“r”

“w”

“a”

“+”

read – чтения; файл должен быть уже создан

write – записи; если был файл с тем же именем, он стирается при открытии файла

append – дополнение записей в конец файла; если файла нет, он создается

- допускается чтение из файла и запись в файл

Примеры операторов открытия файлов:

FILE *Fid=fopen(“lr2.dat”,”r”);//для чтения

FILE *Fin=fopen(filename,”a+”);//для чтения и дополнения

Если файл открыт с режимом “a” или ”a+”, данные записываются в конец файла, даже если указатель файла был перемещён от конца файла с помощью функций fseek и rewind: при записи в файл указатель перемещается в конец файла.

Для режимов “r+”, ”w+” и ”a+” разрешены чтение и запись, так как файл открыт для обновления.

Для текстового режима в строке type должен быть символ t, для бинарного – b. Например, “wb” или “wt”.

При вводе-выводе данных записями в текстовом режиме значения пересылаемых данных, совпадающие с управляющими кодами (например, конца файла), могут нарушить процесс обмена записями. Поэтому при вводе-выводе данных записями надо использовать бинарные режимы доступа.

Если открытие файла успешно, функция fopen возвращает значение – указатель на переменную типа FILE и связывает файл программы с физическим файлом, а если открытие не состоялось (например, файл с таким именем не найден), функция возвращает NULL.

Следующая функция осуществляет проверку наличия на диске файла с данным именем:

#include<stdio.h>

int fileexists(char *filename)

{

FILE *f=fopen(filename,"r");

if(f==NULL)return 0;

else return 1;

}

Очистить существующий или создать новый дисковый файл позволяет следующая функция:

#include<stdio.h>

void cleanfile(char *filename)

{

FILE *f=fopen(filename,"w");

fcloseall();

return;

}

Функция fclose закрывает один заданный поток (файл). Функция fcloseall закрывает все потоки, открытые с помощью функций fopen.При этом буфер, образованный при открытии файла, ликвидируется.

Переименовать дисковый файл можно с помощью функции rename:

int rename(const char *oldname, const char *newname);

Для уничтожения файла используется процедура remove:

int remove(const char *filename);

Переименовывать и удалять можно только закрытые файлы.