西文图书管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(请输入书号)

相关文档
最新文档