欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    java课程设计-图书管理系统-MVC开发模式.doc

    • 资源ID:23953721       资源大小:1.35MB        全文页数:99页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java课程设计-图书管理系统-MVC开发模式.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datejava课程设计-图书管理系统-MVC开发模式本科生毕业设计论文内芯格式目 录一、 设计目的第2页二、 功能介绍第3页三、 程序流程第4页四、 设计步骤第5页五、 设计总结第6页六、 程序清单第7页一、 设计目的此次的课程设计是图书管理系统,它的产生可以方便用户进行操作,以减少用户的误操作。作为一个软件,功能是第一要素,所以,我此次的设计以功能为主,在美工和页面的设计并没有什么要求。通过此次课程设计,增加了我们理论联系实际和解决实际问题的能力,也使我们对JAVA这门语言有了更深的了解,使我们可以用最简单、便捷的语言和方法实现相同的功能,深刻明白了其优越性,同时也提高了我们的学习JAVA的兴趣,给我们以后学习、工作打下坚实的基础。二、 功能介绍此次设计的要求有如下六个功能:(1)具有新用户注册功能。(2)具有注册用户登录功能。(3)具有图书信息的录入功能。(4)具有借出和归还登记功能。(5)具有数据查询功能,可以实现查询全部信息和按条件执行查询。(6)具有按条件删除数据功能。首先,我们实现注册和登录功能,进入系统软件后,可以进行一下操作:进入系统首页注册登录模 糊查 询图 书并 且删 除图 书归 还登 记功 能图 书借 出登 记功 能图 书信 息录 入功 能三、 程序流程此次JAVA课程设计,我采用的是MVC开发模式,具体内容如下图所示:1) 首先,在JSP页面有一个form表单,里面存有需要使用的参数供增删改查使用,当我们通过submit按钮提交表单时,它会寻找action属性值,走到web.xml。在web.xml 中,通过查找到与action属性值相同的<url-pattern/>值,再通过<servlet-name/>标签中值,找到相应的<servlet-class/>,跳转到相应的servlet中。2) 然后,在servlet中,把从JSP页面接收到的参数封装到useBean中(为了减少传递给JavaBean的参数),通过实例化一个JavaBean对象,调用其方法,进行一些连接数据库的操作。3) JavaBean包含一些增删改查的操作,进行业务处理,连接到数据库中,最后把操作的结果返回给servlet中。4) Servlet判断返回的结果,如果成功就跳转到成功页面所对应的JSP,如果失败,在返回form表单所在的页面,重新进行操作。四、 设计步骤1) 需求分析在课程设计之初,最重要的是需求分析,要深入了解所有的业务及其流程,才能在编码时减少误区和编码时间。了解完成所要实现的功能之后,需要考虑设计所需要使用的开发工具,这对不同规模的问题,采取的开发模式、服务器、数据库都是不一样的。我们的设计相对比较简单,所以,选择了tomcat5.0作为图书管理系统所需要的服务器,mysql作为数据库(mysql是免费的,符合设计真实情况),myeclipse作为开发工具,360浏览器作为测试的工具,同时使用JSP书写web页面,javascript进行简单的校验,采用ajax提交异步请求,实现一些相对特殊的功能。这次设计的数据库名称时javacourse,它包含三张数据表,具体如下所示:i. user(管理员表):ii. book(图书表):iii. borrowbook(借书记录表):2) 详细设计当已经对业务有了深入的了解之后,开始进行功能流程的详细设计,我们可以通过图纸等工具,策划出设计的功能,如功能介绍所示。3) 编码阶段:准备工作已经完成,我们可以正式进入编码阶段。i. 创建一个web projectJavaCourse,并把其发布到tomcat中。ii. 配置连接池:连接池技术可以预先建立一定的连接,当我们进行数据库访问时,直接取得连接池中的空闲链接可以减少对数据库的链接操作,很好的减轻了数据库的负担。iii. Context ctx = new InitialContext();/实例化上下文对象DataSource ds = (DataSource) ctx.lookup("java:/comp/env/JavaCourse"); /找到JNDI数据源,并且返回数据源对象iv. 同时,我们还需要在tomcat服务器下配置JNDI数据源,具体的配置如下图所示:v. 登录功能:a) 书写JSP页面代码:JSP页面是动态的web页面,通过一些提交操作可以进行数据库访问操作,而form表单又是提交的核心控件,其代码如下:<form action="userlogin" method="post" name="myform" onsubmit="return userCheck()">用户名: <input size="15" id="uname" onblur=userCheck() name="username"><font color=red><div id="name"></div></font>密码: <input type="password" size="15" id="psw" onblur=passwordCheck() name="pword"><div id="name1"></div><input type="submit" value=" 登 录 ">&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" value="注册" onclick="window.location='regist.jsp'"/></form>通过以上代码我们可以观察到,当我们点击登录按钮时,它会使用userlogin提交请求,到web.xml里面寻找所要使用的servlet。b) 配置web.xml:web.xml是web project的核心文件,它配置了该工程的一些配置信息,当我们启动服务器时,会首先读取web.xml,了解工程的基本信息。登录的请求配置如下:<servlet> <servlet-name> userlogin</servlet-name> <servlet-class>.servlet. userlogin</servlet-class> </servlet><servlet-mapping> <servlet-name>userlogin</servlet-name> <url-pattern>/userlogin</url-pattern> </servlet-mapping>此时,服务器就知道登录功能需要跳转到.servlet.login这个servlet文件中。c) 编写servlet:servlet可以接收表单传过来的参数值,进行对数据库的操作。因为我采用的是MVC的开发模式,所以使用了javabean单独作为连接数据库的操作,自然需要在servlet中创建一个javabean的对象,调用其相应的函数,代码如下所示:String uname = request.getParameter("username");String pword = request.getParameter("pword");response.setContentType("text/html; charset=UTF-8");User user = new User();user.setUsername(uname);UserLoginJavaBean login = new UserLoginJavaBean();ResultSet rs = login.getUser(user);d) 编写javabean:javabean里面封装了调用数据库的方法,可以进行增删改查操作,其中,使用了连接池进行操作,代码如下:public class UserLoginJavaBean public ResultSet getUser(User user) String sql = "select username,password from user where username='" + user.getUsername()+ "'"Conn conn = new Conn();ResultSet rs = conn.query(sql);return rs; e) 判断结果,实现页面跳转:实现登录功能,我们必须要先判断出该用户是否存在,以及密码是否正确,javabean中返回的结果是ResultSet类型的对象,我们通过判断rs.next()是否为true,来查询该用户名是否存在,若存在,我们再比对其密码是否正确,如果密码正确,提示其登录成功,并且让它跳转到main.jsp(即主页面),否则提示其密码有误,让其重新登录;当rs.next()为false时,说明不存在该用户,则提示给予其提示,让其重新登录。try if (rs.next() session.setAttribute("user", rs.getString("username");if(rs.getString("username").equals(uname)if(rs.getString("password").equals(pword)out.println("<script>");out.println("alert('恭喜您,登录成功!');");out.println("window.location='main.jsp'");out.println("</script>");elseout.println("<script>"); out.println("alert('对不起,密码有误!');");out.println("window.location='index.jsp'");out.println("</script>"); else out.println("<script>");out.println("alert('对不起,该用户名不存在!');");out.println("window.location='index.jsp'");out.println("</script>"); catch (SQLException e) e.printStackTrace();vi. 按条件检索并且删除:该功能模块中主要包含按照图书名称、图书类型、图书代码和作者姓名四个条件进行模糊查询,并实现了任意环境下的分页功能,以及任一图书的删除功能。以下该图片是查询全部图书信息的页面:当然,我们可以查询图书名称包含java并且作者包含j的图书信息,查询结果如下图所示:vii. 代码亮点:此次设计,我使用了ajax进行了一些简单的校验,从登录页面我们可以看到,当用户名不存在时,会给出我们提示。在注册页面中,我也采用该技术,我们知道,任何两个人的身份证号码是不会出现相同(即便出现也是因为系统出现错误),就设计而言,不能出现两个人的用户名是相同的,当有人使用数据库中已经存在的用户名进行注册时,我们给予其提示,并不让其进行注册;当用户名不存在时,该用户名就可以注册,如下图所示:4) 测试阶段五、 设计总结这学期是我们第一次在学校学习JAVA这门编程语言,因为有以前在培训班学习JAVA的基础,所以对我而言,此次设计相对比较容易。我们所设计的图书管理系统主要实现了登录、注册、录入图书、借书、还书、删除图书以及模糊查询等功能,功能实现起来比较简单。而且,我选用的是MVC的开发模式,程序代码有很大的可重用性和逻辑性,当我们进行维护时,可以更加的便捷。对我来说,JAVA好像是一根救命稻草,C语言复杂性让我惧怕,从事C语言的编程是一项很大的挑战,学习了JAVA之后,越来越深刻的了解了面向对象的含义,通过学习,慢慢了解了那些构建的JAVA基础之上的开发语言和框架,编程慢慢变成一项相对容易的工作,成为一件趣事。短短一周的设计马上就要结束了,通过设计,是我可以更深刻的了解JAVA的魅力,熟悉了以前被遗忘的知识,更深刻的认识到其简单性,易用性。以后的学习道路还很长,此次的课程设计为我们开启了一个良好的开端,为我们今后的毕业设计奠定了基础。以后学习的路还有很长,我们仍需要继续努力,掌握更深刻的知识,以备以后的学习和工作所需。六、 程序清单1) 模糊查询并删除页面代码:<%page contentType="text/html;charset=UTF-8"%><%page import="java.util.Date,.javaBean.Conn,java.sql.ResultSet" %><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>图书录入页面</title></head><center><body vLink="#006666" link="#003366" bgColor="#E0F0F8"><font size="4" color="red"><b>检索图书页面</b></font><br/><br/><form action="checkBook.jsp" method="post"><table width="500" cellspacing="0" border="1" height="110"><tr align="center"><td>图书名称</td><td><input type="text" size="20" name="bookname"/></td><td>图书类型</td><td><input type="text" size="20" name="booktype"/></td></tr><tr align="center"><td>图书代码</td><td><input type="text" size="20" name="bookcode"/></td><td>作者姓名</td><td><input type="text" size="20" name="bookwriter"/></td></tr></table><br/><input type="submit" value=" 查 询 "/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value=" 重 置"/></form><% Conn cn=new Conn(); String pagesql; /pagesql表示查询总记录数的SQL语句 String sql; /sql表示查询数据库记录的SQL语句ResultSet pagers,rst; /pagers=cn.query(pagesql); rst=cn.query(sql)int i; int ipage=5; /分页单位 ,每页的记录数int allpage; /总页数 int pages; /接受的页码变量 int cpage=1; /当前页 int allCol=0; /总记录数int beginpos=0; /每页开始位置int endpos=0; /每页的结束位置.String bookname=request.getParameter("bookname");String bookcode=request.getParameter("bookcode");String booktype=request.getParameter("booktype");String bookwriter=request.getParameter("bookwriter");if(bookname=null|bookname=""|bookname.equals("")|bookname.equals("null")|bookname.equals(null)sql="selectid,bookname,booktype,bookcode,bookwriter,bookchubanshe,bookprice,booklocation,bookremark from book where 1=1 "pagesql="select count(id) as id from book WHERE 1=1 "elsebookname= new String(bookname.getBytes("ISO8859-1"),"UTF-8");sql="select id,bookname,booktype,bookcode,bookwriter,bookchubanshe,bookprice,booklocation,bookremark from book where bookname like '%"+bookname+"%' "pagesql="select count(id) as id from book where bookname like '%"+bookname+"%' "if(bookcode=null|bookcode=""|bookcode.equals("")|bookcode.equals("null")|bookcode.equals(null)elsebookcode= new String(bookcode.getBytes("ISO8859-1"),"UTF-8");sql=sql+" AND bookcode like '%"+bookcode+"%'"pagesql=pagesql+" AND bookcode like '%"+bookcode+"%'"if(bookwriter=null|bookwriter=""|bookwriter.equals("")|bookwriter.equals("null")|bookwriter.equals(null)elsebookwriter= new String(bookwriter.getBytes("ISO8859-1"),"UTF-8");sql=sql+" and bookwriter like '%"+bookwriter+"%'"pagesql=pagesql+" and bookwriter like '%"+bookwriter+"%'"if(booktype=null|booktype=""|booktype.equals("")|booktype.equals("null")|booktype.equals(null)elsebooktype= new String(booktype.getBytes("ISO8859-1"),"UTF-8");sql=sql+" and booktype like '%"+booktype+"%'"pagesql=pagesql+" and booktype like '%"+booktype+"%'"pagers = cn.query(pagesql);if(pagers.next() allCol = pagers.getInt("id"); /获得总记录数 allpage = (allCol+ipage-1)/ipage; /求出总页面数 if (request.getParameter("pages")=null)/判断参数pages是否为空 pages=1; beginpos=0;endpos=ipage;else pages = new Integer(request.getParameter("pages").intValue(); /判断当前页 if(pages > allpage | pages <1) cpage = 1; /-默认当前要显示的页码beginpos=0; /-=默认记录开始的位置为0endpos=ipage; /-默认结束位置为第一页的结尾else cpage = pages; /-当前要显示的页码beginpos=pages*ipage-ipage; /-得到记录开始的位置endpos=pages*ipage; /-得到记录结束的位置 rst=cn.query(sql);for(i=0;i<beginpos;i+)rst.next(); /-把结果集的记录数移到要显示的页的记录的开始位置%><table border="1" cellspacing="0" width="100%"><tr><th>图书名称</th><th>图书类型</th><th>图书编号</th><th>作者姓名</th><th>出版社</th><th>图书价格</th><th>所在书架</th><th>图书备注</th><th>删除</th></tr><%int ii=beginpos+1;for(int j=beginpos;j<endpos;j+) /从开始位置读取记录一直到结束位置 if(rst.next()%><tr><td><%=rst.getString("bookname")%></td><td><%=rst.getString("booktype")%></td><td><%=rst.getString("bookcode")%></td><td><%=rst.getString("bookwriter")%></td><td><%=rst.getString("bookchubanshe")%></td><td><%=rst.getString("bookprice")%></td><td><%=rst.getString("booklocation")%></td><td><%=rst.getString("bookremark")%></td><td><a href="DeleteBook?id=<%=rst.getString("id")%>" onclick="return confirm('您确认要删除此书吗?')">删除</a></td></tr><% else break; %></table><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="STYLE4">共有 <%=allCol%> 条记录,当前第 <%=cpage%>/<%=allpage%> 页</td><td><table border="0" align="center" cellpadding="0" cellspacing="0"><tr><td width="80"><a href="checkBook.jsp?pages=<%=1%>&bookname=<%=bookname%>&booktype=<%=booktype%>&bookwriter=<%=bookwriter%>&bookcode=<%=bookcode%>">首页</a></td><td width="80"><a href="checkBook.jsp?pages=<%=cpage-1%>&bookname=<%=bookname%>&booktype=<%=booktype%>&bookwriter=<%=bookwriter%>&bookcode=<%=bookcode%>">上一页</a></td><td width="80"><a href="checkBook.jsp?pages=<%=cpage+1%>&bookname=<%=bookname%>&booktype=<%=booktype%>&bookwriter=<%=bookwriter%>&bookcode=<%=bookcode%>">下一页</a></td><td width="80"><a href="checkBook.jsp?pages=<%=allpage%>&bookname=<%=bookname%>&booktype=<%=booktype%>&bookwriter=<%=bookwriter%>&bookcode=<%=bookcode%>">尾页</a></td></tr></table></td></tr></table></body></center></html>2) 注册功能代码:<% page contentType="text/html;charset=UTF-8" language="java" %><head><title>用户注册页面</title></head><script type="text/javascript" src="jquery-1.2.3.js"></script><script language="javascript">var XMLHttpReq = false; function createXMLHttpRequest() if(window.XMLHttpRequest)XMLHttpReq = new XMLHttpRequest();else if(window.ActiveXObject)try XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");catch(e)try XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");catch(e)function sendRequest(url) createXMLHttpRequest();XMLHttpReq.open("GET", url, true);XMLHttpReq.onreadystatechange = processResponse;XMLHttpReq.send(null); function processResponse() if (XMLHttpReq.readyState = 4) if (XMLHttpReq.status = 200) var res=XMLHttpReq.responseXML.getElementsByTagName("res")0.firstChild.data; $("#name").html(res); else window.alert("您所请求的页面有异常。"); function userCheck() var uname =$("#uname").val();if(uname="") $("#name").html("<font color=red size=2>对不起用户名不能为空</font>");return false;else var aa = sendRequest('regist?uname='+uname);return passwordCheck(); function passwordCheck() var psw1 = document.myform.psw.value;if(psw1="") var name1="<font color=red size=2>对不起密码不能为空</font>"document.getElementById("name1").innerHTML=name1; return false;elsevar name2="<font color=green size=2>密码可用</font>"document.getElementById("name1").innerHTML=name2; return secondpasswordCheck(); function secondpasswordCheck() var psw1 = document.myform.secondpsw.value; var pword= document.myform.psw.value;if(psw1!=pword)var name1="<font color=red size=2>确认密码不正确!</font>"document.getElementById("name2").innerHTML=name1; return false;elsevar name2="<font color=green size=2>确认密码正确!</font>"document.getElementById("name2").innerHTML=name2; return true; </script><body vLink="#006666" link="#003366" bgColor="#E0F0F8"><center><font size="5" color="red"><b>用&nbsp;&nbsp;户&nbsp;&nbsp;注&nbsp;&nbsp;册</b></font><form action="userregist" method="post" name="myform" onSubmit="return userCheck()"><table><tr><td>用户名: </td><td><input size="20" id="uname" onBlur=userCheck() name="uname"><div id="name"></div></td></tr><tr><td>密&nbsp;&nbsp;码: </td><td><input type="password" size="22" id="psw" onBlur=passwordCheck() name="pword"><div id="name1"></div></td></tr><tr><td>确认密码: </td><td><input type="password" size="22" id="secondpsw" onBlur=secondpasswordCheck() name="secondpword"><div id="name2"></div></td></tr></table><input type="submit" value=" 注 册 ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" value=" 返 回 " onclick="window.location='index.jsp'"/></form></center></body>3) 借书功能代码:i. 借书功能JSP页面代码:<%Date date = new Date();%><font size="4" color="red"><b>借书录入页面</b></font><br/><form action="Borrowbook" method="pos

    注意事项

    本文(java课程设计-图书管理系统-MVC开发模式.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开