创建一个 Library类,包含一个 Book向量和一个Patron向量。定义一个名为Transaction 的 struet,包含一个Book对象、一个Patron对象和一个本章中定义的Date对象,表示借阅记录。在 Library 类中定义一个Transaction向量。定义向图书馆添加图书、添加读者以及借出书籍的函数。当一个读者借出一本书时,保证Library对象中有此读者和这本书的记录,否则报告错误。然后检查读者是否欠费,如果欠费就报告一个错误,否则创建一个Transaction对象,将其放人Transaction向量中。定义一个返回包含所有欠费读者姓名的向量的函数。多文件程序,按文件给出代码,有录入信息的操作,用户可以手动添加信息。需要有自主测试文件
时间: 2024-02-13 12:07:41 浏览: 24
这里是 C++ 代码实现,包括三个文件:Library.h,Library.cpp 和 main.cpp。其中,Library.h 头文件包含了 Library 类的声明;Library.cpp 文件包含了 Library 类的实现;main.cpp 文件为自主测试文件。
Library.h 头文件代码如下:
```
#ifndef LIBRARY_H
#define LIBRARY_H
#include <vector>
#include <string>
#include "Book.h"
#include "Patron.h"
#include "Date.h"
class Library
{
public:
Library(); // 构造函数
void addBook(Book book); // 添加图书
void addPatron(Patron patron); // 添加读者
void checkOutBook(Book book, Patron patron, Date date); // 借出书籍
std::vector<std::string> getDebtors(); // 返回欠费读者姓名的向量
private:
std::vector<Book> books; // 图书向量
std::vector<Patron> patrons; // 读者向量
struct Transaction {
Book book;
Patron patron;
Date date;
};
std::vector<Transaction> transactions; // 借阅记录向量
};
#endif
```
Library.cpp 实现文件代码如下:
```
#include "Library.h"
#include <iostream>
Library::Library() {}
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 bookFound = false;
bool patronFound = false;
// 检查图书是否存在
for (int i = 0; i < books.size(); i++) {
if (books[i].getTitle() == book.getTitle()) {
bookFound = true;
break;
}
}
// 检查读者是否存在
for (int i = 0; i < patrons.size(); i++) {
if (patrons[i].getName() == patron.getName()) {
patronFound = true;
break;
}
}
if (!bookFound || !patronFound) {
std::cout << "Error: Book or patron not found!" << std::endl;
return;
}
// 检查读者是否欠费
for (int i = 0; i < patrons.size(); i++) {
if (patrons[i].getName() == patron.getName()) {
if (patrons[i].getFineAmount() > 0) {
std::cout << "Error: Patron has outstanding fees!" << std::endl;
return;
}
break;
}
}
// 添加借阅记录
Transaction transaction = {book, patron, date};
transactions.push_back(transaction);
}
std::vector<std::string> Library::getDebtors()
{
std::vector<std::string> debtors;
for (int i = 0; i < patrons.size(); i++) {
if (patrons[i].getFineAmount() > 0) {
debtors.push_back(patrons[i].getName());
}
}
return debtors;
}
```
main.cpp 自主测试文件代码如下:
```
#include "Library.h"
#include <iostream>
int main()
{
// 创建图书馆对象
Library library;
// 创建图书和读者对象
Book book1("The Great Gatsby", "F. Scott Fitzgerald");
Book book2("To Kill a Mockingbird", "Harper Lee");
Patron patron1("Alice");
Patron patron2("Bob");
// 添加图书和读者
library.addBook(book1);
library.addBook(book2);
library.addPatron(patron1);
library.addPatron(patron2);
// 借阅图书
Date date(2021, 10, 1);
library.checkOutBook(book1, patron1, date);
library.checkOutBook(book2, patron2, date);
// 检查欠费读者
std::vector<std::string> debtors = library.getDebtors();
for (int i = 0; i < debtors.size(); i++) {
std::cout << debtors[i] << " owes fees." << std::endl;
}
return 0;
}
```
注意:这里的 Book、Patron 和 Date 类没有给出代码实现,需要自行编写。同时需要注意错误处理和异常情况,如读者借阅不存在的图书、借阅已借出的图书、读者欠费等情况。