1、 一、一、 需求分析需求分析 1. 图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时 间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者 类型定义: 证号为整型、 姓名为字符型, 另外借阅类型和预约类型组合成其中的共用体类型。 B树(2-3 树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指 向子树的指针、记录单元指针;B 树查找结果类型定义: 节点指针、关键字序号和查找标 志变量为整型。 2. 演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后, 由用户在键盘上输入演示程序中规定的运算命令,相应的
2、输入数据和运算结果显示在后面。 该演示系统,没有使用文件,全部数据放在内存存放。四项基本业务都以书号为关键字进行 的,采用了 B树(2-3 树)对书号建立索引,以提高效率。 3. 图书管理系统实现功能: 采编入库:新书购入,将书号、书名、著者、册数、出版时间添加入图书账目 中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入 表的形式显示 B 树现状。 清除库存: 实现某本书的全部信息删除操作 ,每清除一个书号则已以凹入表 的形式显示 B 树现状。 图书借阅: 如果书的库存量大于零时则执行出借,登记借阅者的图书证号和 姓名,系统自动抓取当前借阅时间和计算归还时间。 图书预约:
3、如果某书库存为零,则记录预约者姓名和证号,系统自动抓取当前 预约时间和取书时间。 图书归还:注销借阅者信息,并改变该书的现存量。 作者专区:输入作者名字,系统将查找相应作者全部著作并显示出来。 图书信息:可以根据书号查阅此书基本信息、借阅信息和预约信息,亦可以查 找全部图书基本信息。 二、二、 概要设计概要设计 1.抽象数据类型 B 树定义: ADT BTree 数据对象:D 是具有相同特性的数据元素的集合。各个数据元素均含有类型相同,可惟一标 识数据元素的关键字。 数据关系:数据元素同属于一个集合并且: 一棵 m 阶的 B树,或为空,或为满足下列特性的 m 叉树: 树中每个结点至多有 m 棵
4、子树; 若根结点不是叶子结点,则至少有两棵子树; 除根之外的所有非终端结点至少有 m/2(取上限)棵子树; 所有的非终端结点包含下列信息数据: (n,A0,K1,A1,K2,A2,K3,Kn,An) 其中:Ki(i=1,2,n)为关键字,且 Kiptri+1,并插入关键字为k的记录recptr InsertBTree( 初始条件:B树 T 存在,e 为待插入的数据元素。 操作结果:若 T 中步存在关键字等于 e.key 的数据元素,则插入 e 到 T 中。 DeleteBTree( 初始条件:B树 T 存在,key 为和关键字类型相同的给定值。 操作结果:若 T 中存在其关键字等于 key 的
5、数据元素,则删除之 BTreeTraverse(BTree T,Visit) 初始条件:B树 T 存在,Visit 是对 T 结点的函数 操作结果:遍历 B树 T,对每个结点调用 Visit 函数 ShowBTree( T ); 初始条件:B树 T 存在。 操作结果:以凹入表形式显示 B树 T。 ADT BTree 2 .系统时间类型定义: ADT Time 数据对象:D=TM 是各种整型类型的系统时间格式定义 数据关系:数据元素同属一个集合 基本操作: GetDate(tm 操作结果:初始化书库 L 为空书库。 InsertBook( 初始条件:书库 L 和 B已存在,result 包含 B
6、书在书库中的位置或应该插入的位置。 操作结果:如果书库中已存在 B书,则只将 B书的库存量增加,否则插入 B书到书库 L 中。 DeleteBook( 初始条件:书库 L 和 B存在。 操作结果:如果书库中存在 B书,则从书库中删除 B书的信息,并返回 OK,否则返回 ERROR BorrowBook(L , 初始条件:书库 L 存在,B书是书库中的书并且可被读者 R 借阅。 操作结果:借出一本 B书,记录信息。 ReturnBook(L , 初始条件:书库 L 存在。 操作结果:若书库 L 中有读者 R 借阅 B书的记录,则注销该记录,改变 B书现存量, 并返回 OK,书不存在或无该读者记录则返回 ERROR。 BespeakBook(L , 初始条件:书库 L 存在,B书是书库中的书,R 为借阅者。 操作结果:为读者 R 预约 B书。 ListAuthor(L ,author); 初始条件:书库 L 存在,author 为指定作者姓名 操作结果:显示 author 的所有著作。 ShowBookinfo(L ,B ); 初始条件:书 L