图书管理系统.docx

上传人:b****0 文档编号:12850237 上传时间:2023-04-22 格式:DOCX 页数:29 大小:175.20KB
下载 相关 举报
图书管理系统.docx_第1页
第1页 / 共29页
图书管理系统.docx_第2页
第2页 / 共29页
图书管理系统.docx_第3页
第3页 / 共29页
图书管理系统.docx_第4页
第4页 / 共29页
图书管理系统.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

图书管理系统.docx

《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(29页珍藏版)》请在冰豆网上搜索。

图书管理系统.docx

图书管理系统

/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。

这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。

客户机上只要安装一个浏览器(Browser英['braʊzə]美['braʊzɚ]),如NetscapeNavigator或InternetExplorer,服务器安装SQLServer、Oracle、MYSQL等数据库。

浏览器通过WebServer同数据库进行数据交互。

B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网的电脑就能使用,客户端零安装、零维护。

系统的扩展非常容易。

B/S结构的使用越来越多,特别是由需求推动了AJAX技术的发展,它的程序也能在客户端电脑上进行部分处理,从而大大的减轻了服务器的负担;并增加了交互性,能进行局部实时刷新。

超文本传送协议(HTTP-Hypertexttransferprotocol)定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。

从层次的角度看,HTTP是面向(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

1、支持客户/服务器模式。

支持基本认证[12] 和安全认证(见后文《安全协议》)。

http协议简介

2、简单快速:

客户向服务器请求服务时,只需传送请求方法和路径。

请求方法常用的有GET、HEAD、POST。

每种方法规定了客户与服务器联系的类型不同。

由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3、灵活:

HTTP允许传输任意类型的数据对象。

正在传输的类型由Content-Type加以标记。

4、HTTP0.9和1.0使用非持续连接:

限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。

采用这种方式可以节省传输时间。

HTTP1.1使用持续连接:

不必为每个web对象创建一个新的连接,一个连接可以传送多个对象。

5、无状态:

HTTP协议是无状态协议。

无状态是指协议对于事务处理没有记忆能力。

缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大[13] 。

另一方面,在服务器不需要先前信息时它的应答就较快。

JSP标签库,也称自定义标签库,可看成是一种通过JavaBean生成基于XML的脚本的方法。

从概念上讲,标签就是很简单而且可重用的代码结构。

比方说,在最新发布的JSPKit(在JSPInsider内)中,使用XML标签实现了对XML文档的轻松访问。

易于安装在多个项目上

标签很容易从一个JSP项目迁移到其他项目。

一旦建立了一个标签库,则只需要将所有的东西打包为一个JAR文件,你就可以在任何的JSP项目中重新使用。

因为标签可以重新使用,标签库可以轻松地用于你自己的项目,所以标签库越来越通行。

目前,最好的标签资源可以在JSPT这个站点找到。

可以无限制地扩展和增加JSP的功能

扩展JSP标签库可以具备JSP规范(JSP1.2)中的任何特性和功能,你可以无限制地扩展和增加JSP的功能,而无需要等待下一版本JSP的出现。

例如,你对JSP的include调用不太满意。

你可以建立自己的include标签,该标签执行的是你自己的规范。

容易维护

标签库使得JSP的web应用程序非常易于维护,原因有:

(1)标签应用简单,对任何人而言都很容易使用、易于理解。

(2)所有的程序逻辑代码都集中放在的标签处理器和JavaBeans中。

这意味着你在升级代码时,无需要对每个使用该代码的页面进行修改,你只需要修改集中的代码文件便可。

(3)如果需要加入新的功能,你也无需修改任何已经存在的页面,可以在标签中加入额外的属性,从而引进新的行为,而其它旧的属性不变,这样所有旧的页面还可以正常工作。

例如你有一个让所有文本变蓝的标签:

MyText

但在后来项目中,你又想让蓝色变暗。

你可以保留原有的标签,只要为其增加一个新的属性:

shade,如下所示:

MyText

所有旧的标签仍然可以产生蓝色的文本,但现在你可以使用同一标签来产生变暗的蓝色文本了。

(4)标签提升了代码的重用性。

那些经过多次测试和使用的代码肯定具有更少的bug。

所以,使用定制标签的JSP页面也同样具有更少的缺陷,维护起来自然方便多了。

快速的开发时间

标签库提供一个简单的方式来重用代码。

在服务器端的语言中,其中一个标准的重用代码方式是使用模板。

相对于使用模板库,标签库是一个更好的解决办法。

使用模板库,你必须为每个项目修改模板或者且建立严格的界面,而标签库则没有这些限制,并且拥有所有面向对象的好处,可以做到灵活和更有扩展性,而且,通过重用代码,你可以花费更少的时间来做开发,更多的时间可以用在设计你的web应用上。

标签库的接口也很简单,非常容易做插入、使用和调试。

标签的组成结构

虽然标签库非常易于使用,不过要建立一个标签库的内部实现机制还是颇复杂的,起码要比建立一个简单的JavaBean复杂。

这个复杂是来自于标签库是由几部分构成的。

不过,你只需要掌握了Java和JSP的知识就够了。

一个简单的标签由下面的元素构成:

1.JavaBean:

为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中,也就是JavaBean。

这些JavaBeans并不是标签库必不可少的一部分,但它们是标签库用来执行所分配任务的基础代码模块。

2.标签处理器:

标签处理器是标签库的真正核心。

一个标签处理器(taghandler)引用它所需要的任何外部资源(JavaBean)并且负责访问JSP页面的信息(PageContext对象)。

而JSP页面则把页面上设置的标签属性和标签体中的内容都传递给标签处理器,当标签处理器完成其处理过程后,它就会把处理后的输出结果回送给JSP页面做进一步处理。

3.标签库描述符(TLD文件):

这是一个简单的XML文件,它记录着标签处理器的属性、信息和位置等信息。

JSP容器通过这个文件来得知从哪里及如何调用一个标签库。

4.Web站点的web.xml文件:

这是Web站点的初始化文件,在这个文件中,需要定义了Web站点中用到的自定义标签,以及用来描述每个自定义标签的tld文件。

5.发布文件(WAR或JAR文件):

如果你想重用自定义标签的话,你需要一个方法来将它由一个项目迁移到其他项目中去。

将标签库打包为一个JAR文件是一个简单而且有效的方式。

6.JSP页面上的标签库声明:

要在JSP页面中的使用某个自定义标签的话,需要使用标签库标示符在页面上进行声明。

看来要做的工作很多,刚开始用的时候当然会有点棘手,不过其实并不是很难。

它的要点并不在于编码,而是在于如何将各部分正确地组织起来。

这种层次性的结构是很重要的,它令标签的使用灵活和更容易转移。

更重要的事,这些层次可以让整个建立标签库的过程都能通过JSPIDE(JSP的集成开发环境)自动完成。

JSPIDE更可以自动完成创建定制标签的大部分工作,而你自己则只需要负责建立代码和标签处理器。

(注意:

一个标签处理器仅定义一个自定义标签;一个标签库是几个处理相同任务的标签处理器的集合)

3如何建立编辑

以下将一步一步地教你如何建立自定义的标签,具体的例子是扩展JSP,令它拥有自己的HTML编码功能。

这个功能将所有的<和>字符用HTML代码来代替。

它可以很容易地扩展为做其它的编码处理。

为了简化,这个例子只解释了建立自定义标签的基本要素。

创建JavaBean

代码中的任何可重用部分都应该放到一个JavaBean中。

这一点是很重要的。

这样你就可以在其他项目中重用这些代码了。

由于任何放置在标签处理器内的代码在标签外都是不可以重用的,因此将可重用的代码部分独立开来是很重要的。

在这个例子中,为HTML编码的逻辑是常用的,因此放到JavaBean中,请参看清单B

清单B:

HTML编码JavaBean

/*HTML_Format.java*/

publicclassHTML_FormatextendsObjectimplementsjava.io.Serializable{

/**创建新的HTML_Format*/

publicHTML_Format(){}

/**将一个字符串中所有的<和>字符用相应的HTML编码代替*/

publicStringHTML_Encode(Stringas_data)

{

intli_len=as_data.length();

/*stringbuffer的长度要比原来的字符串长*/

StringBufferlsb_encode=newStringBuffer(li_len+(li_len/10));

/*循环替换全部的<和>字符*/

for(intli_count=0;li_count

{Stringls_next=String.valueOf(as_data.charAt(li_count));

if(ls_next.equals("<"))ls_next="<";

if(ls_next.equals(">"))ls_next=">";

lsb_encode.append(ls_next);

}

return(lsb_encode.toString());

}

}

创建标签处理器

标签处理器的代码请参看清单C:

清单C:

HTML编码标签处理器

importjava.io.IOException;

importjavax.servlet.jsp.*;

importjavax.servlet.jsp.tagext.*;

publicclassHTML_FormatTagextendsBodyTagSupport

{

/*1)在标签末将会调用这个函数*/

publicintdoEndTag()throwsJspTagException

{

try

{

/*2)得到标签中的文本*/

BodyContentl_tagbody=getBodyContent();

Stringls_output="";

/*3)如果标签体有文本,就处理它*/

if(l_tagbody!

=null)

{

HTML_Formatl_format=newHTML_Format();

/*3a)将标签体的内容转换为一个字符串*/

Stringls_html_text=l_tagbody.getString();

ls_output=l_format.HTML_Encode(ls_html_text);

}

/*4)将结果写回到数据流中*/

pageContext.getOut().write(ls_output.trim());

}

catch(IOExceptione)

{thrownewJspTagException("TagError:

"+e.toString());

}

/*让JSP继续处理以下页面的内容*/

returnEVAL_PAGE;

}

}

这个处理很简单,它包括有:

1.读入位于开始和结束标签间的文本

2.调用html编码函数

3.将结果返回到JSP页面。

创建标签描述符

我们需要描述自定义标签以让系统知道如何处理。

该描述文件的后缀为.tld,TLD文件通常就以标签处理器命名,并存放在“/WEB-INF/”目录之下。

请参看清单D。

清单D:

HTML编码标签描述器

DOCTYPEtaglib

PUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.1//EN"

"

1.0

1.1

HTML_FormatTag

HTMLEncodingTag

HTMLEncode

HTML_FormatTag

EncodeHTML

更新WebXML文件

现在可以告诉JSP容器如何使用标签库了。

为此要修改web.xml文件,具体说来是要在其中加入一个taglib的项目来注册该标签库,并为标签分配一个URI。

URI是Web站点上唯一应用于这一特定标签的索引。

由于标签今后还可能用在不同的Web站点上,所以你最好采用完整的URL和/或者包名字(packagename)来保证这一唯一性。

这个例子是简化了,示例代码请参看清单E。

清单E:

修改web.xml文件

DOCTYPEweb-app

PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.2//EN"

"

HTMLEncode

/WEB-INF/HTML_FormatTag.tld

使用新的标签

自定义的标签设置好后,就可以用在你的JSP页面上了。

要做到这一点,只需要在页面上使用taglib指示命令声明所要采用的标签即可。

标签通过其唯一的URI被索引,然后被分配给一个名字空间前缀(prefix)。

这一前缀并没有什么特别的意义,只要它不与其它的名字空间冲突便可,可以任意。

请参看以下的清单F和G。

清单F:

在一个JSP页面上使用HTML编码标签

清单G:

范例代码的输出

whichdisplaysas:

通过这个标签,我就将该页面的所有代码编码了。

所有的自定义标签都是在服务器上处理的。

这意味着你将不会在输出的页面上看到自定义的标签。

 

1.系统分析

1.1.题目问题定义

本图书借阅管理系统主要面向图书馆借阅者和图书馆管理人员,借阅者可以登录本系统管理自己的个人信息,查询并借阅图书馆里已有的图书,图书馆管理人员可以登录本系统对借阅和借阅者进行操作。

1.2.可行性分析

本图书借阅管理系统使用MVC设计模型,model为javabean,view为jsp+html,controller为servlet。

这些模块都是J2EE非常成熟的技术,完全具有功能上的可行性。

由于本系统仅用于学习使用,功能简单,无需考虑市场上的可行性。

2.概要设计

2.1.用例图

2.2.整体架构

2.3.模块功能

在对用户的需求进行分析以后,规定了以下模块来适应用户

功能描述

模块

使用者

备注

1.根据条件查询图书信息

2.根据条件查询借阅者信息

3.根据借阅者查询借阅信息

查询管理模块

图书馆管理员

借阅者

1.借阅指定存在图书

2.归还已借阅图书

图书借阅模块

借阅者

1.借阅者管理

2.图书删除

3.图书录入

4.图书修改

5.数据备份

6.数据恢复

设置管理模块

图书馆管理员

借阅者管理包括用户注销和用户修改

1.用户注册

2.用户登录

3.用户修改

登录注册模块

借阅者

图书馆管理员

管理员没有注册功能

2.4.系统功能

能对图书信息进行增删改查

能把未借阅图书的状态改为已借阅,反之亦然

能对借阅者信息进行增删改查

能对借阅信息进行增加、查询功能

3.逻辑设计

3.1.类图

3.2.序列图(顺序图)

用户登录、借书序列图

用户注册序列图

 

管理员登录、添加图书序列图

4.实现

4.1.流程图

流程图主要包括用户流程和管理员流程

4.2.关键代码

图书查询页面list.jsp

<%@pagelanguage="java"contentType="text/html;charset=utf-8"

pageEncoding="utf-8"import="object.*,java.util.*"%>

<%@includefile="top.jsp"%>

<%@includefile="check.jsp"%>

查看图书

<%!

StringsearchType="";

StringsearchKey="";

StringbookType="所有书籍";

Stringrank="";

inttotalPage=1;

intpageNum=1;

intonePageLine=2;

%>

<%

if(request.getAttribute("searchType")!

=null)

searchType=request.getAttribute("searchType").toString();

if(request.getAttribute("searchKey")!

=null)

searchKey=request.getAttribute("searchKey").toString();

if(request.getAttribute("totalPage")!

=null)

totalPage=(Integer)request.getAttribute("totalPage");

if(request.getAttribute("pageNum")!

=null)

pageNum=(Integer)request.getAttribute("pageNum");

rank=session.getAttribute("rank").toString();

%>

请选择查询类别:

<%

if(searchType!

=null)

if(searchType.equals("name"))

out.print("selected='selected'");%>>书名

<%if(searchType!

=null)

if(searchType.equals("author"))

out.print("selected='selected'");%>>作者

<%if(searchType!

=null)

if(searchType.equals("publish"))

out.print("selected='selected'");%>>出版社

<%if(searchType!

=null)

if(searchType.equals("isbn"))

out.print("selected='selected'");%>>ISBN

请输入查询关键字:

value="<%if(searchKey!

=null)

out.print(searchKey);%>">

type="submit"value="确定">

   <%=bookType%>

cellpadding="0"cellspacing="0"bordercolorlight="#FFFFFF">

书名

作者

出版社

ISBN

出版日期

数量

已借出

<%

if(rank.equals("admin")){

%>

修改

删除

<%

}else{

%>

租借

<%

}

//得到查询到的图书列表

if(request.getAttribute("bookList")!

=null){

ArrayListbookList=(ArrayList)request.getAttribute("bookList");

for(inti=(pageNum-1)*onePageLine;i

BookObjectbook=bookList.get(i);

intid=book.id;

out.println("");

out.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1