图书馆项目的架构

时间:2016-08-03 07:30:37

标签: c++ qt architecture

这是我的第一个问题!我试图在Stroustrup的书“使用C ++的原理和实践”中解决问题。在第9章中有三个问题:

1)创建类Book,它将成为Library程序软件的一部分。以下成员必须是:ISBN号,作者姓,作者姓名和注册日期。创建功能....

我已经完成了,头文件:

#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;

  /*  // declare a structure for date ?
    int year;
    int day;
    enum months{
        jan=1,feb,mar,apr,may,jun,jul,avg,sen,okt,nov,dec
    };*/
    bool given;

    int year;
    int day;
    int month;

};

struct Date{

    int year;
    int day;
   /* enum months{
        jan=1,feb,mar,apr,may,jun,jul,avg,sen,okt,nov,dec
    };*/
    int month;
    Date(int year_,int day_, int month_){
        year=year_;
        day=day_;
        month = month_;
    }


};

#endif // BOOK_H

2)为图书馆创建课程赞助人。这个班级必须有以下成员:客户名称,卡号和费用大小。创建一些函数来设置和从类中获取数据。 我也这样做了:

#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

问题出在第三个

3)创建类库。包括书和赞助人的矢量。还包括一个结构Transaction并创建它的Vector。创建功能,可以添加有关书籍和客户的数据。如果一个人拿了一本书,图书馆就必须知道,如果这个人是客户,那么该书是否属于其基础。

我在这里遇到了问题...... 这是我的尝试:

#ifndef LIBRARY_H
#define LIBRARY_H

#include <patron.h>
#include <book.h>
#include <QVector>

class Transaction{
    Book book_one;
    Patron person_one;


};

class Library
{
public:
  Library();
    QVector <Book> books;
    QVector <Patron> patrons;

};


#endif // LIBRARY_H

我不明白赞助人,书籍和图书馆之间的联系应如何以及如何解决最终问题。 如果有人可以向我解释并编写基本代码,那将非常感激。

2 个答案:

答案 0 :(得分:0)

首先,您需要创建 struct 事务而不是其他。这些交易很难与图书馆链接,因此您的代码必须如下:

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


};

有关您的图书和您的顾客的所有信息都是私密的,因此,如果您的图书馆必须管理您必须将设置功能添加到您的其他课程。 Set 函数允许其他类可以修改相关类的数据。例如,在 name_author 的书籍类中:

void Set_name_author(QString name)
{
  this.name_author=name;
}

您必须为库管理的每个变量执行此操作。

在您的库类中,您现在可以添加类似

的内容
Void manage_book(Book myBook; QString name, QString IBSR, QString surname)
{
    if(name!=NULL)
    {
      myBook.set_Name(name);
    }

    if(IBSR!=NULL)
    {
      myBook.set_IBSR(IBSR);
    }

    if(surname!=NULL)
    {
      myBook.set_Surname(Surname);
    }

}

稍后您可以像这样管理现有的图书

myLibrary.manage_book(book1,NULL,NULL,"bob");

如果您不想更改参数,请输入NULL,然后从向量中提取book1。顾客的管理也是如此。

要知道一个人是否是客户,您可以使用与 getPaid_a_Fee()相同的逻辑。

如果 library 需要知道客户是否拥有一本书,那么将一个名为 book_purchase 的布尔值添加到您的客户端类中。当他拿一本书时,使用 set _... 来更新布尔值。

希望我帮助你!

答案 1 :(得分:0)

如果您想要有关该书的信息,可以用变量 book 替换布尔值,例如“book_purchase”。默认情况下,您可以使用名为 no_book 的书籍设置变量,然后执行 set 功能,以获取新书。

类客户端

private book_purchase 

并在 book 构造函数

this.book_purchase = new book();
this.book_purchase.set_Name("no_book");

当你将一本书($ here myBook $)归属于客户时,使用类似的东西

this.set_book_purchase(mybook.get_Name());

图书馆需要知道客户是否拥有图书时:

client.get_book_purchase();