JavaWeb传统商城(MVC三层架构)的促销功能模块【进阶版】

发布于:2022-11-06 ⋅ 阅读:(384) ⋅ 点赞:(0)


📗系列专栏: 本文写在上进小菜猪的JavaWeb专栏想要了解更多,请访问本专栏

一.JavaWeb商城项目的促销功能模块【进阶版】开发过程记录

1.1 项目背景

这是内科大2020届计科的JavaWeb的结课大作业。该作业要求设计一个原生的Javaweb项目。

  • 本项目类型为:传统商城
  • 本项目使用原生JavaWeb采用MVC架构,项目包括前台和后台
    • 前台用于用户购买产品
    • 后台用于管理
  • 本项目数据库采用Mysql
  • 本需求难度:0.8颗星
  • 本次项目需求:促销模块(基础版)

本需求接上篇文章:JavaWeb商城项目的促销功能模块【基础版】

1.2 需求分析

系统新增功能扩展或优化功能:大家可以在本系统的基础上进行系统新增功能扩展或优化。如:评价,好评,差评,促销,优惠券,分期付款,售后,销售统计分析等等,这些只是一些提示,并不限于此。大家可以上淘宝、京东等网站找找系统新增功能扩展的思路。 11月5日晚7:00检查系统新增功能。

许多读者看完上篇【JavaWeb商城项目的促销功能模块【基础版】】感觉良好,觉得在此基础上可以再次进行完善功能,所以推出此功能的进阶版。

基础版实现了后台的一个促销功能的添加和删除,并且可以在前台新加的栏目——促销当中得以体现。

本文进阶版,在基础班的功能上新增加了打折的功能,类似优惠券的功能,详看下文解析。

1.3 开发流程/顺序

1.更改促销页面的价格显示。

2.增加数据库的商品字段——促销判断。

3.更改商品详情页面的价格显示。

4.更改购物车的价格计算规则。

难度等级介绍:5颗星为极难,1颗星为极易,依次类推。

二.促销页面(0.1颗星)

2.1 需求介绍

本次任务是实现:某一商品在后台设置为促销商品,让其自动的打6折,效果如下:并且保留2位小数。

image-20221103151048448

2.2 JSP页面

涉及页面为:Curriculumsrecommend_list.jsp

1.我们这里如果打6折,无法避免出现小数除不尽的情况,所以我们引入JSP 标准标签库(JSTL)。在本jsp页面的上部加入:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

下面这行为EL保留2位小数的标签语句:

<fmt:formatNumber type="number" value="${g.price*0.6 }" pattern="0.00" maxFractionDigits="2"/>

2.使用El语句写一个判断显示的逻辑:

<c:choose>
<c:when test="${t==4}"><span class="item_price">¥ <fmt:formatNumber type="number" value="${g.price*0.6 }" pattern="0.00" maxFractionDigits="2"/></span></c:when>
<c:otherwise><span class="item_price">¥ ${g.price}</span></c:otherwise>
</c:choose>

2.3效果展示

image-20221103151802963

三,商品详情页面(0.2颗星)

3.1 需求介绍和效果图

大致样式如下,美化自己调一下。

image-20221103152338382

3.2 数据库分析

我们观察recommend发现,在后台执行完类型的选择之后,会在recommend数据库里执行添加或者删除操作,观察发现,如果a商品添加到1类型会增加一条数据库记录,如果将a商品再添加2类型,又会增加一条数据库记录。

如果将a商品任意的从类型1或者2删除,那么对应的一条就会被删除。

我思考发现,如果写一个筛选语句,将符合的商品id对于的条目拿出来,如果含有类型为4的,就是正在促销的商品,问题也就解决了。

image-20221103152946007

3.2 Servlet层

1.在Servlet层里写下指定类型的对象列表,调用Service。这里的id为商品id。

List<CommentRecommend> listtype= gService1.getCommenttypeById(id);

2.写一个简单的判断器,判断返回的list里的Type类型有没有包含4。

int flag=0;
for (CommentRecommend object : listtype) {
    if(object.getType()==4){
        flag=1;
    }
    else {
        flag=0;
    }
}

3.将上面的判断结果传递给前端进行判断渲染。

request.setAttribute("flag", flag);

3.3 Service层

com = ComDao.getCommenttypeById(id);

3.4 DAO层

1.写sql语句对目标进行筛选。

String sql = "select * from `recommend` where curriculums_id = ?";
  1. 返回值。
return queryRunner.query(sql, new BeanListHandler<CommentRecommend>(CommentRecommend.class),id);

3.5 JSP页面

本次涉及页面:Curriculums_detail.jsp

1.记得引入JSP 标准标签库(JSTL)。

2.写一个条件渲染。让类型为4的值乘以0.6。然后保留俩位小数。

<c:choose>
   <c:when test="${flag==1}"><span class="item_price">促销商品已打六折:<br/>${g.price}X0.6=¥ <fmt:formatNumber type="number" value="${g.price*0.6 }" pattern="0.00" maxFractionDigits="2"/></span> </c:when>
   <c:otherwise><span class="item_price">¥ ${g.price}</span></c:otherwise>
</c:choose>

image-20221103152529613

四,购物车页面(1颗星)

4.1需求介绍和效果图展示

image-20221103154725890

4.2 数据库设计

1.在商品的数据库里新增加字段:promotion。

如果promotion为4介绍目标商品:为打折商品。

image-20221103154811381

4.3 Curriculums类

新加字段,Promotion为int类型,添加过程和上篇的isPromotion,方法相同,在这里不详细写了。

private int promotion;

4.4 Servlet层

到下面方法的源码中,添加上面数据库新加的字段。

o.addCurriculums(Curriculums);

4.5 Order

1.在addCurriculums方法中,在else里添加下面判断。

if(cu.getPromotion()==4){
    item = new OrderItem((float) (cu.getPrice()*0.6),1,cu,this);
}

2.当然+1操作返回的,也不能拉下:

if(cu.getPromotion()==4){
    total = (float) PriceUtils.add(total, cu.getPrice()*0.6);
}
else {
    total = PriceUtils.add(total, cu.getPrice());
}

3.到了这一步我们尝试添加到购物车,发现还是不能自动打折,不要慌,因为我们promotion字段的值并没有传入到类对象里。

4.6 CurriculumsDao

1.到商品的Dao层,添加promotion字段。在getCurriculumsById方法中。

public Curriculums getCurriculumsById(int id) throws SQLException {
    QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
    String sql = "select cu.id,cu.name,cu.cover,cu.image1,cu.image2,cu.price,cu.introduction,cu.stock,cu.duration,cu.quantity,cu.promotion,t.id typeid,t.name typename from Curriculums cu,type t where cu.id = ? and cu.type_id=t.id";
    return r.query(sql, new BeanHandler<Curriculums>(Curriculums.class),id);
}

问题解决了。最后再解决一下前端页面显示问题就ok!

4.7 JSP页面

为了增加用户友好性,写一个简单的权限渲染,因为我们的原价都是整数,打折之后除了尾数为5的都是小数,时间问题和我原价没有以5结尾的商品,故,直接写了一个item.value.price*10%10==0,判断是否有小数的逻辑。

最后进行一下渲染,问题解决了,虽然不是很完美。

<c:choose>
   <c:when test="${item.value.price*10%10==0}"><h3><span>单价: ¥ ${item.value.price}</span></h3></c:when>
   <c:otherwise><h3><span>促销商品单价(打折后): ¥ ${item.value.price}</span></c:otherwise>
</c:choose>

网站公告

今日签到

点亮在社区的每一天
去签到