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

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

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

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

23.01.2010, 00:45. Просмотров 362. Ответов 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++):

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

Работа с файлом - C++
Файл не открывается для чтения..... программа создает алфавит для исходного текста....помогите пожалуйста..:( Уже все перепробовала.... ...

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

Работа с файлом в С++ - C++
Всем привет! Я никогда не работал с С++, но возникла необходимость чтения-записи в файл на С++. А если еще точнее Embedded C++. Не...

работа с файлом - C++
Как найти определённое слово в массиве? такого вида 217.118.79.33 dan HTTP GET http://google.com/

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2010, 00:45
Привет! Вот еще темы с ответами:

Работа с файлом - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; struct STUDENT // структура STUDENT { string name; ...

Работа с файлом - C++
Программа для записи/прочитки текстовых файлов. Почему когда ввожу строку, в файл сохраняется только часть строки(до первого пробела)? ...

Работа с файлом - C++
Поясню: записываю файл из двумерного целочисленного вектора вот такой строкой: fprintf(f2, &quot;%c&quot;, dinom); да да именно со спецификатором...

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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