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

news2024/12/28 3:30:12

定制魏: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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NAT---网络地址转换技术

Network Address Translation 1、起源&#xff1a;ip地址不够用 2、作用&#xff1a;让私网地址映射成公网地址&#xff0c;进而访问网络。 3、私网Ip地址的范围&#xff1a; A类&#xff1a;10.0.0.0-10.255.255.255 B类&#xff1a;172.16.0.0-172.31.255.255 C类&…

【八股】Java 线程状态转化

线程一共有六种状态 1. NEW - 新建 public static void main(String[] args) throws ExecutionException, InterruptedException {Thread t new Thread(() -> {System.out.println("running");}, "t1");System.out.println(t.getState()); // 线程创…

【MySQL系列】Public Key Retrieval is not allowed

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

简单学习下MQTT(2)

MQTT 简介 MQTT 是非常简单的协议&#xff0c;最初由 IBM 的两位工程师 Andy Stanford-Clark 以及 Arlen Nipper 在 1999 年为监控输油管道设计的。它被设计的场景就是有限的带宽、轻量级以及很小的耗电量&#xff0c;在那个时候&#xff0c;卫星宽带就是那么小&#xff0c;且…

RPA使用Native Messaging 协议实现浏览器自动化

RPA 即机器人流程自动化&#xff0c;是一种利用软件机器人或人工智能来自动化业务流程中规则性、重复性任务的技术。RPA 技术可以模拟和执行人类在计算机上的交互操作&#xff0c;从而实现自动化处理数据、处理交易、触发通知等任务。帮助企业或个人实现业务流程的自动化和优化…

基于ssm的医院住院管理系统论文

摘 要 随着时代的发展&#xff0c;医疗设备愈来愈完善&#xff0c;医院也变成人们生活中必不可少的场所。如今&#xff0c;已经2021年了&#xff0c;虽然医院的数量和设备愈加完善&#xff0c;但是老龄人口也越来越多。在如此大的人口压力下&#xff0c;医院住院就变成了一个问…

计算机软考初级含金量高吗?

并不是说软考初级就没有含金量&#xff0c;对于想评初级职称的考生来说还是很有用处的。根据 国人部 发[2003]39号&#xff1a;通过考试获得证书的人员&#xff0c;表明其已具备从事相应专业岗位工作的水平和能力&#xff0c;用人单位可根据工作需要从获得证书的人员中择优聘任…

技术复盘:Flash Memory揭秘(1)

目录 1.Flash基本原理概述 1.1 Non-volatile Memory的分类 1.2 Flash编程\擦除原理 2.小结 1.Flash基本原理概述 1.1 Non-volatile Memory的分类 Flash在嵌入式领域是非常重要的角色&#xff0c;主要用于存储数据代码&#xff0c;为代码的执行提供基础保证等。 实际上&a…

marvelous designer打开发现gizmo(变换控制器)只有一个方向上有面控制器,缺另外两个面控制器

出现这种问题&#xff0c;其实是因为选中了屏幕坐标系 在3D界面下空白处点右键&#xff0c;选择gizmo&#xff0c;然后选择屏幕坐标系之外别的选项就能恢复到常规有多个面的控制器。

不能从所选图层建立3d模型--模大狮模型网

在Revit中&#xff0c;从所选图层直接创建3D模型并不是一个常规的操作方式。通常情况下&#xff0c;你需要手动创建文字或者图形&#xff0c;然后将其转换为3D模型。 如果你有一个平面上的文字或图形&#xff0c;想要将其转换为3D模型&#xff0c;你可以使用以下步骤&#xff1…

【包远程安装运行】SpringBoot+Mysql实现的美食分享菜谱制作平台+演示视频+开发文档(论文模板)

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的美食分享菜谱制作平台系统&#xff0c;该系统分为前台和后台&#xff0c;多用户分享平台。主要实现了 除脚手架功能以外下面是系统的功能&#xff1a; 前台普通用户&#xff1a;注册、登录、首页、美食…

波奇学Linux:网络接口

127.0.0.1本地回环ip&#xff0c;用于本地测试&#xff0c;不会进行网络通信 TCP是面向连接的&#xff0c;服务器比较被动 需要服套接字监听 listen状态 正常通信默认会进行主机序列和网络序列的转换 TcpServer.cc #pragma once#include<iostream> #include<string…

6、运行时数据区

Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。《Java虚拟机规范》中规定了每一部分的作用。 3.1 程序计数器 程序计数器&#xff08;Program Counter Register&#xff09;也叫PC寄存器&#xff0c;每个线程会通过程序计数器记录当前要执行的…

海外舆情监控的重要性以及云手机的推荐

海外市场不仅有着无尽的商机&#xff0c;同时也存在着各种各样的挑战。例如&#xff0c;海外市场舆情的复杂变化给企业带来了潜在风险&#xff0c;尤其在新媒体技术快速发展的时代&#xff0c;舆论对企业品牌形象的影响日益巨大。本文将详细探讨海外舆情监控的重要性以及为大家…

西圣、漫步者、万魔开放式耳机如何?甄选机型实测对比测评

无论是通勤、工作还是休闲时光&#xff0c;耳机总能为我们带来沉浸式的音乐体验。近年来&#xff0c;开放式耳机以其独特的优势逐渐受到市场的青睐&#xff0c;其中西圣、漫步者、万魔等品牌在市场上相当火热&#xff0c;那这三款开放式耳机的实际到底如何&#xff0c;还是有许…

第一周周考技能

文章目录 1月1. 任意输入一个3位整数&#xff08;100~999&#xff0c;包含100与999&#xff09;&#xff0c;判断输入的整数是否是质数&#xff0c;如果是质数则输出是质数&#xff0c;否则输出不是质数2.“降序数”是指一个自然数的低位数字不大于高位数字的数。例如&#xff…

Python 使用 PyQt5 设计一个查询IP对话框程序

当前环境&#xff1a;Win10 x64 Python 3.8.10 PyQt5.15.2 PyQt-tools5.15.9.33 1 打开 designer.exe ,新建一个 Dialog without Buttons , 设计窗体。 C:\Python\Python38-32\Lib\site-packages\qt5_applications\Qt\bin\designer.exe 2 使用命令转换为 py C:\Python\Pyth…

【C++从练气到飞升】06---重识类和对象

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 ⛳️推荐 一、再谈构造函数 1. 构造函数体赋值 2. 初始化列表 每个成员变量在初始化列表中只能出现一次--初始化只能初始…

电饭煲/电磁炉/空调/机顶盒显示驱动芯片特点与相关型号推荐

电饭煲、电磁炉、空调和机顶盒等家用电器通常都包括数码管或LED显示&#xff0c;用于显示时间、温度、设置等信息。这些芯片通常具有多位数码管或LED的支持、亮度控制、多种字符和符号的显示、低功耗设计等功能。 电饭煲、电磁炉、空调和机顶盒等家用电器的显示驱动芯片通常是…

Docker安装配置

1. 安装docker-ce sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-ce sudo systemctl enable docker 2. 设置代理 参照&#xff1a;https://docs.docker.com/config/daemon/systemd/#httpht…