- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实用标准文案
精彩文档
9.西文图书管理系统
图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。
要求:
(1)每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项。
(2)作为演示系统,不必使用文件,全部数据可以都在内存存放。要用B-树(4阶树)对书号建立索引,以获得高效率。
(3)系统应有以下功能:
采编入库、清除库存、借阅、归还、显示(以凹入表的形式显示)等。
1.需求分析
设计一个西文图书管理系统, 将图书管理基本业务活动如对一本书的采编入库、清除库存、借阅和归还等等借助于计算机系统完成,该图书管理系统应有以下功能:采编入库、清除库存、借阅、归还、显示等。要求用B-树(4阶树)对书号建立索引,以获得高效率,输出以凹入表的形式显示。
2.设计
2.1 设计思想
(1)数据结构设计
逻辑结构设计:树形结构(B-树)
存储结构设计:链式存储结构
选择B-树这种数据结构的原因:
与二叉树相比,B-树是一种平衡多叉排序树。平衡是指所有叶结点都在同一层上,从而可避免出现二叉排序树那样的分支退化现象;多叉是指多于二叉,多于二叉的排序树将降低二叉树高度,从而减少查找数据元素时的比较次数。由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少利用率,其最底搜索性能为:
其中,M为设定的非叶子结点最多子树个数,N为关键字总数;??所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;因此,B-树是一种动态查找效率较二叉排序树更高的树形结构。
(2)算法设计
算法设计的总体设计思路为:首先创建一颗4阶B-树,然后在此基础上设计添加图书、查找图书、借阅图书、归还图书、显示图书状态、删除图书记录、退出七个模块,最后主函数再用一个switch选择语句来调用各个模块。各个模块要完成的主要功能分别为:
添加图书:可以添加图书记录,按提示依次输入书号、书名、作者、现存量、总量,会提示是否继续添加。
查找图书:可根据输入的书号进行查询,成功找到后会提示是否想借这本书,输入1为借书,输入0为退出。
借阅图书:可根据提示输入相应的书号进行借书。
归还图书:可根据提示输入相应的书号归还图书。
显示图书状态:可显示图书管理系统里的所有图书状态。
删除图书记录:可根据提示输入相应的书号删除图书记录。
主程序的流程图如下:
输入
输入i
判断i
显示图书状态
删除图书记录
查找图书
借阅图书
读取文件
退出
归还图书
添加图书
作者
总量
现存量
书号
书名
开始
关闭
InsertBTreeInsert SplitNewRootSearchBTreeaddbook
InsertBTree
Insert
Split
NewRoot
SearchBTree
addbook
findbook
Lend
book
Return
book
Book
count
exit
menu
delbook
DeleteBTree
RecDelete
SearchNode
Successor
Remove
Restore
MoveLeft
Combine
MoveRight
(1)函数调用关系图
(2)函数接口规格说明
int Search(BTNode *p,KeyType k)
Result SearchBTree(BTNode *t,KeyType k)
void Insert(BTNode *q,int i,KeyType x,BTNode *ap)
void Split(BTNode *q,BTNode *ap)
void NewRoot(BTNode *t,BTNode *p,KeyType x,BTNode *ap)
void InsertBTree(BTNode *t, KeyType k, BTNode *q, int i)
void Remove(BTNode *p,int i)
void Successor(BTNode *p,int i)
void MoveLeft(BTNode *p,int i)
void MoveRight(BTNode *p,int i)
void Combine(BTNode *p,int i)
void Restore(BTNode *p,i
文档评论(0)