数据结构--图书管理系统..doc
文本预览下载声明
图书管理系统
问题描述及基本要求
图书管理系统
基本要求:
每种书的登记内容包括书号、书名、著作者、现存量和库存量。
对书号建立索引表以提高查找效率。
要求系统具有以下功能:
A.采编入库:新购一种书,确定书号后,登记到图书账目表中,若表中已有,则只增加库存量。
B.借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的书证号和归还期限,改变现存量。
C.归还:注销对借阅者的登记,改变该书的现存量
模块划分
1.采编入库模块
实现功能:新购一种书,根据书的类别、书名和作者,登记到图书索引表中,如果表中已有,则只增加库存量。
借阅书籍模块
实现功能:如果一本书的存量大于0,则借出一本,登记借阅者的ID号,改变现存量。
归还书籍模块
实现功能:输入借阅者ID号,可查询到所有借阅记录,选择要归还的书,改变该书的现存量。程序流程图如图3所示。
测试数据
采编入库书名为dd,作者为dk的书籍,ID号为10的读者借阅后归还。
四.数据结构
书本信息存储结构
(1)存储结构框图
menutable size - size - size - size - size -
menu name - name - name - name - name - 书本信息 - - 书本信息 - -
(2)结构体定义
a.哈希表项
typedef struct
{
void *p;
int size;
}hashitem;
b.哈希表
typedef struct
{
hashitem *h;
int maxsize;
int nowsize;
}hashtable;
c.索引表项
typedef struct
{
hashtable *a;
char *name;
}menu;
d.索引表
typedef struct
{
menu *b;
int size;
}menutable;
e.书籍结构体
typedef struct bnode
{
char *name; //书名
char *writer; //作者
int total; //总量
int num; //现量
int code; //书号
struct bnode *next; //哈希链
struct rnode1 *r; //读者链
}book;
f.书本结构体中的读者链
typedef struct rnode1
{
struct rnode *r;
struct rnode1 *next;
}rnode1;
读者信息存储结构
menutable size -
menu name - name - name - name - name - 读者信息 - - 读者信息 - -
索引表及哈希表:结构体同书本
b.读者结构体
typedef struct rnode
{
int card; //卡号
int number; //借书的数量:借书有默认的最大数量
struct rnode *next; //哈希链
struct bnode1 *b; //书本链
}reader;
c.读者结构体中的书本链
typedef struct bnode1
{
struct bnode *b;
struct bnode1 *next;
}booknode1;
五.算法思想及源程序
采编入库模块
图1 采编入库程序流程图
实现功能:新购一种书,根据书的类别、书名和作者,登记到图书索引表中,如果表中已有,则只增加库存量。程序流程图如图1所示。
主函数部分
case 1: for(i=0;ib-size;i++)
{
printf(\t%d.%s\n,i+1,b-b[i].name);
}
printf(\tplease choose the num:);
scanf(%d,i);
getchar();
printf(\tplease input the bookname:);
name=(char*)malloc(sizeof(char)*10);
gets
显示全部