Java图书管理系统毕业设计(论文)_第1页
Java图书管理系统毕业设计(论文)_第2页
Java图书管理系统毕业设计(论文)_第3页
Java图书管理系统毕业设计(论文)_第4页
Java图书管理系统毕业设计(论文)_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

PAGE┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊安徽工业大学毕业设计(论文)说明书PAGEPAGEV摘要本文介绍了在Java运行环境下开发图书管理信息系统的过程。文章介绍了图书馆管理信息系统的系统分析部分,包括可行性分析、图书借阅流程分析等;系统设计部分主要介绍了系统功能设计和数据库设计及代码设计;系统实现部分说明了几个主要模块的算法,本系统界面友好,操作简单,比较实用。

本系统采用了JSP页面的设计,使用了MVC模式,它采用了当今软件设计的最新技术,具有开发效率高、设计灵活、生成的软件界面友好美观等特点。本系统中通过JDBC驱动和数据库进行无缝连接,后端的数据库是SqlServer2005,该数据库界面友好,容易上手,具有较高的完整性,一致性和安全性。关键词:Java;图书管理系统;图书借阅;MVC;开源;数据库

AbstractThisarticleintroducedtheprocessthatdevelopingthebooksmanagementsystemundertheJavarunningenvironment.Thispaperintroducestheanalysispartsoflibrarymanagementinformationsystem,includingfeasibilityanalysis,libraryprocessanalysis,etc.;Systemdesignpartmainlyintroducedthesystemfunctiondesignanddatabasedesignandcodedesign;Thesystemrealizationpartexplainedseveralmainmodulealgorithms,Thesystemisuser-friendly,simple,morepractical.ThissystemusestheJSPpagedesignandusestheMVCpattern.Itusesthenewesttechnologyintoday'ssoftwaredesign,andhasthedevelopmentofhighefficiency,flexibledesign,generatesoftwareuser-friendlyappearanceandothercharacteristics.ThesystemadoptedinJDBCdriveanddatabaseforaseamlessconnectiontothebackenddatabaseisSqlServer2005,thedatabaseinterfaceisveryuserfriendly,easytolearn,andhaveahigherintegrity,consistencyandsecurity.Keywords:Java;BooksManagementSystem;LibraryProcessAnalysis;MVC;OpenSource

毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名:日期:

目录1绪论 11.1开发背景 11.2国内外研究现状 21.3目前存在的问题 21.3.1易遭病毒攻击 21.3.2微机操作技能欠缺 21.3.3维护工作量大 21.3.4运营成本加大 22需求分析 32.1用户需求 32.1.1数据需求 32.1.2功能需求 32.2业务流程 42.2.1系统业务流程 42.3 主要用例的用例描述 43开发平台和开发工具 73.1技术框架 73.1.1J2EE平台 73.1.2Web服务器和数据库 73.2工具选择 83.2.1Java语言诞生背景 83.2.2Java语言的特点 83.2.3开发工具介绍 93.2.4开发环境介绍 94系统设计 104.1总体结构框图 104.2数据库结构设计 114.2.1数据库概念结构设计(ER图) 114.2.2数据库逻辑结构设计 114.2.3数据库表设计 134.3系统各模块功能 144.3.1系统管理员模块功能 144.3.2读者模块功能 144.3.3图书借还模块功能 144.3.4图书管理模块功能 154.3.5出版社管理模块功能 154.3.6作者管理模块功能 155系统实现 165.1开发步骤 165.2详细功能与编码 175.2.1管理员模块 175.2.2读者管理模块 215.2.3图书借还管理模块 245.2.4图书管理模块 266系统测试 366.1部分功能测试 366.1.1登录模块测试 366.1.2管理员注册模块测试 376.1.3图书模块测试 386.2验收测试 406.3评价 407总结 428致谢 439参考文献 4410附录、系统主要代码 45┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊安徽工业大学毕业设计(论文)说明书PAGE第61页共61页1绪论1.1开发背景经过大学四年理论课程的学习,以及校内校外的实践,极大的丰富了自身的理论基础,并且也具备了一些处理简单问题的能力,但即将踏上社会的我深知这还远远不够,因此我利用了毕业设计的机会,在老师的指导下去完成一个具有挑战性的,其具体应用及社会服务相结合的项目,深知通过对它的开发,将对我的能力有更高层次的突破。在调研农村中学时发现这些农村中学图书室都藏书达六、七万余册,但其现行图书管理工作都是采用传统的手工管理,经过对其图书管理工作中的图书信息、读者管理及借阅管理工作做全面调查研究,其现行手工流程具体分析如下:图书登记:对上级分配、学校购入和社会捐赠的图书进行图书信息登记;读者登记:图书管理员根据学校档案室提供的教师花名册和学生花名册进行读者登记,然后填发借书证,学生毕业和教师调出时将其借书证注销。借阅管理:读者特别是学生读者持借书证到图书室借阅图书,图书管理员将借阅日期填写在书籍卡片上,将卡片夹在借书证中间,存放在图书室,学生看完后,送还所借书籍,收回借书证或另借其它书籍。这种传统人工的管理方式存在着许多缺点,如:效率低、保密性差,一方面导致教师、学生对学校图书室藏书情况不了解,图书室究竟有哪些图书也不知道;另一方面图书管理员对图书管理工作倍感头痛,因为时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难,耗费劳动力大,难于避免错误的产生,如借书证挂失后,仍有少数学生冒用已挂失的借书证借出图书,造成图书外流。本人是安工大的学生,看着图书馆日益忙碌的借书还书管理,大胆猜想一种新方案的图书管理系统,即纯网络借书还书操作,同学可以不必天天到图书馆徘徊选书,也不必为了找某一本书而劳烦工作人员,不必因为工作人员的上下班而等着借还图书,同学可以在网上进行选书借书还书操作,当选好图书时可以点击预定借阅操作,管理员这边如果看到可以帮您借阅并送到指定的存数地点,您可随时凭学生证刷卡取书。还书同样是学生先在网上图书馆进行还书操作,再在指定工作日将书籍归还到指定还书地点,工作人员将在一段时间后进行检查,如果归还将网上通知管理员进行最后的还书确认,图书归还成功。本软件以此为设计理念,是管理员操作的后台管理软件。1.2国内外研究现状随着数字化时代的到来,人们对于知识的渴求越来越高,为了提高全民文化知识水平,各地政府不断在当地建立图书馆,供人们参考与借阅,当然随着规模的扩大,普通的手工管理已经不能适应,不仅浪费人力物力还有可能造成书籍的遗失和损坏,此时,一种基于互联网的图书管理系统已经如雨后春笋搬不断成长,图书馆里系统在现代社会也成为一门热门的行业。国际上在线图书管理系统的前景看好,而国内的在线图书管理系统数量上也有了新的增长。它的建立使图书馆里拜托传统的手工操作,实现通过互联网而进行的远程图书借阅归还,其发展前景将是非常深远的。1.3目前存在的问题随着社会数字化的进行,图书馆里系统虽然从手工操作慢慢过渡到了互联网管理的阶段,但也在线图书管理系统也存在着很多问题1.3.1易遭病毒攻击如今科技发达的同时,不少攻击计算机的电脑病毒应运而生,如果数字图书管理系统不小心被病毒入侵后,可能导致图书资料丢失,借阅信息丢失,以至造成图书的丢失。1.3.2微机操作技能欠缺虽然很多人都对互联网和电脑的使用轻车熟路,但仍有很多人不能正确的使用微机和互联网,使在线图书管理系统面临的读者用户收到限制。1.3.3维护工作量大虽然相比手工管理图书,节约了很多工作量,但工作量仍然很大,由于管理计算机的数据量较大,导致日后维护也有很大的困难。1.3.4运营成本加大计算机管理图书的操作,要求工作人员对计算机的环境以及软件的掌握都有一定的要求,从而对招募管理人员增加了难度。2需求分析2.1用户需求2.1.1数据需求本图书管理系统主要的面向图书馆的管理者所开发的一款简洁的后台管理软件。对于该系统的数据需求可从以下几方面进行考虑:1)从管理员角度分析,可得到管理员的帐号,用户名,密码,注册时间等数据。2)从读者角度分析,可得到读者的学号,姓名,性别,所在院系,所借书籍等信息。3)从书籍的角度出发,可得到书籍的图书ISBN,书名,出版社的相关信息,作者的相关信息,图书的价格,图书的版本号,出版年份,图书的封面图片等数据信息。综上,在开发该系统的数据层时可以从上面所列三方面去设计数据库的表,进而能将所需数据全部包含起来。2.1.2功能需求1.面向图书的功能有:图书列表的查询,图书入库,图书修订,图书的快速定位查询,由于此系统所面向的功能有限,所以将图书的作者和出版社加以细分,有出版社的管理,包括出版社的添加,出版社的修改,出版社的移除等,为了更方便的实现添加图书。同时还有对图书作者的单独管理,如对作者的查询,增加以及修改等。2.面向管理员的功能有:管理员的登录,注册功能,管理员的修改以及显示等,还有管理员对读者的管理,即对用户实现的一些列操作,如对读者的增删改查,以及读者借阅图书和归还图书等。此系统功能设计以图书和管理员为重心:本系统的主要功能模块主要有以上所提及的这些,还有较多小功能设计,如jquery验证,一些特效的显示等。用户登录用户登录作者管理出版社管理图书管理借还查询读者管理用户管理退出系统图2-1功能需求图2.2业务流程2.2.1系统业务流程本系统的总体业务流程图如下图2-1所示,数据库中存储了问卷和答卷的信息,问卷信息通过问卷制作、问卷导入两种方式经过问卷修订的接口保存到数据库中;答卷信息通过问卷调查、外部调查两种方式保存到数据库中。数据库中答卷信息经过数据的清洗生成决策树,清洗过的数据可以再次保存到数据库中,生成的决策树可以提取规则保存到数据库中,数据库中的规则也可以通过简单统计功能以文本文档的形式导出到数据库外部。DBDB出版社操作图书操作图书列表快速搜索图书删除图书修订图书入库出版社列表出版社添加出版社删除出版社修改作者操作读者操作作者添加搜索作者删除作者修改作者列表读者借书读者还书读者销户读者修改读者注册读者列表管理员操作管理员注册管理员删除管理员修改管理员列表图2-2业务流程图主要用例的用例描述图书管理系统涉及到的用例包括:图书借阅,图书归还,图书查询,读者信息管理,图书信息管理,用户管理,作者信息管理,出版社信息管理,管理员信息管理等,现就系统的主要用例图书借阅,图书归还,图书查询进行详细分析。图书借还模块用例描述:表2-1用例“图书借阅”用例名称图书借阅标识符BMS-1参与者读者(用户),图书管理员描述读书可以通过在图书馆书架上找寻自己要借阅的书籍,将指定书籍交付于管理员,向图书管理员提出借阅请求,管理员在系统中先录入该书籍的isbn查找到相应信息,再对指定读者进行借阅操作,如果读者没注册,管理员要事先给予读者注册,再将图书交给读者,借阅成功。前置条件1.图书馆找到自己想要借阅的书籍后置条件1.登录;2.更新图书借阅列表;主干过程借阅图书读者请求借阅新地图书,并提供自己的编号以及指定图书系统显示被借阅图书的详细资料读者提供自己的id系统存储读者和借阅的图书,并将之存储到数据库中系统更新借阅列表异常1.读者借阅已满(未做要求)2.系统将错误信息显示在借阅页面3.系统重新启动该用例4.数据库中该图书数据损坏被包含用例无被扩展用例无优先级高表2-2用例“图书归还”用例名称图书归还标识符UC-2参与者读者,图书管理员描述读者将自己借阅的图书归还图书馆。前置条件1.到图书操作服务台归还图书后置条件1.根据图书isbn找到图书,进入归还页面,更新图书归还列表;主干过程读者请求归还借阅的图书并提供自己的编号读者将书交给管理员管理员根据图书编号查找到此书进入归还页面进行还书操作更新书籍列表异常1.该书超出了应该归还的时间范围(未限定)2.系统将罚款信息显示在归还页面(未限定)3.无法将图书归还被包含用例无被扩展用例无优先级高表2-3用例“图书查询”用例名称图书查询 标识符UC-3参与者图书管理员描述读者通过图书的isbn,书名等信息对相应的图书进行查询。前置条件1.登录;2.转到图书列表后置条件1.查询页面显示相应的图书的信息主干过程图书查询管理员输入想要查询的图书信息系统显示相应的图书信息点击每本书可以进行单本图书的详细信息异常1.查询的图书不存在(第3步后)2.读者输入的图书信息不能在数据库中查询到,后台报错3.系统显示暂时无该图书信息4.重新启动该用例被包含用例无被扩展用例无优先级高3开发平台和开发工具3.1技术框架本系统采用JSP+Servlet+DAO的mvc3层架构模式,服务器端采用Tomcat,客户端采用FireFox。应用JavaBean和Jdbc数据库连接,Javascript,Ajax等技术,JQuery框架等。3.1.1J2EE平台J2EE,即是Java2平台企业版(Java2PlatformEnterpriseEdition),是原Sun公司(现已被甲骨文公司收购)为企业级应用推出的标准平台。它简化了企业解决方案的开发、部署和管理相关复杂问题的体系结构,J2EE技术的基础就是核心Java平台或Java2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBCAPI、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对EJB(EnterpriseJavaBeans)、JavaServletsAPI、JSP(JavaServerPages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EnterpriseJavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。在开发图书馆借阅管理系统的过程中,应用Myeclipse8.5,它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。Myeclipse是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL。3.1.2Web服务器和数据库在系统的开发过程中使用的Web应用服务器是Tomcat,是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、SUN和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。Tomcat是一个小型的轻量级应用服务器,它运行时占用的系统资源小、扩展性好、支持负载平衡和邮件服务等开发应用系统常用的功能,因此在中小型系统和并发访问用户不是很多的时候,经常被使用。SQLServer是由Microsoft开发和推广的关系数据库系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。为了开发的便捷快速,使用servlet容器对系统进行控制,担任系统的控制层,是程序的枢纽部分开发系统用的系统工具如表4.1所示:表3-1系统开发平台和工具工具名称用途JDK1.6.0_11MyEclipseSqlServer2005Tomcat6.0FireFoxJava开发工具包J2EE集成开发环境关系数据库管理系统Web应用服务器客户端浏览器3.2工具选择3.2.1Java语言诞生背景Java是一种应用于分布式网络环境中的程序设计语言,由Sun开发,java语言广为人知,得益于Internate的迅猛发展。有人说java语言无所不能,这中说法固然夸张,但它确实从一个侧面反映出这种新生语言强大的威力与优越性。一样的应用程序、Web服务器乃至手机的嵌入式系统,java都足以胜任,并且表现得十分出色。特别是,java对网络提供了强有力的支持,这也是这种奇妙语言的魅力所在。3.2.2Java语言的特点Java是一种被广泛使用的网络编程语言。它定位于网络计算,它的几乎所有特点都是服从于这一中心。同时Java语言也集中体现和充分利用了许多软件技术的新成果。可移植性:这是Java语言区别于其他程序语言的最大的优点——可移植性(平台无关性),这正体现了Java语言的“一次编译,处处运行”的优点。安全性:网络上的应用程序必须具有较高的安全性和可靠性,Java特有的沙箱机制已经很好的提供了足够的保障,同时去除了复杂且容易造成错误的指针。还有独特的垃圾回收机制:Java语言提供了垃圾回收机制,用以自动回收内存垃圾。这使得程序设计语言在编写Java程序时不必特别考虑内存管理的问题。使用Java编程的时候不必理会这种恼人且容易出错的工作。3.2.3开发工具介绍开发源代码工具为:MyEclipse8.5运行平台为:Tomcat,Tomcat性能可靠、操作和配置都十分简单,运行抛出异常时比较明显,易解决。采用的数据库为SqlServer2005。3.2.4开发环境介绍实验设备是一台普通计算机,操作系统为WindowsXPProfessional(SP3),CPU规格为英特尔Celeron(赛扬)双核T3000@1.80GHz,内存为2G,硬盘为250GB。4系统设计4.1总体结构框图读者添加读者添加读者删除读者修改读者查询借书操作还书操作JavaWeb图书管理系统作者管理出版社管理图书管理用户管理读者借还作者添加作者删除作者修改作者查询出版社添加出版社修改出版社移除出版社查询用户注册用户修改用户销户用户查询图书入库图书删除图书查询图书修订图4-1系统结构框图4.2数据库结构设计4.2.1数据库概念结构设计(ER图) 读者读者借阅阅图书ISBN书名版本号价格封面借阅期限借阅状态可借阅数出版社出版社ID出版社名属于属于作者姓名作者ID读者ID姓名学号性别院系图4-2图书管理系统全局E-R图4.2.2数据库逻辑结构设计E-R图向关系模型的转换:读者(读者ID,姓名,学号,性别,所在院系)此为读者实体对应的关系模式管理员(管理员ID,姓名,帐号,密码,注册时间)此为管理员实体对应的关系模式图书(ISBN,书名,出版社,价格,版本号,出版日期,图书图片,作者,库存量,借阅状态)此为图书实体对应的关系模式作者(作者ID,作者的姓,作者的名)此为作者实体对于的关系模式出版社(出版社ID,出版社名)此为出版社实体的关系模式借阅(图书ISBN,读者ID)此为联系“借阅”的关系模型归还(图书ISBN,读者ID)此为联系“归还”的关系模式borrowUserborrowUserborrowIDborrowNamestudyNumsexdepartmenttitleIsbnTitleEditionNumCopyrightpubliserIdImageFilepriceborrowTimeisBorrowborrowIDpublihserIdpubliserNamepublishersauthorIdfirstNamelastNameauthorsauthorIdisbnauthorIsbnbookUsersuserIdaccountpasswordnamecreateTime图4-2各实体间联系图数据模型的优化:1)确定数据依赖。2)对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。3)按照数据依赖的理论对关系模式进行逐一分析。4)按照要求分析阶段得到的处理要求,分析这样的应用环境这些模式是否合适。确定是否要对某些模式进行合并或分解。5)对关系模式进行必要的分解,提高数据操作的效率和存储空间的利用率。(水平分解,垂直分解)。4.2.3数据库表设计根据系统需求,可以进行具体的表的设计,表4-1是所有数据库表的汇总。表4-1数据库汇总表表名说明authors作者表,存放书籍的作者相关信息publishers出版社表,存放书籍的出版社相关信息title图书表,存放与书籍相关的所有信息authorISBN作者表和图书表的关联表borrowUser读者列表,存放读者借书的相关信息bookusers管理员表,存放管理员的相关信息数据库中的各个表的逻辑结构设计结果如下面的几个表格所示,每个表格表示数据库中的一个表。表4-2作者表(authors)字段名类型说明authorIDintPrimaryKeyfirstNamevarchar(20)姓lastNamevarchar(30)名表4-3出版社表(publishers)字段名类型说明publisherID int PrimaryKeypublisherNamevarchar(30)出版社名表4-4图书表(titles)字段名类型说明isbnvarchar(20)PrimaryKeytitlevarchar(100)图书名,非空editionNumberint版本号,非空publisherIDint外键,出版社ID,非空imageFilevarchar(20)文件图片路径pricefloat图书价格borrowTimeint借阅最大期限isBorrowint是否被借出borrowIDint外键,读者ID,非空表4-5图书作者关联表(authorISBN)字段名类型说明authorIDint外键,作者IDisbnvarchar(20)外键,图书ISBN表4-6读者表(borrowUser)字段名类型说明borrowIDintPrimaryKeyborrowNamevarchar(50)读者姓名,非空departmentvarchar(50)所在系sexvarchar(50)性别studyNumvarchar(20)学号,非空表4-7管理员表(bookusers)字段名类型说明userIdintPrimaryKeyaccoutvarchar(20)帐号,非空passwordvarchar(20)密码,非空namevarchar(20)用户名,非空createTimedatatime创建时间4.3系统各模块功能4.3.1系统管理员模块功能该模块主要包括对管理员进行注册,销户,修改账户信息等。管理员可以通过注册一个账号登录管理系统,之后对所注册用户进行统一管理,用户列表显示了所有注册用户的用户名,密码,帐号以及注册时间等操作,管理员可以对所有注册的帐号进行修改和移除。4.3.2读者模块功能该模块主要有对读者用户的注册,销户修改功能。读者列表主要显示读者的姓名,学号,性别,所在系,这里主要存放借书还书的对象。如果想要借书或还书,就必须先通过管理员登录进行注册,成为该系统的读者用户,进而才能对书籍进行借还。4.3.3图书借还模块功能该模块主要是对图书进行借还操作的一个管理模块,列表主要显示图书的isbn号,书名,借阅状态以及最大借阅期限等信息。对于书名加以不同的链接,由于图书和作者的关系是一对多,即一本图书只能借给一个人,一个人可以借多本不同的图书,所以根据每本书的借阅状态不同,链接对象也不一样,当此书已借出,点击进入的就是归还页面,归还对象即为借书的读者;若此书状态为未借出,则点击链接会进入到借书页面,借书对象是所有注册的读者用户。管理员可以选择某一位用户进行借出工作。4.3.4图书管理模块功能该模块主要是对图书进行统一的管理,功能包括对图书的入库,移出,修订,快速检索等,图书列表主要显示图书的isbn,书名,出版社,价格,版本号,出版年份。点击书名进入图书详细页面,能看到该图书的详细信息,除刚才所说信息外还有该书籍的作者以及图片,和正被借阅的读者用户名。同时在列表页面可根据图书的isbn和书名进行模糊查询,能更好的定位某本书或某些书。4.3.5出版社管理模块功能该模块主要是对图书的出版社做一统一管理,将其单独作为一模块的原因是因为,出版社数量较少,可以单独存放一数据库表,在添加或修改图书时可以将表中出版社进行遍历显示,若要添加图书的出版社在数据库表中没有,可以在该模块下添加相应的出版社,在进行遍历。该模块还包括删除修改出版社等功能。4.3.6作者管理模块功能该模块主要是对图书的作者进行统一管理,将其单独作为一个模块,可以在添加书籍的时候对作者的添加实现方便的管理,,对于新书的作者,可以在此模块中进行添加,类似的功能还有修改和删除作者。5系统实现5.1开发步骤1、静态页面制作(html代码,frame应用,css应用)2、利用JDBC,比较简单的实现数据库存取操作(二层结构)3、分析二层结构带来的问题,改进该结构,引入数据访问层。4、简单的数据访问层实现数据库存取操作5、简单的数据访问层带来的问题以及如何改进6、数据访问层设计:公共的数据库连接类DbConnection、数据访问对象DAO的基类BaseDAO7、(Log4j的配置与应用)。8、针对业务的数据访问对象开发,从AuthorDAO开始。9、作者管理的数据访问层开发完毕,开始实现前台JSP层的开发,主要是CRUD操作。10、CRUD开发涉及问题:表单提交GET/POST方式、网页传值、request中文编码、重定向等。11、增加简单的JS校验。12、ok!开始进入出版社模块的开发,和作者管理开发基本类似,开发速度明显加快。13、图书管理模块分析,业务层略微复杂。14、图书管理业务层开发、涉及事务操作、多表操作。15、图书管理JSP层开发,分析参数多的情况带来的问题,引入JavaBean来实现request参数的自动获取和设置。16、增加JS校验实现基本的数据验证。17、分页的两种策略介绍。编写通用的分页对象PageUtil,应用该对象在图书列表中实现内存中分页。18、继续实现作者、出版社的分页。19、为系统增加一张系统用户表,完成系统用户的CRUD。20、Session简要介绍,用户登录以及登录验证的开发。编写通用的登录验证,单独作为文件包含到需要验证才能访问的页面中。21、增强用户登录功能,利用Session,使得可以记住用户上次登录的帐号。22、开放管理员用户的注册修改功能,并且加上jquery验证23、进入读者管理模块开放,继续使用servlet容器管理读者的CURD24、系统退出功能增加。25、介绍Servlet中的过滤器,使用过滤器增强可维护性。改进代码,将request编码交由过滤器处理,将登录校验交由过滤器处理。(此系统的特殊性,无法使用过滤器改由另一种过滤方式)26、总结5.2详细功能与编码5.2.1管理员模块1.登录页面截图:图5-1登陆界面代码部分:通过网址的login.ii在web.xml文件中找到控制器ListUserServlet类,在获得切割后字符串login,找到下面处理代码,再调用DAO层login()方法进行处理,如果传入的帐号和密码能够获得一个用户,则让其登陆成功,并加载用户列表,若用户名密码不正确则提示错误信息。if(action.equals("/login")){ try{ Stringaccount=request.getParameter("userAccount"); Stringpassword=request.getParameter("password"); booleanflag=false; PrintWriterout=response.getWriter(); UserModeluser=dao.login(account.trim(),password.trim()); if(user!=null){ flag=true; session.setAttribute("userName",user.getUserName()); } out.print(flag); out.flush(); out.close(); }catch(Exceptione){ System.out.println("用户登录异常!"); e.printStackTrace(); thrownewServletException(); }数据层login()方法实现:传入两个字符串变量,在用sql语句查询数据库,返回用户对象。publicUserModellogin(finalStringaccount,finalStringpassword){ Stringsql=""; List<UserModel>list=null; sql="select*frombookuserswhereaccount=?andpassword=?"; list=super.querySql(sql,newIParamBingding(){ publicvoidbingParam(PreparedStatementstmt) throwsSQLException{ stmt.setString(1,account); stmt.setString(2,password); } },newUserRowMapper()); return(list.size()==0||list==null)?null:list.get(0); }2.列表显示页面截图:图5-2管理员列表显示模块代码部分: 控制器代码,页面通过请求list转到web.xml通过匹配找到servlet包下面的ListUserServlet类,然后通过字符串切割得到list字符串,根据list找到下面控制器代码,再调用数据层的queryAll部分查询数据库的所有管理员信息,并在列表上显示。 if(action.equals("/list")){ try{ List<UserModel>users=dao.queryAll(); request.setAttribute("users",users); //step2获得转发器 RequestDispatcherrd= request.getRequestDispatcher("userMain.jsp"); //step3转发 rd.forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); } queryAll()方法的实现(查询所有管理员用户的信息):publicList<UserModel>queryAll(){ Stringsql="select*frombookusers"; returnsuper.querySql(sql,newUserRowMapper()); } queryAll()调用querySql()方法进行sql查询语句操作 publicListquerySql(Stringsql,IRowMappermapper){ Connectionconn=null; PreparedStatementstmt=null; ResultSetrs=null; Listlist=newArrayList(); try{ conn=db.getConnection(); stmt=conn.prepareStatement(sql); logger.debug(sql); rs=stmt.executeQuery(); while(rs.next()){ Objectobj=mapper.mappingRow(rs); list.add(obj); } }catch(Exceptione){ logger.debug("执行sql语句异常"); e.printStackTrace(); }finally{ db.closeResultSet(rs); db.closeStatement(stmt); db.closeConnection(conn); } returnlist; }3.管理员注册截图:图5-3管理员注册模块代码部分:根据regist.ii找到此类的部分,在从页面获得文本框的内容,通过业务层方法save()将用户注册信息保存到数据库,并调用通用类的方法getAccount()给用户生成随机且不重复帐号,作为用户登录时的id。try{ StringuserName=request.getParameter("username"); System.out.println(userName); Stringpassword=request.getParameter("pwd"); UserModeluser=newUserModel(); user.setUserName(userName); user.setPassword(password); dao.save(user); //用session保存用户帐号 session.setAttribute("userName",userName); Stringacc=dao.getAccount(userName,password); session.setAttribute("account",acc); response.sendRedirect("bookusers/registOk.jsp"); }catch(Exceptione){ response.sendRedirect("bookusers/registFail.jsp"); }生成图片验证码的方法: Map<String,BufferedImage>map=ImageUtil.getImage(); Stringcode=map.keySet().iterator().next(); //将验证码暂时保存,用来与用户输入做比较 session.setAttribute("code",code); BufferedImageimage=map.get(code); response.setContentType("image/jepg"); OutputStreamops=response.getOutputStream();//对原始图片(image)按照指定的压缩算法(jpeg)进行压缩,然后再输出到ops javax.imageio.ImageIO.write(image,"jpeg",ops); ops.close();生成随机不重复账号:通过所在年份和0-9999之间的随机数之和产生4-7位不等的数据,作为唯一的id/***生成四到7位不等的随机数*@authorAdministrator**/publicclassAccountMaker{ staticRandomrandom=newRandom(); publicstaticStringgetAccount(){ List<Character>list=newArrayList<Character>(); Stringstr=getYear(); intnum=str.length(); intk=random.nextInt(num); System.out.println(k); for(inti=0;i<num;i++){ list.add(str.charAt(i)); } for(intj=0;j<k;j++){ Stringc=String.valueOf(random.nextInt(9)); list.add(k,c.charAt(0)); } StringBuffersb=newStringBuffer(); for(Characterc:list){ sb.append(c); } returnsb.toString(); } publicstaticStringgetYear(){ longnow=System.currentTimeMillis()/1000/3600/24/365+1970+random.nextInt(9999); returnString.valueOf(now); }}5.2.2读者管理模块1.读者列表截图:图5-4读者列表代码部分:此控制器为BorrowUserServlet,里面主要对读者的一些功能进行处理并转发页面。该控制器会响应用户在浏览器输入的后缀带.uu的请求,如“list.uu”。当web.xml接收到“list.uu”时会自动跳到该类中处理。该类分割字符串得到“list”,在跳到以下分支代码处理if(action.equals("/list")){ try{ List<BorrowUser>users=dao.findAll(); request.setAttribute("users",users); //step2获得转发器 RequestDispatcherrd=request .getRequestDispatcher("userMain.jsp"); //step3转发 rd.forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); } }该分支调用DAO层findAll()方法查询数据库,返回读者列表的list集合。以下是findAll()方法的实现:publicList<BorrowUser>findAll(){ Stringsql="select*fromborrowUser"; returnsuper.querySql(sql,newBorrowUserMapper()); }同样此处调用数据封装的querySql()方法,此处要对sql查询的结果集进行处理,故创建一个内部类BorrowUserMapper:classBorrowUserMapperimplementsIRowMapper{ publicObjectmappingRow(ResultSetrs)throwsSQLException{ BorrowUseruser=newBorrowUser(); user.setBorrowId(rs.getInt("borrowID")); user.setBorrowName(rs.getString("borrowName")); user.setStudyNum(rs.getString("studyNum")); user.setSex(rs.getString("sex")); user.setDepartMent(rs.getString("department")); returnuser; }2.添加读者:截图:图5-5添加读者代码部分:对于读者的数据库表进行分析得到,添加读者信息应该包括姓名,学号,性别,所在系等字段。在点击添加按钮时,用户会发送add.uu请求,web.xml会将请求转发到控制器。再根据分割得到字符串“add”,进入以下代码块:通过request获得页面参数,b并将其绑定到实体类BorrowUser的user实体中,再调用DAO层add方法,将数据插入数据库中try{ StringborrowName=newString(ParamUtil.getString(request.getParameter("borrowName")).getBytes("iso-8859-1"),"gbk"); StringstudyNum=newString(ParamUtil.getString(request.getParameter("studyNum")).getBytes("iso-8859-1"),"gbk"); Stringsex=newString(ParamUtil.getString(request.getParameter("sex")).getBytes("iso-8859-1"),"gbk"); Stringdepartment=newString(ParamUtil.getString(request.getParameter("department")).getBytes("iso-8859-1"),"gbk"); BorrowUseruser=newBorrowUser(); user.setBorrowName(borrowName); user.setStudyNum(studyNum); user.setSex(sex); user.setDepartMent(department); dao.add(user); response.sendRedirect("jump_do.jsp"); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); }DAO层add()方法的实现:publicvoidadd(finalBorrowUserbUser){ Stringsql="insertintoborrowUser(borrowName,studyNum,sex,department)values(?,?,?,?)"; super.updateSql(sql,newIParamBingding(){ publicvoidbingParam(PreparedStatementstmt)throwsSQLException{ stmt.setString(1,bUser.getBorrowName()); stmt.setString(2,bUser.getStudyNum()); stmt.setString(3,bUser.getSex()); stmt.setString(4,bUser.getDepartMent()); } }); }5.2.3图书借还管理模块1.借还列表截图:图5-6图书借还一览代码部分:此模块控制器类为BookBRServlet,用户进入借还图书的模块,会以“list.rr”的方式去发送请求,此时web.xml会将请求转到该控制器,经控制器处理会得到字符串“list”进而进入以下代码: Stringisbn=ParamUtil .getString(request.getParameter("qisbn")); StringbookName=ParamUtil.getString(request .getParameter("bookName")); StringqueryParam="&isbn="+isbn+"&bookName="+bookName; List<BookModel>books=dao.quickSearch(isbn,bookName); for(BookModelbook:books){ int[]countNum=dao.getCountAndNum(book.getTitle()); book.setBorrowNum(countNum[1]); book.setCount(countNum[0]); } request.setAttribute("books",books); request.setAttribute("queryParam",queryParam); //step2获得转发器 RequestDispatcherrd=request .getRequestDispatcher("bRMain.jsp"); //step3转发 rd.forward(request,response); 其中要将浏览器地址后附带的参数用queryParam进行绑定组合,以便后面的分页操作,其次调用了quickSearch()方法进行快速搜索,当方法参数的isbn和书名为空时为全部检索,不为空时为快速条件搜索。以下为quickSearch()方法体:publicList<BookModel>quickSearch(Stringisbn,Stringtitle)throwsSQLException{ Stringsql="selectt.*,publisherNamefromtitlestleftouterjoinpublisherspont.publisherID=p.publisherID"; sql+="whereisbnlike'%"+isbn+"%'andtitlelike'%"+title+"%'"; returnquerySql(sql,newTitleRowMapper()); }2.图书借阅截图:图5-7图书借阅代码部分:对于图书借还列表显示的图书状态分为两种,当数据库中图书的借阅状态字段为1时表明此书已借出,其显示背景成灰色,当点击书名链接时,会根据借阅状态自动判断进入归还图书的页面还是借阅图书的页面。当该图书已经借出,则进入归还页面,该页面显示该图书的借阅者、借阅期限、书名等详细信息 intflag=Integer.parseInt(request.getParameter("br")); Stringisbn=ParamUtil .getString(request.getParameter("qisbn")); intborrowNum=Integer.parseInt(request.getParameter("borrowNum")); intcount=Integer.parseInt(request.getParameter("count")); BookModelbook=newBookModel(); book=dao.findBookByIsbn(isbn); book.setBorrowNum(borrowNum); book.setCount(count);将图书绑定 request.setAttribute("book",book);如果图书借阅标志位为0说明,则转发到该图书的借阅页面,进行借阅操作: if(flag==0){ equest.getRequestDispatcher("bRDetails.jsp").forward( request,response); } 如果发生错误,则至错误页面else{ request.getRequestDispatcher("fail.jsp").forward(request,response); } 3.图书归还截图:图5-8图书归还代码部分:当点击背景条为灰色的书籍链接时,会进入归还页面,此时标志位为1:if(flag==1){ request.getRequestDispatcher("rBDetails.jsp").forward( request,response); }5.2.4图书管理模块1.图书列表显示截图:图5-9图书列表显示代码部分:图书管理模块的控制器在ListBookServlet类中,其分辨的后缀为“.xx”,当进入图书列表页面时,浏览器会发送“list.xx”的请求到web.xml,web.xml根据后缀找到该控制器,在将请求切割成“list”字符串,到下面代码块:try{ Stringisbn=ParamUtil.getString(request.getParameter("qisbn")); StringbookName=newString(ParamUtil.getString(request.getParameter("bookName")).getBytes("iso-8859-1"),"GBK"); StringqueryParam="&isbn="+isbn+"&bookName="+bookName; List<BookModel>books=dao.quickSearch(isbn,bookName); request.setAttribute("books",books); request.setAttribute("queryParam",queryParam); //step2获得转发器 RequestDispatcherrd= request.getRequestDispatcher("booksMain.jsp"); //step3转发 rd.forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); }在获得通过空的书名和isbn,去DAO层调用quickSearch()方法,查询所有书籍2.图书添加截图:图5-10图书添加代码部分:当点击图书添加按钮时,页面会重定向到addBook.jsp页面,如上图。在该页面将要添加图书的各项信息。其中作者添加要从数据库作者表中去选择。当添加的isbn号已存在数据库时,则无法添加。添加isbn时,点击检查sibn按钮,调用下面方法检查isbn是否重复:if(action.equals("/checkIsbn")){ try{ Stringisbn=ParamUtil.getString(request.getParameter("isbn")); booleanflag=dao.checkIsbn(isbn); PrintWriterout=response.getWriter(); out.print(flag); out.flush(); out.close(); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(); } }对于添加信息的合理性检查,代码如下(jquery代码):检查isbn合理性: $("#checkISBN").click(function(){ $("#checkImg").show(); varisbn=$("#isbn").val(); if(isbn==""){ alert("isb不能为空!"); $("#checkImg").fadeOut(1000); flag0=false; }else{实行ajax同步处理,并发送post请求,调用checkIsbn()方法: $.ajaxSetup({async:false}); $.post( "checkIsbn.xx", {"isbn":isbn}, function(data){ if(data=="true"){ alert("isbn名可用"); $("#checkImg").fadeOut(1000); flag0=true; }else{ alert("isbn已经存在"); $("#checkImg").fadeOut(1000); flag0=false; } }, "text" ); } }); $("#isbn").change(function(){ varisbnTxt=$(this).val(); if(isbnTxt==""){ $("#checkDetails").text("isbn不能为空").css("color","red"); flag1=false; }else{ $("#checkDetails").text(""); flag1=true; } });对书名的非空检查: $("#bookName").

温馨提示

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

评论

0/150

提交评论