




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JavaWeb课程设计 实验报告 班级: 计算机09-2 实验内容: 图书馆管理系统 成员: 赵伯涛44号(组长) 张宝红42号 黄海清22号 实验时间: 从2011年12月3日 至2011年12月9日 指导老师: 李启锐 、实验目的。 1、在实践中巩固本学习所学的 JavaWeb技术。 2、在实践中初步使用设计模式(GoF),体验设计模式带来的好处 3、配合数据库的使用,实现一个功能完善的小型系统。 二、实验内容。 开发一个图书管理系统,实现图书馆的各种管理操作。如图书入库、作 废,借书证提供、挂失处理,图书的借出、归还、续借、丢失以及超期处 理。s 三、业务逻辑。 BLGIN 业务流程 权
2、限与操作 四、数据库设计。 根据业务逻辑设计出数据库。表结构及关系如下图: ei c:瓷 |m 他工口ImiJt1 娱覇立。towiilQD iniTk : 0養He林*他肉中址弘宜e.雪) Sjrst PiPir ar*-1: er -5lB S? 19 c htlrtcvCor.in.lL ini w 甲皿月) ini 的E k:宁:; fL百典 如勇m:” . iattBli. as 丄迪Bkd: Ikj门 TiM zl-sssJf me var 止 n* ILi二nr*賢中包 JS.jthflF bl 3 C-bI J . 11D1 M tri x li!jd!CCLh-Ani Jjl
3、i i戯 TfflJcll43- C37I ) vucliu* (3Q) iat varcliir C3. I du.C.4 yariAT 口C 1 巾k ?fk I-4-f TP iwl -l - ypnj-S iat 唇=in“ =-tu4iiiJD Ulf 3 i hr slf 區 JJTl QWdlhAJ Q5-J pa.smrwd. t r ct nr 125 J 古勞逊“ borrov鼻址皿1 db lht fit at 蘇盘临n Be ksBec wr dl -警闵帖41 b 二okah 电iiu 乂! ;护 WtiikID l b t 沖眦mW afniui e Er-itir
4、I3 LELt 孟兰 4dcri0 LELt 0冷日匚IT - JE 彳苗诬日罰; 2 J是若*借让为设槪稲,IJ*)BMI FftymB-sifl =Kstv-1 iatt Eiit 防十启月产|: 3 gUFBk kbt 数据库导入文本保存在 DataBaseSQL.txt文档中,数据库数据保存在 Data.txt 文档中。 五、框架结构。 servlet控制器 业务层 Dao数据库操作层 Bean t Datab呂se WEB浏览器ExtJS 采用了类似与MVC匡架的框架结构,页面端使用了 ExtJS技术(包含 AJAX),增加了业务层和,数据库操作层。控制器层调用业务层,业务层调 用数
5、据库操作层。将控制,业务,数据库操作分别分层。 六、技术性代码。 (本实验的代码在Library.zip 中) 1、tomcat数据库连接池技术。在tomcat中的配置文件server.xml 文件中配置项目Con text标签,再加入 Resource标签: 以上代码配置了数据库驱动,数据库地址,数据库用户名、密码,默认 提供的连接数,最大提供的连接数,最长等待时间等参数。 2、Java中从连接池获取连接 的类,使用了单例模式(来自GoF提出的 设计模式): / DataBaseConnectionPond.java package library.util; import java.sql
6、.C onn ecti on; import javax.sql.DataSource; /作者:赵伯涛 public class DataBaseC onnectionPond private static DataBaseCo nn ecti onPond dbcp = nu II; private DataSource ds = nu II; private DataBaseC onnectionPon d() throws Excepti on javax .namin g.C on text ctx = new javax. nami ng.In itialC on text();
7、ds = (DataSource) ctx.lo okup(java:/comp/e nv/jdbc/webdb); public Conn ecti on GetC onn ettio n() throws Excepti on retur n ds.getC onn ecti on(); public static Connection getCo nn ecti on()throws Excepti on Conn ecti on conn = n ull; if (dbcp = n ull) Thread.sleep(long) (Math.random() * 200); synch
8、roni zed (DataBaseC onn ectio nPon d.class) if (dbcp = n ull) dbcp = new DataBaseC onnectionPon d(); try conn = dbcp.GetC onn etti on(); catch (Excepti on e) retur n conn; 该类在整个项目部署的过程中只实例化了一个对象,故称单例。可以通 过该类的static 函数getConnection() 获取连接。 3、Dao(Data Access Object)的模板化实现,使用了模板方法模式(来 自GoF提出的设计模式): /Sq
9、lExecute.java package library.execute; import java.sql.C onn ecti on; import library.util.*; /作者:赵伯涛 public abstract class SqlExecute public Conn ecti on conn; public Object result; public abstract void setExecute() throws Exceptio n; public Object execute() try conn = DataBaseC onn ectio nPon d.get
10、C onn ectio n(); conn .setAutoCommit(false); setExecute(); conn. commit(); catch (Excepti on e) try conn .rollback。; catch (Exceptio n ee) e.pri ntStackTrace(); fin ally try conn. close(); catch (Exceptio n e) return result; 该类是一个抽象类,必须通过继承该类来实现具体的功能,其中的 execute()函数是一个模板方法,将 try-catch-fi naly 、获取 co
11、nn ection 及conn ection的事务处理提取出来,具体Dao的功能应该写在setExecute() 函数中,在具体实现Dao的功能的时候可以不用重复这些代码,方便程序 员编码,也方便程序员维护程序。下面举例使用这个模板类: /ReaderCha ngePasswordDao.java package library.dao; import java.sql.PreparedStateme nt; import library.execute.SqlExecute; import library.model.ReaderModel; /作者:赵伯涛 public class Rea
12、derCha ngePasswordDao exte nds SqlExecute private ReaderModel rm; / 传入 readerID, password, password2( 旧密码) /返回影响行数 public ReaderCha ngePasswordDa(ReaderModel rm) this.rm = rm; Override public void setExecute() throws Excepti on Stri ng sql = update Readers set password = ? where readerlD = ? and pas
13、sword = ?; PreparedStateme nt ps = conn .prepareStateme nt(sql); ps.setStri ng(1, rm.getPassword(); ps.setl nt(2, rm.getReaderlD(); ps.setStri ng(3, rm.getPassword2(); this.result = ps.executeUpdate(); 上面的类 继承了 SqlExecute类,重写了它的setExecute()函数,通过 构造函数传入操作时需要的参数,在写代码的时候可以更加专注于数据库 的操作,因为其它操作由模板类做好了。这对写
14、一个数据库操作或许没什 么大不了的,但是一个项目里边数据库操作肯定是几十个,几百个,甚至 几千个,使用模板类减少的编码量是非常客观的。下面举例使用 ReaderCha ngePasswordDa类: / 来自 UserCommonService.java 的部分代码 /读者修改密码 public boolea n readerCha ngePassword(i nt readerlD, String n ewPassword, Stri ng oldPassword) ReaderModel rm = new ReaderModel(); rm.setReaderlD(readerlD); r
15、m.setPassword( newPassword); rm.setPassword2(oldPassword); ReaderCha ngePasswordDao rcpd = new ReaderCha ngePasswordDao(rm); int count = (In teger)rcpd.execute(); if (count 0) return true; else return false; 丨 注意:使用Dao的时候调用的应该是它的execute。方法(在抽象类中)。 4、时间显示 var cTime=new Date();/初始化日期 var myYear=cTime.
16、getFullYear(); var myMonth=cTime.getMonth()+1;月 var myDate=cTime.getDate(); /获得时分秒 var myHour=cTime.getHours(); var myMinute=cTime.getMinutes(); var mySecond=cTime.getSeconds(); if(myHour 10)/判断如果时钟小于 秒 10就显示两位,前一位用 0代替 myHour = O + myHour; if(myMinute 10)/判断如果分钟小于10就显示两位,前一位用0代替 myMinute = 0 + myMi
17、nute; if(mySecond 10)/判断如果分秒钟小于10就显示两位,前一位用 0代替 mySecond = 0 + mySecond; var time=time= myYea 叶7+myMonth+/+myDate+ +myHour+:+myMinute+:+mySecond;格式化时间 var timer = setlnterval(function() / 定义一个时钟,周期为1秒 var cTime=new Date(); var myYear=cTime.getFullYear(); 支持火狐 var myMonth=cTime.getMonth()+1; 外国都是以0开头
18、为一月 var myDate=cTime.getDate(); /获得时分秒 var myHour=cTime.getHours(); var myMinute=cTime.getMinutes(); var mySecond=cTime.getSeconds(); if(myHour 10) myHour = 0 + myHour; if(myMinute 10) myMinute = 0 + myMinute; if(mySecond 10) mySecond = 0 + mySecond; var cmp = Ext.getCmp(timer); time= myYear+/+myMon
19、th+7+myDate+ +myHour+:+myMinute+:+mySecond; cmp.setValue(time); , 1000); 5、登录控制 /登录界面 Ext.onReady(function() Ext.QuickTips.init(); var form = new Ext.Panel( /登录验证的 form autoTabs:true, activeTab:0, deferredRender:false, border:false, bodyStyle : background-color:RGB(193,223,232);padding:0px 0px 0px 0
20、px;, items: xtype:box, width:385, height:80, autoEl: tag:img, src:icons/borrowbooks.jpg , xtype:panel, bodyStyle:background-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, bo
21、rder:false, bodyStyle:background-color:RGB(193,223,232);padding: 1Opx Opx Opx 1Opx, items: xtype:box, width:3O, height:3O, autoEI: tag:img, src:icons/O.png , xtype:panel, border:false, bodyStyle:background-color:RGB(193,223,232);padding: 5px Opx Opx Opx, items: xtype:displayfield, value:vfont size=2
22、查阅书目 v/a , xtype:panel, layout:hbox, border:false, bodyStyle:background-color:RGB(193,223,232);padding: 1Opx Opx Opx 1Opx, items: xtype:box, width:3O, height:3O, autoEl: tag:img, src:icons/6.png , xtype:panel, border:false, bodyStyle:background-color:RGB(193,223,232);padding: 5px Opx Opx Opx, 码+)vfo
23、nt size=2 15px Opx Opx Opx, 1Opx Opx Opx Opx, items: xtype:displayfield, value:a href=javascript:; onclick=viewWindow(+找回密 找回密码v/a , xtype:panel, border:false, width:32O, height:15O, bodyStyle:background-color:RGB(193,223,232);, items: xtype:panel, layout:form, border:false, items: xtype:form, layou
24、t:form, id:loginno, labelWidth:3O, bodyStyle:background-color:RGB(193,223,232);padding: border:false, defaults: width:2OO , items: xtype:textfield, fieldLabel: 编号, allowBlank:false , xtype:form, layout:form, id:loginpassword, labelWidth:3O, bodyStyle:background-color:RGB(193,223,232);padding: border
25、:false, defaults: width:2OO , items: xtype:textfield, fieldLabel: 密码, inputType:password, allowBlank:false ); function login() /登录验证函数 var formNo = Ext.getCmp(loginno); var formPassword = Ext.getCmp(loginpassword); var username = formNo.items.items0; var password = formPassword.items.items0; if(user
26、name.getValue().trim() != if(result.success) location.href = index.html; loginWindow.close(); else Ext.Msg.alert( 提示 ,result.msg,function() formPassword.getForm().reset(); ); ; , params: cmd:login, username:username.getValue().trim(), password:password.getValue().trim() , scope:this ); else Ext.Msg.
27、alert(提示,编号和密码都不能为空!); var loginWindow = new Ext.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.EventObje
28、ct.ENTER, fn:function() login(); , scope:this , buttons: icon: icons/accept.png, text:登录, handler: function() login(); , icon:icons/rss_go.png, text:重置, handler:function() var formNo = Ext.getCmp(loginno); var formPassword = Ext.getCmp(loginpassword); formNo.getForm().reset(); formPassword.getForm()
29、.reset(); ); loginWindow.show();/ 显示登录窗口 ); 七、效果截图 至东思想、邓小平理论 作者: 作者1111 出版时间: 2005-02-25 单价: 32.5 出Jfe社: 人民曰鼬版杜 图韦类型:马克思主义、列宁主义、毛 W号 A30300S zbh A30J005 JA/AWE9 .书接作gj 倡书证弓: 09000001 毗| 姓容: 张一 学号: 0901010101 附聘: A300001 学院: 学院A 吉业: 专业11 班级: 专业11 09-1 EmaJ: s A6 跟 Htf 10 忌片机2 10 倩毛 甘学. 呂我 E誉专:Li住老 3
30、2.5 会科 匕会时 写2S ffcH11 2005 02 25 人匡日吸也松址 丿、艮日?农吐 人巨歩士 )、Rbe 人艮出暇吐 ZEt8e 肩幺出较七 人 Rtse 人乏匕牧二 冷0吕较二 EHE X 03Goo 鋼 Q T Q J , J J Y n-x 少盪龙ejs 苗君編兮 354;名称 32! 是否儈也 住耆 也敬尸间 AM0M1 二二粵宝立?I-. 5 2WXL0X 壬 6 人 A309001 耶小平 耳之电至2.男u至 S n*mi 200542-25 325 人& A300C01 利、干 W立居主义列了主. 5 f%mi 2C05-C2-2J 325 人3ne AXDC06 n2mS3 衰怎 A zbh 2C11-12-CS 1002 人民出版吐 A300C05 JAVAWEB 七会彩农百论 是 2?Bfe 2C11 12-1C 126
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度土地承包经营权流转税收优惠政策协议
- 2025年度海洋工程高级技术师承合同协议书
- 2025年度民政局常用协议离婚格式范本
- 二零二五年度学生就读协议书:学生志愿服务项目合作协议
- 二零二五年度房屋产权公证及法律风险防范协议
- 2025年度电力行业技术人员聘用合同书
- 二零二五年度山林碳汇交易租赁合同
- 2025年度门店合伙人突发事件应对与应急预案合同
- 二零二五年度个体户雇工技能培训与职业发展合同
- 余姚中学2024学年第二学期质量检测高二历史试卷(含答案)
- 盟史简介12.10.18课件
- 控制性详细规划技术路线(图文)
- 加臭机加臭作业风险点辨识及控制措施表JSA
- 第四节道亨slw2d架空送电线路评断面处理及定位设计系统部分操作说明
- 常用汉字3000个按使用频率排序
- GB/T 3860-2009文献主题标引规则
- GB/T 2912.3-2009纺织品甲醛的测定第3部分:高效液相色谱法
- 诗词大会训练题库-十二宫格课件
- 胚胎工程的应用及前景说课课件
- xx县精神病医院建设项目可行性研究报告
- DB13T 5080-2019 SBS改性沥青生产过程动态质量监控规范
评论
0/150
提交评论