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

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

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

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

02.08.2016, 11:22. Просмотров 369. Ответов 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
Как осуществлять взаимодействие?
Что нужно сделать, чтобы отдельная книга принадлежала определенному пользователю?
Можете подсказать с идеей и ее примерной реализацией..
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2016, 11:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализация класса Library (C++):

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

Реализация класса на базе класса Stack с возможностью !индексирования! - C++
Помогите пожалуйста!!! Нужно реализовать на базе класса stack другой класс с возможностью индексирования, а именно: Например 1 - й...

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

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

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

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

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

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

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

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

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

Прототип примерно такой?
C++ (Qt)
1
 void set_belong_to_client(const Book &A);
если да, то как реализовать?
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
03.08.2016, 18:24 #9
Transaction в векторе это и показывает.
0
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 460
03.08.2016, 18:38  [ТС] #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 в векторе это и показывает.
Каким образом?
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
03.08.2016, 18:50 #11
C++
1
2
3
4
  struct Transaction
  {
       int book_one, person_one; // индексы книги и читателя в первых двух векторах
  };
Выдал книгу - добавил элемент в transaction.
0
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 460
03.08.2016, 18:54  [ТС] #12
Цитата Сообщение от nmcf Посмотреть сообщение
Выдал книгу - добавил элемент в transaction.
Это я понял, я имею ввиду, как сделать так, чтобы функция возвращала какую книгу клиент взял, если Belong() возвращает true
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
03.08.2016, 19:02 #13
Что за Belong()? Поиск делаешь по индексу клиента, и из найденных записей берёшь индексы книг.
0
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 460
03.08.2016, 19:03  [ТС] #14
nmcf, ааа, теперь я Вас понял! Belong - это функция в Patron, которая возваращает true или false, в зависимости от того, есть книга на руках у человека или нет.
Все, я понял Вашу идею, спасибо)
0
Oryel
04.08.2016, 08:43     Реализация класса Library
  #15

Не по теме:

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

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

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

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

Реализация абстрактного класса - C++
Создать абстрактный базовый класс Function (функция) с виртуальными методами вычисления значения функции у = f(x) в заданной точке х и...

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

Реализация класса контейнер. - C++
Естественно, это нужно сделать без использования подключаемых библиотек. Описать шаблон-класс нужно сначало. И затем программу, которая...


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

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

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