C++实现书库管理系统数据结构

时间: 2023-07-08 08:50:41 浏览: 56
以下是一个简单的C++实现书库管理系统的数据结构示例: ```c++ #include <iostream> #include <string> #include <unordered_map> #include <vector> using namespace std; // 书籍信息数据结构 struct Book { string name; // 书名 string author; // 作者 string isbn; // ISBN string publisher; // 出版社 string pub_date; // 出版日期 double price; // 价格 int stock; // 库存数量 }; // 读者信息数据结构 struct Reader { string name; // 姓名 string gender; // 性别 int age; // 年龄 vector<string> borrow_list; // 借阅记录 }; // 借阅记录数据结构 struct BorrowRecord { string reader_name; // 读者姓名 string book_name; // 书籍名称 string borrow_date; // 借阅日期 string return_date; // 归还日期 bool borrowed; // 是否已借阅 }; // 书架信息数据结构 struct BookShelf { int shelf_no; // 书架编号 string location; // 存放位置 int capacity; // 容量 int stored_num; // 已存数量 }; // 书库管理系统类 class Library { private: unordered_map<string, Book> book_info; // 书籍信息哈希表 unordered_map<string, Reader> reader_info; // 读者信息哈希表 vector<BorrowRecord> borrow_records; // 借阅记录队列 vector<BookShelf> book_shelves; // 书架信息数组 public: // 添加书籍信息 void addBook(string isbn, Book book) { book_info[isbn] = book; } // 删除书籍信息 void deleteBook(string isbn) { book_info.erase(isbn); } // 查询书籍信息 Book searchBook(string isbn) { return book_info[isbn]; } // 添加读者信息 void addReader(string name, Reader reader) { reader_info[name] = reader; } // 删除读者信息 void deleteReader(string name) { reader_info.erase(name); } // 查询读者信息 Reader searchReader(string name) { return reader_info[name]; } // 借阅书籍 void borrowBook(string reader_name, string book_name) { BorrowRecord record; record.reader_name = reader_name; record.book_name = book_name; record.borrow_date = "2021-12-01"; record.return_date = "2022-01-01"; record.borrowed = true; borrow_records.push_back(record); } // 归还书籍 void returnBook(string reader_name, string book_name) { for (auto& record : borrow_records) { if (record.reader_name == reader_name && record.book_name == book_name && record.borrowed == true) { record.borrowed = false; break; } } } // 添加书架信息 void addBookShelf(BookShelf shelf) { book_shelves.push_back(shelf); } // 删除书架信息 void deleteBookShelf(int shelf_no) { for (int i = 0; i < book_shelves.size(); i++) { if (book_shelves[i].shelf_no == shelf_no) { book_shelves.erase(book_shelves.begin() + i); break; } } } // 查询书架信息 BookShelf searchBookShelf(int shelf_no) { for (auto& shelf : book_shelves) { if (shelf.shelf_no == shelf_no) { return shelf; } } } }; int main() { // 创建书库管理系统对象 Library lib; // 添加书籍信息 Book book1 = { "C++ Primer", "Lippman", "978-7-121-15535-2", "机械工业出版社", "2021-01-01", 68.00, 100 }; lib.addBook(book1.isbn, book1); // 查询书籍信息 Book book = lib.searchBook(book1.isbn); cout << "Book Name: " << book.name << endl; cout << "Author: " << book.author << endl; cout << "ISBN: " << book.isbn << endl; cout << "Publisher: " << book.publisher << endl; cout << "Publish Date: " << book.pub_date << endl; cout << "Price: " << book.price << endl; cout << "Stock: " << book.stock << endl; // 添加读者信息 Reader reader1 = { "Tom", "Male", 20 }; lib.addReader(reader1.name, reader1); // 查询读者信息 Reader reader = lib.searchReader(reader1.name); cout << "Reader Name: " << reader.name << endl; cout << "Gender: " << reader.gender << endl; cout << "Age: " << reader.age << endl; // 借阅书籍 lib.borrowBook(reader1.name, book1.name); // 归还书籍 lib.returnBook(reader1.name, book1.name); // 添加书架信息 BookShelf shelf1 = { 1, "A1", 100, 0 }; lib.addBookShelf(shelf1); // 查询书架信息 BookShelf shelf = lib.searchBookShelf(shelf1.shelf_no); cout << "Shelf No: " << shelf.shelf_no << endl; cout << "Location: " << shelf.location << endl; cout << "Capacity: " << shelf.capacity << endl; cout << "Stored Num: " << shelf.stored_num << endl; return 0; } ``` 上述示例中,我们使用了`unordered_map`、`vector`等STL容器来实现书库管理系统的数据结构。例如,`unordered_map<string, Book>`用来存储书籍信息,`vector<BorrowRecord>`用来存储借阅记录,`vector<BookShelf>`用来存储书架信息等。 在`Library`类中,我们实现了添加、删除、查询书籍、读者、书架信息等基本操作,以及借阅、归还书籍等高级操作。使用这些操作,我们可以方便地管理书库的各种信息。

相关推荐

最新推荐

recommend-type

基于QT C++实现的数据结构软件设计报告

哈工大(威海)计算机科学与技术学院 软件设计程序II的实验报告,基于QT,C++实现的简单饮食健康助手小程序,具有一定的数据结构知识的构建。原作者,可私聊源码。
recommend-type

C++实现病人就医管理系统

主要为大家详细介绍了C++语言实现病人就医管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C++数据结构与算法之双缓存队列实现方法详解

主要介绍了C++数据结构与算法之双缓存队列实现方法,结合实例形式分析了双缓存队列的原理、实现方法与相关注意事项,需要的朋友可以参考下
recommend-type

C++ 学生成绩管理系统设计报告书

基本实现了: (1)学生基本信息、考试科目及成绩的信息录入。 (2)已有学生信息的显示。 (3)学生基本信息的读取和保存输入数据等功能 (4)学生基本信息的查询与修改。可以对已有的学生信息进行修改。 (5)学生基本信息的...
recommend-type

C++实现机票预订系统

主要为大家详细介绍了C++实现机票预订系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
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

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

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