版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEXIVPAGEIV摘要在以信息技术为核心的时代,任何管理工作都离不开信息技术的帮助。如今的图书为了满足人们日益增长的精神文化需求,图书的种类和数量成倍的增加,图书的借阅工作日益频繁。因此,这就需要一个行之有效的图书管理系统来帮助图书馆工作人员更加方便、准确的管理图书的借阅工作。本系统的主要任务就是对图书、读者、借阅信息、查询进行统一管理,满足各类用户的需求。该系统的主要研究内容包括前台应用程序的开发以及后台数据库的建立和管理,对于前者要求应用程序功能的完备、易用。对于后者则要求建立数据的一致性和完整性。基于上述考虑,本系统是基于JAVA语言进行开发的,本系统利用Eclipse作为前端的应用开发工具,利用SQLServer2005作为后台的数据库,通过对管理系统模块的研究,提出构造图书信息管理系统的方法,结合其它图书管理业务方面的常识,建立相关数据模型,利用面向对象开发工具对其进行设计与开发,使系统有良好的性能和较高的处理效率。关键词:图书管理系统;数据库;面向对象AbstractIntheeraofinformationtechnologyasthecore,anymanagementworkrelyheavilyoninformationtechnologytohelp.Now,inordertosatisfythelibraryspiritcultureofpeoplegrowingdemand,theamountandtypeofbooksandbookshavemultipliedtheusesoftheborrowingworkincreasinglyfrequent.Therefore,itneedstobeaneffectivebooksmanagementsystemmanagementsystemtohelpthepeoplewhoworkinlibrariesismoreconvenientandaccuratemanagementworkofthelibraryborrowing.Thesystem'smaintaskistoreaders,borrowingbooks,informationquery,unifiedmanagement,andsatisfytheneedsoftheusers.Thissystemincludesmainresearchanddevelopmentforegroundapplicationofbackstagesupporter'sdatabasefortheestablishmentandmanagementoftheapplicationrequirements,completefunctions,easy-to-use,etc.Forthelatterrequiresestablishingconsistencyandintegralityofdatabasedontheconsideration,thissystemisbasedonaJAVAlanguagedevelopment,thissystemusingtheEclipseasfrontapplicationdevelopmenttoolthatusesSQLServer2005asabackground,basedonthedatabasemanagementsystemstructure,putsforwardthemoduleofthelibrarymanagementinformationsystem,andbyusingthemethodofknowledge,combinedwithotherbooksmanagementbusinesssense,establishrelevantdatamodel,usingobject-orienteddevelopmenttooltodesignanddevelopment,makethesystemhasgoodperformanceandhighefficiency.Keywords:Thebooksmanagementsystemmanagementsystem;Database;Object-oriented
目录摘要 IAbstract II第1章绪论 11.1课题背景 11.2国内外现状 11.3本系统的主要研究内容 11.4本系统的主要特点 2第2章需求分析 32.1需求分析 32.2 系统目标 32.3 系统设计 32.3.1系统的功能结构 42.3.2系统的执行流程图 5第3章系统的数据库设计 63.1数据库分析 63.2数据库需求分析 73.3数据库概念结构设计 73.3.1图书信息实体 83.3.2读者信息实体 83.3.3图书借阅信息实体 83.3.4图书分类实体 93.3.5图书订购实体 93.3.6操作员信息实体 93.3.7库存信息实体 103.4数据库逻辑结构设计 10第4章系统的详细设计与测试 134.1公共模块设计 134.1.1数据库的链接及操作类的编写 134.1.2MenuActions类的编写 134.1.3限制文本框长度类的编写 144.1.4描述组合框索引与内容类的编写 154.1.5在JLable上添加图片类的编写 154.2 主窗口的设计 154.2.1主窗体概述 154.2.2主窗体技术分析 164.2.3主窗体的实现过程 174.3系统登录模块设计 174.3.1系统登录模块概述 174.3.2系统登录模块技术分析 184.3.3登陆模块实现过程 184.4图书信息管理模块设计 194.4.1图书信息管理模块概述 194.4.2图书信息管理模块技术分析 214.4.3图书信息管理模块实现过程 214.4.4单元测试 224.5图书借阅、归还模块设计 224.5.1图书借阅、归还模块概述 224.5.2图书借阅、归还模块技术分析 244.5.3图书借阅、归还模块的实现过程 244.5.4单元测试 254.6图书查询模块设计 264.6.1图书查询模块概述 264.6.2图书查询模块技术分析 264.6.3图书查询模块实现过程 274.7格式化的文本框 274.7.1使用JFormattedTextField限制整数输入 284.7.2使用JFormattedTextField限制日期输入 28结论 29参考文献 30附录 31致谢 41齐齐哈尔大学毕业设计(论文)PAGEXIVPAGE4PAGE4第1章绪论1.1课题背景在我国信息化管理系统近年来日趋成熟,在采用计算机技术进行管理之前,图书的图书借阅工作是非常繁琐和复杂的。图书的借阅工作完全依赖于手工操作,不但费时费力而且还经常容易出错。读者在借书的时候首先要有一个借书证,工作人员把读者要借的书的信息卡与读者的借书证放到一起,并且在借书证上填写借阅信息,这就是手工操作时代的借书过程[1]。这样的借阅工作显而易见,效率非常低,由于工作量大所以数据不但容易丢失,且非常容易出错。总的来说,缺乏系统、规范的信息管理手段。利用计算机来处理这些流程无疑会极大程度地提高效率和处理能力。读者排队时间大大降低,读者可以花更多的时间在选择书和看书上。而且近年来,随着图书馆的规模逐渐扩大,图书数量也相应的大量增加,有关的图书的各种信息成倍增长。面对如此庞大的信息量,需要一套合理、有效、规范的图书管理系统,对图书资料进行统一、集中的管理。使用本程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,以便全面掌握图书的流通情况[2]。1.2国内外现状信息技术的发展为图书馆的发展创造了良好的信息环境,目前社会上信息管理系统发展飞速,越来越多企事业单位引入了信息管理系统来管理信息,各大高校也相继采用了图书管理系统管理图书,取得很大的成效。国外的图书馆自动化系统是随着计算机技术发展而发展的[3]。并且较早实现了商品化,出现了不少知名公司,例如:美国的INNOPAC、SIRSI、及澳大利亚的HORIZON等,它们的产品技术开发已经很成熟,而国内的发展相对较晚,系统稳定性和安全性存在差距。但国内系统开发吸收了国外经验和技术,在中文书刊信息处理方面有很大优势,在技术方面,差距不明显。虽然国内起点晚,但也采用了流行的开发工具,如JAVA,VB,PB等[4]。1.3本系统的主要研究内容本系统应用软件工程的设计思想,按照系统的开发流程完成了一个完整的图书管理系统[6]。同时,在程序的开发过程中,界面开发方面采用了Swing机制,Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面,使整个系统的设计思路更加清晰。数据库方面,使用SQLServer2005,通过Java的JDBC实现连接,JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯JavaAPI编写数据库应用程序,可以满足日常中小型规模的数据处理要求。1.4本系统的主要特点参考一些典型图书管理系统的设计模式,从读者与图书管理员的角度出发,本着以读者借阅图书快捷、方便的原则,要求本系统应具有以下特点:1.具有良好的系统性能,友好的用户界面;2.较高的处理效率,便于使用和维护;3.采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期;4.系统尽可能简化图书管理员的重复工作,提高工作质量;5.简化数据查询和统计难度。第2章需求分析2.1需求分析在现在信息管理系统尤为重要的时代,图书管理系统是图书馆管理工作中不可缺少的部分,对于图书馆的管理者和使用者来说都非常重要。但长期以来,人们使用传统的手工方式或性能较低的图书系统管理图书馆的日常事务,操作流程比较繁琐,效率相当低[4]。而一个成功的图书管理系统应提供快速的图书信息检索功能、快捷的图书借阅、归还流程,为管理者与读者提供充足的信息和快捷的数据处理手段。2.2系统目标根据需求分析的要求,本系统应达到以下目标:1.界面设计友好、美观;2.数据存储安全、可靠;3.信息分类清晰、准确;4.强大的查询功能,保证数据查询的灵活性;5.操作简单易行、界面清晰大方;6.系统安全、稳定;7.开发技术先进、功能完备、扩张性强;8.占用资源少、对硬件要求低;9.提供灵活、方便的权限设置功能,使整个系统的管理分工明确。2.3系统设计图书管理系统分为4大功能模块,分别为“基础数据维护”、“图书借阅管理”、“新书管理”和“系统维护”。2.3.1系统的功能结构图书管理图书管理基础数据维护图书借阅管理新书订阅管理系统维护读者信息管理图书信息管理图书类别管理图书还书管理图书查询图书借书管理用户管理更改密码新书订购验收新书图2-1系统功能结构图2.3.2系统的执行流程图管理员管理员图书管理系统管理员登陆基础数据维护读者信息管理读者添加读者相关信息图书类别管理读者修改删除图书类别添加类别修改图书类别信息图书信息管理图书添加图书修改图书借阅管理图书归还图书借阅图书查询图书相关信息图书管理系统新书订阅管理新书订阅验收新书订购相关信息图书相关信息系统维护管理更改密码用户管理添加用户用户修改删除操作员信息读者图2-2系统流程图第3章系统的数据库设计数据库的设计关系到整个软件的成败。当今的企业信息管理系统都是通过数据库来存储信息的,因此数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计不仅可以提高数据存储的效率,保证数据的完整性和一致性,还能增加系统的灵活性。因此建立一个良好的数据组织结构和数据库,使整个系统都可以迅速、方便、准确地调用和管理所需的数据,是衡量信息系统开发工作好坏的主要指标之一。在数据库建立过程中,要注重数据库与系统整体目标的一致性,使他们既相互独立又有紧密联系。用户与数据库接口之间是灵活与友好的,数据库的设计也要简单易行和便于理解。3.1数据库分析现在主流的数据库主要有Access、SQLServer、Oracle等[7]。Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。Access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器的假死,或者消耗掉服务器的内存导致服务器崩溃。因为本系统要求大量的用户访问以及大量的数据量,因此Access数据库并不适用本系统。Oracle数据库支持多实例,处理数据效率高,而且是多平台的,在安全性和稳定性方面都不错,但是与SQLServer数据库相比,它的价格却高出很多,而且不易于操作,SQLServer界面直观,易于维护,并且SQLServer是微软公司开发的,因此会对Windows平台的兼容性及结合性会更加友好。由于本系统在Windows平台下开发,因此比Oracle更加适合。考虑到本系统的稳定性与可靠性以及开发程序与用户需求,决定设计该系统的时候选择SQLServer2005数据库来满足系统的需求。SQLServer2005具有很强的完整性和可伸缩性,具有较高的性价比。设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。数据库设计一般包括如下几个阶段[8]:1.需求分析阶段进行数据库设计首先必须准确了解与分析用户需求(包括数据和处理)。需求分析是整个设计过程的基础,是最困难、最耗费时间的一步。作为基本的需求分析是否做得充分与准确,决定了在其上构建数据的速度与质量。需求分析做得不好,甚至会导致整个数据库设计返工重做。2.概念结构设计阶段概念结构设计是整个数据设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。3.逻辑结构设计阶段逻辑结构设计是将概念结构转换为某个DBMS所支持的数据模型,并对齐进行优化。4.物理设计阶段物理设计是为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。5.数据库实施阶段在数据库实施阶段,设计人员运用DBMS提供的数据库语言(如SQL)及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。3.2数据库需求分析用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输入和输出[9]。收集基本数据,组成一份详尽的数据字典,为后面的详细设计打下基础。针对一般图书管理信息系统的需求,通过对图书管理工作过程的内容和数据流程分析,设计如下面所示的数据项和数据结构:读者信息包括:字段ID号、登录用户名、登录密码、用户类型;图书信息包括:图书名称、出版社名称、图书作者姓名、出版日期、价格、拥有该书的册数;图书借阅与归还包括:借阅者姓名、借阅图书名称、借书日期、还书日期、图书是否归还;3.3数据库概念结构设计根据以上对系统所作的需求分析、系统设计,规划出本系统中使用的数据库实体分别为图书信息实体、图书类别实体、图书订购实体、读者信息实体、操作员信息实体、图书借阅信息实体、库存信息实体。其中图书信息实体与图书订购实体、图书分类实体、图书订购实体、图书借阅信息实体、库存信息实体都有关系,而读者信息实体与图书借阅信息实体同样具有关系。下面将介绍几个关键实体的E-R图。3.3.1图书信息实体图书信息实体包括图书编号、图书类别编号、书名、作者、译者、出版社、价格、出版时间等属性。其中,图书编号为图书信息实体的主键,图书类别编号为图书信息实体的外键,与图书类别实体具有外键关系。图书信息实体的E-R图如图3-1所示。图书图书编号出版时间书名作者类别编号出版社译者价格图3-1图书信息实体E-R图3.3.2读者信息实体读者信息实体包括条形码、姓名、性别、年龄、电话、押金、生日、职业、证件类型、办证日期、最大借书数量、证件号码等属性。读者条形码作为本实体的唯一标识。其中,在性别属性标识信息中,“1”代表此读者为男性,“2”代表此读者为女性;最大借书数量属性设置默认值为3;而在证件属性标识信息中,“0”代表身份证,“1”代表军人证,“2”代表学生证,“3”代表工作证。读者信息实体的E-R图如图3-2所示。职业读者职业读者姓名最大借书数量年龄电话性别办证日期证件类型证件号码押金生日条形码图3-2读者信息实体E-R图3.3.3图书借阅信息实体图书借阅信息实体包括编号、图书编号、读者编号、操作员编号、是否归还、借阅日期、归还日期等属性。编号作为图书借阅信息实体的唯一标识,它包括两个外键,分别为图书编号与读者编号,图书借阅信息实体以这两个外键与图书信息实体、读者信息实体建立了关系。图书借阅信息实体的E-R图如图3-3所示。图书借阅图书借阅编号归还日期操作员编号图书编号读者编号借阅日期是否归还图3-3图书借阅信息实体E-R图3.3.4图书分类实体图书分类实体包括编号、类别名称等属性。图书分类实体与图书信息实体以图书类别编号建立了关系。图书分类实体的E-R图如图3-4所示。图书分类图书分类编号罚款金额类别名称可借天数图3-4图书分类实体E-R图3.3.5图书订购实体图书订购实体主要包括图书编号、订购日期、订购数量、操作员、是否验收和折扣等属性。图书订购实体以图书编号与图书信息实体建立了关系。图书订购实体的E-R图如图3-5所示。图书订购图书订购订购日期是否验收订购数量图书编号折扣操作员图3-5图书订购实体E-R图3.3.6操作员信息实体操作员信息实体主要包括编号、姓名、性别、年龄、身份证号、工作日期、电话、是否为管理员和密码等属性。其中,性别属性信息中“1”代表男性,“2”代表女性;是否为管理员属性信息中“0”代表当前用户不是管理员,“1”代表当前用户是管理员。操作员信息实体的E-R图如图3-6所示。操作员操作员编号是否为管理员性别年龄姓名工作日期密码身份证号电话图3-6操作员信息实体E-R图3.3.7库存信息实体库存信息实体主要包括编号、库存数量等属性。库存信息实体以库存编号与图书信息实体建立了关系。库存信息实体的E-R图如图3-7所示。图书订购图书订购编号库存信息图3-7库存信息实体E-R图3.4数据库逻辑结构设计1.图书信息表如图3-8所示:图3-8图书信息表2.读者信息表如图3-9所示:图3-9读者信息表3.图书借阅信息表如图3-10所示:图3-10图书借阅信息表4.图书分类信息表如图3-11所示:图3-11图书分类信息表5.图书订购表如图3-12所示:图3-12图书订购信息表6.操作员信息表如图3-13所示:图3-13操作员信息表7.库存信息表如图3-14所示:图3-14库存信息表第4章系统的详细设计与测试4.1公共模块设计在开发过程中,经常会用到一些公共模块,如数据库连接及操作的类、限制文本框输入长度的类以及描述组合框索引与内容的类等,因此,在开发系统前首先需要设计这些公共模块。下面将具体介绍图书管理系统中公共模块的数据过程。4.1.1数据库的链接及操作类的编写数据库连接及操作类通常包括连接数据库的方法getConnection()、执行查询语句的方法executeQuery()、执行更新操作的方法executeUpdate()、关闭数据库链接的方法close()。下面将详细介绍如何编写图书管理系统中的数据库连接及操作的类Dao.java。步骤如下:1.指定类dao.java保存的包,并导入所需的包,本例将其保存到com.wsy.dao包中。2.在dao.java类的构造方法中创建数据库连接操作。在此类中首先定义数据库连接驱动包名、数据库连接路径、数据库连接用户名、密码等静态变量,然后在构造函数中实现数据库连接操作。在数据库连接代码中需要添加try…catch关键字,捕捉数据库连接时可能抛出的异常。3.创建执行查询语句的方法executeQuery(),其返回值为ResultSet()结果集。首先需要初始化Dao对象,调用构造函数,从而获取数据库连接。有一点值得注意,就是在创建数据库连接之前首先判断数据库连接是否为空,如果为空再创建数据库连接,避免造成程序资源的浪费。4.创建执行更新操作的方法executeUpdate(),它的返回值为int型的整数,此返回值代表数据表更新操作是否成功,返回值为1代表成功,返回值为-1代表没有成功。5.为了避免运行程序时资源的浪费,优化项目运行速度,需要在完成数据库操作后,关闭数据库连接,所以在Dao.java类中创建了关闭数据库连接的方法close()。为了使数据库连接在程序结束后确定会被关闭,在close()方法中加入了finally()字段,在finally块中将数据库连接置空。4.1.2MenuActions类的编写通常激活同一个命令有多种方法,用户可以通过工具栏中按钮、菜单选择特定的功能。在本系统中,最常用的命令就是弹出内部窗体,将本系统中需要弹出的内部窗体命令统一放入MenuActions类中,主要触发任何一种组件事件时,都会按照统一的方式处理[10]。Swing包提供了一个非常有用的机制,用来封装命令,并将其连接到多个事件源,这种机制就是Action接口。Action接口有如下方法:1.puclicvoidactionPerformed(ActionEvente)2.publicObjectgetValue(Stringkey)3.publicvoidputValue(Stringkey,Objectvalue)4.publicbooleanisEnabled()5.publicvoidsetEnabled(booleanb)6.publicvoidaddPropertyChangeListener(PropertyChangeListenerlistener)7.publicvoidremovePropertyChangeListener(PropertyChangeListenerlsn)其中第一个方法用来实现ActionListener的接口程序,实际上Action接口扩展了ActionListener接口。getValue()与putValue()方法用来存储与提取动作对象的预定义名称与值。下表列举了几种常用的动作对象的预定义名称。表4.1动作对象表名称值NAME名称,显示在按钮或菜单上SMAIL_ICON小图标,显示在按钮或菜单上SHORT_DESCRIPTION简单提示说明,当鼠标放在按钮或菜单上出现提示LONG_DESCRIPTION详细提示说明setEnabled()方法用于开启或禁止动作对象,isEnabled()方法用于检查动作是否启用。实现Action接口需要将接口中的所有方法都实现,所以在通常情况下都是使用实现该接口的AbstractAction类,本系统中的MenuActions类继承了AbstractAction类,在MenuActions类中只要重写AbstractAction类中的actionPerformed()方法。在系统中的“更改密码”菜单项采用了MenuActions类的编写。在MenuActions类中创建一个内部类,这个内部类用于创建菜单栏中“更改密码”菜单项的动作对象,在此类的构造函数中创建组件的提示组件提示说明,在actionPerformed()方法执行“更改密码”窗体的弹出操作。将此内部类的对象作为MenuActions类的成员变量,然后再使用static定义一个静态区域进行初始化。类在被加载时,首先执行static定义的静态区域内部的代码,且只会被执行一次。同理,菜单栏中其他菜单项与子菜单中的菜单项也是以相同方式被封装到MenuActions类中。4.1.3限制文本框长度类的编写在Swing语句创建的窗体中,当JTxetField组件创建时,可以指定文本框的宽度。但当JTextField的构造器中设定的宽度并不是用户能输入的字符个数上限,用户可以在文本框中输入一个更长的字符串,此时需要限制用户输入字符串的长度,故创建了限制文本框输入长度的类MyDocument.java。创建此类的具体步骤如下:1.创建MyDocument.java类,此类继承PlainDocument类。2.在MyDocument.java类中创建两个构造函数,其中一个是有参数的,另一个是无参数的。3.重载父类方法inserStrng(),在此方法中限定文本框允许输入字符串长度。4.1.4描述组合框索引与内容类的编写在程序编写的过程中,经常会遇到组合框组件的应用。有时要在窗体的组合框中显示具体内容,通常需要在数据库中存储此组合框的索引值,这时便需要使用一种数据结构将组合框中的内容与索引值联系在一起。Java.util.Map形式是比较好的选择,可以使用Map接口中的put()方法将索引值与具体内容放入集合中,当得到索引值时获取具体内容可以使用Map接口中的get(key)方法。描述组合框索引与内容类的编写步骤如下:1.创建组合框组件的索引值与其所对应的内容的Item.java类,这个类中不仅包含代表组合框索引的成员变量id和代表组合框内容的成员变量name,还包括着两个成员变量的setXXX()、getXXX()方法。2.创建MapPz.java类,使用Map关联组合框的索引与组合框的具体内容。这里以图书类别编号与图书类别创建组合框为例,首先在此类中初始化Map集合,获取图书类别相关内容,将图书类别相关内容放入Item类中;然后将图书类别编号与图书类别名称放入Map集合中,可以使用put()方法;最后返回类型为Map的集合。4.1.5在JLable上添加图片类的编写为了美化窗体,通常需要在窗体上添加图片。一般情况下使用如方式下添加图片:1.在窗体上添加JPanel2.在JPanel上添加JLable3.将图片初始化为ImageIcon对象4.使用JLable.setIcon(ImageIcon)代码实现在窗体上添加图片功能将上述操作封装在公共类中,命名为CreatecdIcon.java类,在此类中定义一个返回ImageIcon类对象的方法,此方法以当前图片的文件名称为参数初始化一个ImageIcon类对象。4.2主窗体的设计4.2.1主窗体概述管理员通过“系统登录”模块的验证后,可以登录到图书管理系统的主窗体。系统主窗体主要包括菜单栏、工具栏。用户在菜单栏中单击任一菜单栏执行相应的功能;工具栏为用户提供了经常使用的功能按钮。图4-1主窗体界面图4.2.2主窗体技术分析系统主窗体主要包括菜单栏与工具栏。单击窗体顶端的菜单栏中的某一菜单项,可以打开下拉菜单,其中包含菜单项与子菜单项。当用户单击下拉菜单中某一菜单项时,窗体中所有的菜单都会被关闭。在主窗体的设计中,需要创建菜单栏与工具栏,此时用到了JMenuBar类与JToolBar类来创建菜单栏和工具栏。1.菜单栏的创建比较简单,使用JMenuBar的构造函数初始化菜单栏,对于每个菜单,需要创建一个对象,就是菜单项名称,最后将顶层菜单添加到菜单栏中,可以使用JMenuBar类的add()方法进行添加。在顶层菜单中添加菜单项、分隔符与子菜单。其中菜单项可以使用JMenuItem类的构造函数进行初始化,然后使用JMenuBar类的add()方法进行添加;分隔符可以使用JMenuBar类的addSeparator()方法进行添加[11];子菜单栏实质上也是一个菜单栏,与顶层菜单栏创建方式相同,可以使用JMenuBar类的add()方法将子菜单项添加到顶层菜单中。当用户选择一个菜单时,会引发一个动作事件,需要为每个菜单项添加监听器,重写ActionListener接口中的actionPerformed()方法,在此方法中为菜单栏添加业务逻辑。通常情况下,菜单项触发命令通过实现Action接口。这里设计了公共类MenuAction.java,它继承了AbstractAction类,由于AbstractAction类实现了Action接口,所以继承AbstractAction类就等于实现了Action接口,因此这里使菜单栏添加MenuAction类对象。2.主窗体中工具栏的创建也非常简单。工具栏为系统提供了迅速访问常用命令的一系列按钮。完成主窗体中工具栏的创建后同样需要添加MenuAction类对象实现工具栏事件,由于需要在工具栏中添加图标,所以将动作对象添加到按钮中,然后为按钮设置图标。4.2.3主窗体的实现过程主窗体的实现过程如下:1.创建Library类,在它的构造函数中设置主窗体相关属性,如窗体大小、窗体标题等相关属性,还可以为窗体设置背景图片,并调用创建菜单栏与工具栏的方法,在主窗体中创建菜单栏与工具栏。2.编写创建菜单栏方法,可以初始化JMenuBar类对象创建顶层菜单,并在顶层菜单上添加相关菜单项与子菜单,然后为菜单栏添加图标,为菜单栏添加图标可以使用图标可以使用JMenu类中的setIcon()方法进行添加。3.编写创建工具栏的方法,创建工具栏可以使用JToolBar类,创建工具栏后将所有的图标添加至于工具栏中,可以为每个图标加提示。由于在创建MenuActions类时已经为每个内部窗体动作添加了提示信息,所以这里可以不为图标添加提示信息。4.最后在Library.java类中的主函数中调用登陆窗体,如果登录成功,初始化Library.java对象;如果登录失败,则弹出提示对话框。4.3系统登录模块设计4.3.1系统登录模块概述登陆模块是图书管理系统的入口,在运行本系统后,首先进入的便是登陆窗口。在该窗口中,系统管理员可以通过输入正确的管理员名称与密码登陆到系统,当用户没有输入管理员名称或密码时,系统将会弹出相应的提示信息。图4-2图书管理系统登录界面4.3.2系统登录模块技术分析在本系统中,登陆模块窗体继承了JFrame类。在设计登陆窗体之前,需要初始化JPanel组件,然后设置JPanel的布局。依据登陆模块的整体布局,在登录窗体中使用了BorderLayout布局管理器。BorderLayout布局管理器是JFrame的默认布局管理器,它可以让程序选择每个组件的摆放位置,可以选择将组件放在窗体的北部、中部、南部、东部或西部。将放置图片的JLable摆放在面板的北部,装载登陆文本框的面板放置在中部,南部放置装载按钮的面板,中部的面板使用GridLayout布局管理器。GridLayout布局管理器按照行列来排列所有的组件。在南部的面板中使用FlowLayout布局管理器。中部的面板放置用户名标签、用户名文本框与密码标签、密码文本框,其中用户名文本框使用JTextField组件,密码文本框使用JPasswordField组件,可以在初始化文本框时指定文本框的列数与文本框中的初始值。为了增加登陆窗体的美观,将密码框的回显字符设置为“*”。当窗体设计完成后,需要进行管理员登陆验证操作,这时需要为“登陆”按钮添加按钮监听事件。可以将按钮监听事件写入内部类中,它实现ActionListener接口,在内部类中重写actionPerformed()方法,实现登陆验证操作。4.3.3登陆模块实现过程开发登陆模块的具体步骤如下:1.首先在BookLoginIFrame类构造函数中设计登陆窗体的整体布局,包括添加窗体关闭按钮、最小化按钮、设置窗体大小等相关属性。2.为方便在登录验证时取值传值,需要创建一个对应于tb_operator表字段的JavaBean,这个类除了以数据表字段命名的成员变量之外,还创建与成员变量相对应的setXXX()、getXXX()方法。3.为了在其他窗体中取得当前登录用户名称,需要在BookLoginIFrame.java类中创建一个Operater类型的成员变量,同时创建对应的setXXX()与getXXX()方法,这样在其他窗体中如果需要显示当前登录用户的名称,只需要使用BookLoginIFrame.java类中的getXXX()方法取得Operater类型的对象。4.分别为“登陆”按钮与“重置”按钮设置监听事件。在“登陆”按钮监听事件中,首先判断“用户名”与“密码”文本框是否为空,如果为空,说明用户没有输入,此时需要弹出提示对话框;当用户输入用户名与密码后,需要这两个文本框的值作为参数调用Dao类中的验证管理员登陆的方法,如果验证成功,进入系统;如果失败,弹出提示对话框。“重置”按钮监听事件实现起来相对比较简单,将“用户名”文本框的值与“密码”文本框的值置空。5.在Dao类中创建登陆验证方法,在此方法中查询文本框中输入字符串是否与操作员数据表数据匹配,并且是否为管理员,以上条件都满足,登陆验证才成功。4.4图书信息管理模块设计4.4.1图书信息管理模块概述图书信息管理模块主要包括图书信息添加、图书信息修改两个功能。在图书信息添加窗体中管理员可以录入图书相关信息,包括名称、类别、图书条形码等。进入图书信息修改窗体后首先在表格中显示所有图书的相关信息,管理员可以选择表格中需要修改的某一行数据,这时在窗体下方的文本框中显示相应的内容。图书信息添加包括图书相关信息的添加,其中“出版社”与“类别”相关信息使用组合框组件在窗体中体现,比较特别的是“类别”组合框中的值是由数据库中的图书分类表取得,除此之外其余图书相关信息字段以文本框的形式在窗体中体现,等待用户输入相关信息。同时在“添加”按钮监听事件中,限制用户输入非法字符串等操作,如果用户没有在窗体必填文本框中输入字符串而单击“添加”按钮,系统会弹出错误提示对话框。图书信息修改主要实现图书相关信息的修改,首先查询图书信息表中的内容放置到表格中,在表格监听事件中将表格内容放置在相应文本框中,用户可以通过修改文本框的内容修改图书相关信息。图4-3图书信息添加界面图4-4图书信息修改界面4.4.2图书信息管理模块技术分析设计图书信息管理窗体首先设计窗体布局。图书信息添加窗体中主要包括文本框与组合框以及按钮图片背景标签,布局比较简单,可以使用BorderLayout布局管理器。首先将图片背景标签放在窗体北部,将承载着图书信息文本框的面板放在窗体中部,最后将承载着按钮群的面板放置在窗体南部。图书信息修改窗体比较复杂,除了图书相关信息文本框之外,窗体中还需要摆放一个带滚动条的表格。在这里窗体同样使用BorderLayout布局管理器,首先将背景图片标签摆放到窗体北部,在窗体的中部摆放一个面板,面板中放置表格与图书相关信息文本框,最后将按钮放在窗体的南部。设计窗体布局后,需要进行事件处理。在本模块中,除了为“修改”按钮添加监听事件之外,还需要为表格添加鼠标监听事件。在添加图书信息中,需要对用户输入的字符串进行限制,包括字符串位数、字符串内容等,这时需要为相关文本框添加键盘监听事件。在添加图书信息中,为了避免用户添加相同的图书条形码,引发异常,需要在用户输入图书条形码后与数据库中图书信息表中的条形码进行比较,这时需要在图书条形码文本框中添加焦点监听事件。4.4.3图书信息管理模块实现过程1.图书信息添加图书信息添加模块开发步骤如下:(1)首先创建图书信息添加窗体,可以在构造函数中对此窗体进行布局,由于需要在主窗体内部弹出图书信息添加窗体,所以这里使用内部框架的机制,BookAddIFrame.java类继承了JInternalFrame类。(2)在图书信息添加窗体中添加按钮监听事件,在事件中的actionPerformed()方法中进行图书信息添加操作,可以将图书信息添加方法在Dao类中编写。在Dao类中编写添加图书信息操作方法后,此方法可以在按钮事件的actionPerformed()方法中调用。(3)除了“添加”按钮监听事件之外,还要控制图书条形码文本框只能输入数字字符串的键盘监听事件,在重写的keyType()方法中,定义管理员允许输入的字符,如果用户输入字符与上述字符不匹配,将销毁当前字符。(4)为“关闭”按钮添加按钮监听事件,主要将当前窗口关闭。2.图书信息修改图书信息修改模块开发步骤如下:(1)与图书信息添加窗体设计相同,图书信息修改窗体也继承了内部框架,同样在构造函数中初始化窗体属性、设计布局。(2)初始化窗体表格组件首先创建为图书信息修改窗体中表格组件内容赋值的方法,此方法的参数是List类型的集合。在Dao类中创建查询图书相关信息的方法返回List集合可以作为此方法的参数,这个方法返回一个二维数组。在Dao类中创建查询图书相关信息的方法。创建完成窗体内表格组件后,需要为表格组件添加鼠标监听事件,以便用户单击表格中的某一行记录后,相应地将表格中的数据放置在文本框中。(3)为“修改”按钮添加按钮监听事件首先需要在Dao类中创建修改图书相关信息方法。在BookModiAndDelIFrame类中为“修改”按钮添加按钮监听事件,实现ActionListener接口中的actionPerformed()方法,在这个方法中不仅需要调用Dao类中的图书修改方法,还要限制所有文本框字符串的非法输入,同时为了使图书信息表修改完成后,在窗体中的表格即时显示修改内容,需要将表格模型重新赋予表格中。4.4.4单元测试图书条形码作为图书相关信息表的主键,在图书添加的过程中由管理员输入,如果管理员输入的图书条形码在数据库中已经存在,根据主键规则,会发生异常。这时需要为“书号”文本框添加焦点事件,重写focusLost()方法,此方法为失去焦点方法,可以在此方法中判断用户输入的字符串是否与数据库中的图书条形码重复,实质上就是在用户鼠标焦点离开图书条形码文本框时进行判断。判断操作可以在Dao类中创建数据库查询方法。然后在焦点事件中的focusLost()方法中查找用户输入的条形码是否与数据库中的数据重复,如果重复则弹出相应提示对话框[12]。4.5图书借阅、归还模块设计4.5.1图书借阅、归还模块概述图书借阅模块主要用于管理读者借阅图书的信息。管理员输入读者条形码、图书条形码后,在读者相关信息文本框以及图书相关信息文本框中相应显示此读者和书籍的相关内容,这时在窗体表格组件中显示读者信息、图书信息以及借书日期、还书日期等相关字段,当管理员单击“借出当前书籍”按钮,此读者与图书被存放到借阅表中。图书归还模块主要实现读者还书功能。当读者需要还书时,管理员输入读者条形码,按Enter键,在窗体表格中显示读者借阅图书相关信息,在表格中单击某一行数据,在罚款相关文本框中显示相应的那内容等,最后管理员单击“图书归还”按钮,完成图书归还操作。图4-5图书借阅管理图4-6图书归还管理4.5.2图书借阅、归还模块技术分析图书借阅模块主要用到了键盘监听事件的keyTyped()方法,重写此方法,使用KeyEvent类中的getKeyChar()方法获取当前按钮的键值,如果是Enter键,查询此读者的相关内容,同理可以查询图书的相关内容。获取读者与图书的相关信息,在“借出当前图书”按钮监听事件中将相关信息插入图书借阅表中。这里存在一个难点,就是如何获取应还日期。在图书类别表中可以获取此类图书允许借阅的天数,将当前借阅时间加上此类图书允许借阅的天数,得到图书应还的时间。在这里使用Date类中的getDate()方法获取当前时间是某月的某一天,然后将此数值与此类图书允许借阅的天数求和之后再使用setDate()方法获取应还时间。图书借阅模块窗体中设置了一个清除表格内容的按钮——“清除所有记录”。其中table.getRowCount()是获取表格行数的方法。在图书借阅模块窗体中还设置了一个显示当前时间的文本框,文本框中的时间是动态变化的。这里使用了Timer类机制,将Timer对象放入文本框的监听事件中。图书归还模块与图书借阅模块设计原理基本相同,唯一不同的是按钮事件实现的功能不同,图书归还模块主要是在“图书归还”按钮事件中将图书借阅表中的“是否归还”字段设置为0,0代表借阅书籍已经归还,1代表借阅图书没有归还,表中“是否归还”字段默认值为1。由于图书归还窗体中设计显示图书借阅相关信息的表格,表格内容需要查询多表字段内容,所以需要应用内联接机制进行查询。内连接机制用于返回所有连接表中具有匹配值的行,而排除所有其他的行。4.5.3图书借阅、归还模块的实现过程1.图书借阅开发图书借阅模块步骤如下:(1)在类构造函数中创建窗体布局以及相关属性。(2)为读者条形码文本框添加键盘监听事件。当用户输入读者条形码,按Enter键后,触发读者条形码文本框键盘监听事件。在keyType()方法中,调用Dao类中的查询读者相关信息方法,如果在数据库中没有查询到相关信息,弹出相关提示对话框;如果查询到结果,最后将查询结果放入相应文本框中。(3)同理,在图书条形码文本框键盘监听事件中获取图书条形码文本框内容,调用Dao类中的查询图书相关信息的方法,将图书信息放入相应的文本框中,同时需要将读者信息、图书信息、还书时间、借书时间放入表格中。(4)在BookBorrowIFrame类中创建一个表格行添加的方法add(),在图书条形码文本框键盘监听事件中调用,实现在管理员输入完图书条形码后,按Enter键,在窗体表格中添加一行数据的功能。在add()方法中,将图书条形码、读者条形码、当前时间、应还时间放入数组,最后将数组添加到表格模型中作为表格新增的一行数据。(5)这里需要创建取得应还时间的方法。在Dao类中定义一个取得当前书籍允许借阅时间的方法,取得当前书籍允许借阅的最大天数,取当前时间与此天数的加和,即返回应还时间。(6)最后在“借阅当前书籍”按钮监听事件中,将相关信息存入图书借阅表中,如果存在成功,提示相应对话框。2.图书归还实现图书归还模块的具体步骤如下:(1)首先需要实现管理员输入读者条形码后,在窗体表格中显示相关内容的查询方法。这个方法与其他数据库操作方法相同,同样在Dao类中进行定义。由于需要查询的内容不在数据库中同一数据表中,所以需要利用表关系进行内部连接查询。其中用到的表包括tb_borrow(图书借阅信息表)、tb_reader(读者信息表)、tb_bookInfo(图书信息表)。在BookBackIFrame类中定义一个创建表格的add()方法,在此方法中调用Dao类中的查询方法,然后在读者条形码文本框中添加监听事件,在actionPerformed()方法中调用add()方法,实现将查询结果添加到表格中的功能。(2)在设计窗体时,需要实现用户单击表格中的某一行,在相应文本框中显示此书借阅的罚款信息。可以设置表格的鼠标监听事件,在mouseClicked()方法中实现上述操作。(3)最后为“图书归还”按钮添加监听事件、图书归还操作主要是将图书借阅表中的“是否归还”字段内容设置为0,此操作可以在Dao类中完成,然后在监听事件的actionPerformed()方法中调用。4.5.4单元测试在图书借阅模块开发过程中,在读者条形码文本框与图书条形码文本框中添加的是焦点监听事件,在focusLost()方法中查询读者相关信息与图书相关信息,然后在图书条形码文本框的focusLost()方法中设置将图书相关信息放入表格中。这样设置存在一个弊端,当管理员向图书条形码文本框中输入字符串后,引发图书条形码文本框失去焦点事件,此时会将相关内容放入窗体中进行显示,由于管理员并没有向读者条形码文本框输入任何字符串,所以在窗体表格中没有读者相关信息显示。同时,使用焦点监听事件也会误导管理员操作系统。当管理员直接在图书条形码文本框中输入图书条形码后,没有向读者条形码文本框输入字符串,而在触发文本框失去焦点事件时,就会出现异常。在这种情况下,为了避免出现上述问题,需要在触发图书条形码文本框失去焦点事件时,首先判断管理员是否在读者条形码文本框中输入字符串,如果读者条形码文本框为空,则弹出提示对话框。同时为了避免误导管理员操作本系统,将失去焦点事件改为键盘按Enter键事件。4.6图书查询模块设计4.6.1图书查询模块概述图书查询窗体主要包括条件查询与全部查询。窗体整个布局使用BorderLayout布局管理器,在窗体中部放置了JTabbedPane组件,分别在JTabbedPane组件的两个标签中放置一个面板,一个面板用于放置条件查询结果集,另一个面板用于放置查询全部图书信息的结果集。在条件查询面板中,用户可以在组合框中选择需要查询的字段,然后在条件文本框中输入需要查询的字符串;在全部查询面板中,用户选择“显示图书全部信息”选项卡,查看所有图书相关信息。图4-7图书查询界面4.6.2图书查询模块技术分析图书查询窗体主要包括按条件查询功能,这时需要在窗体中使用选项卡,可以使用JTabbedPane组件。在窗体中使用JTabbedPane组件需要初始化JTabbedPane组件,然后在选项卡中添加选项卡名称。图书查询主要实现将查询结果集放入表格中,所以需要初始化表格。初始化表格首先是将表头信息放入数组中,分别为图书名称、类别、作者等相关信息。然后初始化表格数据,可以在Dao类中将图书相关信息查询出来,放入二维数组中。其中,查询包括全部信息查询与条件信息查询。在这里条件查询使用模糊查询,在SQLServer2005中实现模糊查询可以使用带有like关键字的SQL语句,使用like的SQL语句可以确定给定的字符串是否与指定的模式匹配。模式可以包括常规字符和通配符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用“=”和“!=”字符串比较运算符相比,使用通配符看使like运算符更加灵活。在Dao类查询图书相关信息后,可以将数据放入二维数组中,然后使用表头数组与表文数组初始化表格。Swing中的表格初始化有多种形式。一下是JTable类的所有构造函数:1.JTable()2.JTable(intnumRows,intnumColumns)3.JTable(Object[][]rowData,Object[][]columnNames)4.JTable(TableModeldm)5.JTable(TableModeldm,TableColumnModelcm)6.JTable(TableModeldm,TableColumnModelcm,ListSelectionModelsm)7.JTable(VectorrowData,VectorcolumnNames)4.6.3图书查询模块实现过程图书查询模块实现步骤如下:1.在Dao类中定义两个查询方法,分别为条件查询与全部查询,其中条件查询使用了模糊查询机制,查询完毕后将查询结果输入JavaBean中,然后将JavaBean对象添加到list中。2.在BookSearchIFrame类中创建表格。首先在一维数组中定义表头,然后在二维数组中定义表格内容,在定义表格内容过程中可以调用步骤1中提到的Dao类中的查询图书相关信息方法。3.最后在“查询”按钮中添加监听事件,重写actionPerformed()方法,在此方法中调用Dao类中的查询方法。4.7格式化的文本框在Swing中,当限制文本框中只能输入数字,而不是其他字符时,可以为文本框添加键盘监听事件,并且在键盘按下事件方法中销毁所有非法字符。虽然这种方法被广泛使用,但这种方法存在某种弊端,当用户使用Ctrl+V将文本复制到文本框中,并没有触发键盘事件,这时同样可以输入非法字符而系统并不能进行相应处理。为了处理格式化文本框,Swing的设计者提供了JFormattedTextField类,该类不仅能用于数字的输入,还能用于日期的输入。4.7.1使用JFormattedTextField限制整数输入初始化一个格式化文本框有几种方式,JavaAPI中提供了如下6个构造函数。1.JFormattedTextField()2.JFormattedTextField(Formatformat)3.JFormattedTextField(JFormattedTextField.AbstractFormatterformatter)4.JFormattedTextField(JFormattedTextField.AbstractFormatterFactoryfactory)5.JFormattedTextField(JFormattedTextField.AbstractFormatterFactoryfactory,ObjectcurrentValue)6.JFormattedTextField(Objectvalue)4.7.2使用JFormattedTextField限制日期输入格式化文本框不仅可以格式化整数数字,还可以格式化日期型数据。Java中格式日期通常使用SimpleDateFormat类,它继承自java.text.DateFormat类,而java.text.DateFormat继承自java.text.DateFormat类,DateFormat类中的getDateInsurance()方法返回DateFormat对象,所以在JFormattedTextField文本框中可以使用SimpleDateFormat类格式化日期。这里使用SimpleDateFormat(Stringpattern)初始化SimpleDateFormat类对象。格式化完成日期,可以将Format对象放入格式化文本框中,这时如果用户在文本框中输入字符串格式不同时,系统会自动将文本框置为默认值。结论本文从项目需求分析,系统详细设计,数据库设计等几个方面,较为详尽地阐述了基于Java的图书管理系统的实现过程,并引入了部分软件工程的知识应用,实现了一定程度的商业软件开发的模拟,从而加深了对理论课知识的实际应用,完成了由理论到实际的转化。本系统在Eclipse开发平台上进行开发,采用JAVA的Swing方式进行图形化的界面开发,后台采用SQLServer2005数据库进行数据的管理。本系统为图书馆工作人员提供方便、快捷的管理系统。为借书者提供快速借书服务;快速准确地进行图书和借书者的信息维护;实现了图书管理和查询的自动化。参考文献[1]程亚男.图书馆服务新论[J].图书馆,2000,4(3):13-15.[2]初景利,吴冬曼,图书馆发展趋势调研报告(一)[J],国家图书馆学刊,2010.[3]杨坚红,论网络环境下高校图书馆的创新管理[J],图书馆学报,2005.[4]MarkHerring.10reasonswhytheInternetisnotalibrarysubstitute[J].2008.[5]LesleyM.Moyo.ElectronicLibrariesandtheemergenceofnewserviceparadigms[J].TheElectronicLibraires,2006.[6]赵池龙,杨林,孙伟.实用软件工程[M].电子工业,2006,4:54-68.[7]文龙,张自辉,胡开胜等.SQLServer2005入门与提高[M].清华大学,2007,1245-46.[8]王珊,萨师煊.数据库系统概论[M].高等教育,2006,201-220.[9]徐国智,汪孝宜等.SQLServer数据库开发实例精粹[M],电子工业,2006,215-248.[10]苗春义等.Java项目开发全程实录[M].清华大学,2008,2:193-245.[11]秦学礼,孙伟.Java程序设计实用教程[M],中国铁道,2006,25-46.[12]WangF,RamamrithamK,StankovicJA.DeterminingRedundancyLevelsforFaultTolerantReal–TimeSystem[J].IEEETrans.Computers,1999,44(2):292-301.附录packagecom.wsy;importjava.awt.BorderLayout;importjava.awt.Dimension;//importjava.awt.Dialog.ModalExclusionType;importjava.awt.event.ComponentAdapter;importjava.awt.event.ComponentEvent;import.URL;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JDesktopPane;importjavax.swing.JFrame;importjavax.swing.JInternalFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JToolBar;importjavax.swing.UIManager;importjavax.swing.WindowConstants;importjavax.swing.border.BevelBorder;importcom.wsy.iframe.BookLoginIFrame;importcom.wsy.util.CreatecdIcon;;/***主窗体**/publicclassLibraryextendsJFrame{//继承JFrame类 privatestaticfinalJDesktopPaneDESKTOP_PANE=newJDesktopPane();//定义初始化桌面面板 publicstaticvoidmain(String[]args){ try{ UIManager.setLookAndFeel(UIManager .getSystemLookAndFeelClassName()); newBookLoginIFrame();//初始化登录窗体 }catch(Exceptionex){//捕获异常 ex.printStackTrace(); } } publicstaticvoidaddIFame(JInternalFrameiframe){//添加子窗体的方法 DESKTOP_PANE.add(iframe);//将子窗体添加到桌面面板 } publicLibrary(){ super();//将窗体关闭 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setLocationByPlatform(true); setSize(800,600);//设置主窗体大小 setTitle("图书管理系统");//设置窗体标题 JMenuBarmenuBar=createMenu();//调用创建菜单栏的方法 setJMenuBar(menuBar);//在主窗体中添加菜单栏 JToolBartoolBar=createToolBar();//调用创建工具栏的方法 getContentPane().add(toolBar,BorderLayout.NORTH);//以BorderLayout布局添加工具栏放在北部 finalJLabellabel=newJLabel();//初始化背景标签 label.setBounds(0,0,0,0);//设置标签位置 label.setIcon(null);//窗体背景//为桌面面板添加组件监听事件 DESKTOP_PANE.addComponentListener(newComponentAdapter(){ publicvoidcomponentResized(finalComponentEvente){//重写组件大小更改时的方法 Dimensionsize=e.getComponent().getSize();//获取当前组件的大小 label.setSize(e.getComponent().getSize());//将背景标签设置为组件的大小 label.setText("<html><imgwidth="+size.width+"height=" +size.height+"src='" +this.getClass().getResource("/backImg.jpg") +"'></html>"); } }); DESKTOP_PANE.add(label,newInteger(Integer.MIN_VALUE));//将背景标签添加到背景面板中 getContentPane().add(DESKTOP_PANE);//将背景面板添加到窗体中 } /** *创建工具栏 * *@returnJToolBar */ privateJToolBarcreateToolBar(){//创建工具栏的方法 JToolBartoolBar=newJToolBar();//创建工具栏 toolBar.setFloatable(false);//取消工具栏浮动(不能拖动到别的位置) toolBar.setBorder(newBevelBorder(BevelBorder.RAISED));//设置工具栏的边框 JButtonbookAddButton=newJButton(MenuActions.BOOK_ADD);//为按钮“添加图书”添加动作对象 ImageIconicon=newImageIcon(Library.class.getResource("/bookAddtb.jpg"));//添加菜单栏图标 bookAddButton.setIcon(icon);//为“添加图书”按钮添加图标 bookAddButton.setHideActionText(true);//使按钮上的文字隐藏 toolBar.add(bookAddButton);//将“添加图书”按钮添加到工具栏中 //在工具栏中添加图书修改与删除图标 JButtonbookModiAndDelButton=newJButton(MenuActions.BOOK_MODIFY); ImageIconbookmodiicon=CreatecdIcon.add("bookModiAndDeltb.jpg");//创建图标方法 bookModiAndDelButton.setIcon(bookmodiicon);//为按钮添加图标 bookModiAndDelButton.setHideActionText(true);//使按钮上的文字隐藏 toolBar.add(bookModiAndDelButton);//将按钮添加到工具栏中 //为按钮添加图书类别添加动作对象 JButtonbookTypeAddButton=newJButton(MenuActions.BOOKTYPE_ADD); ImageIconbookTypeAddicon=CreatecdIcon.add("bookTypeAddtb.jpg");//创建图标方法 bookTypeAddButton.setIcon(bookTypeAddicon);//为“图书类别添加”设置图标 bookTypeAddButton.setHideActionText(true);//隐藏“图书类别添加”按钮的文字 toolBar.add(bookTypeAddButton);//将“图书类别添加”按钮添加到工具栏上 //为按钮添加图书借阅动作对象 JButtonbookBorrowButton=newJButton(MenuActions.BORROW); ImageIconbookBorrowicon=CreatecdIcon.add("bookBorrowtb.jpg");//创建图标方法 bookBorrowButton.setIcon(bookBorrowicon);//为“图书借阅”按钮设置图标 bookBorrowButton.setHideActionText(true);//隐藏“图书借阅”按钮文字 toolBar.add(bookBorrowButton);//将该按钮添加到工具栏上 //为按钮添加图书订购动作对象 JButtonbookOrderButton=newJButton(MenuActions.NEWBOOK_ORDER); ImageIconbookOrdericon=CreatecdIcon.add("bookOrdertb.jpg");//创建图标方法 bookOrderButton.setIcon(bookOrdericon);//为“图书订购”设置图标 bookOrderButton.setHideActionText(true);//隐藏“图书订购”按钮的文字 toolBar.add(bookOrderButton);//将“图书订购”按钮添加到工具栏上 //为按钮添加图书验收动作对象 JButtonbookCheckButton=newJButton(MenuActions.NEWBOOK_CHECK_ACCEPT); ImageIconbookCheckicon=CreatecdIcon.add("newbookChecktb.jpg");//创建图标方法 bookCheckButton.setIcon(bookCheckicon);//为“图书验收”设置图标 bookCheckButton.setHideActionText(true);//隐藏“图书验收”按钮上的文字 toolBar.add(bookCheckButton);//将“图书验收”添加到工具栏上 //为按钮添加读者添加动作对象 JButton
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSTEA 00016-2021陈年武夷岩茶储存技术规范
- 电影制作公司制片人项目设计与成本核算考核表
- 食品生产设备维护保养标准流程操作手册
- 绿色环保垃圾分类管理解决方案
- 网络教育公司课程研发工程师KPI考核表
- 行业考核评估表
- 酒店服务水平提升绩效评估表
- 数据统计与分析方法手册
- 井矿盐制盐工安全意识强化考核试卷含答案
- 铁路运输工长绩效分析表
- 【第一次月考】2026 秋七年级上册道法第一次月考卷(统编版素养测评)
- 2026年非融资担保服务行业市场深度调查及投资规划报告及未来五至十年区域市场差异与机会
- 大型机械设备运行路线及作业位置承载能力校核方案
- 比亚迪造车工作制度
- 新时期高校统战工作:问题剖析与创新发展路径探究
- 河北省石家庄市等2地2025-2026学年高二上学期10月月考物理试题
- 2024年秋人教版三年级英语上册电子课本
- 猪场非瘟质保协议书
- 楼房地基注浆加固施工方案
- 临时钢便桥搭建技术规范
- EN 50708-2-1-2020 电力变压器 欧洲附加要求 第2-1部分:中型电力变压器
评论
0/150
提交评论