java课程设计图书管理系统MVC开发模式.docx
- 文档编号:3753035
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:22
- 大小:894.13KB
java课程设计图书管理系统MVC开发模式.docx
《java课程设计图书管理系统MVC开发模式.docx》由会员分享,可在线阅读,更多相关《java课程设计图书管理系统MVC开发模式.docx(22页珍藏版)》请在冰豆网上搜索。
java课程设计图书管理系统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属性值相同的
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.创建一个webproject——JavaCourse,并把其发布到tomcat中。
ii.配置连接池:
连接池技术可以预先建立一定的连接,当我们进行数据库访问时,直接取得连接池中的空闲链接可以减少对数据库的链接操作,很好的减轻了数据库的负担。
iii.Contextctx=newInitialContext();//实例化上下文对象
DataSourceds=(DataSource)ctx.lookup("java:
/comp/env/JavaCourse");//找到JNDI数据源,并且返回数据源对象
iv.同时,我们还需要在tomcat服务器下配置JNDI数据源,具体的配置如下图所示:
v.登录功能:
a)书写JSP页面代码:
JSP页面是动态的web页面,通过一些提交操作可以进行数据库访问操作,而form表单又是提交的核心控件,其代码如下:
用户名:
密码:
通过以上代码我们可以观察到,当我们点击登录按钮时,它会使用userlogin提交请求,到web.xml里面寻找所要使用的servlet。
b)配置web.xml:
web.xml是webproject的核心文件,它配置了该工程的一些配置信息,当我们启动服务器时,会首先读取web.xml,了解工程的基本信息。
登录的请求配置如下:
此时,服务器就知道登录功能需要跳转到.servlet.login这个servlet文件中。
c)编写servlet:
servlet可以接收表单传过来的参数值,进行对数据库的操作。
因为我采用的是MVC的开发模式,所以使用了javabean单独作为连接数据库的操作,自然需要在servlet中创建一个javabean的对象,调用其相应的函数,代码如下所示:
Stringuname=request.getParameter("username");
Stringpword=request.getParameter("pword");
response.setContentType("text/html;charset=UTF-8");
Useruser=newUser();
user.setUsername(uname);
UserLoginJavaBeanlogin=newUserLoginJavaBean();
ResultSetrs=login.getUser(user);
d)编写javabean:
javabean里面封装了调用数据库的方法,可以进行增删改查操作,其中,使用了连接池进行操作,代码如下:
publicclassUserLoginJavaBean{
publicResultSetgetUser(Useruser){
Stringsql="selectusername,passwordfromuserwhereusername='"+user.getUsername()+"'";
Connconn=newConn();
ResultSetrs=conn.query(sql);
returnrs;
}
}
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("");
}else{
out.println("");
}
}
}else{
out.println("");
}
}catch(SQLExceptione){
e.printStackTrace();
}
vi.按条件检索并且删除:
该功能模块中主要包含按照图书名称、图书类型、图书代码和作者姓名四个条件进行模糊查询,并实现了任意环境下的分页功能,以及任一图书的删除功能。
以下该图片是查询全部图书信息的页面:
当然,我们可以查询图书名称包含java并且作者包含j的图书信息,查询结果如下图所示:
vii.代码亮点:
此次设计,我使用了ajax进行了一些简单的校验,从登录页面我们可以看到,当用户名不存在时,会给出我们提示。
在注册页面中,我也采用该技术,我们知道,任何两个人的身份证号码是不会出现相同(即便出现也是因为系统出现错误),就设计而言,不能出现两个人的用户名是相同的,当有人使用数据库中已经存在的用户名进行注册时,我们给予其提示,并不让其进行注册;当用户名不存在时,该用户名就可以注册,如下图所示:
4)测试阶段
五、设计总结
这学期是我们第一次在学校学习JAVA这门编程语言,因为有以前在培训班学习JAVA的基础,所以对我而言,此次设计相对比较容易。
我们所设计的图书管理系统主要实现了登录、注册、录入图书、借书、还书、删除图书以及模糊查询等功能,功能实现起来比较简单。
而且,我选用的是MVC的开发模式,程序代码有很大的可重用性和逻辑性,当我们进行维护时,可以更加的便捷。
对我来说,JAVA好像是一根救命稻草,C语言复杂性让我惧怕,从事C语言的编程是一项很大的挑战,学习了JAVA之后,越来越深刻的了解了面向对象的含义,通过学习,慢慢了解了那些构建的JAVA基础之上的开发语言和框架,编程慢慢变成一项相对容易的工作,成为一件趣事。
短短一周的设计马上就要结束了,通过设计,是我可以更深刻的了解JAVA的魅力,熟悉了以前被遗忘的知识,更深刻的认识到其简单性,易用性。
以后的学习道路还很长,此次的课程设计为我们开启了一个良好的开端,为我们今后的毕业设计奠定了基础。
以后学习的路还有很长,我们仍需要继续努力,掌握更深刻的知识,以备以后的学习和工作所需。
六、程序清单
1)模糊查询并删除页面代码:
<%@pagecontentType="text/html;charset=UTF-8"%>
<%@pageimport="java.util.Date,.javaBean.Conn,java.sql.ResultSet"%>
<%Conncn=newConn();
Stringpagesql;//pagesql表示查询总记录数的SQL语句
Stringsql;//sql表示查询数据库记录的SQL语句
ResultSetpagers,rst;//pagers=cn.query(pagesql);rst=cn.query(sql)
inti;
intipage=5;//分页单位,每页的记录数
intallpage;//总页数
intpages;//接受的页码变量
intcpage=1;//当前页
intallCol=0;//总记录数
intbeginpos=0;//每页开始位置
intendpos=0;//每页的结束位置.
Stringbookname=request.getParameter("bookname");
Stringbookcode=request.getParameter("bookcode");
Stringbooktype=request.getParameter("booktype");
Stringbookwriter=request.getParameter("bookwriter");
if(bookname==null||bookname==""||bookname.equals("")||bookname.equals("null")||bookname.equals(null)){
sql="selectid,bookname,booktype,bookcode,bookwriter,bookchubanshe,bookprice,
booklocation,bookremarkfrombookwhere1=1";
pagesql="selectcount(id)asidfrombookWHERE1=1";
}else{
bookname=newString(bookname.getBytes("ISO8859-1"),"UTF-8");
sql="selectid,bookname,booktype,bookcode,bookwriter,bookchubanshe,bookprice,
booklocation,bookremarkfrombookwherebooknamelike'%"+bookname+"%'";
pagesql="selectcount(id)asidfrombookwherebooknamelike'%"+bookname+"%'";
}
if(bookcode==null||bookcode==""||bookcode.equals("")||bookcode.equals("null")||bookcode.equals(null)){
}else{
bookcode=newString(bookcode.getBytes("ISO8859-1"),"UTF-8");
sql=sql+"ANDbookcodelike'%"+bookcode+"%'";
pagesql=pagesql+"ANDbookcodelike'%"+bookcode+"%'";
}
if(bookwriter==null||bookwriter==""||bookwriter.equals("")||bookwriter.equals("null")||bookwriter.equals(null)){
}else{
bookwriter=newString(bookwriter.getBytes("ISO8859-1"),"UTF-8");
sql=sql+"andbookwriterlike'%"+bookwriter+"%'";
pagesql=pagesql+"andbookwriterlike'%"+bookwriter+"%'";
}
if(booktype==null||booktype==""||booktype.equals("")||booktype.equals("null")||booktype.equals(null)){
}else{
booktype=newString(booktype.getBytes("ISO8859-1"),"UTF-8");
sql=sql+"andbooktypelike'%"+booktype+"%'";
pagesql=pagesql+"andbooktypelike'%"+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=newInteger(request.getParameter("pages")).intValue();
}
//判断当前页
if(pages>allpage||pages<1){
cpage=1;//-默认当前要显示的页码
beginpos=0;//-=默认记录开始的位置为0
endpos=ipage;//--默认结束位置为第一页的结尾
}else{
cpage=pages;//--当前要显示的页码
beginpos=pages*ipage-ipage;//--得到记录开始的位置
endpos=pages*ipage;//--得到记录结束的位置
}
rst=cn.query(sql);
for(i=0;i rst.next();//--把结果集的记录数移到要显示的页的记录的开始位置 }%>图书名称 图书类型 图书编号 作者姓名 出版社 图书价格 所在书架 图书备注 删除
<%intii=beginpos+1;
for(intj=beginpos;j { if(rst.next()) {%> id=<%=rst.getString( 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。 copyright@ 2008-2022 冰点文档网站版权所有 经营许可证编号:鄂ICP备2022015515号-1<%=rst.getString("bookname")%> <%=rst.getString("booktype")%> <%=rst.getString("bookcode")%> <%=rst.getString("bookwriter")%> <%=rst.getString("bookchubanshe")%> <%=rst.getString("bookprice")%> <%=rst.getString("booklocation")%> <%=rst.getString("bookremark")%>