西文图书管理系统Word下载.doc

上传人:b****1 文档编号:13100279 上传时间:2022-10-05 格式:DOC 页数:23 大小:369.50KB
下载 相关 举报
西文图书管理系统Word下载.doc_第1页
第1页 / 共23页
西文图书管理系统Word下载.doc_第2页
第2页 / 共23页
西文图书管理系统Word下载.doc_第3页
第3页 / 共23页
西文图书管理系统Word下载.doc_第4页
第4页 / 共23页
西文图书管理系统Word下载.doc_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

西文图书管理系统Word下载.doc

《西文图书管理系统Word下载.doc》由会员分享,可在线阅读,更多相关《西文图书管理系统Word下载.doc(23页珍藏版)》请在冰豆网上搜索。

西文图书管理系统Word下载.doc

其中,M为设定的非叶子结点最多子树个数,N为关键字总数;

 

所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;

因此,B-树是一种动态查找效率较二叉排序树更高的树形结构。

(2)算法设计

算法设计的总体设计思路为:

首先创建一颗4阶B-树,然后在此基础上设计添加图书、查找图书、借阅图书、归还图书、显示图书状态、删除图书记录、退出七个模块,最后主函数再用一个switch选择语句来调用各个模块。

各个模块要完成的主要功能分别为:

添加图书:

可以添加图书记录,按提示依次输入书号、书名、作者、现存量、总量,会提示是否继续添加。

查找图书:

可根据输入的书号进行查询,成功找到后会提示是否想借这本书,输入1为借书,输入0为退出。

借阅图书:

可根据提示输入相应的书号进行借书。

归还图书:

可根据提示输入相应的书号归还图书。

显示图书状态:

可显示图书管理系统里的所有图书状态。

删除图书记录:

可根据提示输入相应的书号删除图书记录。

主程序的流程图如下:

输入i

判断i

显示图书状态

删除图书记录

查找图书

借阅图书

读取文件

退出

归还图书

添加图书

作者

总量

现存量

书号

书名

开始

关闭

InsertBTree

Insert

Split

NewRoot

SearchBTree

addbook

findbook

Lend

book

Return

Book

count

exit

menu

delbook

DeleteBTree

RecDelete

SearchNode

Successor

Remove

Restore

MoveLeft

Combine

MoveRight

2.2设计表示

(1)函数调用关系图

(2)函数接口规格说明

intSearch(BTNode*p,KeyTypek)

ResultSearchBTree(BTNode*&

t,KeyTypek)

voidInsert(BTNode*&

q,inti,KeyTypex,BTNode*&

ap)

voidSplit(BTNode*&

q,BTNode*&

voidNewRoot(BTNode*&

t,BTNode*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)

intRecDelete(KeyTypek,BTNode*p)

voidDeleteBTree(KeyTypek,BTNode*root)

voidaddbook()//添加书

voidlendbook(intbooknumber)//借书

voidfindbook()//查找书

voidreturnbook()//还书

voiddelbook()//删除

voidbookcount()//显示书的状况

voidmenu()//主界面

intmain()//主函数

2.3详细设计

各个功能模块主要算法的伪代码实现

Ø

添加图书模块

printf(请输入书号)

scanf(书号)

IfSearchBTree(书号)=true

printf(此书已存在!

else

{

printf(请输入书名)

scanf(书名)

printf(请输入作者)

scanf(作者)

printf(请输入现存量)

scanf(现存量)

printf(请输入总量)

scanf(总量)

}

InsertBTree(书号,书名,作者,现存量,总量)

printf(输入1继续添加,0返回主界面)

scanf(1or0)

return

查找图书模块

printf(请输入书号)

scanf(书号)

ifSearchBTree(书号)=true

printf(成功找到!

printf(书号,书名,作者,现存量,总量)

if总量大于零

printf(你想借这本书吗?

输入1借,0退出)

scanf(1or0)

if

(1)总量减一

else

printf(此书不存)

return

借阅图书模块

printf(请输入书号)

scanf(书号)

ifSearchBTree(书号)=trueand总量大于零

printf("

操作成功!

"

总量减一

printf(操作失败!

书已经被借出或不存在这本书)

归还图书模块

scanf(书号)

ifSearchBTree(书号)=true

printf(操作成功!

总量加一

else

printf("

操作失败!

\n"

);

return

删除图书记录模块

printf(书的具体信息:

书号,书名,作者,现存量,总量)

printf(输入1删除这本书)

scanf()

if

(1)

{

书号=0

printf(删除成功!

}

elseprintf(操作失败!

不存在这本书)

显示图书状态模块

inti;

for(i=1;

i<

1000;

i++)

if(总量!

=0)

printf(书号,书名,作者,现存量,总量)

3.调试分析

(1)本程序最大的问题就是B-树的基本算法的实现,此处难点在于B_树的结点的分裂,当插入结点时,判断结点中关键字的个数是否大于规定的个数,如果大于则要对此结点进行分裂,在分裂时,要改变孩子结点的parent指针,并且把分裂出的关键字放到该关键字的parent结点中,然后继续判断是否要分裂,一直到符合要求。

在进行检测时,出现了分裂时的错误,就是没有考虑到在分裂结点时,该结点的孩子结点的parent指针的改变,我参考了课本和老师的课件,并与和其他同学讨论后终于通过调试和改正,测试正确。

另外,在老师您在验收我的程序时,指出了我的程序的两个不足之处,一是没有按要求以凹入表的形式显示,二是在删除图书记录后图书记录并没有消失,而仅仅是图书号变成了—1,因此您只给我的这个程序打了个B,我当时心里真的很伤心。

这两个不足之处我在您验收之后很快就改过来了,因为原因很简单:

第一个不足之处产生的原因是我没注意到题目有这个要求,其实只要在输出语句中的书名前面加\n\t就行了;

第二个不足之处产生的原因是在删除图书记录时应将要删除的图书号置为0,而我却将它置为了—1.本来我当时是想找老师您再验收一次把成绩改高一点的,但由于当时验收的人太多了,就没再去麻烦您。

(2)算法的时间空间复杂度分析

由于B-树查找的时间复杂度为O(Log2N),而程序中多次用到了一重循环,其时间复杂度为O(n),因此程序的时间复杂度为O(n),空间复杂度也为O(n).

(3)可改进内容:

1、利用MFC做一个界面,使界面更加美观;

2、可尝试用B+树代替B_树,更容易应用于文件系统3、删除图书记录的时候必须先收回所有的书,即要保证现存量和总量相等后方可删除;

4、采用文件的形式,可以保存图书状态。

4.用户手册

本程序在VC++6.0环境下运行,按照菜单提示的要求输入即可。

5.测试数据及测试结果

测试用例1:

测试输入:

见截屏1、2

测试目的:

是否能按要求以凹入表的形式显示

正确输出:

见截屏1

实际输出:

见截屏2

错误原因:

没有注意审题,因此未在输出语句中的书号前加\n\t

当前状态:

已改正

测试用例2:

见截屏3、4

见截屏3

见截屏4

编程时粗心,错误的将应删除的书号置为了—1.

截屏1

截屏2

截屏3

截屏4

6.源程序清单

#include<

stdio.h>

#include<

windows.h>

malloc.h>

string.h>

conio.h>

#defineMAXM10/*定义B-树的最大的阶数*/

typedefintKeyType;

/*KeyType为关键字类型*/

structBookInfo//书结构体

{

i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1