传智播客网上图书商城是典型的网上购物实践中最为普遍的电子商务企业对客户(B2C)模式,主要包括会员注册、订单管理、购物车、搜索、支付等基本功能。此外,本系统也将实现在线图书销售系统的后端管理,包括图书的添加、订单的处理等功能。本系统完全基于JSP技术,在系统的设计与开发过程中严格遵守软件工程的规范,运用软件设计模式,从而减少系统模块间的偶合,力求做到系统的稳定性、可重用性和可扩充性。
主要功能如下:
(1) 前台(客户购买)部分:
①用户管理:注册会员、登录、激活、退出、修改密码;
②分类显示:显示所有1级和2级分类;
③图书显示:按分类查询图书、通过关键字搜索图书、高级搜索图书、查看某本图书的详细等;
④购物车管理:向购物车中添加图书、修改购物车中图书数量、删除购物车中图书、我的购物车;
⑤订单管理:通过购物车中图书生成订单、查看我的订单、查看某个订单的详细、订单支付、确认收货、取消未付款订单。
(2)后台(管理员管理)部分:
①管理员:管理员登录;
②分类管理:查看所有分类、添加1级分类、添加2级分类、修改1级分类、修改2级分类、删除1级分类、删除2级分类;
③图书管理:按分类搜索图书、高级搜索图书、添加新图书、查看图书详细信息、编辑图书、删除图书;
④订单管理:按状态搜索订单、查看订单详细信息、取消订单、发货;
系统功能模块设计
数据库设计(详见下载)
前台设计
首页设计
首页模块包括3个主要的部分,采用内嵌框架技术。位置分别为上、左、中。
上部的实现
上部包含两大部分内容:
网站标题;
菜单。
菜单部分就是一系列的超链接,用户在未登录时看到的是“登录”和“注册”链接;在登录后看到的是“我的购物车”、“我的订单”、“修改密码”、“退出”超链接,以及当前用户名称。
左部的实现
左部显示所有分类,包含所有1级、2级分类。左部使用了Javascript的Q6Menu组件来完成显示所有分类。当用户点击某个1级分类名称时会展示当前1级分类的所有2级分类。
中部的实现
中部是网站的骨干,点击任何超链接都会在中部显示。默认只是使用纯文本显示欢迎信息。
用户模块
注册用户是构成网站主体的一个重要组成部分,网站设置注册用户的目的之一在于方便网站信息的管理。
用户注册和登录
修改当前用户密码
图书模块
图书列表
在首页左部点击某个2级分类,会在首页的中部显示图书列表页面。图书列表使用分页显示。
图书详情
高级搜索
购物车
购物车使用数据库来保存数据,也就是说添加到购物车中的图书,不会因为关闭浏览器,或者是关闭电脑而消失。而且修改数量,是通过异步请求来操作数据库的。
添加图书到购物车
在图书详细页面,给出数量,然后点击“购买”就可以把图书添加到购物车中,并且会到达购物车列表页面。
订单模块
对订单的操作,对应数据库中的两张表,即订单表和订单条目表(t_order和t_orderitem)。而且订单模块的功能比较多:
生成订单:通过购物车中勾选的条目来生成订单;
我的订单:显示当前用户的所有订单,每个订单所包含的订单条目也需要显示;
订单支付:使用易宝的第三方支付平台完成,对“在线支付”的理解也是一个挑战;
订单详细:显示指定的某个订单;
订单取消和订单的确认收货:这两个功能都是对订单状态的修改。
选中条目,准备生成订单
在购物车列表页面中,勾选要购买的条目,然后点击“结算”按钮,完成选中条目,准备生成订单,这会到达订单准备页面。
生成订单
在订单准备页面,输入收货地址,然后点击“提交订单”按钮,完成下单(生成订单)。这时会到达“下单成功”页面。
订单列表
在首页上部点击“我的订单”链接,就会到达订单列表页面。该页面会显示当前用户的所有订单信息。该页使用分页显示订单!
支付页面
在“下单成功”页面,或者“订单列表”页面中点击“支付”按钮都可以到达“支付”页面。在“支付”页面中选择银行,后点击下一步就会跳转到银行的支付页面了。这里使用的是“易宝”第三方支付平台!
订单详细页面
在订单列表页面中,点击某个订单的“查看”、“取消”、“确认收货”都会到达“订单详细”页面。其中点击“查看”到达“订单详细”页面后没有按钮;点击“取消”到达“订单详细”页面有“取消按钮”按钮;点击“确认收货”按钮到达“订单详细”页面有“确认收货”按钮。
后台设计
仅展示部分,其余详见下载。
以下部分代码请忽略
package cn.itcast.goods.book.domain; import cn.itcast.goods.category.domain.Category; public class Book { private String bid;//主键 private String bname;//图名 private String author;//作者 private double price;//定价 private double currPrice;//当前价 private double discount;//折扣 private String press;//出版社 private String publishtime;//出版时间 private int edition;//版次 private int pageNum;//页数 private int wordNum;//字数 private String printtime;//刷新时间 private int booksize;//开本 private String paper;//纸质 private Category category;//所属分类 private String image_w;//大图路径 private String image_b;//小图路径 public String getBid() { return bid; } public void setBid(String bid) { this.bid = bid; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public double getCurrPrice() { return currPrice; } public void setCurrPrice(double currPrice) { this.currPrice = currPrice; } public double getDiscount() { return discount; } public void setDiscount(double discount) { this.discount = discount; } public String getPress() { return press; } public void setPress(String press) { this.press = press; } public String getPublishtime() { return publishtime; } public void setPublishtime(String publishtime) { this.publishtime = publishtime; } public int getEdition() { return edition; } public void setEdition(int edition) { this.edition = edition; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getWordNum() { return wordNum; } public void setWordNum(int wordNum) { this.wordNum = wordNum; } public String getPrinttime() { return printtime; } public void setPrinttime(String printtime) { this.printtime = printtime; } public int getBooksize() { return booksize; } public void setBooksize(int booksize) { this.booksize = booksize; } public String getPaper() { return paper; } public void setPaper(String paper) { this.paper = paper; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } public String getImage_w() { return image_w; } public void setImage_w(String image_w) { this.image_w = image_w; } public String getImage_b() { return image_b; } public void setImage_b(String image_b) { this.image_b = image_b; } }