基于Java的在线购物系统的设计与实现

miruos

发布日期: 2019-02-03 08:42:07 浏览量: 1474
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

摘 要

电子商务(Electronic Commerce)是互联网上出现的新概念。它是利用计算机技术、网络技术和远程通信技术,实现整个商务(买卖)过程中的电子化、数字化和网络化。随着它的广泛使用,给人们带来了便利,并逐渐改变了人们的生活方式.

国内在线购物网站多数是用ASP,PHP技术实现的,而基于JSP的优秀网站较少。本系统——网上图书超市采用JSP+JavaBean+ SQL Server数据库三层模式设计并实现。本论文详细地阐述了系统的需求分析、系统总体架构、详细设计以及模块的实现过程,主要实现了以下模块功能:会员注册、登录/注销;用户管理;浏览图书详细信息;图书搜索;图书管理;购物车;订单;订单管理等。

关键词: JSP;SQL Server;JavaBean;在线购物

1 需求分析

1.1 系统说明

本系统是一个中小型的电子商务系统——网上图书超市,可以为各类用户提供方便的在线买书环境,符合目前国内流行的电子商务模式。用户可以在系统中实现注册、浏览图书、搜索查询图书、下订单、处理订单等功能;管理员可以通过用户管理、订单管理、图书管理、公告管理、投票管理等管理功能来对系统进行维护更新。

1.2 系统功能简介

网上图书超市系统是一个典型的JSP数据库开发应用程序,由前台商品展示及销售、后台管理2部分组成。

前台商品展示及销售

该部分主要包括新书上架、重点推荐、销售排行、购物车、会员管理、收银台及订单查询、商品查询等。

后台管理

该部分主要对商城内的一些基础数据进行有效管理,包括图书管理、用户管理、订单管理、公告管理等。

2 系统设计

2.1 功能模块

网上图书超市的前台功能结构如图所示

网上图书超市的后台功能结构如图所示

2.2 系统设计思想

本系统采用三层架构设计,它的工作原理如图所示。

采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层。这样用户界面层甚至可以不知道数据库的结构,它只要维护与业务层之间的接口即可。

2.3 系统总体流程

由于后台管理流程图与用户流程图基本相同,因此只例出上图用户流程图

3 系统实现

3.1 网站前台主要功能模块实现

3.1.1 网站前台首页设计

根据前期的分析及客户的要求,网上图书超市的前台主要包括重点推荐展台,新书上架,图书分类,图书查询,用户管理,购物车,订单生成,订单查询和销售排行等模块。在网上超市前台首页的运行结果如下图所示

3.1.2 重点推荐展台的实现过程

(1)在网站前台的居中位置,分栏列出了超市推荐的图书信息,主要包括图书封面,名称,出版社,作者及定价等信息。同时列置了“添加至购物车”按钮和“查看”按钮,分别用于将图书添加至购物车和查看图书的详细信息。重点推荐图书信息同图书基本信息同时保存在图书信息表tb_bookinfo中,以字段commend标识,当commend字段的值为1时,代表该图书为重点推荐图书。查询重点推荐图书的代码如下:

  1. <%
  2. ResultSet rs_book=connDB.executeQuery("select * from tb_bookinfo where commend=1");
  3. %>

这里需要注意的是,“添加购物车”按钮只有在用户登录后才可以显示,即是只有登录的用户才可以购买图书。

(2)根据图书的ISBN号查询图书的详细信息,图书详细页面的运行结果如图所示:

在book_detail.jsp页面中首先查询符合ISBN值的图书信息,关键代码如下:

  1. <%
  2. ResultSet rs=connDB.executeQuery("select * from tb_bookinfo where ISBN='"+request.getParameter("ISBN")+"'");
  3. %>

将查询结果显示到页面中,此时需要对“图书简介”进行处理,以便正确显示回车换行和空格符。关键代码如下:

  1. <%
  2. if(rs.next()){
  3. //注意:此处只能按照字段的顺序读取
  4. String ISBN=rs.getString("ISBN");
  5. String bookname=rs.getString("BookName");
  6. String publisher=rs.getString("publisher");
  7. String writer=rs.getString("writer");
  8. String Introduce=chStr.convertStr(rs.getString("Introduce"));
  9. int price=rs.getInt("Price");
  10. String pDate=rs.getString("pDate");
  11. String cover=rs.getString("cover");
  12. %>
  13. …… //此处省略了显示图书信息的HTML代码
  14. <%}%>

3.1.3新书上架实现过程

在前台首页中,单击“新书上架”超链接可以进入到新书上架页面newbook.jsp,运行结果如图

上架新书消息保存在图书信息表tb_bookinfo中,以字段newbook标志,当newbook字段的值为1时,代表该图书为上架新书。上架新书页面关键代码:

  1. <%
  2. ResultSet rs_newbook=connDB.executeQuery("select * from tb_bookinfo where newbook=1 order by INTime desc");
  3. %>

3.1.4 图书分类实现过程

为了方便用户查询所需图书信息,在网站中设置了图书分类显示模块。单击导航条中的“图书分类”超链接即可进入图书分类显示页面,在该页面左的“图书分类列表”中列出数据库中的全部图书类别,用户单击即可在右显示该图书信息列表,单击书名可以查看相应图书的详细信息,如果用户已经登录,还可以直接将图书信息添加到购物车中,图书分类显示页面的运行结果如图.

在图书分类页面BookSort.jsp左的“图书分类列表”中列出了数据库中的全部图书类别,查询图书类别主要通过Select语句的Group By字句实现,具体过程:

  1. <%
  2. ResultSet rs_Type=connDB.executeQuery("select Type from tb_bookinfo group by Type");
  3. %>

显示图书分类信息时,需要注意的是,不能再使用while语句,而应该使用do…while语句,否则少一条记录,这是因为在指定图书默认类别时,已经应用rs_Type.next()语句将记录指针移动到下一条记录了,显示图书分类信息的关键代码:

  1. <%
  2. rs_Type.first();
  3. do{
  4. //此处必须用do...while,否则会少一条记录
  5. String Type=rs_Type.getString("Type");
  6. %>
  7. …… //此处省略填写订单信息代码
  8. <%
  9. }while (rs_Type.next());
  10. %>

在图书分类页面BookSort.jsp的右侧的图书列表中将显示指定类别的图书信息。当用户没有选择类别,可以通过获取类别结果集rs_Type中的第一条记录的值指定默认类别,否则应用request对象的getParameter方法来获取选择的类别并查询,部分代码:

  1. String PType="";
  2. if (request.getParameter("Type")!=null){
  3. PType=chStr.chStr(request.getParameter("Type"));
  4. }else{
  5. if(rs_Type.next()){
  6. PType=rs_Type.getString("Type");
  7. }else{
  8. response.sendRedirect("index.jsp");
  9. }
  10. }
  11. ResultSet rs_book=connDB.executeQuery("select * from tb_bookinfo where Type='"+PType+"'");
  12. %>

3.1.5 用户管理实现过程

用户管理主要包括用户注册,用户登录,用户个人资料修改,由于用户个人资料修改比较简单,不多做说明。

用户注册

为了统一管理,系统规定只有会员才能购买图书,所以要购买图书的新用户必须先进行用户注册。用户注册的入口位置在网站首页的左侧。用户点击“注册”即可进入用户注册页面,如图

网站要求用户名必须唯一,用户可以先看自己的用户名是否被注册。由于是网络程序,所以注册后在保存用户信息时候,还需要再次对注册用户进行检测。如果不存在,则保存该用户信息。否则提示该名用户已经被注册,请重新注册。保存用户注册信息页面register_deal.jsp。

用户登录

用户登录窗口如图

如果用户输入的用户名存在,并且冻结字段的值不为1,则判断用户输入的密码是否正确,如果密码也正确,则成功登录,否则提示登录失败。

3.1.6 购物车实现过程

购物车主要包括所选图书的添加,查看购物车,单件图书购买数量的修改,清空购物车4部分。

添加到购物车cart_Add.jsp

主要采用Vector类型的变量cart来存储购物数据的,被保存在Session中,然后将图书信息保存到cart中,主要代码:

  1. String ISBN=chStr.chStr(request.getParameter("ISBN"));
  2. String sql="select * from tb_bookinfo where ISBN='"+ISBN+"'";
  3. ResultSet rs=connDB.executeQuery(sql);
  4. float price=0;
  5. if(rs.next()){price=rs.getInt("price");}
  6. bookelement mybookelement=new bookelement();
  7. mybookelement.ISBN=ISBN;
  8. mybookelement.price=price;
  9. mybookelement.number=1;
  10. boolean Flag=true;
  11. Vector cart=(Vector)session.getAttribute("cart");
  12. if(cart==null){
  13. cart=new Vector();}else{
  14. for(int i=0;i<cart.size();i++){
  15. bookelement bookitem=(bookelement)cart.elementAt(i);
  16. //当cart中已经存在所添加的图书信息时,只将数量加1
  17. if(bookitem.ISBN.equals(mybookelement.ISBN)){ //此处必须用equals方法,不能用==
  18. bookitem.number++;
  19. cart.setElementAt(bookitem,i);
  20. Flag=false;
  21. }}}if(Flag)cart.addElement(mybookelement);
  22. session.setAttribute("cart",cart);//将cart保存到session中
  23. rs.close();
  24. response.sendRedirect("cart_see.jsp");
  25. %>

查看购物车

查看购物车页面cart_see.jsp的顶部首先需要判断购物车是否为空,如果为空将页面直接跳转到购物车为空页面cart_null.jsp,否则显示购物车信息。显示购物车信息主要是将保存在Session中的数据利用for语句输出到IE中,同时根据图书的定价,购买数量自动计算每种图书的金额和购物车中的全部图书的合计金额。代码如下:

  1. Vector cart=(Vector)session.getAttribute("cart");
  2. if(cart==null || cart.size()==0){
  3. response.sendRedirect("cart_null.jsp");
  4. }else{
  5. //此处插入显示购物车信息的代码,将在下面给出
  6. }%>
  7. …… //此处省略填写订单信息代码
  8. <%
  9. float sum=0;
  10. float pric=0;
  11. String ISBN="";
  12. String bookname="";
  13. String publisher="";
  14. for(int i=0;i<cart.size();i++){
  15. //此处获取购物车中的一条图书信息
  16. bookelement bookitem=(bookelement)cart.elementAt(i);
  17. sum=sum+bookitem.number*bookitem.price;
  18. ISBN=(String)bookitem.ISBN;
  19. if (ISBN!=""){
  20. ResultSet rs_book=connDB.executeQuery("select * from tb_bookinfo where ISBN='"+ISBN+"'");
  21. if (rs_book.next()){
  22. bookname=rs_book.getString("Bookname");
  23. }}
  24. %>
  25. …… //此处省略填写订单信息代码
  26. <script language="javascript">
  27. <!--
  28. function check(){
  29. if(isNaN(form1.num<%=i%>.value)){
  30. alert("请不要输入非法字符");
  31. return false;
  32. history.back();}
  33. if(form1.num<%=i%>.value==""){
  34. alert("请输入修改的数量");
  35. return false;
  36. history.back();
  37. }}
  38. -->

如图由于在购物车中并没有保存图书的名称,所以在获取图书信息时,还需根据图书的ISBN号重新到数据表中查图书名称,代码如下:

  1. ResultSet rs_newbook=connDB.executeQuery("select * from tb_bookinfo where ISBN=‘“+ ISBN+”’”);
  2. If(re_book.next()){
  3. Bookname=re_book.getString(“Bookname”);

从购物车中移去指定图书

实现从购物车中移去指定图书可以通过Vector类的removeElementAt(int index)方法实现,非常方便。页面cart_move.jsp代码为:

  1. Vector cart=(Vector)session.getAttribute("cart");
  2. try{
  3. String ID=request.getParameter("ID");
  4. int id=Integer.parseInt(ID);
  5. cart.removeElementAt(id);//移去指定图书信息
  6. session.setAttribute("cart",cart);
  7. response.sendRedirect("cart_see.jsp");
  8. }catch(Exception e){
  9. }
  10. %>

清空购物车

实现的方法很简单,只需要将保存在Session中的购物信息清空即可,清空购物车页面cart_clear.jsp代码为:

  1. session.removeAttribute("cart");
  2. response.sendRedirect("cart_null.jsp");

3.1.7生成订单实现过程

生成订单时,不但要保存用户订单中所购买的图书信息和订单信息,同时还需要返回一个可供用户随时查询的唯一订单号。

用户查看购物车页面中的“去收银台结帐”超连接即可进入到收银台页面填写订单信息,在该页面中系统会根据用户登录的用户名自动填写用户基本信息,除用户名不可更改外,其他的均可修改,收银台页面的运行结果如图。

在收银台页面cart_checkout.jsp中,首先应用判断用户是否已经购物,然后再判断用户是否登录,如果用户没有购物或是没有登录都将给予提示并返回到网站首页。关键代码为:

  1. <%if(session.getAttribute("cart")==""){
  2. out.println("<script language='javascript'>alert('您还没有购物!');window.location.href='index.jsp';</script>");
  3. }
  4. String Username="";
  5. Username=(String)session.getAttribute("UserName");
  6. if (Username!=""){
  7. try{
  8. ResultSet rs_user=connDB.executeQuery("select * from tb_Member where username='"+Username+"'");
  9. if(!rs_user.next()){
  10. session.invalidate();
  11. out.println("<script language='javascript'>alert('请先登录后,再进行购物!');window.location.href='index.jsp';</script>");
  12. return;
  13. }else{
  14. String Truename=rs_user.getString("Truename");
  15. String address=rs_user.getString("address");
  16. String postcode=rs_user.getString("postcode");
  17. String tel=rs_user.getString("tel");
  18. String email=rs_user.getString("email");
  19. %>

3.1.8 订单查询实现过程

订单查询实现页面是为用户查询订单信息执行状态而设计的,用户成功登录后,单击网站中的“订单查询”,即可进入到订单查询页面,该页面列出当前用户的全部订单概要信息列表。查询订单概要信息主要从订单主表tb_order中根据当前登录的用户名获取订单信息,关键代码如下:

  1. ResultSet rs=connDB.executeQuery("select * from tb_Order where username='"+(String)session.getAttribute("UserName")+"'");

3.1.9 销售排行实现过程

该页面运行结果如图所示

销售排行数据主要是将销售明细表中的数量ISBN字段分组并统计销售数量再应用子查询获取销售数量最高的前10本图书,最后再使用连接查询获取相应的图书信息。

3.2 网站后台主要功能模块设计

在后台设计中主要有7个模块,分别是:后台登录,图书管理,用户管理,订单管理。公告管理,投票管理,退出。

3.2.1 后台登录实现过程

后台登录页面运行结果如图。

为了网站的安全,防止一些不法分子蓄意破坏,需要为网站后台设计用于验证用户身份的文件safe.jsp,这样当用户没有正常登录时,即可弹出“您还没有登录”的提示对话框,确定后将退出后台页面,返回网站首页。

3.2.2 图书管理页面实现过程

图书管理模块主要实现对图书信息的管理,包括分页显示图书信息,添加图书信息,修改图书信息,删除图书信息等功能。

分页显示图书信息

分页显示图书信息页面,主要是数据表中的图书信息以列表的方式显示,并为之添加修改和删除的超链接,方便以后对图书信息进行修改和删除。分页显示图书信息页面的运行结果如图

参考文献

[1] 周光明,曾建华,沈翠新,徐琳.在线购物系统的设计与实现[J].电脑学习.2004,(02):40-46。

[2] 常晓燕,李家武.用J2EE实现网上购物系统[J].微机发展

[3] MENG Xi-fen.在线购物代理原型系统设计[J]. 苏州丝绸工学院学报

[4] 陈世强,谢坤武,Chen,Shiqiang,Xie.大型购物超市仓库管理系统的设计与实现[J].微计算机信息.

上传的附件 cloud_download 基于Java的在线购物系统的设计与实现.zip ( 2.07mb, 134次下载 )
error_outline 下载需要8点积分

发送私信

19
文章数
8
评论数
最近文章
eject