西文图书管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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为退出。
借阅图书:可根据提示输入相应的书号进行借书。
归还图书:可根据提示输入相应的书号归还图书。
显示图书状态:可显示图书管理系统里的所有图书状态。
删除图书记录:可根据提示输入相应的书号删除图书记录。
主程序的流程图如下:
(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,int i)
int SearchNode(KeyType k,BTNode *p,int &i)
int RecDelete(KeyType k,BTNode *p)
void DeleteBTree(KeyType k,BTNode *root)
void addbook()//添加书
void lendbook(int booknumber)//借书
void findbook()//查找书
void returnbook()//还书
void delbook()//删除
void bookcount()//显示书的状况
void menu()//主界面
int main()//主函数
2.3 详细设计
各个功能模块主要算法的伪代码实现
➢添加图书模块
printf(请输入书号)
scanf(书号)
If SearchBTree(书号)=true
printf(此书已存在!)
else
{
printf(请输入书名)
scanf(书名)
printf(请输入作者)
scanf(作者)
printf(请输入现存量)
scanf(现存量)
printf(请输入总量)
scanf(总量)
}
InsertBTree(书号,书名, 作者, 现存量, 总量)
printf(输入1 继续添加, 0 返回主界面)
scanf(1 or 0)
return
➢查找图书模块
printf(请输入书号)
scanf(书号)
if SearchBTree(书号)=true
printf(成功找到!)
printf(书号,书名,作者,现存量,总量)
if 总量大于零
printf(你想借这本书吗?输入1 借, 0 退出)
scanf(1 or 0)
if(1) 总量减一
else
printf(此书不存)
return
➢借阅图书模块
printf(请输入书号)