第15章课程设计——图书馆管理系统(JSP应用开发与实战)课件.ppt

上传人:知****量 文档编号:73766086 上传时间:2023-02-22 格式:PPT 页数:61 大小:2.53MB
返回 下载 相关 举报
第15章课程设计——图书馆管理系统(JSP应用开发与实战)课件.ppt_第1页
第1页 / 共61页
第15章课程设计——图书馆管理系统(JSP应用开发与实战)课件.ppt_第2页
第2页 / 共61页
点击查看更多>>
资源描述

《第15章课程设计——图书馆管理系统(JSP应用开发与实战)课件.ppt》由会员分享,可在线阅读,更多相关《第15章课程设计——图书馆管理系统(JSP应用开发与实战)课件.ppt(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、本章要求本章要求:第第1515章章 课程设计课程设计图书馆管理系统图书馆管理系统u图书馆管理系统的设计目的u图书馆管理系统的开发环境要求u图书馆管理系统的功能结构及系统流程u图书馆管理系统的数据库设计u主要功能模块的界面设计u主要功能模块的关键代码u图书馆管理系统的调试运行主要内容主要内容1.课程设计目的2.功能描述3.总体设计4.数据库设计5.实现过程6.调试运行7.课程设计总结第第1515章章 课程设计课程设计图书馆管理系统图书馆管理系统15.1 15.1 课程设计目的课程设计目的 本章提供了“图书馆管理系统”作为这一学期的课程设计之一,本次课程设计旨在提升学生的动手能力,加强大家对专业理

2、论知识的理解和实际应用。本次课程设计的主要目的如下:加深对面向对象程序设计思想的理解,能对网站功能进行分析,并设计合理的类结构。p掌握JSP网站的基本开发流程。p掌握JDBC技术在实际开发中的应用。p掌握Servlet技术在实际开发中的应用。p掌握JSP经典设计模式中Model2的开发流程。p提供网站的开发能力,能够运用合理的控制流程编写高效的代码。p培养分析问题、解决实际问题的能力。15.2 15.2 功能描述功能描述图书馆管理系统是一个小型的图书馆管理系统,该系统的主要功能如下:p美观友好的操作界面,能保证系统的易用性。p管理图书类型信息、图书信息和书架信息等功能。p读者类型和读者档案管理

3、功能。p可以实现图书的借阅、续借和归还功能。p提供查看图书借阅排行榜功能。p具有借阅到期提醒功能。p查询图书借阅信息。p图书档案查询功能。图书馆管理系统的开发环境具体要求如下:p开发平台:Windows XP(SP2)/Windows Server 2003(SP2)/Windows 7。p开发技术:JSP+Servlet+HTML 5+JavaScript。p后台数据库:MySQL。pJava开发包:Java SE Development KET(JDK)version 7 Update 3。pWeb服务器:Tomcat 7.0.27。p浏览器:IE 9.0以上版本、Firefox等。p分辨

4、率:最佳效果1024768像素。15.3.1 15.3.1 构建开发环境构建开发环境 在图书馆管理系统中主要包含6大功能模块,分别为系统设置模块、读者管理模块、图书管理模块、图书借还模块、系统查询模块和更改口令模块,它们的具体介绍如下:p系统设置:用来对系统的一些基础参数进行设置,主要包括图书管理信息、管理员设置、参数设置、书架设置等。p读者管理:用来对读者类型和读者档案进行管理,主要包括读者类型管理和读者档案管理等。p图书管理:用来对图书类型和图书档案进行管理,主要包括图书类型设置和图书档案管理等。p图书借还:用来实现图书的借阅、续借和归还,主要包括图书借阅、图书续借、图书归还等。p系统查询

5、:用来实现图书和借阅信息的查询,主要包括图书档案查询、图书借阅查询、借阅到期提醒等。p更改口令:主要用于修改登录管理员的密码。15.3.2 15.3.2 网站功能结构网站功能结构图书馆管理系统的功能结构图如图15-1所示。图15-1 图书馆管理系统的功能结构图15.4 15.4 数据库设数据库设15.4.1 实体图15.4.2 数据表设计 根据对系统所做的需求分析,规划出本系统中使用的数据库实体分别为图书档案实体、读者档案实体、图书借阅实体、图书归还实体和管理员实体。下面将介绍几个关键实体的实体图。p图书档案实体 图书档案实体包括编号、条形码、书名、类型、作者、译者、出版社、价格、页码、书架、

6、库存总量、录入时间、操作员和是否删除等属性。其中“是否删除属性”用于标记图书是否被删除,由于图书馆中的图书信息不可以被随意删除,所以即使当某种图书不能再借阅,而需要删除其档案信息时,也只能采用设置删除标记的方法。图书档案实体的实体图如图15-3所示。图15-3 图书档案实体图15.4.1 15.4.1 实体图实体图p借阅档案实体 借阅档案实体包括编号、读者编号、图书编号、借书时间、应还时间、操作员和是否归还等属性。借阅档案实体的实体图如图15-5所示。图15-5 借阅档案实体图结合实际情况及对用户需求的分析,图书馆管理系统的db_library数据库中需要创建如图15-7所示的12张数据表。图

7、15-7 db_library数据库所包含的数据表15.4.2 15.4.2 数据表设计数据表设计下面将给出这些数据表的结构及说明。ptb_manager(管理员信息表)管理员信息表主要用来保存管理员信息。表tb_manager的结构如表15-1所示。表15-1表tb_manager的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自动编号)nameVARCHAR(30)YesNULL管 理 员名称pwdVARCHAR(30)YesNULL密码ptb_bookinfo(图书信息表)图书信息表主要用来保存图书信息。表

8、tb_bookinfo的结构如表15-3所示。表15-3表tb_bookinfo的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述barcodeVARCHAR(30)YesNULL条形码booknameVARCHAR(70)YesNULL书名typeidINT(10)unsignedYesNULL类型authorVARCHAR(30)YesNULL作者translatorVARCHAR(30)YesNULL译者ISBNVARCHAR(20)YesNULL出版社priceFLOAT(8,2)YesNULL价格pageINT(10)UnsignedYesNULL页码b

9、ookcaseINT(10)UnsignedYesNULL书架inTimeDATEYesNULL录入时间operatorVARCHAR(30)YesNULL操作员TINYINT(1)Yes0是否删除idINT(11)NoYesID(自动编号)ptb_parameter(参数设置表)参数设置表主要用来保存办证费及书证的有效期限等信息。表tb_parameter的结构如表15-4所示。表15-4表tb_parameter的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自动编号)costINT(10)UnsignedY

10、esNULL办证费validityINT(10)UnsignedYesNULL有效期限ptb_booktype(图书类型表)图书类型表主要用来保存图书类型信息。表tb_booktype的结构如表15-5所示。表15-5表tb_booktype的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自动编号)typenameVARCHAR(30)YesNULL类 型 名称daysINT(10)UnsignedYesNULL可 借 天数ptb_bookcase(书架信息表)书架信息表主要用来保存书架信息。表tb_bookca

11、se的结构如表15-6所示。表15-6表tb_bookcase的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自动编号)nameVARCHAR(30)YesNULL书 架 名称ptb_borrow(图书借阅信息表)图书借阅信息表主要用来保存图书借阅信息。表tb_borrow的结构如表15-7所示。表15-7表tb_borrow的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自动编号)readeridINT(10)UnsignedYe

12、sNULL读 者 编号bookidINT(10)YesNULL图 书 编号borrowTimeDATEYesNULL借 书 时间backtimeDATEYesNULL应 还 时间operatorVARCHAR(30)YesNULL操作员ifbackTINYTIN(1)Yes0是 否 归还ptb_readertype(读者类型信息表)读者类型信息表主要用来保存读者类型信息。表tb_readertype的结构如表15-9所示。表15-9表tb_readertype的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自动编

13、号)nameVARCHAR(50)YesNULL名称numberINT(4)YesNULL可 借 数量ptb_reader(读者信息表)读者信息表主要用来保存读者信息。表tb_reader的结构如表15-10所示。表15-10表tb_reader的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自动编号)nameVARCHAR(20)YesNULL姓名sexVARCHAR(4)YesNULL性别barcodeVARCHAR(30)YesNULL条形码vocationVARCHAR(50)YesNULL职业birth

14、dayDATEYesNULL出生日期paperTypeVARCHAR(10)YesNULL有效证件paperNOVARCHAR(20)YesNULL证件号码telVARCHAR(20)YesNULL电话emailVARCHAR(100)YesNULL电子邮件createDateDATEYesNULL登记日期operatorVARCHAR(30)YesNULL操作员remarkTEXTYesNULL备注typeidINT(11)YesNULL类型ptb_library(图书馆信息表)图书馆信息表主要用来保存图书馆信息。表tb_library的结构如表15-11所示。表15-11表tb_libra

15、ry的结构及说明字 段 名数 据 类 型是 否 为 空是 否 主 键默 认 值描 述idINT(10)UnsignedNoYesID(自 动编号)librarynameVARCHAR(50)YesNULL图书馆名称curatorVARCHAR(10)YesNULL馆长telVARCHAR(20)YesNULL联系电话addressVARCHAR(100)YesNULL联系地址emailVARCHAR(100)YesNULL联系邮箱urlVARCHAR(100)YesNULL图书馆网址createDateDATEYesNULL建馆时间introduceTEXTYesNULL图书馆简介15.5 1

16、5.5 实现过程实现过程15.5.1 系统登录设计15.5.2 主界面设计15.5.3 图书借阅设计15.5.4 图书续借设计15.5.5 图书归还设计 系统登录是进入图书馆管理系统的入口。在运行本系统后,首先进入的是系统登录页面,在该页面中,系统管理员可以通过输入正确的管理员名称和密码登录到系统,当用户未输入管理员名称或密码时,系统会通过JavaScript进行判断,并给予提示信息。系统登录的运行结果如图15-8所示。图15-8 系统登录的设计结果15.5.1 15.5.1 系统登录设计系统登录设计编写自定义的JavaScript函数,用于判断管理员名称和密码是否为空。代码如下:functi

17、on check(form)if(form.name.value=)/判断管理员名称是否为空alert(请输入管理员名称!);form.name.focus();return false;if(form.pwd.value=)/判断密码是否为空alert(请输入密码!);form.pwd.focus();return false;2关键代码 在实现系统登录时,主要是如何在Servlet中获取提交的登录信息,以及验证输入的管理员信息是否合法,如果合法则将将页面重定向到系统主界面,否则给出提示信息。这时将涉及到以下两个方法。/在Servlet中编写的方法,用于获取提交的登录信息,以及调用DAO方法

18、验证登录信息,/并根据验证结果做出相应的处理public void managerLogin(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException ManagerForm managerForm=new ManagerForm();/实例化managerForm类managerForm.setName(request.getParameter(name);/获取管理员名称并设置name属性managerForm.setPwd(request.getParameter

19、(pwd);/获取管理员密码并设置pwd属性/调用ManagerDAO类的checkManager()方法int ret=managerDAO.checkManager(managerForm);if(ret=1)/*将登录到系统的管理员名称保存到session中*/HttpSession session=request.getSession();session.setAttribute(manager,managerForm.getName();/*/转到系统主界面request.getRequestDispatcher(main.jsp).forward(request,response)

20、;else request.setAttribute(error,您输入的管理员名称或密码错误!);request.getRequestDispatcher(error.jsp).forward(request,response);/转到错误提示页public int checkManager(ManagerForm managerForm)int flag=0;/标记变量,值为0时表示不成功,值为1时表示成功/连接SQL语句,并过滤管理员名称中的危险字符String sql=SELECT*FROM tb_manager where name=+ChStr.filterStr(managerF

21、orm.getName()+;ResultSet rs=conn.executeQuery(sql);try if(rs.next()/获取输入的密码并过滤输入字符串中的危险字符String pwd=ChStr.filterStr(managerForm.getPwd();if(pwd.equals(rs.getString(3)flag=1;/表示验证成功 else flag=0;/表示验证不成功 else flag=0;/表示验证不成功 catch(SQLException ex)flag=0;/表示验证不成功 finally conn.close();/关闭数据库连接return fla

22、g;在实现系统登录时,从网站安全的角度考虑,仅仅上面介绍的系统登录页面并不能有效的保存系统的安全,一旦系统主界面的地址被他人获得,就可以通过在地址栏中输入系统的主界面地址而直接进入到系统中。这时,我们可以在每个页面的顶端添加以下验证用户是否登录的代码。这样,当系统调用每个页面时,都会判断session变量manager是否存在,如果不存在,将页面重定向到系统登录页面。管理员通过“系统登录”模块的验证后,可以登录到图书馆管理系统的主界面。系统主界面主要包括Banner信息栏、导航栏、排行榜和版权信息4部分。其中,导航栏中的功能菜单将根据登录管理员的权限进行显示。例如,系统管理员mr登录后,将拥有

23、整个系统的全部功能,因为它是超级管理员。主界面的设计效果如图15-9所示。图15-9 主界面的设计效果15.5.2 15.5.2 主界面设计主界面设计 1界面设计 在如图15-9所示的主界面中,Banner信息栏、导航栏和版权信息,并不是仅存在于主界面中,其他功能模块的子界面中也需要包括这些部分。因此,可以将这几个部分分别保存在单独的文件中,这样,在需要放置相应功能时只需包含这些文件即可,主界面的布局如图15-10所示。图15-10 主界面的布局应用指令包含文件的方法进行主界面布局的代码如下:当前位置:首页>>> 在上面的代码中,第一行的代码,用于应用指令包含ban

24、ner.jsp文件,该文件用于显示Banner信息及当前登录管理员;第二行的代码,用于应用指令包含 navigation.jsp文件,该文件用于显示当前系统时间及系统导航菜单;最后一行的代码,用于应用指令包含copyright.jsp文件,该文件用于显示版权信息。2关键代码在实现主界面时,需要显示图书借阅排行榜,所以需要编写DAO方法从数据库中统计出借阅排行数据,并保存到Collection集合中。从数据库中统计借阅排行数据的关键代码如下:public Collection bookBorrowSort()String sql=select*from(SELECT bookid,count(b

25、ookid)as degree FROM+tb_borrow group by bookid)as borr join(select b.*,c.name as bookcaseName+,p.pubname,t.typename from tb_bookinfo b left join tb_bookcase+c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join +tb_booktype t on b.typeid=t.id where b.del=0)+as book on borr.bookid=book.id o

26、rder by borr.degree desc limit 10;Collection coll=new ArrayList();/创建并实例化Collection对象BorrowForm form=null;/声明BorrowForm对象ResultSet rs=conn.executeQuery(sql);/执行查询语句try while(rs.next()form=new BorrowForm();/实例化BorrowForm对象 form.setBookId(rs.getInt(1);/获取图书ID form.setDegree(rs.getInt(2);/获取借阅次数 form.s

27、etBookBarcode(rs.getString(3);/获取图书条形码 form.setBookName(rs.getString(4);/获取图书名称 form.setAuthor(rs.getString(6);/获取作者 form.setPrice(Float.valueOf(rs.getString(9);/获取定价 form.setBookcaseName(rs.getString(16);/获取书架名称 form.setPubName(rs.getString(17);/获取出版社 form.setBookType(rs.getString(18);/获取图书类型 coll.

28、add(form);/保存到Collection集合中 管理员登录后,选择“图书借还/图书借阅”命令,进入到图书借阅页面,在该页面中的“读者条形码”文本框中输入读者的条形码(如:201)后,单击“确定”按钮,系统会自动检索出该读者的基本信息和未归还的借阅图书信息。如果找到对应的读者信息,就将其显示在页面中,此时输入图书的条形码或图书名称后,单击“确定”按钮,借阅指定的图书,图书借阅页面的运行结果如图15-11所示。图15-11 图书借阅页面15.5.3 15.5.3 图书借阅设计图书借阅设计1界面设计 图书借阅页面总体上可以分为两个部分:一部分用于查询并显示读者信息;另一部分用于显示读者的借阅

29、信息和添加读者借阅信息。图书借阅页面在Dreamweaver中的设计效果如图15-12所示图15-12 在Dreamweaver中图书借阅页面的设计效果 由于系统要求一个读者只能同时借阅一定数量的图书,并且该数量由读者类型表tb_readerType中的可借数量number决定,所以这里编写了自定义的JavaScript函数checkbook(),用于判断当前选择的读者是否还可以借阅新的图书,同时该函数还具有判断是否输入图书条形码或图书名称的功能,代码如下:function checkbook(form)if(form.barcode.value=)/判断是否输入读者条形码alert(请输入读

30、者条形码!);form.barcode.focus();return;if(form.inputkey.value=)/判断查询关键字是否为空alert(请输入查询关键字!);form.inputkey.focus();return;if(form.number.value-form.borrowNumber.value=0)/判断是否可以再借阅其他图书alert(您不能再借阅其他图书了!);return;form.submit();/提交表单说明:在JavaScript中比较两个数值型文本框的值时,不使用运算符“=”,而是将这两个值相减,再判断其结果。2关键代码 在实现图书借阅时,需要编写S

31、ervlet方法,用于实现图书借阅。实现图书借阅的方法bookborrow()的具体代码如下:/编写Servlet方法,实现图书借阅private void bookborrow(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException /查询读者信息 readerForm.setBarcode(request.getParameter(barcode);/获取读者条形码/根据读者条形码获取读者信息 ReaderForm reader=(ReaderForm)reade

32、rDAO.queryM(readerForm);request.setAttribute(readerinfo,reader);/保存读者信息到request中 /查询读者的借阅信息request.setAttribute(borrowinfo,borrowDAO.borrowinfo(request.getParameter(barcode);/完成借阅 String f=request.getParameter(f);/获取查询条件 String key=request.getParameter(inputkey);/获取输入的关键字 if(key!=null&!key.equals()/

33、判断是否有符合条件的图书 String operator=request.getParameter(operator);BookForm bookForm=bookDAO.queryB(f,key);/根据查询条件获取图书信息 if(bookForm!=null)int ret=borrowDAO.insertBorrow(reader,bookDAO.queryB(f,key),operator);/保存图书借阅信息 if(ret=1)request.setAttribute(bar,request.getParameter(barcode);request.getRequestDispat

34、cher(bookBorrow_ok.jsp).forward(request,response);else/保存提示信息到request中 request.setAttribute(error,添加借阅信息失败!);/转到错误提示页 request.getRequestDispatcher(error.jsp).forward(request,response);else request.setAttribute(error,没有该图书!);/保存提示信息到request中/转到错误提示页 request.getRequestDispatcher(error.jsp).forward(req

35、uest,response);elserequest.getRequestDispatcher(bookBorrow.jsp).forward(request,response);在实现图书借阅的方法中,还需要调用ReaderDAO类的queryM()方法、BorrowDAO类的borrowinfo()方法、BookDAO类的queryB()方法和BorrowDAO类的insertBorrow()方法,具体代码如下:/ReaderDAO类的queryM()方法,用于查询读者信息public ReaderForm queryM(ReaderForm readerForm)ReaderForm r

36、eaderForm1=null;String sql=;if(readerForm.getId()!=null)/根据读者ID查询读者信息sql=select r.*,t.name as typename,t.number from tb_reader r left join tb_readerType t on r.typeid=t.id where r.id=+readerForm.getId()+;else if(readerForm.getBarcode()!=null)/根据读者条形码查询读者信息sql=select r.*,t.name as typename,t.number f

37、rom tb_reader r left join tb_readerType t on r.typeid=t.id where r.barcode=+readerForm.getBarcode()+;ResultSet rs=conn.executeQuery(sql);/执行查询语句String birthday=;try while(rs.next()readerForm1=new ReaderForm();readerForm1.setId(Integer.valueOf(rs.getString(1);/获取读者IDreaderForm1.setName(rs.getString(2

38、);/获取读者姓名readerForm1.setSex(rs.getString(3);/获取读者性别readerForm1.setBarcode(rs.getString(4);/获取读者条形码readerForm1.setVocation(rs.getString(5);/获取职业birthday=rs.getString(6);/获取生日readerForm1.setBirthday(birthday=null?:birthday);readerForm1.setPaperType(rs.getString(7);/获取证件类型readerForm1.setPaperNO(rs.getS

39、tring(8);/获取证件号码readerForm1.setTel(rs.getString(9);/获取联系电话readerForm1.setEmail(rs.getString(10);/获取E-mail地址readerForm1.setCreateDate(rs.getString(11);/获取创建日期readerForm1.setOperator(rs.getString(12);/获取操作员readerForm1.setRemark(rs.getString(13);/获取备注readerForm1.setTypeid(rs.getInt(14);/获取读者类型IDreaderF

40、orm1.setTypename(rs.getString(15);/获取读者类型名称readerForm1.setNumber(rs.getInt(16);/获取可借数量 catch(SQLException ex)conn.close();/关闭数据库连接return readerForm1;/BorrowDAO类的borrowinfo()方法,用于查询借阅信息public Collection borrowinfo(String str)String sql=select borr.*,book.bookname,book.price,pub.pubname,+bs.name bookc

41、asename,r.barcode from(select*from tb_borrow +where ifback=0)as borr left join tb_bookinfo book on borr.bookid+=book.id join tb_publishing pub on book.isbn=pub.isbn join+tb_bookcase bs on book.bookcase=bs.id join tb_reader r on+borr.readerid=r.id where r.barcode=+str+;ResultSet rs=conn.executeQuery(

42、sql);/执行查询语句 Collection coll=new ArrayList();BorrowForm form=null;try while(rs.next()form=new BorrowForm();form.setId(Integer.valueOf(rs.getInt(1);/获取ID号 form.setBorrowTime(rs.getString(4);/获取借阅时间 form.setBackTime(rs.getString(5);/获取归还时间 form.setBookName(rs.getString(8);/获取图书名称 form.setPrice(Float.v

43、alueOf(rs.getFloat(9);/获取定价 form.setPubName(rs.getString(10);/获取出版社 form.setBookcaseName(rs.getString(11);/获取书价名称 coll.add(form);/添加借阅信息到Collection集合中 catch(SQLException ex)System.out.println(借阅信息:+ex.getMessage();/输出异常信息 conn.close();/关闭数据库连接 return coll;/BookDAO类的queryB()方法,用于查询图书信息public BookForm

44、 queryB(String f,String key)BookForm bookForm=null;String sql=select b.*,c.name as bookcaseName,p.pubname as publishing,t.typename+from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join+tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on+b.typeid=t.id where b.+f+=+key+;/查询图书信息的SQL语句 R

45、esultSet rs=conn.executeQuery(sql);/执行查询语句 try if(rs.next()bookForm=new BookForm();bookForm.setBarcode(rs.getString(1);/获取图书条形码 bookForm.setBookName(rs.getString(2);/获取图书名称 bookForm.setTypeId(rs.getInt(3);/获取图书类型ID bookForm.setAuthor(rs.getString(4);/获取作者 bookForm.setTranslator(rs.getString(5);/获取译者

46、 bookForm.setIsbn(rs.getString(6);/获取图书的ISBN号 bookForm.setPrice(Float.valueOf(rs.getString(7);/此处必须进行类型转换 bookForm.setPage(rs.getInt(8);/获取页码 bookForm.setBookcaseid(rs.getInt(9);/获取书架ID bookForm.setInTime(rs.getString(10);/获取入库时间 bookForm.setOperator(rs.getString(11);/获取操作员 bookForm.setDel(rs.getInt

47、(12);/获取是否删除 bookForm.setId(Integer.valueOf(rs.getString(13);/获取图书ID号 bookForm.setBookcaseName(rs.getString(14);/获取书架名称 bookForm.setPublishing(rs.getString(15);/获取出版社 bookForm.setTypeName(rs.getString(16);/获取类型名称 catch(SQLException ex)conn.close();/关闭数据库连接 return bookForm;/BorrowDAO类的insertBorrow()方

48、法,用于保存图书借阅信息public int insertBorrow(ReaderForm readerForm,BookForm bookForm,String operator)String sql1=select t.days from tb_bookinfo b left join tb_booktype t on+b.typeid=t.id where b.id=+bookForm.getId()+;/获取可借天数的SQL语句ResultSet rs=conn.executeQuery(sql1);/执行SQL语句int days=0;try if(rs.next()days=rs

49、.getInt(1);/获取可借天数 catch(SQLException ex)/计算归还时间Calendar calendar=Calendar.getInstance();/获取系统日期SimpleDateFormat format=new SimpleDateFormat(yyyy-MM-dd);java.sql.Date date=java.sql.Date.valueOf(format.format(calendar.getTime();/借书日期calendar.add(calendar.DAY_OF_YEAR,days);/加上可借天数java.sql.Date backTim

50、e=java.sql.Date.valueOf(format.format(calendar.getTime();/归还日期String sql=Insert into tb_borrow(readerid,bookid,borrowTime,backTime,+operator)values(+readerForm.getId()+,+bookForm.getId()+,+date+,+backTime+,+operator+);int falg=conn.executeUpdate(sql);/执行更新语句conn.close();conn.close();/关闭数据库连接return f

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁