版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JavaWeb课程设计实验报告班级:计算机09-2实验内容:图书馆管理系统成员:赵伯涛44号(组长)张宝红42号黄海清22号实验时间:从2011年12月3日至2011年12月9日指导老师:李启锐一、实验目的。1、在实践中巩固本学习所学的 JavaWetK术。2、在实践中初步使用设计模式(GoF),体验设计模式带来的好处3、配合数据库的使用,实现一个功能完善的小型系统二、实验内容开发一个图书管理系统,实现图书馆的各种管理操作。如图书入库、作废,借书证提供、挂失处理,图书的借出、归还、续借、丢失以及超期处理。s三、业务逻辑业务流程1m白*华靖若号昼彳“事疝工1口斌,录BLGIN嗅型JL#好炮.灌式
2、.用于宣,、正声、£甘丁格也聿置于程七=在2tti1J习忸=M权限与操作四、数据库设计。根据业务逻辑设计出数据库。表结构及关系如下图:<0吟S? 口国3艇中,座)Cpc t'zvt-i*-Jh.ltini*的、中国;月1»】mFwi式im<盘匕E耳干:彳,> aTrjef «n«J. iyfL9式砌看K»3£'式 E F” 刁.*4 ELrtajr亡法4口32Winr口ImJ粽易口I)。dAp-ihrtowiilQDiniTk:台需。名印,句nNmavu出文。3)th<3(fietitEl常口4
3、jAWLfimU3:小飞再君移”dfjiaTline-ntHwerarclurS5班双美心口工局中盯口zI-sszJTltic.也员土”FurLDtAvl葡抄CT11门13310k3司械以乘“事*kT制,bHXlntJJJut?''brwHjTellDtitcLstCOD:也事蚀看廊外、24片5励4蛇口m£t媪白eLe绰日二注.,崛6T午、进招兵溜墨产二工ta北仁.LDIZllint.五£,3】Tm<R>stuJ4nlNaradkai!ft5>3todenlPaje<arcka£0.5)妒7自史通ttsiHttrl4Tra-
4、iai篇vritai3TRnlkw.1,:谖比L。、<(R,Tn»嶂籁号命f维包制,侑叫Qtiii门”题如北门Ijbr寸尤tIff,七口erw白ar皿丸biiL卬mtv«ri2LMiG5J?"srctar(25i1alfitAtBtf二yjiHIJdw、:rl".i1工口F-arzarjuLHo。妣e代w上;N&t壮jitdfcr-cisttMtPrafibzj-etallint身口坦etktmtzL.ar诳-.JiaiI.'JI1J2ELuJE里囱匾:W:事,嗣启舒小MniZElrai4rs:曲OftELHlg也盘.£L
5、螭自营塞珈1工偎小罩土第1frriksnEi:srdl3<£kl>4g.,口.3同吕建;巾笈:uCJU:一归一一深E冏正普F1国量报的覆强(|,,4£4(,-.血口为叩TFU-像间.陷Bn->>>时冷肚灌覆卷起WJc-£w4型4<士图书三-?辰启:£卜Uf_lU卜白陋行口口boor-JTo二TIT百JSUthflF,blic-st>.iiDalhtri*lb口立国:Q>Ugmb二二h电士勺aiiu血kkIDinX<fVL>o.fniaiEtritcirllLUt<a£>rt
6、4dsmLELt<£fcd>iKrrwfiv'iiiJ七r-?tuarnBalciattiKejsmr-slciit、山paxLbt1HL白J良'iutSfk>Tfarcho-tSD)yu1tM(33)inkvarclurECJ口中的varcir(JD)数据库导入文本保存在DataBaseSQL.txt文档中,数据库数据保存在Data.txt文档中。五、框架结构。采用了类似与MVC匡架的框架结构,页面端使用了ExtJS技术(包含AJAX),增加了业务层和,数据库操作层。控制器层调用业务层,业务层调用数据库操作层。将控制,业务,数据库操作分别分层。六、
7、技术性代码。(本实验的代码在Library.zip中)1、tomcat数据库连接池技术。在tomcat中的配置文件server.xml文件中配置项目Context标签,再加入Resource标签:<Contextpath="LibraryOA"docBase="/home/sea/MyEclipse/LibraryOA/WebRoot"debug="0"><Resourcename="jdbc/webdb”auth="Container”type="javax.sql.DataSourc
8、e”driverClassName="org.gjt.mm.mysql.Driver”url="jdbc:mysql:/localhost:3306/LibraryOA"username="root"password="root"maxActive="50"maxIdle="20"maxWait="10000”/></Context>以上代码配置了数据库驱动,数据库地址,数据库用户名、密码,默认提供的连接数,最大提供的连接数,最长等待时间等参数。2、Java
9、中从连接池获取连接的类,使用了单例模式(来自GoF提出的设计模式):/DataBaseConnectionPond.javapackagelibrary.util;importjava.sql.Connection;importjavax.sql.DataSource;/作者:赵伯涛publicclassDataBaseConnectionPondprivatestaticDataBaseConnectionPonddbcp=null;privateDataSourceds=null;privateDataBaseConnectionPond。throwsExceptionjavax.nami
10、ng.Contextctx=newjavax.naming.InitialContext();ds=(DataSource)ctx.lookup("java:/comp/env/jdbc/webdb");publicConnectionGetConnettion()throwsExceptionreturnds.getConnection();publicstaticConnectiongetConnection()throwsExceptionConnectionconn=null;if(dbcp=null)Thread.sleep(long)(Math.random()
11、*200);synchronized(DataBaseConnectionPond.class)if(dbcp=null)dbcp=newDataBaseConnectionPond();tryconn=dbcp.GetConnettion();catch(Exceptione)returnconn;该类在整个项目部署的过程中只实例化了一个对象,故称单例。可以通过该类的static函数getConnection()获取连接。3、Dao(DataAccessObject)的模板化实现,使用了模板方法模式(来自GoF提出的设计模式):/SqlExecute.javapackagelibrary.e
12、xecute;importjava.sql.Connection;importlibrary.util.*;/作者:赵伯涛publicabstractclassSqlExecutepublicConnectionconn;publicObjectresult;publicabstractvoidsetExecute()throwsException;publicObjectexecute()tryconn=DataBaseConnectionPond.getConnection();conn.setAutoCommit(false);setExecute();mit();catch(Excep
13、tione)tryconn.rollback();catch(Exceptionee)e.printStackTrace();finallytryconn.close();catch(Exceptione)returnresult;该类是一个抽象类,必须通过继承该类来实现具体的功能,其中的execute。函数是一个模板方法,将try-catch-finaly、获取connection及connection的事务处理提取出来,具体Dao的功能应该写在setExecute()函数中,在具体实现Dao的功能的时候可以不用重复这些代码,方便程序员编码,也方便程序员维护程序。下面举例使用这个模板类:Re
14、aderChangePasswordDao.javapackagelibrary.dao;importjava.sql.PreparedStatement;importlibrary.execute.SqlExecute;importlibrary.model.ReaderModel;/作者:赵伯涛publicclassReaderChangePasswordDaoextendsSqlExecuteprivateReaderModelrm;/传入readerID,password,password2(旧密码)/返回影响行数publicReaderChangePasswordDaoReaderM
15、odelrm)this.rm=rm;OverridepublicvoidsetExecute()throwsExceptionStringsql="updateReaderssetpassword=?wherereaderlD=?andpassword=?"PreparedStatementps=conn.prepareStatement(sql);ps.setString(1,rm.getPassword();ps.setInt(2,rm.getReaderID();ps.setString(3,rm.getPassword2();this.result=ps.execu
16、teUpdate();上面的类继承了SqlExecute类,重写了它的setExecute()函数,通过构造函数传入操作时需要的参数,在写代码的时候可以更加专注于数据库的操作,因为其它操作由模板类做好了。这对写一个数据库操作或许没什么大不了的,但是一个项目里边数据库操作肯定是几十个,几百个,甚至几千个,使用模板类减少的编码量是非常客观的。下面举例使用ReaderChangePasswordDa赍:来自UserCommonService.java的部分代码/读者修改密码publicbooleanreaderChangePassword(intreaderID,StringnewPassword,
17、StringoldPassword)ReaderModelrm=newReaderModel();rm.setReaderID(readerID);rm.setPassword(newPassword);rm.setPassword2(oldPassword);ReaderChangePasswordDaorcpd=newReaderChangePasswordDao(rm);intcount=(Integer)rcpd.execute();if(count>0)returntrue;elsereturnfalse;I注意:使用Dao的时候调用的应该是它的execute。方法(在抽象类中
18、)4、时间显示varcTime=newDate();/初始化日期varmyYear=cTime.getFullYear();年varmyMonth=cTime.getMonth()+1;/月varmyDate=cTime.getDate();/日/获得时分秒varmyHour=cTime.getHours();/时varmyMinute=cTime.getMinutes();/分varmySecond=cTime.getSeconds();/秒if(myHour<10)/判断如果时钟小于10就显示两位,前一位用0代替myHour='0'+myHour;if(myMinut
19、e<10)/判断如果分钟小于10就显示两位,前一位用0代替myMinute='0'+myMinute;if(mySecond<10)/判断如果分秒钟小于10就显示两位,前一位用0代替mySecond='0'+mySecond;vartime=time=myYear+'/'+myMonth+'/'+myDate+''+myHour+':'+myMinute+':'+mySecond;/格式化时间var timer = setInterval(function() /定义一个
20、时钟,周期为 1秒varcTime=newDate();varmyYear=cTime.getFullYear();支持火狐varmyMonth=cTime.getMonth()+1;/外国都是以0开头为一月varmyDate=cTime.getDate();/获得时分秒varmyHour=cTime.getHours();varmyMinute=cTime.getMinutes();varmySecond=cTime.getSeconds();if(myHour<10)myHour='0'+myHour;if(myMinute<10)myMinute='0
21、'+myMinute;if(mySecond<10)mySecond='0'+mySecond;varcmp=Ext.getCmp("timer");time=myYear+7'+myMonth+7'+myDate+''+myHour+':'+myMinute+':'+mySecond;cmp.setValue(time);,1000);5、登录控制/登录界面Ext.onReady(function()Ext.QuickTips.init();varform=newExt.Pane
22、l(/登录验证的formautoTabs:true,activeTab:0,deferredRender:false,border:false,bodyStyle:"background-color:RGB(193,223,232);padding:0px0px0px0px;",items:xtype:'box',width:385,height:80,autoEl:tag:'img',src:'icons/borrowbooks.jpg',xtype:'panel',bodyStyle:'backgr
23、ound-color:RGB(193,223,232);',layout:'hbox',items:xtype:'panel',bodyStyle:'background-color:RGB(193,223,232);',border:false,width:120,height:150,items:xtype:'panel',layout:'hbox',border:false,bodyStyle:'background-color:RGB(193,223,232);padding:10Px0px
24、0px10px',items:xtype:'box',width:'30',height:'30',autoEl:tag:'img',src:'icons/0.png',xtype:'panel',border:false,bodyStyle:'background-color:RGB(193,223,232);padding:5px0px0px0px',items:xtype:'displayfield',value:"<ahref='
25、;javascript:;'onclick=viewWindow("'+s0+"')><fontsize=2>查阅书目</font></a>",xtype:'panel',layout:'hbox',border:false,bodyStyle:'background-color:RGB(193,223,232);padding:10Px0px0px10px',items:xtype:'box',width:'30&
26、#39;,height:'30',autoEl:tag:'img',src:'icons/6.png',xtype:'panel',border:false,bodyStyle:'background-color:RGB(193,223,232);padding:5px0px0px0px',items:找回密xtype:'displayfield',value:"<ahref='javascript:;'onclick=viewWindow("'+&
27、quot;码"+"')><fontsize=2>找回密码</font></a>",xtype:'panel',border:false,width:320,height:150,bodyStyle:'background-color:RGB(193,223,232);',items:xtype:'panel',layout:'form',border:false,items:15px0px0px0px',10px0px0px0px',x
28、type:'form',layout:'form',id:'loginno',labelWidth:30,bodyStyle:'background-color:RGB(193,223,232);padding:border:false,defaults:width:200,items:xtype:'textfield',fieldLabel:'编号',allowBlank:falsextype:'form',layout:'form',id:'loginpasswo
29、rd',labelWidth:30,bodyStyle:'background-color:RGB(193,223,232);padding:border:false,defaults:width:200,items:xtype:'textfield',fieldLabel:'密码',inputType:'password',allowBlank:false);functionlogin()/登录验证函数varformNo=Ext.getCmp("loginno");varformPassword=Ext.ge
30、tCmp("loginpassword");varusername=formNo.items.items0;varpassword=formPassword.items.items0;if(username.getValue().trim()!=""&&password.getValue().trim()!="")Ext.Ajax.request(url:'servlet/LoginServlet',success:function(response)varresult=Ext.decode(respo
31、nse.responseText);if(result.success)location.href="index.html"loginWindow.close();elseExt.Msg.alert('提示,result.msg,function()formPassword.getForm().reset(););,params:cmd:'login',username:username.getValue().trim(),password:password.getValue().trim(),scope:this);elseExt.Msg.aler
32、t('提示','编号和密码都不能为空!');va门oginWindow=newExt.Window(/登录窗口title:'用户登录',layout:'fit',width:400,height:240,shadow:true,shadowOffset:5,plain:true,maximizable:false,draggable:false,closable:false,resizable:false,animateTarget:document.body,items:form,keys:/给登录按钮添加事件key:Ext.E
33、ventObject.ENTER,fn:function()login();,scope:this,buttons:icon:'icons/accept.png',text:'登录',handler:function()login();,icon:'icons/rss_go.png',text:'重置',handler:function()varformNo=Ext.getCmp("loginno");varformPassword=Ext.getCmp("loginpassword");formNo.getForm().reset();formPassword.getForm().reset(););loginWindow.show();/显示登录窗口);七、效果截图图书操作图书证管理个人资料IB书付埋 X6”题图相密闻个人iim口号名警AGOOOOQ8整七A0000005理四A0000002起一AOOOOOO4望:AM00001A0000003起:国迎&&&冬管理员管理息邓加a用等页号名称A0000008tieAOO00005包四A0000002赵一A0000004赵;AOOOOO01电:A0000003超信号名誉A030
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026卫辉招教面试题目及答案
- 2026线上发展面试题及答案
- (2026年)亲人之间房产买卖合同范本
- 2025-2026学年河南省信阳市浉河区新时代学校数学三年级第二学期期末检测试题(含答案解析)
- 2025-2026学年河北省涞源县晶华学校四年级数学下学期期末考试模拟试题(含解析)
- 2025-2026学年河北省唐山市丰南区数学四年级下学期期中质量跟踪监视模拟试题含答案
- 2025-2026学年江西省抚州市临川区四年级数学第二学期期中达标测试试题(含答案解析)
- 重庆农业职业学院招聘笔试真题2025
- 东营广饶县乐安街道城镇公益性岗位招聘笔试真题2025
- 2025-2026学年江西省上饶市弋阳县三年级数学第二学期期中检测模拟试题含解析
- 2025年Q1起重机指挥模拟考试题库(附答案)
- 食堂食材配送采购项目之质量保障措施
- 血管外科进修汇报
- 2024版电网典型设计10kV配电站房分册
- 销轴类零件设计规范
- T/CCMA 0146-2023隧道施工电机车锂电池系统技术规范
- T/CAQI 96-2019产品质量鉴定程序规范总则
- 《新能源汽车保养与维护》课件 任务六 电机及驱动系统维护与保养
- 《初中物理光学》课件
- 《运动治疗技术》课件-pnf技术
- 国家职业技术技能标准 6-29-03-03 电梯安装维修工 人社厅发2018145号
评论
0/150
提交评论