纯J2EE商城【所有】模块流程图以及项目总结
老子画得要死了!!!
毫不吹比的说,现在的我对这个项目已经熟悉到了可怕的地步,哪个功能是怎么实现的,甚至调用过程和关联的类我都能背出来
(发布看了一遍真是醉了,这特么的都被压瘦了,字都看不清楚,推荐要在网页看图的朋友右键图片在新标签打开查看,或者干脆别看了,下ppt看吧,原生图片清楚多了)
ppt我传到度盘了:/s/1djWr4IcxDZIxL7bFAu2NbQ 密码: nrww
系统实现目标:
1.用户的登陆注册以及退出
2.首页展示二级菜单、商品分类列表、查看商品详情
3.实现购物车和订单功能,用户选择所需商品后,放到购物车
4.购物车实现:商品加入,内部增删改查,数据持久化
5.订单实现:购物车数据指向订单、订单提交、确认订单、结算、支付、我的订单、确认收货、收货成功
模块分析
用户模块具有以下功能:
(1)登录模块负责验证会员的登录,这种操作都是从数据库查询。
(2)用户注册模块负责新会员注册,并将其持久化,也就是将新注册的会员的信息写入数据库
(4)购物车模块就是收集和记录用户所购买的商品,用户离开时购物车若还有数据则需要将其持久化
(5)订单模块能将购物车中的数据指向订单,并能够使用户能查看自己所下的订单,以及对订单的操作。
(6)商品展示模块应当是从数据库中将商品拿出来, 然后再以某种方式显示在网页上(前端数据交互)
首页
商品详情页
登陆页
注册页
购物车查看页
订单提交页
确认支付页
支付成功页
订单查看页
数据库的操作始终贯穿在整个系统里面,几乎所有的地方都涉及到了数据库的操作。
下面是表关联图和用户购物流程图
分隔符—
系统具体实现
首页实现
1、轮播图实现
2、用户加载页面的时候在jquery的准备函数中使用Ajax请求
3、请求到servlet中会判断session中是否已拥有了菜单和分类查询的数据
4、若没有则将数据封装为bean之后,将其处理成json数据,保存在session中
5、若有则直接从session中获取,无论怎样都将数据返回到首页
6、在Ajax的回调函数中接收json对象并取得json对象中的值,将其动态的显示到页面上
分隔符—
商品详情页面实现
商品详情页实现了商品信息的显示与其商品图片的显示,并且动态显示了用户选择的规格库存
1、用户选中商品点击后首先会跳到servlet将其选中的商品和商品对应的图片信息放入session域中
2、从servlet跳转到商品显示页面,在页面中使用JSTL和EL表达式显示servlet储存到session中的数据
3、为商品的规格绑定了一个click事件,判定用户同时选中颜色和尺码后调用ajax进行局部刷新库存
4、ajax把用户选择的规格和商品id传到servlet,通过这些数据从数据库中找到该条数据的库存,并返回显示
登陆注册实现
用户在商品详情页面选择加入购物车或者立即购买时,若未登陆则会进入登录界面
1、用户在登陆界面需要输入正确的账号以及密码才能够进行登陆
2、若没有账号则可以在注册界面实现注册
3、注册界面实现了对用户输入信息的效验,只能输入匹配格式的信息
4、登陆注册界面均实现了验证码功能,用户必须输入正确的验证码才能进行下一步
购物车实现
用户在商品详情页面选择加入购物车时,可将该商品和其对应的规格组合成一个订单项记录到购物车中
并对购物车进行增删改查
4、购物车页面使用JQuery技术实现了动态的获取用户增删改后的总金额并显示
3、购物车页面实现了对每个购物项的增删改查操作,查通过JSTL+EL表达式进行查询
-无论如何最后都将购物车放入到session域中覆盖掉原有的购物车,并跳转到购物车jsp页面
-若购物车中没有该条数据,则将该条数据塞入购物车中
-若购物车中已有该条数据,则在其基础上进行数量的增加
2、servlet获取session中已存在的的购物车bean对象,进行判断
1、用户点击加入购物车时会将商品id、规格id、数量传入到servlet
分隔符—
在用户退出时、或者session自动销毁时
监听器将会调用方法将session中的订单项数据
和数据库中的订单项数据进行交叉修改
交叉修改逻辑为:
遍历tableList,在其循环体中遍历sessionList。通过规格id判断,如果tableList有的数据sessionList没有,则执行删除操作,在数据库中删除该数据
遍历sessionList ,在其循环体中遍历tableList ,通过规格id判断如果sessionList有的数据tableList没有,则执行增加操作,在数据库中增加该数据。
在遍历同时,遇到tableList中对象拥有相同的规格id则进行判断,如果双方数量一致则continue跳过当前循环,如有不一致的项则执行修改操作,修改数据库中已有的数据
public static void saveOrderItem(List<OrderItem> sessionList) { System.out.println("正在往数据库保存订单项数据"); List<OrderItem> tableList = dao.findByUserId(sessionList.get(0).getUser_id()); for(OrderItem table : tableList ) { boolean flag=true; int tabPro_id = table.getPro_id(); int tabPros_id = table.getPros_id(); for(OrderItem session : sessionList ) { int sessionPro_id = session.getPro_id(); int sessionPros_id = session.getPros_id(); if(tabPro_id==sessionPro_id&&tabPros_id==sessionPros_id) { flag = false; } } if(flag) { int itme_id = table.getItme_id(); dao.deleteCartItem(itme_id+""); } } for(OrderItem session : sessionList) { boolean flag=true; int sessionPro_id = session.getPro_id(); int sessionPros_id = session.getPros_id(); for(OrderItem table : tableList) { int tabPro_id = table.getPro_id(); int tabPros_id = table.getPros_id(); if(tabPro_id==sessionPro_id&&tabPros_id==sessionPros_id) { flag=false; int sessionQuen = session.getQuantity(); int tableQuen = table.getQuantity(); if(sessionQuen==tableQuen) { continue; } dao.modifCartItem(session); } } if(flag) { dao.addCartItem(session); } } }
订单实现
用户在商品详情页面选择立即购买时、在购物车提交订单时,跳到提交订单页面提交订单
用户可到我的订单页查看订单,并进行订单类型转换操作
1、实现从立即购买到提交订单页、从购物车到提交订单页
2、提交订单页的订单项数据显示、用户填写信息的表单效验、用户确认提交订单时进行订单持久化
3、我的订单页实现用户à多个订单 , 每个订单à多个订单项的查询显示
4、我的订单页实现对每个订单总价的动态计算、对每个不同类型订单操作动态显示
5、我的订单页使用jquery实现了点击顶部标签切换显示其标签所对应的数据
6、我的订单页实现用户对每个不同状态的订单能够执行各种不同操作(付款、催卖家发货、收货、退款、催退款…)
7、支付页和支付成功页实现、和其订单数据显示
从购物车或立即购买跳转到提交订单页:
提交订单页实现逻辑:
查看订单页遍历的数据类型(这玩意是最吉尔麻烦的)
查看订单页实现逻辑:
订单状态变换: