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

news2024/11/30 10:44:47

文章目录

  • 一.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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一本通1064;奥运奖牌计数

#include <iostream> using namespace std; int main() {int n, Jin, Yin, Tong;int JinSum 0, YinSum 0, TongSum 0, sum;cin >> n;for (int i 1; i < n; i) // 循环n次{cin >> Jin >> Yin >> Tong; // 输入一天获得的金银铜牌数JinSum …

InfluxDB学习记录(三)——influxdb的flux语法

什么是Flux Flux 是 InfluxData 的功能性数据脚本语言&#xff0c;设计用于查询、分析和处理数据&#xff0c;它是InfluxQL 和其他类似 SQL 的查询语言的替代品。 每个 Flux 查询都需要以下内容&#xff1a; 数据源时间范围数据过滤器 Flux代码示例 from(bucket:"example…

重装系统后打印机状态已暂停如何恢复

​当我们在使用打印机打印文件的时候&#xff0c;有时候会发现打印机状态已暂停&#xff0c;打印不下去了&#xff0c;这时候怎么恢复呢&#xff0c;其实只需要取消掉打印暂停就可以了&#xff0c;下面就和大家讲讲重装系统后打印机状态已暂停如何恢复吧。 打印机状态已暂停怎…

【前端】Vue+Element UI案例:通用后台管理系统-Home组件:卡片、表格

文章目录目标代码0.布局1.左上User卡片2.左下table卡片2.1数据&#xff1a;TableData.js2.2table2.3代码优化&#xff1a;循环3.右上数据卡片3.1数据&#xff1a;CountData3.2结构3.3布局3.4样式总代码Home.vue参考目标 红框内部分都是卡片&#xff0c;鼠标悬停会有阴影左下是表…

java计算机毕业设计基于安卓Android的天文观星系统app uniapp 小程序

项目介绍 信息技术的发展带来了大量的数据内容,在这些数据中,想要找到自己需要的只有通过搜索引擎。如今,通过百度去查找信息成为大众的首选,然而在经济利益的驱动下,许多百度来的信息都是商业内容,很难找到真实有用的实际信息。在互联网中平台,天文信息交流和资源共享是一个非…

【每日训练】进制转换

目录 题目链接&#xff1a; 测试用例&#xff1a; 解析&#xff1a; 程序&#xff1a; 题目链接&#xff1a; 进制转换_牛客题霸_牛客网 (nowcoder.com) 测试用例&#xff1a; 解析&#xff1a; 题目描述&#xff1a; 输入一个十进制数&#xff0c;转化为对应输入的几进制数…

微服务及其在app自动化领域的应用

微服务是一种软件开发技术- 面向服务的体系结构&#xff08;SOA&#xff09;架构样式的一种变体&#xff0c;它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务与服…

5款可视化工具优缺点比对,谁赢了?

利用Excel表格进行汇报&#xff0c;底下坐着的领导可能会看起来眼花缭乱&#xff0c;但如果是以图表可视化的形式展现出来&#xff0c;那可简洁明了多了&#xff0c;不仅仅可以看到某个项目近几个月的走势&#xff0c;并且还能知道之后的决策。 可视化图表用什么工具做&#xf…

FP8训练调研

FP8训练调研 一、FP8训练相关技术要点总结 1、基于块的累加技术&#xff0c;减小低精度数之间相加的累积误差 2、随机舍入技术代替四舍五入&#xff0c;降低舍入误差 3、混合FP8技术&#xff0c;用1-4-3进行前向&#xff0c;1-5-2进行反向 4、设置指数偏移&#xff0c;使F…

windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

自己用Windows Server搭建了家用NAS主机&#xff0c;WebDAV的文件共享方式当然也是必不可少的。 本文使用的是WIN10 专业版。 1. 安装IIS必要WebDav组件 1.1 打开控制面板&#xff0c;查看方式改为“类别”&#xff0c;进入“程序”&#xff0c;“启用或关闭Windows功能” 1…

数据结构链表之无头单向循环链表的实现

文章目录前言1.链表的相关介绍1.什么是节点2.链表和顺序表的对比3.链表的种类2.链表的实现1.节点的定义和创建2.链表的相关函数接口的实现1.链表的创建2.数据的插入头插尾插指定位置插入3.数据的删除头删尾删指定位置删除4.打印显示节点数据5.数据查找6.链表销毁3.总结前言 之…

2022新版加壳工具-支持.NET虚拟化加密

.NET 虚拟化保护 .NET 程序的保护技术在对抗中不断演进&#xff0c;出现了控制流混淆、名称混淆、文件加壳、动态方法、JIT 加密等保护技术&#xff0c;这些保护技术都有其各自的优缺点&#xff0c;虽然组合起来也能达到一定的效果&#xff0c;但近几年已经流传出一些脱壳机和…

单点架构、集群架构、服务化架构、SOA、微服务到底有什么联系和关系?

本篇参考总结 IT老齐的学习笔记 原视频SOA面向服务架构 原视频智慧城市实践指南 &#xff08;书籍-SOA概述&#xff09; 最近我在负责研发智慧园区的智慧平台产品&#xff0c;目前需求阶段和设计阶段已经完成&#xff0c;正式开始开发阶段&#xff0c;但是作为一个算法类学习者…

redies基本数据结构

nosql数据库 和sql结构的数据库 1.结构化的&#xff0c;不设置表之间的结构 2.没有主外键约束&#xff0c;之间没有关联 3.nosql&#xff0c;其他的数据库不能使用redies的语法 4.没有事务&#xff0c;不符合ACID 5.redies存储在内存中&#xff0c;速度非常快 是一个键值…

Docker入门学习:基本概念、安装、命令、简单使用

前言 一、基本概念 1、Docker镜像 镜像就是一个文件&#xff0c;例如我们的应用镜像、环境镜像&#xff08;例如nginx、mysql等&#xff09;&#xff0c;镜像是创建Docker容器的基础。 2、Docker容器 Docker容器类似于一个沙箱&#xff08;例如做支付的时候的支付宝的沙箱…

【Java|golang】1668. 最大重复子字符串

给你一个字符串 sequence &#xff0c;如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串&#xff0c;那么单词 word 的 重复值为 k 。单词 word 的 最大重复值 是单词 word 在 sequence 中最大的重复值。如果 word 不是 sequence 的子串&#xff0c;那么重…

系统学习SpringFramework:SpringBean的注入方式

本篇内容包括&#xff1a;Spring 容器简介&#xff08;什么是容器、容器如何工作&#xff09;、SpringBean 注入方式&#xff08;SpringBean 注入方式分类、Autowiring 自动绑定&#xff09;以及 获取 Spring Bean 的工具类&#xff01; 一、Spring 容器 1、什么是容器 Sprin…

薪资17K,在字节外包工作是一种什么体验...

我17年毕业于一个普通二本学校&#xff0c;电子信息工程学院&#xff0c;是一个很不出名的小本科。大学期间专业知识也没有去认真的学习&#xff0c;所以毕业的时候就随便找了一份工作&#xff0c;在一个小公司做功能测试。 记得那时候税前薪资大概是7k左右&#xff0c;因为是…

SpringBoot:(四)底层注解详解

笔记来源&#xff1a;【尚硅谷】SpringBoot2零基础入门教程&#xff08;spring boot2干货满满&#xff09; 文章目录4.1 Configuration详解总结4.2 Component、Controller、Service、Repository、Bean4.3 Import导入组件4.4 Conditional条件装配4.5 ImportResource导入Spring配…

刷题记录(NC20313 [SDOI2008]仪仗队)

NC20313 [SDOI2008]仪仗队 题目链接 关键点&#xff1a; 1、首先分析题目&#xff0c;对于只能看到的点&#xff0c;设原点坐标为&#xff08;0&#xff0c;0&#xff09;&#xff0c;则除去横纵坐标上能看到的两点(0, 1)、(1, 0)&#xff0c;和对角线上的(1, 1)&#xff0c…