Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/91: Рейтинг темы: голосов - 91, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38

Книжная библиотека с читателями с++

22.10.2016, 18:45. Показов 20244. Ответов 75
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди, заранее благодарю за потраченное на меня время.
Необходимо написать программу, так называемую "библиотеку". Нужно:
1. добавлять/удалять читателей(фамилия)
2. добавлять/удалять книги(автор, название)
3. нужно чтобы эти данные хранились в файлах типа txt
4. нужно реализовать так чтобы например: читатель взял книгу -> книга закрепляется за ним
5. необходимо чтобы была проверка, если нет читателя с данной фамилией, то выдает: читателя с данной фамилией нет.
Искал по форуму подобное, ничего похоже найти не удалось. Есть темы про библиотеки, но там не совсем то что надо.
ЗАРАНЕЕ ОГРОМНОЕ СПАСИБО ЗА ВАШУ ПОМОЩЬ!!!!!
не смотрите на то что закоменчено....
Вот то что у меня пока есть... Помогите доработать код
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
#include <iostream> 
#include <fstream>
#include <string>
 
 
using namespace std;
 
class Tlibrary  // класс читателей библиотеки 
{public:
    string sname;// Фамилия
    string rabota;// Работа
    string dolj;// Должность
    string datav; // дата выдачи
    string datap; // дата приема в библиотеку
};
class TBooks
{public:
    string nameb;
    string author;
};
 
Tlibrary* ReadFile(int& size);
TBooks* ReadFile(int& size);
 
int main()
{
        //setlocale(LC_ALL, "RUS");
        int size;
        Tlibrary* ab;
        if (!(ab = ReadFile(size)))
        {
            cout << /*"Ошибка открытия файла!"*/"Error opening file" << endl;
            system("pause");
            return 0;
        }
        
        string sur; // переменная для ввода фамилии
        bool flag = false;  // флаги совпадений в поиске
        char ch;
        do
        {
 
            cout << /*"Введите фамилию для поиска  "*/"Enter a name for your search:" << endl;
            getline(cin, sur);
            for (int j = 0; j < size; j++)  // поиск
                if (sur == ab[j].sname)
                {
                    cout << "Surname:"<<' '<< sur << endl;
                    cout << "Place of work:"<<' '<< ab[j].rabota << endl;
                    cout << "Profession:"<<' '<< ab[j].dolj<< endl;
                    cout << "Date of issue of the books:"<<' '<< ab[j].datav << endl;
                    cout << "Book return date:"<<' ' << ab[j].datap << endl;
                    flag = true;   // если найдено ставим флаг тру
                }
            if (flag == false)
            {
                cout << /*"Читателя с такой фамилией нет в списке "*/"Reader with a name not on the list!!" << endl << endl;
            }
            flag = false;
            
            cout << /*"Продолжить? (y/n): "*/"Continue? (y / n):";
            
            (cin >> ch).get();
 
        } while (ch == 'y');
        
        delete [] ab;
        cout << /*"Выход!"*/"Exit" << endl;
        system("pause");
}
 
 
 
Tlibrary* ReadFile(int& size)
{
    ifstream F("library.txt");
        if (!F)
            return 0;
    
    F >> size;   
    Tlibrary* ab = new Tlibrary[size];
    
    string temp;
    for (int i = 0; i < size; ++i)
    {
        getline(F, temp, '.');
        F >> ab[i].sname; 
        F >> ab[i].rabota;
        F >> ab[i].dolj;
        F >> ab[i].datav;
        F >> ab[i].datap;
        F.get();
    }
    F.close();
   
    return ab;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2016, 18:45
Ответы с готовыми решениями:

Структуры. Книжная библиотека
Мне нужно создать структуру и выполнить индивидуальные задания для этой структуры. Звучат они так: По требованию пользователя...

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

Консольная "Книжная библиотека"
Помогите, пожалуйста, доделать программу. Суть - книжная библиотека с функциями добавления читателей, книг и последующим поиском по...

75
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 18:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Andy_Shish Посмотреть сообщение
что вот тут
Синглтон!
https://ru.wikipedia.org/wiki/... 0%B8%D1%8F)
В общем-то тут просто класс, где все методы статические, то есть к ним можно обращаться напрямую, не создавая объекта класса.
Цитата Сообщение от Andy_Shish Посмотреть сообщение
set<T> cont
Если это не понятно, то тут будет шаблонная функция, которая принимает параметр T, про шаблонные функции можно почитать тут:
http://en.cppreference.com/w/c... n_template
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 19:15  [ТС]
GbaLog-, про шаблонные понятно все)

Добавлено через 56 секунд
GbaLog-, проглотил и оставшееся.. теперь все понятно, разобрался для чего он нужен и что он такое!!

Добавлено через 37 минут
GbaLog-, у вас получается что-нибудь??

Добавлено через 25 минут
GbaLog-, пожалуйста, если вам не сложно, доделайте то что мы начали, я очень хочу разобраться...
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 19:42
Andy_Shish,
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
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
#include <vector>
#include <set>
/////////////////////////////////////////////////////////////////////////////////////////
using std::string;
using std::set;
 
#define find( cont, expr ) std::find( cont.begin(), cont.end(), expr )
/////////////////////////////////////////////////////////////////////////////////////////
class Book
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Book( string name_book, string name_author )
            :
            name( name_book ),
            author( name_author )
    {}
    //-----------------------------------------------------------------------------------
    const string& get_name() const
    {
        return name;
    }
    //-----------------------------------------------------------------------------------
    const string& get_author() const
    {
        return author;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    string name;
    string author;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
bool operator<( const Book& b1, const Book& b2 )
{
    return b1.get_name() < b2.get_name()
        || b1.get_author() < b2.get_author();
}
bool operator==( const Book& b1, const Book& b2 )
{
    return b1.get_name() == b2.get_name()
        && b1.get_author() == b2.get_author();
}
bool operator==( const Book& b1, const string& name_book)
{
    return b1.get_name() == name_book;
}
/////////////////////////////////////////////////////////////////////////////////////////
class BDbook
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Book get_book( const string& name_book )
    {
        auto book = find( books, name_book );
        
        if( book == books.end() )
        {
            std::cout
                << "Book "
                << name_book
                << " not found"
                << std::endl;
        }
        
        auto ret = *book;
        
        books.erase( book );
        
        return ret;
    }
    //-----------------------------------------------------------------------------------
    void add_book( const Book& book )
    {
        books.emplace( book );
    }
    //-----------------------------------------------------------------------------------
    bool contain( const string& name_book )
    {
        return find( books, name_book ) != books.end();
    }
    //-----------------------------------------------------------------------------------
    set< Book >& get_books_ref()
    {
        return books;
    }
    //-----------------------------------------------------------------------------------
    const set< Book >& get_books_cref() const
    {
        return books;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    set< Book > books;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
class Reader
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Reader( const string& name )
            :
            name( name )
    {}
    //-----------------------------------------------------------------------------------
    const set< Book >& get_books() const
    {
        return taken_books;
    }
    //-----------------------------------------------------------------------------------
    void add_book( const Book& book )
    {
        taken_books.emplace( book );
    }
    //-----------------------------------------------------------------------------------
    Book get_book( const string& name_book )
    {
        auto book = find( taken_books, name_book );
        
        if( book == taken_books.end() )
        {
            std::cout
                << "Book "
                << name_book
                << " not found!";
        }
        
        auto ret = *book;
        
        taken_books.erase( book );
        
        return ret;
    }
    //-----------------------------------------------------------------------------------
    bool contain( const string& name_book )
    {
        return find( taken_books, name_book ) != taken_books.end();
    }
    //-----------------------------------------------------------------------------------
    const string& get_name() const
    {
        return name;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    set< Book > taken_books;
    string      name;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
bool operator==( const Reader& r1, const Reader& r2 )
{
    return r1.get_name() == r2.get_name();
}
/////////////////////////////////////////////////////////////////////////////////////////
class IOfile
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    IOfile() = delete;
    ~IOfile() = delete;
    //-----------------------------------------------------------------------------------
    static void load_readers( std::vector< Reader >& readers, const string& name_file )
    {
        std::ifstream f_in( name_file );
        
        if( !f_in.is_open() )
        {
            throw std::runtime_error( "Can't open file: " + name_file );
        }
        
        string reader;
        while( std::getline( f_in, reader ) )
        {
            readers.emplace_back( Reader{ reader } );
        }
    }
    //-----------------------------------------------------------------------------------
    static void load_books( set< Book >& books, const string& name_file )
    {
        std::ifstream f_in( name_file );
        
        if( !f_in.is_open() )
        {
            throw std::runtime_error( "Can't open file: " + name_file );
        }
        
        string name;
        string author;
        while( !f_in.eof() )
        {
            std::getline( f_in, name );
            
            if( f_in.eof() )
            {
                throw std::runtime_error( "File eof after, then read all books" );
            }
            
            std::getline( f_in, author );
            
            books.emplace( Book{ name, author } );
        }
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
enum e_act
{
    e_none,
    e_give,
    e_take,
    e_register
};
/////////////////////////////////////////////////////////////////////////////////////////
class Library
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Library( const string& name_file_books, const string& name_file_readers )
    {
        IOfile::load_books( BD.get_books_ref(), name_file_books );
        IOfile::load_readers( readers, name_file_readers );
    }
    //-----------------------------------------------------------------------------------
    void request( Reader& reader, e_act act, string name_book = {} )
    {
        switch( act )
        {
            case e_give:
                {
                    if( name_book.size() == 0 )
                    {
                        return;
                    }
                    if( BD.contain( name_book ) && is_registered( reader ) )
                    {
                        reader.add_book( BD.get_book( name_book ) );
                    }
                }
                break;
            case e_take:
                {
                    if( name_book.size() == 0 )
                    {
                        return;
                    }
                    BD.add_book( reader.get_book( name_book ) );
                }
                break;
            default:
                break;
        };
    }
    //-----------------------------------------------------------------------------------
    void request( const Reader& reader, e_act act )
    {
        switch( act )
        {
            case e_register:
                readers.emplace_back( reader );
                break;
            default:
                break;
        };
    }
    //-----------------------------------------------------------------------------------
    const set< Book >& get_books() const
    {
        return BD.get_books_cref();
    }
    //-----------------------------------------------------------------------------------
    const std::vector< Reader >& get_readers() const
    {
        return readers;
    }
    //-----------------------------------------------------------------------------------
    void add_book( const string& name_book, const string name_author )
    {
        BD.add_book( { name_book, name_author } );
    }
    //-----------------------------------------------------------------------------------
    void add_book( const Book& book )
    {
        BD.add_book( book );
    }
    //-----------------------------------------------------------------------------------
    void remove_book( const string& name_book )
    {
        auto ref = BD.get_books_ref();
        ref.erase( find( ref, name_book ) );
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    bool is_registered( const Reader& reader )
    {
        return std::find_if( 
                                readers.begin(),
                                readers.end(),
                                [&reader] 
                                ( const Reader& rhs ) 
                                { 
                                    return rhs == reader;
                                }
                           )
            != readers.end();
    }
    //-----------------------------------------------------------------------------------
    BDbook BD;
    std::vector< Reader > readers;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    Library lib{ "file.txt", "file.txt" };
    
    for( const auto& it : lib.get_books() )
    {
        std::cout
            << it.get_name()
            << "/"
            << it.get_author()
            << std::endl
            << std::endl;
    }
    
    for( const auto& it : lib.get_readers() )
    {
        std::cout
            << it.get_name()
            << std::endl;
    }
}
Code
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
Book
    public:
        get_name()
        get_author()
    private
        name
        author
        
operator<( Book, Book )
operator==( Book, Book )
operator==( Book, string )
 
BDbook
    public:
        get_book( string name_book )
        add_book( Book book )
        contain( string name_book )
        get_books_ref()
    private:
        set<Book> books( set - множество )
        
Reader
    public:
        get_books()
        add_book( Book book )
        get_book_by_name( string name_book )
        get_book_by_author( string name_author )
        contain( string name_book )
        get_name()
    private:
        set<Book> taken_books
        string name
        
operator==( Reader, Reader )
        
IOfile
    public:
        static load_readers( set<Reader> readers, string name_file )
        static load_books( set<Book> books, string name_file )
        
enum e_act
{
    e_none,     // ничего не делать
    e_give,     // дать книгу читателю
    e_take,     // взять книгу у читателя
    e_register
}
        
Library
    public:
        request( Reader, e_act, string = "" )
        request( Reader, e_act ); // для регистрации
        get_books()
        get_readers()
        add_book( string name_book, string name_author )
        add_book( Book book )
        remove_book( string name_book )
    private:
        is_registered( Reader )
        BDbook BD
        vector<Reader> readers
Вроде работает.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 20:06
Вот для удобства пару методов добавил.
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
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
#include <vector>
#include <set>
/////////////////////////////////////////////////////////////////////////////////////////
using std::string;
using std::set;
 
#define find( cont, expr ) std::find( cont.begin(), cont.end(), expr )
/////////////////////////////////////////////////////////////////////////////////////////
class Book
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Book()
            :
            name( "" ),
            author( "" )
    {}
    //-----------------------------------------------------------------------------------
    Book( string name_book, string name_author )
            :
            name( name_book ),
            author( name_author )
    {}
    //-----------------------------------------------------------------------------------
    const string& get_name() const
    {
        return name;
    }
    //-----------------------------------------------------------------------------------
    const string& get_author() const
    {
        return author;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    string name;
    string author;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
bool operator<( const Book& b1, const Book& b2 )
{
    return b1.get_name() < b2.get_name()
        || b1.get_author() < b2.get_author();
}
bool operator==( const Book& b1, const Book& b2 )
{
    return b1.get_name() == b2.get_name()
        && b1.get_author() == b2.get_author();
}
bool operator==( const Book& b1, const string& name_book)
{
    return b1.get_name() == name_book;
}
/////////////////////////////////////////////////////////////////////////////////////////
class BDbook
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Book get_book( const string& name_book )
    {
        auto book = find( books, name_book );
        
        if( book == books.end() )
        {
            std::cout
                << "Book "
                << name_book
                << " not found"
                << std::endl;
        }
        
        auto ret = *book;
        
        books.erase( book );
        
        return ret;
    }
    //-----------------------------------------------------------------------------------
    void add_book( const Book& book )
    {
        books.emplace( book );
    }
    //-----------------------------------------------------------------------------------
    bool contain( const string& name_book )
    {
        return find( books, name_book ) != books.end();
    }
    //-----------------------------------------------------------------------------------
    set< Book >& get_books_ref()
    {
        return books;
    }
    //-----------------------------------------------------------------------------------
    const set< Book >& get_books_cref() const
    {
        return books;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    set< Book > books;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
class Reader
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Reader( const string& name )
            :
            name( name )
    {}
    //-----------------------------------------------------------------------------------
    const set< Book >& get_books() const
    {
        return taken_books;
    }
    //-----------------------------------------------------------------------------------
    const Book& get_book_cref( const string& name_book ) const
    {
        auto ret = find( taken_books, name_book );
        
        if( ret == taken_books.end() )
        {
            std::cout
                << "Book "
                << name_book
                << " not found!";
            return *taken_books.begin();
        }
        
        return *ret;
    }
    //-----------------------------------------------------------------------------------
    void add_book( const Book& book )
    {
        taken_books.emplace( book );
    }
    //-----------------------------------------------------------------------------------
    Book get_book( const string& name_book )
    {
        auto book = find( taken_books, name_book );
        
        if( book == taken_books.end() )
        {
            std::cout
                << "Book "
                << name_book
                << " not found!";
            return {};
        }
        
        auto ret = *book;
        
        taken_books.erase( book );
        
        return ret;
    }
    //-----------------------------------------------------------------------------------
    bool contain( const string& name_book )
    {
        return find( taken_books, name_book ) != taken_books.end();
    }
    //-----------------------------------------------------------------------------------
    const string& get_name() const
    {
        return name;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    set< Book > taken_books;
    string      name;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
bool operator==( const Reader& r1, const Reader& r2 )
{
    return r1.get_name() == r2.get_name();
}
bool operator==( const Reader& reader, const string& name )
{
    return reader.get_name() == name;
}
/////////////////////////////////////////////////////////////////////////////////////////
class IOfile
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    IOfile() = delete;
    ~IOfile() = delete;
    //-----------------------------------------------------------------------------------
    static void load_readers( std::vector< Reader >& readers, const string& name_file )
    {
        std::ifstream f_in( name_file );
        
        if( !f_in.is_open() )
        {
            throw std::runtime_error( "Can't open file: " + name_file );
        }
        
        string reader;
        while( std::getline( f_in, reader ) )
        {
            readers.emplace_back( Reader{ reader } );
        }
    }
    //-----------------------------------------------------------------------------------
    static void load_books( set< Book >& books, const string& name_file )
    {
        std::ifstream f_in( name_file );
        
        if( !f_in.is_open() )
        {
            throw std::runtime_error( "Can't open file: " + name_file );
        }
        
        string name;
        string author;
        while( !f_in.eof() )
        {
            std::getline( f_in, name );
            
            if( f_in.eof() )
            {
                throw std::runtime_error( "File eof after, then read all books" );
            }
            
            std::getline( f_in, author );
            
            books.emplace( Book{ name, author } );
        }
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
enum e_act
{
    e_none,
    e_give,
    e_take,
    e_register
};
/////////////////////////////////////////////////////////////////////////////////////////
class Library
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Library( const string& name_file_books, const string& name_file_readers )
    {
        IOfile::load_books( BD.get_books_ref(), name_file_books );
        IOfile::load_readers( readers, name_file_readers );
    }
    //-----------------------------------------------------------------------------------
    void request( const string& name_reader, e_act act, string name_book = {} )
    {
        auto reader = find( readers, name_reader );
        
        if( reader != readers.end() )
        {
            request( *reader, act, name_book );
        }
    }
    //-----------------------------------------------------------------------------------
    void request( Reader& reader, e_act act, string name_book = {} )
    {
        switch( act )
        {
            case e_give:
                {
                    if( name_book.size() == 0 )
                    {
                        return;
                    }
                    if( BD.contain( name_book ) && is_registered( reader ) )
                    {
                        reader.add_book( BD.get_book( name_book ) );
                    }
                }
                break;
            case e_take:
                {
                    if( name_book.size() == 0 )
                    {
                        return;
                    }
                    BD.add_book( reader.get_book( name_book ) );
                }
                break;
            default:
                break;
        };
    }
    //-----------------------------------------------------------------------------------
    void request( const Reader& reader, e_act act )
    {
        switch( act )
        {
            case e_register:
                readers.emplace_back( reader );
                break;
            default:
                break;
        };
    }
    //-----------------------------------------------------------------------------------
    const set< Book >& get_books() const
    {
        return BD.get_books_cref();
    }
    //-----------------------------------------------------------------------------------
    const std::vector< Reader >& get_readers() const
    {
        return readers;
    }
    //-----------------------------------------------------------------------------------
    const Reader& get_reader( const string& name_reader ) const
    {
        auto ret = find( readers, name_reader );
        
        if( ret == readers.end() )
        {
            std::cout
                << "Reader "
                << name_reader
                << " not found!"
                << std::endl;
            return *readers.begin();
        }
        
        return *ret;
    }
    //-----------------------------------------------------------------------------------
    void add_book( const string& name_book, const string name_author )
    {
        BD.add_book( { name_book, name_author } );
    }
    //-----------------------------------------------------------------------------------
    void add_book( const Book& book )
    {
        BD.add_book( book );
    }
    //-----------------------------------------------------------------------------------
    void remove_book( const string& name_book )
    {
        auto ref = BD.get_books_ref();
        ref.erase( find( ref, name_book ) );
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    bool is_registered( const Reader& reader )
    {
        return std::find_if( 
                                readers.begin(),
                                readers.end(),
                                [&reader] 
                                ( const Reader& rhs ) 
                                { 
                                    return rhs == reader;
                                }
                           )
            != readers.end();
    }
    //-----------------------------------------------------------------------------------
    BDbook BD;
    std::vector< Reader > readers;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
void print_books( const Library& lib )
{
    std::cout << "Library: " << std::endl;
    for( const auto& it : lib.get_books() )
    {
        std::cout
            << '\t'
            << it.get_name()
            << "/"
            << it.get_author()
            << std::endl;
    }
    std::cout << std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
void print_readers( const Library& lib )
{
    std::cout << "Readers:" << std::endl;
    for( const auto& it : lib.get_readers() )
    {
        std::cout
            << '\t'
            << it.get_name()
            << std::endl;
    }
    std::cout << std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    Library lib{ "file.txt", "file.txt" };
    
    print_books( lib );
    print_readers( lib );
    
    lib.request( "Steve McConnell", e_give, "Code complete" );
    
    print_books( lib );
    
    for( const auto& it : lib.get_reader( "Steve McConnell" ).get_books() )
    {
        std::cout
            << it.get_name()
            << "/"
            << it.get_author()
            << std::endl;
    }
}
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 21:51  [ТС]
GbaLog-, сейчас все посмотрю... Только приехал на квартиру из другого города

Добавлено через 9 минут
GbaLog-, в какой IDE вы работаете и со стандартом какого года??
У меня опять куча ошибок
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 21:54
Цитата Сообщение от Andy_Shish Посмотреть сообщение
в какой IDE вы работаете
Ни в какой.
Цитата Сообщение от Andy_Shish Посмотреть сообщение
со стандартом какого года??
2011. Флаг компилятора -std=c++11 должен быть установлен, выше gru74ik показывал, как это сделать.

И ещё надо подключить <stdexcept>, но это уже в заголовках.
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 22:01  [ТС]
GbaLog-, все так и было, все равно куча ошибок
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 22:07
Цитата Сообщение от Andy_Shish Посмотреть сообщение
все так и было, все равно куча ошибок
Показывайте.
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 22:12  [ТС]
GbaLog-, вот сначала
Миниатюры
Книжная библиотека с читателями с++  
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 22:16
Цитата Сообщение от Andy_Shish Посмотреть сообщение
вот сначала
А вы точно сделали всё так, как показано в этом посте?
Книжная библиотека с читателями с++
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 22:22  [ТС]
GbaLog-, вот вообще беда с код блокс, я сейчас в geany собирал
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 22:22
Andy_Shish, Какая версия компилятора?
Чтобы узнать, запустите cmd, там наберите: g++ --version
Если пишет, что не найдено g++, то идите в папку с компилятором и ищите там g++.exe, потом скопируйте этот путь и в cmd пропишите так: cd "(ПКМ->Вставить)" и потом пишите g++ --version.
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 22:25  [ТС]
GbaLog-, вот что
Миниатюры
Книжная библиотека с читателями с++  
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 22:30
Цитата Сообщение от Andy_Shish Посмотреть сообщение
вот что
Странно, гугл говорит, что этот компилятор поддерживает с++11, значит Вы что-то не так делаете, флаг не включаете.
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 22:35  [ТС]
GbaLog-, Сейчас скрин сделаю
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 22:37  [ТС]
GbaLog-,
Миниатюры
Книжная библиотека с читателями с++  
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
23.10.2016, 22:40
Andy_Shish, Ключевой мой аргумент - "но у меня же собирается!".
Да и на rextester'e тоже, а там ещё старее компилятор!
http://rextester.com/MKFFZ70031

Вы этот флаг не модифицировали?
А в toolchain executables точно в тому компилятору подключен C::B?
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 22:45  [ТС]
GbaLog-,
Миниатюры
Книжная библиотека с читателями с++  
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 23:13  [ТС]
GbaLog-, я настроил короче все собрало.
Но прога падает
ищет файл, прога читает из него что-то и не смотрит конец или нет
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 38
23.10.2016, 23:38  [ТС]
GbaLog-, вот что пишет:
пожалуйста помоги добить это уже.......
Миниатюры
Книжная библиотека с читателями с++  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2016, 23:38

База данных "Книжная библиотека"
Здравствуйте. Создаю базу данных &quot;Книжная библиотека&quot;. При попытке запустить выдаёт ошибки: Unit1.pas(46): Undeclared identifier:...

Книжная печать
Всем привет! Как напечатать на принтере документ книжным и чтоб он был маленькой книжкой типа есть же книжки шпаргалки мне бы также...

Как в word у одной страницы документа сделать альбомную ориентацию, чтобы у всех остальных оставалась книжная?
Как в ворде у одной страницы документа сделать альбомную ориентацию, чтобы у всех остальных оставалась книжная?

Программа "Книжная полка"
Помогите пожалуйста с написанием программы. В основном всё получилось, осталось только удаление Программа “Книжная полка”. 1. Класс...

Дорожная библиотека + основная библиотека процессов
Доброго времени! Пытаюсь совместить в одной модели дорожную библиотеку и библиотеку моделирования процессов следующим образом. По дороге...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru