任务1:图书管理系统采用链表数据结构实现一“图书管理系统”,为用户提供管理和查询服务。图书信息包括8数据项:书名,ISBN、作者、出版社、出版时间,入库时间,库存量(图书馆购买此书的数量),借阅数(被借阅的数量等信息。完成以下操作:(1)录入:图书信息(至少10条记录);(2)删除:删除某一本图书的信息;(3)修改:修改某一本图书的信息;(4)查询:根据书名或图书ISBN等查询图书信息(查询方法不限)。(5)借书:借出一本书,该书的借阅数增加一本。(6)还书:还回一本书,该书的借阅数减少一本。(7)统计:统计所有借出的图书数目,即所有图书借阅数之和。(8)输出:输出所查询图书的信息,要求格式清晰,方便查看。程序要添加适当的注释,程序的书写要采用缩进格式。(2)程序要具有健壮性,即当输入非法时,程序也能适当地做出反应。(3)程序要有操作菜单,在程序运行时可根据相应的菜单提示进行操作。

时间: 2023-11-28 07:48:50 浏览: 93
以下是基于链表数据结构实现的图书管理系统的代码实现: ```python class Book: def __init__(self, book_name, isbn, author, publisher, publish_time, storage_time, stock, borrow): self.book_name = book_name self.isbn = isbn self.author = author self.publisher = publisher self.publish_time = publish_time self.storage_time = storage_time self.stock = stock self.borrow = borrow class BookLinkedList: def __init__(self): self.head = None self.tail = None self.size = 0 def append(self, book): if self.head is None: self.head = book self.tail = book else: self.tail.next = book self.tail = book self.size += 1 def search_by_name(self, name): current = self.head while current: if current.book_name == name: return current current = current.next return None def search_by_isbn(self, isbn): current = self.head while current: if current.isbn == isbn: return current current = current.next return None def remove(self, book): current = self.head previous = None while current: if current == book: if previous: previous.next = current.next else: self.head = current.next if current.next is None: self.tail = previous self.size -= 1 return True previous = current current = current.next return False def borrow_book(self, name): book = self.search_by_name(name) if book is not None and book.stock > 0: book.stock -= 1 book.borrow += 1 return True return False def return_book(self, name): book = self.search_by_name(name) if book is not None: book.stock += 1 book.borrow -= 1 return True return False def total_borrowed(self): count = 0 current = self.head while current: count += current.borrow current = current.next return count def display(self): current = self.head while current: print("书名:", current.book_name) print("ISBN:", current.isbn) print("作者:", current.author) print("出版社:", current.publisher) print("出版时间:", current.publish_time) print("入库时间:", current.storage_time) print("库存量:", current.stock) print("借阅数:", current.borrow) print() current = current.next def main(): book_list = BookLinkedList() book1 = Book("Python编程从入门到实践", "978-7-121-29490-3", "Eric Matthes", "人民邮电出版社", "2016-11-1", "2016-11-2", 10, 0) book_list.append(book1) book2 = Book("流畅的Python", "978-7-115-49674-4", "Luciano Ramalho", "人民邮电出版社", "2018-1-1", "2018-1-2", 5, 0) book_list.append(book2) book3 = Book("从0开始学Python爬虫", "978-7-115-49674-5", "张勇", "人民邮电出版社", "2019-1-1", "2019-1-2", 8, 0) book_list.append(book3) book4 = Book("Python数据分析", "978-7-121-32011-1", "Wes McKinney", "机械工业出版社", "2019-10-1", "2019-10-2", 12, 0) book_list.append(book4) book5 = Book("Python网络爬虫", "978-7-121-30139-0", "崔庆才", "电子工业出版社", "2019-3-1", "2019-3-2", 6, 0) book_list.append(book5) book6 = Book("Python编程艺术", "978-7-121-30256-4", "Stuart Loyer", "电子工业出版社", "2019-4-1", "2019-4-2", 3, 0) book_list.append(book6) book7 = Book("Python机器学习", "978-7-111-61084-8", "Sebastian Raschka", "人民邮电出版社", "2017-11-1", "2017-11-2", 7, 0) book_list.append(book7) book8 = Book("Python深度学习", "978-7-121-33687-8", "Francois Chollet", "人民邮电出版社", "2018-11-1", "2018-11-2", 4, 0) book_list.append(book8) book9 = Book("Python数据可视化", "978-7-121-30673-9", "Hadley Wickham", "机械工业出版社", "2019-7-1", "2019-7-2", 9, 0) book_list.append(book9) book10 = Book("Python自然语言处理", "978-7-121-34518-4", "Steven Bird", "人民邮电出版社", "2019-12-1", "2019-12-2", 11, 0) book_list.append(book10) while True: print("1. 录入图书信息") print("2. 删除图书信息") print("3. 修改图书信息") print("4. 查询图书信息") print("5. 借出图书") print("6. 归还图书") print("7. 统计借出图书总数") print("8. 输出所有图书信息") print("0. 退出") choice = input("请输入操作码:") if choice == "1": book_name = input("请输入书名:") isbn = input("请输入ISBN:") author = input("请输入作者:") publisher = input("请输入出版社:") publish_time = input("请输入出版时间:") storage_time = input("请输入入库时间:") stock = int(input("请输入库存量:")) borrow = int(input("请输入借阅数:")) book = Book(book_name, isbn, author, publisher, publish_time, storage_time, stock, borrow) book_list.append(book) print("图书信息录入成功!") elif choice == "2": name = input("请输入要删除的图书名:") book = book_list.search_by_name(name) if book is not None: book_list.remove(book) print("图书信息删除成功!") else: print("图书信息不存在!") elif choice == "3": name = input("请输入要修改的图书名:") book = book_list.search_by_name(name) if book is not None: book_name = input("请输入书名:") isbn = input("请输入ISBN:") author = input("请输入作者:") publisher = input("请输入出版社:") publish_time = input("请输入出版时间:") storage_time = input("请输入入库时间:") stock = int(input("请输入库存量:")) borrow = int(input("请输入借阅数:")) book.book_name = book_name book.isbn = isbn book.author = author book.publisher = publisher book.publish_time = publish_time book.storage_time = storage_time book.stock = stock book.borrow = borrow print("图书信息修改成功!") else: print("图书信息不存在!") elif choice == "4": keyword = input("请输入要查询的书名或ISBN:") book = book_list.search_by_name(keyword) if book is not None: print("查询结果如下:") print("书名:", book.book_name) print("ISBN:", book.isbn) print("作者:", book.author) print("出版社:", book.publisher) print("出版时间:", book.publish_time) print("入库时间:", book.storage_time) print("库存量:", book.stock) print("借阅数:", book.borrow) print() else: book = book_list.search_by_isbn(keyword) if book is not None: print("查询结果如下:") print("书名:", book.book_name) print("ISBN:", book.isbn) print("作者:", book.author) print("出版社:", book.publisher) print("出版时间:", book.publish_time) print("入库时间:", book.storage_time) print("库存量:", book.stock) print("借阅数:", book.borrow) print() else: print("图书信息不存在!") elif choice == "5": name = input("请输入要借出的图书名:") if book_list.borrow_book(name): print("借出成功!") else: print("借出失败!") elif choice == "6": name = input("请输入要归还的图书名:") if book_list.return_book(name): print("归还成功!") else: print("归还失败!") elif choice == "7": count = book_list.total_borrowed() print("借出图书总数为:", count) elif choice == "8": book_list.display() elif choice == "0": print("谢谢使用!") break else: print("操作码输入有误,请重新输入!") if __name__ == "__main__": main() ``` 在这个程序中,我们定义了一个 `Book` 类来表示图书信息,包括书名、ISBN、作者、出版社、出版时间、入库时间、库存量和借阅数等信息。然后我们又定义了一个基于链表数据结构的 `BookLinkedList` 类来管理图书信息。 在 `BookLinkedList` 类中,我们实现了以下方法: - `append(book)`:向链表中添加一本图书。 - `search_by_name(name)`:根据书名查找图书信息。 - `search_by_isbn(isbn)`:根据ISBN查找图书信息。 - `remove(book)`:删除一本图书的信息。 - `borrow_book(name)`:借出一本图书。 - `return_book(name)`:归还一本图书。 - `total_borrowed()`:统计所有借出的图书数目。 - `display()`:输出所有图书信息。 在程序运行时,我们通过一个操作菜单来提供用户管理和查询图书信息的服务,包括录入、删除、修改、查询、借出、归还、统计和输出等功能。 为了保证程序的健壮性,我们在代码中添加了一些错误处理机制,比如在用户输入非法操作码时,程序会提示用户重新输入;在用户查询不存在的图书信息时,程序会给出相应的提示信息。
阅读全文

相关推荐

最新推荐

recommend-type

数据结构课程设计—图书借阅管理系统的设计与实现

图书管理系统采用二叉树排序作为索引表,因为二叉树结构能够高效地进行插入、查找和删除操作,特别适合图书的序列号查询。当用户需要寻找特定的书籍时,可以通过书的序列号进行精确查找,这通常通过二分查找算法来...
recommend-type

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

本项目的选题旨在实现一个基本的图书管理系统,其核心功能包括图书的添加、删除、查询和修改。这些功能的实现要求学生深入理解链表数据结构,因为链表在动态数据管理中具有灵活性和高效性。此外,C语言作为系统级...
recommend-type

图书管理系统《数据结构课程设计报告》

图书管理系统是一种常见的应用软件,主要用于对图书馆内的图书资源进行高效管理。在《数据结构课程设计报告》中,学生们被要求设计这样一个系统,以实现多种功能,包括图书入库、排序、查找、删除、借阅和归还。这些...
recommend-type

图书管理系统课程设计说明书.doc

《图书管理系统课程设计说明书》是针对数据结构课程设计的一份详细文档,旨在通过设计和实现一个图书管理系统,帮助学生深入理解和应用数据结构知识。该设计的主要目标是让学生掌握数据结构和算法的设计技巧,同时...
recommend-type

数据结构图书管理系统实验报告,一起分享

在这个数据结构图书管理系统实验报告中,我们探讨了一个用于管理图书借阅和库存的计算机系统。系统的核心在于数据结构的设计和实现,主要包括图书链表和读者链表,以及一系列与之相关的功能。 首先,每种图书的登记...
recommend-type

Elasticsearch核心改进:实现Translog与索引线程分离

资源摘要信息:"Elasticsearch是一个基于Lucene构建的开源搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开源项目发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。" "Elasticsearch的索引线程是处理索引操作的重要部分,负责处理数据的写入、更新和删除等操作。但是,在处理大量数据和高并发请求时,如果索引线程处理速度过慢,就会导致数据处理的延迟,影响整体性能。因此,Elasticsearch采用了事务日志(translog)机制来提高索引操作的效率和可靠性。" "Elasticsearch的事务日志(translog)是一种持久化存储机制,用于记录所有未被持久化到分片中的索引操作。在发生故障或系统崩溃时,事务日志可以确保所有索引操作不会丢失,保证数据的完整性。每个分片都有自己的事务日志文件。" "在Elasticsearch的早期版本中,事务日志的操作和索引线程的操作是在同一个线程中完成的,这可能会导致性能瓶颈。为了解决这个问题,Elasticsearch将事务日志的操作从索引线程中分离出去,使得索引线程可以专注于数据的索引操作,而事务日志的操作可以独立地进行。这样可以大大提高了Elasticsearch的索引性能。" "但是,事务日志的操作是独立于索引操作的,这就需要保证事务日志的操作不会影响到索引操作的性能。因此,在将事务日志从索引线程分离出去的同时,Elasticsearch也引入了一些优化策略,比如批量写入事务日志,减少磁盘I/O操作,以及优化事务日志的数据结构,提高读写效率等。" "需要注意的是,虽然事务日志的分离可以提高索引操作的性能,但是也会增加系统的复杂度和维护难度。因此,开发者在使用这个功能时,需要充分理解其原理和影响,才能确保系统的稳定运行。" "此外,由于这个功能还处于测试和学习阶段,尚未被广泛应用于生产环境,所以开发者在使用时需要谨慎,避免对生产环境造成影响。" "总的来说,Elasticsearch的事务日志的分离是一个重要的优化,可以大大提升索引操作的性能,但是在使用时也需要充分考虑其带来的影响,才能确保系统的稳定运行。"
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

病房呼叫系统设计基础:7个关键架构策略让你一步入门

![病房呼叫系统设计基础:7个关键架构策略让你一步入门](https://zektek.com.mx/wp-content/uploads/2021/03/diagram-enfermeria.jpg) # 摘要 本文对病房呼叫系统进行了深入的概述、需求分析、架构设计、功能实现以及实践应用案例的探讨。通过分析系统架构的重要性、设计原则、模块划分和数据流,确保了系统的高效运行和优化。本文进一步探讨了呼叫信号传输技术、显示与反馈机制、系统安全性与可靠性设计,并分析了系统部署环境、安装调试流程和维护升级策略。最后,文章展望了病房呼叫系统的未来发展趋势,包括智能化、技术融合以及法规遵从与伦理考量,并
recommend-type

Selenium如何获取Shadow DOM下的元素属性?

在Selenium中,获取Shadow DOM下的元素属性通常涉及到两步:首先找到元素,然后访问它的属性。由于Shadow DOM元素默认是不可见的(对于非JavaScript开发者),所以我们需要用JavaScript脚本来获取其内容。 下面是一个示例,展示如何通过Selenium的`execute_script`函数获取Shadow DOM元素的属性: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from sel
recommend-type

分享个人Vim与Git配置文件管理经验

资源摘要信息:"conffiles:我的vim和git配置文件" 在给定的文件信息中,我们可以梳理出一些关键知识点,这些知识点主要涉及到了Vim编辑器和Git版本控制系统,同时涉及到了Linux环境下的一些文件操作知识。 首先,文件标题提到了"conffiles",这通常是指配置文件(configuration files)的缩写。配置文件是软件运行时用于读取用户设置或其他运行参数的文件,它们允许软件按照用户的特定需求进行工作。在本例中,这些配置文件是与Vim编辑器和Git版本控制系统相关的。 Vim是一种流行的文本编辑器,是UNIX系统中vi编辑器的增强版本。Vim不仅支持代码编辑,还支持插件扩展、多种模式(命令模式、插入模式、视觉模式等)和高度可定制化。在这个上下文中,"我的vim"可能指的是使用者为Vim定制的一套配置文件,这些配置文件可能包含键位映射、颜色主题、插件设置、用户界面布局和其他个性化选项。 Git是一个版本控制系统,用于跟踪计算机文件的更改和协作。Git是分布式版本控制,这意味着每个开发者都有一个包含完整项目历史的仓库副本。Git常用于代码的版本控制管理,它允许用户回滚到之前的版本、合并来自不同贡献者的代码,并且有效地管理代码变更。在这个资源中,"git conffiles"可能表示与Git用户相关的配置文件,这可能包括用户凭证、代理设置、别名以及其他一些全局Git配置选项。 描述部分提到了使用者之前使用的编辑器是Vim,但现在转向了Emacs。尽管如此,该用户仍然保留了以前的Vim配置文件。接着,描述中提到了一个安装脚本命令"sh ./.vim/install.sh"。这是一个shell脚本,通常用于自动化安装或配置过程。在这里,这个脚本可能用于创建符号链接(symbolic links),将旧的Vim配置文件链接到当前使用的Emacs配置文件夹中,使用户能够继续使用他们熟悉且习惯的Vim配置。 标签"Vimscript"表明这是一个与Vim脚本相关的资源,Vim脚本是一种专门用于自定义和扩展Vim功能的编程语言。Vimscript可以用于编写宏、自定义函数、插件等。 最后,文件名称列表"conffiles-master"可能表明这个压缩包文件包含了一系列的主配置文件。在Git版本控制的术语中,"master"(现在通常称为"main")分支是项目仓库的默认分支。这暗示了这些配置文件可能是该用户项目的主配置文件,这些配置文件被包含在名为"conffiles-master"的压缩包中。 综上所述,这个资源可能是一个集合了Vim编辑器和Git版本控制系统的个人配置文件的压缩包,附带一个用于符号链接旧Vim配置的安装脚本,它能够帮助用户在转向其他工具时仍然能够使用之前的个性化设置。这个资源对于想要了解如何管理和迁移配置文件的用户具有一定的参考价值。