网上书店

本文介绍了一个网上书店系统的实现细节,包括用户登录、商品浏览、购物车管理及订单处理等功能。通过Struts、Hibernate等技术实现了从前端展示到后端数据持久化的全过程。
 

网上书店系统

流程分析;

业务流程代码详解

持久化代码详解

tils包下的类

页面效果

数据库

 

一,流程分析;

1  登陆方式

网上购物系统要求用户一定要先登陆才能购买,登陆时有两中情况,一种是先登录才能浏览商品,另一种是可以先浏览商品,在购买前都可登陆 ,本列采用第一种方式,

2  浏览商品

   当用户成功登陆后,到商品展示页面,如果商品多时,可以提供分页供用户浏览和提供几种搜索的方式供用户查找想要的商品

3  选择商品

   当用户选择某种商品时,显示这中商品的详细信息

4  购买商品

   当用户选择购买这种商品时,把商品添加到购物车,显示这购物车中所有商品的详细信息清单,并计算出购物车中的所有商品的总价。

5  确认购买

   当用户确认购买时,需要显示用户注册的详细信息予以确认,如果信息需要修改,用户可修改后再提交确认信息,用户提交信息后,生成购物清单,持久化到数据库,将不能再更改。

 

 

二,业务流程代码详解

1,  用户登陆

用户登陆时,需要验证用户名和密码,

代码:略....

2,  浏览商品

查询商品,本例中,只显示所有商品信息的列表信息,

可以把商品信息查询出后放入session中,供页面获取显示。

代码: ....

3,  选择商品

用户选择某种商品时,可按该商品的id到数据库中查找,然后把该商品放入Session中,供页面显示和购买时调用。

代码:

request.getSession().setAttribute("books",this.getBookService().findBookAll());

 注: this.getBookService().findBookAll() 这段代码是查询所有的商品的信息

4,  购买商品

用户购买某个商品时,后台执行的流程如下:

/**创建一个session对象*/

       HttpSession session = request.getSession();

       /**创建一个购物订单的引用 */

       ShoppingCart cart = null;  

       /** 创建一个购物详细清单 */

       ShoppingCartItem cartItem = null;

       // session中获取图书列表 */

       List list = (List) session.getAttribute("bookdetail");

           //获取到列表中的第一本书

       Book book = (Book) list.iterator().next();

       //创建一张清单列表

       cartItem = new ShoppingCartItem();

       //把书放入清单列表

       cartItem.setBook(book);

        //判断一下session中是否有清单,如果没有说明是第一次购物,就给他创建一个购物车

       //如果session中已经有了清单,说明不是第一次购物了,就还让用户用他原来的的购物车

       if (session.getAttribute("items") == null) {

           cart = new ShoppingCart();

       } else {

           cart = (ShoppingCart) session.getAttribute("cart");

       }

       //现在有了购物车,就把购物清单加入到购物车

       cart.addItem(cartItem);  //此方法请参照下面的additem()方法

       //查询出当前购物车中的购物详细清单列表

       List items = cart.getItems();

       //把购物清单和购物车放入session

       session.setAttribute("items", items);

       session.setAttribute("cart", cart);

       //把总价计算出放入session

       session.setAttribute("total",new Double(cart.getTotalPrice()));

 

//-----------------------------------------------------------------------

//添加购物详细清单的方法

public void addItem(ShoppingCartItem newItem){

                                   //参间如下面findiltem();方法

       ShoppingCartItem cartItem = this.findItem(newItem.getBookId());

       if(cartItem != null){

           cartItem.setQuantity(cartItem.getQuantity()+newItem.getQuantity());

       }else{

           items.add(newItem);

       }

    }

//----------------------------------------------------------------------

//根据id查找详细清单

public ShoppingCartItem findItem(int itemId){

       ShoppingCartItem item = null;

       int num = items.size();

       for(int i = 0;i < num;i++){

           ShoppingCartItem cartItem = (ShoppingCartItem)items.get(i);

           if(itemId == cartItem.getBookId()){

              item = cartItem;

              break;

           }

       }

       return item;

    }

 

 

5,  确定购买

当用户点击了购买某中商品后,经过上一步代码处理,到我的购物车页面,在这个页面,显示当前选择的购物清单,并计算出总价,提供给用户可操作的有继续购物,删除一条详细清单,清空购物车,确认购买等操作

5.1  继续购物;当用户选择继续购物时,回到第2步,显示商品信息给用户操作

5.2  删除操作;当用户选择删除时,删除购物清单所对应的一条详细清单信息

5.3  清空购物车;但用户选择购物清单时,清空购物车;

     具体操作:先获取购物车,

ShoppingCart cart = (ShoppingCart) session.getAttribute("cart");

cart.emptyCart();

//-------------------------------------

   //清空列表中的内容 items是一个List 的引用

    public void emptyCart(){

       items.clear();

    }

 

5.4 确认购买;当用户选择确认购买时,把用户的详细信息列出给用户确认,如果用户有需要修改的地方,用户可修改后再提交确认信息,这时,将生成购物订单持久到数据库,部分关键代码如下:

/**声明一个购物车*/

       ShoppingCart cart = null;

       //获取用户提交的个人信息

       String customerName = ordercheckForm.getCustomerName();

       String email = ordercheckForm.getEmail();

       String telephone = ordercheckForm.getTelephone();

       String post = ordercheckForm.getPost();

       String address = ordercheckForm.getAddress();

      

       String user = this.checkUser(request, response);

   

       if (user != null && user.length() > 3) {

           //sessiong中获取用户

           Customer cust = (Customer) request.getSession()

                  .getAttribute("user");

          

           //session中获取购物车

           cart = (ShoppingCart) session.getAttribute("cart");

           //创建一个订单对象

           Orders order = new Orders();

           //创建一个HashSet 对象

           HashSet set = new HashSet();

           //把购物的总价写如订单

           order.setTotalprice(new Double(cart.getTotalPrice()));

           //把用户id写入订单

           order.setCustId(cust.getCustomerId());

           //遍历购物车中的详细清单信息

           Iterator it = cart.getItems().iterator();

           while (it.hasNext()) {

              //获取用户购物详细清单

              ShoppingCartItem cartitem = (ShoppingCartItem) it.next();

              //创建一个订单明细表

              Orderitem orderitem = new Orderitem();

              //把购物详细清单中的书的id加入订单明细表

              orderitem.setBookid(new Integer(cartitem.getBookId()));

              //把购物详细清单中的书的quantity加入订单详细列表

              orderitem.setQuantity(new Integer(cartitem.getQuantity()));

              //把订单对象写入到订单详细列表对象中

              orderitem.setOrders(order);

              //把订单放入HashSet

              set.add(orderitem);

           }

           //形成订单列表

           order.setOrderItems(set);

           //把订单持久化到数据库,参见如下@1详解

           this.getOrderService().saveNewOrder(order);

           //user对象保存到session 中,保证他购物完后还能正常继续购物

           session.setAttribute("user", cust);

           //清空购物车

           cart.emptyCart();

@1详解:this.getOrderService().saveNewOrder(order);

在这行代码中,我们只看到保存了订单信息到数据库,而没有把订单明细信息添加到数据库,但执行完后我们会发现,数据库中订单明细表中也添加了所有的订单信息,这是怎么加进去的呢?这就要看我们的Hibernate的对象关系映射之间的关系了,在这里,订单表和订单明细表是一对多的关系。我们看订单明细表 订单表中的映射文件

订单明细表 OrderItems.hbm.xml

<many-to-one name="orders"

                class="com.ascent.bean.Orders"

              cascade="all"

 outer-join="false"

 update="false"

insert="false"

              column="order_id" not-null="true" />

 

订单表 Orders.hbm.xml

<set name="orderItems" table="orderitem" lazy="false"

           inverse="false" cascade="all" sort="unsorted">

           <key column="order_id" />

           <one-to-many class="com.ascent.bean.Orderitem" />

       </set>

 

 

 

 

     从这两个映射文件中我们可以看出,订单明细表和订单表之间是多对一双向关联关系,当保存订单信息时,hibernate会根据他们之间的映射关系,自动保存订单明细表的信息

BaseAction.java源代码代码

package com.ascent.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import com.ascent.bean.Customer;

import com.ascent.business.IBookService;

import com.ascent.business.ICustomerService;

import com.ascent.business.IOrderItemService;

import com.ascent.business.IOrderService;

import com.ascent.util.AppContext;

 

public class BaseAction extends Action {

   

    public BaseAction() {

       super();

    }

 

    protected IBookService getBookService() {

       return (IBookService) AppContext.getInstance().getAppContext().getBean(

              "bookService");

    }

 

    protected IOrderService getOrderService() {

       return (IOrderService) AppContext.getInstance().getAppContext()

              .getBean("orderService");

    }

 

    protected ICustomerService getCustomerService() {

       return (ICustomerService) AppContext.getInstance().getAppContext()

              .getBean("customerService");

    }

 

    protected IOrderItemService getOrderItemService() {

       return (IOrderItemService) AppContext.getInstance().getAppContext()

               .getBean("orderItemService");

    }

    /**

     * 这个方法判断用户是否登陆

     * @param request

     * @param response

     * @return

     */

    protected String checkUser(HttpServletRequest request,

           HttpServletResponse response) {

       Customer user = null;

       user = (Customer) request.getSession().getAttribute("user");

       if (user == null) {

           System.out.println("you have no loginning!!!!");

           ActionErrors errors = new ActionErrors();

           errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError(

                  "errors.login"));

           this.saveErrors(request, errors);

           return null;

       } else {

           return user.getCustName();

       }

    }

}

 

 

三,持久化代码详解:

1,  BookHibernateDAO.java

package com.ascent.dao.hibernate;

import java.util.ArrayList;

import java.util.List;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;

import com.ascent.bean.Book;

import com.ascent.dao.IBookDAO;

 

public class BookHibernateDAO extends HibernateDaoSupport implements IBookDAO {

 

    private static final Logger LOGGER = LogManager.getLogger(BookHibernateDAO.class);

   

    private static final String LOAD_ALL = "from Book book order by book.bookId desc";

 

    private static final String LOAD_BY_AUTHOR = "from Book book where book.bookAuthor = ? order by book.bookId desc";

 

    private static final String LOAD_BY_NAME = "from Book book where book.bookName = ? order by book.bookId desc";

 

    public BookHibernateDAO() {

       super();

    }

    public Book saveBook(Book book) {

       try {

           this.getHibernateTemplate().saveOrUpdate(book);

           LOGGER.debug("保存书籍成功!");

           return book;

       } catch (Exception ex) {

           LOGGER.error("保存图书失败!",ex);

           ex.printStackTrace();

           return null;

       }

    }

    public Book getBook(Integer id) {

       LOGGER.debug("根据图书ID得到一个图书对象!");

       return (Book)this.getHibernateTemplate().get(Book.class,id);

    }

    public List findBookAll() {

       try{

           return this.getHibernateTemplate().find(LOAD_ALL);

       }catch(Exception ex){

           LOGGER.error("未能得到所有图书列表!",ex);

           ex.printStackTrace();

           return new ArrayList();

       }

    }

    public List findBookByAuthor(String author) {

       try{

           LOGGER.debug("按作者取得图书列表");

           return this.getHibernateTemplate().find(LOAD_BY_AUTHOR,author);

       }catch(Exception ex){

           LOGGER.error("未能按作者取得图书列表!");

           ex.printStackTrace();

           return new ArrayList();

       }

    }  

    public List findBookByName(String name) {

       try{

           return this.getHibernateTemplate().find(LOAD_BY_NAME,name);

       }catch(Exception ex){

           LOGGER.error("未能按书名得到图书列表!");

           ex.printStackTrace();

           return new ArrayList();

       }

    }

    public void removeBook(Book book) {

       LOGGER.debug("从数据库中删除指定图书");

       this.getHibernateTemplate().delete(book);

    }

}

 

2  CustomerHibernateDAO.java

package com.ascent.dao.hibernate;

 

import java.util.ArrayList;

import java.util.List;

 

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;

 

import com.ascent.bean.Customer;

import com.ascent.dao.ICustomerDAO;

 

public class CustomerHibernateDAO

    extends HibernateDaoSupport

    implements ICustomerDAO {

   

    private static final Logger LOGGER = LogManager.getLogger(CustomerHibernateDAO.class);

   

    private static final String LOAD_ALL = "from Customer cust order by cust.customerId desc";

 

    private static final String LOAD_BY_NAME = "from Customer cust where cust.custName = ? order by cust.customerId desc";

    public CustomerHibernateDAO() {

       super();

    }

    public Customer saveCustomer(Customer customer){

       try{

           this.getHibernateTemplate().save(customer);

           LOGGER.debug("保存用户信息到数据库成功!");

           return customer;

       }catch(Exception ex){

           LOGGER.error("保存用户信息到数据库失败!");

           ex.printStackTrace();

           return null;

       }

    }

 

    public Customer getCustomer(Integer id){

       LOGGER.debug("根据用户ID得到用户信息!");

       return (Customer)this.getHibernateTemplate().get(Customer.class,id);

    }

    public List findCustomerAll(){

       try{

           LOGGER.debug("得到所有用户列表!");

           return this.getHibernateTemplate().find(LOAD_ALL);         

       }catch(Exception ex){

           LOGGER.error("获取所有用户列表失败!");

           return new ArrayList();

       }

    }

    public List findCustomerByName(String name){

       try{

           LOGGER.debug("根据用户姓名得到用户信息!");

           return this.getHibernateTemplate().find(LOAD_BY_NAME,name);

       }catch(Exception ex){

           LOGGER.error("根据用户姓名获取用户信息失败!");

           ex.printStackTrace();

           return null;

       }

    }

    public void removeCustomer(Customer customer){

       LOGGER.debug("从数据库中删除指定用户信息!");

       this.getHibernateTemplate().delete(customer);

    }

}

 

 

3   OrderHibernateDAO.java

package com.ascent.dao.hibernate;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

 

import net.sf.hibernate.HibernateException;

import net.sf.hibernate.Session;

import net.sf.hibernate.Transaction;

 

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;

 

import com.ascent.bean.Orders;

import com.ascent.bean.Orderitem;

import com.ascent.dao.IOrderDAO;

 

public class OrderHibernateDAO

   extends HibernateDaoSupport

   implements IOrderDAO{

   

    private static final Logger LOGGER = LogManager.getLogger(OrderHibernateDAO.class);

   

    private static final String LOAD_ALL = "from Order ord order by ord.orderId desc";

 

    private static final String LOAD_BY_CUST = "from Order ord where ore.CustId = ? order by ord.orderId desc";

 

    public OrderHibernateDAO() {

       super();

    }  

    public Orders saveOrder(Orders order){

 

       try{

            LOGGER.debug("保存订单信息到数据库!");

           this.getHibernateTemplate().save(order);

            Iterator it = order.getOrderItems().iterator();

            while(it.hasNext()){

            LOGGER.debug("保存订单明细项到数据库!");

            Orderitem item = (Orderitem)it.next();

            this.getHibernateTemplate().save(item);

            }

           

           return order;

       }catch(Exception ex){

           LOGGER.error("保存订单和订单明细失败!");

           ex.printStackTrace();

           return null;

       }

    }

 

    public Orders getOrder(Integer id){

       LOGGER.debug("根据订单ID取得订单对象!");

       return (Orders)this.getHibernateTemplate().get(Orders.class,id);

    }

 

    public List findOrderAll(){

       try{

           LOGGER.debug("获取所有订单信息列表!");

           return this.getHibernateTemplate().find(LOAD_ALL);

       }catch(Exception ex){

           LOGGER.error("获取所有订单信息列表失败!");

           ex.printStackTrace();

           return new ArrayList();

       }

    }

 

    public List findOrderByCust(Integer custId){

       try{

           LOGGER.debug("根据用户ID获取用户相应的订单列表!");

           return this.getHibernateTemplate().find(LOAD_BY_CUST,custId);

       }catch(Exception ex){

           LOGGER.error("根据用户ID获取用户订单列表失败!");

           ex.printStackTrace();

           return new ArrayList();

       }

    }

 

    public void removeOrder(Orders order){

       LOGGER.debug("从数据库中删除指定订单");

       this.getHibernateTemplate().delete(order);

    }

 

}

 

4  OrderItemHibernateDAO.java

package com.ascent.dao.hibernate;

import java.util.ArrayList;

import java.util.List;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;

import com.ascent.bean.Orderitem;

import com.ascent.dao.IOrderItemDAO;

public class OrderItemHibernateDAO

   extends HibernateDaoSupport

   implements IOrderItemDAO {

   

    private static final Logger LOGGER = LogManager.getLogger(OrderItemHibernateDAO.class);

   

    private static final String LOAD_ALL = "from Orderitem oi order by oi.orderitemID desc";

 

    private static final String LOAD_BY_BOOK = "from Orderitem oi where oi.bID = ? order by oi.orderitemID desc";

 

    public OrderItemHibernateDAO() {

       super();

       // TODO Auto-generated constructor stub

    }

   

    public Orderitem saveOrderitem(Orderitem orderitem){

       try{

           LOGGER.debug("保存订单明显项到数据库!");

           this.getHibernateTemplate().save(orderitem);

           return orderitem;

       }catch(Exception ex){

           LOGGER.error("保存订单明细项到数据库失败!");

           ex.printStackTrace();

           return null;

       }

    }

 

   

    public Orderitem getOrderitem(Integer id){

       LOGGER.debug("根据订单明显项ID获取该订单项信息!");

       return (Orderitem)this.getHibernateTemplate().get(Orderitem.class,id);

    }

 

    public List findOrderitemAll(){

       try{

           LOGGER.debug("获取所有订单明显项列表!");

           return this.getHibernateTemplate().find(LOAD_ALL);

       }catch(Exception ex){

           LOGGER.error("获取所有订单明明细项列表失败!");

           ex.printStackTrace();

           return new ArrayList();

       }

    }

    public List findOrderitemByBook(Integer bookId){

       try{

           LOGGER.debug("根据书籍ID获取对应该书的所有订单明细项列表!");

           return this.getHibernateTemplate().find(LOAD_BY_BOOK,bookId);

       }catch(Exception ex){

           LOGGER.error("根据书籍ID获取对应该书的所有订单明细项列表失败!");

           ex.printStackTrace();

           return new ArrayList();

       }

    }

    public void removeOrderItem(Orderitem orderitem){

       LOGGER.debug("删除指定的订单明细项");

       this.getHibernateTemplate().delete(orderitem);

    }

 

}

 

四,utils包下的类

1  AppContext

package com.ascent.util;

import org.springframework.context.support.*;

public class AppContext {

    /**定义一个上下文环境的变量*/

  private static AppContext instance;

  private AbstractApplicationContext appContext;

 

  public synchronized static AppContext getInstance() {

    if (instance == null) {

      instance = new AppContext();

    }

    return instance;

  }

 

  private AppContext() {

    this.appContext = new ClassPathXmlApplicationContext(

        "applicationContext.xml");

  }

 

  public AbstractApplicationContext getAppContext() {

    return appContext;

  }

}

 

 

 

package com.ascent.util;

 

import java.util.LinkedList;

import java.util.List;

 

public class ShoppingCart {

   

    private List items = null;

      

    public ShoppingCart(){

       items = new LinkedList();

    }

   

    public List getItems(){

       return this.items;

    }

    /**

     * 添加购物清单

     * @param newItem

     */

    public void addItem(ShoppingCartItem newItem){

       ShoppingCartItem cartItem = this.findItem(newItem.getBookId());

       if(cartItem != null){

           cartItem.setQuantity(cartItem.getQuantity()+newItem.getQuantity());

       }else{

           items.add(newItem);

       }

    }

   

    public void removeItem(int itemId){

       System.out.print("======remove invoking !!");

       ShoppingCartItem item = findItem(itemId);

       if(item != null){

           System.out.println("==========prepeared remove");

           items.remove(item);

           System.out.println("==========item is removed");

       }else{

           System.out.println("=========item is not found");

       }

    }

   

    public void deleteItem(ShoppingCartItem newItem){

       items.remove(newItem);

    }

   

   

    public void emptyCart(){

       items.clear();

    }

    /**

     * 计算价格

     * @return

     */

    public double getTotalPrice(){

       double total = 0.0;

       int size = items.size();

       for(int i = 0;i< size;i++){

           total += ((ShoppingCartItem)items.get(i)).getBookPrice()*((ShoppingCartItem)items.get(i)).getQuantity();

       }

       return total;

    }

    /**

     * 根据 id 从购物详细清单中查找是否有这条清单

     * @param itemId 购物清单id

     * @return 购物清单

     */

    public ShoppingCartItem findItem(int itemId){

       ShoppingCartItem item = null;

       int num = items.size();

       for(int i = 0;i < num;i++){

           ShoppingCartItem cartItem = (ShoppingCartItem)items.get(i);

           if(itemId == cartItem.getBookId()){

              item = cartItem;

              break;

           }

       }

       return item;

    }

 

}

 

2  AppContext.java

package com.ascent.util;

 

import java.io.Serializable;

 

import com.ascent.bean.Book;

 

public class ShoppingCartItem implements Serializable {

    private Book book = null;

    private int quantity = 1;

   

    public void setBook(Book book){

       this.book = book;

    }

   

    public Book getBook(){

       return this.getBook();

    }

   

    public int getQuantity(){

       return this.quantity;

    }

   

    public void setQuantity(int quantity){

       this.quantity = quantity;

    }

   

    public int getBookId()

    {

        return this.book.getBookId().intValue();

    }

   

    public double getBookPrice(){

       return this.book.getBookPrice().doubleValue();

    }

   

    public String getBookName(){

       return this.book.getBookName();

    }

   

    public String getBookAuthor(){

       return this.book.getBookAuthor();

    }

 

}

 

 

五,页面效果

 

1 登陆页面

 

 

2显示信息页面,

商品详细信息页

 

3,我的购物车页

确认信息页

 

 

六,              数据库

 

1  表间关系

 

2,  数据库脚本

 

/*

SQLyog Enterprise - MySQL GUI v6.14

MySQL - 5.0.41-community-nt : Database - bookstoressh

*********************************************************************

*/

/*!40101 SET NAMES utf8 */;

 

/*!40101 SET SQL_MODE=''*/;

 

create database if not exists `bookstoressh`;

 

USE `bookstoressh`;

 

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

 

/*Table structure for table `book` */

 

DROP TABLE IF EXISTS `book`;

 

CREATE TABLE `book` (

  `book_name` varchar(100) NOT NULL default '',

  `book_id` int(11) NOT NULL auto_increment,

  `book_author` varchar(100) NOT NULL default '',

  `book_price` double NOT NULL default '0',

  `image` varchar(100) NOT NULL default '',

  `descibe` varchar(200) NOT NULL default '',

  PRIMARY KEY  (`book_id`)

) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

 

/*Data for the table `book` */

 

insert  into `book`(`book_name`,`book_id`,`book_author`,`book_price`,`image`,`descibe`) values ('corejava',1,'dfs',78,'image/10.gif','good,it is the success door to java'),('ejb',2,'zhangsan',99.9,'image/9.gif','enterprise java bean'),('jsp',4,'ccc',44,'image/7.gif','java server page'),('struts',9,'cbnm',44,'image/4.gif','java server page'),('spring',10,' qiuyn',22,'image/5.gif','java data base connection');

 

/*Table structure for table `customer` */

 

DROP TABLE IF EXISTS `customer`;

 

CREATE TABLE `customer` (

  `customer_id` int(11) NOT NULL auto_increment,

  `cust_name` varchar(100) NOT NULL default '',

  `password` varchar(100) NOT NULL default '',

  `email` varchar(100) NOT NULL default '',

  `phone` varchar(30) default NULL,

  `address` varchar(100) default NULL,

  `postcode` varchar(30) default NULL,

  PRIMARY KEY  (`customer_id`)

) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

 

/*Data for the table `customer` */

 

insert  into `customer`(`customer_id`,`cust_name`,`password`,`email`,`phone`,`address`,`postcode`) values (1,'luojs','luojs','luojs@123.com','123456789','beijing',''),(2,'feifei','feifei','feifie@fei.com','987654321','yunnankunming',NULL);

 

/*Table structure for table `orderitem` */

 

DROP TABLE IF EXISTS `orderitem`;

 

CREATE TABLE `orderitem` (

  `orderItem_id` int(11) NOT NULL auto_increment,

  `quantity` int(11) NOT NULL default '0',

  `order_id` int(11) NOT NULL default '0',

  `bookid` int(11) NOT NULL default '0',

  PRIMARY KEY  (`orderItem_id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

/*Data for the table `orderitem` */

 

/*Table structure for table `orders` */

 

DROP TABLE IF EXISTS `orders`;

 

CREATE TABLE `orders` (

  `order_id` int(11) NOT NULL auto_increment,

  `cust_id` int(11) NOT NULL default '0',

  `totalprice` double NOT NULL default '0',

  PRIMARY KEY  (`order_id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

/*Data for the table `orders` */

 

/*Table structure for table `tableid` */

 

DROP TABLE IF EXISTS `tableid`;

 

CREATE TABLE `tableid` (

  `id` int(11) NOT NULL default '0',

  `IDValue` int(11) NOT NULL default '0',

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

/*Data for the table `tableid` */

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

 

 

 

 

 

 

 

(133) 网上书店系统 【摘要】本文首先介绍了课题所涉及的相关技术:多层用户/服务器结构以及Web应用的相关数据库访问技术,ASP技术。在次基础上论述了网上书店系统的设计目标、系统需求和总体设计方案,较详细的论述了网上书店系统的详细设计和实现。最后,本文对网上书店系统进行了总结并提出了还需要改进的问题。 【关键词】购物车,网上书店系统,B/S结构,ASP 【Abstract】This paper firstly introduces multi-tier Client/server Architecture, Web-related technology and ASP(Active Server Paper).Based on them, particularly analyzes system design and solution in detail. At last, the summary and future development of On Bookstore System is offered. 目录 第一章 引 言 3 1.1 研究背景 3 1.1.1国内外电子商务发展情况 3 1.1.2网上书店系统的现状 5 1.2 开发网上书店系统的意义 5 第二章 系统的技术综述 6 2.1 Browser/Server结构 6 2.2三层结构的概念 7 2.3Web客户/服务器模型 7 第三章 需求分析和系统功能概述 12 3.1系统设计目标 12 3.2系统需求分析 12 3.3系统功能概述 13 第四章 系统总体设计 17 5.1系统开发环境 17 4.2系统管理流程及模块划分 17 4.2.1网上书店系统的整体规划 17 4.2.2网上书店系统前台销售管理系统(网站)的整体网页设计 18 4.2.3各个子系统模块的功能 18 4.3软件系统的分层设计 21 4.3.1软件系统的三层B/S系统体系结构 21 4.3.2各层的主要功能 21 4.3.3数据库表的结构设计 21 第五章 结束语 24 致 谢 25 参考文献 26 附录(部分界面及代码) 27 第一章 引 言 1.1 研究背景 1.1.1国内外电子商务发展情况   计算机的出现给人类社会带来了第三次工业革命,计算机和计算机网络已经深入到了各行各业,各个领域,随着internet的不断扩大和发展,电脑网络“把每一个国家、每一个城市甚至每一个家庭连接到一起”,形成了一条“信息高速路”,就像高速公路大大提高了车辆行驶的速度一样。   信息高速路给生活、学习和工作带来了什么影响呢?总结起来主要有三点:第一,电脑网络可以查阅信息,迅速而便捷地了解周围的世界;第二,可以跟世界各地的人随时进行交流,并建立联系;第三,可以参加网络购物、拍卖等活动。正是由于有了这么一条信息高速路,网上查询和网上购物随之有可能,因此网上商业交易也迅速地发展起来,也因此给我们的生活带来很多方便。   电子商务是于九十年代初,在欧美兴起的一种全新的商业交易模式,它实现了交易的无纸化,效率花,自动化,表现了网络最具魅力的地方,快速的交换信息,地理界限的模糊,这所有的一切也必将推动传统商业行为在网路时代的变革。早在网路盛行的时代,通过网路的电子邮件,视频交换,文件交换以及目前还很热们的EDI((电子数据交换),所进行的商业行为,都可以说是现在电子商务的某种形式的表现,也可以说,电子商务是它们崭新的应用集合。   电子商务所包含的内容非常多,不仅包括商业交易,还包括政府职能部门提供电子化服务,电子银行,跨企业共同协作,网络购物等等。电子商务革新了传统经济活动的运作手段。因此,电子商务按照经济活动的类别可分为两大类别:第一,企业间的电子商务,即企业与企业之间,通过网络进行产品或服务的经营活动。第二,企业与消费者之间的电子商务,即企业通过网络为消费者提供一个产品或者服务的经营活动。 实际上,第一大类模式又可以分为两种,第一种是企业之间通过网络进行产品销售和购买,第二种是企业之间通过网络提供服务和得到服务。第二大类模式也可以分为两种,第一种是企业与个人消费者通过网络进行产品销售和购买,第二种是企业与个人消费者通过网络提供服务和得到服务。第二类,企业与个人,对于个人,也就是消费者而言,电子商务就是我们常说的电子消费,网上购物,它也称为电子商业(e-business)。企业与个人,对于企业来说是扩大企业产品的知名度,拥有更大的市场空间,以及利用网络的跨地域性,在销售通道上,更易控制及掌握。而对于个人来说,进行电子消费,不受时间及地域的限制,有更多的自主权。在消费变的方便的同时,消费者作为个体,将会有更多的时间及精力来完成其它生活事务,对于城乡商业平衡也起到莫大的作用。电子商务是顺应网络时代的发展要求,它的出现,必将为未来的商业贸易往来的发展及繁荣起着无可替代的作用。 举例来说,新浪等门户网站分别为企业或个人提供新闻、邮件、广告、短信、游戏等服务活动,通过第二类和第四类电子商务活动获得经济收入;阿里巴巴网站主要是为企业提供产品销售和采购等商机信息服务,从事的是第二类电子商务活动;易趣网主要是为个人消费者提供拍卖等商机信息服务,从事的是第四类电子商务活动;卓越网主要是为个人消费者提供图书、光盘等产品,从事的是第三类电子商务活动;神州数码公司通过“e-brige”网站为代理商提供IT产品,从事的是第一类电子商务活动;联众网站为个人消费者提供娱乐服务,从事的是第四类电子商务活动;工商银行等金融机构的在线银行通过网络为企业和个人提供金融服务,从事的是第二、第四类电子商务活动。   电子商务将传统的商务流程电子化、数字化,一方面以电子流代替了实物流,可以大量减少人 力、物力,降低了成本;另一方面突破了时间和空间的限制,使得交易活动可以在任何时间、任何地 点进行,从而大大提高了效率。 电子商务所具有的开放性和全球性的特点,为企业创造了更多的贸易机会。 电子商务使企业可以以相近的成本进入全球电子化市场,使得中小企业有可能拥有和大企业一样 的信息资源,提高了中小企业的竞争能力。 电子商务重新定义了传统的流通模式,减少了中间环节,使得生产者和消费者的直接交易成为可 能,从而在一定程度上改变了整个社会经济运行的方式。 电子商务一方面破除了时空的壁垒,另一方面又提供了丰富的信息资源,为各种社会经济要素的 重新组合提供了更多的可能,这将影响到社会的经济布局和结构。 1.1.2网上书店系统的现状   由于电子商务的迅猛发展,网上书店系统发展也已经达到一个较高的水准,现在的网上书店系统实现的功能也非常的多,最重要的当属图片的销售,也就是管理库房中的图书,以及管理用户的购物车,从而实现结账等一系列功能。另外网上书店系统还提供给用户查找数据库中图书相关记录的功能。在确认用户身份方面也已经比较完善,并且具有管理员的功能,管理员对整个数据库可以进行操作。现在拥有一些知名的网上书店系统如:当当,卓越等。 1.2 开发网上书店系统的意义   就网上书店系统而言,由于网络已经覆盖全球,信息量大而独具优势。售书的理念也很简单,就是读者可以自己寻找自己喜爱的书为替读者找寻他们想要的书。对于读者来说,网上书店近在咫尺,并且永不下班关门,读者可以随时随地自由地查询和订购图书,读者无需亲临书店,一档一档地找,一本一本地翻,只要坐在电脑前,开机上网即可买到所需书籍,而且读者的挑选余地也大多了,检索也很方便,同时还减少了书店过程中的支出,另外应当看到图书选购必得翻阅详看,耗时费力,特别是热衷书店者,几乎都是奋力开拓事业者和苦心求学深造者,时间对他们而言无比宝贵,网上书店节省了大量时间,这对于那些没有时间经常逛传统书店或其住所离传统书店较远的读者来说,具有实际意义。因此网上售书必将有长足的发展。   开办网上书店系统也可以为在校大学生提供方便、廉价、高效的书店方式,促进文化传播,帮助国家和学校培养优秀的人才,具有长远的社会效益和经济效益。 第二章 系统的技术综述 2.1 Browser/Server结构   网上书店系统特点就是利用Browser/Server(B/S)结构,实现图书的在线查找,销售,以及图书的在线管理等功能。这种系统的优势在于系统简单,功能强大,扩展能力良好以及能够方便的跨地域操作等性能。   Client/Server(C/S)模式与Browser/Server模式是现在比较流行的两种数据库的应用模式。单独应用哪一种模式都将受其自身弱点的限制。Client/Server模式主要是在以局域网为基础的环境下展开应用的,它受到地域的限制。而Browser/Server模式通过Internet进行通信,可以不受地域的限制,但是它不能够进行联机事务处理,并且在处理大量数据的情况下,速度较慢。从目前的开发技术来看,Browser端作为信息收集源,特别是大量的数据收   集工作还不能完全取代Client端的用户界面。在这方面,Client端的各种开发工具的功能更加强大也更加灵活。   对于本系统,其功能目标是要将图书销售由传统的商店模式向在线销售的转变,同时还要能对销售的订单和图书的种类进行管理。下图是本系统的网络应用原理示意图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值