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

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

Войти
Регистрация
Восстановить пароль
 
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
#1

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

02.08.2016, 11:22. Просмотров 337. Ответов 14
Метки нет (Все метки)

Задание:
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
Посмотрите здесь:

Пользовательский класс Library: почему не выводятся значения полей класса? - C++
я создала класс Библиотека (название – char* автор – char* стоимость – float) У меня не выводит название, автора и стоимость. В чём моя...

Написать программу, в которой создаются и уничтожаются объекты класса "Library", определенного пользователем - C++
Здравствуйте. Помогите пожалуйста. Написать программу, в которой создаются и уничтожаются объекты класса, определенного пользователем....

Реализация класса - C++
Спроектировать и реализовать класс BigInt, позволяющий хранить целые числа в диапазоне , и производить набор основных операций с ними. ...

Реализация класса - C++
Помогите понять пожалуйста. Пример из Дейтела: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;GradeBook.h&quot; using namespace...

Реализация класса - C++
Так как только начал изучать с++, возникает вопрос: есть задание : Реализовать класс IntArray. Разработать тестовую программу для...

реализация класса - C++
Дано: класс &quot;Фильмы&quot; (название, жанр, главные роли). Вопрос: Возможно ли такой подход к реализации? class films { string...

Реализация класса С++ (плагин) - C++
Хорошего всем дня. Столкнулся с проблемой: Нужно написать плагин для существующей программы, исходного кода к ней нет. Из программы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5274 / 4594 / 1539
Регистрация: 14.04.2014
Сообщений: 18,249
02.08.2016, 12:25     Реализация класса Library #2
Ну и почему векторы у тебя вне класса Library, а не внутри?
Какую-то ссылку на пользователя у книги сделай или дополнительную структуру.
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
02.08.2016, 12:47  [ТС]     Реализация класса Library #3
Цитата Сообщение от nmcf Посмотреть сообщение
или дополнительную структуру.
А можете примерный код сгенерировать?

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

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

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

Добавлено через 2 минуты
Отдельный вопрос. Как организовать классы в удобную структуру, чтобы не вырастить монстра (код) неуклюжего
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
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
5274 / 4594 / 1539
Регистрация: 14.04.2014
Сообщений: 18,249
02.08.2016, 19:24     Реализация класса Library #7
Не так. В Transaction надо хранить номера (индексы книг и читателей в соответствующих векторах). И сами Transaction тоже в векторе должны быть.
И где поля, описывающие дату выдачи или сроки?
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
03.08.2016, 17:13  [ТС]     Реализация класса Library #8
А как установить соответствие между книгой и клиентом библиотеки. То есть, сделать так, чтобы книга стала принадлежать человеку.

Прототип примерно такой?
C++ (Qt)
1
 void set_belong_to_client(const Book &A);
если да, то как реализовать?
nmcf
5274 / 4594 / 1539
Регистрация: 14.04.2014
Сообщений: 18,249
03.08.2016, 18:24     Реализация класса Library #9
Transaction в векторе это и показывает.
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
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
5274 / 4594 / 1539
Регистрация: 14.04.2014
Сообщений: 18,249
03.08.2016, 18:50     Реализация класса Library #11
C++
1
2
3
4
  struct Transaction
  {
       int book_one, person_one; // индексы книги и читателя в первых двух векторах
  };
Выдал книгу - добавил элемент в transaction.
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
03.08.2016, 18:54  [ТС]     Реализация класса Library #12
Цитата Сообщение от nmcf Посмотреть сообщение
Выдал книгу - добавил элемент в transaction.
Это я понял, я имею ввиду, как сделать так, чтобы функция возвращала какую книгу клиент взял, если Belong() возвращает true
nmcf
5274 / 4594 / 1539
Регистрация: 14.04.2014
Сообщений: 18,249
03.08.2016, 19:02     Реализация класса Library #13
Что за Belong()? Поиск делаешь по индексу клиента, и из найденных записей берёшь индексы книг.
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
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++
Большая-пребольшая просьба, помогите, пожалуйста, с решением данной задачи. Саму задачу реализовать не сложно, но вот с использованием...

Реализация класса матрица - C++
День добрый форум! Хочу узнать ваше мнение по поводу того, как лучше реализовать класс матриц. Какую структуру лучше выбрать?...

Реализация класса и вектор - C++
Всем привет! test.cpp(главный файл) /* * @pay - зарплата сотрудника * @countEl - позиция элемента в контейнере */ #include...

Реализация класса String - C++
Доброго времени суток! Пишу свой класс String (учусь). И возник вопрос по реализации. Имеется определение класса: class String ...

Реализация класса стека - C++
Приветствую! Пробую написать класс стека, но работает не совсем так, как задумывалось. Что-то не так с получением значения // Êëàññ...


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

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

Не по теме:

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

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

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

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