图书管理系统要求和实现.docx
- 文档编号:14963568
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:19
- 大小:199.27KB
图书管理系统要求和实现.docx
《图书管理系统要求和实现.docx》由会员分享,可在线阅读,更多相关《图书管理系统要求和实现.docx(19页珍藏版)》请在冰点文库上搜索。
图书管理系统要求和实现
图书管理系统要求和实现
第一部分:
需求概述
1.图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
因此本人结合开入式图书馆的要求,对MSSQLServer2000数据库管理系统、SQL语言原理、Delphi应用程序设计,Delphi数据库技术进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。
系统运行结果证明,本文所设计的图书管理系统可以满足借阅者、图书馆工作人员和高级管理员三方面的需要。
第一章对数据库应用系统开发和图书管理系统进行了简明的介绍,并分析了开发图书管理系统所应进行的工作。
第二章对数据库的设计和SQL语言的使用进行了系统分析,为深入理解数据库应用打下了基础。
第三章学习了具体的开发工具Delphi6.0,对其数据库组件,SQL语言在Delphi中的应用等数据库编程关键技术进行了系统的介绍。
第四章分析了图书管理信息系统的应用需求,按照数据库设计理论一步一步地给出了系统需求说明书、局部ER图、全局ER图、系统关系模式,子模式,利用MS SQL Server2000建立了数据库
第五章进行了具体的程序设计,具体划分了三类用户的操作权限,设计了了三个操作界面。
实现了数据库表的浏览,记录的添加、删除和修改,报表的生成,实现了多数据库表的连接操作,实现了多条件查询和模糊查询,并灵活实现了对不可更新查询结果集的更新操作,实现了主从表操作,实现了密码维护功能,最后,系统还可以导入数据库以对任意同结构的数据库进行操作。
设计充分利用Delphi6、MSSQLServer2000数据库技术的强大力量,提高了编程效率和可靠性。
关键词:
数据库,SQL语言,MSSQLServer,Delphi6,
数据库组件,图书管理,窗体,listview组件
2.当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好图书馆信息而设计的。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。
根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。
数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。
总的来说,缺乏系统,规范的信息管理手段。
尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的图书进行更改就更加困难了。
基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
3.系统构成
管理信息系统是由若干相互联系的单元组成的一个有机整体。
其基本单元为:
(1)信息源。
亦即信息的来源,此处指系统处理对象。
信息源可分为内部信息源和外部信息源。
(2)信息处理机。
信息处理机获得数据,将其转换为信息并提供给接收器的一组装置(也可是人)。
一般来说由四部分组成:
①用于收集、筛选、汇录有关数据资料的数据采集装置;②用于整理、计算和处理数据资料的数据变换装置;③将数据从信息源输送至处理中心和将信息从处理中心输送给接收者的数据传输装置;④把数据和信息存储以供随时查询的数据存储和检索装置。
在管理信息系统建设的初级阶段,这里的自动装置一般是指人。
⑶信息主管。
负责图书馆管理信息系统的设计、运行,与有关方面协调配合的人员。
⑷信息接收器。
主要包括存储媒体和用户两部分。
第二部分:
整体设计
与该系统关联的数据库名为“Library”,其中包含下列信息:
Books
Customer
Borrow
Returns
Book_id
Cust_id
Borrow_id
Ret_id
Book_name
Cust_name
Borr_date
Ret_date
Author
Cust_address
Cust_id
Cust_id
Category
Cust_tele
Book_id
Book_id
Price
Cust_submag
Status
Cust_subnov
Cust_subcom
Cust_subsb
Status
该图书馆管理系统应提供下列菜单项:
1.添加/修改/删除图书详细信息
2.添加/修改/删除顾客详细信息
3.添加/修改/删除借书事务信息
4.添加/修改/删除还书事务信息
5.显示系统信息
6.退出应用程序
点不同的菜单项,能够进入到不同的操作窗体,执行对应的增删改操作,具体的要求参见第三、四部分。
第三部分:
实现说明
根据用户的选择,将执行下列操作:
Ø添加/修改/删除图书详细信息
创建一个窗体,其中允许用户借助于导航按钮显示表中现有的图书,还应提供用于添加新书、保存修改和删除记录的按钮,图书类别(Category)包括“Fiction”、“Science”、“Technical”、“Computers”、“Newsletter”和“Comics”,在窗体上以列表框的形式表示,图书状态(Status)表示特定的图书当前是否可以借阅,在窗体上以选项按钮的形式表示。
Ø添加/修改/删除顾客详细信息
创建一个窗体,其中允许用户借助于导航按钮显示表中现有的顾客,还应提供用于添加新顾客、保存修改和删除记录的按钮,顾客借阅类型在窗体上以复选框的形式表示,与每个复选框关联的值存储在表中的不同字段中,顾客状态(Status)表示特定的顾客当前是否借了书,在窗体上以选项按钮的形式表示。
Ø借书事务
创建一个维护顾客借书事务的窗体,事务日期必须是当前日期,顾客和外借的图书在窗体上应以组合框的形式表示,其中分别填充来自Customer表的Cust_id和Books表的Book_id的值,顾客组合框应只显示尚未借书的顾客,图书组合框应只显示可以借阅的图书,顾客借书时,必须在Customer表中更新该顾客的状态,并在Books表中更新该书的状态,以反映该借书事务的执行,窗体应提供添加、更新和删除事务的功能。
Ø还书事务
创建一个维护顾客还书事务的窗体,事务日期必须是当前日期,顾客和归还的图书在窗体上应以组合框的形式表示,其中分别填充来自Customer表的Cust_id和Books表的Book_id的值,顾客组合框应只显示已借书的顾客,图书组合框应只显示顾客尚未归还的图书,顾客还书时,必须在Customer表中更新该顾客的状态,并在Books表中更新该书的状态,以反映该还书事务的执行,窗体应提供添加、更新和删除事务的功能。
Ø关于
“Window”菜单的“About”选项应显示“About”窗体,其中包括系统的名称、图标和版本。
Ø退出
关闭所有打开的窗体,并退出应用程序。
注释:
应在任何必要的地方显示适当的信息。
第四部分:
内容
在学习C#的过程中,可以逐步完成以上作业的要求。
说明:
以下的窗体设计,没有做到完全的规范,并且是英文的界面,学员在完成该设计的时候,实现的窗体仅作为功能上的参考。
按照如下所示创建MS-SQLServer数据库:
图1:
数据库
该工程包含五个窗体,按照如下所示设计这些窗体的用户界面:
About窗体(frmSplash.frm)
图2:
About窗体
BooksInformation窗体(frmBooks)
图3:
图书信息
CustomerInformation窗体(frmCustomer)
图4:
顾客信息
借书事务(frmBorrow)
图5:
借书
还书事务(frmReturn)
图6:
还书
事件和事件处理
为每个窗体上的“Exit”按钮的Click事件编码,使单击该按钮时卸载并退出窗体。
说明:
大多数事件处理代码都与数据库操作相关联。
常用标准控件
1.对frmBooks窗体的Load事件编码,用“Fiction”、“Science”、“Technical”、“Computers”、“Newsletter”和“Comics”等值填充“Category”列表框。
2.编写事件代码,用于操纵选项按钮控件的属性,从而在新添加图书时将图书的状态存储为“Available”,编写事件代码,用于在数据库中添加新顾客时存储适当的复选框值。
菜单和对话框
菜单结构:
File
Transactions
Window
Exit
Books
BorrowBook
Cascade
Customer
ReturnBook
TileHorizontal
TileVertical
About
图7:
主菜单
在每个菜单选项的Click事件中编写代码,启动相应的窗体。
访问数据库
1.基于Books表,在frmBooks窗体上执行如下操作:
a.对“Add”按钮的Click事件编码,在Books表中添加新记录。
b.对“Save”按钮的Click事件编码,在Books表中保存所做修改。
c.对“Delete”按钮的Click事件编码,删除Books表中的记录。
2.基于Customer,在frmCustomer窗体上执行如下操作:
a.对“Add”按钮的Click事件编码,在Customer表中添加新记录。
b.对“Save”按钮的Click事件编码,在Customer表中保存所做修改。
c.对“Delete”按钮的Click事件编码,删除Customer表中的记录。
3.基于Borrow表,在frmBorrow.frm窗体上执行如下操作:
a.对“Add”按钮的Click事件编码,在Borrow表中添加新记录。
b.对“Save”按钮的Click事件编码,在Borrow表中保存所做修改。
c.对“Delete”按钮的Click事件编码,删除Borrow表中的记录。
4.基于Return表,在frmReturn.frm窗体上执行如下操作:
a.对“Add”按钮的Click事件编码,在Return表中添加新记录。
b.对“Save”按钮的Click事件编码,在Return表中保存所做修改。
c.对“Delete”按钮的Click事件编码,删除Return表中的记录。
5.对命令按钮的Click事件编码,导航浏览每个记录。
6.用Books表和Customer表中的相应值填充窗体frmBorrow和frmReturn上的组合框,分别显示Book_id和Cust_id。
7.按照如下所示创建一个连接对象,用于执行更新Customer表和Books表的操作:
只要顾客借书,就必须将Books表中该书的状态更新为0,表明由于该书已借出,其他顾客不能再借阅该书,还必须将Customer表中该顾客的状态更新为1,表明该顾客已经借了该书;
只要顾客还书,就必须将Books表中该书的状态更新为1,表明其他顾客可以借阅该书,还必须将Customer表中该顾客的状态更新为0,表明该顾客已经还了该书。
第五部分:
图书管理系统设计分析
1.应用需求分析
图书管理系统需要满足来自三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。
图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括对工作人员、图书借阅者、图书进行管理和维护,及系统状态的查看、维护并生成催还图书报表。
图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询和维护部分个人信息。
一般情况下,图书借阅者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他借阅者的借书情况和个人信息,就要知道其他图书借阅者的借书证号和密码。
这些是很难得到的,特别是密码,所以不但满足了图书借阅者的要求,还保护了图书借阅者的个人隐私。
图书馆工作人员有修改图书借阅者借书和还书记录的权限,所以需对工作人员登陆本模块进行更多的考虑。
在此模块中,图书馆工作人员可以为图书借阅者加入借书记录或是还书记录,并打印生成相应的报表给用户查看和确认。
图书馆管理人员功能的信息量大,数据安全性和保密性要求最高。
本功能实现对图书信息、借阅者信息、总体借阅情况信息的管理和统计、工作人员和管理人员信息查看及维护。
图书馆管理员可以浏览、查询、添加、删除、修改、统计图书的基本信息;浏览、查询、统计、添加、删除和修改图书借阅者的基本信息,浏览、查询、统计图书馆的借阅信息,但不能添加、删除和修改借阅信息,这部分功能应该由图书馆工作人员执行,但是,删除某条图书借阅者基本信息记录时,应实现对该图书借阅者借阅记录的级联删除。
并且还应具有生成催还图书报表,并打印输出的功能。
设计不同用户的操作权限和登陆方法
对所有用户开放的图书查询
借阅者维护借阅者个人部分信息
借阅者查看个人借阅情况信息
维护借阅者个人密码
根据借阅情况对数据库进行操作并生成报表
根据还书情况对数据库进行操作并生成报表
查询及统计各种信息
维护图书信息
维护工作人员和管理员信息
维护借阅者信息
处理信息的完整性
对借阅过期的图书生成报表
2.应用系统开发工具
Delphi6.0 VCL组件的体系结构
Delphi类可以粗略地分成两部分:
一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。
在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。
这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。
实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了。
这一小节简略介绍一下Delphi6.0中VCL(可视化组件库)组件的体系结构。
凡是做过程序开发的人都知道从来没有单纯的数据应用程序,也就是说,数据库应用程序必须和用户界面(可以是图形界面,也可以是命令接口)元素相结合,只讲界面或只讲数据库本身都构不成数据库应用程序,因而用Delphi6.0开发数据库应用程序就隐含着界面开发。
组件在Delphi程序的开发中是最显眼的角色。
大家知道,在编写程序时一般都开始于在组件面板上选择组件并定义组件间的相互作用。
但也有一些组件不在组件面板上,例如Tform和Tapplication(典型的非可视组件)。
组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事件和Publish属性。
窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额。
在实际编程中,窗口组件类的对象都有句柄,可以接受输入焦点和包含其它组件。
图形组件与窗口组件并列,是另一大类组件。
图形组件不是基于窗口的,因而不能有窗口句柄,不能接受输入焦点和包含其它组件。
从图8-43中可以看出,图形组件的基类是TgraphicControl,在实际编程中,它们必须寄生于它们的宿主——窗口组件类的对象,由它们的拥有者负责其显示,而且它们还能触发一些和鼠标活动相关的事件。
图形控件最典型的例子是Tlabel和TspeedButton。
由此可以看出图形组件的功能很弱,图形组件的用处何在呢?
其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少。
在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗。
非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件)。
最后要说明一下,常说的控件实际上是一种组件。
也就是说组件这个概念要大于控件,控件在内涵上包含于组件中。
控件由Windows系列操作系统提出并使用,而组件是Borland和其它厂商在对Windows控件做了必要的扩展之后提出来的概念,它们是在不同时期由不同的厂商提出的概念。
数据库组件介绍
用Delphi6开发数据库应用,重点是和各种数据库组件打交道,能和数据库挂钩的组件对象有5种,它们是:
Session(数据库会话)、Database(数据库)、Dataset(数据集)、DataSource(数据源)、Datacontrol(数据控制组件,也叫data-controls即数据感知组件)。
其中前面4种统称为数据访问(DataAccess)组件。
这些组件的相互关系如图3-2所示。
ADO组件Delphi6.0包含了可以用来访问Microsoft公司的ActiveXDataObjects(ADO)格式数据库的组件。
ADO是Micrsoft公司关于各种类型数据的高等界面,后来逐渐演变成满足所有数据访问需要的完整解决办法。
ADO的对象模型是所有数据访问接口对象模型中最简单的一种。
Microsoft公司用来访问ADO数据的应用程序界面技术是OLEDB。
OLEDB是一种底层编程接口,用来访问许多不同类型的数据源,其中包括消息、文件系统以及其他一些非传统的数据源。
OLEDB是一个由ComponentObjectModel(COM)接口组成的集合,用来隐藏创建数据访问服务过程中的细节。
OLEDB提供了访问任何数据资源的方法,包括相互关联的数据库和相互不关联的数据库、Email和文件系统、文本和图形以及用户定义的数据对象。
Delphi的ADO组件无需依靠BDE而是使用ADO技术,提供了可以通过数据控制组件访问数据的新方法。
唯一的要求是在使用ADO组件时必须运行ADO/OLE-DB。
ADO组件的使用使得DELPHI在访问数据的类型和采用的技术方面都有了很大的突破。
数据模块设计窗口数据模块设计窗口是用来设计和维护数据模块的。
数据模块设计窗口中包含了所有以.DTI作为文件扩展名的DataDiagram文件的信息。
DTI文件在编译时不起任何作用
语言在Delphi中的应用
在Delphi中使用SQL语言非常方便,一般来说,都是通过Tquery或TADOquery组件来使用SQL语言的。
可以在Tquery或TADOquery组件的SQL属性中设置SQL语句。
设计程序时,在该组件的属性对话框中选择SQL属性,单击带省略号的按钮,就可以打开StringListEditor对话框,然后我们就可以在对话框中添加SQL语句。
还可以使用Delphi的SQLBuilder来自动生成SQL语句,这样可以避免手工编写SQL而可能造成的语法错误。
静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量。
动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,例如下面的语句是一条动态SQL语句:
Select*FromBookWhere图书编号=:
bookCode;
其中的变量bookCode便是一个参数变量,它由一个冒号引导,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值。
为参数赋值有三种方法:
①根据参数在SQL语句中出现的顺序,设置TADOQuery组件的parameters属性值为参数赋值。
②直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值。
③将TADOQuery组件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TADOQuery组件的SQL语句中的参数名相匹配的字段值赋给其对应的参数。
利用这种方法也能实现所谓的连接查询,创建主要—明细型数据库应用。
在使用动态SQL语句编程时,常常用到一个很重要的方法Prepare,调用Prepare方法之后,Delphi会将带参数的SQL语句传送给与其对应的数据库引擎,对动态SQL语句进行语法分析和优化。
虽然在用动态SQL语句编程时,调用Prepare方法并不是必须的,但是调用Prepare方法后,会极大地提高动态SQL语句的执行性能,特别是当要反复多次执行同一条动态SQL语句时,其优越性会更加明显。
如果在应用程序中执行一条SQL语句之前并没有显式地调用Prepare方法,每次在执行SQL语句时,Delphi会隐含地调用Prepare方法以准备这个查询。
TadoQuery部件还有一个Prepare属性,这是一个布尔型属性,当其属性值为True时,表明该查询已被准备好了(SQL语句已被传送到数据库引擎中),当我们使用参数编辑器ParametersEditor来为动态SQL语句中的参数赋值时,当设置完相应的参数值并退出参数编辑器时,Delphi会隐含地调用Prepare方法以准备好查询。
当SQL语句执行完之后,要想准备下一个查询,首先必须调用Close方法,然后才能调用Prepare方法准备下一个查询。
一般来说,在一个应用程序中应该调用一次Prepare方法,常常在窗体的OnCreate事件处理过程中调用Prepare方法,然后用上述介绍的方法为参数赋值,最后调用Open方法或ExecSQL方法执行SQL语句,以完成查询。
当然在调用Prepare方法准备好一个查询时,会消耗一些数据库资源,因而每当一个查询执行完毕之后,要养成调用UnPrepare方法以撤消查询的好习惯。
在运行程序过程中,通过程序改变TQuery或TADOquer
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 要求 实现