当前位置:文档之家› 数据结构-图书馆管理系统

数据结构-图书馆管理系统

数据结构-图书馆管理系统
数据结构-图书馆管理系统

湖南科技大学课程设计报告

题目: 图书管理基本业务模拟

院系:计算机科学与工程学院

专业班级:计算机科学与技术一班

学号:0905010119

学生姓名:张杰

指导教师:李峰

2010年12月31日

一、问题分析

图书馆基本业务模拟包含多方面的操作,其中本程序描述的是图书馆的新书入库、读者注册、图书馆借阅、归还、信息查询(含书籍信息查询和读者信息查询)等功能。

1)新书入库功能:

新到书籍入库包含几方面的操作:查询该书名的书籍在图书馆信息中

是否已经存在,若存在,则增加可借数量和书籍总量,若不存在,则

新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书

名(字符串类型)、该书作者名(字符串类型)、该书出版社信息(字

符串类型)、出版日期(长整型)、该书的现存量(整型)、该书的总

量(整型)。输入该信息之后,将该节点插入到书籍信息链表中去。

该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整

个数据都是有序的,方便查找。

2)读者注册功能

没有账号和密码读者和管理员都不能登录系统,本系统默认第一个注

册系统的是系统管理员,借阅号为1000,权限是1,并输入自己基本

信息,默认可借本数为10,并将所借书信息区全部置零。不是第一

个注册的读者,借阅号从1000往后顺延,自己设置密码,权限为0.,

其余信息与管理员相同,但是登陆之后的界面,管理员可以看到“入库”

菜单选项,普通读者不能看到该选项。

3)借阅功能

书籍借阅主要涉及存书库和读者信息库双方的更新。用户首先登陆系

统,查询(3种查询方式)该书是否存在,该书的剩余数量是否大于

零,最后查询该读者是否已经借满书籍。若以上条件都满足,则将该

书编号存入该读者的借阅信息区,将该读者的可借书数量减一,该存

书的可借数量减一。

4)归还功能

读者登录后按书名号来归还所借书籍,若书名号正确并且确认归还该

书籍,则从读者的借书区删除该书籍,读者的课结束数量加一,将该

书的可借数量增加一,然后返回。

5)信息查询功能

信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者

登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可

借书本书以及所借书的信息),还可查询书籍信息,可根据书籍的编号

来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。查询到

该书籍后显示是否借阅该书籍。

二、数据结构描述

根据所给信息,可以采用线性链表来实现该问题。现在分别给予描述。

1)读者

读者有很多信息需要使用,其中包含读者的姓名、性别、密码、权限、所借书信息。这里我们定义一个结构体来描述他。定义的结构体代码如下:

typedef struct READER{

long number;//借阅号

char name[15];//读者姓名

char sex;//读者性别

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

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

long borrowed[10];//读者已经借阅的书籍编号

int limit;//读者权限

struct READER *next;//该结构体作为线性链表的一部分用来链接下一个节点的指针

}reader;

2)书籍

同读者信息一样,书籍也有很多信息需要描述,其中包含书籍的编码、书名、书籍作者、书籍的总量、书籍的可借数量、出版社信息、出版日期,整个全部我们定义一个reader类型的结构体,该结构体定义的代码如下:

typedef struct BOOK{

long number;//书籍编号

char name[30];//书名

char author[30];//作者

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

long presstime;//出版日期

int exist;//在库数量

int total;//总数量

struct BOOK *next;//指向写一个节点的指针

}book;

3)数据链接

数据通过每个节点的“next”指针来链接,是单线性链表,只可以从头部查询数据,所以要记录好该链表的头结点位置,不要拿该节点的头结点参与运算,否则在程序中可能会修改该链表的头结点的信息,导致后续程序无法运行。

4)查询

查询书籍分为按书名查询、按书号查询和按作者查询。按书名查询到的书籍我们设定为是唯一的,及整个书库中只有一种叫该名的书籍。

根据输入的书籍名,从书籍信息链表的首元节点开始遍历,若查找到则返回该书籍的指针,若没找到,则返回NULL。按作者查询的书籍可能不止一种,一样从头结点开始遍历数据,每查到一个,则输出该书信息,并且继续往下查询,该函数没有返回者,读者可以根据查询到的数据,记下编号或者书名来进一步确认该书籍信息,然后借阅该书籍。按书号查询,书号作为KEY值,在书籍里面是独一无二的,我们建立一个索引

表,每两个key 之间有5本书籍,这样根据所查书籍的书号可以确认该书在那个大概的区段,但后从该区段的首地址往下搜索最多5次便可确认该书的位置或者确认该书是否存在于该书库中。

查询读者信息读者登录之后可以查阅自己信息,从读者头结点开始

往下查询,若查询到该读者,则返回该读者指针,并且显示该读者信息,若没有查找到,则返回NULL 。

A 、借阅模块:

函数声明:void borrow(reader *temp,book*Bhead);//借书

说明:Temp 是该读者的指针,Bhead 是该书籍链表的头指针。该函数的流程图

相关主题
文本预览
相关文档 最新文档