资源描述
湖南农业大学课程论文
学 院:信息科学与技术学院 班 级:软件10-2
姓 名: 学 号:
课程论文题目:图书馆管理系统程序设计
课程名称:J2EE编程技术
评阅成绩:
成绩评定教师签名:
日期: 年 月 日
图书馆管理系统程序设计
学 生:(信息科学与技术学院,学号)
摘要:随着信息管理技术日趋成熟,以及信息管理技术在个个领域的广泛应运,对与日趋庞大的图书馆管理,势必需要合理高效的管理技术。如今许多高校的图书馆管理系统还停留在以CS阶段,随着internet的广泛应用,以及以CS为结构的系统应用性、维护性上的繁杂性,导致以BS为结构的图书馆管理系统必定取代以CS为结构的图书馆管理系统。
关键字:管理系统 BS结构
1、J2EE简介
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,,企业内部或外部难以互通的窘境。
1.1 J2EE的概念
目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Java 2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。
1.2 J2EE的优势
J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制: 保留现存的IT资产,高效的开发,支持异构环境,可伸缩性,稳定的可用性
1.3 J2EE 的结构
这种基于组件,具有平台无关性的J2EE 结构使得J2EE 程序的编写十分简单,因为业务逻辑被封装成可复用的组件,并且J2EE 服务器以容器的形式为所有的组件类型提供后台服务. 因为你不用自己开发这种服务, 所以你可以集中精力解决手头的业务问题。
2.系统概述
2.1系统开发背景和意义
图书管理是每个高校必须切实面对的工作,但如今许多高校的图书馆管理系统还停留在以CS为结构的系统上。随着internet的应用日趋广泛,以及高校内、高校与高校间信息的交流日趋密切,以CS为结构的信息管理系统以不能满足需求,所以,高校图书馆管理系统必须通过更新换代,将BS为结构的系统改为以CS为结构的系统,这样会大大提高系统的维护性以及系统应用的广泛性。
由于图书这用特殊的物品,其表现在数据量非常庞大,所以对数据库的要求比较严格,由于oracle数据库其检索迅速、查找方便、可靠性高、保密性好,所以,选择oracle数据库为其存取数据。
随着java技术在internet上的广泛应用以及java安全性高、执行效率高的优点,同时,java可以在任意平台上应用,所以可以任意组合硬件和操作系统,既可以在windows下开发,部署在linux下,极大了节省了操作系统的费用以及硬件的费用。
3.系统需求分析
3.1 任务概述
整个图书馆管理系统的业务流程抽象描述如下:
1.新书购进后,进行分类、同一编码和入库。
2.学生借阅图书后,记录相关信息。
3. 学生归还时,对比查看该书是否超期,超期后,按规定罚款。
根据以上调查分析,给出业务流程图,如图:
3.2 数据描述(数据流图+数据字典)
经过调查,我们了解了基本的业务程序,接下来给出系统的逻辑模型。构造系统的逻辑模型的工具主要是数据流图和数据字典,下面给出图书馆管理系统的基本模型,如图:
根据基本模型,对其逐步细化,得到数据流图,如图:
根据系统流程图,通过数据字典对数据进一步描述:
图书:图书表结构
描述:记录图书的相关信息
定义:图书信息表 图书编号、图书名称、ISBN号、作者、出版社、类型、价格、库存量、副本存量、总量
位置:LibWeb表空间
借书登记:借书登记表结构
描述:记录图书的借阅信息
定义:借阅登记表 借阅编号、学生编号、图书编号、借阅时间、归还时间、是否归还
位置:LibWeb表空间
学生信息:学生信息表结构
描述:记录学生信息
定义:学生信息表 学生学号、学生姓名、性别、入校时间、毕业时间
位置:LibWeb表空间
归还登记:归还登记表结构
描述:记录所有已归还图书的借阅情况
定义:归还信息表 编号、图书名称、归还时间、归还学生编号、归还学生姓名
位置:LibWeb数据空间
用户信息:用户表结构
描述:记录所有用户
定义:用户信息表 账号、真实姓名、密码、描述
位置:LibWeb数据空间
角色信息:角色表结构
描述:记录所有角色
定义:角色信息表 角色名称、角色描述
位置:LibWeb数据空间
3.3 功能需求
经过以上详细的调查和分析,在数据流程和数据分析的基础上,确定达到的功能为一下几点:
新书入库登记:对与需求入库的书籍,进行数据登记,确认后书籍入库。
图书信息的查询和修改功能:当图书资料发生变化、当图书丢失,应立即修改信息。
图书借阅和归还登记:学生借阅图书时需要登记,学生归还图书时也需要登记。
学生的增加、修改、删除等:新生入学时的信息和直接导入。
用户的增加、修改、删除等:用户可根据权限来操作。
3.4 性能需求
为了保证系统能够长期、高效、安全、稳定、可靠的运行,图书馆管理系统应满足一下性能需求:
1.系统处理数据的准确性和及时性:
系统处理的准确性和及时性是系统的必要性能。在系统设计阶段,就应该充分考虑到,包括数据存储量、访问量等,是系统能够满足图书管管理系统对数据的处理量。
2.系统的开放性和系统的可扩充性:
可扩充性是系统健壮性的重要体现,系统开发中应充分考虑到系统的可扩充性。可扩充性包括系统设计和测试阶段的扩充以及系统使用后的扩充。任何系统在开发阶段对需求都是完全明确的,即使系统交付使用后,用户也会提出增加功能,所以,在系统设计阶段就应该考虑到系统的可扩充性。
系统的易用性和易维护性:
图书馆管理系统由图书馆管理员和学生使用,而使用者对系统结构并不了解,这就要求系统提供良好的用户接口和友好的界面设计。要实现这一点,要求操作简洁明了,数据校验通俗易懂。
4.系统总体设计
4.1业务流程
根据需求分析,以及反复的研究和探讨,确认其流程图如下:
根据流程图,现具体功能描述如下:
1.用户登录:系统对用户的合法性进行校验,登录后,系统会根据用户所拥有的权限来分配权限。
2.书籍入库:填写书籍信息,可通过excel批量导入到数据库中。
3.图书借阅:对已经入库的数据,学生可借阅。
4.图书归还:对已经归还的书籍进行登记。
5.管理措施:对定义系统规定的超期时间、超期处罚办法、丢失赔偿办法。
4.2 系统功能模块图
依据需求分析阶段得到的数据流图,在保证系统基本功能的前提下,结合系统设计流程,给出系统功能模块图,如图:
4.3 系统的流程图
5.程序主图标
5.1 程序流程图
该设计阶段的任务是根据需求具体实现所需要的程序。经过这个阶段的设计,应该得出目标系统的精确描述,从而在系统实现阶段可以把这个描述直接翻译某种程序设计语言书写的程序。总体来说就是把各个模块的细节加以描述。
由于本系统采用的是j2ee来设计程序,java是面向对象的变成语言,所以给出系统的主程序流程图,如图:
5.2 概念模型E-R图
在需求阶段已经完成该系统所有的数据分析。根据该阶段建立的概念模型,已经得出满足系统设计要求的几个关系描述,该阶段的主要工作就是把前一阶段的成果转化为具体的数据库。下面给出概念结构设计的E-R图,如图所示:
图(一)
图(二)
图(三)
6.编码实现
图书管理模块主要代码
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="com.dao.BookDAO" %>
<%@ page import="com.dao.BookTypeDAO" %>
<%@ page import="com.actionForm.BookForm" %>
<%@ page import="com.actionForm.BookTypeForm"%>
<%@ page import="com.dao.BookCaseDAO" %>
<%@ page import="com.actionForm.BookCaseForm" %>
<%@ page import="com.dao.PublishingDAO" %>
<%@ page import="com.actionForm.PublishingForm" %>
<%@ page import="java.util.*"%>
<html>
<%
String str=null;
BookTypeDAO bookTypeDAO=new BookTypeDAO();
Collection coll_type=(Collection)bookTypeDAO.query(str);
if(coll_type==null || coll_type.isEmpty()){
out.println("<script>alert('请先录入图书类型信息!');history.back(-1);</script>");
}else{
Iterator it_type=coll_type.iterator();
int typeID=0;
String typename1="";
BookCaseDAO bookcaseDAO=new BookCaseDAO();
String str1=null;
Collection coll_bookcase=(Collection)bookcaseDAO.query(str1);
if(coll_bookcase==null || coll_bookcase.isEmpty()){
out.println("<script>alert('请先录入书架信息!');history.back(-1);</script>");
}else{
Iterator it_bookcase=coll_bookcase.iterator();
int bookcaseID=0;
String bookcasename="";
PublishingDAO pubDAO=new PublishingDAO();
String str2=null;
Collection coll_pub=(Collection)pubDAO.query(str2);
if(coll_pub==null || coll_pub.isEmpty()){
out.println("<script>alert('请先录入出版社信息!');history.back(-1);</script>");
}else{
Iterator it_pub=coll_pub.iterator();
String isbn="";
String pubname="";
BookForm bookForm=(BookForm)request.getAttribute("bookQueryif");
%>
<script language="jscript">
function check(form){
if(form.barcode.value==""){
alert("请输入条形码!");form.barcode.focus();return false;
}
if(form.bookName.value==""){
alert("请输入图书姓名!");form.bookName.focus();return false;
}
if(form.price.value==""){
alert("请输入图书定价!");form.price.focus();return false;
}
}
</script>
<head>
<title>图书馆管理系统</title>
<link href="CSS/style.css" rel="stylesheet">
</head>
<body onLoad="clockon(bgclock)">
<%@include file="banner.jsp"%>
<%@include file="navigation.jsp"%>
<table width="778" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td valign="top" bgcolor="#FFFFFF"><table width="99%" height="510" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="tableBorder_gray">
<tr>
<td height="510" valign="top" style="padding:5px;"><table width="98%" height="487" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="22" valign="top" class="word_orange">当前位置:图书管理 > 图书档案管理 > 修改图书信息 >>></td>
</tr>
<tr><td align="center" valign="top"><table width="100%" height="493" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top">
<form name="form1" method="post" action="book.do?action=bookModify">
<% int ID=bookForm.getId().intValue();
String bookname=chStr.toChinese(bookForm.getBookName());
String barcode=bookForm.getBarcode();
if(barcode==null) barcode="";
int TypeId=bookForm.getTypeId();
String typename=chStr.toChinese(bookForm.getTypeName());
String author=chStr.toChinese(bookForm.getAuthor());
String translator=chStr.toChinese(bookForm.getTranslator());
String ISBN=bookForm.getIsbn();
String publishing=chStr.toChinese(bookForm.getPublishing());
Float price=bookForm.getPrice();
int pages=bookForm.getPage();
int bookcaseid=bookForm.getBookcaseid();
String bookcase=chStr.toChinese(bookForm.getBookcaseName());
String inTime=bookForm.getInTime();
String operator=chStr.toChinese(bookForm.getOperator());
%>
<table width="600" height="432" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="173" align="center"><input name="id" type="hidden" id="id" value="<%=ID%>">
条 形 码:</td>
<td width="427" height="39">
<input name="barcode" type="text" id="barcode" value="<%=barcode%>"></td>
</tr>
<tr>
<td align="center">图书名称:</td>
<td height="39"><input name="bookName" type="text" id="bookName" value="<%=bookname%>" size="60">
* </td>
</tr>
<tr>
<td align="center">图书类型:</td>
<td>
<select name="typeId" class="wenbenkuang" id="typeId">
<% while(it_type.hasNext()){
BookTypeForm bookTypeForm=(BookTypeForm)it_type.next();
typeID=bookTypeForm.getId().intValue();
typename1=chStr.toChinese(bookTypeForm.getTypeName());
%>
<option value="<%=typeID%>" <%if(TypeId==typeID) out.println("selected");%>>
<%=typename1%></option><%}%>
</select> </td>
</tr>
<tr>
<td align="center">作者:</td>
<td><input name="author" type="text" id="author" value="<%=author%>"></td>
</tr>
<tr>
<td align="center">译者:</td>
<td><input name="translator" type="text" id="translator" value="<%=translator%>"></td>
</tr>
<tr>
<td align="center">出版社:</td>
<td><select name="isbn" class="wenbenkuang">
<%
while(it_pub.hasNext()){
PublishingForm pubForm=(PublishingForm)it_pub.next();
isbn=pubForm.getIsbn();
pubname=chStr.toChinese(pubForm.getPubname());
%>
<option value="<%=isbn%>" <%if(isbn.equals(ISBN)) out.println("selected");%>>
<%=pubname%></option><%}%>
</select> </td>
</tr>
<tr>
<td align="center">价格:</td>
<td><input name="price" type="text" id="price" value="<%=price%>">
(元) * </td>
</tr>
<tr>
<td align="center">页码:</td>
<td><input name="page" type="text" id="page" value="<%=pages%>"></td>
</tr>
<tr>
<td align="center">书架:</td>
<td><select name="bookcaseid" class="wenbenkuang" id="bookcaseid">
<% while(it_bookcase.hasNext()){
BookCaseForm bookCaseForm=(BookCaseForm)it_bookcase.next();
bookcaseID=bookCaseForm.getId().intValue();
bookcasename=chStr.toChinese(bookCaseForm.getName());
%>
<option value="<%=bookcaseID%>" <%if(bookcaseid==bookcaseID) out.println("selected");%>>
<%=bookcasename%></option><%}%>
</select>
<input name="operator" type="hidden" id="operator" value="<%=chStr.toChinese(manager)%>"></td>
</tr>
<tr>
<td align="center"> </td>
<td><input name="Submit" type="submit" class="btn_grey" value="保存" onClick="return check(form1)">
<input name="Submit2" type="button" class="btn_grey" value="返回" onClick="history.back()"></td>
</tr>
</table>
</form>
</td>
</tr>
</table></td>
</tr>
</table>
</td>
</tr>
</table><%@ include file="copyright.jsp"%></td>
</tr>
</table>
<%}
}
}%>
</body>
</html>
读者模块主要代码
Reader.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="com.dao.ReaderDAO" %>
<%@ page import="com.actionForm.ReaderForm" %>
<%@ page import="java.util.*"%>
<html>
<%
Collection coll=(Collection)request.getAttribute("reader");
%>
<head>
<title>图书馆管理系统</title>
<link href="CSS/style.css" rel="stylesheet">
</head>
<body onLoad="clockon(bgclock)">
<%@include file="banner.jsp"%>
<%@include file="navigation.jsp"%>
<table width="778" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td valign="top" bgcolor="#FFFFFF"><table width="99%" height="510" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="tableBorder_gray">
<tr>
<td height="510" valign="top" style="padding:5px;"><table width="98%" height="487" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="22" valign="top" class="word_orange">当前位置:读者管理 > 读者档案管理 >>></td>
</tr>
<tr>
<td align="center" valign="top"><%
if(coll==null || coll.isEmpty()){
%>
<table width="100%" height="30" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="36" align="center">暂无读者信息!</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<a href="reader_add.jsp">添加读者信息</a> </td>
</tr>
</table>
<%
}else{
//通过迭代方式显示数据
Iterator it=coll.iterator();
int ID=0;
String name="";
String typename="";
String barcode="";
String paperType="";
String paperNO="";
String tel="";
String email="";
%>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="87%"> </td>
<td width="13%">
<a href="reader_add.jsp">添加读者信息</a></td>
</tr>
</table>
<table width="95%" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark="#F6B83B" bordercolorlight="#FFFFFF">
<tr align="center" bgcolor="#e3F4F7">
<td width="13%" bgcolor="#F9D16B">条形码</td>
<td width="10%" bgcolor="#F9D16B">姓名</td>
<td width="8%" bgcolor="#F9D16B">读者类型</td>
<td width="12%" bgcolor="#F9D16B">证件类型</td>
<td width="20%" bgcolor="#F9D16B">证件号码</td>
<td width="12%" bgcolor="#F9D16B">电话</td>
<td width="15%" bgcolor="#F9D16B">Email</td>
<td width="5%" bgcolor="#F9D16B">修改</td>
<td width="5%" bgcolor="#F9D16B">删除</td>
</tr>
<%
while(it.hasNext()){
ReaderForm readerForm=(ReaderForm)it.next();
ID=readerForm.getId().intValue();
name=chStr.toChinese(readerForm.getName());
barcode=readerForm.getBarcode();
typename=chStr.nullToString(chStr.toChinese(readerForm.getTypename())," ");
paperType=chStr.toChinese(readerForm.getPaperType());
paperNO=chStr.nullToString(readerForm.getPaperNO()," ");
tel=chStr.nullToString(readerForm.getTel()," ");
email=chStr.nullToString(readerForm.getEmail()," ");
%>
<tr>
<td style="padding:5px;"><%=barcode%></td>
<td style="padding:5px;"><a href="reader.do?action=readerDetail&ID=<%=ID%>"><%=name%></a></td>
<td style="padding:5px;"><%=typename%></td>
<td align="center"><%=paperType%></td>
<td align="center"><%=paperNO%></td>
<td align="center"><%=tel%></td>
<td align="center"><%=email%></td>
<td align="center"><a href="reader.do?action=readerModifyQuery&ID=<%=ID%>">修改</a></td>
<td align="center"><a href="reader.do?action=readerDel&ID=<%=ID%>">删除</a></td>
</tr>
<%
}
}
%>
</table></td>
</tr>
</table>
</td>
</tr>
</table><%@ include file="copyright.jsp"%></td>
</tr>
</table>
</body>
</html>
结束语
从本系统开始设计到现在,共用时间2个星期,其基本功能全部都已实现。
在对整个业务流程明确后,确定了系统涉及的领域,包括数据库设计、界面设计、前台应用层设计和后台管理设计等,是一个具有实际应用意义的典型管理系统。
本系统有如下特点:
(1)本系统主要使用了如下技术:J2EE、Servlet、Tomcat等。
(2)后台数据库服务器选用MySQL数据库,它能够处理大量数据,同时保持数据的完整性并提供许多高级管理功能,并且由于它的开源性、灵活性、安全性以及易用性为数据库编程提供了良好的条件。
在本项目开始的时候,对J2EE和MYSQL的应用方面不够熟练和应用程序设计方面不太熟悉,再加上毕业设计的时间有限,许多方面在下一步的工作中还需要进一步改进和完善。主要针对以下几方面:
(1) 数据的分析功能没有做到完善,如果有时间,我会将此功能做的智能化、人性化。
(2) 系统的某些设计的可扩展性并不十分理想,在以后的系统维护过程中,使用重构方法对系统进行重构,使系统的设计日益趋于更强的可扩展性。
系统的设计没有完美无缺的,这个系统在某些地方可能存在不足,还需要进一步的改进和完善。
通过此次
展开阅读全文