这是我的第一个问题!我试图在Stroustrup的书“使用C ++的原理和实践”中解决问题。在第9章中,存在三个问题:
1)创建Class 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)创建类库。其中包括Book and Patron的载体。还包括结构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
我不了解读者,图书和图书馆之间的联系应该是什么样子,以及如何在这里解决最终问题。
如果有人可以向我解释并编写基本代码,将不胜感激。
最佳答案
首先,您需要创建一个结构事务,而不是其他类。事务几乎不会与库链接,因此您的代码必须类似于:
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()使用相同的逻辑。
如果图书馆需要知道客户是否拥有(或不拥有)一本书,则向您的客户类添加一个名为book_purchase的布尔值。当他拿书时,使用set _...更新布尔值。
希望我能帮助您!
关于c++ - 图书馆项目的架构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38737128/