标题：图书管理系统
概念
图书馆管理系统，能进  图书管理系统软件行图书馆管理系统能实测国民经济和企业的各种运行情况；利用过去的数据预测未来；从企业全局出发辅助企业进行管理决策；利用信息控制企业的行为；帮助企业实现其规划目标。
图书馆管理系统合运用了管理科学，系统科学，运筹学，统计学，计算机科学等学科的知识。可以通俗的简化的描述图书馆管理系统的三要素：系统的观点、数学的方法以及计算机的应用。
图书馆管理系统概念结构主要由四大部分组成即信息源、信息处理器、信息用户、信息管理者组成。
结构
其中信息源是图书馆管理系统（MIS）的产地，信息处理器担负信息的传输、加工、保存等任务。信息用户是信息的使用者，它应用信息进行决策。信息管理者负责信息系统的设计实现。图书管理系统
特点及功能
1.3.1 图书馆管理系统的界面特点
在计算机软件技术中，人机界面已经发展成为一个重要的分支。  图书管理系统MIS人机界面设计一般遵循以下一些基本原则：
1．以通信功能作为界面设计的核心
2．界面必须始终一致
3．界面必须使用户随时掌握任务的进展情况
4．界面必须能够提供帮助
5．界面友好、使用方便
6．输入画面尽可能接近实际
7．具有较强的容错功能
图书馆管理系统的功能
1. 准备和提供统一格式的信息，使各种统计工作简化，使信息成本最低；
2. 及时全面地提供不同要求的、不同细度的信息，以期分析解释现象最快，及时产生正确的控制。
3. 全面系统的保存大量的信息，并能很快的查询和综合，为组织的决策提出信息支持。
4. 利用数学方法和各种模型处理信息，以期预测未来和科学地进行决策。
软件设计技术
面向对象的方法简介
面向对象方法是从20世纪80年代各种面向对象的程序设计方法，如smalltalk、C++等逐步发展而来的，最初用于程序设计，后来扩展到了系统开发的全过程，出现了面向对象分析和面向对象设计。
面向对象的程序设计思想（Object-orientedProgramming,简称OOP）的主要目的是要创建可以重用的代码，具备更好的模拟现实世界环境的能力，它通过给程序中加入扩展语句，把函数“封装”进Windows编程所必须的“对象”中，面向对象的编程语言使得复杂的工作条理清晰、编写容易，使人们从结构化的编程思想走到了面向对象的编程思想上。
面向对象方法学包容以下核心概念：
1．对象
在面向对象的系统中，对象是基本的运行实体，他包括数据属性，也包括作用于数据的操作（行为）。所以一个对象把属性和行为密封成一个整体。从程序设计者角度来看，对象是一个程序模块；从用户的角度来看，对象为他们提供了所希望的行为。在对象内的操作通常叫方法。
2．类
一个类定义了一组大体上相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性。把一组对象的共同特性加以抽象并存储在一个类中的能力，是面向对象技术最重要的一点；是否建立了一个丰富的类库是衡量一个面向对象程序设计语言成熟与否的重要标志。
3．继承
类之间的继承关系是现实世界中遗传关系的直接模拟，它表示类之间的内在联系以及对属性和操作的共享，即子类可以沿用父类（被继承类）的某些特征。当然，子类也可以具有自己独立的属性和操作。继承性是面向对象程序设计语言的最主要的特点，是其它语言（如面向过程语言）所没有的。
4．消息
对象之间进行通信的一种构造叫消息。当一个消息发送给某个对象时，包含要求接受对象去执行某些活动的信息。接受到消息的对象经过解释，然后给予响应。这种通信机制叫做消息传递。发送消息的对象不需要知道接受消息的对象如何对请求予以响应。
开发工具的特点
面向对象是软件开发的一种方法，产生的目标是增强应用程序代码的可重用性和可靠性，同时减少应用程序的维护工作。一个对象可以由其它的对象来创建，以此构造更复杂的对象。当这样的对象工作的很好时，设计者就不必再关心对象的内部结构。因此面向对象的软件设计方法效率很高。面向对象的开发方法主要特点是：
（1）继承性：继承是面向对象编程思想中的一个重要的概念，他是自动共享各个子类、子类中的方法和数据的有效机制；进而通过添加新的数据主方法定义成一个新的类。其后，我们又可以通过把新创建的子类作为父类，来创建它的新的子类。从上面的描述中可以看出，面向对象的编程中，类的创建是沿着树形的结构发展起来的。正是通过继承的机制，实现了我们编写的代码的重用，不仅节省了重复编码的时间，而且可以逐渐地完善我们的类，直到创建出满足我们需要的各种类。
（2）封装性：对对象最基本的理解是把数据和代码组合在同一个结构中，这就是对象的封装性。将对象的数据域封闭在对象的内部，使得外部程序必须而且只能使用正确的方法才能对要读写的数据域进行访问。封装性意味着数据和代码一起出现在同一结构中，如果需要的话，可以在数据周围砌上“围墙”，只有有用的对象类的方法才能在“围墙”上打开缺口。
（3）多态性：多态性是在对象体系中把设想和现实分开的手段，意味着几个不同的对象具有相同名字的方法（函数或事件），但每个对象为该方法提供的参数和实现过程都是可能不同。
如果说继承性是系统的布局手段，多态性就是其功能实现的方法。多态性意味着某种概括的动作可以由特定的方式来实现，这取决于执行该动作的对象。多态性允许以类似的方式处理体系中类似的对象。根据特定的任务，一个应用程序被分解成许多对象，多态性把高级设计处理的设想如新对象的创建、对象在屏幕上的重显、程序运行的其它抽象描述等，留给知道该如何完美地处理它们的对象去实现。
PowerBuilder8.0简介
PowerBuilder8.0是美国Powersoft公司推出的一种软件开发工具，他完全按照客户机/服务器体系结构设计，可以在Windows95及更高版本，WindowsNT,Macintosh,Aix /600,SunSolaris等开发平台上运行，还提供了众多的画板用于创建和管理不同的对象，并且具有强大的数据库操作功能，是一种非常优秀的面向对象的数据库应用开发工具，它的特点是：（1）系统开放；（2）可视化环境；（3）、面向对象编程；（4）功能强大的PowerScript语言；（5）多平台的开发环境。
下面简单介绍以下本图书馆管理系统开发中，用到PowerBuilder8.0中的一些主要内容。
PowerBuilder的窗口和控件对象
窗口是Windows应用程序中最常见、也是最重要的界面元素之一。PowerBuilder 开发的应用程序也是由各种窗口构成的，窗口与放置在窗口内的控件构成了应用程序的输入、输出系统：用户在窗口中输入信息、执行操作，窗口把执行结果反馈给用户。窗口和控件均有自己的属性、事件和函数，通过设置它们的属性，为事件编写脚本，可以定制它们的外观和行为，实现应用程序功能。
一. 窗口的组成
窗口由属性、事件以及放置在窗口里面的的控件组成。
属性
窗口的属性定义了窗口的显示和行为。
事件
窗口有自己的一系列事件，可以为窗口的事件编写脚本，从而控制当事件发生时窗口的行为。
控件
可以在窗口中放置PowerBuilder控件，以请求和接受用户的信息，并且返回给用户。
二. 窗口的类型
PowerBuilder提供了6种类型的窗口，他们是：主窗口、弹出式窗口、子窗口、响应式窗口、多文档界面框架窗口，以及带宏帮助的多文档界面框架窗口。
三. 窗口的继承性
窗口的继承性是PowerBuilder的一种重要功能。使用继承的方法建立新窗口，可以继承祖先窗口的样式、控件、事件、函数和脚本等，只需对继承而来的窗口作适当的修改即可，从而可以节省设计和编程的工作量。
PowerBuilder的菜单对象
菜单是Windows应用程序中最常见、使用最频繁的界面元素，通常情况下，用户通过选择菜单中的菜单项或者工具栏按钮来执行应用程序的操作。
菜单由一系列菜单项构成，用户通过选择菜单项发出命令，完成相应菜单项中的的程序。除了子窗口和响应窗口外，其他类型的窗口都可以拥有菜单。
在PowerBuilder中，菜单也是一种对象，在应用设计过程中，随时都可以创建和修改菜单对象。菜单对象有三种类型：
1.下拉式菜单
下拉式菜单出现在菜单栏的某个菜单项下面，他能够通过鼠标单击访问，也可以通过按Alt键的同时按下带有下划线的字符来访问。
2.弹出式菜单
弹出式菜单通常与一个对象相联系，也被称作上下文菜单。这种菜单包含了与它关联的对象的上下文的选项，它能够被这个对象所激活，并且提供了有效的手段来访问与对象有关的方法。
3.级联菜单
级联菜单是可以出现在以上两种类型菜单上的一种菜单，有时称为二级菜单。通常在父菜单项上有一个右箭头表示它，可以通过点击这个右箭头访问它。
PowerBuilder的技术核心数据窗口对象
数据窗口是PowerBuilder成为客户机/服务器（Client/Server）体系数据库开发领先地位的一个重要原因。通过它，不但可以对每个数据库的表进行检索、查询、删除和更新，还可以为数据指定输入格式、输出格式和显示风格等。另外，在数据窗口中，还可以添加各种对象、制表的附加信息、统计图以及生产报表等。我们可以把数据窗口看成是一个支持数据操纵的封装性很好的对象，他主要有两个作用：
（1）通过它可以操作数据库中的数据，并对数据进行各种处理，例如排序分组等，几乎可以完成数据库的所有操作。
（2）可以设计数据的输入输出格式以及统计图表和多种屏幕显示风格。
一. 数据窗口的概述
数据窗口对象的功能是显示数据并且允许用户进行修改。数据窗口对象包括两个主要的组成部分：数据信息和显示格式。
数据窗口对象为显示的数据存储了大量的信息，最重要的数据信息就是数据源。数据源决定数据窗口对象从何处获取数据信息。一个数据窗口对象通常显示来自相关数据库的数据，如DB2、Oracle、Iformix、Sybase等，但是它同样也可以显示一个文本文件或INI文件。除了各种数据源之外，数据窗口对象还能随时获取以下信息：何时修改了数据，数据类型是否正确，数据是否需要，数据是否通过特定的有效性验证规则等。数据窗口对象对每一项测试都是自动执行的，从而确保所有的数据都必须通过测试。
二. 数据窗口对象的工作原理
对于数据库的操作可以在程序中使用嵌入式的SQL语句。而用数据窗口来实现对数据库的操作可以使开发工作变得简单，开发人员可以利用数据窗口的交互式功能设计数据处理接口，实现对数据的操作，使开发变成一种享受。
数据窗口从数据源获得数据或者向数据源存入数据。当数据源是某个数据库时，数据窗口对数据的操作并不立刻反映在数据库中，而是先存入数据窗口的缓冲区中。每个数据窗口有3个缓冲区：当前数据缓冲区、过滤掉的数据的缓冲区、被删除数据的缓冲区。数据窗口对象包括了数据的组织形式、显示方式和处理方式，它不仅能够图形化地增加、删除、修改、更新、查询数据库中的数据，而且还可以定制数据的输入格式、输出格式以及数据的显示风格，同时开发人员还可以在数据窗口对象中增加多种对象（包括按钮、文本框、图片等）。
数据窗口的主要问题是以什么格式处理什么数据，一方面要确定被处理的数据，确定是否需要再组织这些数据；另一方面要确定这些数据以什么形式展现在用户面前，包括字体、颜色等。数据窗口的数据来源包括数据库，例如DB2、Oracle、Iformix、Sybase、SQLServer等大型数据库以及PowerBuilder自带的本地数据库SybaseSQLAnywhere，还可以来自文本文件、Dbase文件、Excel文件或用户输入的数据。本系统中用的数据库是PowerBuilder自带的本地数据库SybaseSQLAnywhere7.0。
PowerBuilder的数据窗口提供了11种显示风格：Tabular（列表）、Grid（表格）、Freeform（自由格式）、Label（标签）N—up（分栏）、Group（分组）、Grosstab（交叉列表）、Graph（统计图）、OLE2.0、RichText（超文本）、Composite（复合风格）。上述风格是数据窗口的基本显示样式，通过设置数据窗口对象和它包含的对象属性，能够构造出许多种显示界面。
本系统中用的显示风格有：Grid（表格）、Freeform（自由格式）
使用数据窗口对象的方法如下：
（1）在数据窗口画板中建立数据窗口对象。主要是定义数据源、显示风格、编辑风格、有效性规则、排序和检索条件等。
（2）在窗口或用户对象中建立一个数据窗口控件，并把这个控件和数据窗口对象连接起来。
（3）在窗口画板中编写脚本来控制数据窗口控件和数据窗口对象，实现对数据的操作。
三. 数据窗口的主要功能
数据窗口对象被创建后之后，可以给它增加许多功能，以便很方便地使用、操作数据窗口对象。
●排序数据
在定义一个数据窗口对象时，已经定义了对数据的排序，但此排序仅是在数据库中排序，也就是说，当用户从数据库中检索数据时，用户按照定义的排序标准对检索的结果进行排序，然后把这些排序的数据返回给用户。而在数据窗口对象中的排序，也就是说，当数据库把用户要求的数据输入到对象的缓冲区以后，用户可以在数据窗口中按照各种不同的顺序来重新排序这些数据，而这时对数据的排序跟数据库无关。
数据的过滤
在定义数据源时，通过使用Where子句、Having子句以及检索参数已经限定了从数据库中检索出来的数据，这就大大节省了程序运行期间所占用的时间和空间。
数据的分组
在powerBuilder中定义分组有两种方法。其一是建立一个Group显示风格的数据窗口对象，第二是对一个现有Tabular风格的数据窗口对象定义分组属性。.
数据窗口中数据的存储
通常用户只是希望数据窗口在程序运行期间检索出来的数据能够随着数据库中的数据更新而更新。但是，有时候数据窗口中存放的却是一些频率变化相对较小的数据，这种情况下，就可以把这些数据存储到数据窗口对象中，使得数据窗口被打开时，不需要到数据库中检索数据，而是直接包含了这些数据。
指定更新属性
数据窗口对象非常强大的原因之一就是它能够很容易的修改数据库。当修改了数据窗口对象内的数据时，例如插入一行或者删除一行数据时，只需调用Update函数，就能将数据保存到数据库中，更新数据库中的数据。
在创建数据窗口对象时PowerBuilder会自动设置缺省的数据库更新属性来保存所做的数据修改，在一般情况下，缺省的更新属性能够满足用户的要求，可是在多表操作情况下，应该重新设置更新属性，以保证数据库的完整性、一致性和安全性。
对于定义了更新属性的数据窗口对象，可以通过修改数据窗口中的数据而把这些数据提交到数据库中。所以数据窗口对象的更新属性实际上决定了能否更新数据窗口对象所对应的某个表，或者能否更新某个表中的某些列。
当一个数据窗口对象被创建时，PowerBuilder会自动地设置它的更新属性为可更新或者是不可更新，这取决于两个标准：一个是看这个数据窗口对象是对应一个表还是对应多个表：另外一个是看表的主键是否被数据窗口对象选中。
因为数据窗口对象只能更新一个表，所以，如果数据窗口对象只对应一个表，那么PowerBuilder就自动定义这个表中的所有列都是可更新的，并且此时所有列的TAB值均不为0，以便用户能够修改数据。可是，如果数据窗口对象对应多个表，则PowerBuilder定义每个表的所有列都不能够更新，并且所有列的TAB值都为0，使用户不能修改数据。
当用户的数据窗口对象对应多个表时，如果PowerBuilder设置的更新属性不符合用户的要求，也就是说用户想这个数据窗口对象能够更新数据库，那么用户必须手工修改数据窗口对象的更新属性。
2.3.4PowerBuilder的事务对象
在数据库中，所谓事务是指一组逻辑操作单元，使数据从一种状态变换成另一种状态。为确保数据库中数据的一致性，数据的操作应当是离散的成组的逻辑单元。当全部完成时，数据的一致性可以保持，而当这个单元中的一部分操作失败，整个事务应全部视为错误，所有从起始点以后的操作应全部回退到开始状态。
对事务的操作是这样进行的，先定义开始一个事务，然后对数据作修改操作，这时如果提交COMMIT，这些修改就永久的保存下来，如果回退ROLLBACK，数据库管理系统将放弃所作的所有修改而回到开始事务时的状态。
PowerBuilder中的事务管理
作为数据库的前台开发工具PowerBuilder支持事务管理的操作，在PowerBuilder中有一种称作事务transaction的对象，这个对象是PowerBuilder应用与数据库的通讯区域。PowerBuilder在应用时建立一个全局事务对象SQLCA。由于大多数的应用只用到一个数据库，所以一般开发者主要也只用SQLCA作为唯一与数据库连接的事务对象。
PowerBuilder应用程序与存储数据的数据库进行通信的步骤如下：
（1） 设置事务对象的属性值
（2） 与数据库建立连接
（3） 执行所需的数据库操作
（4） 断开与数据库的连接
需求分析
软件需求分析就是软件计划期间建立的软件可行性分析求精和四化，分析各种可能的解法，并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步，是确定系统必须完成哪些工作，也就是目标系统提出完整、准确、清晰、具体的要求。
需求分析可分为问题分析、需求描述及需求评审三个阶段
范围
本图书馆管理系统适应于中小规模公共图书馆、中小学及各院校图书馆
项目目标
本项目的设计目标旨在方便图书管理员的操作，减少图书管理员的工作量并使其能更有效的管理书库中的图书，实现了传统的图书管理工作的信息化建设。
本系统的服务对象为图书馆流通部门的工作人员，用户界面友好，不需计算机专业的专门训练即可使用本系统。
设计原则
图书管理处理的信息量比较大。因此对于本系统的设计，需要采取以下一些原则：
删除不必要的管理冗余，实现管理规范化、科学化。
程序代码标准化，软件统一化，确保软件的可维护性和实用性
能够连接各个关联的数据库，获取数据库中的信息。保证各个数据库表格相关的项目之间有相同的属性。
性能限制
这是一个在微型计算机上开发的系统，在响应时间上无特殊的要求，但要求系统能处理大容量的各种信息。
开发的软硬件要求
硬件要求：64M内存、10G硬盘1只、软盘驱动器1只、CD-ROM驱动器1只和SVGA兼容模式的显示器
软件要求：MicrosoftWindows98操作系统及Powerbuilder8.0数据库系统。
开发概要
图书管理系统的开发过程包括：调研和计划；需求分析；软件计划；编码和模块测试；总体测试；确认和评审；交付使用。
系统功能结构设计
综合考虑系统的逻辑模型和设计系统目标的要求绘制的系统功能结构
系统的主要功能
本系统包含如下的几个模块：身份验证、借阅图书、归还图书、打印催还单、信息查询、系统维护以及退出。
用户登录
系统运行后首先进入用户登录界面，用户登录的界面
用户登录界面
用户进入系统时，首先要进行图书管理员身份的验证。用户输入管理员的密码和编码，输入正确后，系统确认了操作者的合法身份即进入主控程序。
借阅图书
在系统主窗口中选择“借阅图书”，进入“借阅图书”。
借阅图书窗口
使用时单击“借阅”按钮或直接按回车键，光标定位于“借阅人编码或姓名”项。
输入借阅人的编码或姓名后，系统自动判别。如果系统的借阅人库中没有该借阅人的记录，那么系统将给出提示；如果系统库中确有其人，那么系统从数据库中读出该借阅人姓名并填入借阅窗口。同时，系统还将图书管理员信息、借阅日期（从主机系统日期中读取）、预期还书日期写入该窗口。
输入借阅图书的编码，单击“确认”按钮后，系统自动判断。如果书库中仅剩典藏书，系统将给出提示；如果书库中尚有可借书则完成本次借阅操作。如果单击“放弃”按钮，则取消本次借阅操作。
归还图书
在系统主窗口中，选择“归还图书”，进入“归还图书”窗口。
归还图书窗口
单击“还书”选项或直接按回车键，光标定位于“借阅人编码或姓名”项。
输入借阅人的编码或姓名、借阅图书的编码后，系统自动判别。如果系统中无该人的借阅信息，那么系统将提示用户；如果系统库中确有该人借阅信息，那么系统从数据库中读出该条借阅信息并填入借阅窗口。同时，系统还将图书管理员信息、还书日期写入该窗口。
如果单击“确认”按钮，则完成本次还书操作；单击“放弃”按钮，则取消本次还书操作。
打印催还单
在系统主窗口中，选择“打印催还单”，进入“打印催还单”窗口。该窗口中列出了所有当归还图书人员的列表。该窗口共设3个按钮，分别是“全部打印”、“选择打印”和“退出”。
打印催还单窗口
如果选择“全部打印”按钮，将打印出应归还图书的人员名单；也可以首先使用手型指针选择要打印清单的单位，然后单击“选择打印”按钮打印。
信息查询
个人借阅查询信息查询模块包括如下多个子模块：个人借阅查询、催还书目浏览、图书分布查询和按关键字查询等。在系统主窗口中，选择“信息查询”菜单中的“个人借阅查询”选项，进入“个人借阅查询”窗口。
个人借阅查询窗口
输入借阅人编码，按回车键或单击“确认”按钮，窗口将显示该人员的全部借阅信息。如果系统中无该借阅人或该借阅人未借阅过任何图书，窗口将不显示任何信息。催还书目浏览如果选择“催还书目查询”选项，则进入“催还书目查询”窗口，该窗口中显示所有已到期但尚未归还的书目信息。图书分布情况查询如果选择“图书分布查询”选项，则进入“图书分布查询”窗口，该窗口在初始状态下显示所有书目的摘要信息。按关键字查询如果选择“按关键字查询”选项，则进入“关键字查询”窗口。
在初始状态下，该窗口显示所有书目的的摘要信息。如果要查看某本书的具体信息，双击该书摘要信息处。通过输入关键字，用户可以模糊查询，也可以精确查询。如果查询结果只有一本书，系统将直接显示该书的具体信息。实现精确查询时，系统将直接显示该书的具体信息。如果书库中无该书，则窗口中不显示任何信息。同时系统还支持多关键字查询。
维护
系统维护包括书库维护、借阅人库维护、管理员库维护、部门库维护和默认还书期限等模块。
1． 书库维护
书库维护包括新书入库、查询显示、全部显示及删除等模块。如图4-11所示：
书库维护窗口
对书库进行任何修改后，系统执行退出时，将查看数据库是否已被修改，然后提示用户是否保存修改并按用户要求进行相应操作。
2． 借阅人库维护
借阅人库是保存在本图书馆具有合法借书权限的人员。如果选择“借阅人库维护”选项，则进入该窗口。该窗口具有增加、删除、查询、定位及退出等功能。
3． 管理员库维护
在“管理员库维护”窗口中，系统管理员可以创建和删除图书管理员编码及口令。但无权修改图书管理员编码及口令，非系统管理员只可以修改自己的口令。
4． 部门库维护
选择“部门库维护”选项后，进入该窗口。
当借阅人库中有人属于某一部门，系统就不允许用户删除该部门。
5． 默认还书期限
选择“默认还书期限”选项后，打开窗口。默认还书期限是以月计，修改并确认后，系统将按照设置填写借阅图书操作中的预期还书日期。
退出系统
在系统主窗口中单击“退出”按钮，则退出图书管理系统。