Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2013, 13:31   #1
KyKi
 
Регистрация: 12.09.2013
Сообщений: 7
По умолчанию Бинарные файлы структур С++

Задание: Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг: это фа-милия автора, название и год издания.
Определить названия книг данного автора: изданных с 1960г. Полученную информацию записать в файл g.
Подскажите пожалуйста что в коде не так,не работает функция чтения файла результата

Код:
#include <iostream>
#include <fstream>
using namespace std;

struct Book
{
	char name[20];  //фамилия автора
	char nazvanie[40]; //название книги
	int year; //год издания
};

void createfile(ofstream&fout,char fname[]) //функция создания файла
{
	setlocale(LC_ALL,"Russian");
	Book x; //переменная-структура для ввода в файл
	fout.open(fname,ios::binary); //открытия файла fout
	cout<<"\n Введите фамилию автора книги:"<<endl;
	cin>>x.name;
	while(x.name[0]!='*') //выход из цикла, когда фамилия начинается со *
	{
		cout<<"\n Введите название книги:"<<endl;
		cin>>x.nazvanie;
		cout<<"\n Введите год издания книги:"<<endl;
		cin>>x.year;
		fout.write((char*)&x, sizeof x);
		cout<<"\n Введите фамилию автора книги:"<<endl;
		cin>>x.name;
	}
	fout.close();  //закрыть файл
}


void Read_file(ifstream&fin,char fname[])
{
	setlocale(LC_ALL,"Russian");
	Book x;	//переменная-структура для чтения из файла
	fin.open(fname,ios::in|ios::binary);	//открытие файла
	cout<<"\n Содержимое файла:"<<fname<<endl;
	while (fin.read((char *)&x,sizeof x))	//прочитать из файла структуры в переменную x, пока не конец файла
	{  
		cout<<x.name<<":"<<x.nazvanie<<" "<<x.year;	//вывод полей структуры через пробел и ;
		cout<<endl;
	}
	cout<<endl;	//перевод строки
	fin.close();	//закрыть файл

}

void Search(char fname[],ifstream &fin,char gname[],ofstream &gout, char name[])
{
	setlocale(LC_ALL,"Russian");
	fin.open(fname,ios::in|ios::binary);	//открыть файл f для чтения
	gout.open(gname,ios::out|ios::binary);	//открыть файл g для записи
	Book x;	//переменная-структура для чтения из файла
	while (fin.read((char *)&x,sizeof x))	//прочитать из файла сведения о книгах в переменную x, пока не конец файла
	{  //поиск элемента файла - книги изданной с 1960г.
		if ((x.name==name) && (x.year>=1960))
			gout.write((char *)&x,sizeof x);
	}
	gout.close();
	fin.close();		//закрытие файла fin
}

void Read_file1(ifstream&gin,char gname[])
{
	setlocale(LC_ALL,"Russian");
	Book x;	//переменная-структура для чтения из файла
	gin.open(gname,ios::in|ios::binary);	//открытие файла
	cout<<"\n Содержимое файла:"<<gname<<endl;
	while (gin.read((char *)&x,sizeof x))	//прочитать из файла структуры в переменную x, пока не конец файла
	{  
		cout<<x.name<<":"<<x.nazvanie<<" "<<x.year;	//вывод полей структуры через пробел и ;
		cout<<endl;
	}
	cout<<endl;	//перевод строки
	gin.close();	//закрыть файл

}

void main()		//главная функция
{
  setlocale(LC_ALL,"Russian");
  char fname[20]="",gname[20]="",name[]="";
  ofstream fout, gout;	//объявление файла для записи
  ifstream fin, gin;		//объявление файла для чтения
  char c;
  cout<<"Введите имя файла f: ";
  cin>>fname;
  cout<<"Если хотите создавать новый файл нажмите Y?"<<endl;
  cin>>c;
  if (c=='Y') 
  {
	  createfile(fout,fname);	//вызов функции создания файла fout
	  Read_file(fin,fname);	//вызов функции чтения файла fin
  }
  else createfile(fout,fname);	//вызов функции чтения файла fin
  Read_file(fin,fname);	//вызов функции чтения файла gin
  cout<<"Введите имя файла результатов g: ";
  cin>>gname;
  cout<<"Введите имя автора книги для поиска его книг изданных после 1960г: ";
  cin>>name;
  Search(fname,fin,gname,gout, name);//поиск книг
  Read_file1(gin,gname);
  cout<<endl;
}

Последний раз редактировалось KyKi; 26.12.2013 в 14:39.
KyKi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарные файлы Blind Guard Общие вопросы C/C++ 5 02.01.2013 00:37
Бинарные файлы (C/Си) dmitryi98 Помощь студентам 6 15.08.2012 08:01
Бинарные файлы и C# WOWka777 Общие вопросы .NET 4 03.09.2010 18:08
Бинарные файлы VorobeY1326 Общие вопросы C/C++ 12 09.05.2009 21:00
С++ Бинарные файлы EwwwA Общие вопросы C/C++ 0 20.04.2009 17:32