北邮数据结构图书馆文档.docx
《北邮数据结构图书馆文档.docx》由会员分享,可在线阅读,更多相关《北邮数据结构图书馆文档.docx(16页珍藏版)》请在冰豆网上搜索。
北邮数据结构图书馆文档
数据结构课程设计文档
图书馆管理系统
By:
Oneseven
一、任务描述:
图书馆作为一个信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据。
以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况的统计和核实等往往采用对借书卡的人工检查进行。
这种人工管理的方式存在许多缺点,如:
工作效率低下、保密性差且较为繁琐,另外随着图书资料数量的增加,其工作量也将大大增加,这必然增加图书资料管理者的工作量和劳动强度,给图书资料信息的查找、更新和维护都带来了很多困难。
由于数据繁多,容易丢失,且不易查找,因此容易出错。
总的来说,缺乏系统、规范的信息管理手段。
这样的管理机制已经不能适应时代的发展,传统的手工管理方法必然被以计算机为基础的信息管理方法所取代。
因为作为计算机应用的一部分,使用计算机对图书信息进行管理,具有手工管理所无法比拟的优点。
例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高管理效率,也是企业的科学化、正规化管理,与世界接轨的重要条件,同时能够极大地提高图书管理的效率。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
基于这些问题,有必要建立一个图书管理系统,使图书管理工作规范化、系统化、程序化、避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
本图书管理系统是典型的信息管理系统,该系统主要实现学校图书馆的新书入库、图书借阅、图书检索、读者设置、图书信息调整等智能化管理过程。
图书管理者只需略懂电脑知识就可以简易的操作本图书管理系统,从而抛弃了以往手工作坊笔纸登记不科学的方法。
学校图书馆有很多的图书,每个教师、学生有多种不同的借书权限和借书数量。
建立图书馆管理系统,包括图书的购入、编码、借出、还回、统计、查询等功能。
二、功能需求说明及分析:
图书馆中有许多的书,需要设计程序对其进行管理。
程序要代替人员完成一个图书馆中进行的几种操作,比如图书增加,图书借出,图书归还等,还要对读者信息进行统一管理。
本系统主要实现对图书借阅信息管理中的读者、图书、借阅等信息的管理,读者管理可以浏览读者的信息,可以对读者信息进行维护。
图书管理可以浏览图书的信息,可以对图书信息进行维护、修改、增加等操作。
借阅管理可以显示当前数据库中书籍借阅情况,可以对借阅信息进行维护。
每种图书包括图书编号、书名、作者、出版社、简介、购入时间、数量等信息。
这需要使用类或者结构类型来构建书本的数据。
我们采用结构类型,每本书的结构中包含所有需要的信息。
然后采用链表的方式储存所有的图书,实现增删改查。
图书馆在购进图书时可根据图书的信息自动生成编码,生成的供内部使用的编码可以方便图书的管理,用以区分每两本书(即使是完全相同的两本书)。
我们的编码采用两位类型识别码+两位出版社识别码+五位流水号。
读者分为教师和学生。
每位教师、学生包括姓名、工作证(学生证)号、所在学院、借书权限、借书数量等信息。
同样采用结构类型来实现。
统一为读者结构。
在其中通过一位tag身份识别码来区分教师或学生。
其他信息教师与学生类似。
采用链表方式存储,实现增删改查。
需要借书时,首先通过工作证(学生证)号来登入系统,系统将判断读者的借书权限是否可借书。
然后读者可以选择查询所借图书,查询到后,若图书为可借且借书权限为可借,则借书成功。
同时日志管理模块将借书单据存根。
需要还书时情况与借书类似。
系统在登录后将根据读者是否超期(10天)提示罚款,未罚款时无借书权限。
将图书信息和读者信息存放在txt文件中,建立图书基本信息文件、读者基本信息文件,并且单独存放日志txt文件,每次时间轴推进时输出当天信息。
通过查询统计功能,读者可根据图书的名称、编码、作者、出版社等信息查询图书的其他信息,也可根据图书的分类等信息查询图书的具体信息等,包括某图书库中尚存多少本。
采用两位识别码区分类别。
可以查询教师、学生的情况,显示出已借出的图书情况,读者的借书诚信情况,比如是否有超期未还情况,以及目前的借书权限。
对于库中已借完的图书,读者可预约,待库中有还回时能提示通知该读者,在读者登录时显示。
模拟系统以时间为轴向前推移,每10秒左右向后推进1天,在有输入时暂停推移。
建立日志文件,对图书借阅情况进行记录,每天自动输出到日志文件。
三、总体方案设计说明:
用结构和链表来实现数据管理,用各个模块来实现对数据的操作,以及与用户交互的界面,采用txt格式文件来储存程序运行所需要的信息。
主题结构说明:
数据的储存:
•图书信息的储存。
每本图书的信息包括图书编号、书名、作者、出版社、简介、购入时间、数量等信息,用结构(struct)实现
•教师和学生信息的储存。
包括姓名、工作证(学生证)号、所在学院、借书权限、借书数量等信息,用结构(struct)实现
模块的划分:
•主模块。
接收输入命令,调用相应模块,并在无操作时每10秒向后推进1天
•图书信息管理模块。
包括图书购入(增加)、图书查找、图书删除、显示所有图书等功能。
对书库中的图书信息进行管理和查看功能,包括新书入库和清空库存功能,主要解决实际应用中图书馆增进新书种类数目或已有图书损坏丢失问题。
其中,新书入库功能要求输入图书编号、书名、作者、出版社四项信息,用户输入图书编号后,系统首先判断书库中是否有该书的记录,如果满足条件,则要求输入购入数量后修改总库存和现有库存,如果不满足条件,则要求补全图书信息后新建一条库存记录;清空库存功能要求输入图书编号,用户输入图书编号后,系统首先判断书库中是否有该书的记录,如果满足条件,则删除书库中该书的记录,如果不满足条件,则返回错误提示。
•读者信息管理模块。
包括增加读者、更改读者信息、删除读者、查找读者、显示所有读者信息等功能
•图书借还模块。
首先进行账户登录,然后实现借书、还书、预约、罚款等功能。
管理书库中的图书借阅相关行为,包括图书借阅和图书归还功能,主要解决实际应用中图书馆图书借出和归还信息的管理的问题。
其中,图书借阅功能要求输入图书编号,用户输入图书编号后,系统首先判断书库中是否有该书的记录以及是否还存在剩余库存,如果有且剩余库存大于0,则借出一本书,将该书现库存量减1,并登记借阅者的证件号和归还期限,如果没有,则返回错误提示;图书归还功能要求输入图书编号和证件号,用户输入图书编号和证件编号后,系统首先判断书库中是否有该书的记录及是否借出,如果满足条件,则归还一本书,将该书现库存量加1,并删除该证件下该条借阅记录,如果不满足条件,则返回错误信息。
•日志文件处理模块。
实现文件读取功能,需要存为文件的有:
图书信息、教师和学生信息、借书单日志,并单独用一文件夹存放日志
•查询统计模块。
根据图书的名称、编码、作者、出版社等信息查询图书的其他信息。
也可根据图书的分类等信息查询图书的具体信息等,包括某图书库中尚存多少本。
可以查询教师、学生已借出的图书情况,读者的借书诚信情况。
在查询图书时同时显示图书的借阅率。
查找书库中的图书信息,包括按编号查找,按书名查找和按作者查找功能,主要解决实际应用中借阅者查找想要借阅的图书信息和图书馆对图书各类信息的实时管理问题。
其中,编号查找功能要求输入图书编号,用户输入图书编号后,系统首先判断书库中是否有该书的记录,如果满足条件,则输出包括图书编号、书名、作者、出版社、总库存和剩余库存等全部图书信息,如果不满足条件,则返回错误信息;书名查找功能要求输入图书书名,用户输入图书书名后,系统首先判断书库中是否有该书的记录,如果满足条件,则输出包括图书编号、书名、作者、出版社、总库存和剩余库存等全部图书信息,如果不满足条件,则返回错误信息;作者查找功能要求输入图书作者,用户输入图书作者后,系统首先判断书库中是否有该书的记录,如果满足条件,则输出包括图书编号、书名、作者、出版社、总库存和剩余库存等全部图书信息,如果不满足条件,则返回错误信息。
四、数据结构说明和数据字典:
数据名称和用途
数据结构:
功能
结构体名
图书信息链表
structBook
读者链表
structReader
函数列表:
功能
函数名称
增加读者
voidreader_add()
查找读者
voidreader_search(chari)
删除读者
voidreader_delete()
显示此读者
voidreader_print()
显示所有读者
voidreader_list()
读者维护
voidreader_operate()
书籍维护
voidBook_operate(){
购入书籍
voidadd_book(){
删除书籍
voiddel_book()
显示此书信息
voidprint_book(Bookptra){
显示所有书籍信息
voidprint_all()
查询书籍
voidsearch_book()
借阅
voidBook_borrow()
还书
voidBook_return()
读者使用操作
voidBook_manage()
保存书籍信息到文件
voidSave_book()
保存读者信息到文件
voidSave_reader()
保存借阅信息到文件
voidSave_order()
载入保存的信息文件
voidLoad()
打印所有图书借阅率
voidbook_number()
查询操作
voidsearch_operate()
产生流水号
voidserial1()/voidserial()
数据字典:
(1)图书信息链表
结构体:
typedefstructBook{
intNum;//数量,指图书购进的总数
intRemain;//剩余量,图书购进总数减去借出数量
charISBN[11];//ISBN
charType[3];//书籍种类代号,有效位为两位
charPress[3];//出版社代号,有效位为两位
charBname[30];//书名
charAuthor[30];//作者名
charIntro[300];//书籍简介
charDate[8];//购入日期,八位,格式例如20120821
charCode[10];//内部编号Code(9)=Type
(2)+Press
(2)+serial(5),//serial为流水号
Book*nextptr;
}Book
(2)读者链表
结构体:
typedefstructReader{
chartag;//读者身份标识,1为教师,2为学生
intPms;//学生为5,教师为7,可借的总数量,即为借书
intAmount;//已借书数量
charID[11];//学号或者工作证号,10位数字
charSchool[3];//学院代号,两位
charCode[8];//内部编号Code(7)=tag
(1)+School
(2)+serial(4)
charName[30];//姓名
Bookptrbook[10];
Reader*nextptr;
}Reader;
五、各模块设计说明
主模块:
可以调用所有模块,包含时间函数,可以随时间推移增加日期。
图书信息管理模块:
图书的购买添加时,提示用户输入所有的数据,然后建立一个新的图书结构结点,将所有信息录入,调用文件处理模块,更新图书数据文件;
图书删除时,根据输入书籍的编码,遍历链表,查到书籍结点,删除该结点。
调用文件处理模块,更新图书数据;
显示书籍信息时遍历所有图书结点,依次显示所有信息。
读者信息管理模块:
增加读者时,提示输入读者的信息,新建结点,加入链表,调用文件处理模块,更新读者信息文件;
删除时,遍历链表查找该读者id号以查到该读者,删除该结点,调用文件处理模块,更新读者信息文件;
显示时,遍历读者链表,依次显示读者信息。
图书借还模块:
借书时,首先判断读者已借数量和其权限,若可以继续借书,则调用查找模块查询书籍,查到后判断此书本借阅情况,若尚可以借出,则修改此书籍参数,修改读者参数,借书成功,调取文件管理模块在日志中添加借书单据。
若已经借完,询问读者是否预约。
若需要预约,则修改该图书中的数据,在“预约人”数组中存入预约者信息。
最后通过文件管理模块更新图书和读者文件的信息。
还书时,首先查找要还的书籍,调用查找模块。
查找成功后,判断借书日期,是否超期,若超过规定日期(10)则提示缴纳罚款。
然后查询该图书“预约人”数组,若有预约者,则提示该预约者图书已可以借阅。
最后通过文件管理模块更新各种数据文件以及日志文件。
查询统计模块:
查找图书时调用查找图书函数,遍历所有图书,查询到后输出书本信息。
查找读者时调用查找读者函数,遍历所有读者信息,查询到以后输出书本信息。
输出图书借阅率时,遍历所有图书,输出图书借出数除以总数得到的比率。
日志文件处理模块:
输出书本信息时,将ISBN、书名、作者、出版社、种类、购入日期、内部编码、简介、数量、剩余数量依次输出,以@为结束符,然后输出流水号和日期。
输出读者信息时,将ID、姓名、学院、内部编码、用户类别标签、可借总数、已借数量、已借书籍的信息依次输出,以@为结束符,然后输出流水号。
Save_order输出预约信息,供程序记录预约信息使用。
输出日志文件时,首先输出借书或者还书,然后分别输出读者的内部编号和书籍的内部编号。
六、测试情况说明
运行界面:
测试读者信息管理:
添加了一名读者信息
可以显示读者的信息
测试书籍管理:
添加了一种书籍信息
借书测试:
首先登入读者信息
借书成功
七、评价和改进意见
•程序目前还停留在演示阶段,功能还不完善,还需要增强健壮性。
可以进一步排除bug,排除细节错误。
•模块化程度不强,没有很明确的划分,在修改时难以仅仅修改模块内部函数,而有时需要在整个程序中排除错误。
以后在编程过程中应该更加明确分好模块,确定好接口,保证模块化的编程。
•程序的界面可以改进,可以改进为图形化界面。
•程序的算法可以改进,有些时间或空间复杂度可以节约。