基于 C++ STL 的图书管理系统213行

定制魏:QTWZPW,获取更多源码等

目录

一、实践项目名称

二、实践目的

三、实践要求

四、实践内容

五、代码框架参考

六、代码效果展示

七、完整代码主函数展示


一、实践项目名称

基于 C++ STL 的图书管理系统

二、实践目的

通过设计和实现一个基于 C++标准模板库(STL)的图书管理系统,加深对 C++ STL 的理
解和应用,提升数据结构与算法实践能力,以及强化面向对象编程思想。

三、实践要求

(1) 使用 C++编程语言开发,并充分利用 STL 提供的容器和算法。
(2) 程序应实现图书的增加、删除、查询、排序等基本功能。
(3) 采用面向对象的设计方法,确保代码的模块化和可扩展性。
(4) 代码应有良好的风格和注释,便于阅读和维护。
(5) 应处理用户输入的异常情况,并给出相应提示。
(6) 最终提交源代码、可执行文件和项目报告。

四、实践内容

(1)需求分析与设计
分析图书管理系统的基本需求。
定义图书(Book)类,包含书名、作者、ISBN、库存量等属性。
设计系统的类结构和接口,如图书管理类(BookManager)等。
(2)环境搭建与基础代码编写
搭建 C++开发环境。
编写 Book 类和 BookManager 类的基础代码,实现构造函数、访问器和部分管
理功能。
(3)功能实现
利用 STL 容器(如 vector, list, set 等)管理图书数据。
实现图书的增加、删除功能。
实现图书的查询功能,包括按书名、作者和 ISBN 查询。
实现图书的排序功能,可按照不同的属性进行排序。

五、代码框架参考

为保证实践质量及评分标准统一,建议采用以下基于 C++ STL 的图书管理系统的简化版
代码框架:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
// 图书类
class Book {
private:
 std::string title;
 std::string author;
 std::string isbn; // 书号
 int stock; // 库存
public:
 Book(const std::string& t, const std::string& a, const std::string& i, int s)
 : title(t), author(a), isbn(i), stock(s) {}
 // ... 其他成员函数,例如访问和修改数据
 // 输出操作符重载
 void print(){
 cout<<"Title: " <<title << ", Author: " <<author
 << ", ISBN: " << isbn << ", Stock: " <<.stock<<endl;
 }
};
// 图书管理类
class BookManager {
private:
 vector<Book> books;
public:
 void addBook(const Book& book) {
 // 添加图书
 }
 void removeBook(const std::string& isbn) {
 // 删除图书
 }
 void sortBooks() {
 // 排序图书
 sort(books.begin(), books.end());
 }
 void searchByTitle(const string& title) {
 // 根据标题搜索图书
 }
 // ... 其他管理功能实现
};
// 主函数
int main() {
 BookManager manager;
 // ... 用户界面和控制流程代码
 return 0;
}

六、代码效果展示

七、完整代码主函数展示

// 主函数
int main() {
    BookManager manager;

    int choice;
    do {
        printMenu();
        cin >> choice;

        switch (choice) {
            case 1: {
                string title, author, ISBN;
                int stock;
                cout << "请输入标题:";
                cin.ignore();
                getline(cin, title);
                cout << "请输入作者:";
                getline(cin, author);
                cout << "请输入书号:";
                getline(cin, ISBN);
                cout << "请输入库存:";
                cin >> stock;
                manager.addBook(Book(title, author, ISBN, stock));
                break;
            }
            case 2: {
                string ISBN;
                cout << "请输入要删除的书籍的书号:";
                cin >> ISBN;
                manager.removeBook(ISBN);
                break;
            }
            case 3: {
                string title;
                cout << "请输入要搜索的标题:";
                cin.ignore();
                getline(cin, title);
                manager.searchByTitle(title);
                break;
            }
            case 4: {
                string author;
                cout << "请输入要搜索的作者:";
                cin.ignore();
                getline(cin, author);
                manager.searchByAuthor(author);
                break;
            }
            case 5: {
                string ISBN;
                cout << "请输入要搜索的书号:";
                cin >> ISBN;
                manager.searchByISBN(ISBN);
                break;
            }
            case 6:
                manager.sortByAttribute([](const Book& a, const Book& b) { return a.getTitle() < b.getTitle(); });
                cout << "按标题排序完成。" << endl;
                break;
            case 7:
                manager.sortByAttribute([](const Book& a, const Book& b) { return a.getAuthor() < b.getAuthor(); });
                cout << "按作者排序完成。" << endl;
                break;
            case 8:
                manager.sortByAttribute([](const Book& a, const Book& b) { return a.getISBN() < b.getISBN(); });
                cout << "按书号排序完成。" << endl;
                break;
            case 9:
                manager.printAllBooks();
                break;
            case 10:
                cout << "正在退出程序..." << endl;
                break;

            default:
                cout << "无效选项,请重试。" << endl;
        }
    } while (choice != 10);

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/486576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux中的常用基础操作

ls 列出当前目录下的子目录和文件 ls -a 列出当前目录下的所有内容&#xff08;包括以.开头的隐藏文件&#xff09; ls [目录名] 列出指定目录下的子目录和文件 ls -l 或 ll 以列表的形式列出当前目录下子目录和文件的详细信息 pwd 显示当前所在目录的路径 ctrll 清屏 cd…

专业135+总分400+重庆邮电大学801信号与系统考研经验重邮电子信息与通信工程,真题,大纲,参考书。

今年分数出来还是比较满意&#xff0c;专业801信号与系统135&#xff0c;总分400&#xff0c;没想到自己也可以考出400以上的分数&#xff0c;一年的努力付出都是值得的&#xff0c;总结一下自己的复习心得&#xff0c;希望对大家复习有所帮助。专业课&#xff1a;&#xff08;…

C/C++语言相关常见面试题总结

目录 const关键字的作用 volatile 关键字 #define和const有什么区别 decltype和auto的区别 extern 关键字的作用 如何避免野指针 C/C中的类型转换以及使用场景 什么是RTTI&#xff1f;其原理是什么&#xff1f; RTTI 的原理&#xff1a; C中引用和指针的区别 C11用过…

亮剑AIGC,紫光云能否胜人一筹?

【全球云观察 &#xff5c; 科技热点关注】 扎实创新每一步&#xff0c; 先人一步快人一步。 2023年全球科技行业最火的莫过于生成式AI&#xff0c;即Artificial Intelligence Generated Content。在迈向生成式AI的道路上&#xff0c;虽然说不上千军万马&#xff0c;但是国内…

Redis - hash 哈希表

前言 ⼏乎所有的主流编程语⾔都提供了哈希&#xff08;hash&#xff09;类型&#xff0c;它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中&#xff0c;哈希类型是指 value 本⾝⼜是⼀个键值对结构&#xff0c;形如 key "key"&#xff0c;value { { fiel…

java设计模式(2)---六大原则

设计模式之六大原则 这篇博客非常有意义&#xff0c;希望自己能够理解的基础上&#xff0c;在实际开发中融入这些思想&#xff0c;运用里面的精髓。 先列出六大原则&#xff1a;单一职责原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特原则、开闭原则。 一、单一职…

Linux环境基础开发工具yum,vim使用

目录 1.Linux 软件包管理器 yum1.1什么是软件包1.2关于 rzsz1.3注意事项1.4查看软件包1.5如何安装软件1.6如何卸载软件 2.Linux开发工具2.1Linux编辑器-vim使用2.1.1vim的基本概念2.1.2vim的基本操作2.1.3vim正常模式命令集2.1.4vim末行模式命令集2.1.5vim操作总结 2.2简单vim配…

成功案例|全基因组测序+GWAS联合分析揭示不同种族帕金森病的遗传同质性和异质性

发表期刊&#xff1a;npj Parkinson’s Disease 影响因子&#xff1a;8.7 测序方式&#xff1a;WGS 研究对象&#xff1a;人 1 研究背景 帕金森病&#xff08;PD&#xff09;是一种常见的与年龄相关的神经退行性疾病&#xff0c;其特征是运动迟缓、姿势不稳定、僵硬和静息…

面试八股——redis——缓存——缓存穿透、击穿、雪崩

HR&#xff1a;你在项目中的那些场景用到了redis&#xff1f; 1. 缓存穿透问题 &#xff08;项目中使用的方法&#xff09; 2. 缓存击穿 解决办法1&#xff1a;加互斥锁。大量并发时&#xff0c;先让一个人去查&#xff0c;其他人等着。这样剩下人就可在缓存直接获取值。&#…

软件应用,麻将馆棋牌室计时计费管理系统软件,在计时的时候可以使用灯控器智能控灯

软件应用&#xff0c;麻将馆棋牌室计时计费管理系统软件&#xff0c;在计时的时候可以使用灯控器智能控灯 一、前言 以下软件操作教程以佳易王棋牌计时计费软件V18.0为例说明&#xff0c;其他版本可以参考 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 …

Perfetto Trace抓取

1. Perfetto简介 Perfetto 是一个用于 Android 系统的性能跟踪工具&#xff0c;可以帮助开发者分析系统性能和调试问题。 Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。 在低于Android R的版本上…

高性价比不入耳运动耳机哪个牌子好?精心筛选五大高赞好物推荐

在现在的时代运动耳机已成为我们不可或缺的伴侣&#xff0c;而在众多的运动耳机品牌中&#xff0c;选择一款高性价比、佩戴舒适且不入耳的款式&#xff0c;往往能让我们在运动过程中享受更加纯粹的音乐体验&#xff0c;接下来&#xff0c;就让我们一起探索那些备受好评的不入耳…

RobotFrameWorkRIDE失败重试

一、方法一&#xff1a;修改源码 【方式】https://blog.csdn.net/qq_15158911/article/details/119077562 二、方式二&#xff1a;使用插件 【需要环境】robotframework>4.1Python>3.8RobotFrameWorkRIDE2.X 【操作】 1、安装robotframework-retryfailed pip insta…

CleanMyMac X 4.15.1 for Mac 最新中文破解版 系统优化垃圾清理工具

CleanMyMac X for Mac 是一款功能更加强大的系统优化清理工具&#xff0c;相比于 CleanMyMac 4.15.1来说&#xff0c;功能增加了不少&#xff0c;此版本为4.15.1官方最新中英文正式破解版本&#xff0c;永久使用&#xff0c;解决了打开软件崩溃问题&#xff0c;最新版4.15.1版本…

Java后端项目性能优化实战-群发通知

背景 公司群发通知模块性能存在问题&#xff0c;我进行全面的系统调优&#xff0c;系统处理能力大幅提升。 原发送流程 优化后的发送流程 优化的点 说明&#xff1a;以下问题基本都是压测过程遇到的&#xff0c;有些问题普通的功能测试暴露不了。优化目标&#xff1a;保证高…

Transformer的前世今生 day07(Masked Self-Attention

Masked Self-Attention 掩码自注意力 由于NLP中的生成模型&#xff0c;是一个一个的生成单词&#xff0c; 所以为了让自注意力也实现这个过程&#xff0c;就设计了掩码自注意力 掩码&#xff1a;在自注意力机制中&#xff0c;每个输入位置都会与其他位置进行注意力计算&#x…

Maven从零到放弃:文档学习

学习背景&#xff1a; Maven一直在使用&#xff0c;自己也构建过相应的项目。也对常用的配置和命令有一些了解&#xff0c;也处理过一些相关的问题。例如&#xff1a;项目缺少依赖&#xff1b;版本冲突或其他构建失败的问题。但是一直没有进行系统性的学习。 链接&#xff1a;…

【暴刷力扣】11. 盛最多水的容器

11. 盛最多水的容器 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xf…

Python进阶——数据分析案例

一、数据内容分析 二、需求分析 三、实现步骤 1. 设计一个类&#xff0c;可以完成数据的封装 2. 设计一个抽象类&#xff0c;定义文件读取的相关功能&#xff0c;并使用子类实现具体功能 3. 读取文件&#xff0c;生产数据对象 4. 进行数据需求的逻辑计算 5. 通过PyEcharts进行…

陪诊APP:温暖每一程的健康守护者

在快节奏的现代生活中&#xff0c;我们时常面临健康问题的困扰。无论是日常的体检&#xff0c;还是突发的疾病&#xff0c;就医过程中的种种不便往往让我们感到力不从心。而这时&#xff0c;一款贴心、专业的陪诊APP应运而生&#xff0c;为您的健康之旅提供全方位的陪伴与支持。…