用B树做的图书管理系统
数据结构之B树和B树B树和B树的特性应用场景和性能优势
数据结构之B树和B树B树和B树的特性应用场景和性能优势B树和B+树:特性、应用场景和性能优势在计算机科学中,数据结构是指组织和存储数据的方式,而B树(B-Tree)和B+树(B+ Tree)是常用的数据结构之一。
本文将重点介绍B树和B+树的特性、应用场景和性能优势。
一、B树和B+树的特性1. B树特性B树是一种多叉树,它的每个节点可以拥有多个子节点。
B树的特点如下:- 根节点至少有两个子节点,除非它是叶子节点。
- 所有叶子节点在同一层级上,也就是说,B树是平衡的。
- 节点中的键值按照升序排列。
- 节点的子节点数可以超过2。
2. B+树特性B+树是B树的一种变体,相比B树,B+树的特点更适合数据库索引的实现。
B+树的特点如下:- 非叶子节点只存储键值信息,数据只存储在叶子节点。
- 所有叶子节点通过链表连接在一起,方便范围查询。
- 叶子节点之间通过指针相互连接,提高查找效率。
二、B树和B+树的应用场景1. B树应用场景- 文件系统:B树可用于文件系统的索引结构,方便文件的快速定位和存取。
- 数据库:B树可以作为数据库索引的存储结构,加快数据库查询的速度。
- 图书馆管理系统:B树可用于图书馆系统中书籍索引的实现,便于查找和管理。
2. B+树应用场景- 数据库:B+树是关系型数据库中常用的索引结构,能够提高查找效率和范围查询的性能。
- 文件系统:B+树可以作为文件系统的块索引结构,方便大规模文件的管理与存取。
- 排序算法:B+树可以用于外部排序的算法实现,提高排序的效率。
三、B树和B+树的性能优势1. B树的性能优势- 查询性能好:B树的节点可以存储多个键值,使得在查找过程中减少IO操作,提高查询效率。
- 范围查询性能优越:B树是平衡的,叶子节点之间通过指针相互连接,可方便实现范围查询。
2. B+树的性能优势- 更高的存储密度:B+树的非叶子节点只存储键值信息,不存储数据,因此可以存储更多的键值,提高存储密度。
基于B-S上的班级图书管理系统研究性学习设计方案探索
基于B/S上的班级图书管理系统研究性学习设计方案探索[摘要]“授人以鱼,不如授人以渔”。
[关键词]研究性学习方案 b/s 图书管理系统一、课题背景、意义及介绍1.背景说明为了鼓励班上的同学能多读书,班上同学提议将大家的私人书籍共享出来给班级,交给学习委员或者班长管理,想要看的同学直接找管理者借就可以了,期末的时候再把大家贡献出来的书返还给本人,老师可以根据同学提供的书籍的数量和质量给予适当的操行分,对于看了别人的书又发表读后感的,老师也可以加操行分给予鼓励,这样既能充分利用大家闲置的书籍在班上营造积极读书的氛围,又对那些平时性格比较内向不容易加操行分的同学提供了一个补救的机会,这个提议得到了全班大多数的同学的赞同,班主任也觉得这个建议不错,服务了班级又加深了同学们之间的感情,确实值得去做。
没有想到的是大家太踊跃了,一下子提供了堆成山的书,班干部管理起来超级麻烦,既要登记捐书者是谁,又要明确什么时候归还,还要统计到时间了有哪些同学的书没有如期归还等等问题,再后来发现,其实本校很多班级都存在这些问题,如是便想到何不利用我们自己的专业开发一个班级图书管理系统呢?既可以解决班级目前出现的问题又可以锻炼一下大家的专业能力,于是便产生了本课题的开发。
2.课题的意义本班学生是四年级学生,还有一年就要毕业,作为一名班主任又是一名专业老师,深知毕业设计的难度和重要性,时刻想着提前给学生一个加强锻炼的机会,本课题的研究是一个很好的时机,学生可以从我们目前遇到的实际需求出发,完整的走一遍软件开发的流程,再合适不过了,而且因为是以解决目前班级图书管理问题为出发点的,学生做成之后更有成就感,锻炼了学生的专业能力,自主研究学习的能力,有很大的实际意义。
3.课题介绍本课题主要是为解决班级图书管理难的问题,所以本课题研究的成果是一个能解决问题的项目,也就是一个工具,可以方便管理者便捷高效的完成图书管理工作。
结合本课题产生的背景和调研其他班级的情况,本课题至少应该解决的问题是,一、登记捐书的同学的信息,包括名字,所捐书名称,捐书时间等,二、登记借书的同学的信息,包括借书者姓名,所借书名,借书者联系电话,归还时间等,三、自动提醒功能,包括根据登记的借书时间,提醒管理者到时间了没有归还书籍的同学的名单,未归还的书的名称等。
vb图书管理系统课程设计
vb图书管理系统课程设计VB课程设计报告题目:图书管理系统学院:信息工程学院专业:信息工程(信息安全方向)班级:1132101姓名:赖玉蕾学号: 30210102指导老师:魏树权目录摘要关键字一系统规划1.1系统功能描述1.2功能模块划分1.3 E-R图二系统界面的开发2.1登录界面2.2用户管理界面三系统的详细设计3.1登录界面代码3.2各功能代码四心得体会及认识致谢摘要随着人类社会的发展,人类对知识的需求也不断地增长。
在这种形势下,书籍就渐渐地成为人们获取并增长知识的主要途径,而图书馆就自然而然地在人们的生活中占据了一定的位置。
如何科学地管理图书馆不但关系到读者求知的方便程度,也关系到绘本馆的发展,因此,开发一套完善的图书管理系统就必不可少了,图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
经过分析,使用 Microsoft公司的Visual Basic6.0为开发工具,利用其提供的各种面向对象的可视化开发平台作为开发工具,采用面向对象技术,图形化的应用开发环境,特别是它有一个功能极其强大的集成环境提供给开发人员,使得开发人员可经过菜单、界面、图形浏览工具、对话框以及嵌入的各种生成器来轻松地完成各种复杂的操作。
开发过程中不断修正和改进,直到形成用户满意的可行系统。
本文介绍了在Visual Basic6.0环境下采用"自上而下地总体规划,自下而上地应用开发"的策略开发本系统的详细过程,提出实现图书信息管理、资源共享的基本目标,从而推动迈向数字化图书馆的步伐,并阐述系统结构设计和功能设计,从图书的入库登记、借阅登记到查询浏览,形成了一个整体自动化管理模式,从软件工程的角度进行了科学而严谨的阐述。
关键词:图书管理系统;借阅;浏览;编辑;Visual Basic 6.0一系统规划1.1主要功能录入、删除、修改及查询1.2模块结构划分此功能分为几个模块读者种类信息:读者基本信息书籍信息借书信息还书信息1.3建立如下E-R图。
基于VB的大学图书管理系统的设计
基于VB的大学图书管理系统的设计摘要:为了实现图书馆的信息化管理,提出了以visual basic6.0为编程语言,将access 2003数据库作为后台数据库,设计一个现代化的图书管理系统。
结果表明:该系统便于图书的管理和统计,为对智能化管理信息提供了一个新的方法。
关键词:图书管理;数据库;access 2003;visual basic1.引言传统的图书管理对象是书,随着计算机科学的发展,大学的图书馆的藏书量越来越多,这样的管理方法已经与时代脱轨了。
21世纪是一个信息化的时代,这样的管理系统必然遭到淘汰,取代它的是以计算机为核心的信息系统。
信息系统的管理包括科学的管理和规范的系统设计,可以对信息进行采集、传送、编辑、修改等等,这样的系统还可以对数据进行存储、传递等操作。
--!> 开发图书馆信息管理系统的目的是可以将大量的书籍的相关信息存储在电脑中,便于图书的管理与维护,使图书的反复利用率得到改善。
2.系统设计图书馆最大的特点就是藏书过万,数量庞大的图书自然需要人为细心的管理,可是,根据传统的人为管理方法不得当,往往造成大量图书的丢失、损坏,所以,开发出一个可以高效的信息管理系统是一种趋势,这样的系统不但可以便于图书的管理,更是为借阅者提高更好的便利条件,而且,该系统拥有友好的交互界面,高效的运行速度和系统维护。
2.1 需求分析图书管理系统是为了借阅者而服务的,管理该系统的正是图书馆管理人员。
为了方便图书借阅者可以直接查询所需的书籍信息,本系统有一个登陆系统,需要图书借阅者(大学生)的个人信息,包括学号和密码,初始密码都是自己的学号,学生可以根据自身需要对其进行设置,在一定程度上,保证了学生个人的隐私。
学生-借阅者,只是拥有查询书籍的权利,可以知道所需书籍目前的位置,库存量,是否可以借阅等少量信息。
信息管理系统希望服务的对象-借阅者,而在后台操作一切的则是图书馆者。
因为图书馆书籍的数目过多,要求数据库一定可维护性,所以,图书管理者的任务艰巨,在为各类图书借阅服务的同时,还要维护图书馆的秩序。
基于B/S架构的图书管理系统
d vl me t n i n e tIdsusssmei lm n t ntcnq e fh yt ad# e erf e n se t eeo n v o m n.t i se o e e t i h iuso ess m p e r c mp ao e t e n yst e nmet pcs h i a .
维普资讯
科拄僖JHale Waihona Puke 10图书 与档案 管理 0
S IN E IF R TO CE C N O MA I N
20 06年
第8 姗
基于 BS / 架构的图书管理系统
刘 志鹏 ( 南京 邮 电大 学计 算机 学院 江 苏
南京
2 00 l 10 3
到一个数据库连接 cnetn onco。通过该连接就 可以对数据库 中的表格 i 进行操作了 。最后需要将该 连接关 闭。 () 2 书籍评 价的显示 本 系统提供了一个 书籍 讨论 页面 。 老师和 同学 可 以评 价某 一本 书 的好坏 ,同 时交 流凌书 心得 。留言 保存 在 cm e I b 表中 。我们使用 R sl e 对象将 所有 对这本 书的评价 om n a1 T e eu S t t 取 出并加 以格式化显示。其关键代码如下 : Sr gbo N me=rq eteP rm tt b oN me1tmO tn ok a i eu sgtaa ee( ok a “ .i ; . ” r C netnenetnDi r naegtonco( netnt; onco nco= re i o l v Ma gr e netn oneoS ) .C ie i r
圈 1 圈书管理 系统体 系结构
基本 信息设置用 于初 始化整个 图书管理系统 .保存 系统 配置信 息。 书籍 管理包括图书管理和期刊管理两大模块。 读者管理 主要是借 书证管理模块 。 流通管理包括 图书流通和期刊流通两个部分 。 包括借 、 还及罚款等 。 统计分析管理包括各种查询功能 , 例如查询读者信息等 。 系统管理模块是整个系统的维护部分。 3 系统拓扑结构及 开发环境 的选捧 .
图书管理系统(VB)
摘要图书馆信息管理系统是一种在学校中常用的一种系统。
它从图书的入库登记到查询浏览,从读者的管理到图书的借阅,形成了一个整体自动化管理模式。
本论文以学校的图书馆为例。
系统主要有三个方面的内容:一方面是图书管理,主要包括新书入库图书整理图书信息的修改等方面。
一方面是图书借阅,主要包括图书的借阅和归还。
第三方面是信息查询,主要包括图书目录查询读者信息查询等。
论文设计以这三个方面展开,形成一套完整的图书馆信息管理系统。
本设计为图书管理系统,是根据图书馆,用户,管理员等的实际情况为基础,是数据库系统的开发。
把它们转变为有效的数据库设计。
把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。
因此本人结合开入式图书馆的要求,对数据库管理系统、SQL语言原理、VB 应用程序设计,VB数据库技术进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。
系统运行结果证明,本文所设计的图书管理系统可以满足借阅者、图书馆管理员的需要。
关键词:图书,Visualbasic6.0,ACCESS,借阅AbstractThe library information management system is one kind in the school the commonly used one kind of system. It goes into storage from the books registers to the inquiry browsing, from reader's management to books borrowing, has formed a whole automation management pattern. The present paper take the school library as an example. The system mainly has three aspects the contents: On the one hand is the books management, mainly includes the new book to go into storage books reorganization books information aspect and so on revision. On the one hand is the books borrows, mainly includes the books to borrow and to return. The third aspect is the information inquiry, mainly includes the library catalog to inquire the reader information inquiry and so on. The paper design launches by these three aspects, forms a set of complete libraries information management system.This design for the books management system management system, is acts according to the library, the user, the manager and so on the actual situation is a foundation, is the database system development. Transforms them into the effective database design. Transforms the design into the reality database, and these databases have the function to be complete, the high efficiency application.Therefore myself unify enter the type library the request, to the database management system, the SQL language principle, the VB application programming, the VB data bank technology has carried on the thorough study and the application, mainly completes to the books management system management system demand analysis, the function module division, the database pattern analysis, and from this has designed the database structure and the application procedure. The system movement result proved, this article designs the books management system management system may satisfied borrowing, librarian's need.Key word: The books, Visualbasic6.0, ACCESS, borrows目录摘要 (I)ABSTRACT ........................................................... I I 第一章绪论.. (1)1.1课题背景 (1)1.2课题来源和意义 (2)1.3国内外发展概况 (2)1.4系统可行性分析 (3)第二章系统开发技术 (5)2.1系统的架构 (5)2.2系统运行环境操作系统 (5)2.3系统开发环境 (5)2.4开发工具 (6)第三章总体设计 (9)3.1 系统调查 (9)3.2 数据字典 (10)3.3 软件模块结构设计 (11)3.4 数据库设计 (12)3.4.1 概念结构设计 (13)第四章系统实现 (17)4.1登录界面 (17)4.2 系统主界面 (18)4.3 模块功能的实现 (19)第五章结束语 (30)致谢 (31)参考文献 (32)第一章绪论1.1课题背景数据库应用系统开发简介在数据库应用系统开发之前,对开发数据库的基本概念应当了解,对数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。
用vb设计图书管理系统
用vb设计图书管理系统用vb设计图书管理系统VB课程设计报告目录摘要关键字一系统规划 1.1系统功能描述 1.2功能模块划分1.3 E-R图二系统界面的开发 2.1登录界面 2.2用户管理界面三系统的详细设计3.1登录界面代码 3.2各功能代码四心得体会及认识致谢摘要随着人类社会的发展,人类对知识的需求也不断地增长。
在这种形势下,书籍就渐渐地成为人们获取并增长知识的主要途径,而图书馆就自然而然地在人们的生活中占据了一定的位置。
如何科学地管理图书馆不但关系到读者求知的方便程度,也关系到绘本馆的发展,因此,开发一套完善的图书管理系统就必不可少了,图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
经过分析,使用Microsoft公司的Visual Basic6.0为开发工具,利用其提供的各种面向对象的可视化开发平台作为开发工具,采用面向对象技术,图形化的应用开发环境,尤其是它有一个功能极其强大的集成环境提供给开发人员,使得开发人员可通过菜单、界面、图形浏览工具、对话框以及嵌入的各种生成器来轻松地完成各种复杂的操作。
开发过程中不断修正和改进,直到形成用户满意的可行系统。
本文介绍了在Visual Basic6.0环境下采用“自上而下地总体规划,自下而上地应用开发“的策略开发本系统的详细过程,提出实现图书信息管理、资源共享的基本目标,从而推动迈向数字化图书馆的步伐,并阐述系统结构设计和功能设计,从图书的入库登记、借阅登记到查询浏览,形成了一个整体自动化管理模式,从软件工程的角度进行了科学而严谨的阐述。
关键词:图书管理系统;借阅;浏览;编辑;Visual Basic 6.0 一系统规划1.1主要功能录入、删除、修改及查询1.2模块结构划分此功能分为几个模块读者种类信息:读者基本信息书籍信息借书信息还书信息1.3建立如下E-R图图书管理系统基础信息维护用户信息用户登录退出更改密码读者管理读者信息图书管理图书信息期刊管理期刊信息查询读者查询用户借阅与借阅信息统计分析管理统计管理刷新添加删除修改添加刷新修改书号书名作者出版社状态二系统界面的开发2.1 用户登录用户登录界面1、输入账号与密码点击“登录” 直接登录进入管理界面。
基于B2S模式的高校图书管理系统
基于 B/S 模式的高校图书管理系统设计与实现摘要随着社会信息量的与日俱增,作为信息存储的主要媒体之一图书,数量、规模比以往任何时候都大的多,不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的图书进行更改就更加困难了。
因此我们选择开发一套完善的图书信息管理系统来对图书的借还信息进行管理, 有助于提交对图书的管理。
本系统是利用B/S 架构的图书管理系统,用于实现图书管理系统,信息化,简单化。
该系统采用Microsoft Visual Studio 2008为开发工具,利用现今比较流行的C#开发语言,以SQL Server 2005为存储数据库来进行系统开发,最终实现前台、后台两个方面的基本功能。
如:前台登录用户对图书馆中图书及自身借阅信息的查询等,后天管理员对读者的管理、修改、查询、添加,图书信息的管理、修改、查询、添加等基本功能。
关键词:图书管理B/S 、数据库第1章绪论1.1 选题背景随着信息社会的不断进步,经济和科技工作者的飞速发展,网络已成为新世纪的主要平台。
计算机科学不断的发展,给信息共享提供了有利的客观条件。
图书馆事业的巨大进步已为图书馆在新世纪的发展打下了坚实的基础。
全球信息化和高新技术的发展也为图书馆提供了更好的发展机遇,传统的单一以书本作为单元信息服务手段已不能满足读者的需求 ,现代化服务手段的实施势在必行。
随着社会的发展,信息社会的建立,图书馆开始冲破传统服务模式,紧密地配合社会需求,提供特色服务,有针对性的服务,不断提高读者的满意率。
UML对基于B/S模式的图书管理系统的分析与设计
UML对基于B/S模式的图书管理系统的分析与设计[摘要] 对基于B/S模式下的图书管理系统进行分析,运用UML的静态和动态模型图,对系统的分析结果进行建模。
图书管理系统运用计算机软件管理图书,能够迅速实现图书检索、可靠性能高、寿命长、存储量大和成本低等特点,提高了图书管理的效率,是实现UML对基于B/S模式的图书管理信息化、正规化管理的必然趋势。
[关键词]图书管理系统;建模;UML使用计算机软件对图书进行管理,减少了管理员的劳动,方便快捷。
图书管理系统提供了备份管理功能,不管是因为计算机病毒或者硬件原因导致的系统崩溃,都可以在片刻间把所有的数据通过备份管理恢复过来,相关用户权的限设定也很自由,避免了未授权的普通用户对图书或相关信息进行非法修改。
图书管理系统有屏幕保护的作用,可在用户离开后有效地防止别人修改数据。
操作简单灵活、易学易用、易于维护、界面清晰、功能强大、运行稳定快速、系统资源占用少。
下面就建模UML谈谈看法。
1UML对基于B/S模式1.1UML语言UML(UnifiedModelingLanguage)是软件系统的统一建模语言,是用来对软件密集系统进行可视化建模的一种语言。
UML的本意是要成为一种标准的统一语言,使得IT专业人员能够进行计算机应用程序的建模。
UML旨在为面向对象开发软件系统的产品进行说明、可视化、和编制文档的一种标准语言。
UML符号集只是一种语言而不是一种方法学,它提供了许多种类型的模型描述图,不需要任何正式的工作产品。
当这些图在某种给定的方法学中使用时,开发中的应用程序的更易被人理解。
把标准的UML图放进您需要的工作产品中,精通UML的软件管理人员就很容易加入您的项目并迅速进入角色。
UML图最常用的包括:软件用例图、软件类图、软件序列图、软件状态图、软件活动图、软件组件图和软件部署图。
[1]1.2B/S模式B/S模式应用系统由浏览器(Browser)和服务器(WebServer、OtherServer、MiddleWare)组成,数据(Data)和软件应用程序(App)都存储在服务器上,通过浏览器的下载功能,服务器上应用程序得到了动态的扩展,服务器具有多层结构,经过B/S系统处理的数据类型进行动态扩展。
基于B/S架构的图书管理系统的设计与实现
De ina d Re l a in o o kM a a e n se Ba e n B S Arht cu e sg n ai t fB o n g me t z o Sy t m s d o / c i t r e
( p rme to mp trS in ea dTeh lg , n nI stt f gn eigXin tn 4 1 1Chn ) De at n f Co ue ce c n c noo yHu a nt ueo ie r , a ga 1 , ia i En n 10
维普资讯
・
数 据 库 与 信 息 管 理 ・ ・ ・ ・ ・ ・
电脑 知 识 与 技 术
基于 B S架构 的图书管理系统 的设计 与实现 /
余 新 字 ( 南 工 程 学 院 计 算 机 与 科 学 技 术 系 , 南 湘 潭 4 10 ) 湖 湖 t 1 1 摘 要 : 书是 当今 社 会 的 重 要 资 源 . 图 书的 管理 也 因 为 图 书 的种 类 繁 多和 分 类 复 杂 而 变得 重要 和 复 杂 。本 文 分 析 了 图书 管 理 的 重 图 而 要 性 . 系统 选 型 上 做 了深 入探 讨 , 后 比较 了 B S与 C/ 在 然 / S结 构 的优 缺 点 , 后 采 用 A P技 术及 S ev r0 0设 计 和 开发 了一 个 B S 最 S QL S re2 0 /
A o t gA P a d S 2 0 ei dd v lpab o n g me t a do / rhtc r, dtern igitr c o . d pi S QL 0 0t d s na e e o k ma ae n s nB Sac et e a n n e aeis wn n n o g n o b e i u n h u n f sh
用B树做的图书管理系统
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<time.h>#define N10000#define TRUE1#define FALSE0#define OK1#define ERROR0#define INFEASIBLE-1 #define OVERFLOW-2 typedefint Status; typedefchar*string;#define m3//B-树的阶//书的结构体struct Book{unsignedint key; char bname[20];char writter[20]; unsignedint left; unsignedint total;}b[N];//B-树的存储结构typedef BookKeyType;typedefstruct BTNode{int keynum;struct BTNode*parent;KeyType key[m+1];struct BTNode*ptr[m+1];}BTNode,*BTree;//查找结果的存储结构体typedefstruct{BTNode*pt;int i;int tag;}Result;BTree root=NULL;void InBookMess(KeyType&book);void InBookKey(KeyType&book);void ShowBookMess(Book book);void ShowBTNode(BTree p);void display(BTree T);void KeyTypeCopy(KeyType&bak,KeyType k); int Search(BTree p,KeyType K);Result SearchBTree(BTree T,KeyType K); void Insert(BTree&q,int i,KeyType x,BTree ap);void split(BTree&q,int s,BTree&ap);void NewRoot(BTree&T,BTree p,KeyType x,BTree ap);Status InsertBTree(BTree&T,KeyType K);Status BorrowBook(BTree T,KeyType k);Status ReturnBook(BTree T,KeyType k);void save(BTree p);/*************************************************/void save(BTree p)//保存文件{FILE*fp;if((fp=fopen("book.txt","wb"))==NULL){printf("创建文件失败!\n\n");getchar();return;}for(int i=1;i<=p->keynum;i++){fprintf(fp,"%d%s%s%d%d\n",p->key[i].key,p->key[i].bname,p->key[i].writter,p ->key[i].left,p->key[i].total);}fclose(fp);}//读取文件void read()FILE*fp,fp1;if((fp=fopen("book.txt","rb"))==NULL&&(fp=fopen("user.txt","rb"))==NULL) {printf("读取文件失败!\n\n");getchar();return;}for(int i=1;;i++){if(fscanf(fp,"%d%s%s%d%d",&b[i].key,&b[i].bname,&b[i].writter,&b[i].left,&b [i].total)==EOF){ break; }InsertBTree(root,b[i]);}fclose(fp);}//复制结点,将某个结点的值复制到另外一个值上void KeyTypeCopy(KeyType&bak,KeyType k){bak.key=k.key;strcpy(bak.bname,k.bname);bak.left=k.left;bak.total=k.total;strcpy(bak.writter,k.writter);//在一个结点中查找元素,返回结点的位置int Search(BTree p,KeyType K){if(!p)return-1;int i=0;for(i=0;i<p->keynum&&p->key[i+1].key<=K.key;i++); return i;}//在m阶B树T上查找关键字K,返回结果(pt,i,tag) Result SearchBTree(BTree T,KeyType K){ BTree p,q;int found,i;Result R;p=T;q=NULL;found=FALSE;i=0;while(p&&!found){i=Search(p,K);if(i>0&&p->key[i].key==K.key)found=TRUE;else{q=p;p=p->ptr[i];}}if(found){R.pt=p;R.i=i;R.tag=1;}else{R.pt=q;R.i=i;R.tag=0;}return R;}//插入一条记录void Insert(BTree&q,int i,KeyType x,BTree ap){ int n=q->keynum;for(int j=n;j>i;j--){KeyTypeCopy(q->key[j+1],q->key[j]);q->ptr[j+1]=q->ptr[j];}KeyTypeCopy(q->key[i+1],x);q->ptr[i+1]=ap;if(ap)ap->parent=q;q->keynum++;}//分离结点void split(BTree&q,int s,BTree&ap){int i,j,n=q->keynum;ap=(BTree)malloc(sizeof(BTNode));ap->ptr[0]=q->ptr[s];for(i=s+1,j=1;i<=n;i++,j++){KeyTypeCopy(ap->key[j],q->key[i]);ap->ptr[j]=q->ptr[i];}ap->keynum=n-s;ap->parent=q->parent;for(i=0;i<=n-s;i++)if(ap->ptr[i])ap->ptr[i]->parent=ap;q->keynum=s-1;}//生成一个新的树结点void NewRoot(BTree&T,BTree p,KeyType x,BTree ap){ T=(BTree)malloc(sizeof(BTNode));T->keynum=1;//设置当前结点的元素个数T->ptr[0]=p;//设置左边结点的树根T->ptr[1]=ap;//设置右边的树根KeyTypeCopy(T->key[1],x);//将x元素的结点值复制到T的第一个元素中if(p)//当孩子不空的时候就设置当前结点为孩子的双亲p->parent=T;if(ap)ap->parent=T;T->parent=NULL;//当前结点的双亲为空}void ShowBTNode(BTree p){for(int i=1;i<=p->keynum;i++){printf("\t");printf("书号为:%d",p->key[i].key);printf("书名为:%5s",p->key[i].bname);printf("作者为:%5s",p->key[i].writter);printf("剩余量为:%5d",p->key[i].left);printf("总量为:%5d",p->key[i].total);printf("\n");}}Status InsertBTree(BTree&T,KeyType K){//在m阶B树T上结点*q的key[i]与key[i+1]之间插入关键字K。
基于B/S模式的图书管理信息系统的设计
L X ue i UAN V —l,D Zhi h n, —s a PAN on H g—z u ho
( n Unv ri f c i cuea dTe h oo y Xi n7 0 5 , ia xi iesy o ht tr n c n lg , 1 0 5 Chn ) a t Ar e a
,
lb ay sa tt e sm e tm e hes l ton fbo sm a ge nti f r ai yse ae n B/ ft e t r e ira c t cu e m od l lP i rr tf a h a i ,t o u i so ok na me n m ton s t m b sd o S o h h e ~te rhie t r o e S
关键 词 : S 7P技 术 ; / 模 式 ;QL数 据库 : 书管 理 信 息 系统 BS S 图
中 图分 类 号 : P 1 T 31
文 献 标 识 码 : A
பைடு நூலகம்
文 章 编 号 :0 9 3 4 (083 — 5 9 0 10 — 0 42 0 )4 14 — 2
VB计算机图书管理系统毕业设计
VB计算机图书管理系统毕业设计摘要在图书管理系统用计算机管理图书是一种计算机应用技术的创新,在计算机还未普及之前图书管理都是由图书管理人员手工记帐的方式来操作的.现在一般的图书馆都是采用计算机作为工具的实用的计算机图书管理程序来帮助图书馆管理员进行更有效的图书管理。
图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
关键词:图书,面向对象,软件工程,VB技术,Access数据库目录第1章绪论11.1系统开发背景11.2系统的可行性研究11.3系统实施计划2第2章VISUAL BASIC技术 32.1 VISUAL BASIC的简介和特点32.2数据库简介32.3本系统用到的主要技术42.3.1 VB技术42.3.2 Access数据库技术4第3章系统分析与总体设计 53.1 系统的需求分析53.1.1用户需求分析53.1.2 系统功能分析63.1.3 系统运行需求63.2 系统的设计73.2.1 目标设计73.2.2系统建设目标的可行性73.2.3系统模块划分73.3 系统结构8第4章数据库设计与维护84.1 数据库的设计84.2 数据库的维护104.3 数据库的具体设计10第5章系统详细设计与实现145.1系统登陆界面145.2系统主界面145.3各个子窗体代码165.3.1图书登记子窗体代码165.3.2图书借阅子窗体代码185.3.3增加用户子窗体代码195.3.4修改密码子窗体代码205.3.5查询子窗体代码215.3.6用户登录子窗体代码245.3.7查询借书信息子窗体代码255.3.8还书信息子窗体代码26第6章总结29致谢30参考文献31第1章绪论1.1系统开发背景在图书管理系统用计算机管理图书是一种计算机应用技术的创新,在计算机还未普及之前图书管理都是由图书管理人员手工记帐的方式来操作的.现在一般的图书馆都是采用计算机作为工具的实用的计算机图书管理程序来帮助图书馆管理员进行更有效的图书管理。
B树的原理及应用场景
B树的原理及应用场景B树是一种自平衡的树数据结构,通常用于数据库和文件系统中,能够高效地支持插入、删除和查找操作。
B树的原理和应用场景是数据库系统和文件系统设计中的重要内容,下面将详细介绍B树的原理及其应用场景。
一、B树的原理1. 结构特点B树是一种多路搜索树,每个节点可以包含多个子节点。
B树的特点包括:- 根节点至少有两个子节点。
- 每个非叶子节点有m个子节点,其中[m/2]到m个子节点非空。
- 每个节点中的关键字按递增顺序排列。
- 位于节点n的关键字同时也是节点n的子树的分界线。
2. 插入操作在B树中插入一个新的关键字时,首先找到合适的叶子节点,如果该节点未满,则直接插入;如果该节点已满,则进行节点分裂操作,将中间的关键字上移,并将左右子树分别作为新的子树。
3. 删除操作在B树中删除一个关键字时,首先找到包含该关键字的叶子节点,如果该节点关键字个数大于等于[m/2],则直接删除;如果小于[m/2],则进行节点合并操作,将该关键字从父节点中删除,并将左右子树合并为一个新的子树。
二、应用场景1. 数据库系统B树广泛应用于数据库系统中的索引结构,如MySQL、Oracle等数据库管理系统。
在数据库中,B树可以加快数据的查找速度,提高数据库的性能。
通过B树索引,可以快速定位到需要查询的数据,减少磁盘IO 操作,提高查询效率。
2. 文件系统B树也常用于文件系统中的索引结构,如NTFS、EXT4等文件系统。
在文件系统中,B树可以加快文件的查找速度,提高文件系统的性能。
通过B树索引,可以快速定位到需要访问的文件或目录,减少磁盘IO操作,提高文件读写效率。
3. 搜索引擎搜索引擎中的倒排索引通常采用B树结构,用于存储关键字与文档之间的映射关系。
通过B树索引,搜索引擎可以快速定位到包含查询关键字的文档,提高搜索结果的准确性和响应速度。
4. 文件压缩在文件压缩算法中,B树也有一定的应用场景。
通过B树索引,可以快速定位到需要压缩或解压缩的数据块,提高文件的压缩效率和解压速度。
数据结构_图书馆管理系统实验报告
实验报告题目:图书管理一,需求分析1.每种书的信息包括了书号书名,作者显存量和总库存等。
2.要实现的主要操作有,在B-树上的插入删除操作,并且在这些B-树的操作的基础上的图书馆借阅归还入库清除等操作。
3.每插入或删除一个关键字后就要显示B-树的状态。
也可以显示图书的相关借阅的信息。
4.借阅的信息链接在相应的那种数的记录之后。
2.两种抽象数据类型:Btree和Library。
3. 测试数据入库书号:35,16,18,70,5,50,22,60,13,17,12,45,25,42,15然后清除:45,50,22,42,90二.概要设计ADT BTree{数据对象:D={ai |ai E BTNode,I=2,3,……n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai E D, I=2,3……N}基本操作:void InitBTree(BTree &T);int Search(BTree p,int k);Result SearchBTree(BTree T,int k);void split(BTree &q,int s,BTree &ap);void Insert(BTree &q,int i,KeyType x,BTree ap);void NewRoot(BTree &T,BTree q,KeyType x,BTree ap);Status InsertBTree(BTree &T,KeyType k,BTree q,int i);void FindSmallest(BTree p,BTree &q);int Parent(BTree p);void RightBrother(BTree p,BTree &right);void LeftBrother(BTree p,BTree &left);void LeftMove(BTree &p,int loc);Status DeleteBTree(BTree &T,int k);void PrintBTree(BTree T);}ADT Library{数据对象:D={ai |ai E RecordI=2,3,……n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai E D, I=2,3……N}基本操作:void GetInformation(Record &book);void PrintBookInfomation(Record *book);void Procurement(BTree &T);void DeleteBook(BTree &T,int k);void Lending(BTree &T,int k,char librarynum[10],char data[10]); void Return(BTree &T,int k,char *librarynum);}3.程序的几个模块1)主程序模块void main(){接受命令初始化处理命令}2)B-树模块-------实现B-树的抽象数据类型3)图书馆模块-------实现图书馆的抽象数据类型调用关系如下:主程序模块图书馆模块-三.详细设计(在源代码上通过注释的方式来说明)1、基本结构typedef struct{int booknum;char name[20];char writer[20];int total;int current;char librarynum[MAX][MAX];char returndate[MAX][MAX];}Record;typedef struct{int k;Record *recptr;}KeyType;typedef struct BTNode{int keynum;struct BTNode *parent;KeyType *key[M+1];struct BTNode *ptr[M+1];}BTNode,*BTree;typedef struct{BTNode *pt;int i;int tag;}Result;2、源代码1)主函数#include "head.h"#include "head.h"void main(){BTree T;int order=0,booknum;char returndate[10],librarynum[10];Result result;InitBTree(T);printf("\n******************************************************************* *****\n");printf("Welcome to the library system!\n");while(order!=6){printf("\n******************************************************************* *****\n");printf("请选择服务: 1.采编入库 2.清除库存 3.借阅 4.归还 5.显示 6.退出.\n");scanf("%d",&order);switch(order){case 1:Procurement(T);PrintBTree(T);break;case 2:printf("请输入要删除的书的编号。
用B树做的图书管理系统
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<time.h>#define N 10000#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef char *string ;#define m 3 //B-树的阶//书的结构体struct Book{unsigned int key;char bname[20];char writter[20];unsigned int left;unsigned int total;}b[N];//B- 树的存储结构typedef Book KeyType;typedef struct BTNode{int keynum;struct BTNode *parent;KeyType key[m + 1];struct BTNode *ptr[m + 1]; }BTNode,*BTree;//查找结果的存储结构体typedef struct{BTNode *pt;int i;int tag;}Result;BTree root = NULL;void InBookMess(KeyType &book);void InBookKey(KeyType &book);void ShowBookMess(Book book);void ShowBTNode(BTree p);void display(BTree T);void KeyTypeCopy(KeyType &bak,KeyType k);int Search(BTree p, KeyType K);Result SearchBTree(BTree T, KeyType K);void Insert(BTree &q, int i, KeyType x, BTree ap);void split(BTree &q, int s, BTree &ap);void NewRoot(BTree &T, BTree p, KeyType x, BTree ap);Status InsertBTree(BTree &T, KeyType K);Status BorrowBook(BTree T,KeyType k);Status ReturnBook(BTree T,KeyType k);void save(BTree p);/*************************************************/void save(BTree p)//保存文件{FILE *fp;if ((fp=fopen("book.txt","wb"))==NULL ){printf("创建文件失败!\n\n");getchar();return;}for(int i = 1; i <= p->keynum; i++){fprintf(fp,"%d %s %s %d %d\n",p->key[i].key,p->key[i].bname,p->key[i].writter,p->key[i].left,p->key[i].total);}fclose(fp);}//读取文件void read(){FILE *fp,fp1;if ((fp=fopen("book.txt","rb"))==NULL && (fp=fopen("user.txt","rb"))==NULL){printf("读取文件失败!\n\n");getchar();return;}for(int i=1;;i++){if(fscanf(fp,"%d%s%s%d%d",&b[i].key,&b[i].bname,&b[i].writter,&b[i].left,&b[i].total)= =EOF){ break; }InsertBTree(root,b[i]);}fclose(fp);}//复制结点,将某个结点的值复制到另外一个值上void KeyTypeCopy(KeyType &bak,KeyType k){bak.key = k.key;strcpy(bak.bname,k.bname);bak.left = k.left;bak.total = k.total;strcpy(bak.writter,k.writter);}//在一个结点中查找元素,返回结点的位置int Search(BTree p, KeyType K) {if(!p)return -1;int i=0;for(i = 0; i < p->keynum && p->key[i+1].key <= K.key; i++);return i;}// 在m阶B树T上查找关键字K,返回结果(pt,i,tag)Result SearchBTree(BTree T, KeyType K){BTree p, q;int found, i;Result R;p = T;q = NULL;found = FALSE;i = 0;while (p && !found) {i = Search(p, K);if (i > 0 && p->key[i].key == K.key)found = TRUE;else {q = p;p = p->ptr[i];}}if (found) {R.pt = p;R.i = i;R.tag = 1;}else {R.pt = q;R.i = i;R.tag = 0;}return R;}//插入一条记录void Insert(BTree &q, int i, KeyType x, BTree ap) { int n = q->keynum;for (int j = n; j > i; j--) {KeyTypeCopy(q->key[j + 1],q->key[j]);q->ptr[j + 1] = q->ptr[j];}KeyTypeCopy(q->key[i + 1],x);q->ptr[i + 1] = ap;if (ap)ap->parent = q;q->keynum++;}//分离结点void split(BTree &q, int s, BTree &ap) {int i,j,n = q->keynum;ap = (BTree)malloc(sizeof(BTNode));ap->ptr[0] = q->ptr[s];for (i = s + 1,j = 1; i <= n; i++,j++) {KeyTypeCopy(ap->key[j],q->key[i]);ap->ptr[j] = q->ptr[i];}ap->keynum = n - s;ap->parent = q->parent;for (i = 0; i <= n - s; i++)if (ap->ptr[i])ap->ptr[i]->parent = ap;q->keynum = s-1;}//生成一个新的树结点void NewRoot(BTree &T, BTree p, KeyType x, BTree ap) { T = (BTree)malloc(sizeof(BTNode));T->keynum = 1; //设置当前结点的元素个数T->ptr[0] = p; //设置左边结点的树根T->ptr[1] = ap; //设置右边的树根KeyTypeCopy(T->key[1],x); //将x 元素的结点值复制到T 的第一个元素中if (p) //当孩子不空的时候就设置当前结点为孩子的双亲p->parent= T;if (ap)ap->parent = T;T->parent = NULL; //当前结点的双亲为空}void ShowBTNode(BTree p) {for(int i = 1; i <= p->keynum; i++){printf("\t");printf("书号为:%d ", p->key[i].key);printf("书名为:%5s ", p->key[i].bname);printf("作者为:%5s ", p->key[i].writter);printf("剩余量为:%5d ", p->key[i].left);printf("总量为:%5d", p->key[i].total);printf("\n");}}Status InsertBTree(BTree &T, KeyType K) {//在m阶B树T上结点*q的key[i]与key[i+1]之间插入关键字K。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<time.h>#define N 10000#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef char *string ;#define m 3 //B-树的阶//书的结构体struct Book{unsigned int key;char bname[20];char writter[20];unsigned int left;unsigned int total;}b[N];//B- 树的存储结构typedef Book KeyType;typedef struct BTNode{int keynum;struct BTNode *parent;KeyType key[m + 1];struct BTNode *ptr[m + 1]; }BTNode,*BTree;//查找结果的存储结构体typedef struct{BTNode *pt;int i;int tag;}Result;BTree root = NULL;void InBookMess(KeyType &book);void InBookKey(KeyType &book);void ShowBookMess(Book book);void ShowBTNode(BTree p);void display(BTree T);void KeyTypeCopy(KeyType &bak,KeyType k);int Search(BTree p, KeyType K);Result SearchBTree(BTree T, KeyType K);void Insert(BTree &q, int i, KeyType x, BTree ap);void split(BTree &q, int s, BTree &ap);void NewRoot(BTree &T, BTree p, KeyType x, BTree ap);Status InsertBTree(BTree &T, KeyType K);Status BorrowBook(BTree T,KeyType k);Status ReturnBook(BTree T,KeyType k);void save(BTree p);/*************************************************/void save(BTree p)//保存文件{FILE *fp;if ((fp=fopen("book.txt","wb"))==NULL ){printf("创建文件失败!\n\n");getchar();return;}for(int i = 1; i <= p->keynum; i++){fprintf(fp,"%d %s %s %d %d\n",p->key[i].key,p->key[i].bname,p->key[i].writter,p->key[i].left,p->key[i].total);}fclose(fp);}//读取文件void read(){FILE *fp,fp1;if ((fp=fopen("book.txt","rb"))==NULL && (fp=fopen("user.txt","rb"))==NULL){printf("读取文件失败!\n\n");getchar();return;}for(int i=1;;i++){if(fscanf(fp,"%d%s%s%d%d",&b[i].key,&b[i].bname,&b[i].writter,&b[i].left,&b[i].total)= =EOF){ break; }InsertBTree(root,b[i]);}fclose(fp);}//复制结点,将某个结点的值复制到另外一个值上void KeyTypeCopy(KeyType &bak,KeyType k){bak.key = k.key;strcpy(bak.bname,k.bname);bak.left = k.left;bak.total = k.total;strcpy(bak.writter,k.writter);}//在一个结点中查找元素,返回结点的位置int Search(BTree p, KeyType K) {if(!p)return -1;int i=0;for(i = 0; i < p->keynum && p->key[i+1].key <= K.key; i++);return i;}// 在m阶B树T上查找关键字K,返回结果(pt,i,tag)Result SearchBTree(BTree T, KeyType K){BTree p, q;int found, i;Result R;p = T;q = NULL;found = FALSE;i = 0;while (p && !found) {i = Search(p, K);if (i > 0 && p->key[i].key == K.key)found = TRUE;else {q = p;p = p->ptr[i];}}if (found) {R.pt = p;R.i = i;R.tag = 1;}else {R.pt = q;R.i = i;R.tag = 0;}return R;}//插入一条记录void Insert(BTree &q, int i, KeyType x, BTree ap) { int n = q->keynum;for (int j = n; j > i; j--) {KeyTypeCopy(q->key[j + 1],q->key[j]);q->ptr[j + 1] = q->ptr[j];}KeyTypeCopy(q->key[i + 1],x);q->ptr[i + 1] = ap;if (ap)ap->parent = q;q->keynum++;}//分离结点void split(BTree &q, int s, BTree &ap) {int i,j,n = q->keynum;ap = (BTree)malloc(sizeof(BTNode));ap->ptr[0] = q->ptr[s];for (i = s + 1,j = 1; i <= n; i++,j++) {KeyTypeCopy(ap->key[j],q->key[i]);ap->ptr[j] = q->ptr[i];}ap->keynum = n - s;ap->parent = q->parent;for (i = 0; i <= n - s; i++)if (ap->ptr[i])ap->ptr[i]->parent = ap;q->keynum = s-1;}//生成一个新的树结点void NewRoot(BTree &T, BTree p, KeyType x, BTree ap) { T = (BTree)malloc(sizeof(BTNode));T->keynum = 1; //设置当前结点的元素个数T->ptr[0] = p; //设置左边结点的树根T->ptr[1] = ap; //设置右边的树根KeyTypeCopy(T->key[1],x); //将x 元素的结点值复制到T 的第一个元素中if (p) //当孩子不空的时候就设置当前结点为孩子的双亲p->parent= T;if (ap)ap->parent = T;T->parent = NULL; //当前结点的双亲为空}void ShowBTNode(BTree p) {for(int i = 1; i <= p->keynum; i++){printf("\t");printf("书号为:%d ", p->key[i].key);printf("书名为:%5s ", p->key[i].bname);printf("作者为:%5s ", p->key[i].writter);printf("剩余量为:%5d ", p->key[i].left);printf("总量为:%5d", p->key[i].total);printf("\n");}}Status InsertBTree(BTree &T, KeyType K) {//在m阶B树T上结点*q的key[i]与key[i+1]之间插入关键字K。
BTree ap;Result rs;BTree q;int i;char addnum;int finished, needNewRoot, s;KeyType x;if (!T){NewRoot(T, NULL, K, NULL);}else {rs = SearchBTree(T,K);//查找元素k 在树中的位置q = rs.pt;i = rs.i;if(rs.tag == 1){if(strcmp(q->key[i].bname,K.bname) != 0){printf("\n\t录入失败,原因:\n");printf(".\t书号冲突,请重新为该书编号!\n\n");printf("\t已经存在书号为%d 的书为:\n",q->key[i].key);ShowBookMess(q->key[i]);return FALSE;}else{printf("\n\t该书已经存在!\n\n");printf("\t是否增加其总量(y/n):");scanf("%s",&addnum);if(addnum == 'Y' || addnum == 'y'){q->key[i].total += K.total;q->key[i].left += K.left;printf("\n\t增加总量后该书的信息如下\n");}else{printf("\n\t该书的信息如下:\n");}ShowBookMess(q->key[i]);return FALSE;}}x = K;ap = NULL;finished = needNewRoot = FALSE;while (!needNewRoot && !finished) {Insert(q, i, x, ap); //插入结点if (q->keynum < m)finished = TRUE; // 插入完成else { // 分裂结点*qs = (m+1)/2;split(q, s, ap);x = q->key[s];if (q->parent) { // 在双亲结点*q中查找x的插入位置q = q->parent;i = Search(q, x);}elseneedNewRoot = TRUE;}}if (needNewRoot)NewRoot(T, q, x, ap); // 生成新根结点*T,q和ap为子树指针 }return OK;}//输入书的具体信息void InBookMess(KeyType &book){char s[5];printf("\t请输入书号:");scanf("%s",s);book.key = atoi(s);printf("\t请输入书名:");scanf("%s",&book.bname);printf("\t请输入作者:");scanf("%s",&book.writter);printf("\t请输入总量:");scanf("%s",s);book.total = atoi(s);book.left = book.total;}//输入书的关键字void InBookKey(KeyType &book){char s[5];printf("\t请输入书号:");scanf("%s",s);book.key = atoi(s);}//显示书的具体信息void ShowBookMess(Book book){printf("\t书号为:%3d\n", book.key);printf("\t书名为:%3s\n", book.bname);printf("\t作者为:%3s\n", book.writter);printf("\t剩余量为:%3d\n", book.left);printf("\t总量为:%3d\n", book.total);printf("\n");}//显示整棵树的信息void display(BTree T){int i = 0;if(T) {ShowBTNode(T); //显示这个结点的全部值for(i=0; i<=T->keynum; i++){ //使用递归的方法显示每个结点if(T->ptr[i]){display(T->ptr[i]);}}}}//借阅Status BorrowBook(BTree T,KeyType k){Result rs = SearchBTree(T,k);if(rs.tag == 0){printf("\t很抱歉!你要借阅的书不存在!\n");return FALSE;}if(rs.pt->key[rs.i].left < 1){printf("\t很抱歉!你要借阅的书已经借完!\n");return FALSE;}rs.pt->key[rs.i].left--;return OK;}//还书Status ReturnBook(BTree T,KeyType k){int number;Result rs = SearchBTree(T,k);if(rs.tag == 0){printf("\t很抱歉!不存在你要还的书!\n");return FALSE;}if(rs.pt->key[rs.i].left>=rs.pt->key[rs.i].total){printf("\t该书无借出\n");return FALSE;}else{rs.pt->key[rs.i].left++;}}//显示书的信息void ShowWriterBook(BTree p,char writer[]) { for(int i = 1; i <= p->keynum; i++){if(strcmp(p->key[i].writter,writer) == 0){printf("\t\t\t书号为:%d ", p->key[i].key);printf("书名为:%s ",p->key[i].bname);printf("作者为:%3s\n", p->key[i].writter);}}}//菜单char menu_selete(){char ch;system("cls");printf("\t************************ 图书管理系统**********************\n\n"); printf("\t1.新书入库. \t2.查找书籍. \n");printf("\t3.显示库存. \t4.借阅. \n");printf("\t5.还书 \t6.退出. \n");printf("\t*************************************************************\n\n");printf("\t请选择你所需要的操作(1~6):");do{ch = getch();}while(ch < '1' || ch > '7');return ch;}void main(){KeyType k;Result rs;read();while(1){switch(menu_selete()){case'1':system("cls");printf("\t------------------ 录入书信息----------------\n");InBookMess(k);InsertBTree(root,k);printf("\t--------- 录入结束---------\n");save(root);printf("\t当前书库的库存信息如下:\n");display(root);printf("\t按任意键返回");getch();break;case'2':system("cls");printf("\t------------------ 查找书信息----------------\n");InBookKey(k);printf("\n");rs = SearchBTree(root,k);if(rs.tag == 1){ShowBookMess(rs.pt->key[rs.i]);}else{printf("\t你要查找的书号%d 不存在!\n\n",k.key);}printf("\n\t------------------ 查找结束----------------\n");printf("\t按任意键返回");getch();。