精华内容
下载资源
问答
  • 订单状态”:1=未发货、2=已发货、3=已签收、4=已撤单 (默认值1) 订单项的查看 实现思路: 订单表的查询 将订单表的订单状态由1改成2 通过订单的id到订单项表查询出对应的订单项 2、买家: 查看...

    一、订单管理内容

    1、商家:

            查看订单

            发货-->“订单状态”:1=未发货、2=已发货、3=已签收、4=已撤单 (默认值1)

            订单项的查看

    实现思路:

            订单表的查询

            将订单表的订单状态由1改成2

            通过订单的id到订单项表查询出对应的订单项

    2、买家:

            查看订单

            撤单

            签收

    实现思路:

            订单表的查询

            将订单表的订单状态由1改成4

            将订单表的订单状态由2改成3

    二、编码


    1、编码思路:

    商家:

                    实体类:上期内容已写

                    Dao层:

                    OrderDao:新增两个方法:①、订单的查询,通过订单号查询 ②、修改订单状态

                    OrderItemDao:新增一个方法:①、通过外键订单id查询订单项表

     买家:

                  实体类:上期内容已写

                  Dao层:

                   OrderDao:新增两个方法:①、订单的查询,通过订单号查询 ②、修改订单状态

    2、实现编码


    (1、实现未发货以及已发货功能

        ①、写Dao方法:OrderDao

    //    按照订单时间倒序条件筛选查询
        public List<Order> list(Order order, PageBean pageBean) throws Exception {
    //        String sql="select * from t_easyui_order order by orderTime desc";
            String sql="select * from t_easyui_order where 1=1";
            long id=order.getId();
            if(id!=0) {
                sql+=" and id ="+id;
            }
    //        用来根据订单状态筛选查询
            int orderState = order.getOrderState();
            if(orderState!=0) {
                sql+=" and orderState ="+orderState;
            }
            sql+=" order by orderTime desc";
            return super.executeQuery(sql, Order.class, pageBean);
        }
        
    //    修改订单状态
        public void editState(Order t) throws Exception {
            String sql="update t_easyui_order set orderState= ? where id= ? ";
    //        如果是发货,则需要修改发货时间
            int orderState=t.getOrderState();
            if(orderState==2) {
                sql="update t_easyui_order set orderState= ?,sendTime=now() where id= ?  ";
            }
            super.executeUpdate(sql, t, new String[] {"orderState","id"});
        }

    当然需要给时间一个格式,在实体类添加以下代码

    public class Order {
        private long id;
        private long uid;
    //    查询时间的时候用这个格式
        @JsonFormat(pattern="yyyy-mm-dd HH:mm:ss",timezone="GMT+8")
        private Date orderTime;
        private String consignee;
        private String phone;
        private String postalcode;
        private String address;
        private int sendType;
        @JsonFormat(pattern="yyyy-mm-dd HH:mm:ss",timezone="GMT+8")
        private Date sendTime;
        private float orderPrice;
        private int orderState;

    }

    Dao方法:OrderItemDao

    //    查询
            public List<OrderItem> list(OrderItem oi, PageBean pageBean) throws Exception {
                String sql="select * from t_easyui_orderItem where 1=1";
    //            oid是订单项的外键,关联了订单表的主键
                long oid=oi.getOid();
                if(oid!=0) {
                    sql+=" and oid="+ oid;
                }
                return super.executeQuery(sql, OrderItem.class, pageBean);
            }

    ②、子控制器OrderAction

    package xhy.com.web;

    import java.util.List;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.xhy.framework.ActionSupport;
    import com.xhy.framework.ModelDriver;
    import com.xhy.util.PageBean;
    import com.xhy.util.R;
    import com.xhy.util.ResponseUtil;

    import xhy.com.dao.OrderDao;
    import xhy.com.entity.Order;

    public class OrderAction extends ActionSupport implements ModelDriver<Order>{
        private Order order=new Order();
        private OrderDao od=new OrderDao();
        
        @Override
        public Order getModel() {
            // TODO Auto-generated method stub
            return order;
        }
        
    //    查询所有订单
        public void list(HttpServletRequest req, HttpServletResponse resp) {
            PageBean pageBean=new PageBean();
            pageBean.setRequest(req);
            try {
                List<Order> list = od.list(order, pageBean);
                ResponseUtil.writeJson(resp, new R().data("total", pageBean.getTotal()).data("rows", list));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    //    关于发货、撤单、签收共用的方法
        public void cancelAndReceive(HttpServletRequest req, HttpServletResponse resp) {
    //        order就已经包含了,将要修改的状态以及对应的订单id
            try {
                od.editState(order);
                ResponseUtil.writeJson(resp, 1);
            } catch (Exception e) {
                e.printStackTrace();
                try {
                    ResponseUtil.writeJson(resp, 0);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
            
        }
        }

    ③、进行配置

    <action path="/order" type="lv.com.web.OrderAction"></action>

    商家可以进行发货:

    同样买家可以签收以及撤单:

     买家的数据改变,商家数据显示状态也会改变

    (2、查看订单项

    ①、写子控制器OrderItemAction

    package xhy.com.web;

    import java.util.List;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.xhy.framework.ActionSupport;
    import com.xhy.framework.ModelDriver;
    import com.xhy.util.PageBean;
    import com.xhy.util.R;
    import com.xhy.util.ResponseUtil;

    import xhy.com.dao.OrderItemDao;
    import xhy.com.entity.OrderItem;

    public class OrderItemAction extends ActionSupport implements ModelDriver<OrderItem>{
        private OrderItem oi=new OrderItem();
        private OrderItemDao oid=new OrderItemDao();
        
        @Override
        public OrderItem getModel() {
            // TODO Auto-generated method stub
            return oi;
        }
        
        public void list(HttpServletRequest req, HttpServletResponse resp) {
            PageBean pageBean=new PageBean();
            pageBean.setRequest(req);
            try {
                List<OrderItem> list = oid.list(oi, pageBean);
                ResponseUtil.writeJson(resp, new R().data("total", pageBean.getTotal()).data("rows", list));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
     

    ②、进行配置

    <action path="/orderItem" type="lv.com.web.OrderItemAction">
        </action>

    结果:

    展开全文
  • 网上书店系统是由用户使用的选购商品、生成订单、订单状态查询的程序和后台管理员使用的商品管理、订单管理系统组成的。 一个网上书店系统应该提供如下功能: 书籍分类的增加、查询和修改功能; 各个分类中书籍的...
  • [.NET领域驱动设计实战系列]专题六:DDD实践案例:网上书店订单功能的实现 一、引言  上一专题已经为网上书店实现了购物车的功能了,在这一专题中,将继续对网上书店案例进行完善,本专题将对网上...

    [.NET领域驱动设计实战系列]专题六:DDD实践案例:网上书店订单功能的实现

    一、引言

       上一专题已经为网上书店实现了购物车的功能了,在这一专题中,将继续对网上书店案例进行完善,本专题将对网上书店订单功能的实现进行介绍,现在废话不多说了,让我们来一起看看订单功能是如何实现的吧。

    二、订单功能的实现思路

       在网上购过物的朋友,对于订单功能的流程自然不陌生,这里我还是先来梳理下下订单的一个流程:

    • 用户点击我的购物车,可以勾选对应的商品进行结算
    • 在结算页面可以提交订单来创建一个订单
    • 创建订单成功之后就是进行付款了。

      一般购物网站下订单的流程分上面3步,由于在本案例中并没有对接第三方的支付平台,所以这里就没有上面第三步的过程了。即在网上书店案例中订单提交成功之后就是已付款状态。

      从上面下订单流程我们就可以知道订单功能的实现思路:

    • 用户点击购物车中购买商品按钮来进行下订单,此时触发控制器中的结算方法进行调用
    • 结算方法通过调用OrderService服务中的结算方法
    • 由于订单的创建涉及了3个实体操作,包括购物车实体,购物车项实体和订单实体。所以这里需要引入领域服务。因为创建订单这个操作涉及了多个实体,则这个业务逻辑放在每个实体中都不合适,因为并属于单独一个实体的逻辑。所以这里引入领域服务来实现这种涉及多个实体的操作。
    • 则OrderService服务中的结算方法通过调用领域服务中的CreateOrder方法来完成订单创建的功能。
    • 领域服务中可以调用对应的实体仓储来完成实体的持久化。这里需要注意的一点:因为领域服务涉及多个实体的持久化,则需要引入工作单元模式将这些实体的操作进行统一提交,要不都成功,要不都不成功。这也就是引入工作单元初衷。

      上面的思路就是订单功能的实现思路。有了上面的思路之后,实现订单功能也一目了然了。下面让我们一起在网上书店案例中实现下看看。

    三、网上书店订单功能的实现

       这里我们按照上面的实现思路由下至上地去实现订单功能。

    1. 首先我们需要订单仓储来完成订单实体的持久化。具体订单仓储接口和实现如下代码所示:
    // 订单仓储接口
        public interface IOrderRepository : IRepository<Order>
        {
        }
    
     // 订单仓储的实现类
        public class OrderRepository : EntityFrameworkRepository<Order>, IOrderRepository
        {
            public OrderRepository(IRepositoryContext context) : base(context)
            {
            }
        }

      2. 领域服务的实现。具体的领域服务接口和实现代码如下所示:

    // 领域服务接口
        public interface IDomainService
        {
            Order CreateOrder(User user, ShoppingCart shoppingCart);
        }
        
        // 领域服务类型
        // 牵涉到多个实体的操作可以把这些操作封装到领域服务里
        public class DomainService : IDomainService
        {
             private readonly IRepositoryContext _repositoryContext;
            private readonly IShoppingCartItemRepository _shoppingCartItemRepository;
            private readonly IOrderRepository _orderRepository;
                
             /// <summary>
            /// 创建订单,涉及到的操作有2个:1. 把购物车中的项中购物车移除; 2.创建一个订单。
            /// 这两个操作必须同时完成或失败。
            /// </summary>
            /// <param name="user"></param>
            /// <param name="shoppingCart"></param>
            /// <returns></returns>
            public Order CreateOrder(User user, ShoppingCart shoppingCart)
            {
                var order = new Order();
                var shoppingCartItems =
                    _shoppingCartItemRepository.GetAll(
                        new ExpressionSpecification<ShoppingCartItem>(s => s.ShoopingCart.Id == shoppingCart.Id));
                if (shoppingCartItems == null || !shoppingCartItems.Any())
                    throw new InvalidOperationException("购物篮中没有任何物品");
    
                order.OrderItems = new List<OrderItem>();
                foreach (var shoppingCartItem in shoppingCartItems)
                {
                    var orderItem = shoppingCartItem.ConvertToOrderItem();
                    orderItem.Order = order;
                    order.OrderItems.Add(orderItem);
                    _shoppingCartItemRepository.Remove(shoppingCartItem);
                }
                order.User = user;
                order.Status = OrderStatus.Paid;
                _orderRepository.Add(order);
                _repositoryContext.Commit();
                return order;
            }
        }

      3. 订单服务的实现。具体订单服务实现代码如下所示:

    public class OrderServiceImp : ApplicationService, IOrderService
        {
            #region Private Fileds
            private readonly IShoppingCartRepository _shoppingCartRepository;
            private readonly IShoppingCartItemRepository _shoppingCartItemRepository;
            private readonly IUserRepository _userRepository;
            private readonly IOrderRepository _orderRepository;
            private readonly IProductRepository _productRepository;
            private readonly IDomainService _domainService;
            private readonly IEventBus _eventBus;
            #endregion 
    
            #region Ctor
            public OrderServiceImp(IRepositoryContext context, 
                IUserRepository userRepository, 
                IShoppingCartRepository shoppingCartRepository, 
                IProductRepository productRepository, 
                IShoppingCartItemRepository shoppingCartItemRepository, 
                IDomainService domainService, 
                IOrderRepository orderRepository, 
                IEventBus eventBus) : base(context)
            {
                _userRepository = userRepository;
                _shoppingCartRepository = shoppingCartRepository;
                _productRepository = productRepository;
                _shoppingCartItemRepository = shoppingCartItemRepository;
                _domainService = domainService;
                _orderRepository = orderRepository;
                _eventBus = eventBus;
            }
    
            #endregion 
            
             public OrderDto Checkout(Guid customerId)
            {
                var user = _userRepository.GetByKey(customerId);
                var shoppingCart = _shoppingCartRepository.GetByExpression(s => s.User.Id == user.Id);
                var order = _domainService.CreateOrder(user, shoppingCart);
    
                return Mapper.Map<Order, OrderDto>(order);
            }
         
            public OrderDto GetOrder(Guid orderId)
            {
                var order = _orderRepository.GetBySpecification(new ExpressionSpecification<Order>(o=>o.Id.Equals(orderId)), elp=>elp.OrderItems);
                return Mapper.Map<Order, OrderDto>(order);
            }
    
            // 获得指定用户的所有订单
            public IList<OrderDto> GetOrdersForUser(Guid userId)
            {
                var user = _userRepository.GetByKey(userId);
                var orders = _orderRepository.GetAll(new ExpressionSpecification<Order>(o => o.User.Id == userId), sp => sp.CreatedDate, SortOrder.Descending, elp=>elp.OrderItems);
                var orderDtos = new List<OrderDto>();
                orders
                    .ToList()
                    .ForEach(o=>orderDtos.Add(Mapper.Map<Order, OrderDto>(o)));
                return orderDtos;
            }

      4. HomeController控制器中Checkout操作的实现。具体实现代码如下所示:

    public class HomeController : ControllerBase
    {
            /// <summary>
            /// 结算操作
            /// </summary>
            /// <returns></returns>
            [Authorize]
            public ActionResult Checkout()
            {
                using (var proxy = new OrderServiceClient())
                {
                    var model = proxy.Checkout(this.UserId);
                    return View(model);
                }
            }
    
            [Authorize]
            public ActionResult Orders()
            {
                using (var proxy = new OrderServiceClient())
                {
                    var model = proxy.GetOrdersForUser(this.UserId);
                    return View(model);
                }
            }
    
            [Authorize]
            public ActionResult Order(string id)
            {
                using (var proxy = new OrderServiceClient())
                {
                    var model = proxy.GetOrder(new Guid(id));
                    return View(model);
                }
            }
    }

      这样我们就在网上书店中实现了订单功能了。具体的视图界面也就是上一专题中实现的购物车页面。下面具体看看订单的具体实现效果:

      结算页面:

      点击确认购买按钮,在弹出框中点击确认来完成订单的创建:

      通过我的订单来查看所有订单页面:

    四、总结

      到此,网上书店案例的订单功能的实现就完成了,在接下来的专题将继续对该案例进行完善,在下一专题中将为该案例引入后台管理操作。商家或管理员可以进入后台管理来对用户订单进行确认发货,以及添加商品,分类等操作。具体实现请见下一专题。

      本专题中所有实现源码下载:https://github.com/lizhi5753186/OnlineStore_Second/

     

    posted @ 2015-06-09 08:23 Learning hard 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • 网上书店

    2019-12-10 10:02:23
    书店经理:我们原本是一个传统的实体书店,顾客要买书都是亲自到书店来的,这样挺不方便。而且随着书店销售图书种类和数量的增加以及顾客的增长,尤其是大量顾客到书店选购图书,使得书店场地不足,工作人员也很忙碌...
    1. 需求分析
      访谈调研
      书店经理:我们原本是一个传统的实体书店,顾客要买书都是亲自到书店来的,这样挺不方便。而且随着书店销售图书种类和数量的增加以及顾客的增长,尤其是大量顾客到书店选购图书,使得书店场地不足,工作人员也很忙碌。其实,还有一点就是,有不少人进入书店后并不买书,只是查找些资料,有的甚至会在这呆上很长的时间直到把书免费看完。这种行为,工作人员一般是不阻止的,结果最后这些被看过的书会因为有阅读过的痕迹而影响销售。而且现在电子商务已经发展起来了,所以我们想到借助网络,让顾客通过网上书店购买图书。这样我们书店可以省掉大量的场地维护和工作人员成本支出,同时计算机可以方便的检索图书信息,让顾客可以足不出户以更优惠的价格买到需要的书。
      系统分析员:能谈谈您对网上书店的要求吗?
      书店经理:网上书店要能实现对外和对内的功能,对外是顾客能在网上书店订购图书,能提交订单。对内,书店工作人员能够通过网上书店及时的看到这些订单,并进行处理。为了把书送到顾客手里,我们已经联系了快递公司初步达成协议,由他们往返顾客和书店之间把图书送到顾客手里。书店管理员受理订单后,就会通知快递公司送货。当然,书店的图书上架和下架也应该由网上书店完成了。
      工作人员甲:实体店中,图书是按照不同种类放置的,方便顾客挑选。网上书店的图书也应该能够按照这种模式分类显示。这样,图书的信息和种类要由网上书店设置和管理。已有种类的新书或新种类的图书上架,网上书店能够保存这些信息。如果信息输入错误,能够进行修改。
      工作人员乙:另外书店会搞一些促销,推出一些特价图书。以前这些特价书的信息,都是我们根据促销活动整理出来,贴在书店的醒目位置。促销活动过后,特价图书会回复原来的价格。希望网上书店也能够管理这些特价图书。
      系统分析员:能谈谈平时买书的经过吗?
      顾客甲:一般都是先在书店里看看图书的简要介绍,或者先找找看有没有自己需要的书,有时是没有目标的寻找,有时直奔一类图书而去。找到我想买的书或者觉得看的书不错,就会去柜台结账。
      工作人员丙:不过有时在结账的时候,顾客会突然改变主意,不买一些书或者又回去挑选图书了。
      顾客甲:有时好像是这样的。要是网上书店在结账前能方便管理我所选购的图书就好了,这样通过计算机直接操作,就不用跑来跑去了。
      系统分析员:可以使用虚拟的购物车。
      工作人员丙:对,这样在用户确认购买前可自行管理选购的图书,决定要不要购买,还有购买数量。
      系统分析员:顾客先使用虚拟的购物车选购管理图书,然后提交订单给书店处理,是这样吧。
      书店经理:没错,就这样办。另外最好顾客能够留下向己的信息,方便以后购买。
      顾客:你们可以实行会员制啊。就像我们在网上逛论坛一样,会员才能发言普通游客只能看。这样我们平时就只在网上书店查查资料什么的,只在购买图书的时候才使用会员身份。
      书店经理:恩,这样不仅可以保留你们的信息,也可以保留购买记录。
      系统分析员:会员提交购买订单后,书店打算如何收取或者说用户怎么付款
      书店经理:我们可以接受货到付款,顾客也可以使用网上银行、汇款等方式付款。
      顾客:这样我们就方便多了。对了,那是不是付款前,我还多了一次“反悔”的机会啊。
      书店经理:在我们书店没有受理订单之前,你们可以取消交易。不过受理后就不行了。
      通过几次这样的访谈(限于篇幅,在此并未列出所有访谈内容),可以获得网上书店的需求信息,确定系统范围。网上书店是实现对实体书店内部图书商品和顾客购买图书的综合管理系统。
      (1) 识别参与者
      网上书店的主要参与者有会员,以及管理人员。此外,访客(非会员)也可是使用该系统进行一些图书资料的查询等。
      另外,为了业务发展和内部管理分工明确,书店希望按照工作范围分配管理员的职责权限,管理员分为商品管理员、订单管理员和系统管理员。
      (2) 识别用例并绘制用例图
      在用例建模阶段,为降低用例图的复杂性,将网上书店划分为两个子系统即顾客购书子系统和书店内部管理子系统。会员和访客属于顾客购书子系统管理员则属于书店内部管理子系统。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    系统静态建模–需求分析阶段类图(领域模型)

    在这里插入图片描述

    1. 动态建模
      (1)系统动态建模–活动建模

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    (2)系统动态建模–用例的行为顺序(图)
    直接绘制某个用例背后的顺序图并不容易–用BEC模式来解决这个问题;BEC模式:将对象分为三类–边界对象-控制对象-实体对象;●参与者只能与边界对象互动 ●每个用例可以对应生成一个控制类 ●实体对象一般不能发送消息给边界对象和控制对象(返回消息除外)。

    (3) 系统动态建模–对象的状态图
    本系统具有明显转换状态的类是订单(对象);具有:确认订单-等待到款-等待受理-已受理-已发货-交易成功-取消 7种状态

    在这里插入图片描述

    展开全文
  • 网上书店jsp课程设计

    2011-02-15 13:09:45
    (1)管理员拥有最高权限,可以访问所有订单,可以设置冻结/解冻顾客账户,可浏览、增、删、改、查订单、可维护订单状态。 (2)管理订单功能:管理员可通过Web方式取消、修改提交的订单、查询订单。 (3)管理书籍...
  • 网上书城jsp+servlet版

    2018-06-05 20:49:02
    PURSUE、W网上书城 version bookstore1.0 作者:WJB ------------------------------------------------------------------------ 本系统使用(HTML+CSS)+(JSP+Servlet)+Java+JDBC+数据库等技术实现。 环境:...
  • 采用jsp+servlet+javabean的开发模式的网上书城,客户端功能: 1.进行书籍购买浏览,可按类别、书名查询书籍 2.用户的注册、更改信息、改密及登录操作 3.用户登录之后可进行书籍的加入购物车操作 4.在购物车进行...
  • jsp+javabean网上书店

    2009-06-23 11:38:03
    网上书店,全面的后台管理,会员折扣功能未实现,其它均已经实现,前台订单状态未做,很简单,后台已实现,前台会点的很容易实现,数据库采用sql server2000.myeclipse开发,因为界面修改过不是很美观,大家可以自己...
  • 另一种是网站的管理者,可以对网上书店中的书藉信息进行管理、处理客户的订单。  二、 系统功能需求  鉴于网上书店系统的两种用户角色的说明,可将系统分为前台和后台,这种分法也是当前网站系统惯用的做法,前台...
  • 网上书店 h1 > < br /> < br /> < div > < div style =" float : right ; " > < form action = " /mybookstore/client/LoginServlet " method = " post " > 用户名: < input type = " ...

    购买

    在该项目中,我们设计成用户不需要登录就能购买。因此,在前台首页(client/index.jsp)显示图书的时候,就添加购买的超链接。
    在这里插入图片描述
    接着,在cn.liayun.web.client包中新建一个BuyServlet,用于处理用户想要买的书籍。

    package cn.liayun.web.client;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.liayun.domain.Book;
    import cn.liayun.domain.Cart;
    import cn.liayun.service.BusinessService;
    import cn.liayun.service.impl.BusinessServiceImpl;
    
    @WebServlet("/client/BuyServlet")
    public class BuyServlet extends HttpServlet {
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String id = request.getParameter("id");
    		BusinessService service = new BusinessServiceImpl();
    		Book book = service.findBook(id);
    		
    		Cart cart = (Cart) request.getSession().getAttribute("cart");
    		if (cart == null) {
    			cart = new Cart();
    			request.getSession().setAttribute("cart", cart);
    		}
    		cart.add(book);
    		
    		//一定要用重定向技术
    		response.sendRedirect(request.getContextPath() + "/client/listcart.jsp");
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }
    

    然后,在WebRoot/client目录下新建一个显示购物车的listcart.jsp页面。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>购物车列表页面</title>
    </head>
    <body style="text-align: center;">
    	<%@include file="/client/head.jsp"%>
    	<br />
    	<br />
    	<table border="1px" cellpadding="0" cellspacing="0" width="90%" align="center">
    		<caption>
    			<h2>购物车页面</h2>
    		</caption>
    		<tr>
    			<td>书名</td>
    			<td>售价</td>
    			<td>数量</td>
    			<td>小计</td>
    		</tr>
    		<c:forEach var="entry" items="${cart.map}">
    			<tr>
    				<td>${entry.value.book.name }</td>
    				<td>${entry.value.book.price }</td>
    				<td>${entry.value.quantity }</td>
    				<td>${entry.value.price }元</td>
    			</tr>
    		</c:forEach>
    		<tr>
    			<td colspan="2">合计</td>
    			<td colspan="2">${cart.price }元</td>
    		</tr>
    	</table>
    	<a href="#">生成订单</a>
    </body>
    </html>
    

    最后,测试的效果如下:
    在这里插入图片描述

    用户登录与注册

    当用户购买了几本图书后,想要点击生成订单超链接生成他自己的订单,此时会交由一个Servlet处理,判断该用户是否登录本网站,如果他登录了本网站,那么就会帮他生成一份订单;反之,该用户就必须登录本网站了。
    于是,我们在显示购物车页面的生成订单超链接上绑定一个OrderServlet。
    在这里插入图片描述
    紧接着,在cn.liayun.web.client包中新建一个OrderServlet,判断该用户是否登录本网站?
    在这里插入图片描述
    由于此刻,用户都是没有登录本网站的,所以看到的效果都是下面这样的。
    在这里插入图片描述
    下面,我们来实现用户的登录和注册功能。首先,在前台首页的页头(client/head.jsp)添加用户登录和注册的表单。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>网上书店</h1>
    <br/>
    <br/>
    <div>
    	<div style="float: right;">
    		<form action="/mybookstore/client/LoginServlet" method="post">
    			用户名:<input type="text" name="username" style="width: 50px">
    			密码:<input type="password" name="password" style="width: 50px">
    			<input type="submit" value="登录"> 
    			<input type="button" value="注册" onclick="javascript:window.location.href='/mybookstore/client/register.jsp'">
    		</form>
    	</div>
    	<div style="clear: both"></div>
    </div>
    <hr>
    

    页面显示的效果如下:
    在这里插入图片描述
    紧接着,在WebRoot/client目录下将用户注册页面(register.jsp)创建出来。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>用户注册页面</title>
    </head>
    <body style="text-align: center">
    	<form action="${pageContext.request.contextPath }/client/RegisterServlet" method="post">
    		<table width="300px" align="center">
    			<caption>
    				<h2>用户注册</h2>
    			</caption>
    			<tr>
    				<td>用户名</td>
    				<td><input type="text" name="username" style="width: 200px"></td>
    			<tr>
    			<tr>
    				<td>密码</td>
    				<td><input type="password" name="password" style="width: 200px"></td>
    			</tr>
    			<tr>
    				<td>电话</td>
    				<td><input type="text" name="phone" style="width: 200px"></td>
    			</tr>
    			<tr>
    				<td>手机</td>
    				<td><input type="text" name="cellphone" style="width: 200px"></td>
    			</tr>
    			<tr>
    				<td>住址</td>
    				<td><input type="text" name="address" style="width: 200px"></td>
    			</tr>
    			<tr>
    				<td>邮箱</td>
    				<td><input type="text" name="email" style="width: 200px">
    				</td>
    			</tr>
    			<tr>
    				<td></td>
    				<td><input type="submit" value="注册"></td>
    			</tr>
    		</table>
    	</form>
    </body>
    </html>
    

    用户注册页面的显示效果如下:
    在这里插入图片描述
    接下来,我们来写代码来实现用户的登录和注册功能。

    登录

    当用户点击登录按钮的时候,把数据带过去给Servlet,让Servlet调用BusinessService的方法,实现登录。因此,我们要在cn.liayun.web.client包中新建一个LoginServlet,用于处理用户登录的请求。

    package cn.liayun.web.client;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.liayun.domain.User;
    import cn.liayun.service.BusinessService;
    import cn.liayun.service.impl.BusinessServiceImpl;
    
    @WebServlet("/client/LoginServlet")
    public class LoginServlet extends HttpServlet {
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String username = request.getParameter("username");
    		String password = request.getParameter("password");
    		BusinessService service = new BusinessServiceImpl();
    		User user = service.findUser(username, password);
    		if (user == null) {
    			request.setAttribute("message", "用户名或者密码错误!!");
    			request.getRequestDispatcher("/message.jsp").forward(request, response);
    			return;
    		}
    		
    		request.getSession().setAttribute("user", user);
    		response.sendRedirect(request.getContextPath() + "/index.jsp");
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }
    

    如果用户登录本网站成功了,那么前台首页的页头(client/head.jsp)部分就要修改为:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>网上书店</h1>
    <br/>
    <br/>
    <div>
    	<div style="float: right;">
    		<c:if test="${user == null }">
    			<form action="/mybookstore/client/LoginServlet" method="post">
    				用户名:<input type="text" name="username" style="width: 50px">
    				密码:<input type="password" name="password" style="width: 50px">
    				<input type="submit" value="登录"> 
    				<input type="button" value="注册" onclick="javascript:window.location.href='/mybookstore/client/register.jsp'">
    			</form>
    		</c:if>
    		<c:if test="${user != null }">
    			欢迎您,${user.username }
    		</c:if>
    	</div>
    	<div style="clear: both"></div>
    </div>
    <hr>
    

    注册

    要是首次登录本网站的,可以填写用户注册信息,点击注册按钮的时候,把数据带过去给Servlet,让Servlet调用BusinessService的方法,实现注册。因此,我们要在cn.liayun.web.client包中新建一个RegisterServlet,用于处理用户注册的请求。

    package cn.liayun.web.client;
    
    import java.io.IOException;
    import java.util.UUID;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.liayun.domain.User;
    import cn.liayun.service.BusinessService;
    import cn.liayun.service.impl.BusinessServiceImpl;
    import cn.liayun.utils.WebUtils;
    
    @WebServlet("/client/RegisterServlet")
    public class RegisterServlet extends HttpServlet {
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		try {
    			//在实际开发中,一定要进行表单校验
    			User user = WebUtils.request2Bean(request, User.class);
    			user.setId(UUID.randomUUID().toString());
    			
    			BusinessService service = new BusinessServiceImpl();
    			service.addUser(user);
    			request.setAttribute("message", "注册用户成功!!!");
    		} catch (Exception e) {
    			e.printStackTrace();
    			request.setAttribute("message", "注册用户失败!!!");
    		}
    		request.getRequestDispatcher("/message.jsp").forward(request, response);
    	}
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    
    }
    

    温馨提示:在实际开发中,一定要进行表单校验。这里,我省略了这一步。

    生成订单

    为了生成订单方便,在前台首页的页头(client/head.jsp)部分添加首页、查看购物车、查看自己的订单等超链接。
    在这里插入图片描述
    当某个用户购买了几本书后,在其生成他自己的订单时,他必然要登录到本网站中,点击查看购物车的超链接,他就可以看到自己购买了几本书了。
    在这里插入图片描述
    现在来生成订单,修改cn.liayun.web.client包中的OrderServlet,添加生成订单的代码。
    在这里插入图片描述
    这样,生成订单的效果如下:
    在这里插入图片描述

    后台显示订单

    首先,我们要找到后台左侧导航页面——left.jsp,在待处理订单的超链接上绑定处理请求的OrderServlet。
    在这里插入图片描述
    然后,在cn.liayun.web.manager包中新建一个OrderServlet,用于处理查询带处理订单的请求。

    package cn.liayun.web.manager;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.liayun.domain.Order;
    import cn.liayun.service.BusinessService;
    import cn.liayun.service.impl.BusinessServiceImpl;
    
    @WebServlet(name = "OrderServlet1", urlPatterns = { "/manager/OrderServlet1" })
    public class OrderServlet extends HttpServlet {
    	
    	private BusinessService service = new BusinessServiceImpl();
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String method = request.getParameter("method");
    		if ("getAll".equals(method)) {
    			getAll(request, response);
    		}
    	}
    
    	private void getAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		boolean status = Boolean.parseBoolean(request.getParameter("status"));
    		List<Order> list = service.getOrderByStatus(status);
    		request.setAttribute("list", list);
    		request.getRequestDispatcher("/manager/listorder.jsp").forward(request, response);
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    
    }
    

    紧接着,在WebRoot/manager目录中新建一个显示订单信息的listorder.jsp页面。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>订单展示列表页面</title>
    </head>
    <body style="text-align: center">
    	<br />
    	<br />
    	<table border="1px" cellpadding="0" cellspacing="0" width="90%">
    		<caption>
    			<h2>订单信息</h2>
    		</caption>
    		<tr>
    			<td>订单人</td>
    			<td>下单时间</td>
    			<td>订单状态</td>
    			<td>订单总价</td>
    			<td>操作</td>
    		</tr>
    		<c:forEach var="order" items="${list }">
    			<tr>
    				<td>${order.user.username }</td>
    				<td>${order.ordertime }</td>
    				<td>${order.status == false ? '未发货' : '已发货' }</td>
    				<td>${order.price }</td>
    				<td>
    					<a href="${pageContext.request.contextPath }/manager/OrderServlet1?method=find&id=${order.id }">查看明细</a>
    					<a href="#">修改</a>
    				</td>
    			</tr>
    		</c:forEach>
    	</table>
    </body>
    </html>
    

    最后,显示的效果如下:
    在这里插入图片描述
    下面我们要查看具体订单的详细信息了。当管理员点击某个订单的查看明细超链接时,应该显示这个订单的详细信息,如下图所示。
    在这里插入图片描述
    所以,要在某个订单的查看明细超链接上绑定一个OrderServlet,在该OrderServlet中查询出某个订单的具体详细信息。

    package cn.liayun.web.manager;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.liayun.domain.Order;
    import cn.liayun.service.BusinessService;
    import cn.liayun.service.impl.BusinessServiceImpl;
    
    @WebServlet(name = "OrderServlet1", urlPatterns = { "/manager/OrderServlet1" })
    public class OrderServlet extends HttpServlet {
    	
    	private BusinessService service = new BusinessServiceImpl();
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String method = request.getParameter("method");
    		if ("getAll".equals(method)) {
    			getAll(request, response);
    		}
    		if ("find".equals(method)) {
    			find(request, response);
    		}
    	}
    
    	private void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String id = request.getParameter("id");
    		Order order = service.findOrder(id);
    		request.setAttribute("order", order);
    		request.getRequestDispatcher("/manager/orderdetail.jsp").forward(request, response);
    	}
    
    	private void getAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		boolean status = Boolean.parseBoolean(request.getParameter("status"));
    		List<Order> list = service.getOrderByStatus(status);
    		request.setAttribute("list", list);
    		request.getRequestDispatcher("/manager/listorder.jsp").forward(request, response);
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    
    }
    

    紧接着,在WebRoot/manager目录中新建一个展示具体订单的详细信息的orderdetail.jsp页面。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>订单明细页面</title>
    </head>
    <body>
    	<table border="1px" cellpadding="0" cellspacing="0" width="90%">
    		<h3>订单明细</h3>
    		<tr>
    			<td>书名</td>
    			<td>售价</td>
    			<td>数量</td>
    			<td>应收货款</td>
    		</tr>
    		<c:forEach var="orderitem" items="${order.orderitems }">
    			<tr>
    				<td>${orderitem.book.name }</td>
    				<td>${orderitem.book.price }</td>
    				<td>${orderitem.quantity }</td>
    				<td>${orderitem.price }元</td>
    			</tr>
    		</c:forEach>
    		<tr>
    			<td colspan="2">总计应收货款</td>
    			<td colspan="2">${order.price }元</td>
    		</tr>
    	</table>
    	<br />
    	<br />
    	<table border="1px" cellpadding="0" cellspacing="0" width="90%">
    		<h3>收货人详细地址</h3>
    		<tr>
    			<td>用户</td>
    			<td>电话</td>
    			<td>手机</td>
    			<td>地址</td>
    			<td>邮箱</td>
    		</tr>
    		<tr>
    			<td>${order.user.username }</td>
    			<td>${order.user.phone }</td>
    			<td>${order.user.cellphone }</td>
    			<td>${order.user.address }</td>
    			<td>${order.user.email }</td>
    		</tr>
    	</table>
    	<br />
    	<a href="${pageContext.request.contextPath }/manager/OrderServlet1?method=update&id=${order.id }">确认发货</a>
    </body>
    </html>
    

    接下来,管理员就要将某个用户下的订单置为发货状态了。在以上页面中的确认发货超链接上绑定一个OrderServlet,在该OrderServlet中将某个用户下的订单置为发货状态。

    package cn.liayun.web.manager;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.liayun.domain.Order;
    import cn.liayun.service.BusinessService;
    import cn.liayun.service.impl.BusinessServiceImpl;
    
    @WebServlet(name = "OrderServlet1", urlPatterns = { "/manager/OrderServlet1" })
    public class OrderServlet extends HttpServlet {
    	
    	private BusinessService service = new BusinessServiceImpl();
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String method = request.getParameter("method");
    		if ("getAll".equals(method)) {
    			getAll(request, response);
    		}
    		if ("find".equals(method)) {
    			find(request, response);
    		}
    		if ("update".equals(method)) {
    			update(request, response);
    		}
    	}
    
    	private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		try {
    			String id = request.getParameter("id");
    			service.updatOrder(id, true);
    			request.setAttribute("message", "订单已置为发货,请及时发货");
    		} catch (Exception e) {
    			e.printStackTrace();
    			request.setAttribute("message", "出错!!!");
    		}
    		
    		request.getRequestDispatcher("/message.jsp").forward(request, response);
    	}
    
    	private void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String id = request.getParameter("id");
    		Order order = service.findOrder(id);
    		request.setAttribute("order", order);
    		request.getRequestDispatcher("/manager/orderdetail.jsp").forward(request, response);
    	}
    
    	private void getAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		boolean status = Boolean.parseBoolean(request.getParameter("status"));
    		List<Order> list = service.getOrderByStatus(status);
    		request.setAttribute("list", list);
    		request.getRequestDispatcher("/manager/listorder.jsp").forward(request, response);
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    
    }
    

    为了方便查询已发货订单,找到后台左侧导航页面——left.jsp,在待已发货订单的超链接上绑定处理请求的OrderServlet。
    在这里插入图片描述
    这样,在后台显示订单这部分,我们就算是做完了!最后,也测试一下,效果如下:
    在这里插入图片描述

    展开全文
  • 网上书店框架 asp.net

    热门讨论 2009-12-07 08:04:47
    网上书店系统是一个完整的电子商务网站,实现了在网上直接用户管理、浏览图书、购买图书、创建订单、留言等一系列的网上购书服务。 系统开发工具: ●开发平台:.NET ●编程语言:C# ●数据库:SQL SERVER 二、需求...
  • 本系统采用B/S架构,利用JSP+MySql数据库实现了网上书店系统的基本功能。本文对系统的需求分析、系统总体架构及详细设计进行了详细地阐述,主要实现了以下功能:用户注册、登录;浏览图书详细信息;图书搜索;图书...
  • 网上书店 jsp+mysql

    2011-10-10 18:51:48
    网上书店网上书店是一个常见的电子商务性质的网站系统,它的主要功能是:客户能够在网上查询图书的基本信息,可以维护自己的信息,可以进行网上订书,可以查询订单处理的情况;管理员可以对图书的信息进行维护(增、...
  • 网上书店系统是由用户使用的选购商品、生成订单、订单状态查询的程序和后台管理员使用的商品管理、订单管理系统组成的。 一个网上书店系统应该提供如下功能: 书籍分类的增加、查询和修改功能; 各个分类中书籍的...
  • 网上书城day01.zip

    2020-07-11 21:04:10
    > 订单支付(银行回馈)修改订单状态为“支付成功” > 取消订单 > 确认收货 7. 项目后台功能介绍 * 管理员管理 * 分类管理 > 显示所有分类 > 添加一级分类 > 修改一级分类 > 删除一级分类 > 添加二级分类 ...
  • 南昌网上书城.rar

    2019-08-30 01:36:34
    《南昌网上书城》系统,是在网络上建立一个虚拟的书店,避免了挑选图书的烦琐过程,使您的购书过程变得轻松、快捷、方便,很适合现代人快节奏的生活;同时又能有效的控制"书店"运营的成本,开辟了一个新的销售渠道。...
  • 网上书城项目介绍

    2021-10-04 11:49:22
    前言:一个简易版的网上书城介绍,主要是对所学知识点的一个综合应用,熟悉MVC的开发流程。 一、项目需求 1、前端 ①首页(书籍展示,分类展示) ②用户登录\注册(七天免登陆,记住密码) ③书籍查询(类别...
  • 网上书城项目

    2020-07-01 19:03:05
    网上书城项目的需求分析以及界面设计前言思维导图总结 前言 今天为大家分析的知识点是博主最近在做的项目,整个项目流程以及编码的思路也会分享到,使用到的主要技术是Easyui+自定义Mvc的内容! 思维导图 总结 ...
  • 毕业设计网上书店jsp源码 网上购书小站文档 系统需求分析 基本需求 ​ 实现网上购书网站的基本功能,完成会员管理、图书管理、货品上架和订单管理等。 用户角色 ​ 游客(匿名用户或Internet用户)、会员和系统管理...
  • Easyui网上书城分析背景/价值模块划分前台后台前台用户模块前台分类模块前台书籍模块前台购物车模块前台订单模块后台书籍模块后台权限模块后台订单模块数据库设计 背景/价值 对老板而言:方便管理,有助于书城的推广...
  • CKXP网上书店 1.0.rar

    2019-05-25 11:10:00
    解决了订单状态管理时的小BUG,还有,好多朋友说这里不能修改状态,其实这不是BUG,这个状态的修改是通过用户和后台管理员一起来实现的,只有用户付过款,管理员才可以收到款,不是吗?再好好试试! 增加了其它信息...
  • 用ASP.NET实现网上书店系统

    千次阅读 2009-06-07 14:04:00
    基于浏览器 /服务器模型的网上书店系统实现了图书展示、选购商品、生成订单、订单状态查询、用户管理、商品管理和订单管理等功能。采用最新的开发平台 .NET、面向对象程序设计方法来开发。http://w
  • 游客身份只能进行基本的信息浏览和查询,但是游客可以在线注册为会员,成为会员后在相对权限下可以对图书信息进行查询、浏览,并且可以维护个人信息,维护订单信息(订单状态查询、订单删除或增加)。本系统的设计...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,790
精华内容 716
关键字:

网上书店订单状态