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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Андрей 78
Сообщений: n/a
#1

Структура. Работа с файлом. - C++

23.01.2010, 00:45. Просмотров 356. Ответов 0
Метки нет (Все метки)

Создать структуру описывающую библиотеку:
C++
1
2
3
4
5
6
7
8
struct library
{
    char book[30];  //название книги
    char author[30];    //автор
    int year;       //год издания
    int pages;      //число страниц
    float price;        //цена
};
Создать программу позволяющую записывать в файл и читать из файла экземпляры этой структуры средствами потокового ввода/вывода.

В данной программе создать меню, реализующее такие действия:

• Добавление записи в файл;
• Чтение из файла всех записей по указанному ключу – имени автора 1;
• Чтение из файла записи по указанному порядковому номеру1;
• Переименование существующего файла с записями.



Вот единственное, чего смог насочинять..:

C++
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#include <iostream>
#include <fstream>
#include <string.h>
#include <windows.h>
#include <io.h>
using namespace std;
 
void RussianMessage(char*message)
{
    char rmessage[256];
    CharToOem(message, rmessage);
    cout<<rmessage;
}
 
int RussianMenu(){
    RussianMessage("\nВведите 1 для добавления новой книги \n");
    RussianMessage("Введите 2 для показа библиотеки\n");
    RussianMessage("Введите 3 поиска книг по имени автора\n");
    RussianMessage("Введите 4 для поиска по порядковому номеру\n");
    RussianMessage("Введите 5 для выхода\n");
    int choice;
    cin>>choice;
    return choice;
}
class library
{
    char *book;     //название книги
    char *author;   //автор
    int year;       //год издания
    int pages;      //число страниц
    float price;    //цена
 
public:
    
    library(char *n,char *s,int a,int b,float c);  // конструктор с параметрами
    library();  // конструктор
    ~library();  // деструктор
 
public:
    void Put(); // функция ввода данных 
    void Show();  // функция показа данных
    void SaveToFile();  // функция сохранения в файл
    static void ShowFromFile(); // функция показа содержимого файла
    static void ShowNA(); // функция показа содержимого поиска по автору
};
 
library::library()   // конструктор
{
  book=0;
  author=0;
  year=0;
  pages=0;
  price=0;
}
library::library(char *n,char *s,int a,int b,float c)  // конструктор с параметрами
{
  book=new char[strlen(n)+1];
  if(!book)
  {
    RussianMessage("Ошибка при выделении памяти !!!");
    exit(1);
  }
  strcpy(book,n);
 
  author=new char[strlen(s)+1];
  if(!author)
  {
    RussianMessage("Ошибка при выделении памяти !!!");
    exit(1);
  }
  strcpy(author,s);
  year=a;
  pages=b;
  price=c;
}
library::~library()  // деструктор
{
  delete[] book;
  delete[] author;
}
// функция ввода данных 
void library::Put()
{
  char temp[1024];
  RussianMessage("\nВведите название книги:\n");
  cin>>temp;
 
  if(book)
      delete[] book;
 
  book=new char[strlen(temp)+1];
  if(!book)
  {
    RussianMessage("Ошибка при выделении памяти !!!");
    exit(1);
  }
  strcpy(book,temp); 
  RussianMessage("\nАвтор книги:\n");
  cin>>temp;
  if(author)
      delete[] author;
 
  author=new char[strlen(temp)+1];
  if(!author)
  {
    RussianMessage("Ошибка при выделении памяти !!!");
    exit(1);
  }
  strcpy(author,temp); 
  RussianMessage("\nВведите год выпуска: \n");
  cin>>year;
  RussianMessage("\nВведите количество страниц: \n");
  cin>>pages;
  RussianMessage("\nВведите цену издания: \n");
  cin>>price;
}
// функция показа данных
void library::Show()
{
    RussianMessage("\nКнига: \n");
    cout<<book;
    RussianMessage("\nАвтор: \n");
    cout<<author;
    RussianMessage("\nВыдана: \n");
    cout<<year<<"\n";
    RussianMessage("\nКоличество страниц: \n");
    cout<<pages<<"\n";
    RussianMessage("\nЦена: \n");
    cout<<price<<"\n";
}
// функция сохранения в файл
void library::SaveToFile()
{
   int size; 
   fstream f("library.txt",ios::out|ios::binary|ios::app);
   if(!f)
   {
     RussianMessage("Файл не открылся для записи !!!");
     exit(1);
   }
   size=strlen(book);
   // Записываем количество символов в названии книги
   f.write((char*)&size,sizeof(int));
   // Записываем имя
   f.write((char*)book,size*sizeof(char));
 
   size=strlen(author); 
   // Записываем количество символов в имени автора
   f.write((char*)&size,sizeof(int));
   // Записываем автора
   f.write((char*)author,size*sizeof(char));
   // Записываем год издания
   f.write((char*)&year,sizeof(year));
   // Записываем количество страниц
   f.write((char*)&pages,sizeof(pages));
   // Записываем цену издания
   f.write((char*)&price,sizeof(price));
   f.close();
}
// функция показа содержимого файла
void library::ShowFromFile()
{//открывам файл на чтение в бинарном режиме
fstream f("library.txt",ios::in|ios::binary);   
if(!f)
{
    RussianMessage("Файл не открылся для чтения !!!");
    exit(1);
}
int year, pages;
float price;
int nameSize = 0;
int authorSize = 0;
    // В цикле зачитываем содержимое файла
    while (f.read((char*)&nameSize, sizeof(int)))
    {
        char *buf = new char[nameSize + 1];
        char *buf2 = new char[nameSize + 1];
        if(!buf){RussianMessage("Ошибка при выделении памяти !!!");
            exit(1);}
        RussianMessage("\nКнига: \t");
        f.read((char*)buf, nameSize*sizeof(char));
        buf[nameSize]='\0';
        cout << buf;
        delete buf;
        RussianMessage("\nАвтор:  \t");
        f.read((char*)&authorSize, sizeof(int));
        buf2 = new char[authorSize + 1];
        if(!buf2){RussianMessage("Ошибка при выделении памяти !!!");
            exit(1);}
        f.read((char*)buf2, authorSize*sizeof(char));
        buf2[authorSize]='\0';
        cout << buf2;
        delete buf2;
        f.read((char*)&year, sizeof(year));
        RussianMessage("\nГод издания: \t");
        cout<<year;
        f.read((char*)&pages, sizeof(pages));
        RussianMessage("\nКоличество страниц: \t");
        cout<<pages;
        f.read((char*)&price, sizeof(price));
        RussianMessage("\nЦена: \t");
        cout<<price<<"\n";
    }
}
void library::ShowNA()
{
fstream f("library.txt",ios::in|ios::binary);   //открывам файл на чтение в бинарном режиме
    if(!f)
    {
        RussianMessage("Файл не открылся для чтения !!!");
        exit(1);
    }
    int year, pages;
    float price;
    int nameSize = 0;
    int authorSize = 0;         
 
    char *buf = new char[nameSize + 1];
    if(!buf){RussianMessage("Ошибка при выделении памяти !!!");
    exit(1);}
    char *buf2 = new char[authorSize + 1];
    if(!buf2){RussianMessage("Ошибка при выделении памяти !!!");
    exit(1);}
    
    char NameAuthor; 
    RussianMessage("\nВведите имя автора для поиска его книг: \n");
    cin>>NameAuthor;
        
    // Вот здесь я застрял..
        {
        RussianMessage("\nКнига: \t");
        f.read((char*)buf, nameSize*sizeof(char));
        buf[nameSize]='\0';
        cout << buf;
        delete buf;
 
        RussianMessage("\nАвтор:  \t");
        f.read((char*)&authorSize, sizeof(int));
        buf2 = new char[authorSize + 1];
            
        f.read((char*)buf2, authorSize*sizeof(char));
        buf2[authorSize]='\0';
        cout << buf2;
        delete buf2;
 
        f.read((char*)&year, sizeof(year));
        RussianMessage("\nГод издания: \t");
        cout<<year;
        f.read((char*)&pages, sizeof(pages));
        RussianMessage("\nКоличество страниц: \t");
        cout<<pages;
        f.read((char*)&price, sizeof(price));
        RussianMessage("\nЦена: \t");
        cout<<price<<"\n";
    }
 
}
 
void main()
{
    library *a;
    // Основной цикл программы 
    do{
        switch(RussianMenu())
        {
        case 1: // Добавление записи
            a=new library;
            a->Put();
            a->SaveToFile();
            delete a;
            break;
        case 2: // Показ всех записей
            library::ShowFromFile();
            break;
        case 3: // поиск записей по имени автора
            library::ShowNA();
            break;
        case 4: // поиск записей по порядковому номеру
            int q;
            RussianMessage("Введите порядковый номер книги для ее поиска \n");
            cin>>q;
            library::ShowFromFile();
            break;
        case 5://  Прощание с пользователем
            RussianMessage("До Свидания \n");
            return;
        default: // Неправильный ввод
            RussianMessage("Неверный Ввод \n");
        }
    }while(1);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2010, 00:45     Структура. Работа с файлом.
Посмотрите здесь:

Структура, работа с файлом - C++
Дан файл Assort, содержащий сведения об игрушках: указывается название игрушки, ее стоимость в рублях и возрастные границы (например,...

работа с файлом - C++
объясните, пожалуйста, что тут происходит. особенно строчку, где ofs.write(reinterpret_cast&lt;char const*&gt;(arr), n * sizeof(*arr)); ...

Работа с файлом - C++
Помогите доделать программу. Необходимо создать файл структуры: фамилия абонентов, год установки телефона, номер телефона. Программу...

Работа с файлом - C++
Доброго времени суток . Нужна помощь . Суть задания заключается в том , чтобы считать информацию из файла , записать ее в какую-то...

C++. Работа с файлом - C++
Всем привет!!Написала код!!Нужно чтобы текст из файла переводился в Морзе!По отдельности они работают!А как соединить не знаю(((Помогите...

Работа с заголовочным файлом - C++
Здравствуйте! В папке лежит несколько файлов: main.cpp, dualsimplex.h, dualsimplex.cpp Задача: в main.cpp создать объект класса...

Работа с бинарным файлом - C++
почему программа не выводит 16-ричный дамп бинарного файла? int main () { streamoff lSize; char *buffer; ifstream...

Работа с большим файлом - C++
У меня есть файл размером 150мб, не могу открыть в C++. Нашел инфу, что fread может помочь, но примеров толковых так и не смог найти. Может...

Работа с бинарным файлом - C++
Доброго времени суток всем. Помогите пожалуйста доделать задачу: Создать класс для работы с бинарным файлом. В файл записать...

Работа с BMP файлом. - C++
Помогите, с чего начать? Требуется написать программу, которая открывает файл bmp и заменяет в нём каждый 10 байт на байты из текстового...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru