创建一个 Library类,包含一个 Book向量和一个Patron向量。定义一个名为Transaction 的 struet,包含一个Book对象、一个Patron对象和一个本章中定义的Date对象,表示借阅记录。在 Library 类中定义一个Transaction向量。定义向图书馆添加图书、添加读者以及借出书籍的函数。当一个读者借出一本书时,保证Library对象中有此读者和这本书的记录,否则报告错误。然后检查读者是否欠费,如果欠费就报告一个错误,否则创建一个Transaction对象,将其放人Transaction向量中。定义一个返回包含所有欠费读者姓名的向量的函数。多文件程序,按文件给出代码,用户可以手动添加信息
时间: 2024-02-13 11:01:29 浏览: 7
以下是Library类的头文件library.h:
```c++
#include <vector>
#include <string>
#include "book.h"
#include "patron.h"
#include "date.h"
class Library {
public:
void add_book(Book& book);
void add_patron(Patron& patron);
void check_out_book(Book& book, Patron& patron, Date& date);
std::vector<std::string> get_debtors() const;
private:
std::vector<Book> books;
std::vector<Patron> patrons;
std::vector<Transaction> transactions;
};
```
以下是Transaction结构体的头文件transaction.h:
```c++
#include "book.h"
#include "patron.h"
#include "date.h"
struct Transaction {
Book book;
Patron patron;
Date date;
};
```
以下是实现Library类以及相关函数的源文件library.cpp:
```c++
#include "library.h"
#include <stdexcept>
void Library::add_book(Book& book) {
books.push_back(book);
}
void Library::add_patron(Patron& patron) {
patrons.push_back(patron);
}
void Library::check_out_book(Book& book, Patron& patron, Date& date) {
bool book_found = false;
bool patron_found = false;
for (Book& b : books) {
if (b == book) {
book_found = true;
break;
}
}
for (Patron& p : patrons) {
if (p == patron) {
patron_found = true;
if (p.get_fee() > 0) {
throw std::runtime_error("Patron has unpaid fees.");
}
break;
}
}
if (!book_found || !patron_found) {
throw std::runtime_error("Book or patron record not found.");
}
Transaction transaction{book, patron, date};
transactions.push_back(transaction);
}
std::vector<std::string> Library::get_debtors() const {
std::vector<std::string> debtors;
for (Patron p : patrons) {
if (p.get_fee() > 0) {
debtors.push_back(p.get_name());
}
}
return debtors;
}
```
对于Book和Patron类,我们可以在另外两个头文件book.h和patron.h中定义,具体实现根据需求而定。