创建一个 Library类,包含一个 Book向量和一个Patron向量。定义一个名为Transaction 的 struet,包含一个Book对象、一个Patron对象和一个本章中定义的Date对象,表示借阅记录。在 Library 类中定义一个Transaction向量。定义向图书馆添加图书、添加读者以及借出书籍的函数。当一个读者借出一本书时,保证Library对象中有此读者和这本书的记录,否则报告错误。然后检查读者是否欠费,如果欠费就报告一个错误,否则创建一个Transaction对象,将其放人Transaction向量中。定义一个返回包含所有欠费读者姓名的向量的函数。多文件程序,按文件给出代码,有录入信息的操作,用户可以手动添加信息
时间: 2024-02-13 21:07:03 浏览: 14
文件1: Library.h
```
#ifndef LIBRARY_H
#define LIBRARY_H
#include <vector>
#include "Book.h"
#include "Patron.h"
#include "Date.h"
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();
private:
std::vector<Book> books;
std::vector<Patron> patrons;
struct Transaction {
Book book;
Patron patron;
Date date;
};
std::vector<Transaction> transactions;
};
#endif
```
文件2: Library.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) {
auto book_iter = std::find(books.begin(), books.end(), book);
auto patron_iter = std::find(patrons.begin(), patrons.end(), patron);
if (book_iter == books.end() || patron_iter == patrons.end()) {
std::cout << "Error: Book or patron not found in library." << std::endl;
return;
}
if (patron.get_fees_owed() > 0) {
std::cout << "Error: Patron has outstanding fees." << std::endl;
return;
}
Transaction transaction = {book, patron, date};
transactions.push_back(transaction);
}
std::vector<std::string> Library::get_debtors() {
std::vector<std::string> debtors;
for (const auto& patron : patrons) {
if (patron.get_fees_owed() > 0) {
debtors.push_back(patron.get_name());
}
}
return debtors;
}
```
文件3: Book.h
```
#ifndef BOOK_H
#define BOOK_H
#include <string>
class Book {
public:
Book(std::string title, std::string author, int isbn);
std::string get_title();
std::string get_author();
int get_isbn();
bool operator==(const Book& other) const;
private:
std::string title;
std::string author;
int isbn;
};
#endif
```
文件4: Book.cpp
```
#include "Book.h"
Book::Book(std::string title, std::string author, int isbn)
: title(title), author(author), isbn(isbn) {}
std::string Book::get_title() {
return title;
}
std::string Book::get_author() {
return author;
}
int Book::get_isbn() {
return isbn;
}
bool Book::operator==(const Book& other) const {
return isbn == other.isbn;
}
```
文件5: Patron.h
```
#ifndef PATRON_H
#define PATRON_H
#include <string>
class Patron {
public:
Patron(std::string name, int library_card_number);
std::string get_name();
int get_library_card_number();
double get_fees_owed();
private:
std::string name;
int library_card_number;
double fees_owed;
};
#endif
```
文件6: Patron.cpp
```
#include "Patron.h"
Patron::Patron(std::string name, int library_card_number)
: name(name), library_card_number(library_card_number), fees_owed(0) {}
std::string Patron::get_name() {
return name;
}
int Patron::get_library_card_number() {
return library_card_number;
}
double Patron::get_fees_owed() {
return fees_owed;
}
```
文件7: Date.h
```
#ifndef DATE_H
#define DATE_H
class Date {
public:
Date(int year, int month, int day);
private:
int year;
int month;
int day;
};
#endif
```
文件8: Date.cpp
```
#include "Date.h"
Date::Date(int year, int month, int day)
: year(year), month(month), day(day) {}
```
这是一个简单的图书馆管理系统,包含图书和读者的信息,以及借出和欠费等操作。其中Book、Patron和Date都是简单的类,定义了各自的属性和构造函数。Library类中包含了vector<Book>和vector<Patron>,分别存储图书和读者的信息,以及一个vector<Transaction>,存储借阅记录。在lend_book函数中,首先检查图书和读者是否存在于图书馆中,如果不存在则报错。然后检查读者是否有未缴清的费用,如果有则报错。最后创建一个Transaction对象,将其加入transactions向量中。get_debtors函数返回一个包含所有欠费读者姓名的向量。