web网上书店总结
前端的首页。效果如下:
基本上按照页面有的内容对其实现功能。按照用户划分功能模块,有后台管理员和普通用户,登录的时候会判断账户的类别,例如0权限代表普通用户登录,1权限代表管理员登录,然后转发到相对的页面。普通用户登录成功后返回首页,我的账户:xxx,显示用户名,这时就可以加入购物车;如果没有登陆就点击了购买就会跳转到登录页面,注册的时候需要验证码,注册成功返回登录页面。主要还是聊聊购物车和订单模块;因为用户对购物车里面的操作较为频繁,所以数据库并没有单独创建一个表,使用一个map集合book对象作为键,Integer对象作为值,如果这本图书是第一次加入,那就新创建一个hashmap,值设置为1,如果map集合中已经有这个键,那就让数值加一
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
BookService bookService = new BookService();
Book book = bookService.findBook(id);
//1.先从session中获取购物车的数据
Map<Book,Integer> map = (Map<Book, Integer>) request.getSession().getAttribute("cart");
if(map==null){//如果购物车没有数据,就新创建一个购物车
map= new HashMap<Book,Integer>();
map.put(book,1);//把这本书装进购物车,数量设置成1
}else {
if (map.containsKey(book)){//如果购物车已经有这本书,那就让数量加一
// (这个containKey默认比较的是hashCode,所以要重写equals,hashCode方法)
map.put(book,map.get(book)+1);
}else {
//如果是第一次添加就是1
map.put(book,1);
}
}
/* for (Map.Entry<Book, Integer> map1 : map.entrySet()) {
System.out.println(map1.getKey()+": 数量:"+map1.getValue());
}*/
request.getSession().setAttribute("cart",map);
//重定向到购物车页面
response.sendRedirect(request.getContextPath()+"/cart.jsp");
}
因为使用了map.containsKey();方法,这个就需要重写book类的hashCode(),和equals()方法。
book的主键是id所以生成方法的时候按照ID进行比较就好了。
当删除购物车的商品时,只需要将map集合中的键移除掉就好。map.remove(book);
订单模块中创建了两个表,order表和orderItem订单项表,订单表中是用户确认定单后,向表中插入了用户的一些信息,例如收货地址和用户ID,手机号等等。订单项表中是具体的商品信息,bookID和买的数量,订单项的订单id即是主键还是订单表的外键,商品id也是根据商品表所创建的外键。
确认订单后可以在我的账户中查看订单详情,这时的支付状态当然是未支付了,如果不想要的话就删除订单,
点击查看,确认个人信息正确后,可以进行支付。
结账的页面比较low,就是几个单选框。确认支付,跳转到支付成功页面。大概就是这个逻辑。
支付成功后会自动返回首页。
后台管理员目前仅能对书本进行增删改查。
查询的时候可以进行多条件查询。
目前就这些。具体代码实现在这里
博主比较菜,以上逻辑有不对的欢迎指正,共同进步!
代码人生!