J2ee课程设计文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

J2EE与中间件
课程设计报告
课程设计题目:图书馆管理系统
班级:软件工程2011级1班小组成员:
信息科学与工程学院
2014年06月
目录
一、图书馆管理系统现状...................................... 错误!未定义书签。

二、涉及的技术.............................................. 错误!未定义书签。

2.1 登陆页面采用cookie 技术............................ 错误!未定义书签。

2.2 JQuery技术......................................... 错误!未定义书签。

2.3 数据库连接池........................................ 错误!未定义书签。

2.4 MVC架构............................................ 错误!未定义书签。

三、设计任务................................................ 错误!未定义书签。

3.1用例设计............................................ 错误!未定义书签。

3.2界面设计............................................ 错误!未定义书签。

3.3数据库设计.......................................... 错误!未定义书签。

3.4编码设计............................................ 错误!未定义书签。

四、功能描述................................................ 错误!未定义书签。

4.1用例设计............................................ 错误!未定义书签。

4.2界面设计............................................ 错误!未定义书签。

4.3 数据库设计.......................................... 错误!未定义书签。

4.4 编码设计............................................ 错误!未定义书签。

五、功能实现................................................ 错误!未定义书签。

5.1用例设计............................................ 错误!未定义书签。

5.2 界面设计............................................ 错误!未定义书签。

5.3数据库设计.......................................... 错误!未定义书签。

5.4编码设计............................................ 错误!未定义书签。

六、实验体会................................................ 错误!未定义书签。

6.1遇到的困难.......................................... 错误!未定义书签。

6.2经验:.............................................. 错误!未定义书签。

七、组内分工................................................ 错误!未定义书签。

1
一、图书馆管理系统现状
图书馆因客观需要产生,因其得到利用而不断发展。

由于社会经济和科学技术的发展,出版物品种和数量的激增及计算机技术在图书馆的广泛应用,国内外图书馆事业都发生了很大的变化。

这与图书馆管理水平是和图书馆事业的发展是分不开的。

1.1、国内现状
近十几年来我国图书馆的馆舍建筑、硬件设施、资源建设等各个方面的条件都有了很大的变化和发展。

对人员队伍建设日益重视。

从总体上看,图书馆管理水平有了较大的提高。

主要表现在两方面,一是图书馆管理思想与服务理念由传统图书馆向现代图书馆转变,二是受信息技术发展的影响,我国图书馆管理创新和管理现代化的进程同样呈现信息化的趋势,这主要表现为计算机等管理手段在图书馆的应用。

新技术的应用对传统图书馆的冲击现代技术的应用对图书馆发展的影响是有目共睹的。

信息技术革命为图书馆的发展提供了极为广阔的空间。

推动了图书馆基础业务由手工方式向计算机化和网络化发展,推动了传统图书馆向自动化图书馆和数字图书馆发展。

目前我国图书馆管理体制的基本特征是条块分割,各自为政,各图书馆的组织机构都是按主管机构的行政隶属关系建立起来的,各个图书馆依附于所在系统的行政管理部门而存在。

缺乏宏观指导、调控的能力,阻碍了文献资源的共建、共知、共享,同时更不利于整体网络化建设。

另外高素质管理人才短缺,全员素质有待提高。

图书馆不仅罕见工商管理或公共管理学位的管理者,且不少人员缺乏职业图书馆管理者的基本素质。

同时,职工整体素质偏低,知识结构不尽合理,高素质、综合型人才缺乏,造成创新能力严重不足。

1.2、国外现状
国外尤其在西方国家由于科学技术和经济发达的原因,图书馆行业比较受重视和发达,在英国和美国,以及澳大利亚等国的图书馆,图书馆先进的管理手段促进了其现代化管理水平的不断提高。

特别是自动化和网络化的飞速发展,给图书馆事业发展带来了勃勃生机,特别是英国的大学,例如剑桥大学共有 90 个图书馆,牛津大学现有 100 多个规模不等、馆藏不一和服务多样的图书馆。


外在英国,除了对图书馆工作人员有严格的要求外,图书馆本身还有专门的部门负责职工培训,一般与实际管理工作紧密结合。

英国全国图书馆协会对全国范围内的各级各类图书馆职工管理培训起领导作用,国家级培训主要由这个协会负责并承担。

它不仅对馆员资格有皇家特许认证权,更重要的是它有一系列的培训课程和专业指导。

这种培训格局,使图书馆工作人员继续教育不断强化,专业素质不断提高。

以美国为例,美国国土面积和我国相差不大,人口不足我国的 1/4,但其公共图书馆总数量却为我国的 3 倍。

美国各种不同类型的图书馆由不同的上级行政部门负责,如法律图书馆由法院管理等,另外美国图书馆相关法己成体系,各州、郡内又有自己的图书馆法律,这些法律明文规定图书馆的性质、每年的经费投入、每人每年需要的财政补助等,美国图书馆的所有工作都是围绕"一切为了读者"这个中心展开的。

因而处处体现出一种开放的服务意识。

图书馆的藏书布局没有固定格式,但有共同特点,那就是以方便读者使用为目的。

大多按学科内容分类,采用全方位的开放式布局。

在服务方式上采用借书、阅览、咨询、检索一体化的服务手段。

在同一个地方,既开架借书,又可阅览和进行检索咨询,对图书馆管理而言,管理工作极其简便,减少了管理层次和中间环节。

而澳大利亚大学图书馆现状是,其传统的工作岗位正在减少,同时也不再以读者对象或文献类型划分阅览室或书库,全馆只有一个出入口,通常是流通部门的管理终端设在图书馆进出口处,图书馆的工作重心已从信息处理向信息咨询服务转移,配置较多的人员去做信息研究和咨询服务,有助于网络作用的发挥和提高文献的利用率。

二、涉及的技术
2.1 登陆页面采用cookie 技术
将用户名和密码保存在本地,每次登录时先检验cookie表中有无记录的的用户名和密码,如果cookie存在用户的登录信息,则用户无需再次输入即可登录本论坛。

3
2.2 JQuery技术
本系统的javascript采用了技术比较成熟的Jquery,包括界面元素的获取和赋值,动态菜单效果的实现等都采用了该技术,使得开发效率得以提高。

2.3 数据库连接池
为减轻数据库连接的负担,提高系统的性能,采用了proxool数据库连接池技术。

因为系统比较小,设定最小的连接数1,最大连接数500,超时设定60000。

2.4 MVC架构
为提升系统的性能,使开发思路更加清晰,采用了JSP+Servlet+bean的MVC 架构。

视图层采用JSP负责页面显示和呈现处理结果,控制层采用Servlet负责请求转发和业务逻辑的处理,bean+DAO属于模型层,负责访问数据库和持久化数据。

三、设计任务
3.1用例设计
通过用例的分析获取并明确需求,细化每个用例的业务流程,由小组成员共同负责
3.2界面设计
设计交互良好地界面,获取用户输入,并呈现处理结果,由于小组成员是按照模块进行分工的,在同一的CSS下,每一个成员全权负责自己模块的界面设计。

3.3数据库设计
小组成员通过用例的分析,获取初始的实体,进而详细分析其属性等,最终
生成数据库的物理结构和相应DBMS的数据库结构,最后由徐文雯负责设计。

3.4编码设计
根据前期的分析与设计,实施编码工作,按模块分工,小组成员共同完成。

四、功能描述
4.1用例设计
在该设计阶段主要完善对需求的分析。

4.2界面设计
在该设计阶段,需要完成该图书馆管理系统所需的静态页面:
A 登陆页面
B 普通用户主界面
b1 馆藏图书查询界面
b2 已借图书查询界面
b3 图书收藏查询界面
b4 图书续借界面
b5 用户指南界面
b6 密码修改界面
C 管理员主界面:
c1 馆藏图书查询界面
c2 已借图书查询界面
c3 图书收藏查询界面
c4 图书续借界面
c5 用户指南界面
c6 借书管理界面
5
c7 还书管理界面
c8 过期图书管理界面
c9 图书采购管理界面
c10添加普通用户界面
c11 添加图书馆管理员界面
c12 用户信息管理界面
c13 密码修改界面
4.3 数据库设计
确定需要持久化的实体:
用户表:用户编号(PK) +姓名+密码+邮箱+权限值
图书表:图书编号(PK)+图书名称+出版社名称+图书作者+图书出版日期+图书价格+图书分类编号(FK)+图书位置+图书数量+图书借出数目图书分类表:图书分类编号(PK)+图书分类名称
图书借阅表:借阅时间+图书编号(FK)+用户编号(FK)+图书数量
4.4 编码设计
在此阶段主要进行架构设计:在本项目中采用比较熟悉的MVC架构设计。

主要包括:M是指数据模型,V是指用户界面,C则是控制器。

使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式
视图:
作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

模型:
被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。

由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器:
首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

五、功能实现
5.1用例设计
7
图1普通用户用例图
图2图书馆管理员用例图
9
5.2 界面设计
图 3 图书馆管理系统登录界面
图 4普通用户首页
图5图书馆管理员首页
图6密码修改页面
1
1
图 7用户指南页面
图 8管理员添加普通用户界面
图9图书馆管理员添加图书馆管理员界面
图10借书管理界面
图11还书管理界面
图12图书注销管理界面
1
3
图 13图书采购管理界面
图 14馆藏图书查询界面
5.3数据库设计
图物理数据库视图
5.4编码设计
程序设计的模块较多,下面为程序的核心代码:
//数据访问层DAO的主要基类BaseDAO
public abstract class BaseDao {
protected Connection conn;
protected PreparedStatement stmt;
protected ResultSet rst;
protected CallableStatement calltmt;
/**
* 获取连接的方法
*/
protected final void getConnection() throws SQLException { conn = DBConnection.getConnection();
}
/**
* 释放资源的方法
*/
protected final void closeAll() {
if (rst != null) {
try {
rst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
rst = null;
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
stmt = null;
}
}
if (stmt != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
conn = null;
}
}
}
15
//执行SQL语句的方法
protected final int executeSQL(String sql,List params){
int count = 0;
try {
this.getConnection();
stmt = this.conn.prepareStatement(sql);
setPreparedStatement(params);
count = stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeAll();
}
return count;
}
//设置SQL的各个参数
public void setPreparedStatement(List params) throws SQLException { if (params != null && params.size() > 0) {
for (int i = 0; i < params.size(); i++) {
stmt.setObject(i + 1, params.get(i));
}
}
}
//查询所有满足条件的数据
public List findAll(String sql) {
List pslist = null;
try {
this.getConnection();
stmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSe t.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery();
pslist = fetchMultiResults(rs);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
this.closeAll();
}
return pslist;
}
/* 检查图书是否存在
* @see com.dao.LoanBookDao#checkBookNoFromLoanBook(com.entity.LoanBook) */
@Override
public LoanBook checkBookNoFromLoanBook(LoanBook loanBook) { String sql = "SELECT * FROM LoanBook WHERE BookNo=?";
List params = new ArrayList();
params.add(loanBook.getBookNo());
//System.out.println("LoanBook"+params);
List list = super.executeQuery(sql, params, LoanBook.class);
if (list != null && list.size() > 0)
{
return (LoanBook) list.get(0);
}
// 图书不存在
else
{
return null;
}
}
/* 图书数目加一
* @see com.dao.LoanBookDao#UpDateAdd(com.entity.LoanBook)
*/
@Override
public int UpDateAdd(LoanBook loanBook) {
String sql = "UPDATE LoanBook SET BookNum=BookNum+1 WHERE BookNo=?";
List params = new ArrayList();
params.add(loanBook.getBookNo());
System.out.println("BookNo"+params);
int i = super.executeUpdate(sql, params);
return i;
17
}
/* 图书数目减一
* @see com.dao.LoanBookDao#UpDateSub(com.entity.LoanBook)
*/
@Override
public int UpDateSub(LoanBook loanBook) {
String sql = "UPDATE LoanBook SET BookNum=BookNum-1 WHERE BookNo=?";
List params = new ArrayList();
params.add(loanBook.getBookNo());
System.out.println("BookNo"+params);
int i = super.executeUpdate(sql, params);
return i;
}
/* 删除借书表信息
* @see com.dao.OverdueBookDao#delete(com.entity.Books)
*/
@Override
public int deleteFromLoanBook(OverdueBook overdueBook) {
String sql = "DELETE FROM LoanBook WHERE BookNo='"
+ overdueBook.getBookNo();
int i = super.executeUpdate(sql, null);
return i;
}
/* 删除图书表信息
* @see com.dao.OverdueBookDao#deleteFromBooks(com.entity.OverdueBook) */
@Override
public int deleteFromBooks(OverdueBook overdueBook) {
String sql = "DELETE FROM Books WHERE BookNo='"
+ overdueBook.getBookNo();
int i = super.executeUpdate(sql, null);
return i;
}
六、实验体会
6.1遇到的困难
1.路径跳转问题:
404错误是在项目中遇到次数最多的错误。

2.删除不成功
数据库设计中,各表格之间通过外键关联,有时候不能进行级联删除。

3 乱码问题
好多页面出现中文乱码问题,前台后台转码相对复杂
4.页面的布局问题
许多页面布局复杂,实施起来相对困难
5.空指针问题
在项目中问题仅次于404错误的就是500错误这一问题,出现这一问题的绝大部分原因是自己编码部分处理数据不对。

6.2经验:
1.小组内合作非常重要,要让每个人发挥最大的潜能,尽力完成小组的总任务,项目后期的协调和整合也十分重要;
2.学习并熟练掌握了MVC的开发框架,深刻体会到了MVC对WEB项目带来的好处,分层思想初步建立,为后期的实训打好了基础;
3.锻炼了动手能力,对以往学习的知识进行了重新的检验和梳理,包括数据结构、设计模式、JAVA基础的知识;
4.遇到困难及时找资料或者讨论解决,提高了自己解决问题的能力。

5.小组内的信息交流非常重要,后期合并的时候出现问题就是因为小组内信息交流不畅引起的。

6.编码之前一定设计好数据库,在后期编码中尽量不要轻易改变数据库。

7.编程是一门需要逻辑的工作,也是一门需要耐心与细致的工作,有一些粗心的错误需要极其大的耐性和不断的调试才能解决
19
8.有些功能看上去高大上实现起来却很简单,有些功能看上去很基础而实现起来却很难。

9.对于语言的话,个人是觉得在合适的地方用合适的语言是很重要的。

如何选择即符合自己的审美要求,又能适合开发的场景,还能考虑语言自身的特性,其实这要根据个人的经验以及喜好来决定的。

10.良好的沟通。

项目开发也不例外,很好的沟通能够加快项目的进度,这就要求我们每一个开发人员要学会和善于沟通。

在一个项目的开发过程中,小组成员是一个不断交流和沟通的过程。

在开发到一定的阶段,我们就需要队内沟通,尽量的去避免一些隐藏的问题,及时的发现问题,解决问题,从而按时或者提前完成项目的开发
七、组内分工
本组共四名成员,我们的分工如下表所示:
表1组内成员分工表。

相关文档
最新文档