Пример выполнения работы. Структура книга (поля: ФИО автора, название, издательство, год издания, число страниц)

Условие задачи:

Структура книга (поля: ФИО автора, название, издательство, год издания, число страниц). Создается массив книг размерности n. Сохраняется в файле и читается из файла. Файл открывается в двоичном режиме.

Для решения задач в среде Microsoft Visual Studio 2013 были созданы стандартные консольные приложения (проект типа Win32 Console Application) с установленным свойством «пустой проект» (Empty project). В каждый из проектов добавлен файл с расширением .cpp, исходные коды которых приведены ниже.

Листинг программы с комментариями для записи в файл:

#include <stdio.h>

#include <stdlib.h>

struct BOOK // Структура - книга

{

char Author[64];

char Title[128];

char Firm[64];

int year, page;

};

 

int main(int argc, char* argv[])

{

int n; // Переменная, задающая число элементов массива

BOOK *pBook; // Указатель на массив структур

printf("n="); scanf_s("%d", &n); // Ввод числа книг

pBook = new BOOK[n]; // Выделяем память под массив структур (книг)

for (int i = 0; i<n; i++) // Цикл ввода данных о книгах с клавиатуры

{

printf("Book N=%d:\n", i + 1);

printf("Author: ");

fflush(stdin); gets_s(pBook[i].Author);

printf("Title: ");

fflush(stdin); gets_s(pBook[i].Title);

printf("Firm: ");

fflush(stdin); gets_s(pBook[i].Firm);

printf("year: "); scanf_s("%d", &pBook[i].year);

printf("page: "); scanf_s("%d", &pBook[i].page);

}

FILE *pF;

fopen_s(&pF, "MyBook.dat", "wb"); // Открываем файл для записи в двоичном режиме

fwrite(&n, sizeof(int), 1, pF); // Записываем в файл число элементов массива

fwrite(pBook, sizeof(BOOK), n, pF); // Записываем в файл массив книг

fclose(pF); // Закрываем файл

system("pause"); // Останавливаем программу, ждем нажатия любой клавиши

return 0;

}

 

Листинг программы с комментариями для чтения из файла:

#include <stdio.h>

#include <stdlib.h>

struct BOOK // Структура - книга

{

char Author[64];

char Title[128];

char Firm[64];

int year, page;

};

 

int main(int argc, char* argv[])

{

int n; // Переменная, задающая число элементов массива

BOOK *pBook; // Указатель на массив структур

FILE *pF;

fopen_s(&pF, "MyBook.dat", "rb");// Открываем файл для чтения в двоичном режиме

 

if (pF == 0) // Ошибка открытия файла, например, файл не существует

{

printf("Error, file not found");

return 1;

}

fread(&n, sizeof(int), 1, pF); // Читаем из файла число элементов массива

pBook = new BOOK[n]; // Выделяем память под массив структур (книг)

fread(pBook, sizeof(BOOK), n, pF); // Читаем из файла массив книг

fclose(pF); // Закрываем файл

for (int i = 0; i<n; i++) // Цикл вывода данных о книгах на экран

printf("%s. %s. %s, %d. - %d.\n", pBook[i].Author,

pBook[i].Title, pBook[i].Firm, pBook[i].year,

pBook[i].page);

system("pause"); // Останавливаем программу до нажатия любой клавиши

return 0;

}