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

Реализация класса Library - C++

Восстановить пароль Регистрация
 
Blitzor DDD
12 / 12 / 1
Регистрация: 17.08.2015
Сообщений: 439
02.08.2016, 11:22     Реализация класса Library #1
Задание:
1) Реализуйте класс Book
Кликните здесь для просмотра всего текста
, который является частью программного обеспечения библиотеки. Класс Book должен иметь члены для хранения кода ISBN, названия, фамилии и имени автора, даты регистрации авторских прав, функцию проверки выдана ли книга на руки. Перегрузите == для проверки ISBN у двух книг


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


3) Создайте класс Library. Включите в него векторы классов Book и Patron
Кликните здесь для просмотра всего текста
. Создайте функции, добавляющие записи о книгах и клиентах библиотеки, а также о состоянии книг. Если пользователь взял книгу, библиотека должна быть уверена, что пользователь ее влиент, а книга принадлежит фондам. Создайте метод, возвращающй вектор, содержащий имена всех клиентов, имеющих задолженности.


Первый два задания я вроде бы сделал. Вот хэдеры:

book.h
Кликните здесь для просмотра всего текста
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
#ifndef BOOK_H
#define BOOK_H
#include <QString>
#include <iostream>
using std::ostream;
 
class Book
{
public:
    Book();
        /*
    prevent datacheck
    generate constructor*/
 
    bool isGiven() const;
    int get_ISBN() const;
    void set_ISBN(const int &isbn_); //   ? right format ?
 
 
    void give_in_hands(const bool &given_);
    void set_surname_author(const QString &value);
    void set_name_author(const QString &value);
    QString get_surname_author() const;
    QString get_name_author()const;
 
    void set_date(const struct Date a);
 
    int get_date(int y);
 
    bool operator==( const Book& b);
 //   ostream& operator<<(ostream& os);
 
    enum Genre{
        novel,ski,horror,comedy
    };
    Genre get_genre( );
 
 
private:
 
    int ISBN;
    QString surname_author;
    QString name_author;
 
 
    int year;
    int day;
 
    bool given;
 
    int year;
    int day;
    int month;
 
};
 
struct Date{
 
    int year;
    int day;
 
    int month;
    Date(int year_,int day_, int month_){
        year=year_;
        day=day_;
        month = month_;
    }
 
 
};
 
#endif // BOOK_H


patron.h
Кликните здесь для просмотра всего текста
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
#ifndef PATRON_H
#define PATRON_H
 
#include <QString>
 
class Patron
{
    QString name;
    int cardNumber;
    int fee;
    bool Paid_a_fee;
 
public:
    Patron();
    
    //did a person pay a fee or not
    void set_Pay_or_not(const bool& a); 
    bool did_pay_or_not() const;
 
    int getCardNumber() const;
    void setCardNumber(int value);
    int getFee() const;
    void setFee(int value);
};
 
#endif // PATRON_H


А вот с классом Library не знаю, что делать:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef LIBRARY_H
#define LIBRARY_H
 
#include <patron.h>
#include <book.h>
#include <QVector>
 
 
QVector <Book> books;
QVector <Patron> patrons;
class Library
{
 
 
public:
    Library();
 
};
 
 
#endif // LIBRARY_H
Как осуществлять взаимодействие?
Что нужно сделать, чтобы отдельная книга принадлежала определенному пользователю?
Можете подсказать с идеей и ее примерной реализацией..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2016, 11:22     Реализация класса Library
Посмотрите здесь:

C++ Проектирование и реализация класса
C++ Реализация класса стэк
C++ Реализация класса
Реализация класса C++
C++ Реализация класса String
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4278 / 3709 / 1247
Регистрация: 14.04.2014
Сообщений: 14,503
02.08.2016, 12:25     Реализация класса Library #2
Ну и почему векторы у тебя вне класса Library, а не внутри?
Какую-то ссылку на пользователя у книги сделай или дополнительную структуру.
Blitzor DDD
12 / 12 / 1
Регистрация: 17.08.2015
Сообщений: 439
02.08.2016, 12:47  [ТС]     Реализация класса Library #3
Цитата Сообщение от nmcf Посмотреть сообщение
или дополнительную структуру.
А можете примерный код сгенерировать?

Добавлено через 12 минут
Или скажите, если несложно, что должно быть в Library, а что в новой структуре
nmcf
4278 / 3709 / 1247
Регистрация: 14.04.2014
Сообщений: 14,503
02.08.2016, 12:58     Реализация класса Library #4
Ещё какой-то класс придумай для информации о выданных книгах. Какая книга, кому, какие сроки.
Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 80
02.08.2016, 14:29     Реализация класса Library #5
Не лучше ли для данной задачи хранить книги и т.п. не в векторе, а в Списке???
Часто придется удалять или добавлять в середину, сортировать и т.п.

Можно указатель добавить в структуру, как советовали выше, чтобы знать у какого человека книга, если указатель 0 - значит книга не у кого , если у кого-то на руках -то указатель на члена...

Или ввести класс Карточка....в ней указываются последние пользователи, которые брали книгу, где сей час книга (библиотека или на руках), ее состояние (удв, утилизировать, хорошее), сроки возврата, если брали дата когда брали.

Добавлено через 2 минуты
Отдельный вопрос. Как организовать классы в удобную структуру, чтобы не вырастить монстра (код) неуклюжего
Blitzor DDD
12 / 12 / 1
Регистрация: 17.08.2015
Сообщений: 439
02.08.2016, 18:51  [ТС]     Реализация класса Library #6
nmcf,
Цитата Сообщение от nmcf Посмотреть сообщение
Ещё какой-то класс придумай для информации о выданных книгах. Какая книга, кому, какие сроки.
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
#ifndef LIBRARY_H
#define LIBRARY_H
 
#include <patron.h>
#include <book.h>
#include <QVector>
 
class Transaction{
    Book book_one;
    Patron person_one;
 
    void set_book_to_person(const Book &a, const Patron &b){
        //?
    }
 
    void set_expiring_time_to_book(const Book &a, const Date &d){
 
    }
 
};
 
class Library
{
public:
 
  Library();
    QVector <Book> books;
    QVector <Patron> patrons;
 
};
#endif // LIBRARY_H
Как-то так? Но а дальше то какая реализация и взаимодействие? Я спрашивал именно про это

вот конструктор библиотеки:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "library.h"
 
Library::Library()
{
    // Three books in QVector
    Book kniga1,kniga2,kniga3;
    books.push_back(kniga1);
    books.push_back(kniga2);
    books.push_back(kniga3);
 
    //Three persons in QVector
    Patron chel1,chel2,chel3;
    patrons.push_back(chel1);
    patrons.push_back(chel2);
    patrons.push_back(chel3);
}
Идею работы не могу схватить

Цитата Сообщение от Oryel Посмотреть сообщение
Не лучше ли для данной задачи хранить книги и т.п. не в векторе, а в Списке???
может быть, но я просто хочу идею понять, как в самом простом случае реализовать.
nmcf
4278 / 3709 / 1247
Регистрация: 14.04.2014
Сообщений: 14,503
02.08.2016, 19:24     Реализация класса Library #7
Не так. В Transaction надо хранить номера (индексы книг и читателей в соответствующих векторах). И сами Transaction тоже в векторе должны быть.
И где поля, описывающие дату выдачи или сроки?
Blitzor DDD
12 / 12 / 1
Регистрация: 17.08.2015
Сообщений: 439
03.08.2016, 17:13  [ТС]     Реализация класса Library #8
А как установить соответствие между книгой и клиентом библиотеки. То есть, сделать так, чтобы книга стала принадлежать человеку.

Прототип примерно такой?
C++ (Qt)
1
 void set_belong_to_client(const Book &A);
если да, то как реализовать?
nmcf
4278 / 3709 / 1247
Регистрация: 14.04.2014
Сообщений: 14,503
03.08.2016, 18:24     Реализация класса Library #9
Transaction в векторе это и показывает.
Blitzor DDD
12 / 12 / 1
Регистрация: 17.08.2015
Сообщений: 439
03.08.2016, 18:38  [ТС]     Реализация класса Library #10
Вроде так?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Library
{
public:
  Library();
  struct Transaction
   {
   Book book_one;
   Patron person_one;
   };
 
    QVector <Book> books;
    QVector <Patron> patrons;
 
    QVector <Transaction> transaction; // here your transaction vector
 
};
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     Library tran_obj;
    Library::Transaction a;
    a.book_one.set_ISBN(12345);
    a.book_one.give_in_hands(true);
 
    tran_obj.books.push_back(a.book_one);
 
    a.person_one.setLastname("Kolnen");
    a.person_one.setCardNumber(332);
    a.person_one.setFee(100);
    a.person_one.set_Pay_or_not(false);
    tran_obj.patrons.push_back(a.person_one);
 
 
    a.person_one.setLastname("Umov");
    a.person_one.setCardNumber(312);
    a.person_one.setFee(1000);
    a.person_one.set_Pay_or_not(true);
    tran_obj.patrons.push_back(a.person_one);
 
    int ssss=tran_obj.patrons.size();
    qDebug() <<ssss<<endl;
Цитата Сообщение от nmcf Посмотреть сообщение
Transaction в векторе это и показывает.
Каким образом?
nmcf
4278 / 3709 / 1247
Регистрация: 14.04.2014
Сообщений: 14,503
03.08.2016, 18:50     Реализация класса Library #11
C++
1
2
3
4
  struct Transaction
  {
       int book_one, person_one; // индексы книги и читателя в первых двух векторах
  };
Выдал книгу - добавил элемент в transaction.
Blitzor DDD
12 / 12 / 1
Регистрация: 17.08.2015
Сообщений: 439
03.08.2016, 18:54  [ТС]     Реализация класса Library #12
Цитата Сообщение от nmcf Посмотреть сообщение
Выдал книгу - добавил элемент в transaction.
Это я понял, я имею ввиду, как сделать так, чтобы функция возвращала какую книгу клиент взял, если Belong() возвращает true
nmcf
4278 / 3709 / 1247
Регистрация: 14.04.2014
Сообщений: 14,503
03.08.2016, 19:02     Реализация класса Library #13
Что за Belong()? Поиск делаешь по индексу клиента, и из найденных записей берёшь индексы книг.
Blitzor DDD
12 / 12 / 1
Регистрация: 17.08.2015
Сообщений: 439
03.08.2016, 19:03  [ТС]     Реализация класса Library #14
nmcf, ааа, теперь я Вас понял! Belong - это функция в Patron, которая возваращает true или false, в зависимости от того, есть книга на руках у человека или нет.
Все, я понял Вашу идею, спасибо)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2016, 08:43     Реализация класса Library
Еще ссылки по теме:

C++ Реализация класса С++ (плагин)
Написать программу, в которой создаются и уничтожаются объекты класса "Library", определенного пользователем C++
Реализация класса на базе класса Stack с возможностью !индексирования! C++

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

Или воспользуйтесь поиском по форуму:
Oryel
04.08.2016, 08:43     Реализация класса Library
  #15

Не по теме:

мне из любопытства интересно. А нельзя было, к примеру, в классе бук сделать композицию класса карточка ( т.е. вести поле карточка и метод получения этого поля), аналогично в классе карточка ввести поле (указатель на Patron), который указывает на человека, у которого сей час книга на руках.? И был бы ли такой вариант боле приемлемый , чем реализованный выше...и есть ли вариант более оптимальный?

ЗЫ. данный вопрос не связан с вопросами ТС. Просто интересно, т.к. у меня проблемы с составлениями архитектуры

Yandex
Объявления
04.08.2016, 08:43     Реализация класса Library
Ответ Создать тему
Опции темы

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