图书馆管理信息系统分析与设计(共31页).doc
精选优质文档-倾情为你奉上目 录图书馆管理信息系统 陈清芽【论文摘要】这篇论文主要讲述关于图书馆管理信息系统的信息,特别是讨论了关于设计该系统时的思想、方法和过程,以及在细节上分析函数和方法的实现思想。在本论文中讲述的图书馆管理信息系统拥有一个交互式的界面、逻辑的数据库结构。并且在设计数据库时还考虑到了实体完整性约束、参照完整性约束、及尽量减少数据的冗余,在数据库里有包括表、过程、函数、触发器等5个数据库对象。许多涉及到图书、读者的信息的功能在本系统中都有实现。例如,你可以将新书的信息插入到数据库的图书基本情况表里;还可以对已经插入的关于图书的信息进行修改;更重要的是,读者可以从图书馆里借阅书籍。经过多次的测试和运行,本系统能实现其在设计时的所有功能。【关键字】图书、读者、管理系统、数据库、ODBCLibrary Management Information SystemChen Qingya【Abstract】 This dissertation mainly talk about information about the system of library, particularly discusses the design thinking ,method and process of creating a library Management Information System and analyses the function and method of realization in detail. This system , which is implemented in our project talked about in this dissertation has a very interactive interface , a very logical database architecture. What has been taken into account most are entity integrity , reference integrity and reduction of data redundancy. There are 5 database objects in total, including tables , procedure , trigger and so on. Many kinds of functions related to book or reader closely have been implemented in our system .For example: you can insert the information of a new book into database, you can also alter the information which has been inserted , more important ,the reader can borrow book from the library.After being tested many times ,the system can be run well !【Keywords】Book、Reader、Management System、Database、ODBC 1. 选题背景 1.1. 课题背景、意义和来源以及系统工具介绍1.1.1. 课题背景及意义今天,随着信息技术的发展,在图书馆的管理中运用传统的手工操作方式在现在这个数字化的时代已显得极不适应,因此,工作人员和读者对于运用计算机来辅助协调和管理自身工作的需求正在逐步提高。随着我国现代化技术的不断提高和普及,学校也在不断的提高它的各个部门的管理质量,而图书馆管理就是对图书的编目、查询及读者信息的管理,重要的是图书的信息管理,包括图书的采购、编目、下架、遗失等。因此,图书的管理是一个工作量比较大而且较为繁杂的工作,至今还有很多学校仍然采用人工管理的方式,由两三个工作人员管理图书档案,对于借书还书都是用手工来进行操作,而一旦借阅者较多时就容易因忙碌导致错误的产生,这样的情况在今天这样一个科技高速发展、工作节奏加快的年代真是感觉太原始了。自从管理信息系统这一新兴的管理方法引入我国,在我国企业管理中已有20多年的时间。现在,管理信息系统已经广泛应用于各行各业。因此在这样的前提下,我选择了“图书馆管理信息系统”这样一个较为普遍,同时又较为典型的课题。在当今这样一个科技高速发展的社会里,仅有理论知识是显然不行的,所以,我希望通过开发这个系统,能更好地把理论与实际结合起来,充分将自己所学的专业知识应用于实践之中,并在实践中不断充实自己,提高自己的专业技能水平,以获取更多的教益.1.1.2. 课题的来源本课题由学院和辅导老师提出,基于Delphi 7.0及SQL Server 2000数据库平台开发图书馆管理信息系统,用于解决图书在馆内的信息变更、查询,以及读者借阅图书等问题。 1.1.3. 系统工具介绍 本系统的开发工具是用面向对象的Delphi进行设计的。Delphi是由美国Borland公司推出的功能强大、使用灵活的快速应用开发工具,是面向对象领域的开发工具中的佼佼者。它具有运行速度快、易于学习和使用以及开发效率高等特点,是可视化的应用编程开发环境、可重用性面向对象语言、快速编译器和数据库的完美结合。它在各个方面都具有优越性,提供了一系列开发、测试和调试的先进工具,包括大量可以重复使用的VCL组件库、各种Form模板。其应用程序主要是围绕着窗体和单元两个部分进行,窗体(Form)是与用户直接可见的对象,Delphi的应用程序由多个窗体(Form)组成,与之相对应的是单元,每个单元对应一个Form程序区段,包含事件处理程序、过程和函数。1.2. 国内外发展概况目前,国际上大多数发达国家的图书馆基本上实现了电脑管理,尤其是那些较大型的图书馆还采用了大型数据库开发的软件,部分大型图书馆也使用Foxpro、SQL Server等。而基于Access数据库的多数是中小型图书馆。但在大多数不发达国家,基于SQL Server数据库的图书馆管理信息系统应用得很广泛。而在中国,许多中小型图书馆用的还是手工图书管理,大多数图书馆对计算机管理信息还没有一定的认识,而SQL Server数据库具有使用方便、学习简单、易学易用的特点,所以基于SQL Server数据库在非发达国家有着很广阔的发展前景。1.3. 研究内容及须解决的关键问题1.3.1. 研究内容课题研究的内容是关于图书馆管理信息系统的流通部子系统,是图书馆运用计算机管理和实际运用的具体体现,可以让大量的图书信息得到合理的安排。该系统使用的是Delphi 7.0,以SQL Server 2000数据库平台进行开发。1.3.2. 需要解决的关键问题* 用户需求分析* 系统整体规划方案及设定* 功能模块的划分及设定* 利用SQL select 实现数据的连接* 实现最终系统代码的设计2. 图书馆管理信息系统解决方案2.1. 方案内容我们可以用两层体系结构作为图书馆管理信息系统软件解决方案的核心,它的基本思想是将读者操作的界面同工作人员的操作界面分离,把信息系统按功能划分为管理和维护、信息服务和信息查询三大块,分别放置在相同或不同的硬件平台上。之后从需求出发构造数据库表,然后再由数据库表结合需求划分系统功能模块。这样,就把一个大的系统分解成了几个小系统。系统划分了子系统后,下一步的工作是继续划分子系统的小模块。先考虑在进入子系统时应该做什么,进入系统之后又应该做什么,提供哪些服务等。例如,对于图书信息服务子系统,在工作人员进入时首先得调用相关数据库表,找出该工作人员的基本信息;进入系统后,子系统得提供图书查询,图书借阅和还书的功能。2.2. 方案论证2.2.1. 方案的选择两层客户机/服务器技术在结构、开发环境、应用平台的开发方式上已经非常成熟。请求另一计算机为之服务的计算机称为客户机(Client).而处理数据库的计算机称为服务器(Server)。客户机/服务器是将处理工作分散到工作站和服务器上去处理,服务器不仅负责存取数据,还要对数据作一定的处理工作,这样在数据发送给工作站之前即取得查询结果集,从而在大部分情况下可大大减少网络传输的开销,因此,也减轻了工作处理负担,用户只需关心界面的处理工作即可。客户机/服务器系统的成功与否在很大程度上依赖于服务器。用户越多,服务器的处理负担越重,相应服务器硬件性能也要跟得上,否则就会导致影响时间比本地型数据库还要差的结果。客户机运行数据请求程序,并将这些请求传送到服务器。由客户机执行的计算称为前端处理。前端处理具有所有与提供、操作和显示数据相关的功能。C/S1数据库应用程序中客户端的主要功能: 从用户接收数据 处理应用逻辑 生成数据库请求 向服务器发送数据库请求 从服务器接收结果并显示结果在服务器上执行的计算称为后端处理。后端处理设备是一台管理数据资源并执行数据库引擎功能(如存储、操作和保护数据)的计算机。C/S数据库应用程序中服务器端的主要功能: 从客户机接收数据库请求 处理数据库请求 传送结果给客户机 执行完整性检查 提供并行访问控制 事务处理失败后,执行事务恢复 优化查询和更新处理2.2.2. 方案的技术实现 在设计图书馆管理信息系统时,我们采用了传统的基于两层的C/S结构来构建系统。根据需求的分析结果,在此C/S 结构中,客户端有两种的操作用户:工作人员和读者。Delphi 客户机/服务器结构原理:这里前端应用程序发送命令给基于服务器数据库引擎,再由后者负责从物理磁盘上读取数据并加以处理,最后返回给前端应用程序。服务器负责数据库处理工作,而工作站负责用户界面处理工作:读者查询信息及工作人员对系统的操作和维护。Delphi客户机/服务器的前端应用程序实际上不直接与数据库引擎打交道。每个客户服务器提供一个数据库通信接口,该数据库通信接口运行于前端。这些接口也称为数据库通信API等。数据库通信接口的工作流程如下:服务器数据库命令数据工作站的前端应用程序数据库接口数据库通信接口服务器端数据库引擎命令数据 图2-1 工作流程图Delphi 中的BDE提供了丰富和强壮的特性支持客户机/服务器应用的开发。它提供了支持多种数据库如:Oracle,SQL Server 以及任何ODBC数据源的统一和一致的应用程序编程接口。开发者可以不用修改数据库应用程序就能直接访问不同的数据库站点和数据格式。3. 系统总体设计3.1. 系统总体设计对于图书馆主要负责提供的功能是指从图书的购入开始直到该图书过期下架的整个流通过程,这其中包括图书入库、借出、归还以及对参与此流通过程的读者的信息管理 。(1) 新图书信息入库:建立图书信息库,以便读者进行查询和借阅。(2) 修改图书信息:在建立信息库时可能因操作错误或其它情况而造成数据库里图书信息的错误,需要修改这些错误。(3) 整理图书库:图书因使用过久或信息过时需做下架处理,或者在读者借阅书籍时发生遗失的情况下需做遗失处理,这些都需要修改数据库关于书籍的信息。(4) 读者信息管理:读者一般都是在校的学生和教师。教师的信息一般在建立档案后一般不需要修改(或修改量较小),而对于学生则会有新生入学和老生毕业等情况出现,这些都需要修改数据库关于读者的信息。(5) 借书:图书馆主要的功能就是提供书籍供读者借阅,在借阅图书时应按图书馆的规则进行借阅,例如不超过5本,如果已有超时借阅的图书,则在归还前不允许再借阅等等。(6) 还书:对于图书遗失或超期归还的情况应根据图书馆的规则进行处罚。(7) 规则管理:对于读者借阅书籍的权限(可借阅书籍数目,每人每本书可持有天数等)应该能按其类型加以分类,若有图书遗失或超期未还的情况发生,图书馆都应该规定处罚的条例。另外对于操作此系统的前端工作人员的权限也应该有一定限制。这些都应该只能由系统管理员来进行操作和修改。(8) 信息查询:一般读者在借阅书籍前都需查询图书馆关于所借书籍的大概信息:该图书是否在馆是否已借出在馆中的书架号;除查询书籍外读者还可查询关于自身的信息:是否有超期未还的图书,还可借阅书籍数目等。图书馆图书信息管理系统图书信息服务子系统图书借阅图书归还图书管理和维护子系统信息查询子系统系统初始化新书入库图书整理修改图书信息规则维护读者管理书刊目录查询读者借阅信息查询信息发布新书通报3.2. 系统总体功能图图3-1 总体功能图3.3. 数据库设计3.3.1. 数据库的选择图书馆管理信息系统是一个小型的数据库系统。在这里我们选择SQL Server 数据库进行开发。Microsoft SQL Server 是一种关系型数据库管理系统。关系模型是当前最受欢迎的数据存储和数据检索模型。所有的数据处理都涉及存储和检索数据的操作,Microsoft SQL Server是作为一个组织内部的全部数据的中心存储器来设计的。组织中数据的关键特征强调了这一方法的重要性。在客户机/服务器框架内,服务器数据库也要求与服务器的通信组件集成,以便和客户系统连接。Microsoft SQL Server的客户机/服务器使用Windows NT的内置网络组件。Microsoft SQL Server还在其网络组件的顶部添加了服务特有的中介组件:开放式数据库连接(Open Database Connectivity,ODBC)能使不同客户机进行相互连接,而不要求变更服务器及其他现存客户应用程序。3.3.2. 数据库设计表名属性说明表 BookBookID,BookName,BookWriter,BookPublic,BookBorrowed,BookPosition,TypeID,Publicdate,BookPrice,BookIntime,Note表Book 主要存储关于书籍的信息,主键BookID,外键TypeID引用表BookType表Reader ReaderID,ReaderName, ReaderSex, DepartmentID, JobID, ClassID, ReaderSum 表Reader主要存储关于读者的信息,主键ReaderID,外键:DepartmentID引用表Department,JobID引用表Job,ClassID引用表Class表ClassClassID,ClassName,BorrowSum,Deadline 表Class主要存储关于读者等级的信息,主键ClassID表BookRuleRuleID,RuleName,RuleContent 表BookRule 主要存储关于图书馆管理规则的信息,主键RuleID表BorrowRecorderBookID,ReaderID,BookDate,Deadline,BookReturn,PastTime,Penalty,Note 表BorrowRecorder主要存储关于书籍借阅的信息,主键BookID-ReaderID,外键:BookID引用表Book, ReaderID引用表Reader,表WorkerWorkerID,WorkerName,WorkerSex,WorkerRight,WorkerPassword 表Worker主要存储关于工作人员的信息,主键WorkerID表PastBookBookID,BookName,BookWriter,BookPublic,OutDate,Note 表PastBook主要存储关于过期图书的信息,主键BookID,外键:BookID引用表Book,图3-1 数据库表对象3.3.4. 数据库关系图图3-3 数据库关系图4. 图书馆管理信息系统的实现过程4.1. 系统结构我们用两层体系结构作为图书馆管理信息系统软件解决方案的核心,把信息系统按功能划分为管理和维护、信息服务和信息查询三大块,分别放置在相同或不同的硬件平台上,并将系统的操作人员划分为三类:读者,工作人员,系统管理员。工作人员系统管理员系统自由界面用户登录启动系统读者图书信息服务子系统图书管理和维护子系统加密界面密码正确吗?退出系统退出系统查询子系统退出系统是否图4-1 操作界面示意图4.2. 登录系统界面的设计1 从列表框里选择用户,此列表框内的用户直接与数据库里工作人员的表相关联。2 输入密码。判断该密码与工作人员表中定义的密码是否相符。3 如果不正确,提示输入正确的信息。4 如果正确,用户登录,并根据工作人员表中的用户权限设定其可操作界面。5 对于用户的权限规定: 权限为1的用户(系统管理员)拥有全部的权限。 权限为2的用户:除不能修改图书馆的规则管理以外,拥有其他的全部管理权限 ,相当于底层的工作人员:系统初始化、新书的入库、图书整理、修改图书信息、规则维护、用户信息管理、查询图书借阅、图书借出、图书归还。 权限为3的用户为前台的工作人员;他只能负责前台的工作:图书借出、图书归还。 图4-1 系统的登录窗体4.3. 信息服务子系统的设计信息服务子系统包括借书和还书两大功能模块:对于读者借书是应考虑的情况有:1 该图书是否在馆;2 该读者是否有借阅此图书的权限;3 该读者所借图书数目是否已满其可借图书数目或该读者是否有超期未还的图书。对于读者归还图书时应考虑的情况有:该图书是否超期,若有则应根据规则予以处罚。信息服务子系统的数据流图:图书基本情况表读者基本情况表读取图书编号输入数据查询图书信息图书编号显示不可借信息可借不可借读取读者编号输入数据查询读者信息读者编号显示不可借信息不可借借出书籍可借修改图书信息修改读者信息图书编号读者编号图4-2 借书的数据流图图书借阅子模块的界面设计:图4-3 图书借阅界面图书归还子模块的界面设计: 图4-4 图书归还界面图书借阅情况表读者基本情况表读取图书编号输入数据查询图书借阅信息图书编号是否超期是归还书籍否修改图书信息修改读者信息图书编号读者编号规则管理表处罚图书基本情况表 图4-5 还书的数据流图4.4. 管理和维护子系统的设计1 新书入库:首先根据图书名称自动产生图书编号(由数据库内的过程产生)。2 修改图书信息:根据输入的图书编号将已经插入的图书信息在界面上显示出来,然后由工作人员修改图书信息,将修改后的图书信息再重新插入数据库,此时的图书编号不发生改变。3 用户信息管理:对于已毕业的学生应删除其在数据库中的记录。新入学的学生应根据其学籍档案在读者基本信息表里为其建立信息记录。4 规则管理:根据图书馆的最新规定增加或修改已存在的管理规则。5 整理图书库: a、图书遗失:首先根据读者编号查询该遗失图书的基本信息。再根据管理规则对遗失该图书的读者进行处罚。之后对该图书的信息进行整理:在遗失图书基本情况表里为其建立一条记录,并将其在其它表里的相关记录信息予以删除。 b、图书下架:首先根据图书编号查询图书的基本信息。查看该书是否已借出。若已借出是否要进行下架的操作处理。对于下架的图书,首先应在过期图书基本情况表里为其建立一条记录,并将其在其它表里的相关记录信息予以删除。图书借阅情况表过期图书基本情况表读取图书编号输入数据查询图书借阅信息图书编号是否已借出是出库操作否删除图书记录插入操作图书编号是否继续操作图书基本情况表是退出否 图4-6图书下架的数据流图对于图书下架表单,在进行图书下架处理时,首先需要根据图书编号查询该图书的基本信息,所以在表单的代码处理中,应有检验图书编号的函数来检验数据库里是否存在该图书的编号,代码如下:function TfrmBookclear.CheckExistid(Code: string): boolean;begin try qrydel.SQL.Clear; qrydel.SQL.Add('select BookID from Book where BookID =:sno'); qrydel.ParamByName('sno').AsString := trim(edtbookno.Text ); qrydel.Open; if qrydel.RecordCount = 0 then Result := False else Result := True; except Result := False; end;end;只有当函数CheckExistid值为True时才能进行对此图书的下架处理,在对图书进行下架处理时,要将数据库表中除过期图书基本情况表外所有的表中关于该图书信息的记录全部删除。删除记录的函数代码如下:procedure TfrmBookclear.delete;var sbookno,sborrow:string;begin if rbtndel.Checked =true then begin if CheckExistid(edtbookno.Text ) = False then beginMessageDlg('此号<'+edtbookno.Text+'>不存在,请重新输入!', mtWarning,mbok,0); edtbookno.SetFocus ; edtbookno.SelectAll ; exit; end; if bookborrowed(edtbookno.Text)=true /图书已借出 then begin if MessageBox(0,PChar('此书<'+edtbookno.Text+'>已借出,确实要删除吗?'),'警告',MB_YESNO)= IDYES then begin try booknodel(edtbookno.Text); MessageBox(0,'删除完成',PChar('删除'+edtbookno.Text),MB_OK); except MessageDlg('删除<'+edtbookno.Text+'>失败',mtWarning,mbok,0); end; end else begin edtbookno.SetFocus ; edtbookno.SelectAll ; exit; end; end else begin try booknodel(edtbookno.Text); MessageBox(0,'删除完成',PChar('删除'+edtbookno.Text),MB_OK); edtbookno.Text:='' except MessageDlg('删除<'+edtbookno.Text+'>失败',mtWarning,mbok,0); end; end; end; if rbtnselect.Checked =true then begin sbookno:=tbbook.FieldValues'BookID' sborrow:=tbbook.FieldValues'BookBorrowed' if sborrow='是' /图书已借出 then begin if MessageBox(0,PChar('此书<'+sbookno+'>已借出,确实要删除吗?'),'警告',MB_YESNO)= IDYES then begin try booknodel(sbookno); MessageBox(0,'删除完成',PChar('删除'+sbookno),MB_OK); except MessageDlg('删除<'+sbookno+'>失败',mtWarning,mbok,0); end; end; end else /图书未借出 begin try booknodel(sbookno); MessageBox(0,'删除完成',PChar('删除'+sbookno),MB_OK); except MessageDlg('删除<'+sbookno+'>失败',mtWarning,mbok,0); end; end; tbbook.Refresh; dbgbook.Refresh ; end;end;整理图书库子模块的界面设计: 图4-7 图书整理界面5. 开发过程遇到的问题及解决方法(1) 关于字段为datetime型时产生的问题在修改图书信息时:其中关于书籍的入库时间在数据库里定义为datetime型。当对书籍的信息进行修改后,若图书的入库时间为空时,则在插入数据时将产生错误。解决方法:当此字段为空时,将该书的入库时间默认为当前时间。(2) 对于有外键约束的表,在界面端用SQL语句向表中插入记录时,该外键属性值必不能为空,且必须将插入记录的所有属性都在语句中列出。如在图书遗失情况下,首先应向LostBook表中添加该图书的记录,但此处因有外键约束:BookID,ReaderID,则不能用语句:insert into LostBook values(:sno,:sreaderid,:sname,:swriter,:spublic,:sprice,:slostdate,:srepay)。(3) 图书遗失的表单中:首先需根据其读者编号查询该读者和书籍的信息。因此表单中的Query的SQL查询语句是预先已经定义好的,只是在运行时对其参数进行一次赋值(读者编号)操作。但在几次的操作之后发现:当打开该表单后只能查询一次读者的信息,即使对其参数赋不同的值,但显示的结果都是第一次所赋读者编号的所有信息。解决方法:在表单里对Query的SQL语句先清空,然后重新写SQL语句。(4) 关于图书整理表单的统计页的问题在此我定义了统计所有未按时归还的图书总数,其代码是:qrydel.SQL.Add('select count(BookID) from BorrowRecorder where PastTime=:stime');qrydel.ParamByName('stime').AsString :='是'但此处的PastTime :=是存在某些疑惑,因为在此系统里对于图书借阅表中是否超期的字段都是在还书时根据借书时间和可借期限进行统计然后再赋值的,所以若某些图书虽未归还但根据其借书期限已经超期了,但因该图书尚未归还则在图书借阅表中该超期字段并不是是。这种情况下的统计出来的结果则会发生错误!解决方法:在数据库段建立过程,只要图书已经超期则修改图书借阅表中是否超期字段(5) 总结:在Delphi 中出现的错误大体有以下几种编译错误:这种错误出现一般都是代码的语法问题。因为编译而导致Delphi 停运行运行错误:这个错误是发生在你准备运行Delphi 时的,例如:如果你试图给一个变量赋值,但是却超出了该变量允许的范围逻辑错误:逻辑错误是最难发现的,这种错误经常是一种结构错误。这就需要我们彻头彻尾地检查我们的代码。如何处理错误:发生错误后,我一般都是设置断点,对语句进行一条一条的调试6. 结束语经过一段时间的开发设计和调试,我基本实现了在系统设计时所设计的所有功能,设计出了一个功能比较完善的图书馆管理信息系统。在开发的过程中,我查阅了大量的资料,与同学特别是本小组的成员进行交流,向老师请教,学到了不少课本上学不到的知识。通过这次开发,我充分感受到了开发的艰辛,很多看起来简单的问题实际动手起来却不是那么回事,往往有这样或那样的错误,需要我一步一步地去解决,虽然在出现问题是感觉很头痛,特别是查找不出问题的原因时,然而更多的是实现功能后所享受到的喜悦。最后,向在此次设计过程中给与我帮助的同学表示感谢,同时更加感谢指导老师给予的这次机会,谢谢!参考文献1魏志强、王忠华、何敏、乔林,数据库应用实务篇,中国铁道出版社2000 2齐治昌 、谭庆平、 宁洪,软件工程,高等教育出版社 1997年第一版3韩强 ,SQL SERVER 2000 程序员手册,机械工业出版社 20004吴起程,DELPHI 5企业级解决方案及应用剖析电子工业出版社 20005潇湘工作室、邢增平,Delphi6.0最佳专辑,人民邮电出版社 20026飞思科技产品研发中心,Delphi6.0开发者手册,电子工业出版社 20027史彦军,Delphi5.0开发大全,中国水利水电出版社 20008飞思科技产品研发中心,Delphi分布式开发,电子工业出版社 19999 刑增平等,Delphi 6.0 最佳专辑,人民邮电出版社 2002 10 张子江、蓝薇等著,Delphi 6.0 高级开发范例,电子工业出版社2002年11 萨师煊、王珊,数据库系统概论,高等教育出版社 2000年第三版12 李新乐,现代图书馆管理,书目文献出版社 1989 专心-专注-专业