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

发布时间:2026/9/11 11:31:45

软件部分| 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/9/11 11:31:45

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

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

2026/9/11 11:31:45

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

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

2026/9/11 11:31:44

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

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

2026/9/11 16:37:41

声源定位系统设计:麦克风阵列与TDOA算法实战

简介:本资源是2023年全国大学生电子设计竞赛F题「声源定位」的完整解决方案包,面向备赛电赛的本科生及电子类实践学习者,聚焦多麦克风阵列信号采集、时延估计与空间坐标解算等核心环节,提供可直接复现的工程级实现。压缩包含373个…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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