图书管理系统设计与实现

目   录

1  引言

1.1  图书管理的现状

1.2  现有图书管理系统的概述

1.3  选题的目的、意义

1.4  图书管理系统的可行性分析

1.5  系统开发运行环境

第二章  本系统开发相关技术介绍

2.1  java

2.2 MySql

2.3 Struts2

2.4 Hibernate

2.5 C/S结构

2.6  Web服务器

第三章  系统总体设计分析

3.1 系统需求分析

3.2  系统实现的目标

3.3  系统功能模块设计

3.4  系统功能结构图

3.5  系统流程图

第四章 数据总体结构设计

4.1  数据库概念结构设计

4.2  数据库逻辑结构设计

4.3  图书管理系统的系统E-R

4.4  数据表设计

第五章  图书管理系统详细设计

5.1  系统流程分析

5.2  主要模块的运行

5.2.1  登陆界面

5.2.2  图书信息管理模块

5.2.3  图书借还信息模块

5.3  系统开发的遇到的相关问题及解决

5.3.1  图书管理系统索引

5.3.2  如何验证输入的字符串

5.3.3  自动计算图书归还日期

5.3.4  系统登陆验证码的实现

第六章  结论

6.1  主要研究内容及成果

6.2  今后进一步研究方向

参考文献

学校图书管理系统的开发

 

当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。由于信息技术的发展,许多行业在经营管理过程中对计算机技术的依赖程度也不断增强。

在对JSP语言,SQL  Server2005数据库技术以及当今社会的出租车行业的需求进行了较深入的学习和调查的基础上,设计出了该出租车管理系统,该系统主要实现了图书管理,用户信息及管理信息的管理同时在书籍信息管理中还包括车辆的更新,书籍的过户和监督卡管理等功能。

本论文主要阐述了书籍管理系统的需求分析,功能模块划分,数据库模式分析,并具此设计了基于c/S模式的数据库结构和JSP程序.

关键词:JSP, SQL Server2000, ODBC, JavaBean

1  引言

随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息系统的作用也越来越大。图书馆在正常运营中总是面对大量的读者信息,书籍信息以及由两者相互作用产生的借书信息,还书信息。因此图书管理信息化是发展的必然趋势。用结构化系统分析与设计的方法,建立一套有效的图书信息管理系统,可以减轻工作,将工作科学化、规范化,提高了图书馆信息管理的工作质量因此根据图书馆目前实际的管理情况开发一套图书管理系统是十分必要的。

1.1  图书管理的现状

一直以来人们使用传统的人工方式管理图书馆的日常工作,对于图书馆的借书和还书过程,想必大家都已很熟悉。在计算机尚未在图书管理系统广泛使用之前,借书和还书过程主要依靠手工。一个最典型的手工处理还书过程就是:读者将要借的书和借阅证交给工作人员,工作人员将每本书上附带的描述书的信息的卡片和读者的借阅证放在一个小格栏里,并在借阅证和每本书贴的借阅条上填写借阅信息。这样借书过程就完成了。还书时,读者将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息,这样还书过程就完成了。

随着近年来信息技术及计算机网络技术的不断发展, 图书馆也先从传统的图

书馆发展到自动化图书馆,再发展到今天的数字图书馆,这些变化使得图书馆的形象越来越现代化,人们查找资料也更加方便。对于一些小图书馆和一些图书室来说,由于工作人员比较少,长期以来,作为图书馆的主要工作—图书借阅一直未能很好地开展。在平常的图书借阅工作中, 由于大部分读者不熟悉图书馆藏书,且对图书排架分类的不了解,往往花费很长时间才能找到其所需的书。为提高管理效率,更好地为读者服务,利用已有的办公局域网络条件,将馆藏书籍做成基于WEB的查询系统,实现图书在一个单位的网络内甚至Internet上查询,可使图书查询和借阅变得更加方便快捷,从而使图书室的工作效率得到明显提高。

传统的图书管理模式其最大的特点是手工;首先要把买来的图书资料登记到资料本上,再给每本书分类贴上标签及制作和标签相对应的图书分类卡片,最后把图书分类卡片按类别分别放置在文件柜里。对于有学生(教师)证的学生(教师)来说还要对他们资料作一定的记录。并且在人们来借书的时候,首先持证件者要去存放图书分类卡片的文件柜里查找想借的书是否在架,如果卡片存在,再按照图书分类卡片在相应的书架上找到需要的图书,然后登记持证件者的借还书时间和在书签条上写下借还书记录,之后把借书证留在那里;还书的时候,相对应的消去出借记录;这样做起来比较麻烦,比较费时间。传统图书管理的特点是一直以来,中小型书店、中小学的小型图书馆及各高校图书馆和资料室使用传统的人工方式管理图书档案、会员档案。这种管理方式存在着诸多缺点,如:手续繁琐、工作量大、效率低下、出错率高等,同时给对大量资料的查询、更新及维护都带来不少困难。

1.2  现有图书管理系统的概述

在试用了一些个图书管理系统和查阅了大量相关资料文献的基础上,发现那些系统在几个方面已经不符合时代的要求,由于设计人员及其所用的工具的不同,有Visual Basic6.0、Visual ForPro6.0、Power Builder等,再加上这些图书管理系统设计的时间也不一样,所用具体场合也有区别,因此在功能上除了图书资料管理所需的基本功能之外也有所不同。经过比较总结他们都实现了以下图书管理的基本功能:1、图书检索模块:是图书管理系统的重要模块之一,是读者快速查询图书的途径。2、图书管理模块:是图书管理员操作模块,读者是无权进入的。本模块由借出图书登记、归还图书登记和续借图书登记子模块构成。3、数据维护模块:是由图书管理员控制的模块,它由增加、修改和删除读者,增加、修改删除图书,浏览修改读者、浏览修改图书等程序组成。 4、数据统计模块:由读者统计、图书统计、借出图书分类统计、到期末归还图书读者统计几部分组成。这些系统解决了以前的那种管理方式所存在着的诸如手续繁琐、工作量大、效率低下、出错率高等缺点,设计出的系统能使读者快速检索到自己喜爱的书,图书管理员能减轻工作量。

但是鉴于开发工具和开发当时的科技发展水平所限,再加上历史发展到今天,人们的生活环境已经发生了改变,大家对于图书查询这方面的要求也更高。比如在一个局域网内,大家希望能在本台电脑上就能查找自己想要的图书,而不用跑到图书馆或图书室里去用那里的电脑查询,这就需要一个网络化的联机查询系统。

1.3  选题的目的 意义

随着社会的进步,的、意义信息技术的广泛应用,数字化管理的优势日趋显著。针对中小型图书馆或图书室管理落后的情况,设计实现一个图书信息管理系统,通过与计算机的结合使用对中小型图书馆或图书室的各种图书信息进行管理可以给管理员和用户带来以下不同的方便:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高工作效率,也是图书馆等部门管理科学化、正规化的重要标志之一。而且计算机管理的成本不断降低。因此,开发一套这样的中小型图书管理软件已经很有必要,并且实现研究服务于实践的原则。

1.4  图书管理系统的可行性分析

本次毕业设计题目:“学校图书管理系统的开发”主要目的是利用数据库软件编制一个管理软件,用以实现图书、读者以及日常工作等多项管理。同时对整个系统的分析、设计过程给出一个完整论证。图书管理系统是一种基于集中统一规划的数据库数据管理新模式。在对图书、读者的管理,其实是对图书、读者数据的管理。本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。本系统的设计主要从以下几方面做起:系统业务流程分析、系统的功能设计、系统的数据库结构设计等。作这些工作需对数据库知识有足够认识,并深入的了解Java的使用和管理系统的相关知识。在信息时代的今天,人类需要对在政治、经济、军事、文化、科研、教育等领域产生的大量信息进行管理,并对数据进行加工处理,数据库技术则是信息管理与数据处理的先进技术。随着信息量的不断增加,作为计算机的三大主要应用(科学计算、过程控制和数据处理)之一的数据处理,已迅速上升为计算机应用的主要方面,数据库技术则成为人们日常生活中处理数据不可缺少的有力工具,并且现代的信息管理系统几乎都以数据库技术作为核心。

现在大多数的图书管理方式为手工处理,重复劳动多,劳动强度大,而且容易出错,新系统的使用能否可以很好的解决这些问题要看系统的可行性,可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。系统的可行性分析有以下几个方面:

(1)技术可行性:处理速度快、准确通过权限的设置,数据的安全性好、方便查询、借阅管理等。   

(2)经济可行性:系统建设不需要很大的投入、可缩减人力投入。

(3)运行上可行性:本系统作为一个小型的图书馆信息管理系统,所耗费的

资源非常的小。

(4)从各种社会因素可行性分析:可降低工作人员工作强度,提高效率,会

得到学校工作人员的一致同意的。

综上所述通过可行性分析认为新系统的开发方案切实可行,可进行开发。

1.5  系统开发运行环境 

系统开发环境:MyEclipse Java Enterprise7.0

系统开发语言:Java

运行平台:Windows XP

数据库:sql server 2005

Web服务器: Tomcat6.0

第二章  本系统开发相关技术介绍

2.1  java

Java已用动态的交互应用软件使Web栩栩如生。它使开发人员具有‘编写一次到处运行TM”的巨大能力。而且,借助其JavaAPI及其编程语言上的Java虚拟机,它已产生一种分布信息的崭新模式。这种模式叫做Java企业计算,正在帮助各企业以各种不同的方法取得竞争优势。网管和控制已大大简化。软件分配基本上是免费的,而且立即可实现。电子贸易已获得。占有成本大幅度降低。信息和应用软件到处可存取。Java建立在简单的前提基础上,即所有微处理器都应讲同一种语言——所有内部采用芯片的产品都应能一起工作,无缝而方便地共享信息。它已经改变企业和个人同Internet大交道的方式。现在,它正在对消费类产品产生明显的影响,而且从总体上更加深刻地影响企业计算。

借助Java,您可自由自在地使用您已拥有的硬件和软件。这是因为Java是独立于平台的。它还可使您超越企业计算,使应用软件在便携式计算机、信息亭、电视、蜂窝电话和其他大量设备上运行。

全世界的公司都已发现Java数不胜数的用途。所有用途可从其无可比拟的能力,即提高可靠性、安全性和简化各种不同计算产品和环境的能力中受益非浅,而且节省的时间和费用十分可观。

Java无处不在。它已拥有几百万个用户,其发展速度要快于在它以前的其他任何一种计算机产品。它可位于任何地方,而且能到处运行。Java正在迅速被用做传播信息的事实上标准,这是因为它既可给企业,也可给最终用户带来似乎数不清的好处。

Java的特点:

 1、Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。

2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。

5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。

6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。

8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。

9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。

10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。

11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。

2.2 MySql

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.对于Mysql的前途,没有任何人抱乐观的态度.目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MySQL的官方网站的网址是:www.mysql.com

MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。不管怎样,在经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。这导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。

MySql 特性:

1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性

2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统

3.为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、PerlPHP、Eiffel、Ruby和Tcl等。

4.支持多线程,充分利用CPU资源

5.优化的SQL查询算法,有效地提高查询速度

6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名

7.提供TCP/IP、ODBC和JDBC等多种数据库连接途径

8.提供用于管理、检查、优化数据库操作的管理工具

9.可以处理拥有上千万条记录的大型数据库

MySql 应用:

与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。

目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。

2.3 Struts2

struts是开源软件。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。

运行流程:

服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。

  以登录为例:第一次进login.jsp会先实例化Form、把默认值(String默认为空字符串,整形默认为0)赋给表单元素。

输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet读struts-config.xml文件找到 action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的excute方法。

    1. Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

实际应用:

Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。

Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。

Transaction接口负责事务相关的操作,也可以设计编写自己的底层事务处理代码。

    1. C/S结构

C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

C/S结构的优点:

C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:

  只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。

  客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。

  对客户端的操作系统一般也会有限制。可能适应于Win98, 但不能用于win2000或Windows XP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。

C/S架构软件的优势与劣势:

  (1)应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。

  (2)数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络。在C/S体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。

  (3)C/S架构的劣势是高昂的维护成本且投资大。首先,采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。

  其次,传统的C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。在JAVA这样的跨平台语言出现之后,B/S架构更是猛烈冲击C/S,并对其形成威胁和挑战。

2.6  Web服务器

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是6.0。

    Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。

Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

这里的诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

3  系统总体设计分析

3.1 系统需求分析

随着互联网的爆炸性发展,人们越来越习惯于利用网络来实现所需的服务,网络已深深影响到人们生活的各个方面。另外,传统的图书馆不能满足一部分现代人的需要,而电子阅览室,由于其不受时间与空间的限制同时又具有传统图书馆的大部分功能,能够满足各类用户的常规与特殊需求,而且其方便快捷,实现技术又比较成熟,因此受到当代人的喜爱。

该系统主要分为两部分:读者部分和管理员部分。为了方便读者查找自己感兴趣的主题进行阅读,要将图书按照内容进行分类。读者可以按照类别进行查找,逐级浏览、可以查看自己的信息。本系统还可对用户的账号和书目的阅读权限进行管理。管理员需要给用户分配用户名和密码,及设定用户的级别,还为用户提供图书的排行榜让用户能知道那些图书受到大家的欢迎。

3.2  系统实现的目标 

    学校图书管理系统的开发主要要实现的目标有以下几个方面:

(1)界面设计友好、美观。

(2)数据存储安全、可靠。

(3)信息分类清晰、准确。

(4)强大的查询功能,保证数据查询的灵活性。

(5)实现对图书借阅和归还过程的全程数据信息跟踪。

(6)提供图书借阅排行榜,为图书管理员提供了真实的数据信息。

(7)提供灵活、方便的权限设置功能,使整个系统的管理分工明确。

(8)具有易维护性和易操作性。

3.3  系统功能模块设计

(1)系统设置模块:添加删除管理员、设置管理员的权限、说明图书存放书架信息添加删除书架信息。

(2)读者管理模块:添加删除不同类型的读者及注明可借图书的数量、添加删除读者的档案。

(3)图书管理模块:添加删除不同类型的的图书及注明图书可借的天数库存数量、添加删除图书的档案。

(4)图书借还模块:可查询读者借阅和归还图书的信息及图书的现有库存量。

(0035)系统查询模块:可根据不同的条件(条形码、书名、类别、作者、书架、出版社)查询读者需要的图书、读者可根据不同的条件(图书条形码、图书名称、读者编号、读者名字、到期时间)查询自己借阅图书信息。

(6)排行榜模块:可以让读者知道图书借阅的排行榜及读者借阅的排行榜。

3.4  系统功能结构图

    根据图书管理系统的实际需求,可以将图书管理系统划分为系统设置、图书管理、读者管理、图书借还、系统查询、排行榜6个部分各个部分的具体功能的系统功能结构图如图3-1所示。

图3-1  系统功能结构图

(1)图书借阅系统完成用户的借书过程其数据流图如图3-2所示。

图3-2  借阅系统的数据流图

(2)还书系统完成图书的归还过程其数据流图如图3-3所示。

图3-3  归还系统的数据流图

    (3)图书档案管理系统为用户提供图书档案信息其数据流图如图3-4所示。

图3-4  图书档案管理数据流图

(4)读者档案系统用于记录读者的详细信息其数据流图如图3-5所示。

图3-5  读者档案管理数据流图

3.5  系统流程图

图书管理系统的流程是用户先输入自己的帐号密码及系统显示的验证码进入系统如有一项不符合则不能进入系统,成功登陆系统后系统根剧登陆的帐号信息从数据库中的数据进行对比判断是读者还是管理员,如果是读者则能进行信息查询,及修改自己的相关信息,查询到自己所需要的图书就能通过管理员进行借阅图书、归还图书也是通过管理员完成的。如果不是读者而是管理员,那管理员可以进行相关信息的查询、添加删除图书及读者的所有信息、设置相应的权限、为图书更新排行榜的信息、以及完成读者的图书借阅与归还。图书管理系统的系统流程图如图3-6所示。

图3-6  图书管理系统的流程图

4  数据总体结构设计

4.1  数据库概念结构设计

数据库概念结构设计是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。这个阶段不用考虑所采用的数据库管理系统、操作系统类型、机器类型等问题。这阶段可用的工具很多。用的最多的是E-R图(Entity-Relation,实体-关系图),另外还有许多计算机辅助工具(Computer Aided Software Engineering, CASE)可以帮助进行设计。本系统采用了E-R图的方法进行数据库概念结构设计。E-R图是描述数据实体关系的一种直观描述工具。这种图中有:

(1)实体:用方框表示,方框内为实体的名称。

(2)实体的各种属性:用椭圆表示,椭圆内为属性名称。使用线段将其和响应的实体连接起来。

    (3)实体之间的联系:用菱形表示,菱形内为联系的名称。

实体和实体之间的联系较多,比较常见的联系有l:1,l:N和M:N这三种。

4.2  数据库逻辑结构设计

概念结构是独立于实际数据模型的信息结构,必须将其转化为逻辑结构后才能进行数据库应用的设计。也就是要将概念上的结构转化为数据库系统所支持的实际数据模型。

    第一种转化是将实体转化为关系表。这种转化较简单,需要将实体的属性定义为表的属性即可。

    第二种转化是联系的转化。即将各个实体之间的联系转化为表格之间的关系,如外部键的定义。

    在上面工作的基础上归纳出人员管理数据库表格的组成之间的联系等等。该数据库系统具有以下方面的特点:

     结构合理,对一个人员建立多条记录。

     所建立的数据冗余度小,独立性强。

     建档、修改、查询、统计快速而准确。

保密性好、可靠性好。 

图书管理系统中要有图书,图书是图书管理系统中密不可分的部分,因此要创建一图书信息实体,用来保存图书的详细信息。图书信息实体属性图如图4-1所示。

图4-1  图书信息实体属性图

读者是图书管理系统重要组成部分,这里创建了一个读者信息实体,用来存储读者的详细信息。读者信息实体E-R图如图4.2所示。

图4-2  读者信息实体属性图

图书的借阅和归还是图书管理系统中的一项重要的环节,开发图书管理系统就是为了方便读者对图书的借阅和归还,因此要建立一个图书借还实体,用来保存读者对图书的借阅和归还的详细信息。图书的借阅和归还实体属性图如图4-3所示。

图4-3  读者借还实体属性图

图书管理系统为了增加系统的安全性,管理员只有在系统登陆模块验证通过后才能进入管理员的操作界面,因此套在数据库中创建一个存放登录用户信息的管理员实体。管理员实体属性图如图4-4所示。

图4-4  管理员实体属性图

4.3  图书管理系统的系统E-R

图书管理系统的系统E-R图如图4-5所示。

图4-5  图书管理系统的系统E-R图

4.4  数据表设计

本系统使用的数据库管理系统为MySQL5.0。数据库中的表有管理员信息表、图书信息表、读者信息表、管理员权限表、图书借阅归还表等。

图书管理员基本信息表tb_admin如表4-6所示。

字段名

数据类型

长度

主键

描述

id

varchar

50

管理员编号

name

varchar

50

管理员名称

pwd

varchar

30

密码

                              表4-6  tb_admin(管理员)表

读者详细信息表tb_reader,如表4-7所示。

字段名

数据类型

长度

主键

描述

id

varchar

30

读者编号

name

varchar

50

读者名称

sex

char

4

性别

type

varchar

50

读者类型  

birthday

smalldatetime

4

生日

paperType

varchar

20

证件类型

paperNum

varchar

30

证件号码

tel

varchar

20

电话

email

varchar

50

E-mail

createDate

smalldatetime

4

注册日期

oper

varchar

30

操作员

remark

text

16

备注

borrownum

int

4

借阅次数

表4-7  tb_reader(读者信息)表

图书详细信息表tb_bookkifo,如表4-8所示。

字段名

数据类型

长度

主键

描述

Bookcode

varchar

30

图书条形码

bookname

varchar

50

图书名称

type

varchar

50

图书类型

autor

varchar

50

作者

translator

varchar

50

译者

pubname

varchar

100

出版社

price

money

8

价格

page

int

4

页码

bcase

varchar

50

书架

storage

bigint

8

存储数量

inTime

smalldatetime

4

入馆时间

oper

varchar

30

操作员

borrownum

int

4

被借次数

表4-8  tb_bookkifo(图书信息)表

图书借阅和归还信息表tb_borrowandback,如表4-9所示。

字段名

数据类型

长度

主键

描述

id

varchar

30

借书编号

readid

varchar

20

读者编号

bookcode

varchar

30

图书条形码

borrowTime

smalldatetime

4

借书时间

ygbackTime

smalldatetime

4

应该还书时间

sjbackTime

smalldatetime

4

实际还书时间

borrowoper

varchar

30

借书操作

backoper

varchar

30

还书操作

isback

bit

1

是否归还

表4-9  tb_borrowandback(图书借阅和归还信息)表

权限信息表tb_purview,如表4-10所示。

字段名

数据类型

长度

主键

描述

id

varchar

50

用户编号

syset

bit

1

系统设置

readset

bit

1

读者管理

bookset

bit

1

图书管理

borrowback

bit

1

图书借还

syaquery

bit

1

系统查询

表4-10  tb_purview(权限信息)表

5  图书管理系统详细设计

5.1  系统流程分析

根据开发图书管理系统的需求分析,本系统设计了三种用户,分别为系统管理员、教师和学生。

系统要求有系统管理员用户,我们设定系统管理员,当系统管理员使用帐户登录后,需要查看有关图书的一系列的信息,管理员可以通过系统导航菜单进入读者管理界面、图书管理界面、图书借还界面、系统查询界面、排行榜界面,在读者界面中,管理员添加和修改学生或教师信息、用户可以查看自己信息,在图书管理界面管理员可以添加和修改图书信息、用户可查看图书,在图书借还界面完成读者借书还书的操作,系统查询界面管理员可以查看借出去的图书信息及库存的信息、用户可以查找自己的所需的图书,排行榜界面主要是可以让用户知道哪些图书受到读者的喜爱。读者(老师和学生)使用读者帐号登陆系统后,可以查询自己所需要的图书的信息、也可以查询自己个人的基本信息及图书的借还信息,还能查看排行榜的信息。读者的借书和还书过程是通过管理员完成的。

5.2  主要模块的运行

5.2.1  登陆界面

当用户输入用户名、密码,系统自动将输入的信息和相关数据表中的内容进行比较,如果该用户输入的内容和数据表中的内容相符,则通过验证,此次登录成功;否则登录失败。比较的过程是由浏览器将指令,数据发送到Web服务器,Web服务器通过对数据库进行查询将结果返回到浏览器,从而端显示成功的消息,用户只有成功登陆系统后才能进行一系列的操作,如下图5-1所示。

5-1  图书管理系统登陆界面

5.2.2  图书信息管理模块

图书信息管理模块主要分为查看图书信息页面和添加修改图书信息页面,用户可以在查看图书信息页面查看图书的基本信息,管理员也可以看这些信息,并且可以通过单击“添加图书信息”这个超级链接或集合列表中的“详情”超级链接转到添加或删除图书信息界面,并在该页中添家或修改图书信息,如图5-2与5-3所示。

图5-2  查看图书信息界面

图5-3  添家或修改图书信息界面

图书信息管理模块的实现,主要是使用了Hibernate框架操作数据库技术。

Hibernate,通过对jdbc进行封装,对 java类和关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc + sql操作数据的方式,从而使开发人员可以话更多精力进行对象方面的开发。其优点并不只是简化了数据库操作,更有价值的是对不同的数据库提供了统一操作的接口,使应用程序的跨数据库开发成为可能。

5.2.3  图书借还信息模块

图书借还管理模块主要分为图书借阅页面和图书归还页面,用户可以在通过这个模块查看图书的借阅和归还信息。管理员可以在图书通过这个模块来完成读者借和还书的操作,如图5-4与5-5所示。

图5-4  图书的借阅管理

图5-5  图书归还管理

5.3  系统开发的遇到的相关问题及解决

5.3.1  图书管理系统索引 

图书管理系统开发中存在大量的数据和信息检索,怎样更好的检索数据和信息操作是保证检索速度的提高和数据的分页显示,主要考虑了以下几个方面:

(1)设计逻辑结构时充分考虑冗余量和可处理性两方面的要求,在接受冗余量的提下,尽量减少表的连接操作。

(2)关系的大小对查询的影响也是很大的,因此为了提高数据库的查询速度,减小系的大小和数据量也是必要的。

(3)建立合理的索引结构。索引相当于一个映射机构,将键值转换成相对应的

记录地址,形成索引文件。

索引设计是数据库物理设计的基本问题,也是较困难的问题,建立索引可以极大地提高系统的查询速度,但是同时做Insert、Update、Delete操作时会降低速度,因为做这些操作的同时需要更新索引,所以不能对数据库中所有的表都建立索引。比如满足下列条件之一的不易建立索引:不出现或很少出现的属性或表、属性分布严重不均的属性、经常更新的属性或表、过长的属性、太小的表等。

满足下列条件之一的可以考虑建立索引:主键和外键都建立索引、对于以读为主或只读的表,只要需要,且存储空间允许,可以减少连接开销、对于等值查询(即查询条件以等号为比较符),最好建立索引、对查询范围(即查询条件>,<,≤,≥为比较符),最好建立索引、有些查询可以由检索直接得到结果,不必访问数据块。

根据实际需要,读者信息表,图书信息表,图书借还信息表,权限信息,管理员信息表等都建立索引,合理使用缓冲区。

5.3.2  如何验证输入的字符串

在图书管理系统的开发过程中,需要对一些输入的字符串进行验证,例如金额、电话号码、E-mail等,由于许多模块都需要用到这些验证,因此可以将其写入到一个公共JS脚本中然后在其他的页面中直接调用即可。JS中对字符串进行验证时,十分的方便快捷,减少服务器与客户端交互的过程,在客户端轻松的解决,要使用正则表达式验证输入的字符串,如验证输入的字符串是否为E-mail的地址格式的实现方法。代码如下:

验证输入为Email

if(formname.email.value!=formname.email.value.match(/^\w +[@]\w +[.][\w.] +$/))

{

alert("您的电子邮件格式错误!");

formname.email.focus();

return false;    

}

5.3.3  自动计算图书归还日期

在图书管理系统运行中会常常遇到这样的问题:在借阅图书时,需要自动计算图书的归还日期,而这个日期又不是固定不变的,它是需要根据系统日期和数据表中保存的各类图书的最多借阅天数来计算的,即图书归还日期=“系统日期”+“最多借阅天数”。因此本系统是这样解决问题的:首先获取系统时间,然后从数据表中查询出该类图书最多借阅天数,最后计算归还日期。计算方法如下:

首先取出所借图书的最多借阅天数,然后根据图书的最多借阅天数,使用getMaxDay()方法返回一个int值,最后使用当前时间与先返回的Timespan时间间隔相加。

自动计算图书归还日期的关键代码如下:

//获得当前日期

SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd");

Calendar c = Calendar.getInstance();

//获得最多借阅天数

int days = getMaxDay();

//增加图书借阅天数

c.add(Calendar.DAY_OF_MONTH, days);

//获得图书归还日期

String borrowandbackmanage = time.format(c.getTime());

5.3.4  系统登陆验证码的实现

在学校图书管理系统的开发过程中,怎么样防止某些人利用某些恶意的软件对图书管理系统进行恶意的登陆来攻击系统,增加图书管理系统的安全性是一个重要的问题。在图书管理系统的登陆模块中加入一个验证码的功能,即用户除了要输入帐号和密码还要输入系统为用户提供的验证码。验证码可以很好的解决了怎样防止恶意用户利用恶意软件对系统页面的疯狂提交、以及暴力破解密码进行登陆的问题。因此,设置一个随机函数在数字0~9和英文字母A~Z中随机抽取四个,在用户打开登陆界面的时候,系统通过随机生成器随机生成4个数字或字母或数字加字母存放在缓存内,并出现在界面上顺序是随机的,当用户登陆时输入的验证码要与缓存中的进行对比符合就进入,不符合就不能登陆。系统在提供验证码时候要加入一些干扰的条件的,不过这些人的肉眼是很容易分辨,但机器人程序不能分辨,很好的防止某人利用机器人程序对系统的恶意操作增加了系统的安全性。验证码实现的关键代码如下:

<input name="rand" type="text" style="width:40px; height:20px;" οnkeydοwn="if(event.keyCode==13)MM_submit();" /> <img src="image.jsp" border="1" align="absmiddle" />

Image.jsp页面

<%@ page contentType="image/jpeg"%>

<%@page import="javax.imageio.*,com.lilosoft.util.VerifyImage"%>

<%

response.setDateHeader("Expires",-1000);

//response.setContentType("image/jpeg");

response.setHeader("Pragma","No-cache");

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expires",0);

VerifyImage vb=VerifyImage.creatInstance();

    ImageIO.write(vb.image,"JPEG",response.getOutputStream());

    session.setAttribute(VerifyImage.VerifyNo,vb.sRand);

   

    response.flushBuffer();

    out.clear();

    out = pageContext.pushBody();

%>

//VerifyImage  验证码类文件

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.util.Random;

/**

 * @author To change the template for this generated type comment go to

 *         Window>Preferences>Java>Code Generation>Code and Comments

 */

public class VerifyImage{

public String sRand="";

public BufferedImage image=null;

public String getSRand(){

return sRand;

}

public BufferedImage getImage(){

return image;

}

private VerifyImage(){

}

public static final String VerifyNo="VerifyNo";

public static VerifyImage creatInstance(){

VerifyImage vi=new VerifyImage();

// 在内存中创建图象

int width=40,height=17;

vi.image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

// 获取图形上下文

Graphics g=vi.image.getGraphics();

// 生成随机类

Random random=new Random();

// 设定背景色

g.setColor(getRandColor(200,250));

g.fillRect(0,0,width,height);

// 设定字体

g.setFont(new Font("Times New Roman",Font.PLAIN,12));

// 画边框

// g.setColor(new Color());

//g.drawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到

g.setColor(getRandColor(160,200));

for(int i=0;i<155;i++){

int x=random.nextInt(width);

int y=random.nextInt(height);

int xl=random.nextInt(12);

int yl=random.nextInt(12);

g.drawLine(x,y,x+xl,y+yl);

}

// 取随机产生的认证码(4位数字)

for(int i=0;i<4;i++){

String rand=String.valueOf(random.nextInt(10));

vi.sRand=vi.sRand+""+rand;

// 将认证码显示到图象中

g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成

g.drawString(rand,9*i+3,14);

}

// 图象生效

g.dispose();

// com.et.util.Log.write("sRand======"+sRand);

return vi;

}

private static Color getRandColor(int fc,int bc){// 给定范围获得随机颜色

Random random=new Random();

if(fc>255)

fc=255;

if(bc>255)

bc=255;

int r=fc+random.nextInt(bc-fc);

int g=fc+random.nextInt(bc-fc);

int b=fc+random.nextInt(bc-fc);

return new Color(r,g,b);

}

}

6  结论

经过几个月的设计和开发,学校图书管理系统基本开发完毕。其功能基本符合用户需求。对于数据的一致性的问题也通过程序进行了有效的解决。但是该系统还有许多不尽如人意的地方,在今后有待进一步改善。通过这次毕业设计真切地体会到毕业设计的目的并不止于自己单纯任务的完成,而在于学习新的知识并掌握具体的方法,如何具体使用和具体应用你所学所用的语言。从而获得一种本领:就是融会贯通各种语言。回首整个开发设计过程,我学到了很多书本上学不到的东西。比如以前开发软件的时候,一般做的就是编码工作,实现比较简单的功能。但是这次毕业设计,我要负责图书管理系统的整个开发过程,包括系统可行性分析、系统需求分析、系统概要设计、系统详细设计等方面的工作。在每个设计阶段我都能学到一些新知识,对我的动手能力提高很大。在整个毕业设计过程中,我基本上完成了图书管理系统各个模块的功能,达到了毕业设计的要求。页面设计还有进一步改善的地方,我会在今后的学习工作中着重加强这方面的锻炼。

在以后的工作中,还会遇到很多类似的情况,此次毕业设计为我以后的工作积累了很多宝贵的经验。这几个月中,从接到设计课题到具体设计再到完成系统开发,是一个不断地遇到问题与解决问题的过程。其中包括:分析各种需求、完善各种功能、增加必要环节、对各部分及整体进行检测与维护。当然仍存在许多问题不能解决地尽善尽美,还需不断地继续与探索。在结束设计的同时也感到了劳动的艰辛与劳动成果的来之不易,明白了毕业设计是给自己提供了一个锻炼、升华、提高、完善的机会。

6.1  主要研究内容及成果

介绍学校图书管理系统根据实际的需求及发展情况进行设计与开发情况,及介绍本系统设计应用平台及技术支持讲述本系统设计理念及具体设计情况,讲解本系统具体制作方法及核心代码。开发的图书管理系统基本上能完成预期的目标,大致能满足读者和管理员的要求。不过也有一些不足之处需要好好改进。

6.2  今后进一步研究方向

(1) 对页面进行美化,使界面变的更美观一点。

(2) 增加数据转换接口,使得本系统能与学校图书管理系统数据库进行无缝连接。

(3) 添加系统功能,本系统只有让读者知道还书的期限,当图书超期而读者也没注意要自己所借图书超期了,就无法及时的还书了,因此增加图书到期催还功能,能让读者在自己信息查询时候就能看到系统对自己所借图书的超期提醒以方便读者的图书归还。

  • 30
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值