java数据库课程设计方案-图书馆管理系统_第1页
java数据库课程设计方案-图书馆管理系统_第2页
java数据库课程设计方案-图书馆管理系统_第3页
java数据库课程设计方案-图书馆管理系统_第4页
java数据库课程设计方案-图书馆管理系统_第5页
已阅读5页,还剩194页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安郵電高校数据库课程设计报告题目:图书管理系统院系名称:计算机学院专业名称:计算机科学与技术班级:计科1006ﻩ同学姓名:郑波学号(8位):04101198指导老师:乔平安设计起止时间:2012年10月8日~2012年10月19日一问题的提出开发背景很多高校都拥有图书馆,图书馆可以为全校师生供应一个阅读,学习的空间。近年来,随着生源不断增大,图书馆的规模也随之扩大,图书数量也相应地大量增加,有关图书馆各种信息成倍增加。面对如此浩大的信息量,校领导决定使用一套合理,有效,规范,有用的图书馆管理系统,对校内图书资料进行统一,集中的管理.本系统将会涉及到图书馆日常管理工作的基本常见细节,诸如新图书的入库登记,图书馆全部书籍的分类管理,图书的查询,图书的借阅、退还手续的登记,费旧图书的清理撤除等,本系统所要实现的这些功能基本上涵盖了图书馆的日常管理工作,基本能够满意校内图书馆的工作人员的管理需要。在对本系统的简略开发过程当中,将采纳Java语言进行开发,以SqlServer实现后台数据库,本系统是完全基于图形化用户界面(GUI)的单机版本.本系统的设计是在Windows7简体中文版操作系统环境下,使用Java中文版开发成功的。数据库是MIS中的重要支持技术,在MIS开发过程中,如何选择数据库管理是一个重要的问题,目前,数据库产品较多,每种产品都具有各自的特点和适用范围,因此,在选择数据库时,应考虑数据库应用的特点及适用范围,本系统所使用的后台数据库是MSSQL2005数据库.本系统选用的开发语言介绍如下:选择了美国SUN公司推出的Java开发工具。Java是第一个全面支持面对对象程序设计的数据库语言工具.Java的主要特点有:1、语言是简洁的、小型的、结构中性的2、强大的数据库开发功能3、扩大了对SQL语言的支持4、是面对对象的、高性能的、多线程的5、是分布式的、面对网络6、具有平台无关性7、语言具有可移植性、是动态的需求分析图书馆管理系统是图书馆管理工作中补课缺少的部分,对于图书馆的管理者和使用者来说都格外重要,但长期以来,人们使用传统的手工方式或性能较低的图书馆管理系统管理图书馆的日常事务,操作流程比较繁琐,效率相当低.而一个成功的图书馆管理系统应供应快速的图书馆信息检索功能,快捷的图书借阅,归还流程,为管理者供应充足的信息和快捷的数据处理手段。从读者与图书馆管理员的角度动身,本着以读者借书,还书快捷,便利的原则,本系统有一下特点:①:具有良好的系统性能,友好的用户界面。②:较高的处理效率,便于使用和维护。③:采纳成熟的技术开发,使系统具有较高的技术水平和较长的生命周期。④:系统尽可能简化图书馆管理员的重复工作,提高工作效率。⑤:简化数据查询,统计难度.二:系统设计一:系统目标依据以上的需求分析及用户的沟通,该系统应达到以下目标:①:界面设计友好,美观.②:数据存储平安,牢靠。③:信息分类清楚,精准。④:强大的查询功能,保证数据查询的灵敏性.⑤:操作简洁易用,界面清楚大方。⑥:系统平平稳定.⑦:开发技术先进,功能完备,扩展性强.⑧:占用资源少,对硬件要求低。⑨:供应灵敏,便利的权限设置功能,使整个系统的管理分工明确。二:系统功能结构图书馆管理系统分为四大功能模块,分为基础数据维护,图书借阅管理,新书订购功能,系统维护。本系统各个部分及其包括的功能模块如图:读者信息管理新书订购管理系统维护图书馆管理读者信息管理新书订购管理系统维护图书馆管理图书借阅管理图书借阅管理基础数据维护图书信息管理图书类别管理图书信息管理图书类别管理验收新书图书还书管理密码管理用户管理新书订购图书查询图书借书管理验收新书图书还书管理密码管理用户管理新书订购图书查询图书借书管理三:系统预览图书馆管理系统有多多个程序界面组成,以下是几个典型界面该界面用于将读者相关信息添加至数据库表中.该界面用于展现读者相关信息,并且供应了参加删除读者信息。该界面主要实现新书订购功能。该界面主要实现新书验收功能。四:文件组织结构图书馆管理系统系统文件夹组织结构操作员相关信息用户修改与删除订购相关信息更改密码验收新书读者图书相关信息图书查询图书类别相关信息读书类别添加图书类别管理读者相关信息读者修改与删除读者信息管理基础数据维护用户添加用户管理新书订购新书订购管理系统维护管理图书归还图书借阅图书修改图书添加类别修改读者添加图书信息管理管理员管理员登陆图书馆管理系统操作员相关信息用户修改与删除订购相关信息更改密码验收新书读者图书相关信息图书查询图书类别相关信息读书类别添加图书类别管理读者相关信息读者修改与删除读者信息管理基础数据维护用户添加用户管理新书订购新书订购管理系统维护管理图书归还图书借阅图书修改图书添加类别修改读者添加图书信息管理管理员管理员登陆图书馆管理系统四:数据库设计一:数据库概要说明SQLServer2005具有很强的完整性与课伸缩性,具有较低的价格与较高的性能.数据库的树形结构图如图所示:二:数据库概念设计依据以上对系统的需求分析,系统设计,本系统使用的数据库实体分别为图书信息实体,图书分类实体,图书订购实体,读者信息实体,操作员信息实体,图书借阅信息实体,库存信息实体1:图书信息实体图书信息实体包括图书编号,类别编号,书名,译者,出版社,价格,出版时间等属性。图书信息实体的E-R图如图所示.译者出版社出版时间价格作者书名类别编号图书编号图书译者出版社出版时间价格作者书名类别编号图书编号图书2:读者信息实体读者信息实体包括条形码,姓名,性别,年龄,电话,押金,生日,职业,证件类型,办证日期,最大借书量,证件号码等属性,E-R图如图所示。证件类型证件号码办证日期最大借书量职业条形码生日押金电话年龄性别姓名读者证件类型证件号码办证日期最大借书量职业条形码生日押金电话年龄性别姓名读者3:图书借阅信息实体图书借阅信息实体包括编号,图书编号,读者编号,操作员编号,是否归还,借阅日期,归还日期等属性。E—R图如图所示.借阅日期读者编号归还日期是否归还图书编号操作员编号编号借阅日期读者编号归还日期是否归还图书编号操作员编号编号图书借阅ﻩ4:图书分类实体图书分类实体包括编号,类别名称等属性,E-R图如图所示.罚款金额可借天数类别名称编号罚款金额可借天数类别名称编号图书分类5:图书订购实体图书订购实体主要包括图书编号,订购日期,订购数量,操作员,是否验收和折扣等属性。E-R图如图所示.订购数量订购数量图书编号订购日期折扣是否验收操作员图书订购折扣是否验收操作员图书订购 6:操作员信息实体操作员信息实体主要包括编号,姓名,性别,年龄,身份证号,工作日期,电话,是否为管理员和密码等属性.E—R图如图所示。姓名密码工作日期是否为管理员身份证号编号电话年龄性别操作员姓名密码工作日期是否为管理员身份证号编号电话年龄性别操作员7:库存信息实体库存信息实体主要包括编号,库存数量等属性。E-R图如图所示。编号库存数量编号库存数量库存ﻩ五:数据库规律设计1:tb_bookInfo(图书信息表)图书信息表包括图书编号,图书类别编号,书名,作者,译者,出版社,出版时间和价格等信息。tb_bookType(图书分类表)图书分类表包括编号,类别名称,可借天数和罚款金额等信息.tb_borrow(图书借阅表)图书借阅表包括,图书编号,读者编号,操作员编号,是否归还,借阅日期,归还日期等信息。tb_operator(操作员信息表)操作员信息表主要包括编号,姓名,性别,年龄,身份证号,工作日期,电话,是否为管理员和密码等信息。tb_order(图书订购表)图书订购表主要包括图书编号,订购日期,订购数量,操作员,是否验收和折扣等信息。图书订购表以图书编号与图书信息表建立了关系。tb_reader(读者信息表)读者信息表包括条形码,姓名,性别,年龄,电话,押金,生日,职业,证件类型,办证日期,最大借书数量,证件号码等信息。tb_stockpile(库存信息表)库存信息表主要包括编号,库存数量等信息。库存信息表以库存编号与图书信息表建立了关系.六:数据库建模本系统数据库采纳PowerDesigner软件建立数据库中各个表的关系,进行数据库的建模,以连接各个数据库,使数据库中各个实体间建立联系。数据库中各个表间关系如图所示。七:简略设计一:公共模块设计1:数据库连接及操作类的编写数据库连接及操作类通常包括连接数据库的方法getConnection,执行查询语句的方法executeQuery(),执行更新操作的方法executeUpdate(),关闭数据库连接的方法close()1:指定类Dao。java保存的包,并导入所需的类包。关键代码如下:packagecom。wsy。dao;ﻩﻩ//指定类的包名称//导入进行数据库连接时所使用的java.sql.Connection类importjava。sql。Connection;//导入进行数据库连接时所使用的java.sql。DriverManager类importjava。sql.DriverManager;//导入进行数据库表查询时所使用的java。sql.Resultset类importjava。sql.ResultSet;//导入进行数据库操作时捕获特别使用的java.sql.SQLException类importjava。sql。SQLException;2:在Dao.java类的构造方法中创建数据库连接操作.在此类中首先定义数据库连接驱动包名,数据库连接路径,数据库连接用户名,密码等静态变量,然后在构造函数中实现数据库连接操作。在数据库连接代码中需要添加try。..catch关键字,捕获数据库连接时可能抛出的特别。关键代买如下://定义驱动报名称protectedstaticStringdbClassName=”com。microsoft。sqlserver。jdbc.SQLServerDriver";ﻩprotectedstaticStringdbUrl="jdbc:sqlserver://localhost:1433;"ﻩ ﻩ+”DatabaseName=db_library;SelectMethod=Cursor”;//定义数据库连接路径ﻩprotectedstaticStringdbUser="shining";//数据库连接用户名 protectedstaticStringdbPwd=”1";//数据库连接密码ﻩprotectedstaticStringsecond=null;ﻩprivatestaticConnectionconn=null;//定义一个数据库连接ﻩﻩprivateDao(){ ﻩtry{ ﻩﻩ ﻩﻩ//捕获数据库连接特别if(conn==null){ﻩﻩ//如果连接为空ﻩﻩﻩﻩﻩﻩClass。forName(dbClassName).newInstance();//装载SQlServer驱动//猎取数据库连接ﻩ ﻩconn=DriverManager。getConnection(dbUrl,dbUser,dbPwd);ﻩﻩﻩ}ﻩﻩﻩElseﻩﻩﻩﻩﻩﻩ //如果连接不为空 ﻩﻩﻩreturn;ﻩﻩ}catch(Exceptionee){ﻩ ﻩ//返回ﻩﻩ ee.printStackTrace();ﻩﻩﻩ//捕获数据库连接特别 }创建执行查询语句的方法executeQuery,其返回值为ResultSet结果集。首先需要初始化Dao对象,调用构造函数,从而猎取数据库连接。executeQuery方法代码如下:privatestaticResultSetexecuteQuery(Stringsql){ ﻩtry{ﻩﻩﻩif(conn==null)ﻩﻩ newDao();ﻩﻩ returnconn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet。CONCUR_UPDATABLE).executeQuery(sql); ﻩ}catch(SQLExceptione){ﻩﻩﻩe.printStackTrace(); ﻩ returnnull;ﻩﻩ}finally{ﻩﻩ}ﻩ}创建执行更新操作的方法executeUpdate,它的返回值为int类型的整数,此返回值代表数据更新的操作是否成功,返回1代表称,不成功则返回—1,其关键代码如下:privatestaticintexecuteUpdate(Stringsql){ﻩ try{ﻩﻩ if(conn==null)ﻩ ﻩﻩnewDao();ﻩ ﻩreturnconn.createStatement().executeUpdate(sql);ﻩ }catch(SQLExceptione){ﻩﻩﻩSystem。out.println(e。getMessage());ﻩ //if(e.getMessage().equals("[Microsoft][SQLServer2000DriverforJDBC][SQLServer]DELETE语句与COLUMNREFERENCE约束’FK_TB_BORRO_REFERENCE_TB_BOOKI'冲突。该冲突发生于数据库’db_library',表’tb_borrow',column’bookISBN'。”)) ﻩﻩ ﻩﻩﻩreturn-1;ﻩﻩ}finally{ﻩﻩ} }为了避开运行程序时资源浪费,优化项目的运行速度,需要在完成数据库操作后,关闭数据库连接,其关键代码如下:publicstaticvoidclose(){ ﻩtry{ﻩﻩﻩconn。close();ﻩ }catch(SQLExceptione){ﻩﻩﻩe.printStackTrace(); ﻩ}finally{ﻩﻩﻩconn=null;ﻩﻩ}ﻩ}二:MenuActions类的编写通常激活同一个命令有多种方式,用户可以通过工具栏中的按钮或菜单选择特定的功能.在本系统中命令就是弹出内部窗体Swing包供应了一个格外有用的机制来封装命令,并将其连接到多个大事源,这种机制就是Action借口。Action接口有如下方法:PublicvoidactionPerformed(ActionEvente)PublicObjectgetValue(Stringkey)PublicvoidputValue(Stringkey,Objectvalue)PublicbooleanisEnabled()PublicvoidsetEnabled(booleanb)PubilcvoidaddPropertyChangeListener(PropertyChangeListenerlistener)PinlicvoidremovePropertyChangeListener(PropertyListenerlistener))在actinPerformed()方法执行“更改密码"窗体的弹出类中操作,关键代码如下:privatestaticclassPasswordModiActionextendsAbstractAction{ﻩﻩ/**ﻩﻩ*ﻩﻩ*/ﻩﻩprivatestaticfinallongserialVersionUID=1L;ﻩﻩPasswordModiAction(){ﻩﻩﻩputValue(Action。NAME,"更改口令");ﻩﻩﻩputValue(Action.LONG_DESCRIPTION,"修改当前用户密码");ﻩ ﻩputValue(Action。SHORT_DESCRIPTION,"更换口令");//在“更改口令"提示中显示的文字ﻩ ﻩ//putValue(Action。SMALL_ICON,CreatecdIcon.add(”bookAddtb.jpg"));ﻩﻩﻩ//将图标存储到动作对象中 ﻩﻩ//setEnabled(false);//使动作禁用ﻩ }ﻩﻩpublicvoidactionPerformed(ActionEvente){ﻩ ﻩif(!frames.containsKey(”更改密码”)||frames。get("更改密码").isClosed()){ﻩﻩﻩﻩGengGaiMiMaiframe=newGengGaiMiMa(); ﻩﻩframes.put(”更改密码",iframe);ﻩﻩ ﻩLibrary.addIFame(frames。get(”更改密码"));ﻩﻩﻩ}ﻩﻩ}ﻩ}三:限制文本框长度类编写在swing语言创建的窗体中,当JTextField组建创建时,可以指定文本框的宽度。但在JTextfield的构造器中设定的宽度并不是用户输入的字符个数上限,用户可以在文本框中输入一个更长的字符串,此时需要限制用户输入字符串的长度。创建此类的步骤如下:1,。创建MyDocument.java类,此类继承PlainDocument类。关键代码如下:PublicclassMydocumentextendsPlainDocument{}在Mydocument.java类中创建了两个构造函数,其中一个是又参数的,另一个是无参数的。关键代码如下:PublicMydocument(intnewMaxLength{Super();Maxlength=newMaxlengyh;}PublicMyDocument(){This(10);}重载父类方法insertString(),在此方法中限定文本框允许输入字符串长度。关键代码如下:publicvoidinsertString(intoffset,Stringstr,AttributeSeta)ThrowsBadLocationException{If(getLength()+str.length()>maxLength){return;}else{super.insertString(offset,str,a);}}在程序设计中,当需要限制用户输入字符串长度时,可以用如下代码JTextfieldtextfield=newJTextfield("请输入13位书号",13);Textfield。setDocument(newMyDocument(13));四:描述组合框索引与内容类的编写在程序编写的过程中,常常会遇到组合框组件的应用。又是要在窗体中的组合框中显示简略内容,通常需要在数据库中存储此组合框的索引值,这时便需要使用一种数据结构将组合框中的内容与索引值联系在一起创建组合框组件的索引值与其对应的内容Item.java类,这个类中不仅包含代表组合框索引的成员变量id和代表组合框内容的成员变量name,还包括两个成员变量的setXXX(),getXXX()方法。关键代码如下:packagecom.wsy.JComPz;publicclassItem{ﻩpublicStringid;ﻩpublicStringname;ﻩpublicStringgetId(){ﻩﻩreturnid;ﻩ}ﻩpublicvoidsetId(Stringid){ﻩﻩthis.id=id; }ﻩpublicStringgetName(){ﻩ returnname;ﻩ} publicvoidsetName(Stringname){ﻩﻩthis.name=name;ﻩ}ﻩpublicStringtoString(){ ﻩreturngetName();ﻩ}}创建MapPz。java类,使用Map关联组合框的索引与组合框的简略内容。关键代码如下:packagecom.wsy。JComPz;importjava.util。HashMap;importjava.util.List;importjava.util.Map;importjavax.swing.JComboBox;.wsy.dao。Dao;importcom。wsy。model.BookType;publicclassMapPz{ staticMapmap=newHashMap();ﻩpublicstaticMapgetMap(){ﻩﻩListlist=Dao.selectBookCategory();ﻩﻩfor(inti=0;i<list.size();i++){ ﻩ BookTypebooktype=(BookType)list.get(i); ﻩﻩItemitem=newItem();ﻩﻩﻩitem。setId(booktype.getId());ﻩﻩﻩitem.setName(booktype.getTypeName());ﻩﻩﻩmap.put(item.getId(),item);ﻩﻩ}ﻩﻩreturnmap;ﻩ}}上述代码中用到了Dao.java中的selectBookCategory()方法,此方法用于查询图书类别相关信息,首先将数据库查询的相关信息放入javaBean中,然后将javaBean对象添加到List集合中,最终将结果以List形式返回,关键代码如下:publicstaticListselectBookCategory(StringbookType){ﻩﻩListlist=newArrayList();ﻩﻩStringsql=”selectdaysfromtb_bookTypewheretypeName=’"+bookType+”'”; ﻩResultSetrs=Dao。executeQuery(sql); ﻩtry{ﻩﻩﻩwhile(rs.next()){ﻩﻩﻩﻩBookTypetype=newBookType();ﻩ ﻩﻩtype.setDays(rs.getString("days"));ﻩﻩﻩﻩlist.add(type);ﻩﻩ }ﻩﻩ}catch(Exceptione){ﻩﻩﻩe。printStackTrace();ﻩﻩ}ﻩﻩDao.close();ﻩﻩreturnlist;ﻩ}在JLable上添加图片类的编写为了美化窗体,通常需要在窗体上添加图片,关键代码如下:packagecom。wsy。util;importj.URL;importjavax.swing.ImageIcon;importcom.wsy.Library;publicclassCreatecdIcon{ publicstaticImageIconadd(StringImageName){ﻩﻩURLIconUrl=Library。class。getResource("/”+ImageName);ﻩ ImageIconicon=newImageIcon(IconUrl);ﻩﻩreturnicon;ﻩ}}二:主窗体设计主窗体的设计中,使用到JMenuBar类与JToolBar类来创建菜单栏与工具栏,菜单栏的创建比较简洁,使用JMenuBar的构造函数初始化菜单栏即可。例如:JMenuBarmenubar=newJMenuBar();//创建菜单栏frame.setJMenu=newJMenu(menuBar);//将菜单栏放入顶层框架JMenueditMenu=newJMenu("图书类别管理);//在菜单栏中创建顶层菜单menuBar.add(editzMenu);//将顶层菜单栏添加到菜单栏中JMenuItemexit=newJMenuItem("退出");//在菜单栏中创建菜单项editMenu.add(exit);//将菜单项添加到顶层菜单中editMenu.addSeperator();//添加分隔符JMenu。bookTypeAdd=newJMenu("图书添加");//创建子菜单editMenu.add(bookTypeAdd);//在顶层菜单中添加子菜单在主窗体中工具栏的创建也格外简洁。工具栏为系统供应了飞快访问常用命令的一系列按钮。可以使用如下代码创建工具栏:JToolBarbar=newJToolBar();完成主窗体中工具栏的创建后同样需要添加MenuActions类对象实现工具栏大事,由于需要在工具栏中添加图标,所以将动作对象添加到按钮组件中,然后为按钮设置图标。例如://将图书信息修改对象附加给按钮组件JButtonbookModiAndDelButton=newJButton(MenuActions.BOOK_MODIFY);//创建图标方法ImageIconbookmodiicon=CreatecdIcon。add(”bookModiAndDeltb.jpg”);bookModiAndDelButton,setIcon(bookmodiicon);//为按钮设置图标BookModiAndDelButton.setHideActionText(true);//使按钮文字隐藏最后将按钮添加到工具栏中:toolBar.add(bookModiAndDelButton);主窗体的实现过程:1:创建Library类,在它的构造函数中设置主窗体相关属性,如窗体大小,窗体标题等相关属性,还可以为窗体设置背景图片,并调用创建菜单栏与工具栏的方法,在主窗体中创建菜单栏与工具栏关键代码如下:publicLibrary(){ﻩﻩsuper();ﻩﻩsetDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); ﻩ//setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE); ﻩsetLocationByPlatform(true);ﻩ setSize(800,600);ﻩ setTitle(”图书馆管理系统");ﻩﻩJMenuBarmenuBar=createMenu();//调用创建菜单栏的方法ﻩﻩsetJMenuBar(menuBar);ﻩﻩJToolBartoolBar=createToolBar();//调用创建工具栏的方法ﻩﻩgetContentPane().add(toolBar,BorderLayout。NORTH);ﻩﻩ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);}2:编写创建菜单栏方法,可以初始化JMenuBar类对象创建顶层菜单,并在顶层菜单上添加相关菜单项与子菜单,然后为菜单栏添加图标,为菜单栏添加图标可以使用JMenu类中的setIcon()方法进行添加。关键代码如下:privateJMenuBarcreateMenu(){//创建菜单栏的方法ﻩﻩJMenuBarmenuBar=newJMenuBar();ﻩﻩJMenubookOrderMenu=newJMenu();//初始化新书订购管理菜单ﻩﻩbookOrderMenu。setIcon(CreatecdIcon。add(”xsdgcd.jpg"));ﻩﻩbookOrderMenu.add(MenuActions.NEWBOOK_ORDER); bookOrderMenu。add(MenuActions。NEWBOOK_CHECK_ACCEPT);ﻩﻩ ﻩJMenubaseMenu=newJMenu();//初始化基础数据维护菜单ﻩﻩbaseMenu.setIcon(CreatecdIcon.add("jcsjcd.jpg”));ﻩ {ﻩﻩﻩJMenureaderManagerMItem=newJMenu("读者信息管理”);ﻩﻩﻩreaderManagerMItem.add(MenuActions。READER_ADD);ﻩﻩﻩreaderManagerMItem。add(MenuActions。READER_MODIFY);ﻩﻩ JMenubookTypeManageMItem=newJMenu("图书类别管理");ﻩﻩﻩbookTypeManageMItem。add(MenuActions.BOOKTYPE_ADD);ﻩﻩﻩbookTypeManageMItem.add(MenuActions.BOOKTYPE_MODIFY); ﻩ JMenumenu=newJMenu("图书信息管理”);ﻩﻩﻩmenu.add(MenuActions.BOOK_ADD);ﻩﻩﻩmenu。add(MenuActions.BOOK_MODIFY);ﻩﻩ baseMenu。add(readerManagerMItem);ﻩﻩﻩbaseMenu.add(bookTypeManageMItem);ﻩﻩ baseMenu。add(menu);ﻩ ﻩbaseMenu。addSeparator();ﻩﻩﻩbaseMenu。add(MenuActions.EXIT);ﻩﻩ}ﻩﻩJMenuborrowManageMenu=newJMenu();//借阅管理ﻩﻩborrowManageMenu.setIcon(CreatecdIcon。add("jyglcd.jpg"));ﻩ borrowManageMenu.add(MenuActions.BORROW);//借阅ﻩﻩborrowManageMenu.add(MenuActions。GIVE_BACK);//归还 ﻩborrowManageMenu。add(MenuActions.BOOK_SEARCH);//搜寻ﻩﻩJMenusysManageMenu=newJMenu();//系统维护ﻩﻩsysManageMenu.setIcon(CreatecdIcon.add("jcwhcd.jpg”)); ﻩJMenuuserManageMItem=newJMenu("用户管理");//用户管理ﻩﻩuserManageMItem.add(MenuActions.USER_ADD);ﻩﻩuserManageMItem。add(MenuActions。USER_MODIFY);ﻩﻩsysManageMenu。add(MenuActions.MODIFY_PASSWORD);ﻩﻩsysManageMenu。add(userManageMItem);ﻩ menuBar.add(baseMenu);//添加基础数据维护菜单到菜单栏ﻩﻩmenuBar.add(bookOrderMenu);//添加新书订购管理菜单到菜单栏ﻩﻩmenuBar.add(borrowManageMenu);//添加借阅管理菜单到菜单栏ﻩﻩmenuBar。add(sysManageMenu);//添加系统维护菜单到菜单栏ﻩ returnmenuBar;ﻩ}}3:编写创建工具栏的方法,创建工具栏可以使用JToolBar类,创建工具栏后将全部的图标添加到工具栏中,可以为每个图标添加提示信息。由于在创建MenuActions类时已经为每个内部窗体动作添加了提示信息,关键代码如下:/**ﻩ*创建工具栏 *ﻩ*@returnJToolBarﻩ*/ privateJToolBarcreateToolBar(){//创建工具栏的方法ﻩﻩJToolBartoolBar=newJToolBar();ﻩﻩtoolBar.setFloatable(false);ﻩﻩtoolBar.setBorder(newBevelBorder(BevelBorder.RAISED));ﻩﻩ JButtonbookAddButton=newJButton(MenuActions。BOOK_ADD);ﻩﻩ//ImageIconicon=CreatecdIcon。add("bookAdd.bmp");//创建图标方法 ﻩImageIconicon=newImageIcon(Library。class.getResource("/bookAddtb。jpg"));//添加菜单栏图标ﻩﻩﻩbookAddButton.setIcon(icon);ﻩﻩbookAddButton.setHideActionText(true); ﻩﻩﻩ//bookAddButton.setToolTipText("fjdkjfk");//图片上提示字ﻩﻩtoolBar.add(bookAddButton);ﻩﻩ//toolBar。add(MenuActions.BOOK_MODIFY);ﻩﻩﻩﻩ//在工具栏中添加图书修改与删除图标ﻩﻩ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); ﻩﻩJButtonreaderAddButton=newJButton(MenuActions.READER_ADD); ﻩImageIconreaderAddicon=CreatecdIcon.add("readerAddtb。jpg");//创建图标方法ﻩﻩreaderAddButton。setIcon(readerAddicon);ﻩﻩreaderAddButton.setHideActionText(true);ﻩﻩtoolBar.add(readerAddButton);ﻩﻩﻩﻩJButtonreaderModiAndDelButton=newJButton(MenuActions。READER_MODIFY);ﻩﻩImageIconreaderModiAndDelicon=CreatecdIcon.add("readerModiAndDeltb.jpg");//创建图标方法ﻩﻩreaderModiAndDelButton。setIcon(readerModiAndDelicon);ﻩﻩreaderModiAndDelButton.setHideActionText(true);ﻩﻩtoolBar。add(readerModiAndDelButton); ﻩﻩﻩJButtonExitButton=newJButton(MenuActions.EXIT);ﻩ ImageIconExiticon=CreatecdIcon.add("exittb。jpg");//创建图标方法ﻩ ExitButton.setIcon(Exiticon);ﻩﻩExitButton.setHideActionText(true);ﻩ toolBar.add(ExitButton); ﻩreturntoolBar;ﻩ}4:最后在Library.java类中的主函数中调用登陆窗体,如果登入成功,初始化Library.java对象,如果登入失败,则弹出提示对话框,关键代码如下:Publicstaticvoidmain(String[]args){Try{UManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(Exceptionex){ex.printStackTrace();}}登陆模块设计登陆模块式图书馆管理系统的入口,在运行本系统后,首先进入的便是登陆窗体。在该窗体中,系统管理员可以通过输入正确的管理员名称与密码登陆到系统,当用户没有输入管理员的名称或密码时,系统将会弹出相应地提示信息。登陆模块的运行效果如图:在本系统中,登陆模块窗体继承了JFrame类。在设计登陆窗体前,需要初始化JPanel组件,然后设置JPanel的布局。一句登陆模块的整体布局,在登陆窗体中使用了BorderLayout布局管理器。BorderLayout布局管理器是JFrame的默认布局管理器,它可以让程序员选择每个组件的摆放位置,例如:ClassMypanelextendsJPanel{setLayout(newBorderLayout());add(button,BorderLayout。SOUTH);}中部的面板使用GridLayout布局管理器.GridLayout布局管理器依据行和列来排行所以的组件例如:Panel.setLayout(newGridLayout(5,4));//在初始化时分别指定网格的行数和列数在南部的面板中使用FlowLayout布局管理器.中部面板放置用户名标签,用户名文本框与密码标签,密码文本框,其中用户名文本框使用JTextField组件,密码文本框使用JPasswordField组件,可以在初始化文本框指定时指定文本框时指定文本框的列数与文本框的初始值。例如:JTextFieldtextField=newJTextField("Defaultinput",20)//指定文本框列数和初始值JPasswordFieldpassword=newJPasswordFiled(20);//初始化密码框为了增加登陆窗体的美观,将密码框的回显字符设置为"*",可以用如下代码进行设置:password。setEchochar('*’);当窗体设计完成后,需要进行管理员登陆验证操作,这时需要为"登陆"按钮添加按钮监听大事。可以讲按钮监听大事写入内部类中,它实现ActionListener借口,在内部类中重写actionPerformed()方法,实现登陆验证操作。登陆模块实现过程首先在BookLoginFrame类构造函数中设计登陆窗口的整体布局,包括添加窗体关闭按钮,最小化按钮,设置窗体大小等相关属性。关键代码如下:publicBookLoginIFrame(){ ﻩsuper();ﻩﻩfinalBorderLayoutborderLayout=newBorderLayout(); setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);ﻩﻩborderLayout。setVgap(10);ﻩﻩgetContentPane().setLayout(borderLayout); ﻩsetTitle(”图书馆管理系统登录”);ﻩﻩsetBounds(100,100,285,194); ﻩfinalJPanelpanel=newJPanel();ﻩﻩpanel.setLayout(newBorderLayout());ﻩ panel。setBorder(newEmptyBorder(0,0,0,0)); ﻩgetContentPane().add(panel); ﻩfinalJPanelpanel_2=newJPanel(); ﻩfinalGridLayoutgridLayout=newGridLayout(0,2);ﻩﻩgridLayout。setHgap(5);ﻩﻩgridLayout。setVgap(20);ﻩ panel_2.setLayout(gridLayout); ﻩpanel.add(panel_2);ﻩﻩfinalJLabellabel=newJLabel();ﻩ label.setHorizontalAlignment(SwingConstants.CENTER);ﻩﻩlabel.setPreferredSize(newDimension(0,0));ﻩ label。setMinimumSize(newDimension(0,0)); ﻩpanel_2.add(label);ﻩﻩlabel.setText(”用户名:");ﻩﻩusername=newJTextField(20);ﻩﻩusername.setPreferredSize(newDimension(0,0));ﻩﻩpanel_2。add(username);ﻩﻩfinalJLabellabel_1=newJLabel();ﻩ label_1.setHorizontalAlignment(SwingConstants.CENTER);ﻩﻩpanel_2。add(label_1); ﻩlabel_1。setText(”密码:”);ﻩ password=newJPasswordField(20);ﻩﻩpassword.setDocument(newMyDocument(6));ﻩﻩpassword.setEchoChar('*');//设置密码框的回显字符 ﻩpassword.addKeyListener(newKeyAdapter(){ ﻩﻩpublicvoidkeyPressed(finalKeyEvente){ﻩ ﻩﻩif(e.getKeyCode()==10)ﻩﻩﻩ login。doClick();ﻩ }ﻩﻩ}); panel_2。add(password); finalJPanelpanel_1=newJPanel();ﻩﻩpanel.add(panel_1,BorderLayout.SOUTH);ﻩﻩlogin=newJButton(); ﻩlogin.addActionListener(newBookLoginAction());ﻩﻩﻩﻩ login.setText("登录");ﻩﻩpanel_1.add(login);ﻩﻩreset=newJButton();ﻩ reset.addActionListener(newBookResetAction());ﻩﻩ ﻩreset。setText(”重置");ﻩ panel_1。add(reset);ﻩﻩfinalJLabeltupianLabel=newJLabel();ﻩﻩImageIconloginIcon=CreatecdIcon.add("login。jpg");ﻩ tupianLabel。setIcon(loginIcon);ﻩﻩtupianLabel.setOpaque(true);ﻩ tupianLabel。setBackground(Color.GREEN);ﻩ tupianLabel。setPreferredSize(newDimension(260,60)); ﻩpanel.add(tupianLabel,BorderLayout.NORTH);ﻩﻩ//ﻩﻩsetVisible(true); ﻩsetResizable(false);ﻩﻩ//setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);}为便利在登陆验证时取值与传值,需要创建一个对应于tb_operator表字段的JavaBean,这个类除了以数据表字段命名的成员变量之外,还创建与成员变量相对应的setXXX(),getXXX()方法,关键代码如下:publicclassOperater{ﻩprivateStringid;ﻩprivateStringname;ﻩ privateStringgrade; privateStringpassword;ﻩpublicStringgetGrade(){ﻩ returngrade;ﻩ} publicvoidsetGrade(Stringgrade){ﻩﻩthis.grade=grade;ﻩ}ﻩpublicStringgetId(){ ﻩreturnid;ﻩ}ﻩpublicvoidsetId(Stringid){ﻩ this.id=id;ﻩ} publicStringgetName(){ ﻩreturnname; }ﻩpublicvoidsetName(Stringname){ﻩﻩ=name;ﻩ}ﻩpublicStringgetPassword(){ﻩﻩreturnpassword; }ﻩpublicvoidsetPassword(Stringpassword){ﻩﻩthis.password=password;ﻩ}}3:为了在其他窗体中取得当前登陆用户名称,需要在BookLoginIFrame。java类中创建一个Operator类型的成员变量,用户创建对应的setXXX()与getXXX()方法,关键代码如下:publicstaticOperatergetUser(){ﻩﻩreturnuser; }ﻩpublicstaticvoidsetUser(Operateruser){ﻩﻩBookLoginIFrame。user=user; }}4:分别为"登陆”按钮与”重置”按钮设置监听大事。关键代码如下:classBookLoginActionimplementsActionListener{ ﻩpublicvoidactionPerformed(finalActionEvente){ ﻩﻩuser=Dao。check(username.getText(),password。getText());ﻩ ﻩif(user。getName()!=null){ﻩﻩﻩ try{ﻩﻩﻩﻩﻩLibraryframe=newLibrary();ﻩﻩﻩﻩ frame。setVisible(true);ﻩﻩﻩ BookLoginIFrame.this。setVisible(false);ﻩ ﻩﻩ}catch(Exceptionex){ﻩﻩﻩ ex。printStackTrace(); ﻩﻩﻩ}ﻩﻩﻩ}else{ﻩ ﻩﻩJOptionPane。showMessageDialog(null,”只有管理员才可以登录!");ﻩﻩﻩﻩusername.setText("”);ﻩ ﻩpassword。setText("");ﻩﻩﻩ}ﻩ } }在Dao类中创建登陆验证方法,在此方法中查询文本框中输入字符串是否与操作员数据表数据匹配,关键代码如下:publicstaticOperatercheck(Stringname,Stringpassword){ﻩ inti=0; ﻩOperateroperater=newOperater();ﻩﻩStringsql="select*fromtb_operatorwhe='"+nameﻩ ﻩ+”'andpassword='"+password+”'andadmin=1”;ﻩﻩResultSetrs=Dao.executeQuery(sql);ﻩ try{ ﻩﻩwhile(rs。next()){ﻩﻩ ﻩStringnames=rs。getString(1);ﻩﻩﻩﻩoperater.setId(rs.getString(”id”));ﻩﻩﻩﻩoperater.setName(rs.getString(”name”)); ﻩﻩﻩoperater.setGrade(rs.getString(”admin”));ﻩﻩ ﻩoperater.setPassword(rs.getString("password”));ﻩﻩ ﻩif(names!=null){ﻩﻩﻩﻩﻩi=1;ﻩﻩﻩ }ﻩﻩﻩ} ﻩ}catch(Exceptione){ﻩﻩﻩe。printStackTrace();ﻩﻩ}ﻩ Dao.close();ﻩﻩreturnoperater;}图书馆信息管理模块:图书馆信息管理模块主要包括图书信息添加,图书信息修改两个功能。在图书馆信息添加窗体中管理员可以录入图书相关信息,包括名称,类别,图书条形码等.图书信息添加窗体图书信息修改窗体图书信息管理模块实现过程:首先创建图书信息添加窗体,关键代码如下:publicclassBookAddIFrameextendsJInternalFrame{ﻩprivateJComboBoxpublisher;ﻩprivateJTextFieldprice; privateJFormattedTextFieldpubDate;ﻩprivateJTextFieldtranslator;ﻩprivateJTextFieldwriter;ﻩprivateJTextFieldISBN; privateJTextFieldbookName;ﻩprivateJComboBoxbookType;ﻩprivateJButtonbuttonadd; privateJButtonbuttonclose; DefaultComboBoxModelbookTypeModel;ﻩﻩMapmap=newHashMap();ﻩpublicBookAddIFrame(){ﻩ super();ﻩﻩfinalBorderLayoutborderLayout=newBorderLayout();ﻩﻩgetContentPane().setLayout(borderLayout);ﻩ setIconifiable(true);ﻩﻩ ﻩﻩﻩﻩ//设置窗体可最小化---必须ﻩﻩsetClosable(true);ﻩﻩ ﻩ ﻩﻩﻩ//设置窗体可关闭---必须ﻩﻩsetTitle(”图书信息添加");ﻩ ﻩ ﻩﻩ//设置窗体标题--—必须ﻩﻩsetBounds(100,100,396,260);ﻩ ﻩ ﻩ//设置窗体位置和大小---必须ﻩﻩfinalJPanelpanel=newJPanel();ﻩ panel.setBorder(newEmptyBorder(5,10,5,10));ﻩﻩfinalGridLayoutgridLayout=newGridLayout(0,4);ﻩﻩgridLayout.setVgap(5);ﻩﻩgridLayout.setHgap(5);ﻩﻩpanel.setLayout(gridLayout); ﻩgetContentPane().add(panel); finalJLabellabel_2=newJLabel();ﻩ label_2.setText(”图书编号:");ﻩﻩpanel.add(label_2); ISBN=newJTextField("请输入13位书号”,13); ﻩISBN.setDocument(newMyDocument(13));//设置书号文本框最大输入值为13 ﻩﻩﻩISBN.setColumns(13);ﻩ ISBN。addKeyListener(newISBNkeyListener());ﻩﻩISBN.addFocusListener(newISBNFocusListener());ﻩﻩpanel.add(ISBN);ﻩﻩfinalJLabellabel=newJLabel();ﻩﻩlabel.setHorizontalAlignment(SwingConstants.CENTER); label.setText("类别:”); ﻩpanel.add(label); ﻩbookType=newJComboBox(); ﻩbookTypeModel=(DefaultComboBoxModel)bookType。getModel(); ﻩ //从数据库中取出图书类别 ﻩListlist=Dao.selectBookCategory();ﻩﻩfor(inti=0;i〈list.size();i++){ ﻩ BookTypebooktype=(BookType)list.get(i);ﻩ ﻩItemitem=newItem();ﻩﻩﻩitem。setId((String)booktype.getId()); ﻩ item.setName((String)booktype。getTypeName());ﻩﻩﻩbookTypeModel。addElement(item);ﻩ }ﻩﻩpanel.add(bookType);ﻩ finalJLabellabel_1=newJLabel(); ﻩlabel_1.setText("书名:");ﻩ panel。add(label_1);ﻩﻩbookName=newJTextField(); ﻩpanel.add(bookName); ﻩfinalJLabellabel_3=newJLabel();ﻩﻩlabel_3。setHorizontalAlignment(SwingConstants。CENTER);ﻩﻩlabel_3。setText("作者:”); ﻩpanel.add(label_3);ﻩﻩwriter=newJTextField(); writer.setDocument(newMyDocument(10));ﻩﻩpanel.add(writer);ﻩ finalJLabellabel_2_1=newJLabel();ﻩﻩlabel_2_1.setText("出版社:”);ﻩﻩpanel.add(label_2_1);ﻩ publisher=newJComboBox(); String[]array=newString[]{"***出版社”,"**信息出版社",”**大型出版社",”***小型出版社”};ﻩ publisher.setModel(newDefaultComboBoxModel(array));ﻩﻩpanel.add(publisher); ﻩfinalJLabellabel_4=newJLabel();ﻩﻩlabel_4。setHorizontalAlignment(SwingConstants.CENTER);ﻩ label_4。setText("译者:”);ﻩﻩpanel.add(label_4);ﻩﻩtranslator=newJTextField();ﻩﻩtranslator.setDocument(newMyDocument(10)); ﻩpanel.add(translator);ﻩ finalJLabellabel_1_1=newJLabel();ﻩﻩlabel_1_1。setText("出版日期:"); ﻩpanel。add(label_1_1);ﻩ SimpleDateFormatmyfmt=newSimpleDateFormat("yyyy—MM-dd");ﻩ pubDate=newJFormattedTextField(myfmt。getDateInstance());ﻩﻩpubDate.setValue(newjava.util.Date());ﻩﻩpanel。add(pubDate);ﻩﻩfinalJLabellabel_3_1=newJLabel();ﻩﻩlabel_3_1.setHorizontalAlignment(SwingConstants。CENTER); ﻩlabel_3_1。setText(”单价:");ﻩﻩpanel.add(label_3_1);ﻩﻩprice=newJTextField();ﻩﻩprice。setDocument(newMyDocument(5));ﻩﻩprice.addKeyListener(newNumberListener());ﻩﻩpanel.add(price);ﻩﻩfinalJPanelpanel_1=newJPanel();ﻩﻩpanel_1.setBorder(newLineBorder(SystemColor.activeCaptionBorder,1,false));ﻩﻩgetContentPane()。add(panel_1,BorderLayout.SOUTH); ﻩfinalFlowLayoutflowLayout=newFlowLayout();ﻩﻩflowLayout。setVgap(2);ﻩ flowLayout.setHgap(30);ﻩ flowLayout.setAlignment(FlowLayout.RIGHT);ﻩ panel_1.setLayout(flowLayout);ﻩﻩbuttonadd=newJButton();ﻩ buttonadd。addActionListener(newaddBookActionListener());ﻩﻩbuttonadd。setText("添加”);ﻩﻩpanel_1。add(buttonadd);ﻩﻩbuttonclose=newJButton();ﻩﻩbuttonclose.addActionListener(newCloseActionListener());ﻩﻩbuttonclose.setText("关闭");ﻩﻩpanel_1.add(buttonclose);ﻩﻩfinalJLabellabel_5=newJLabel();ﻩ ImageIconbookAddIcon=CreatecdIcon。add("newBookorderImg.jpg");ﻩ label_5。setIcon(bookAddIcon);ﻩ label_5.setPreferredSize(newDimension(400,80)); ﻩlabel_5.setBorder(newLineBorder(SystemColor.activeCaptionBorder,1,false));ﻩﻩgetContentPane().add(label_5,BorderLayout.NORTH);ﻩﻩlabel_5.setText("新书定购(LOGO图片)”); ﻩﻩﻩsetVisible(true);ﻩﻩﻩﻩﻩﻩﻩ //显示窗体可关闭--—必须在添加全部控件之后执行该语句}2:在图书馆信息添加窗体中添加按钮监听大事,在大事中的actionPerformed()方法中进行图书信息添加操作,在Dao类中编写,关键代买如下:ﻩpublicstatici

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论