版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWeb课程设计
试验汇报
班级:计算机09-2
试验内容:图书馆管理系统
组员:赵伯涛44号(组长)
张宝红42号
黄海清22号
试验时间:从12月3日
至12月9日
指导老师:李启锐
一、试验目标。
1、在实践中巩固本学习所学Java呢b技术。
2、在实践中初步使用设计模式(GoF),体验设计模式带来好处。
3、配合数据库使用,实现一个功效完善小型系统。
二、试验内容。
开发一个图书管理系统,实现图书馆多种管理操作。图书入库、作废,
借书证提供、挂失处理,图书借出、归还、续借、丢失和超期处理。s
三、业务逻辑。
END
权限与操作
理斌管M另
四、数据库设计。
依据业务逻辑设计出数据库。表结构及关系以下图:
vy
采取了类似和MVC框架框架结构,页面端使用了ExtJS技术(包含AJAX),
增加了业务层和,数据库操作层。控制器层调用业务层,业务层调用数据
库操作层。将控制,业务,数据库操作分别分层。
六、技术性代码。
(本试验代码在Library,zip中)
1、tomcat数据库连接池技术。在tomcat中配置文件server,xml文件
中配置项目Context标签,再加入Resource标签:
<Contextpath二〃LibraryOA”
docBase=/z/home/sea/MyEclipse/LibraryOA/WebRoot,/
debug=〃0〃>
<Resource
name="jdbc/webdb”
auth=*Container*
type="javax.sql.DataSource”
driverClassName=z,org.gjt.mm.mysql.Driver*
url=*jdbc:mysql://localhost:3306/LibraryOA*
username="root"
password="root"
maxActive="50"
maxIdie="20"
maxWait=”10000”/>
</Context>
以上代码配置了数裾库驱动,数据库地址,数据库用户名、密码,默认
提供连接数,最大提供连接数,最长等候时间等参数。
2、Java中从连接池获取连接类,使用了单例模式(来自GoF提出设计
模式):
//DataBaseConnectionPond.java
packagelibrary,util;
importjava.sql.Connection;
importjavax.sql.DataSource;
〃作者:赵伯涛
publicclassDataBaseConnectionPond(
privatestaticDataBaseConnectionPonddbcp=null;
privateDataSourceds=null;
privateDataBaseConnectionPond()throwsException(
javax.naming.Contextctx=newjavax.naming.TnitialContext();
ds=(DataSource)ctx.lookup(/zjava:/corop/env/jdbc/webdb,/);
}
publicConnectionGetConnettion()throwsException(
returnds.getConnection();
}
publicstaticConnectiongetConnection()throwsException(
Connectionconn=null;
if(dbcp==null){
Thread.sleep((long)(Math,random()*200));
synchronized(DataBaseConnectionPond.class){
if(dbcp==null){
dbcp=newDataBaseConnectionPond();
)
}
)
try(
conn=dbcp.GetConnettion();
}catch(Exceptione){
)
returnconn;
)
}
该类在整个项目布署过程中只实例化了一个对象,故称单例。能够经过
该类static函数getConnectionO获取连接。
3、Dao(DataAccessObject)模板化实现,使用了模板方法模式(来自
GoF提出设计模式):
//SqlExecute.java
packcige1ibrary.execute;
importjava.sql.Connection;
import1ibrary.util.*;
〃作者:赵伯涛
publicabstractclassSqlExecute{
publicConnectionconn;
publicObjectresult;
publicabstractvoidsetExecute()throwsException;
publicObjectexecute(){
try{
conn=DataBaseConnectionPond.getConnectionO;
conn.setAutoCommit(false);
setExecute();
conn,commit();
}catch(Exceptione){
try(
conn,rollback();
}catch(Exceptionee){
)
e.printStackTrace();
}finally{
try(
conn.close0:
}catch(Exceptione){
}
)
returnresult;
)
2
该类是一个抽象类,必需经过继承该类来实现具体功效,其中execute()
函数是一个模板方法,将try-catch-finaly、获取connection及
connection事务处理提取出来,具体Dao功效应该写在setExecuteO函数
中,在具体实现Dao功效时候能够不用反复这些代码,方便程序员编码,
也方便程序员维护程序。下面举例使用这个模板类:
//ReaderChangePasswordDao.java
packcige1ibrary.dao;
importjava.sql.PreparedStatement;
importlibrary,execute.SqlExecute;
importlibrary,model.ReaderModel;
〃作者:赵伯涛
publicclassReaderChangePasswordDaoextendsSqlExecute{
privateReaderModelrm;
//传入readerlD,password,password2(旧密码)
//返回影响行数
publicReaderChangePasswordDao(ReaderModelrm){
this,rm=rm;
©Override
publicvoidsetExecuteOthrowsException{
Stringsql="updateReaderssetpassword=?wherereaderlD=?
andpassword=?〃;
PreparedStatementps=conn.prepareStatement(sql);
ps.setString(Lrm.getPassword0):
ps.setlnt(2,rm.getReaderlDO);
ps.setString(3,rm.getPassword2());
this,result=ps.executeUpdate();
)
}
上面类继承了SqlExecute类,重写了它setExecute()函数,经过结构
函数传入操作时需要参数,在写代码时候能够愈加专注于数据库操作,因
为其它操作由模板类做好了。这对写一个数据库操作或许没什么大不了,
不过一个项目里边数据库操作肯定是几十个,儿百个,甚至几千个,使用
模板类降低编码量是很客观。下面举例使用ReaderChangePasswordDao类:
〃来自UserCommonService.java部分代码
//读者修改密码
publicbooleanreaderChangePassword(intreaderlD,String
newPassword,
StringoldPassword){
ReaderModelrm=newReaderModel();
rm.setReaderlD(readerlD);
rm.setPassword(newPassword);
rm.setPassword2(oldPassword);
ReaderChangePasswordDaorcpd=newReaderChangePasswordDao(rm):
intcount=(integer)rcpd.execute();
if(count>0)(
returntrue;
}else{
returnfalse;
}
}
注意:使用Dao时候调用应该是它execute。方法(在抽象类中)。
4、时间显示
varcTime=newDate。;〃初始化日期
varmyYear=cTime.getl'ullYear()://^p
varmyMonlh=cTime.gelMonlh()+l;〃月
varmyDate=cTime.getDateO://H
//取得时分秒
varmyHour=cTime.getHours();〃时
varmyMinutc=cTimc.gctMinutesO;〃分
varmySecond=cTime.getSecondsO;〃秒
if(myHour<10){〃判定假如时钟小于10就显示两位,前一位用0替换
myHour='0'+myllour;
)
if(myMinute<10){〃判定假如分钟小于10就显示两位,前一位用0替换
myinute='0'+myMinute;
)
ifGnySecond<10){〃判定假如分秒钟小于10就显示两位,前一位用0替换
mySecond='0'+mySecond;
)
vartime=time=myYear+*/'+myMonth+,/'+myDate+,
+myHour+,+myMinute+,:'+mySecond;〃格式化时间
vartinier=setinterval(function(){//定义,个时钟,周期为1秒
varcTimc=ncwDatcO;
varmyYear=cTimc.getFullYearO;//支持火狐
varmyMonth=cTime.getMonth()+l;//外国全部是以0开头为一月
varmyDate=cTime.getDateO;
〃取得时分秒
varmyHour=cTime.getHours();
varmyMinute=cTime.getMinutesO;
varmySecond=cTime.getSecondsO;
if(myHour<10){
myllour='O'+myHour;
}
if(myMinute<10){
myMinute='O'+myMinute:
}
if(mySecond<10){
mySecond='O'+mySccond;
}
varcmp=Ext.getCmp(*timer*);
time=myYear+,/'+myMonth+*/'+myDate+,
'+myHour+*:'+myMinute+,:'+mySecond:
cmp.setValuc(tinic);
},1000);
5、登录控制
〃登录界面
Ext.onReady(function(){
Ext.QuickTips.init();
varform-newExt.Panel({〃登录脸证form
autoTabs:true,
activeTab:0.
deferredRender:false,
border:false,
bodyStyle:*background-color:RGB(193,223,232):padding:OpxOpxOpxOpx:*,
items:[(
xtype:,box,,
width:385,
height;80,
autoEi:{
tag:*img*,
sre:'icons/borrowbooks.jpg'
}
},(
xtype:*panel,,
bodyStyle;Jbackground-color:RGB(193,223,232),
layout:'hbox,,
items:LI
xtype:'panel,,
bodyStyle:'background-color:RGB(193,223,232),
border:faIse,
width:120,
height:150,
iterns:[{
xtype/panel,,
layout:'hbox",
border:false,
bodyStyle:'background-color:j?GB(193,223,232)jpadding:lOpxOpxOpx
lOpx*,
items:[{
xtype:'box',
width:*30',
height:'30',
autoEi:{
tag/img',
src:'icons/0.png'
)
),(
xtype:*panel,,
border:false,
bodyStyle:*background-color:RGB(193,223,232);padding:5pxOpx
OpxOpx',
iterns:[{
xtype/displayfield,,
value:*<ahref=>javascript::*
onclick=vicwWindow(,*+l.names[0]+w,)Xfontsize=2>查阅书目</font></a>"
}]
}]
},{
xtype:'panel,,
layout:*hbox,,
border:false,
bodyStyle:'background-color:RGB(193,223,232);padding:lOpxOpxOpx
lOpx,,
items:[{
xtype:*box>,
width:*30',
height/30',
autoEi:{
tag:'img',
src:"icons/6.png'
)
},{
xtype:*panel',
border:false,
bodyStyle:,background-color:RGB(193,223,232);padding:5pxOpx
OpxOpx',
items:[{
xtypc/displayficld't
value:"<ahref=,javascript:onclickriewWindowC"+"找回密
码)><fontsize=2>找回密码</fontX/a>"
}]
}]
}]
},{
xtype:,panel,,
border:false,
width:320,
height:150,
bodyStyle:Jbackground-color:RGB(193,223,232),
iterns:[(
xtype/panel',
layout?form',
border:false,
items:[{
xtype:,form,,
layout:*form',
id:'loginno,,
labclWidth:30,
bodyStyle:*background-color:RGB(193,223,232):padding:
15pxOpxOpxOpx',
border:false,
defaults:{
width:200
},
items:[{
xtype?textfield,,
fieldLabel:,编号',
allowBlank:false
}]
},{
xtype:*form*,
layout:'form',
id/loginpassword*,
labelWidlh:30,
bodyStyle:1bac<ground-color:RGB(193,223,232):padding:
lOpxOpxOpxOpx',
border:faIse,
defaults:{
width:200
),
items:[{
xtype:*textfield',
fieldLabel/密码',
inputType:'password",
allowBlank:false
}]
}]
}]
}]
}]
!);
functionloginO{〃登录验证函数
varformNo=Ext.getCmpf^loginno*);
varformPassword=Ext.getCmp(,,loginpassword/,);
varusername=formNo.items,iterns[0];
varpassword=formPassword.items.iterns[0]:
if(username.getValue().trim()!=""&&password.getValueO.trim()!=""){
Ext.Ajax,request({
urlservlet/LoginServlet,,
success:function(response){
varresult=Ext.decode(response.rcsponscTcxt);
if(result,success){
location,href="index,hlml”;
loginWindow.closeO;
}else{
Wxt.Msg.alert('提醒
,result,msg,function()(
formPassword.getFormO.rcsctO;
I);
};
},
params:{
emd:'login,,
username:username.getValueO.
password:passwoi'd.getValueO.trim()
},
scope:this
}):
}else{
Ext,Msg.alert('提醒','编号和密码全部不能为空!');
)
}
varloginWindow=newExt.Window((〃登录窗口
title:‘用户登录
layout:*fit',
width:400,
height:240,
shadow:true,
shadowOffset:5,
□lain:true,
naximizable:false,
draggable:false,
closable:false,
resizable:false,
animateTarget:document,body,
iterns:[form],
<eys:[{〃给登录按钮添加事件
key:Ext.EventObject.ENTER,
fn:fundion(){
1oginO;
),
scope:this
I],
buttons:[{
icon:'icons/accept.png',
text:'登录',
handler:functionO{
1oginO;
)
I,(
icon:'icons/rss_go.png',
text:'重置',
hand1er:funclion(){
varformNo=Ext.getCmp("loginno");
varformPassword=Ext.getCmp(Mloginpassword*);
formNo.getEormO.reset():
formPassword.getFormO.reset();
)
I]
});
loginWindow.show。;〃显示登录窗口
}):
七、效果截图。
查阅书目
个人资料
6注满
图书金作X
借书三三*/修
3优:I过MW吉I信QQP
借书证号:09000001|◎于定姓名:张一字号:0901010101
I,.............%
图书编号:A300001学院:学院A专北:专业11
班级:专1H109-1Email:skylove@QQ.com
联系电话:666004性别:里
UJIH
编号:A300001
名称:列宁1111己借图书
是否借出:否美号名称作者
计算机俎或原理
图书类型:马克思主义、列宁主义、毛A300006zbh
泽东思想、邓小平理论A300005JAVAWEB李启钱
作者:作者mi
出版时间:20054)2-25
单价:32.5
出版社:人民日报出版科
G笈吾读僭◎借书
o
图书操作
个人览料
°
明书管厚:x
?知行
如*
图书编Q用书名罄SB书兵工是杳僭出作业出收片阊Mffr出政世d
A300001列宁1111马三毛主义.苑亍主.至住考11112005-02-2532.5人三日吸==?.三d
A300001曲小平人艮曰根比云松d
A300001邓小军马克耳ARa»*«e
◎份
A300006子算机至茨京这一人要出版社u©
A300005JAVAWI8社会以人决出版行©
A300007单片机W会注人艮出版z◎
二
A000002高敢哲学.清y出版社/◎
AD0009军事智学..入艮出校七◎
二
A8单月机1杜翎人吴出版社©
骁
10策片机2旱克m清y出粒松0◎
10港书哲学、ERE
图书管理□X
◎方加£?别新
圣书片号国书名程为三类型是否管出作考出版时可单侠出版社
A300001列十1111胃立区主义、列十主.舌作看11112005-02-2532.5人民日杰出我行
A300001大小平马竞.巴主义、列于主.否作拿11112005-02-2532.5人民日缴出吸牡
A300001R小干马三思主乂、列亍主.否作¥11112005-02-2532.5人民已嗖出税七
A300006"算叽维戌?窿芍手、关教是zbh2011-12-091002人民出版行
A300005JAVAWEB社会科多总论是李弓皖2011-12-1012.6人民出债法
A300007成片机行含科竽总论否zbh2011-12-1516,3人民出板世
A000002斐数号学'袤蚊否zbh2011-12-1712.62清多出粒七
A00009军事自学、奈鼓否zbh201M2-0913.5人民出校社
A8里片凯1社会科学息论否生至红2011-12-09100人民出版社
10w片机2马”思主义、列宁主.否黄W音2011-12-09120清冬出版莅
10借书首季*?5e否ZBH2011-12-09100ERE
目理员甘一
作
W号名甘或别^
AOOOOOQ8圣之越运管灌员A
AOOOOOOS老四理薮言理曼&
|A0000002赵一芸近管理员A
A0000004A
A0000001A
•'.
A0000003
⑥清定。在消
管理员管理X
维号名称级别操w作&
A0000008
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026锦泰财产保险股份有限公司招聘系统工程师等岗位4人考试备考题库及答案解析
- 2026年1月内蒙古建元能源集团有限公司招聘206人考试备考试题及答案解析
- 2026年安庆安徽壹方保安公司面向社会公开选聘工作人员考核和综合比选实施考试备考试题及答案解析
- 2026年湖口县公安局交通管理大队公开招聘交通协管员笔试参考题库及答案解析
- 2026江苏南京市栖霞区招聘教师32人笔试备考试题及答案解析
- 2026湖北省面向山东大学普通选调生招录笔试备考试题及答案解析
- 2026 年高职杂技与魔术表演(魔术设计)试题及答案
- 2026年有研(广东)新材料技术研究院招聘备考题库及参考答案详解
- 2026年韶关学院招聘备考题库及一套完整答案详解
- 2026年盐亭发展投资集团有限公司关于公开招聘职能部门及所属子公司工作人员的备考题库及一套答案详解
- 气动元件与基本回路
- 马克思主义中国化理论成果
- 安川机器人IO信对照表
- 永康房地产调研报告课件
- 甘肃省住院医师规范化培训实施方案
- 让课堂焕发生命的活力
- 《赤壁赋》理解性默写汇编(超详细)
- 贵州省安顺市各县区乡镇行政村村庄村名明细及行政区划划分代码居民村民委员会
- 厦门市2016-2017学年上九年级物理试卷及答案
- DB13(J)∕T 8054-2019 市政基础设施工程施工质量验收通用标准
- J-STD-020D[1].1中文版
评论
0/150
提交评论