广工数据结构课程设计图书管理系统.docx
- 文档编号:2322174
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:19
- 大小:272.09KB
广工数据结构课程设计图书管理系统.docx
《广工数据结构课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《广工数据结构课程设计图书管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
广工数据结构课程设计图书管理系统
数据结构课程设计报告
题目:
图书管理系统
学院计算机学院
专业
年级班别
学号
学生姓名
指导教师
成绩____________________
2012年6月
1.需求分析
⑴图书管理系统中图书管理模块包括图书类型定义:
书号、现存量、总存量为整型,书名、著者名为字符型,B树(2-3树)类型定义:
关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;B树查找结果类型定义:
节点指针、关键字序号和查找标志变量为整型。
⑵输出的形式;
该演示系统,没有使用文件,全部数据放在内存存放。
四项基本业务都以书号为关键字进行的,采用了B树(2-3树)对书号建立索引,以B树的形式进行输出,形象且可以提高效率。
⑶程序所能达到的功能;
①采编入库:
新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示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 基本操作: 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*&x,int&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; newNode->n=0; root=newNode; for(inti=0;i root->children[i]=NULL; } boolBTreeSearch(sBTree*T,intcount,sBTree*&x,int&index) {//查找操作 inti=0; while(i<(T->n)&&count>(T->keywords[i].count)) i++; if(i<(T->n)&&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树已满,则分配新的结点 sBTree*newNode=(sBTree*)malloc(sizeof(sBTree)); root=newNode; newNode->leaf=false; newNode->n=0; newNode->children[0]=r; BTreeSplitChild(newNode,0); BTreeInsertNonfull(newNode,keywords); } else BTreeInsertNonfull(r,keywords); } voidBTreeInsertNonfull(sBTree*x,sKeywordskeywords) { inti=(x->n); while(i>0&&keywords i--; if(x->leaf) AddKeywordsToLine(x,i,keywords,NULL,true); else{ if(x->children[i]->n==MAX_KEYWORDS){ BTreeSplitChild(x,i); if(keywords>x->keywords[i]) i++; } BTreeInsertNonfull(x->children[i],keywords); } } voidBTreeDeleteKeywords(sBTree*x,intcount) {//删除结点 sKeywordskeywords; sBTree*newNode; intindex=-1; if(x->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]->n)>MIN_KEYWORDS){ keywords=MinKeywords(x->children[index+1]); x->keywords[index]=keywords; BTreeDeleteKeywords(x->children[index+1],keywords.count); } else{ newNode=RemoveKeywordsFromLine(x,index,keywords,false); BTreeCombine(x->children[index],keywords,newNode); BTreeDeleteKeywords(x->children[index],count); } } else{ for(index=0;index if(count break; } if(x->children[index]->n==MIN_KEYWORDS){ if(index>0&&(x->children[index-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)