当前位置: 首页 > news >正文

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

文章目录

  • 一.JavaWeb商城项目的促销功能模块【进阶版】开发过程记录
    • 1.1 项目背景
    • 1.2 需求分析
    • 1.3 开发流程/顺序
  • 二.促销页面(0.1颗星)
    • 2.1 需求介绍
    • 2.2 JSP页面
    • 2.3效果展示
  • 三,商品详情页面(0.2颗星)
    • 3.1 需求介绍和效果图
    • 3.2 数据库分析
    • 3.2 Servlet层
    • 3.3 Service层
    • 3.4 DAO层
    • 3.5 JSP页面
  • 四,购物车页面(1颗星)
    • 4.1需求介绍和效果图展示
    • 4.2 数据库设计
    • 4.3 Curriculums类
    • 4.4 Servlet层
    • 4.5 Order
    • 4.6 CurriculumsDao
    • 4.7 JSP页面

📗系列专栏: 本文写在上进小菜猪的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>

相关文章:

  • 5款可视化工具优缺点比对,谁赢了?
  • mybatis
  • 【华为上机真题 2022】| 差点没过
  • 计算机毕业设计(附源码)python余庆金阳驾校管理系统
  • 洛谷千题详解 | P1009 [NOIP1998 普及组] 阶乘之和【C++、Java、Python、Pascal语言】
  • 毕业设计 嵌入式 智能婴儿车
  • Python获取 小黑子 弹幕数据+制作词云分析.........
  • 【C++笔记】第二十五篇 内建函数对象
  • 【C/自定义类型详解】——结构体(struct)、位段、枚举(enum)、联合(union)
  • CSDN 编程竞赛·第八期总结
  • 如何搭建网课搜题公众号
  • MySQL总结
  • 【Web UI自动化测试】Web UI自动化测试之PO篇(全网最全)
  • 什么是跨域
  • 智能优化算法:白鲸优化算法-附代码
  • 【初阶C++】细谈new和delete以及函数与类的模板
  • 【EffectiveC++】让自己习惯C++
  • Python实现websocket接口自动化测试
  • 【Flutter】【widget】Checkbox 和 CheckboxListTile 复选框快速学习一下
  • 二叉搜索树——C++
  • 中青报:“爸妈替我在线相亲”,助力还是越界?
  • 研究完蚂蚁搬家,我好像明白了为什么我们总是堵车
  • 龚正盛秋平王晓真共同启动2025国际消费季暨第六届上海“五五购物节”
  • 美国季度GDP时隔三年再现负增长,特朗普政府关税政策对美国经济负面影响或将持续
  • 居委业委居民群策群力,7位一级演员来到上海一小区唱戏
  • 视频丨中国海警位中国黄岩岛领海及周边区域执法巡查