资源描述:
《西文图书管理系统.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、9.西文图书管理系统图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。要求:(1)每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项。(2)作为演示系统,不必使用文件,全部数据可以都在内存存放。要用B-树(4阶树)对书号建立索引,以获得高效率。(3)系统应有以下功能:采编入库、清除库存、借阅、归还、显示(以凹入表的形式显示)等。1.需求分析设计一个西文图书管理系统,将图书管理基本业务活动如对一本书的采编入库、清除库存、借阅和归还等等借助于计算机系统完成,该图书管理
2、系统应有以下功能:采编入库、清除库存、借阅、归还、显示等。要求用B-树(4阶树)对书号建立索引,以获得高效率,输出以凹入表的形式显示。2.设计2.1设计思想(1)数据结构设计逻辑结构设计:树形结构(B-树)存储结构设计:链式存储结构选择B-树这种数据结构的原因:与二叉树相比,B-树是一种平衡多叉排序树。平衡是指所有叶结点都在同一层上,从而可避免出现二叉排序树那样的分支退化现象;多叉是指多于二叉,多于二叉的排序树将降低二叉树高度,从而减少查找数据元素时的比较次数。由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少利用率,其最底搜索性能为
3、:其中,M为设定的非叶子结点最多子树个数,N为关键字总数; 所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;因此,B-树是一种动态查找效率较二叉排序树更高的树形结构。(2)算法设计算法设计的总体设计思路为:首先创建一颗4阶B-树,然后在此基础上设计添加图书、查找图书、借阅图书、归还图书、显示图书状态、删除图书记录、退出七个模块,最后主函数再用一个switch选择语句来调用各个模块。各个模块要完成的主要功能分别为:添加图书:可以添加图书记录,按提示依次输入书号、书名、作者、现存量、总量,会提示是否继续添加。查找图书:可根据输入的书号
4、进行查询,成功找到后会提示是否想借这本书,输入1为借书,输入0为退出。借阅图书:可根据提示输入相应的书号进行借书。归还图书:可根据提示输入相应的书号归还图书。显示图书状态:可显示图书管理系统里的所有图书状态。删除图书记录:可根据提示输入相应的书号删除图书记录。主程序的流程图如下:输入i判断i显示图书状态删除图书记录查找图书借阅图书读取文件退出归还图书添加图书作者总量现存量书号书名开始关闭InsertBTreeInsertSplitNewRootSearchBTreeaddbookfindbookLendbookReturnbookBookcountexitm
5、enudelbookDeleteBTreeRecDeleteSearchNodeSuccessorRemoveRestoreMoveLeftCombineMoveRight2.2设计表示(1)函数调用关系图(2)函数接口规格说明intSearch(BTNode*p,KeyTypek)ResultSearchBTree(BTNode*&t,KeyTypek)voidInsert(BTNode*&q,inti,KeyTypex,BTNode*&ap)voidSplit(BTNode*&q,BTNode*&ap)voidNewRoot(BTNode*&t,BTNo
6、de*p,KeyTypex,BTNode*ap)voidInsertBTree(BTNode*&t,KeyTypek,BTNode*&q,inti)voidRemove(BTNode*p,inti)voidSuccessor(BTNode*p,inti)voidMoveLeft(BTNode*p,inti)voidMoveRight(BTNode*p,inti)voidCombine(BTNode*p,inti)voidRestore(BTNode*p,inti)intSearchNode(KeyTypek,BTNode*p,int&i)intRecDele
7、te(KeyTypek,BTNode*p)voidDeleteBTree(KeyTypek,BTNode*root)voidaddbook()//添加书voidlendbook(intbooknumber)//借书voidfindbook()//查找书voidreturnbook()//还书voiddelbook()//删除voidbookcount()//显示书的状况voidmenu()//主界面intmain()//主函数2.3详细设计各个功能模块主要算法的伪代码实现Ø添加图书模块printf(请输入书号)scanf(书号)IfSearchBTree(书
8、号)=trueprintf(此书已存在!)else{