创建一个 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类,这里就不列出来了。这个程序实现了一个简单的图书馆管理系统,可以添加图书和读者,借出和归还图书,以及查询欠费读者。

相关推荐

最新推荐

recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

matlab基于RRT和人工势场法混合算法的路径规划.zip

matlab基于RRT和人工势场法混合算法的路径规划.zip
recommend-type

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。