创建一个 Library类,包含一个 Book向量和一个Patron向量。定义一个名为Transaction 的 struet,包含一个Book对象、一个Patron对象和一个本章中定义的Date对象,表示借阅记录。在 Library 类中定义一个Transaction向量。定义向图书馆添加图书、添加读者以及借出书籍的函数。当一个读者借出一本书时,保证Library对象中有此读者和这本书的记录,否则报告错误。然后检查读者是否欠费,如果欠费就报告一个错误,否则创建一个Transaction对象,将其放人Transaction向量中。定义一个返回包含所有欠费读者姓名的向量的函数。多文件程序,按文件给出代码,在测试文件中设置菜单,由用户输入图书信息,用C++设计实现
时间: 2024-02-13 08:03:28 浏览: 20
假设我们将这个程序分为三个文件,分别为Library.h、Library.cpp和test.cpp。具体代码如下:
Library.h:
```c++
#ifndef LIBRARY_H
#define LIBRARY_H
#include <vector>
#include <string>
#include "Book.h"
#include "Patron.h"
#include "Date.h"
class Transaction
{
public:
Transaction(Book b, Patron p, Date d) : book(b), patron(p), date(d) {}
Book book;
Patron patron;
Date date;
};
class Library
{
public:
void add_book(Book b);
void add_patron(Patron p);
void check_out(Book b, Patron p, Date d);
std::vector<std::string> get_debtors();
private:
std::vector<Book> books;
std::vector<Patron> patrons;
std::vector<Transaction> transactions;
};
#endif
```
Library.cpp:
```c++
#include "Library.h"
#include <iostream>
void Library::add_book(Book b)
{
books.push_back(b);
}
void Library::add_patron(Patron p)
{
patrons.push_back(p);
}
void Library::check_out(Book b, Patron p, Date d)
{
// Check if book and patron exist in library records
bool book_found = false;
bool patron_found = false;
for (Book book : books)
{
if (book == b)
{
book_found = true;
break;
}
}
for (Patron patron : patrons)
{
if (patron == p)
{
patron_found = true;
break;
}
}
if (!book_found || !patron_found)
{
std::cout << "Error: Book or patron not found in library records.\n";
return;
}
// Check if patron has any outstanding fees
if (p.get_fees_owed() > 0)
{
std::cout << "Error: Patron has outstanding fees.\n";
return;
}
// Create transaction and add to library records
Transaction t(b, p, d);
transactions.push_back(t);
}
std::vector<std::string> Library::get_debtors()
{
std::vector<std::string> debtors;
for (Patron patron : patrons)
{
if (patron.get_fees_owed() > 0)
{
debtors.push_back(patron.get_name());
}
}
return debtors;
}
```
test.cpp:
```c++
#include "Library.h"
#include <iostream>
int main()
{
Library lib;
bool running = true;
while (running)
{
std::cout << "1. Add book\n";
std::cout << "2. Add patron\n";
std::cout << "3. Check out book\n";
std::cout << "4. Get debtors\n";
std::cout << "5. Quit\n";
int choice;
std::cin >> choice;
switch (choice)
{
case 1:
{
std::string title;
std::string author;
std::cout << "Enter book title: ";
std::cin >> title;
std::cout << "Enter book author: ";
std::cin >> author;
Book b(title, author);
lib.add_book(b);
std::cout << "Book added.\n";
break;
}
case 2:
{
std::string name;
std::cout << "Enter patron name: ";
std::cin >> name;
Patron p(name);
lib.add_patron(p);
std::cout << "Patron added.\n";
break;
}
case 3:
{
std::string title;
std::string author;
std::string name;
std::cout << "Enter book title: ";
std::cin >> title;
std::cout << "Enter book author: ";
std::cin >> author;
std::cout << "Enter patron name: ";
std::cin >> name;
Book b(title, author);
Patron p(name);
Date d(1, 1, 2022); // Use current date for simplicity
lib.check_out(b, p, d);
std::cout << "Book checked out.\n";
break;
}
case 4:
{
std::vector<std::string> debtors = lib.get_debtors();
if (debtors.empty())
{
std::cout << "No debtors.\n";
}
else
{
std::cout << "Debtors:\n";
for (std::string debtor : debtors)
{
std::cout << debtor << "\n";
}
}
break;
}
case 5:
{
running = false;
break;
}
default:
{
std::cout << "Invalid choice.\n";
break;
}
}
}
return 0;
}
```
需要注意的是,我们还需要定义Book、Patron和Date类,这里就不列出来了。这个程序实现了一个简单的图书馆管理系统,可以添加图书和读者,借出和归还图书,以及查询欠费读者。