广工数据结构课程设计图书管理系统文档格式.docx

上传人:b****2 文档编号:15239620 上传时间:2022-10-28 格式:DOCX 页数:19 大小:272.09KB
下载 相关 举报
广工数据结构课程设计图书管理系统文档格式.docx_第1页
第1页 / 共19页
广工数据结构课程设计图书管理系统文档格式.docx_第2页
第2页 / 共19页
广工数据结构课程设计图书管理系统文档格式.docx_第3页
第3页 / 共19页
广工数据结构课程设计图书管理系统文档格式.docx_第4页
第4页 / 共19页
广工数据结构课程设计图书管理系统文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

广工数据结构课程设计图书管理系统文档格式.docx

《广工数据结构课程设计图书管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《广工数据结构课程设计图书管理系统文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

广工数据结构课程设计图书管理系统文档格式.docx

新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示B树现状。

②清除库存:

实现某本书的全部信息删除操作,每清除一个书号则已以凹入表的形式显示B树现状。

③图书借阅:

如果书的库存量大于零时则执行出借,登记借阅者的图书证号和姓名,系统自动抓取当前借阅时间和计算归还时间。

④图书归还:

注销借阅者信息,并改变该书的现存量。

⑤显示:

以凹入表的形式显示B树。

这个操作是为了调试和维护的目的而设置的。

⑷测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。

入库书号:

35,16,18,70,5,50,22,60,13,17,12,45,25,42,15,90,30,7

清除书号:

45,90,50,22,42

2.概要设计

(1).抽象数据类型B树定义:

ADTBTree{

数据对象:

D是具有相同特性的数据元素的集合。

各个数据元素均含有类型相同,可惟一标识数据元素的关键字。

数据关系:

数据元素同属于一个集合并且:

一棵m阶的B树,或为空,或为满足下列特性的m叉树:

树中每个结点至多有m棵子树;

若根结点不是叶子结点,则至少有两棵子树;

除根之外的所有非终端结点至少有m/2(取上限)棵子树;

所有的非终端结点包含下列信息数据:

(n,A0,K1,A1,K2,A2,K3,……,Kn,An)

其中:

Ki(i=1,2,……n)为关键字,且Ki<

Ki+1(i=1,2,……n-1);

Ai(i=0,……n)为指向子树根结点的指针,且指针Ai-1所指子树中所有结点的关键字均小于Ki(i=1,2,……n),An所指子树中所有结点的关键字均大于Kn,n(m/2(取上限)-1<

=n<

=m-1)为关键字的个数

基本操作:

CreateBTree(BTree*T)

操作结果:

构建B-树

BTreeSearch(sBTree*T,intk,sBTree*&

x,int&

index)

初始条件:

树T存在,k为和关键字类型相同的给定值。

若B树T中存在关键字等k的数据元素,则返回该元素的值或在表中的位置,否则返回“空”。

BTreeInsert(k)

初始条件:

B树T存在,k为待插入的数据元素。

若T中不存在关键字等于k的数据元素,则插入k到T中。

BTreeDeleteKeywords(sBTree*T,k);

B树T存在,k为和关键字相同的给定值。

若T中存在其关键字等于k的数据元素,则删除之。

BTreeTraverse(BTreeT,Visit)

B树T存在,Visit是对T结点的函数

遍历B树T,对每个结点调用Visit函数

PrintBTree(sBTree*T);

书库T存在。

以凹入表形式显示B树T。

}ADTBTree

(2).图书管理类型定义:

ADTBook{

D={ai|ai∈BookType,i=1,2,3,……n,n>

=0,其中

每个数据元素ai含有类型相同,可惟一标识数据元素的关键字}

数据元素同属一个集合

InsertBook(sBTree*T,sKeywordskeywords)

B树T已存在。

操作结果:

如果所要插入的书中已存在T树中,则只将该书的库存量增加,否则插入到T树中。

Rent(k)

书库不为空。

如果书库中有书号为k的书,则借书成功,否则返回查找失败。

Get(k)

如果书库中有书号为k的书,则还书成功,否则返回查无此书。

}ADTBook

(3)主程序

intmain()

{初始化

系统界面;

do

{switch()

显示菜单信息;

接受命令;

处理命令;

输出结果;

}while

}

3.详细设计

(1)抽象数据类型B-树存储定义:

structsBTree{

intn;

//关键字的计量

sKeywordskeywords[MAX_KEYWORDS];

//关键字的最大容量

boolleaf;

//判断是否为叶子

sBTree*children[MAX_KIDSNUM];

//孩子

};

sBTree*root=NULL;

//根结点

intdeep=0;

//深度

voidCreateBTree();

//构建B树

boolBTreeSearch(sBTree*T,intcount,sBTree*&

index);

//查找关键字

voidBTreeInsert(sKeywordskeywords);

//插入

voidBTreeInsertNonfull(sBTree*x,sKeywordskeywords);

//非满B树的插入

voidBTreeDeleteKeywords(sBTree*x,intcount);

//删除结点

voidBTreeSplitChild(sBTree*parent,inti);

//分裂孩子结点

sBTree*BTreeSplit(sBTree*x,sKeywords&

keywords);

//分裂结点

voidBTreeCombine(sBTree*x,sKeywordskeywords,sBTree*newNode)//结点合并

(2)B-树操作定义

voidCreateBTree()

{//构建B-树

sBTree*newNode=(sBTree*)malloc(sizeof(sBTree));

//分配存储空间

newNode->

leaf=true;

n=0;

root=newNode;

for(inti=0;

i<

MAX_KIDSNUM;

i++)

root->

children[i]=NULL;

boolBTreeSearch(sBTree*T,intcount,sBTree*&

{//查找操作

inti=0;

while(i<

(T->

n)&

&

count>

keywords[i].count))

i++;

if(i<

count==(T->

keywords[i].count)){

x=T;

index=i;

returntrue;

}

if(T->

leaf)

returnfalse;

else

returnBTreeSearch(T->

children[i],count,x,index);

voidBTreeInsert(sKeywordskeywords)

{//插入操作

sBTree*r=root;

if(r->

n==MAX_KEYWORDS){//如果结点B树已满,则分配新的结点

leaf=false;

children[0]=r;

BTreeSplitChild(newNode,0);

BTreeInsertNonfull(newNode,keywords);

BTreeInsertNonfull(r,keywords);

voidBTreeInsertNonfull(sBTree*x,sKeywordskeywords)

{

inti=(x->

n);

while(i>

0&

keywords<

x->

keywords[i-1])

i--;

if(x->

AddKeywordsToLine(x,i,keywords,NULL,true);

else{

if(x->

children[i]->

n==MAX_KEYWORDS){

BTreeSplitChild(x,i);

if(keywords>

keywords[i])

BTreeInsertNonfull(x->

children[i],keywords);

voidBTreeDeleteKeywords(sBTree*x,intcount)

{//删除结点

sKeywordskeywords;

sBTree*newNode;

intindex=-1;

leaf){

BTreeDeleteLeafData(x,count);

elseif(DataInNode(x,count,index)){

if((x->

children[index]->

n)>

MIN_KEYWORDS){

keywords=MaxKeywords(x->

children[index]);

x->

keywords[index]=keywords;

BTreeDeleteKeywords(x->

children[index],keywords.count);

elseif((x->

children[index+1]->

keywords=MinKeywords(x->

children[index+1]);

children[index+1],keywords.count);

newNode=RemoveKeywordsFromLine(x,index,keywords,false);

BTreeCombine(x->

children[index],keywords,newNode);

children[index],count);

for(index=0;

index<

n;

index++){

if(count<

keywords[index].count)

break;

n==MIN_KEYWORDS){

if(index>

(x->

children[index-1

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

当前位置:首页 > 高等教育 > 医学

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

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