项目简介
1.1 背景分析
电子商城的普及,目前,越来越多的商业活动开始迁移到Inter中来进行,这种模式给商家和消费者带来了极大的便利,使以前很多不同的商业活动变得异常快捷。
1.2 系统描叙
本电子购物商城系统在设计时充分考虑了系统的可扩展性和商业活动特有的业务流程,良好的前期设计使他具有优秀的扩展能力并且便于维护,在发展飞速的生活中,为了更好的满足人们的需求,该系统提供强大的服务功能,更能吸引消费者。
1.3 系统功能
为了满足市场的需求,我们将该电子商城系统主要划分了如下的功能:1,浏览商品:包括按用户的需求俩分类浏览,搜索等;2,购买商品:包括用户选择商品了需要使用到购物车,以及订单等;3:用户信息管理:当用户注册了帐号后,可以对自己的个人信息进行查询,修改等功能;4:活动商品:当遇到节假日的时候,我们适当的对商品进行打折处理,以便更能吸引消费者前来购物,5:用户级别:消费者在进行注册,及已有的用户购物达到一定的程度是,可以让该用户享受更优惠的待遇;6后台关系:在这里,我们主要设置了几个模块,管理员模块,可以对商品及其他用户设置权限及其他相关操作,用户管理模块,以及商品管理模块。
1.4 开发平台
在开发过程中为了提高性能及安全性,我们在这里选择了Java语言,使用Idea开发环境,数据库则使用MySQL数据库。
1.5 数据库环境
- 硬件环境
- CPU:奔4以上
- 内存:1G以上
- 硬盘容量:80G 以上
- 操作系统
- Windows 7或以上
2.具体需求
2.1 功能需求
本系统分为前台与后台,前台是为消费者提供信息,当消费者进入前台界面后,如果成功注册后,并可以购买网页上的任何商品,但消费者不能对商品信息进行操作。对商品的操作则是在后台提供,当管理员进入后台,就可以对商品信息进行修改,也可以对会员进行删除。
2.2 用户接口需求
如果是游客进入该网站首页,则不容许购买任何商品,必须注册过后才可以购买,游客注册成功后并成为会员,会员只容许购买商品,查看商品,但不能进行删除,修改商品的任何内容
2.3 通信接口需求
2.4 性能需求
要求本系统一ORACLE数据库进行设计,使用最新的AJAX技术进行设计,是查询更新速度加快。更加吸引用户的眼球。
2.5 安全需求
采用完备的密码管理系统,分级限定操作限制,定期数据保存,每日更新。
2.6 可维护性需求
最高级别人员可享用任意修改商品及会员信息,分级人员享用其各自权限。
2.7 其他需求
目标系统功能齐全,能够完全满足业务需求。客户只可凭借客户名和密码进行个人信息的查询和修改,不得删除和进入其他客人信息(包括查看其他用户资料)。
3.整体设计
3.1 系统功能设计
电子商城系统其共分为两大功能模块:前台系统和后台系统。两大功能模块又分别包括各自的众多自模块,前台系统就是面向Internet上的用户,主要包括商品信息模块,用户信息模块,购物车模块,优惠活动模块,订单模块,后台系统则是用于商店管理员对网站极其对用户信息,商品信息进行管理和维护,主要包括管理员信息管理模块,用户信息管理模块,销售管理模块,收入统计模块,权限设置模块等,主要系统功能结构图如下:
3.1.1 前台功能设计
- 商品信息模块:热门商品浏览(首页吸纳时点击最高的商品的商品列表),新到的 商品浏览,商品的分类浏览,商品的快速搜索,商品的详细信息浏览,活动商品的浏览
- 购物车模块:添加商品到购物车,购物车信息的修改,删除很结账
- 用户信息管理模块:注册新用户,登录,用户修改密码,用户个人资料管理
- 订单模块:查询个人订单列表,查询某订单的详细信息
3.1.2 后台功能设计
- 管理员信息管理:登录和修改密码管理
- 商品信息管理:添加,删除,商品类别;添加,修改,删除商品信息;添加,修改,删除活动商品信息
- 用户信息管理:查询用户信息,修改账户金额
- 新闻管理:对新闻进行添加,删除,修改管理
- 销售管理:查询某月的销售情况,(包括每种商品的售出数量,相关订单数,收入)
3.2 系统流程分析
对电子商务系统来说,整个电子购物的流程是至关重要的,在电子商城的流程设计中就贯彻了这样的思想,下面是对购物流程的分析图:
4.数据库设计
4.1 基本表设计
- 用户信息表(用户ID,用户名,用户密码,口令提示信息,口令提示题答用户真实信息,性别,用户帐号,家庭住址,邮箱地址,电话号码,邮政编码)
- 商品信息表(商品ID,商品名称,商品图片,商品价格,商品信息介绍,分类编号,商品点击数)
- 商品分类表(商品分类ID,分类名称)
- 购物车表(记录ID,购物车ID,所购商品编号,购物车图片,购物时间,购物数量)
- 订单表(订单号,该商品的购买数量,商品单价,交易时间,所属用户ID,商品ID)
- 管理员信息表(管理员ID,管理员名称,管理员口令,管理员姓名,注册时间)
用户表
商品表
订单表
订单关联表
商品分类表
管理员表
4.2 基本表关系视图
5.测试分析
5.1 编写目的
软件测试是软件质量保证的关键因素,代表了规约设计和代码的最终评审;证实了软件依据规约所具有的功能及其性能需求;增加了软件的可靠性。
在开发工资管理系统的过程中,为了及时发现迄今为止的错误,更有效率的完成该项开发工作,开发人员要对其进行软件测试。
该电子商城系统用于中型网站,适用于WINDOWS XP环境。它的使用者是这家企业的职工和财务管理人员。
5.2 代码展示
// 确认订单---更新收获人信息 publicvoidconfirmOrder(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{// 1、更新收货人信息 service.TbOrdersServiceservice=newservice.impl.TbOrdersServiceImpl();Stringaddress=request.getParameter("address");Stringname=request.getParameter("name");Stringtelephone=request.getParameter("telephone");Stringoid=request.getParameter("oid");TbOrdersorder=newTbOrders();order.setAddress(address);order.setName(name);order.setTelephone(telephone);order.setOid(oid);service.updateOrderAdrr(order);//修改支付状态 service.updateOrderState(oid);request.getSession().setAttribute("oid1",oid);//response.sendRedirect("/lanqiaoshop/alipayindex.jsp"); request.getRequestDispatcher("/alipayindex.jsp").forward(request,response);}// 提交订单 publicvoidsubmitOrder(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{HttpSessionsession=request.getSession();// 判断用户是否已经登录 未登录下面代码不执行 Useruser=(User)session.getAttribute("user");if(user==null){// 没有登录 request.getRequestDispatcher("/login.jsp").forward(request,response);return;}// 目的:封装好一个Order对象 传递给service层 TbOrdersorder=newTbOrders();// 1、private String oid;//该订单的订单号 Stringoid=UUID.randomUUID().toString();order.setOid(oid);// 2、private Date ordertime;//下单时间 order.setOrdertime(newDate()+"");// 3、private double total;//该订单的总金额 // 获得session中的购物车 Cartcart=(Cart)session.getAttribute("cart");doubletotal=cart.getTotal();order.setTotal(total);// 4、private int state;//订单支付状态 1代表已付款 0代表未付款 order.setState(0);// 5、private String address;//收货地址 order.setAddress(null);// 6、private String name;//收货人 order.setName(null);// 7、private String telephone;//收货人电话 order.setTelephone(null);// 8、private User user;//该订单属于哪个用户 order.setUser(user);// 9、该订单中有多少订单项List<OrderItem> orderItems = new ArrayList<OrderItem>(); // 获得购物车中的购物项的集合map Map<String,CartItem>cartItems=cart.getCartItems();for(Map.Entry<String,CartItem>entry:cartItems.entrySet()){// 取出每一个购物项 CartItemcartItem=entry.getValue();// 创建新的订单项 TbOrderitemorderItem=newTbOrderitem();// 1)private String itemid;//订单项的id orderItem.setItemid(UUID.randomUUID().toString());// 2)private int count;//订单项内商品的购买数量 orderItem.setCount(cartItem.getBuyNum());// 3)private double subtotal;//订单项小计 orderItem.setSubtotal(cartItem.getSubtotal());// 4)private Product product;//订单项内部的商品 orderItem.setProduct(cartItem.getProduct());// 5)private Order order;//该订单项属于哪个订单 orderItem.setOrder(order);// 将该订单项添加到订单的订单项集合中 order.getOrderItems().add(orderItem);}// order对象封装完毕 // 传递数据到service层 // ProductService service = new ProductService(); service.TbOrdersServiceservice=newservice.impl.TbOrdersServiceImpl();service.submitOrder(order);session.setAttribute("order",order);// 页面跳转 // response.sendRedirect(request.getContextPath()+"/order_info.jsp"); request.getRequestDispatcher("/my-add.jsp").forward(request,response);}// 清空购物车 publicvoidclearCart(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{HttpSessionsession=request.getSession();session.removeAttribute("cart");// 跳转回cart.jsp response.sendRedirect(request.getContextPath()+"/my-car.jsp");// request.getRequestDispatcher("/WEB-INF/my-car.jsp").forward(request, // response); }// 删除单一商品 publicvoiddelProFromCart(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{// 获得要删除的item的pid Stringpid=request.getParameter("pid");// 删除session中的购物车中的购物项集合中的item HttpSessionsession=request.getSession();Cartcart=(Cart)session.getAttribute("cart");if(cart!=null){Map<String,CartItem>cartItems=cart.getCartItems();// 需要修改总价 doublexcount=cart.getTotal()-cartItems.get(pid).getSubtotal();// 保留一位小数 xcount=(double)Math.round(xcount*100)/100;cart.setTotal(xcount);// 删除 cartItems.remove(pid);cart.setCartItems(cartItems);}session.setAttribute("cart",cart);// 跳转回cart.jsp response.sendRedirect(request.getContextPath()+"/my-car.jsp");// request.getRequestDispatcher("/WEB-INF/my-car.jsp").forward(request, // response); }// 将商品添加到购物车 publicvoidaddProductToCart(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{HttpSessionsession=request.getSession();TbProductServiceservice=newTbProductServiceImpl();// 获得要放到购物车的商品的pid Stringpid=request.getParameter("pid");// 获得该商品的购买数量 intbuyNum=Integer.parseInt(request.getParameter("buyNum"));// 获得product对象 TbProductproduct=service.getAllProduct(pid);// 计算小计 doublesubtotal=product.getPshop_price()*buyNum;// 保留一位小数 subtotal=(double)Math.round(subtotal*100)/100;// 封装CartItem CartItemitem=newCartItem();item.setProduct(product);item.setBuyNum(buyNum);item.setSubtotal(subtotal);// 获得购物车---判断是否在session中已经存在购物车 Cartcart=(Cart)session.getAttribute("cart");if(cart==null){cart=newCart();}// 将购物项放到车中---key是pid // 先判断购物车中是否已将包含此购物项了 ----- 判断key是否已经存在 // 如果购物车中已经存在该商品----将现在买的数量与原有的数量进行相加操作 Map<String,CartItem>cartItems=cart.getCartItems();doublenewsubtotal=0.0;if(cartItems.containsKey(pid)){// 取出原有商品的数量 CartItemcartItem=cartItems.get(pid);intoldBuyNum=cartItem.getBuyNum();oldBuyNum+=buyNum;cartItem.setBuyNum(oldBuyNum);cart.setCartItems(cartItems);// 修改小计 // 原来该商品的小计 doubleoldsubtotal=cartItem.getSubtotal();// 新买的商品的小计 newsubtotal=buyNum*product.getPshop_price();cartItem.setSubtotal(oldsubtotal+newsubtotal);}else{// 如果车中没有该商品 cart.getCartItems().put(product.getPid(),item);newsubtotal=buyNum*product.getPshop_price();}// 计算总计 doubletotal=cart.getTotal()+newsubtotal;// 保留一位小数 total=(double)Math.round(total*100)/100;cart.setTotal(total);// 将车再次访问session session.setAttribute("cart",cart);// 直接跳转到购物车页面 response.sendRedirect(request.getContextPath()+"/my-car.jsp");}}
5.3 功能测试
5.4 运行截图
5.4.1 前台
登录
首页
个人中心
查看商品
商品详情
购物车
下单
支付
5.4.2 后台管理
首页
商品分类
商品管理
订单管理
用户管理
6.总结
6.1 该产品的使用范围
该电子商城系统是一项独立的软件产品,即针对中型电子商务管理系统。可供消费者提供查询相应的商品信息,或者是购买相应商品,只需要该消费者进入本网站的首页,进行注册后,并可以成功的对商品购买,在后台通过管理员的维护,可以不定期的对商品,会员信息,及相关的新闻进行及时的更新,逐步符合广大消费者的需求。
6.2 缺陷和不足
该网站的缺陷也很明显,很多功能的实现还不是很切合实际的情况,很多功能能也不够完善,可扩充性也不是很好。
6.3 补救方案
该电子商城系统受时间,人员和技术的限制,对产生的缺陷无法立即进行补救,但开发人员会尽快做出详细的解决方案。
6.4 体会
经过一个多星期的设计和开发,该电子商城系统基本开发完毕。其功能基本符合客户需求。对于数据的一致性的问题也通过程序进行了有效的解决。