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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегрузка файлового ввода-вывода http://www.cyberforum.ru/cpp-beginners/thread88711.html
Здравствуйте! У меня вопрос такой вот: для файлового ввода-вывода сколько надо функций перегружать? столько хватит friend std::ostream & operator<<(std::ostream & os, const Order & o); friend std::istream & operator>>(std::istream & is, Order & o); или обязательно нужно
C++ Последовательности пробелов заменнить символом табуляции нужно написать программу, которая, запросив у пользователя имя входного текстового файла и цену символа “HT- горизонтальный табулятор” (2...8 символьных позиций) формирует выходной текстовый файл HTFILE.OUT, в котором все допустимые последовательности пробелов заменены символом табулятора. помогите.... http://www.cyberforum.ru/cpp-beginners/thread88703.html
Не подсчитывает общее количество C++
При разборе простейшей программы возникли затруднения. Код программы: #include <iostream.h> main () { int passes = 0, failures = 0, student = 1, result; while (student <= 10) {
C++ Поиск. Последовательный поиск
Через 2 дня сдавать лабу =-O , а я до сих пор ни могу с ней справиться :umnik: ... Препад, чесное слово " дебил " :-| , дал задания, а литературы или полезной информации ни дал, сказал ищите сами, делайте сами и сами вы с усами =( :rtfm: Задание такое, ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК. В инете нашла, фрагмент кода, но вообще не могу вникнуть как его прикрутить к чему-то, что бы он работал :wall: ...
C++ Найти в строе заданое слово http://www.cyberforum.ru/cpp-beginners/thread88647.html
1)Найти в строе заданое слово. 2)Удалить слова начинающие на букву а. 3)Удаление из строки символов которые занесены в коментарии.Например:Строка начало: asd/*xxx*/dss.Строка конец:asddss. Объясните, пару задач решил остались эти а препод нехрена объяснить неможет=( говорит сам думай вот и обратился к вам.Заранее спасибо.
C++ Деление слов на слоги (С++) Нужно написать программу деления слов на слоги на С++. Пожалуйста, помогите!) подробнее

Показать сообщение отдельно
Андрей 78
Сообщений: n/a
23.01.2010, 00:45     Структура. Работа с файлом.
Создать структуру описывающую библиотеку:
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);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru