网上商店前台功能的设计与实现_第1页
网上商店前台功能的设计与实现_第2页
网上商店前台功能的设计与实现_第3页
网上商店前台功能的设计与实现_第4页
网上商店前台功能的设计与实现_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE长沙学院课程设计说明书题目系(部)数学与计算机科学专业(班级)x姓名x学号B20140302311指导教师张肖霞起止日期2016.12.5~2016.12.16

课程设计任务书课程名称:Web应用程序课程设计设计题目:网上商店前台功能的设计与实现已知技术参数和设计要求:问题描述(功能要求):分析设计一个网上商店的前台功能部分。完成本系统的如下功能: 展示特定的某类商品:展示的方式有多种,可以按类别、按销售排行榜、按上架时间等,有层次的展示商品,提高用户的购买兴趣。对于某种商品,除显示商品信息以外,还可以附加评论、推荐相关类型商品。 商品查询:根据多种条件来查询,比如商品名称、价格、出版社等特征信息。能进行模糊匹配,包含关键字的商品都能查到。 购物车:只有注册用户才能购买。为用户提供购物车,购物车内同类商品的数量可以修改,也可以删除购物车里已有的商品。购物车信息保存,便于下次购物时继续选购商品。2.运行环境要求:(1)客户端:Windows操作系统IE浏览器(2)服务器:windows操作系统Tomcatweb服务器MySQL数据库服务器3.技术要求:需求分析规格说明书与用例规约系统采用MVC架构,类图,时序图系统完整编码设计工作量:2周工作计划:(1)2014级信息3班16课时:理论讲座20课时:上机、调试。计算机系机房4课时:答辩。计算机系机房。(具体时间地点老师先申请,机动安排)指导教师签名:日期:2016.12.2教研室主任签名:日期:系主任签名:日期:长沙学院课程设计鉴定表姓名xx专业信息班级x设计题目网上商店前台功能的设计与实现指导教师张肖霞指导教师意见:评定等级:教师签名:日期:答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名:日期:系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;摘要20世纪90年代以来,计算机和网络技术促进了电子商务的产生和广泛应用,对传统商业业态和经营方式提出了挑战,网上商店作为一种新型业态,使大量贸易活动和信息传递在网络上进行。

本文主要介绍了网上图书商城的设计与实现,本课程设计主要JSP+Javabean+Servlet技术,采用了B/S架构模式。使用当前流行的动态网页技术JSP实现前台的显示逻辑业务,实体类Javabean实现数据封装,Servlet实现后台的控制,应用了MySQL数据库以及JDBC技术访问数据库。设计模式主要是采用MVC,MVC即Model(模型)-View(视图)-Controller(控制器)。使用该种模式可以使网站具有更好的可扩展性和使功能的增强更容易些。该网上电脑商城具有注册帐户,浏览商品,商品搜索,在线购买商品以及管理员后台管理网站的功能。关键词:表单,会话,MVC,电子商务系统,图书系统,javaweb

目录1设计内容与要求 12需求分析 22.1需求描述 22.2用例规约 23概要设计 33.1总体设计 33.2功能模块设计 43.3数据库设计 43.4页面设计 43.5接口设计(写出类名,类的方法名,方法的参数的定义和返回值含义。) 53.6运行设计(即系统运行时服务器是用的什么?浏览器用了什么?) 53.7出错处理设计(写出出错的原因和错误的详细信息) 54详细设计 64.1方法流程设计 65编码 76结论 8参考文献 9附录 10附录A本系统的组成 10附录B程序源代码(经过注释的关键代码) 10PAGE291设计内容与要求正文排版格式:宋体五号、单倍行距、首行缩进2字符。标题排版格式:宋体小四号、单倍行距、段前0.5行,段后0.5行。正文排版格式:宋体五号、单倍行距、首行缩进字符。标题排版格式:宋体小四号、单倍行距、段前0.5行,段后0.5行。正文排版格式:宋体五号、单倍行距、首行缩进字符。标题排版格式:宋体小四号、单倍行距、段前0.5行,段后0.5行。

2需求分析2.1需求描述网上书店系统是电子商务的一类重要应用领域,通过它可以进行在线商品交易。随着互联网的普及以及电子商务的发展和人们购物理念与购物方式的改变,网上书店系统将有着巨大的市场潜力。本文在研究电子商务,特别是网上书店系统的基本理论和关键技术的基础上,对网上书店系统的发展背景,各种实现

技术,以及各种实现技术的优缺点和网上书店系统的安全策略进行了分析。2.11网上书店系统:1.用户注册:能够提供新用户注册,并根据用户提供的用户名、用户姓名、密码、手机号码进行验证。2.用户登录:用户能够输入用户名,密码进行登录。3.商品信息:包括商品的编号、名称、价格、库存等信息。4.商品浏览:可以按类别、按销售排行榜、按上架时间等,有层次的展示商品,提高用户的购买兴趣。5.购物车管理:只有注册用户才能购买。为用户提供购物车,购物车内同类商品的数量可以修改,可以删除购物车已有的商品。2.12商品:图书,包括图书名称(Bnamevarchar(50))、图书价格(Bpricefloat)、图书数量(Bnoint)。2.13商品分类:一级分类:按类别分类、按价格分类。二级分类:按类别分类有文学、小说、程序设计。2.14查询的条件:能查看指定名称的图书,能查看指定类别的图书,能查看指定价格的图书。2.2用例规约未注册的用户:能浏览图书,点击按类别分类就能浏览文学、小说、程序设计的图书,点击按价格分类就浏览不同价格的图书。如需加入购物或者购买图书则需要注册并且登陆之后才能进行。已注册的用户:登陆用户并且通过验证之后,能浏览图书,点击按类别分类就能浏览文学、小说、程序设计的图书,点击按价格分类就浏览不同价格的图书。能将喜欢的图书加入购物车并下订单购买图书。3概要设计3.1总体设计按照功能划分系统,画出模块设计图(即功能分解图)比如用户管理模块包括用户登录和注册网上书店系统网上书店系统购物车管理浏览商品用户管理购物车管理浏览商品用户管理查询图书详情查询图书详情删除图书增加图书按类别浏览用户注册用户登录删除图书增加图书按类别浏览用户注册用户登录画出框架设计图(MVC方案,Model-2图)画出每个功能模块对应的的视图层、控制器层和模型层。对前述的框架设计图进行具体化的应用。假设此系统的组成如下:(请完善下图,掉其中的。。。)com.abc.servletcom.abc.servletBookSevletBookSevletcom.abc.daocom.abc.daoBookDaoBookDaocom.abc.beancom.abc.beanBookBookcom.abc.dbcom.abc.dbDataAccessDataAccess*.jsp*.jsp3.2功能模块设计功能模块说明:对每个模块进行详细的说明。用户模块(功能有:注册,激活,登陆,修改密码,退出)分类模块(功能有:显示所有分类)图书模块(功能有:分页查看指定分类图书,分页查看指定名称的图书,分页查看指定条件的图书,查看图书详情)购物车模块(功能有:向车中添加商品,查看我的购物车,修改商品数量,删除商品,批量删除商品)订单模块(功能有:生成订单查看我的订单,查看订单详情,取消订单,确认收货,支付订单)3.3数据库设计user表Book表根据数据流程分析,网上书城的全局E-R模型如图所示。根据设计规划的主要实体有:用户、图书分类、图书、购物车、订单、管理员。3.31E-R图:图书名称图书名称图书价格密码用户姓名图书价格密码用户姓名购买购买图书数量用户名用户名用户图书用户图书地址图书库存地址图书库存类别类别管理属于属于商品价格购物车商品价格购物车商品名称商品数量商品名称商品数量3.32表结构1.User表用户信息表(User)字段名字段类型类型说明约束检查是否为空字段含义idCHAR(50)字符型主键用户名usernameVARCHAR(50)字符型姓名passwordVARCHAR(50)字符型密码telVARCHAR(50)字符型电话号码addressVARCHAR(50)字符型地址B表图书表(B)字段名字段类型类型说明约束检查是否为空字段含义BnameVARCHAR(50)字符型主键图书名称Bpricefloat浮点型图书价格BnoINT整型图书数量TypeVARCHAR(50)字符型图书类别S表购物车表(S)字段名字段类型类型说明约束检查是否为空字段含义BnameVARCHAR(50)字符型主键图书名称priceVARCHAR(50)字符型图书价格BnoINT整型图书数量3.4页面设计首页2.注册页面登录页面浏览全部商品商品详情分类查询7.搜索商品购物车3.5接口设计1)控制层(Servlet)接口接口编号备注接口类名LoginServlet登录控制器接口描述登录页面请求LoginServlet类的login接口完成登录验证跳转接口方法名login登录控制器接口参数参数名类型备注1usernameStrng登录名2passwordString密码返回类型用户登录成功返回用户管理页面登录失败返回登录页面 2)LoginDao接口接口编号备注接口类名LoginDao用户管理服务接口描述用于用户管理,此处描述登录验证接口方法接口方法名login接口方法参数参数名类型备注1loginNameStrng登录名2passwordString密码返回类型boolean成功返回true,失败返回false3)User接口接口编号备注接口名User用户持久化接口接口描述保存用户信息接口方法名getter/setter接口方法参数参数名类型备注1usernameString用户名2passwordString密码3.6出错处理设计1.注册表单校验用户名:不能为空;长度必须在2~15之间;不能是已注册过的;登录密码:不能为空;长度必须在2~15之间;Email:不能为空;必须是正确的Email格式;不能是注册过的Email;表单校验中,用户名是否被注册过、Email是否被注册过都需要请求服务。2.登录表单校验用户名:不能为空;长度必须在2~15之间;用户名是否已经存在;登录密码:不能为空;长度必须在2~15之间;登录表单校验使用的JQuery完成,其中用户名是否存在需要使用JQuery的ajax()向服务器发送异步请求。

4详细设计4.1方法流程设计LoginDao类里的login(Stringusername,Stringpwd)方法内处理的流程是获取数据库的连接编写sql语句创建预编译语句对象执行预编译语句,返回结果集对象判断结果集是否有数据如果有,则返回真如果无,则返回假。BookDAO类里的Book(StringBname,intBprice,Stringtype,Stringimg)方法内处理的流程是获取数据库的连接编写sql语句创建预编译语句对象执行预编译语句,返回结果集对象判断结果集是否有数据如果有,则返回真如果无,则返回假。BookSearchDAO类里的Book(StringBname,intBprice,Stringtype,Stringimg)方法内处理的流程是获取数据库的连接编写sql语句创建预编译语句对象执行预编译语句,返回结果集对象判断结果集是否有数据如果有,则返回真如果无,则返回假。

5编码1.用户登录用户注册用户注销浏览全部商品搜索商品

6结论本次设计主要用的思想是MVC设计模式,Jsp充当View的角色,servlet充当Conteoller,JavaBen(Book)充当Model,实现界面与逻辑的分离,通过传递参数进行调用,Jsp页面通过发送一个操作类型变量,从而使得servlet获知应当进行的操作,并通过调用javabean进行实际的执行,这样页面与逻辑就得到了分离,互不干涉和影响实现了购物的一些简单操作,本程序没有用到数据库的知识。另外用到了我们学过的很多知识,有html,java,jsp,servlet,javaben等知识,这样一来加强我们对现正在学的知识的巩固以及对以前学的html和java的回顾,掌握这些知识的综合运用,对方法,类的进一步加深,同时也让学生通过实验来感受静态网页和动态的网页不同。不仅如此,还加强我们的动手能力和对出现问题的解决能力以及对我们自身所学知识的一个检验。

7参考文献[[1]贾素玲.JSP应用开发技术[M].北京:清华大学出版社,2007.[2]孙鑫.JavaWeb开发详解-XML+XSLT+Servlet+JSP深入剖析与实例应用[M].北京:电子工业出版社,2006.[3]连洪武.EclipseWeb开发从入门到精通[M].北京:清华大学出版社,2007.[4]DavidTurner,Ph.D.JavaWebProgrammingwithEclipse[EB/OL]./turner/java_web_programming/[5] 石志国,薛为民,董洁.JSP应用教程.北京:清华大学出版社.北京交通大学出版社,2004[6] 李曙光.JSP开发实例完全剖析.北京:中国电力出版社,2006[7] 杨易.JSP高级程序设计.人民邮电出版社,2006

8附录程序源代码LoginDAOpublicclassLoginDAO{publicUserLogIn(Stringusername,Stringpassword){ Connectioncon=Connect.getConnection(); Stringsql="select*fromTABLE1whereusername=?andpassword=?"; PreparedStatementpst=null; ResultSetrs=null; Useru=null; try{ pst=con.prepareStatement(sql); pst.setString(1,username); pst.setString(2,password); rs=pst.executeQuery(); if(rs.next()){ u=newUser(); u.setUsername(rs.getString("username")); } }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnu;}}LoginServletpublicclassLoginServletextendsHttpServlet{ privatestaticfinallongserialVersionUID=1L;/***@seeHttpServlet#HttpServlet()*/ publicLoginServlet(){ //TODOAuto-generatedconstructorstub } /** *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //使用request读取与客户端请求有关的信息和表单数据 //使用response指定HTTP应答状态代码和应答头 LoginDAOdao=newLoginDAO(); response.setCharacterEncoding("utf-8"); response.setContentType("text/html"); Stringname=request.getParameter("username");//定义叫name的字符型变量,并给他赋值 Stringpwd=request.getParameter("password"); Useruser=dao.LogIn(name,pwd); HttpSessionsession=request.getSession();//从客户端获得一个session的对象,这个对象包含客户端持有的相关信息用来区别每个客户端 PrintWriterout=response.getWriter();//获得一个输出流,用来响应客户端发出的请求,使用out把应答内容发送到浏览器 Stringmsg=null; if(user!=null){ session.setAttribute("user",user);//把user的值保存在session中,就是说把一个叫user的数据打包成“user”存在session中。 msg="a.jsp";} else{msg="登陆失败!"+"<ahref='http://localhost:8080/TT/login.html'>back</a>";} RequestDispatcherrd=request.getRequestDispatcher(msg);//转发方式 rd.forward(request,response);//传递请求 } /** *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub doGet(request,response); } }Register.jspbooleanflag;Requesta=newRequest();flag=a.Requset(user);if(flag){ Userp=(User)session.getAttribute("user"); out.println("您已注册成功,可以登陆了哦!"); out.print("用户名:"+p.getusername()+"\n"+"邮箱:"+p.getEMAIL()+"\n"+"<ahref='http://localhost:8080/TT/login.html'>登陆</a>");}else{out.println("注册失败!"+"<ahref='http://localhost:8080/TT/NewFile.jsp'>back</a>");}RequestpublicclassRequest{ publicbooleanRequset(Userusr)//定义一个型参{ Connectioncon=Connect.getConnection(); PreparedStatementpst=null; booleanflag=false; ResultSetrs=null; try{ Stringsql1="select*fromTABLE1whereusername=?orEMAIL=?"; pst=con.prepareStatement(sql1); pst.setString(1,usr.getusername()); pst.setString(2,usr.getEMAIL()); rs=pst.executeQuery(); if(rs.next()){ flag=false; } else{ Stringsql2="insertintoTABLE1(PHONE,EMAIL,username,password)values(?,?,?,?)"; pst=con.prepareStatement(sql2); pst.setString(1,usr.getPHONE()); pst.setString(2,usr.getEMAIL()); pst.setString(3,usr.getusername()); pst.setString(4,usr.getpassword()); pst.executeUpdate(); flag=true; con.close(); pst.close(); } }catch(Exceptione){ e.printStackTrace(); } returnflag;}}LogoutServletpublicclassLogoutServletextendsHttpServlet{ privatestaticfinallongserialVersionUID=1L;/***@seeHttpServlet#HttpServlet()*/publicLogoutServlet(){super();//TODOAuto-generatedconstructorstub} /** *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub HttpSessionsession=request.getSession(true); session.invalidate();//invalidate()实现系统的注销功能 response.sendRedirect("login.html"); } /** *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub }}bookServletpublicclassBookServletextendsHttpServlet{ privatestaticfinallongserialVersionUID=1L;/***@seeHttpServlet#HttpServlet()*/publicBookServlet(){super();//TODOAuto-generatedconstructorstub} /** *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub } /** *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub ArrayList<Book>list=newBookDAO().getAllBook(); request.setAttribute("allBook",list); request.getRequestDispatcher("showBook.jsp").forward(request,response);//请求转发 } }BookDAOpublicclassBookDAO{ publicArrayList<Book>getAllBook(){ Connectionconn=null; PreparedStatementstmt=null; ResultSetrs=null; ArrayList<Book>list=newArrayList<Book>(); try{ conn=Connect.getConnection(); Stringsql="select*fromTable2;"; stmt=conn.prepareStatement(sql); rs=stmt.executeQuery(); while(rs.next()){ Bookbook=newBook(); book.setBid(rs.getInt("Bid")); book.setBname(rs.getString("Bname")); book.setBprice(rs.getInt("Bprice")); book.setType(rs.getString("type")); book.setImg(rs.getString("img")); list.add(book);//向集合列表中添加对象 } returnlist; }catch(Exceptionex){ ex.printStackTrace(); returnnull; }finally{ if(rs!=null){ try{ rs.close(); rs=null; }catch(Exceptionex){ ex.printStackTrace(); } } if(stmt!=null){ try{ stmt.close(); stmt=null; }catch(Exceptionex){ ex.printStackTrace(); } } } } publicBookgetBookById(intBid){ Connectionconn=null; PreparedStatementstmt=null; ResultSetrs=null; try{ conn=Connect.getConnection(); Stringsql="select*fromTable2whereBid=?;"; stmt=conn.prepareStatement(sql); stmt.setInt(1,Bid); rs=stmt.executeQuery(); if(rs.next()){ Bookbook=newBook(); book.setBid(rs.getInt("Bid")); book.setBname(rs.getString("Bname")); book.setBprice(rs.getInt("Bprice")); book.setType(rs.getString("type")); book.setImg(rs.getString("img")); returnbook; }else{ returnnull; } }catch(Exceptionex){ ex.printStackTrace(); returnnull; }finally{ if(rs!=null){ try{ rs.close(); rs=null; }catch(Exceptionex){ ex.printStackTrace(); } } if(stmt!=null){ try{ stmt.close(); stmt=null; }catch(Exceptionex){ ex.printStackTrace(); } }} }}showBook.jsp<%BookDAObookDao=newBookDAO();ArrayList<Book>list=bookDao.getAllBook();if(list!=null&&list.size()>0){ for(inti=0;i<list.size();i++) { Bookbook=list.get(i);%><div><dl><dt><ahref="details.jsp?Bid=<%=book.getBid()%>"><imgsrc="img/<%=book.getImg()%>"width="300"height="317"border="1"/></a></dt><ddclass="dd_name"><fontcolor="black">书名:<%=book.getBname()%></font></dd><ddclass="dd_city">类别:<%=book.getType()%>  <fontcolor="red">价格:¥<%=book.getBprice()%></font></dd></dl></div><!--商品循环结束-->Detail.jsp<%BookDAObookDao=newBookDAO();Bookbook=bookDao.getBookById(Integer.parseInt(request.getParameter("Bid")));if(book!=null){%><tdwidth="80%"valign="top"><table><tr><tdrowspan="5"><imgsrc="img/<%=book.getImg()%>"width="300"height="317"/></td></tr><tr><td><B><%=book.getBname()%></B></td></tr><tr><td><fontcolor="red">价格:¥<%=book.getBprice()%></font></td></tr><tr><td>类别:<%=book.getType()%></td></tr><tr><td>购买数量:<spanid="sub"onclick="sub();">-</span><inputtype="text"id="number"name="number"value="1"size="2"/><spanid="add"onclick="add();">+</span></td></tr></table><divid="cart"><imgsrc="img/buy.png"><ahref="javascript:selflog_show(<%=book.getBid()%>)"><imgsrc="img/sell.png"></a></div></td><%}%>bookSeachSevletpublicclassbookSearchServletextendsHttpServlet{ privatestaticfinallongserialVersionUID=1L;/***@seeHttpServlet#HttpServlet()*/publicbookSearchServlet(){super();//TODOAuto-generatedconstructorstub} /** *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstubrequest.setCharacterEncoding("UTF-8"); StringBname=request.getParameter("Bname"); System.out.println(Bname); booksearhDAObooksearhDao=newbooksearhDAO(); Bookbook=booksearhDao.search(Bname); System.out.println("9"); if(book!=null){ System.out.println("10"); HttpSessionsession=request.getSession();//创建会话,获取信息 session.setAttribute("book",book); response.sendRedirect("book_search.jsp");//将客户引导至book_search.jsp页面 }else{ request.getRequestDispatcher("/error.jsp").forward(request,response); } } /** *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAuto-generatedmethodstub }}BookSearchDAOpublicclassbooksearhDAO{ publicBooksearch(StringBname){ System.out.println("7"); Connectioncon=Connect.getConnection(); Stringsql="select*fromTable2whereBnameLIKE?"; PreparedStatementps

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论