采用链表数据结构实现一“图书管理系统〞,为用户提供管理和查询服务。 图书信息包括8个数据项:书名,ISBN、作者、出版社、出版时间,入库时间, 库存量(图书馆购买此书的数量),借阅数(被借阅的数量)等信息。完成以下 操作: (1)录入:图书信息(至少10条记录): (2)删除:删除某一本图书的信息; (3)修改:修改某一本图书的信息: (4)查询:根据书名或图书ISBV等查询图书信息(查询方法不限)。 (5)借书:借出一本书,该书的借阅数增加一本。 (6)还书:还回一本书,该书的借阅数减少一本。 (7)统计:统计所有借出的图书数目,即所有图书借阅数之和。 (8)输出:输出所查询图书的信息,要求格式清晰,方便查看。

时间: 2023-11-28 12:49:24 浏览: 23
这是一道比较典型的图书管理系统的编程题目,可以用链表数据结构来实现。下面是一份C++示例代码,供您参考: ```c++ #include <iostream> #include <string> using namespace std; // 定义图书信息结构体 struct BookInfo { string bookName; // 书名 string ISBN; // ISBN string author; // 作者 string publisher; // 出版社 string publishTime; // 出版时间 string storeTime; // 入库时间 int storage; // 库存量 int borrow; // 借阅数 BookInfo* next; // 下一本书的指针 }; // 定义图书管理系统类 class BookManager { public: BookManager() { head = NULL; bookCount = 0; } ~BookManager() { BookInfo* current = head; while (current != NULL) { BookInfo* temp = current->next; delete current; current = temp; } } // 添加图书信息 void addBookInfo() { BookInfo* book = new BookInfo; cout << "请输入书名:"; cin >> book->bookName; cout << "请输入ISBN:"; cin >> book->ISBN; cout << "请输入作者:"; cin >> book->author; cout << "请输入出版社:"; cin >> book->publisher; cout << "请输入出版时间:"; cin >> book->publishTime; cout << "请输入入库时间:"; cin >> book->storeTime; cout << "请输入库存量:"; cin >> book->storage; cout << "请输入借阅数:"; cin >> book->borrow; book->next = NULL; if (head == NULL) { head = book; } else { BookInfo* current = head; while (current->next != NULL) { current = current->next; } current->next = book; } bookCount++; cout << "添加成功!" << endl; } // 删除图书信息 void deleteBookInfo() { string bookName; cout << "请输入要删除的书名:"; cin >> bookName; BookInfo* current = head; BookInfo* prev = NULL; while (current != NULL) { if (current->bookName == bookName) { if (prev == NULL) { head = current->next; } else { prev->next = current->next; } delete current; bookCount--; cout << "删除成功!" << endl; return; } prev = current; current = current->next; } cout << "未找到该书籍!" << endl; } // 修改图书信息 void modifyBookInfo() { string bookName; cout << "请输入要修改的书名:"; cin >> bookName; BookInfo* current = head; while (current != NULL) { if (current->bookName == bookName) { cout << "请输入新的ISBN:"; cin >> current->ISBN; cout << "请输入新的作者:"; cin >> current->author; cout << "请输入新的出版社:"; cin >> current->publisher; cout << "请输入新的出版时间:"; cin >> current->publishTime; cout << "请输入新的入库时间:"; cin >> current->storeTime; cout << "请输入新的库存量:"; cin >> current->storage; cout << "请输入新的借阅数:"; cin >> current->borrow; cout << "修改成功!" << endl; return; } current = current->next; } cout << "未找到该书籍!" << endl; } // 查询图书信息 void queryBookInfo() { string keyword; cout << "请输入查询关键字:"; cin >> keyword; BookInfo* current = head; while (current != NULL) { if (current->bookName == keyword || current->ISBN == keyword) { cout << "书名:" << current->bookName << endl; cout << "ISBN:" << current->ISBN << endl; cout << "作者:" << current->author << endl; cout << "出版社:" << current->publisher << endl; cout << "出版时间:" << current->publishTime << endl; cout << "入库时间:" << current->storeTime << endl; cout << "库存量:" << current->storage << endl; cout << "借阅数:" << current->borrow << endl; return; } current = current->next; } cout << "未找到该书籍!" << endl; } // 借出图书 void borrowBook() { string bookName; cout << "请输入要借阅的书名:"; cin >> bookName; BookInfo* current = head; while (current != NULL) { if (current->bookName == bookName) { if (current->storage > 0) { current->storage--; current->borrow++; cout << "借阅成功!" << endl; return; } else { cout << "库存不足,无法借阅!" << endl; return; } } current = current->next; } cout << "未找到该书籍!" << endl; } // 归还图书 void returnBook() { string bookName; cout << "请输入要归还的书名:"; cin >> bookName; BookInfo* current = head; while (current != NULL) { if (current->bookName == bookName) { if (current->borrow > 0) { current->borrow--; current->storage++; cout << "归还成功!" << endl; return; } else { cout << "该书未被借出,无法归还!" << endl; return; } } current = current->next; } cout << "未找到该书籍!" << endl; } // 统计借出的图书数目 void countBorrow() { int totalBorrow = 0; BookInfo* current = head; while (current != NULL) { totalBorrow += current->borrow; current = current->next; } cout << "借出的图书数目为:" << totalBorrow << endl; } private: BookInfo* head; // 头节点指针 int bookCount; // 图书数量 }; int main() { BookManager manager; int choice = 0; while (true) { cout << "请选择操作:" << endl; cout << "1. 添加图书信息" << endl; cout << "2. 删除图书信息" << endl; cout << "3. 修改图书信息" << endl; cout << "4. 查询图书信息" << endl; cout << "5. 借出图书" << endl; cout << "6. 归还图书" << endl; cout << "7. 统计借出的图书数目" << endl; cout << "0. 退出" << endl; cin >> choice; switch (choice) { case 1: manager.addBookInfo(); break; case 2: manager.deleteBookInfo(); break; case 3: manager.modifyBookInfo(); break; case 4: manager.queryBookInfo(); break; case 5: manager.borrowBook(); break; case 6: manager.returnBook(); break; case 7: manager.countBorrow(); break; case 0: return 0; default: cout << "输入错误,请重新输入!" << endl; break; } } return 0; } ``` 在这份代码中,我们定义了一个 `BookManager` 类来实现图书管理系统。在类中,我们使用了链表数据结构来存储图书信息,每本书的信息都被封装在一个 `BookInfo` 结构体中,同时包含了一个指向下一本书的指针。在类中,我们实现了添加、删除、修改、查询、借出、归还、统计等操作,用户可以通过终端输入来进行操作。

相关推荐

最新推荐

recommend-type

C语言数据结构实现链表逆序并输出

主要介绍了C语言数据结构实现链表逆序并输出的相关资料,需要的朋友可以参考下
recommend-type

数据结构实验报告之一元多项式求和(链表)报告2.doc

把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。 实验内容: 1.问题描述: 一元多项式求和——把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。
recommend-type

《图书管理系统》数据结构课设报告(1).doc

数据结构期末大作业,题目是图书管理系统,只完成了图书管理系统的基本功能,使用C语言结构体链表等知识。
recommend-type

C语言实现食堂就餐管理系统(带链表)

主要为大家详细介绍了C语言实现食堂就餐管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言:一元多项式加减法运算(链表 附答案).docx

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

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

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