Задание: Дан файл 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;
}