Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Примеры по работе с файлами

Пример 1. Для выполнения этой программы скопируйте ее текст в новый проект.

 

//////////////////////////////////

// Эта программа предназначена для иллюстрации работы с файлами в двоичном режиме.

// Обеспечивает:

// 1. Ввод и добавление в файл Persons.dat сведений о людях.

// 2. Чтение данных из файла Persons.dat и вывод их на экран.

// Данные о людях (персонах) включают в себя фамилию, имя и год рождения,

// оформленные в виде структуры t_Person.

// Различного рода запросы, требующие ответа "да" или "нет", реализуются

// с помощью функции MessageBox() из заголовочного файла <windows.h>.

// Эта функция возвращает целочисленные значения 6 и 7, означающие "да" или "нет" соответственно.

// Для очистки экрана в программе используется функция system("cls"), которая

// выполняет команду операционной системы cls - очистка экрана.

////////////////////////////////////

 

 

#include "stdafx.h"

#include <iostream> // Для работы со стандартными потоками ввода-вывода

#include <fstream> // Для работы с файлами

#include <windows.h> // Для использования функции MessageBox()

#include <iomanip> // Для использования функции setw()

 

using namespace std;

 

bool FileExists (char *FileName)

  // Возвращает true, если файл FileName существует

{

  ifstream File (FileName); // Открываем файл для чтения

  bool Fl = (bool)File; // Фиксируем результат открытия файла в переменной Fl

  File.close(); // Закрываем файл

  return Fl; // Возвращаем значение true, если файл существует

}

 

struct t_Person // Тип данных для "персоны"

{

  char Fam[20]; // Фамилия

  char Name[20]; // Имя

  int Year; // Год рождения

};

 

char *ReadLine(char *S, int len)

  // функция для корректного ввода с клавиатуры русских букв

{

  cin.getline(S, len);

  OemToAnsi(S, S);

  return S;

}

void ReadConPerson(t_Person &P)

  // Ввод данных персоны с клавиатуры

{

  cin.sync();

  int W = 17; // Ширина поля вывода для подсказки

  cout << setw(W) << "Фамилия: "; // Выводим подсказку для фамилии

  ReadLine(P.Fam, sizeof(P.Fam)); // Вводим фамилию

  cout << setw(W) << "Имя: "; // Выводим подсказку для имени

  ReadLine(P.Name, sizeof(P.Name)); // Вводим фамилию

  cout << setw(W) << "Год рождения: "; // Выводим подсказку для года рождения

  cin >> P.Year; // Вводим год рождения

}

 

void WriteConPerson(t_Person P)

  // Вывод данных персоны на экран

{

  int W = 17; // Ширина поля вывода для подсказки

  cout << setw(W) << "Фамилия: " << P.Fam << endl; // Выводим фамилию

  cout << setw(W) << "Имя: " << P.Name << endl; // Выводим имя

  cout << setw(W) << "Год рождения: " << P.Year << endl; // Выводим год рождения

}

 

void WriteFile(char FN[])

  // Чтение данных с клавиатуры и их запись в файл с именем FN

{

  t_Person P; // Переменная для персоны

  fstream File(FN, ios::out | ios::binary | ios::app); // Открываем файл для добавления данных в двоичном режиме

  do

  // Цикл до тех пор, пока мы не откажемся от ввода данных

  {

        system("cls"); // Чистим экран

        ReadConPerson(P); // Вводим данные с клавиатуры в переменную P

        File.write((char *) &P, sizeof(P)); // Записываем данные из переменной Р в файл

  }

  while (MessageBox(NULL, L"Продолжим ввод?", L"Запрос", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST | MB_DEFBUTTON1)!= 7);

  File.close(); // Закрываем файл

}

 

void ReadFile(char FN[])

  // Чтение данных из файла с именем FN и вывод их на экран

{

  t_Person P; // Переменная для персоны

  fstream File(FN, ios::in | ios::binary); // Открываем файл для чтения данных в двоичном режиме

  if (!File) // Если файл не удалось открыть, выходим из функции

        return;

  do

  // Цикл до тех пор, пока мы не откажемся от вывода данных

  {

        int Count = 1; // Счетчик выведенных персон

        File.clear(); // Очищаем статус состояния потока ввода

        File.seekg(0); // Устанавливаем указатель чтения файла в начало файла

        do

        // Цикл до тех пор, пока не закончился файл или мы не откажемся от вывода данных

        {

               File.read((char *) &P, sizeof(P)); // Читаем из файла в переменную Р данные об очередной персоне

               if (!File.eof()) // Если не достигнут конец файла, то выводим на экран данные о персоне

               {

                      system("cls"); // Очищаем экран

                      cout << "Персона " << Count++ << ":\n"; // Выводим на экран подсказку с номером Count персоны и увеличиваем

                                                        // значение Count на единицу

                      cout << "----------\n"; // Подчеркиваем подсказку

                      WriteConPerson(P); // Выводим на экран значение переменной Р с данными о персоне

               }

        }

        while (!File.eof() &&

               (MessageBox(NULL, L"Продолжим?", L"Запрос", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST | MB_DEFBUTTON1)!= 7));

  }

  while (MessageBox(NULL, L"Вывод закончен.\nНачнем сначала?", L"Запрос", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST | MB_DEFBUTTON2)!= 7);

  File.close(); // Закрываем файл

}

 

int _tmain(int argc, _TCHAR* argv[])

{

  setlocale (0, ""); // Устанавливаем руссифицированную кодовую страницу для консоли

  char FN[] = "Persons.dat"; // Имя файла для данных персон

  do

  // Цикл до тех пор, пока мы не откажемся от продолжения работы

  {

        bool Ok = FileExists(FN); // В переменной Ок фиксируем наличие (отсутствие) файла с именем FN

        if ((!Ok) || (Ok &&

               (MessageBox(NULL, L"Будем добавлять данные в файл?", L"Запрос", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST | MB_DEFBUTTON2) == 6)))

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

               WriteFile(FN); // Чтение данных с клавиатуры и их запись в файл с именем FN

 

        if (MessageBox(NULL, L"Будем читать данные из файла?", L"Запрос", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST | MB_DEFBUTTON1) == 6)

    // Если мы хотим прочитать данные из файла, то читаем их из файла и выводим на экран

               ReadFile(FN); // Чтение данных из файла с именем FN и вывод их на экран

  }

  while (MessageBox(NULL, L"Закончить работу?", L"Запрос", MB_YESNO | MB_ICONSTOP | MB_TOPMOST | MB_DEFBUTTON2)!= 6);

  return 0;

}

 

 

Работа с динамической памятью

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...