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

news/2024/5/17 0:19:02/文章来源:https://blog.csdn.net/weixin_52908342/article/details/127672571

文章目录

  • 一.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.luyixian.cn/news_show_411579.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔试强训(三十二)

目录一、选择题二、编程题2.1 淘宝网店2.1.1 题目2.1.2 题解2.2 斐波那契凤尾2.2.1 题目2.2.2 题解一、选择题 &#xff08;1&#xff09;处于运行状态的操作系统程序应放在(B) A.寄存器 B.主存 C.辅存 处于运行状态的操作系统程序也就是进程&#xff0c;进程需要放在内存中执…

Oracle行转列(pivot)和Oracle列转行(unpivot)

行变列&#xff0c;列变行在生成报表的时候经常遇到&#xff0c;行变列叫做"Pivot”, 反之叫做"Unpivot”。 在Oracle11g之前&#xff0c;一般都是通过case来实现&#xff0c;但是Oracle11g及其以后直接支持PIVOT和UNPIVOT的操作。 pivot 语法&#xff1a; SELECT *…

从零开始学习opencv——在虚拟环境下安装opencv环境

毕设准备做cv相关项目&#xff0c;今天开始学习cv基础知识&#xff0c;课程为B站“【不要再看那些过时的OpenCV老教程了】2022巨献&#xff0c;OpenCV零基础小白最新版全套教程(人工智能机器视觉教程)” 1.在windows系统中某文件夹下安装虚拟环境&#xff1a; pip install vir…

软件工程师进入编程世界的55个锦囊:《 好代码 ,坏代码》

软件工程领域关于如何写出优秀代码的建议和观点非常多。但生活没有那么简单, 绝不只是尽可能多地吸取好的建议并严格遵守。由于不同来源的建议往往相互矛盾&#xff0c;我们怎么知道要听从哪个建议。更重要的是&#xff0c;软件工程并不是一门精确的科学&#xff0c;不可能将其…

Spring Security是什么? - 简单例子(三)

2、spring security中&#xff0c;安全配置通过继承WebSecurityConfigurerAdapter来配置 Configuration public class MyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter{protected void configure(HttpSecurity http) throws Exception {//做大量的配置/…

万字深剖 Linux I/O 原理

目录传统艺能&#x1f60e;梅开二度&#x1f914;当前路径&#x1f914;三大输入输出流&#x1f914;系统文件 I/O&#x1f914;open&#x1f60b;open 返回值&#x1f914;close&#x1f60b;write&#x1f60b;read&#x1f60b;文件描述符fd&#x1f60b;对应关系&#x1f6…

【好书推荐】《Python编程:从入门到实践(第2版)》

第二版是2020年底发布的&#xff0c;第二版相比较第一版更新了不少新东西。 不错的python入门书&#xff0c;第一部分讲基础知识&#xff0c;第二部分讲了三个实际的项目&#xff1a;一个小游戏&#xff0c;一个数据可视化程序&#xff0c;一个网站。 可以方便地下载全书的源…

学习笔记-Kioptrix4-WalkThrough

Kioptrix4-WalkThrough 文章作者 xidaner & r0fus0d 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 靶机地址 https://www.vulnhub.com/entry/kioptrix-level-13-4,25/ Description Again a long delay bet…

实验4 类与数组

实验任务51 #pragma once2 3 #include<iostream>4 #include<cassert>5 using std::cout;6 using std::endl;7 8 class vectorInt9 { 10 private: 11 /* data */ 12 int size; 13 int *p; 14 public: 15 vectorInt(int n); 16 vectorInt(int n,…

分布式光伏站远程监控组网解决方案

一、项目背景随着规模性的光伏电站陆续建设和投入运行&#xff0c;如何实时了解电站的运行状况&#xff0c;如何满足上一级系统或电网调度系统的监控需求成为了急需解决的事情。为使对分布式能源实现高效监控、满足电力接入电网要求、合理调配、集中监控、电网分析、配网自动化…

前端特效、js代码优化

1.旋转按钮边框 效果&#xff1a; 代码&#xff1a; <div class"container"><button class"btn">旋转边框</button></div>*{margin: 0;padding: 0;}.container{background: #000;height: 100vh;overflow: hidden;}.btn{/* borde…

35岁以后还能学软件测试吗?

之前看到一个问题“35岁学软件测试来得及吗”。 之前一直在工厂上班&#xff0c;看不到希望。 已经35岁了&#xff0c;想转学软件测试来得及吗&#xff1f; 经常会碰到类似这样的问题&#xff1a;担心自己学历不够&#xff0c;非计算机专业&#xff0c;害怕学不会&#xff0c;甚…

擎创技术流 | ClickHouse实用工具—ckman教程(1)部署安装

前言&#xff1a; 在数据量日益增长的当下&#xff0c;传统数据库的查询性能已满足不了业务需求。而Clickhouse在OLAP&#xff08;On-Line Analysis Processing——即一种在线分析处理的&#xff0c;用于数据分析的计算方法&#xff09;领域的应用&#xff0c;可以助力企业打造…

2022爱分析·虚拟化活动实践报告

报告编委 张扬 爱分析联合创始人&首席分析师 文鸿伟 爱分析高级分析师 **王鹏 ** 爱分析分析师 外部专家**&#xff08;按姓氏拼音排序&#xff09;** 梁瑛玮 保利威技术副总裁 于颢 tatameCEO 特别鸣谢&#xff08;按拼音排序&#xff09; 报告摘要 新冠疫…

Linux基础(yum,vim,gcc,gdb)

Linux基本的命令我们会敲了&#xff0c;基本的文件概念以及权限概念我们也都了解了&#xff0c;接下来该学一些好用的工具&#xff0c;用Linux完成一些工作了 目录 yum yum的作用 yum基本操作 vim vim的基本模式 命令模式 插入模式 底行模式 可视化模式 gcc gcc…

Drag-MoveMent

目录UGUI-OnDrag事件如何使用PointerEventDataposition屏幕空间->世界坐标/局部坐标空间(转换)参考文章UGUI-OnDrag事件 示例代码: using UnityEngine.EventSystems;public class TestOnDrag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler {public v…

java计算机毕业设计基于安卓Android的教学考勤系统APP

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库…

二叉查找树、平衡二叉树、红黑二叉树简单概念

二叉查找树&#xff08;二叉排序树、二叉搜索树&#xff09;&#xff1a; 性质&#xff1a; 1.若其左子树非空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b; 2.若其右子树非空&#xff0c;则右子树上所有节点的值都大于根节点的值&#xff1b; 3.其…

Kubectl

目录 一、资源管理 1.kubernetes集群管理 2.kubectl 3.kubectl 的命令 (1)查看版本信息 (2)查看资源对象简写信息 (3)查看集群信息 (4)配置kubectl自动补全 (5)node节点查看日志 (6)K8s核心组件日志 二、基本信息查看 1.查看master节点状态 2.查看命令空间 3.查看…