创建一个 Library类,包含一个 Book向量和一个Patron向量。定义一个名为Transaction 的 struet,包含一个Book对象、一个Patron对象和一个本章中定义的Date对象,表示借阅记录。在 Library 类中定义一个Transaction向量。定义向图书馆添加图书、添加读者以及借出书籍的函数。当一个读者借出一本书时,保证Library对象中有此读者和这本书的记录,否则报告错误。然后检查读者是否欠费,如果欠费就报告一个错误,否则创建一个Transaction对象,将其放人Transaction向量中。定义一个返回包含所有欠费读者姓名的向量的函数。该软件是多文件程序,按文件给出代码,在主测试文件中设置菜单,由用户手动录入图书信息,用C++设计实现,重新定义Book类,Patron类,Date类
时间: 2024-02-13 10:05:51 浏览: 36
用c++定义一个Book(图书)类
5星 · 资源好评率100%
假设本题中的Book类、Patron类和Date类已经在其他文件中定义好了,下面是Library类的实现:
Library.h 文件:
```c++
#ifndef LIBRARY_H
#define LIBRARY_H
#include <vector>
#include <string>
#include "Book.h"
#include "Patron.h"
#include "Date.h"
class Library {
public:
void addBook(Book book);
void addPatron(Patron patron);
void checkOutBook(Book book, Patron patron, Date date);
std::vector<std::string> getDebtors() const;
private:
std::vector<Book> books;
std::vector<Patron> patrons;
std::vector<Transaction> transactions;
};
#endif // LIBRARY_H
```
Library.cpp 文件:
```c++
#include "Library.h"
#include <stdexcept>
void Library::addBook(Book book) {
books.push_back(book);
}
void Library::addPatron(Patron patron) {
patrons.push_back(patron);
}
void Library::checkOutBook(Book book, Patron patron, Date date) {
// 检查图书是否存在
bool bookExists = false;
for (Book& b : books) {
if (b == book) {
bookExists = true;
break;
}
}
if (!bookExists) {
throw std::invalid_argument("Book not found in library.");
}
// 检查读者是否存在
bool patronExists = false;
for (Patron& p : patrons) {
if (p == patron) {
patronExists = true;
break;
}
}
if (!patronExists) {
throw std::invalid_argument("Patron not found in library.");
}
// 检查读者是否欠费
if (patron.getFeesOwing() > 0) {
throw std::invalid_argument("Patron has outstanding fees.");
}
// 借阅
transactions.push_back(Transaction{book, patron, date});
}
std::vector<std::string> Library::getDebtors() const {
std::vector<std::string> debtors;
for (const Patron& p : patrons) {
if (p.getFeesOwing() > 0) {
debtors.push_back(p.getName());
}
}
return debtors;
}
```
Transaction 结构体可以定义在 Library.h 文件中:
```c++
struct Transaction {
Book book;
Patron patron;
Date date;
};
```
至此,Library 类的实现已经完成。在主测试文件中,可以按照以下步骤使用该类:
1. 创建 Library 对象。
2. 手动录入图书信息和读者信息,并使用 addBook() 和 addPatron() 方法将它们添加到 Library 对象中。
3. 当读者借出一本书时,使用 checkOutBook() 方法进行借阅操作。需要注意的是,在调用该方法之前,必须保证该读者和该书籍都已经在 Library 对象中存在。
4. 使用 getDebtors() 方法获取所有欠费读者的姓名。
阅读全文