图书管理系统java web.doc
xxxx学院Java Web开发技术课程设计成果报告图书管理系统设计与开发学生学号: xx 学生姓名: x x x 专业班级: 软件技术 学 院: 计算机学院 专业课程: 数据库系统原理与应用 指导教师: x x x 2016年 1月 8日课程设计指导教师评分表课程设计题目图书管理系统设计与开发成员姓名学号任务分工Xxxxx系统框架搭建、数据库设计、测试Xxxxx系统管理实现、留言模块设计Xxxxx首页功能模块、图书管理实现评分项目及分值要素成绩评定项 目最高分评 分 要 素成 绩1学习态度20上机出勤及端正的学习态度、认真刻苦程度,工作量饱满程度等2软件设计质量40采用的算法、设计方案,设计结果,界面友好等方面进行综合评定3答辩过程20能简明扼要地阐述设计的主要内容,能准确流利地回答各种问题4设计报告书写10内容按要求步骤书写,条理清晰,表述清楚、措词得当5实际动手能力10熟练使用开发工具,能够迅速准确的进行调试、纠错和运行;组长全面负责,承担复杂的模块设计分值就高总 成 绩等 级评语目录第一章 图书馆管理系统需求分析5第一节 图书馆管理系统应用需求5第二节 图书馆管理系统设计模式6第二章 图书馆管理系统总体设计9第一节 功能模块构成9第二节 系统流程图10第三节 数据库的设计11第三章 图书馆管理系统详细设计及处理技术13第一节 发布首页功能模块16第二节 留言板功能模块20代码部分21第三节 系统管理员的登录功能模块30代码部分32第四节 图书查询功能模块35代码部分37第四章 图书馆管理系统系统测试40测试:40第五章 总结41第一章 图书馆管理系统需求分析第一节 图书馆管理系统应用需求一个现代化的图书馆在正常运营中总是面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息,还书信息。面对图书馆数以万几计的图书,纷繁复杂的读者信息,频繁更替的借还书信息,传统的直接方法不但管理出现漏洞,造成损失。图书馆管理系统需要满足来自两方面的需求,分别是图书借阅者和图书馆工作人员。图书借阅者的需求是查询图书馆所存的各种图书信息;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书操作,有修改图书借阅者借书和还书记录的权限,实现对图书信息、借阅者信息、总体借阅情况信息的管理和统计、工作人员和管理人员信息查看及维护。图书馆管理员可以浏览、查询、添加、删除、修改、统计图书的基本信息;浏览、查询、统计、添加、删除和修改图书借阅者的基本信息,浏览、查询、统计图书馆的借阅信息,发布公告,回复留言,以下就是本系统实现的功能。1.设计不同用户的操作权限和登陆方法2.对所有用户开放的图书查询3.查询及统计各种信息4.维护图书信息5.维护工作人员和管理员信息6.维护借阅者信息7.处理信息的完整性第二节 图书馆管理系统设计模式设计模式是面向对象的程序设计人员用来解决编程问题的一种形式化表示。本系统开发采用目前一种目前广泛流行的软件设计模式MVC。MVC(Model-View - Controller)应用程序结构被用来分析分布式应用程序的特征。这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层,它们各自处理自己的任务。视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器(例如:servlet)本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。这种设计模式的好处是:低耦合性。视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。高重用性和可适用性。随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的仅令是改变视图层的实现方式,而控制层和模型层无需做任何改变。较低的生命周期成本。MVC使降低开发和维护用户接口的技术含量成为可能。快速的部署。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。可维护性。分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。图1 MVC模式开发环境及开发工具表1 开发环境种别软件版本OSWindowsXpDBSql sever2000WebServerJDK1.6.0.10Tomcat6.0浏览器Internet Explorer6.0及以上语言编辑MyEclipse6.0及以上环境配置说明JDK的配置:1.安装JDK1.5以上版本,并且复制安装路径。2右键我的电脑-属性-高级-环境变量-新建Administrator系统变量。变量值为安装路径建立3个值:JAVA_HOME=你的安装路径classpath=.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jarPATH=C:Program FilesJavajdk1.6.0_10bin也就是 路径bin3.测试下jdk的安装环境是否成功:开始-运行-cmd-弹出dos对话框,在光标处输入javac version,出现版本号则配置成功。Tomcat的配置:1。安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c:tomcat): CATALINA_HOME:c:tomcatCATALINA_BASE: c:tomcatTOMCAT_HOME: c:tomcat2然后修改环境变量中的classpath,把tomat安装目录下的commonlib下的servlet.jar追加到classpath中去,修改后的classpath如下: classpath= C:Program FilesJavajdk1.6.0_10 libdt.jar; C:Program FilesJavajdk1.6.0_10 libtools.jar; c:tomcat commonlibservlet-api.jar; 6可能最新版本的Tomcat中没有common这个文件夹了。所以servlet-api.jar应该的路径为c:tomcat libservlet-api.jar;根据情况修改!7验证,启动tomcat,在IE中访问http:/localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。第二章 图书馆管理系统总体设计第一节 功能模块构成根据本管理系统的要求我们在功能上将这个图书馆管理系统划分成了7个功能模块:发布首页功能模块,留言板功能模块,系统管理员登陆功能模块,图书查询功能模块,借还手续功能模块,管理库中图书信息的功能模块,最后是用户信息管理功能模块。如下图所示。图2 功能结构图有了这7个功能模块,就可以构建一个完整的图书馆管理系统了。前台实现的是:图书信息查询,以及留言建议。后台实现的是:以管理员身份进入后台后可以进行的权限操作有,用户信息的录入,图书信息的管理及录入,首页新建的发布,借还手续的操作等等。第二节 系统流程图下图是分别从web和wap模式的查询流程图,请求以这种方式进行发送和响应。查询功能流程图WEB页面前台查询界面接收查询条件,从数据库查询匹配信息返回结果,在WEB页面显示提交查询条件图3 基于WEB的查询流程图借还图书功能流程图下图是借还书发送请求和响应请求的流程图图4 借还书流程图第三节 数据库的设计数据库逻辑设计:表2所示为管理员表(admin),记录了系统用户的角色和密码,判断是否允许其登录后台管理员的界面。表2 admin数据库列名数据类型长度id(PK)Int11UsernameVarchar20PasswordVarchar20表3所示为留言信息表(guestbook),记录了游客用户姓名,发表的留言信息,发表时间和管理员回复信息,其具体作用就是实现留言板的功能。表3 guest数据库列名数据类型长度id(PK)Int11NicknameVarchar50ContentMediumtextNOYourtimeDatatimeNOReplyVarchar50表4所示为首页公告表(notice),记录了发布信息和发布时间,其作用就是支持公告栏的功能实现。表4 notice数据库列名数据类型长度id(PK)Int11ContentMediumtextNOCreatetimeDatatimeNO表5所示为图书信息表(book),记录了图书书名,书号,图书类型,总量。其作用就是保存录入到库的图书资料,以便借阅和查询。表5 book数据库列名数据类型长度IdInt11TitleVarchar100bookID(PK)Varchar40TypeVarchar40QuantityInt11表6所示为用户借阅图书信息表(borrowbook),记录了借阅证号,借书开始日期,结束日期,书号。实现本系统核心功能-借书,还书的数据库应用。表6 borrowbook数据库列名数据类型长度Id(PK)Int11BorrowIDVarchar20BeginTimeDatetimeNOEndTimeDatetimeNOBookIDInt40表7所示为借书证用户信息表(user),记录了借书人姓名,性别,年龄,所在院系和所借书的书号。实现其程序主体的数据库调用。表7 uesr数据库列名数据类型长度Id(PK)Int11NameVarchar20SexChar2AgeInt11DepartmentVarchar20BorrowIDVarchar20数据库之间的关联设计:这个图书管理系统是基于SQL SEVER设计的,然后通过在JSP中向数据库发送相应的SQL指令,从而实现对图书的全面管理.对于数据库设计这一流程中,最重要的一步是对user表、book表、borrowBook表三张表的设计以及它们之间的关系这是这个图书管理系统中的一个关键技术,以下就是数据库关联图图5数据库关系第三章 图书馆管理系统详细设计及处理技术JavaBean技术是一种基于Java的组件技术,JavaBean组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据的提取等,是解决代码重用问题的一种策略。JavaBean的实质就是一个.class文件,也可以成为类文件。JavaBean以binary格式保存,可以保护Java源代码不容易被他人抄袭。下面是本系统中主要的JavaBean。select函数功能:查询数据public int select(String sql) int k=-10;this.init(this.getConn();tryk=0;rs=stmt.executeQuery(sql);if (rs.next()k=k+1;catch (Exception e)k=-1;System.out.println("select():"+e.getMessage();this.close();this.close();return k;update函数功能:更新删除插入 数据 public int update(String sql)int k=-10;this.init(this.getConn();tryk=0;k=stmt.executeUpdate(sql);catch (Exception e)K=-1;System.out.println("update():"+e.getMessage();this.close();return k;chStr函数功能:解决乱码Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java文件本身编译时产生的乱码问题和Java程序与其他媒介交互产生的乱码问题。JSP以Java为基础,自然也继承了Java所遇到的中文乱码问题。但在使用数据库时,有些Driver会将从数据库中读出的中文自动的转换成Unicode,而有些不会,如果Driver做过转换而系统又再做一次,就会出现问题,从数据库中读出的中文字符不会正确显示,而是出现“?”。 而且,在表单提交或是URL传参数值时依然是按照Web容器在内部默认的字符编码格式ISO 8859-1来进行处理的。同时,几乎所有的浏览器在传递参数时都是默认以UTF-8的方式来传递参数的。所以,虽然在java源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行是还是以ISO 8859-1来处理的,这样导致在提交的表单中若有中文字符,在存入数据库时使用的是ISO 8859-1,而本系统使用的SQL SEVER数据库默认使用的是GBK编码,这样导致的结果就是存到数据库的数据因编码不同而出现乱码现象 。调用字符编码转换Bean中的方法,对字符编码进行强制转换,使存放到数据库的数据编码格式与数据库的内部编码格式统一,解决了向数据库中插入中文字符、将从数据库中读取的数据正确的显示的问题,所以做了一个方法放在bean里面,代码如下public String chStr(String str)trybyte temp=str.getBytes("ISO8859-1");String temp2=new String(temp);return temp2; catch(Exception e)System.out.println("chStr():"+e.getMessage();return "null"第一节 发布首页功能模块图6首页发布功能界面在后台管理中能自由发布首页公告信息,来通知各种事情,其条目以滚动的形式来表现。该功能的实现由admin_addnotice.jsp和admin_addnotice_post.jsp文件实现。在admin_addnotice.jsp中主要是发布界面的编写和传输notice内容,本功能的核心程序放在admin_addnotice_post.jsp中,负责存储内容到数据库和错误提示。在admin_addnotice_post.jsp中关键代码如下:/从request获取名为"content"的参数值String content=request.getParameter("content");/解决中文乱码问题String tcontent=addbook.chStr(content); /合成SQL语句,将content的值传入,作用为更新公告表String sql="update notice set content='"+content+"',createtime=DEFAULT where id=1"/申明一个int的变量tempint temp=-2;/如SQL执行成功,temp>0,否则执行失败temp=notice.update(sql);代码部分: admin_addnotice.jsp<% page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><% include file="./ch.jsp" %><% include file="checkadmin.jsp"%><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "http:/www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>发布首页公告</title><style type="text/css"><!-body,td,th font-size: 13px;-></style><script language="JavaScript" type="text/JavaScript"><!-function MM_findObj(n, d) /v4.01 var p,i,x; if(!d) d=document; if(p=n.indexOf("?")>0&&parent.frames.length) d=parent.framesn.substring(p+1).document; n=n.substring(0,p); if(!(x=dn)&&d.all) x=d.alln; for (i=0;!x&&i<d.forms.length;i+) x=d.formsin; for(i=0;!x&&d.layers&&i<d.layers.length;i+) x=MM_findObj(n,d.layersi.document); if(!x && d.getElementById) x=d.getElementById(n); return x;function MM_validateForm() /v4.0 var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments; for (i=0; i<(args.length-2); i+=3) test=argsi+2; val=MM_findObj(argsi); if (val) nm=val.name; if (val=val.value)!="") if (test.indexOf('isEmail')!=-1) p=val.indexOf(''); if (p<1 | p=(val.length-1) errors+='- '+nm+' must contain an e-mail address.n' else if (test!='R') num = parseFloat(val); if (isNaN(val) errors+='- '+nm+' must contain a number.n' if (test.indexOf('inRange') != -1) p=test.indexOf(':'); min=test.substring(8,p); max=test.substring(p+1); if (num<min | max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.n' else if (test.charAt(0) = 'R') errors += '- '+nm+' is required.n' if (errors) alert('The following error(s) occurred:n'+errors); document.MM_returnValue = (errors = '');/-></script></head><body><p><strong>发布公告(首页只会滚动显示最新发布的一条公告)</strong></p><p>公告内容:</p><form name="form1" method="post" action="admin_addnotice_post.jsp"> <p> <textarea name="content" cols="40" rows="10" id="content"></textarea> </p> <p> <input name="Submit" type="submit" onClick="MM_validateForm('content','','R');return document.MM_returnValue" value="发布首页公告"> <input type="reset" name="Submit2" value="清除"></p></form><p> </p></body></html>admin_addnotice_post.jsp<% page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><% include file="./ch.jsp" %><% include file="checkadmin.jsp"%><jsp:useBean id="notice" class="conndb.DbConnBean" scope="request" /><%String content=request.getParameter("content");/String tcontent=addbook.chStr(content);/解决中文乱码问题String sql="update notice set content='"+content+"',createtime=DEFAULT where id=1"int temp=-2;temp=notice.update(sql);%><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "http:/www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>发布首页公告</title></head><body><% if(temp>0)%><script language="javascript">alert("已经成功发布了新的首页公告!");</script><a href="admin_main.jsp">返回管理首页</a><%elsesession.setAttribute("error","请检查你的输入.请确保你输入的信息的正确性!");response.sendRedirect("./errorpage.jsp"); %></body></html>第二节 留言板功能模块 留言板功能模块分为发布模块和回复模块。发布模块在前台完成,可以让任何人留言,而回复模块在后台使用只允许管理员查看回复。图7 发布留言界面本功能所有文件放在guest目录下面,包含了guestbook_index.jsp,guestbook_postmessage.jsp,guestbook_save.jsp,guestbook_show.jsp,guestbook_viewmessage.jsp这5个文件,分别实现了留言板各个功能。其主要代码在guestbook_postmessage.jsp中./从request获取名为"username"的参数值String username=request.getParameter("username");/从request获取名为"content"的参数值String content=request.getParameter("content");/合成SQL语句,将username,content的值传入nickname,content表中,作用为将留言板内容放入数据库中String.sql="insert into guestbook (nickname,content) values('"+username+"','"+content+"')"/判断语句,如果username为空或者错误,content为空或者错误的时候。if(username=null|username.equals("")|content=null|content.equals("")elseint temp=-2;/如SQL执行成功,temp>0,否则执行失败temp=guestbook.update(sql);%>/返回错误信息errorpage.jsp,显示“请检查你的输入.请确保你输入的信息的正确性!”错误信息文字以提示。elsesession.setAttribute("error","请检查你的输入.请确保你输入的信息的正确性!");response.sendRedirect("./errorpage.jsp"); %>回复留言功能模块主要是用于回复留言,由admin_guestbook_reply.jsp实现.其实现方法与前面类似,不在累述。代码部分:guestbook_index.jsp<% page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><% include file="./ch.jsp" %><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "http:/www.w3.org/TR/html4/loose.dtd"><html><head><script language=javascript><!-function SetFocus()if (document.message.username.value="")document.message.username.focus();elsedocument.message.username.select();function CheckForm()if(document.message.username.value="")alert("请输入你的大名!");document.message.username.focus();return false;if(document.message.content.value = "")alert("请输入你想说的话!");document.message.content.focus();return false;-></script><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>请你给学校图书馆提建议</title><style type="text/css"><!-body,td,th font-size: 13px;body background-color: #99CCCC;margin-left: 0px;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;.style3 font-size: 18px;color: #FF0000;font-weight: bold;.style5 font-size: 30px; color: #FF3300; font-weight: bold; -></style></head><body><form name="message" method="post" action="guestbook_postmessage.jsp"> <table width="98%" border="1" cellpadding="2" cellspacing="5" bordercolor="#99CCCC"> <tr> <td colspan="3"><table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="26%"><img src="./images/top.gif" width="245" height="88"></td> <td width="73%" valign="bottom" background="./images/b3.gif" bgcolor="#"> </td> <td width="1%"> </td> </tr> <tr> <td> </td> <td><div align="left"><span class="style5"> 留言簿</span></div></td> <td> </td> </tr> <tr> <td> </td> <td><span class="style3">欢迎同学们给学校图书馆提出宝贵的建议.</span></td> <td> </td> </tr> </table> </td> </tr> <tr align="center"> <td width="24%" align="right">姓 名:</td> <td colspan="2" align="left"><input name="username" type="text" id="username" size="30" maxlength="50"></td> </tr> <tr> <td rowspan="2" align="r