创建一个 Library类,包含一个 Book向量和一个Patron向量。定义一个名为Transaction 的 struet,包含一个Book对象、一个Patron对象和一个本章中定义的Date对象,表示借阅记录。在 Library 类中定义一个Transaction向量。定义向图书馆添加图书、添加读者以及借出书籍的函数。当一个读者借出一本书时,保证Library对象中有此读者和这本书的记录,否则报告错误。然后检查读者是否欠费,如果欠费就报告一个错误,否则创建一个Transaction对象,将其放人Transaction向量中。定义一个返回包含所有欠费读者姓名的向量的函数。多文件程序,代码按文件给出
时间: 2024-02-13 11:59:40 浏览: 73
尊敬的用户,您的问题需要涉及多个文件,本回答将提供三个文件的代码示例:
1. Book.h
```cpp
#ifndef BOOK_H
#define BOOK_H
#include <string>
class Book {
public:
Book(std::string _title, std::string _author, std::string _isbn, bool _is_checked_out = false)
: title(_title), author(_author), isbn(_isbn), is_checked_out(_is_checked_out) {}
std::string get_title() const { return title; }
std::string get_author() const { return author; }
std::string get_isbn() const { return isbn; }
bool get_is_checked_out() const { return is_checked_out; }
void set_is_checked_out(bool _is_checked_out) { is_checked_out = _is_checked_out; }
private:
std::string title;
std::string author;
std::string isbn;
bool is_checked_out;
};
#endif
```
2. Patron.h
```cpp
#ifndef PATRON_H
#define PATRON_H
#include <string>
class Patron {
public:
Patron(std::string _name, std::string _card_number, double _fees_owed = 0.0)
: name(_name), card_number(_card_number), fees_owed(_fees_owed) {}
std::string get_name() const { return name; }
std::string get_card_number() const { return card_number; }
double get_fees_owed() const { return fees_owed; }
void set_fees_owed(double _fees_owed) { fees_owed = _fees_owed; }
private:
std::string name;
std::string card_number;
double fees_owed;
};
#endif
```
3. Library.h
```cpp
#ifndef LIBRARY_H
#define LIBRARY_H
#include <vector>
#include "Book.h"
#include "Patron.h"
#include "Date.h"
struct Transaction {
Book book;
Patron patron;
Date date;
};
class Library {
public:
void add_book(Book book);
void add_patron(Patron patron);
void lend_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;
bool has_book(const Book& book) const;
bool has_patron(const Patron& patron) const;
};
#endif
```
4. Library.cpp
```cpp
#include "Library.h"
#include <algorithm>
void Library::add_book(Book book) {
books.push_back(book);
}
void Library::add_patron(Patron patron) {
patrons.push_back(patron);
}
void Library::lend_book(Book book, Patron patron, Date date) {
if (!has_book(book) || !has_patron(patron)) {
throw std::runtime_error("The book or patron does not exist in the library.");
}
if (book.get_is_checked_out()) {
throw std::runtime_error("The book is already checked out.");
}
if (patron.get_fees_owed() > 0.0) {
throw std::runtime_error("The patron owes fees and cannot borrow books.");
}
book.set_is_checked_out(true);
transactions.push_back(Transaction{book, patron, date});
}
std::vector<std::string> Library::get_debtors() const {
std::vector<std::string> result;
std::for_each(patrons.begin(), patrons.end(), [&](const Patron& patron) {
if (patron.get_fees_owed() > 0.0) {
result.push_back(patron.get_name());
}
});
return result;
}
bool Library::has_book(const Book& book) const {
return std::find(books.begin(), books.end(), book) != books.end();
}
bool Library::has_patron(const Patron& patron) const {
return std::find(patrons.begin(), patrons.end(), patron) != patrons.end();
}
```
5. Date.h
```cpp
#ifndef DATE_H
#define DATE_H
#include <ctime>
class Date {
public:
Date(int _year, int _month, int _day)
: year(_year), month(_month), day(_day) {}
int get_year() const { return year; }
int get_month() const { return month; }
int get_day() const { return day; }
private:
int year;
int month;
int day;
};
#endif
```
注意:本示例代码仅供参考,可能存在错误或不足之处,具体实现方式需要根据实际情况进行调整。