软件部分| 01用c++编写图书馆管理系统

发布时间:2026/11/5 11:43:38

软件部分| 01用c++编写图书馆管理系统 本篇文章分为三部分第一部分给出代码第二部分给出核心逻辑第三部分讲解疑难点一、总体代码如下#include iostream #includevector #includealgorithm #includestring using namespace std; class Book{ private:string title, author, isbn; bool available; public:Book(string t, string a, string i) :title(t), author(a), isbn(i), available(true){} string getTitle()const { return title; } string getAuthor()const { return author; } string getISBN()const { return isbn; } bool isavailable()const { return available; } //借书 void borrowBook() { if (available) { available false; cout 成功借出书籍 endl; } else { cout 书籍已被借出 endl; } } //还书 void returnBook() { available true; cout 成功归还书籍 endl; } //浏览 void display()const { cout 书名 titleendl; cout 作者 authorendl; cout ISBN isbn endl; cout 状态 (available ? 可借 : 已借出) endl; } //排序 bool operator(const Book other) const { return title other.title; } }; class Library { private:vectorBookbooks; public: //添加书籍 void addBook() { string title, author, isbn; cout 请输入书名 endl; getline(cin, title); cout 请输入作者名 endl; getline(cin, author); cout 请输入ISBN码 endl; getline(cin, isbn); books.emplace_back(title, author, isbn); cout 添加书籍成功 endl; } //搜索书籍 void searchBook() { string keyword; cout 输入搜索关键词书名/作者/ISBN endl; getline(cin, keyword); bool found false; for (const auto book : books) { if (book.getTitle().find(keyword) ! string::npos || book.getAuthor().find(keyword) ! string::npos || book.getISBN() keyword) { book.display(); found true; } } if (!found) { cout 未找到相关书籍 endl; } } //显示书籍 void displayAllBooks() { if (books.empty()) { cout 图书馆没有书籍 endl; } for (const auto book : books) { book.display(); } } //借书功能 void borrowBook() { string isbn; cout 请输入要借阅的书籍ISBN endl; getline(cin, isbn); auto it find_if(books.begin(), books.end(), [isbn](const Book b) { return b.getISBN() isbn; }); if (it ! books.end()) { it-borrowBook(); } else { cout 未找到该书籍 endl; } } //还书功能 void returnBook() { string isbn; cout 请输入要归还的书籍ISBN; endl; getline(cin, isbn); auto it find_if(books.begin(), books.end(),[isbn](const Book b){ return b.getISBN() isbn; }); if (it ! books.end()) { it-returnBook(); } else { cout 未找到该书籍 endl; } } //删除书籍 void deleteBook() { string isbn; if (books.empty()) { cout 图书列表为空无法删除 endl; return; } cout 请输入要删除的书籍ISBN endl; getline(cin, isbn); auto it find_if(books.begin(), books.end(), [isbn](const Book b) { return b.getISBN() isbn; }); if (it ! books.end()) { books.erase(it); cout 书籍删除成功! endl; } else { cout 未找到该书籍 endl; } } //排序书籍 void sortBook() { sort(books.begin(), books.end()); cout 书籍排序成功 endl; } }; void Menu() { cout ----------------------------------- endl; cout 欢迎来到BAIKAI图书馆 endl; cout 0.退出系统 endl; cout 1.登记书籍 endl; cout 2.浏览书籍 endl; cout 3.查找书籍 endl; cout 4.借阅书籍 endl; cout 5.归还书籍 endl; cout 6.书籍排序 endl; cout 7.删除书籍 endl; cout ----------------------------------- endl; cout 请输入0~7 endl; }; int main() { Library library; Menu(); int choice; cin choice; switch (choice) { case 0: cout 退出成功谢谢使用 endl; system(pause); exit(0); break; case 1: cout 【登记】; library.addBook(); break; case 2: cout 【浏览】; library.displayAllBooks(); break; case 3: cout 【查找】; library.searchBook(); break; case 4: cout 【借阅】; library.borrowBook(); break; case 5: cout 【归还】; library.returnBook(); break; case 6: cout 【排序】; library.sortBook(); break; case 7: cout 【删除】; library.deleteBook(); break; default:cout error endl; } return 0; }运行结果如下二、核心逻辑利用class定义book类型如何通过library成员函数实现图书馆管理系统的不同功能三、知识点讲解OK那现在来学习知识点1.string是什么string是字符串类型但比char安全2.Book(string t, string a, string i) :title(t), author(a), isbn(i), available(true){}是什么代表列表初始化将括号内的参数赋值到对应的变量Book(string t, string a, string i) :title(t), author(a), isbn(i), available(true){}3.如何理解vectorBookbooks?vector是一个动态数组储存了Book类型的books变量vectorBookbooks;4.如何理解auto它是一个关键字可以自动推导出变量类型const auto book : books5.如何理解string::npos它表示无效位置string::npos6.如何理解auto it find_if(books.begin(), books.end(), [isbn](const Book b) {return b.getISBN() isbn; });find_if是库algorithm的标准函数用来查找元素begin和end表示books容器的起止范围[isbn]表示捕获isbn列表return表示判断条件auto it find_if(books.begin(), books.end(), [isbn](const Book b) { return b.getISBN() isbn; });7.如何理解operator它是一个重载操作符可以搭配,,等使用具体操作方法网上查bool operator(const Book other) const { return title other.title;OK这就全部内容了感谢您的观看
延伸阅读

更多相关文章

2026/11/6 1:33:23

加密货币交易必修课:从趋势跟踪到仓位管理的实战指南

1. 交易前的底层准备1.1 先搞清楚自己是哪种交易者很多人冲进加密市场,第一件事是看行情、找代码、搜“下一个百倍币”,但真正该做的第一件事,是先回答一个问题:你到底打算用什么周期赚钱?短线、波段、长线&#xff0c…

2026/11/5 7:38:35

AI Agent工程化实战:Python→LangGraph→CrewAI→AutoGen进阶路径

1. 这不是“学AI”,而是抢一张通往新生产力时代的船票2026年,AI Agent开发已经不是实验室里的概念玩具,也不是大厂内部的黑箱项目,它正在以肉眼可见的速度变成一种可标准化、可模块化、可快速交付的工程能力。我从去年开始带团队落…

2026/11/5 22:33:17

AI如何破解毕业设计难题:选题到论文全流程优化

1. 毕业设计的传统困境与AI破局之道每年毕业季,数百万高校学子都会面临同一个灵魂拷问:如何从零开始完成一篇合格的毕业设计?这个看似简单的任务背后,隐藏着三重典型困境:首先是选题焦虑。在经管类专业,学生…

2026/11/6 1:28:46

【WebSocket】WebSocket 与消息队列(如 Kafka、RocketMQ)如何结合,构建可靠的异步实时通信系统?

WebSocket 与消息队列融合架构:金融行情推送系统的高可靠实时通信设计 用户问题原文:WebSocket 与消息队列(如 Kafka、RocketMQ)如何结合,构建可靠的异步实时通信系统? 在构建金融行情推送系统时,我们曾因架构设计不当导致严重生产事故:当市场开盘瞬间百万级用户同时连…

2026/11/6 1:28:46

996引擎 - 跨服:用 WIN10 mklink 创建 Mir200-KF

996引擎 - 跨服:用 WIN10 mklink 创建 Mir200-KF v1 v2 v3 v3 - PowerShell 版 参考资料 v1 @echo off setlocal enabledelayedexpansion:: 设置源目录和目标目录 set "SOURCE=Mir200" set "DEST=Mir200-KF"echo [1/3] 正在创建目标根目录: %DEST% if no…

2026/11/6 1:28:46

【芳芯科技】气体检测报警系统设备

实物效果图:实现功能:1.需要4个传感器,甲醛,温湿度,PM2.5,co2传感器。 2.采用stm32作为控制系统核心。 3.显示屏显示数据。 4.通过wifi传输数据到手机。 5.需要通过AT24CO2芯片存储数据。原理图&#xff1a…

2026/11/6 1:28:46

【好用的工具记录-Foundry 智能合约开发工具包】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 1:03:39

MCU晶振电路设计全解析:从负载电容计算到PCB布局调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑