图书馆管理系统 数据结构大作业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

封面

数据结构课程设计报告

图书管理信息系统

二〇一三年十二月

本程序是图书管理信息系统的实现,具体功能包括读者注册、登录、新书增添、图书查询、图书搜索、借还书、读存盘等。

程序流程如下:

任务分析:

1.新书入库:

新到书籍入库包含几方面的操作:首先查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和总库存量,若不存在,则新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书名(字符串类型)、作者名(字符串类型)、出版社信息(字符串类型)、出版日期(整型)、该书的现存量(整型)、该书的总量(整型)。输入该信息之后,将该节点插入到书籍信息链表中去。该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。

2.读者注册:

没有账号和密码读者和管理员都不能登录系统,系统默认第一个注册系统的是系统管理员,借阅号为1000,权限是1,并输入密码000000及基本信息,并将所借书信息区全部置零。不是第一个注册的读者,借阅号从1000往后顺延,自己设置密码,权限为0,其余信息与管理员相同,因此登陆之后,管理员可以看到“入库”菜单选项,普通读者不能看到该选项。

3.借书:

书籍借阅主要涉及存书库和读者信息库的更新。用户首先登陆系统,通过3种查询方式

查询该书是否存在,并判断该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。若以上条件都满足,则将该书编号存入该读者的借阅信息区,将该读者的可借书数量减1,该存书的可借数量减1。

4.还书:

读者登录后按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,则从读者的借书区删除该书籍,读者的可借书数量加1,将该书的可借数量增加1,然后返回。

5.信息查询:

信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可借书本数以及所借书的信息),还可查询书籍信息,可根据书籍的编号来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。查询到该书籍后显示是否借阅该书籍。

算法设计:

1、查找

查找分按书名查找、按作者查找和按书号查找。按书名查找是采用遍历线性链表的方式,从首元结点开始向下遍历,检查输入的书名和已存的书名是否匹配,如果匹配,则将该书籍的指针返回,然后查找结束。若直到最后也没找到,则返回空。按作者查找则根据输入的作者名,从书籍链表的首元结点开始遍历,检查记录中的读者信息和输入的是否匹配,若找到匹配的,则输出该书籍信息,然后继续向下遍历,直到链表尾部,查找结束。按书号查找则是根据建立的索引表来查找记录。

2、读者信息存储

读者信息采用线性单链表存储,设置头结点,头结点不存储数据,初始化时头结点->next 设置为空,然后每从文件中读取一组数据,则将该数据存入新开辟的空间,链接到读者信息链表中,再将该数据的next置空。

3、图书信息存储

书籍信息存储采用单链表存储,设置头结点,头结点不存储数据,头结点的next为空,初始化时,从文件中读取一个格式化的数据,则将该数据存入新开辟的空间,并将该节点链接到链表中去,将next置空。

程序主要函数:

1.增加图书:v oid insert(book *bhead);输入书号,判断是否合法,然后输入图书信息。

流程图如下

2. 借书:void borrow(reader *temp, book *Bhead);通过书号、书名、作者三种查找方式查询

借书,借书成功后,该书的可借书量减1,读者借书量减1。

流程图如下:

3. 还书:void return book(book *bhead,reader *temp);输入书号,查询是否存在,然

N

进入查找

按书名查找 按书号查找 按作者查找

进入

输入书名 继续借书

退出

输入书号 输入作者

未找到

找到

借书 找到

借书成功

Y

N

Y

Y

N

继续输入 N 结束输入

后还书,该书的可借书量加1,读者借书量加1。 流程图如下:

详细程序模块

1、 头文件定义

头文件library.h 定义了3个结构体:书籍结构体、读者结构体和索引表结构体, 书籍结构体的定义如下: typedef struct READER{ long number;//借阅号 char name[15];//读者姓名 char sex;//读者性别

char password[16];//读者的密码

int residue;//读者的剩余可借书籍数量

long borrowed[10];//读者已经借阅的书籍编号 int limit;//读者权限 struct READER *next; }reader;

读者结构体的定义如下: typedef struct BOOK{ long number;//书籍编号 char name[30];//书名 char author[30];//作者

char press[30];//出版社信息

进入还书

输入书号

存在 还书 还书成功

退出

Y N

Y N

long presstime;//出版日期

int exist;//在库数量

int total;//总数量

struct BOOK *next;

}book;

索引表结构体的定义如下:

typedef struct KEY{

long key;

book *adress;

struct KEY *next;

}keynode;

头文件还包含一些系统头文件的声明:

#include"stdio.h"

#include"string.h"

#include"conio.h"

#include"windows.h"

还有一些函数的声明,用#ifndef、#endif来包含,以免重复包含。

2、插入模块

插入模块分为书籍入库、注册、登陆3大块,分3个函数,声明如下:

void insert(book*bhead);//入库

void reg(reader*head);//注册

reader* login(reader*rhead,book*bhead);//登陆

这3个函数分别实现新书入库、读者注册、登陆等功能,入库功能只有管理员才能调用,其余函数均可以调用。

3、读写模块

此模块主要实现向文件写入、读取数,主要是2个文件:reader.txt、book.txt,分为4个函数:读者读写函数,书籍读写函数。定义如下:

book* Bload();//书籍链表读取

reader*Rload();//读者链表读入

void Bsave(book*Bhead);//书籍链表写入

void Rsave(reader*Rhead,book*bhead);//读者链表写入

读者和书籍链表的初始化就由读取函数完成,若文件为空则返回空指针,若不为空,则将文件里面的信息写入到链表中,每读出一个数据,分配一个空间,将该信息输入。4、查找模块

查找模块分书籍查找模块、读者查找模块,书籍查找模块分线性链表查询、遍历查询、索引表查询,读者查询直接遍历读者链表,查找该读者,若存在,返回指针,不存在则返回NULL。查找模块的定义如下:

book*S_name(book*head,char name[]);//按书籍名查找函数

void S_author(book*head);//按作者查找

keynode*initindex(book*head);//初始化建立索引表

book*S_number(long num,book*bhead);//按书号查找

reader*S_reader(reader*rhead,long num);//查找读者

5、显示模块

根据给出的节点指针,显示该节点所包含的信息,显示分为读者显示和书籍信息显示,

相关文档
最新文档