Форум программистов, компьютерный форум CyberForum.ru

Бинарные файлы структур - C++

Восстановить пароль Регистрация
 
KyKi
3 / 3 / 0
Регистрация: 12.09.2013
Сообщений: 129
26.12.2013, 00:21     Бинарные файлы структур #1
Задание: Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг: это фа-милия автора, название и год издания.
Определить названия книг данного автора: изданных с 1960г. Полученную информацию записать в файл g.
Подскажите пожалуйста что в коде не так,а именно в функции поиска таких книг,что-то никак не пойму
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <fstream>
using namespace std;
 
struct Book
{
    char name[20];  //фамилия автора
    char* nazvanie; //название книги
    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);
        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 ss[])
{
    setlocale(LC_ALL,"Russian");
    fin.open(fname,ios::in|ios::binary);    //открыть файл f для чтения
    gout.open(gname,ios::out|ios::binary);  //открыть файл f для записи
    Book x; //переменная-структура для чтения из файла
    while (fin.read((char *)&x,sizeof x))   //прочитать из файла сведения о книгах в переменную x, пока не конец файла
    {  //поиск элемента файла - книги изданной с 1960г.
        if (x.nazvanie=x.nazvanie && x.year=x.year)
            gout.write((char *)&x,sizeof x);
    }
    gout.close();
    fin.close();        //закрытие файла fin
}
 
void main()     //главная функция
{
  setlocale(LC_ALL,"Russian");
  char fname[20],gname[20];
  char ss[15];
  fstream fout, fin;
  char c;
  cout<<"Введите имя файла f: ";
  cin>>fname;
  cout<<"Если хотите создавать новый файл нажмите Y?"<<endl;
  cin>>c;
  if (c=='Y') 
  {
      createfile(fout,fname);   //вызов функции создания файла fout
      Read_file(fin,fname); //вызов функции чтения файла fin
  }
  else Read_file(fin,fname);    //вызов функции чтения файла fin
  cout<<"Введите имя файла результатов g: ";
  cin>>gname;
  cout<<"Введите имя автора книги для поиска его книг изданных после 1960г: ";
  cin>>ss;
  Search(fname,fin,gname,gout, ss);//поиск книг
  cout<<"\n Содержимое файла результатов: "<<endl;
  Read_file(fin,fname); //вызов функции чтения файла gin
  cout<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2013, 00:21     Бинарные файлы структур
Посмотрите здесь:

C++ С++ бинарные файлы
Бинарные файлы C++
Бинарные файлы C++
C++ Бинарные файлы
бинарные файлы C++
Бинарные файлы C++
C++ Бинарные файлы в С++
C++ Бинарные файлы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru