计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(订单和AOP)
计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(订单和AOP)
该项目分析着重于设计和实现基于SpringBoot+MyBatis框架的电脑商城。首先,通过深入分析项目所需数据,包括用户、商品、商品类别、收藏、订单、购物车、收货地址,建立了数据模型。关于SpringBoot+MyBatis框架的电脑商城的设计与实现,我会按照系统概述与环境搭建、用户注册登录、用户资料修改、用户上传头像、-用户收货管理、商品、购物车、订单、AOP的顺序依次更新。本文内容主要是项目订单和AOP部分。
创建订单
1 订单-创建数据表
1.使用use命令先选中store数据库。
USE store;
2.在store数据库中创建t_order和t_order_item数据表。
CREATE TABLE t_order (oid INT AUTO_INCREMENT COMMENT '订单id',uid INT NOT NULL COMMENT '用户id',recv_name VARCHAR(20) NOT NULL COMMENT '收货人姓名',recv_phone VARCHAR(20) COMMENT '收货人电话',recv_province VARCHAR(15) COMMENT '收货人所在省',recv_city VARCHAR(15) COMMENT '收货人所在市',recv_area VARCHAR(15) COMMENT '收货人所在区',recv_address VARCHAR(50) COMMENT '收货详细地址',total_price BIGINT COMMENT '总价',status INT COMMENT '状态:0-未支付,1-已支付,2-已取消,3-已关闭,4-已完成',order_time DATETIME COMMENT '下单时间',pay_time DATETIME COMMENT '支付时间',created_user VARCHAR(20) COMMENT '创建人',created_time DATETIME COMMENT '创建时间',modified_user VARCHAR(20) COMMENT '修改人',modified_time DATETIME COMMENT '修改时间',PRIMARY KEY (oid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE t_order_item (id INT AUTO_INCREMENT COMMENT '订单中的商品记录的id',oid INT NOT NULL COMMENT '所归属的订单的id',pid INT NOT NULL COMMENT '商品的id',title VARCHAR(100) NOT NULL COMMENT '商品标题',image VARCHAR(500) COMMENT '商品图片',price BIGINT COMMENT '商品价格',num INT COMMENT '购买数量',created_user VARCHAR(20) COMMENT '创建人',created_time DATETIME COMMENT '创建时间',modified_user VARCHAR(20) COMMENT '修改人',modified_time DATETIME COMMENT '修改时间',PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2 订单-创建实体类
1.在com.cy.store.entity包下创建Order实体类。
package com.cy.store.entity;
import java.io.Serializable;
import java.util.Date;/** 订单数据的实体类 */
public class Order extends BaseEntity implements Serializable {private Integer oid;private Integer uid;private String recvName;private String recvPhone;private String recvProvince;private String recvCity;private String recvArea;private String recvAddress;private Long totalPrice;private Integer status;private Date orderTime;private Date payTime;// Generate: Getter and Setter、Generate hashCode() and equals()、toString()
}
2.在com.cy.store.entity包下创建OrderItem实体类。
package com.cy.store.entity;
import java.io.Serializable;/** 订单中的商品数据 */
public class OrderItem extends BaseEntity implements Serializable {private Integer id;private Integer oid;private Integer pid;private String title;private String image;private Long price;private Integer num;// Generate: Getter and Setter、Generate hashCode() and equals()、toString()
}
3 订单-持久层
3.1 规划需要执行的SQL语句
1.插入订单数据的SQL语句大致是。
INSERT INTO t_order (uid,recv_name,recv_phone,recv_province,recv_city,recv_area,recv_address,total_price,status,order_time,pay_time,created_user,created_time,modified_user,modified_time
)
VALUES (#对应字段的值列表
)
2.插入订单商品数据的SQL语句大致是。
INSERT INTO t_order_item ( oid, pid, title, image, price, num, created_user, created_time, modified_user, modified_time
)
VALUES ( #对应字段的值列表
)
3.2 接口与抽象方法
在com.cy.store.mapper包下创建OrderMapper接口并在接口中添加抽象方法。
package com.cy.store.mapper;
import com.cy.store.entity.Order;
import com.cy.store.entity.OrderItem;/** 处理订单及订单商品数据的持久层接口 */
public interface OrderMapper {/*** 插入订单数据* @param order 订单数据* @return 受影响的行数*/Integer insertOrder(Order order);/*** 插入订单商品数据* @param orderItem 订单商品数据* @return 受影响的行数*/Integer insertOrderItem(OrderItem orderItem);
}
3.3 配置SQL映射
1.在main\resources\mapper文件夹下创建OrderMapper.xml文件,并添加抽象方法的映射。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.store.mapper.OrderMapper"><!-- 插入订单数据:Integer insertOrder(Order order) --><insert id="insertOrder" useGeneratedKeys="true" keyProperty="oid">INSERT INTO t_order (uid, recv_name, recv_phone, recv_province, recv_city, recv_area, recv_address,total_price,status, order_time, pay_time, created_user, created_time, modified_user,modified_time) VALUES (#{uid}, #{recvName}, #{recvPhone}, #{recvProvince}, #{recvCity}, #{recvArea},#{recvAddress}, #{totalPrice}, #{status}, #{orderTime}, #{payTime}, #{createdUser},#{createdTime}, #{modifiedUser}, #{modifiedTime})</insert><!-- 插入订单商品数据:Integer insertOrderItem(OrderItem orderItem) --><insert id="insertOrderItem" useGeneratedKeys="true" keyProperty="id">INSERT INTO t_order_item (oid, pid, title, image, price, num, created_user,created_time, modified_user, modified_time) VALUES (#{oid}, #{pid}, #{title}, #{image}, #{price}, #{num}, #{createdUser},#{createdTime}, #{modifiedUser}, #{modifiedTime})</insert>
</mapper>
2.在com.cy.store.mapper包下创建OrderMapperTests测试类,并添加测试方法。
package com.cy.store.mapper;
import com.cy.store.entity.Order;
import com.cy.store.entity.OrderItem;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderMapperTests {@Autowiredprivate OrderMapper orderMapper;@Testpublic void insertOrder() {Order order = new Order();order.setUid(31);order.setRecvName("小王");Integer rows = orderMapper.insertOrder(order);System.out.println("rows=" + rows);}@Testpublic void insertOrderItem() {OrderItem orderItem = new OrderItem();orderItem.setOid(1);orderItem.setPid(2);orderItem.setTitle("高档铅笔");Integer rows = orderMapper.insertOrderItem(orderItem);System.out.println("rows=" + rows);}
}
4 订单-业务层
4.1 规划异常
说明:无异常。
4.2 接口与抽象方法
1.由于处理过程中还需要涉及收货地址数据的处理,所以需要先在IAddressService接口中添加getByAid()方法。
/*** 根据收货地址数据的id,查询收货地址详情* @param aid 收货地址id* @param uid 归属的用户id* @return 匹配的收货地址详情*/
Address getByAid(Integer aid, Integer uid);
2.在AddressServiceImpl类中实现接口中的getByAid()抽象方法。
@Override
public Address getByAid(Integer aid, Integer uid) {// 根据收货地址数据id,查询收货地址详情Address address = addressMapper.findByAid(aid);if (address == null) {throw new AddressNotFoundException("尝试访问的收货地址数据不存在");}if (!address.getUid().equals(uid)) {throw new AccessDeniedException("非法访问");}address.setProvinceCode(null);address.setCityCode(null);address.setAreaCode(null);address.setCreatedUser(null);address.setCreatedTime(null);address.setModifiedUser(null);address.setModifiedTime(null);return address;
}
3.在com.cy.store.service包下创建IOrderService业务层接口并添加抽象方法。
package com.cy.store.service;
import com.cy.store.entity.Order;/** 处理订单和订单数据的业务层接口 */
public interface IOrderService {/*** 创建订单* @param aid 收货地址的id* @param cids 即将购买的商品数据在购物车表中的id* @param uid 当前登录的用户的id* @param username 当前登录的用户名* @return 成功创建的订单数据*/Order create(Integer aid, Integer[] cids, Integer uid, String username);
}
4.3 实现抽象方法
1.在com.cy.store.service.impl包下创建OrderServiceImpl业务层实现类并实现IOrderService接口;在类定义之前添加@Service注解,在类中添加OrderMapper订单持久层对象、IAddressService处理收货地址对象、ICartService购物车数据对象,并都添加@Autowired注解进行修饰。
package com.cy.store.service.impl;
import com.cy.store.entity.Address;
import com.cy.store.entity.Order;
import com.cy.store.entity.OrderItem;
import com.cy.store.mapper.OrderMapper;
import com.cy.store.service.IAddressService;
import com.cy.store.service.ICartService;
import com.cy.store.service.IOrderService;
import com.cy.store.service.ex.InsertException;
import com.cy.store.vo.CartVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;/** 处理订单和订单数据的业务层实现类 */
@Service
public class OrderServiceImpl implements IOrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate IAddressService addressService;@Autowiredprivate ICartService cartService;// ...
}
2.在OrderServiceImpl类中重写父接口中的create()抽象方法。
@Transactional
@Override
public Order create(Integer aid, Integer[] cids, Integer uid, String username) {// 创建当前时间对象// 根据cids查询所勾选的购物车列表中的数据// 计算这些商品的总价// 创建订单数据对象// 补全数据:uid// 查询收货地址数据// 补全数据:收货地址相关的6项// 补全数据:totalPrice// 补全数据:status// 补全数据:下单时间// 补全数据:日志// 插入订单数据// 遍历carts,循环插入订单商品数据// 创建订单商品数据// 补全数据:oid(order.getOid())// 补全数据:pid, title, image, price, num// 补全数据:4项日志// 插入订单商品数据// 返回
}
3.OrderServiceImpl类中的create()方法具体逻辑代码实现见下。
@Transactional
@Override
public Order create(Integer aid, Integer[] cids, Integer uid, String username) {// 创建当前时间对象Date now = new Date();// 根据cids查询所勾选的购物车列表中的数据List<CartVO> carts = cartService.getVOByCids(uid, cids);// 计算这些商品的总价long totalPrice = 0;for (CartVO cart : carts) {totalPrice += cart.getRealPrice() * cart.getNum();}// 创建订单数据对象Order order = new Order();// 补全数据:uidorder.setUid(uid);// 查询收货地址数据Address address = addressService.getByAid(aid, uid);// 补全数据:收货地址相关的6项order.setRecvName(address.getName());order.setRecvPhone(address.getPhone());order.setRecvProvince(address.getProvinceName());order.setRecvCity(address.getCityName());order.setRecvArea(address.getAreaName());order.setRecvAddress(address.getAddress());// 补全数据:totalPriceorder.setTotalPrice(totalPrice);// 补全数据:statusorder.setStatus(0);// 补全数据:下单时间order.setOrderTime(now);// 补全数据:日志order.setCreatedUser(username);order.setCreatedTime(now);order.setModifiedUser(username);order.setModifiedTime(now);// 插入订单数据Integer rows1 = orderMapper.insertOrder(order);if (rows1 != 1) {throw new InsertException("插入订单数据时出现未知错误,请联系系统管理员");}// 遍历carts,循环插入订单商品数据for (CartVO cart : carts) {// 创建订单商品数据OrderItem item = new OrderItem();// 补全数据:setOid(order.getOid())item.setOid(order.getOid());// 补全数据:pid, title, image, price, numitem.setPid(cart.getPid());item.setTitle(cart.getTitle());item.setImage(cart.getImage());item.setPrice(cart.getRealPrice());item.setNum(cart.getNum());// 补全数据:4项日志item.setCreatedUser(username);item.setCreatedTime(now);item.setModifiedUser(username);item.setModifiedTime(now);// 插入订单商品数据Integer rows2 = orderMapper.insertOrderItem(item);if (rows2 != 1) {throw new InsertException("插入订单商品数据时出现未知错误,请联系系统管理员");}}// 返回return order;
}
4.在com.cy.store.service测试包下创建OrderServiceTests测试类,并添加create()方法进行功能测试。
package com.cy.store.service;
import com.cy.store.entity.Order;
import com.cy.store.service.ex.ServiceException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderServiceTests {@Autowiredprivate IOrderService orderService;@Testpublic void create() {try {Integer aid = 21;Integer[] cids = {4, 5, 6,7};Integer uid = 31;String username = "订单管理员";Order order = orderService.create(aid, cids, uid, username);System.out.println(order);} catch (ServiceException e) {System.out.println(e.getClass().getSimpleName());System.out.println(e.getMessage());}}
}
5 订单-控制器层
5.1 处理异常
说明:无异常。
5.2 设计请求
设计用户提交的请求,并设计响应的方式。
请求路径:/orders/create
请求参数:Integer aid, Integer[] cids, HttpSession session
请求类型:POST
响应结果:JsonResult<Order>
5.3 处理请求
1.在com.cy.store.controller包下创建OrderController类,并继承自BaseController类;并在类前添加@RequestMapping(“orders”)注解和@RestController注解;在类中声明IOrderService业务对象,然后添加@Autowired注解修饰;最后在类中添加处理请求的方法。
package com.cy.store.controller;
import com.cy.store.entity.Order;
import com.cy.store.service.IOrderService;
import com.cy.store.util.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;@RestController
@RequestMapping("orders")
public class OrderController extends BaseController {@Autowiredprivate IOrderService orderService;@RequestMapping("create")public JsonResult<Order> create(Integer aid, Integer[] cids, HttpSession session) {// 从Session中取出uid和usernameInteger uid = getUidFromSession(session);String username = getUsernameFromSession(session);// 调用业务对象执行业务Order data = orderService.create(aid, cids, uid, username);// 返回成功与数据return new JsonResult<Order>(OK, data);}
}
2.完成后启动项目,先登录再访问http://localhost:8080/orders/create?aid=21&cids=4&cids=5&cids=6&cids=7进行测试。
6 订单-前端页面
1.在orderConfirm.xml页面中的body标签内的script标签内添加“在线支付”按钮的点击时间。
$("#btn-create-order").click(function() {$.ajax({url: "/orders/create",data: $("#form-create-order").serialize(),type: "POST",dataType: "JSON",success: function(json) {if (json.state == 200) {alert("创建订单成功!");console.log(json.data);} else {alert("创建订单失败!" + json.message);}},error: function(xhr) {alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);location.href = "login.html";}});
});
2.完成后启动项目,先登录再访问http://localhost:8080/web/cart.html页面,勾选购车中的商品,再点击“结算”按钮,最后在订单确认页中点击“在线支付”按钮进行功能的测试。
AOP
1 Spring AOP
AOP:面向切面(Aspect)编程。AOP并不是Spring框架的特性,只是Spring很好的支持了AOP。
如果需要在处理每个业务时,都执行特定的代码,则可以假设在整个数据处理流程中存在某个切面,切面中可以定义某些方法,当处理流程执行到切面时,就会自动执行切面中的方法。最终实现的效果就是:只需要定义好切面方法,配置好切面的位置(连接点),在不需要修改原有数据处理流程的代码的基础之上,就可以使得若干个流程都执行相同的代码。
2 切面方法
1.切面方法的访问权限是public。
2.切面方法的返回值类型可以是void或Object,如果使用的注解是@Around时,必须使用Object作为返回值类型,并返回连接点方法的返回值;如果使用的注解是@Before或@After等其他注解时,则自行决定。
3.切面方法的名称可以自定义。
4.切面方法的参数列表中可以添加ProceedingJoinPoint接口类型的对象,该对象表示连接点,也可以理解调用切面所在位置对应的方法的对象,如果使用的注解是@Around时,必须添加该参数,反之则不是必须添加。
3 统计业务方法执行时长
1.在使用Spring AOP编程时,需要先在pom.xml文件中添加两个关于AOP的依赖aspectjweaver和aspectjtools。
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjtools</artifactId>
</dependency>
2.在com.cy.store.aop包下创建TimerAspect切面类,在类之前添加@Aspect和@Component注解修饰。
package com.cy.store.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Aspect
@Component
public class TimerAspect {}
3.在类中添加切面方法around(ProceedingJoinPoint pjp)。
public Object around(ProceedingJoinPoint pjp) throws Throwable {// 记录起始时间long start = System.currentTimeMillis();// 执行连接点方法,即切面所在位置对应的方法。本项目中表示执行注册或执行登录等Object result = pjp.proceed();// 记录结束时间long end = System.currentTimeMillis();// 计算耗时System.err.println("耗时:" + (end - start) + "ms.");// 返回连接点方法的返回值return result;
}
4.最后需要在方法之前添加@Around注解,以配置连接点,即哪些方法需要应用该切面。
@Around("execution(* com.cy.store.service.impl.*.*(..))")
5.启动项目,在前端浏览器访问任意一个功能模块进行功能的测试。
至此,基于SpringBoot+MyBatis框架的电脑商城的设计与实现所有部分已经全部更新完成
相关文章:

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(订单和AOP)
计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现(订单和AOP) 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先,通过深入分析项目所需数据,包括用户、商品、商品类别、收藏、订单、购物车…...

【Skynet 入门实战练习】实现网关服务 | 用户代理 | RPC 协议 | 客户端
文章目录 前言网关服务RPC 协议看门狗服务代理服务客户端逻辑梳理 前言 上两章学习了如何搭建一个项目,简单实现了几个基础模块。本章节会实现基本的客户端与服务端的通信,包括网关(gate)、看门狗(watchdog࿰…...

eclipse - jee 建立项目后没有 web.xml
eclipse -- jee 建立项目后没有 web.xml 处理它的方法是,点 File - New - Dynamic Web Project , 此时起一个项目名如M4 然后next 然后next 出现如此所示:...
Miniconda虚拟环境安装(chatglm2大模型安装步骤二)
1.服务器配置 服务器系统:Centos7.9 x64 显卡:RTX3090 (24G) 2.安装环境 2.1 检查conda是否安装 输入命令:conda -V 如果显示conda 4.7.12,说明已经有不需要安装 2.2 安装Miniconda 在家目录建一个mi…...

C++学习之路(四)C++ 实现简单的待办事项列表命令行应用 - 示例代码拆分讲解
本期示例介绍: 本期示例《待办事项列表应用》展示了一个简单的任务管理系统,用户可以通过命令行界面执行添加任务、删除任务和显示任务列表等操作。 功能描述: 添加任务功能: 用户可以输入任务描述,将新的任务添加到任务列表中。…...

函数指针数组指针数组传参的本质字符指针
🚀 作者:阿辉不一般 🚀 你说呢:不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞…...
Linux swapon命令教程:如何在Linux中启用和禁用交换空间(附实例教程和注意事项)
Linux swapon命令介绍 Linux的swapon命令用于启用指定设备和文件的交换。当物理内存(RAM)达到其最大容量时,Linux使用交换空间。如果系统需要更多的内存,而RAM不足,内存中的非活动页面将被移动到交换空间。交换空间是…...

云计算领域的第三代浪潮!
根据IDC不久前公布的数据,2023年上半年中国公有云服务整体市场规模(IaaS/PaaS/SaaS)为190.1亿美元,阿里云IaaS、PaaS市场份额分别为29.9%和27.9%,都远超第二名,是无可置疑的行业领头羊。 随着人工智能(AI)…...
面试题目总结(一)
1. 谈谈数据库的乐观锁和悲观锁 乐观锁和悲观锁是数据库并发控制中常用的两种策略,用于处理多个事务同时访问和修改同一个数据时的并发冲突问题。 数据库的乐观锁是指在读取数据时,不对数据进行加锁,而是在更新数据时检查数据版本是否发生变…...
建造者设计模式
3. 建造者设计模式 3.1 原理 Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。 建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”地创建不同的对象。 创建者模式主要包含以…...

YOLO目标检测——垃圾检测数据集下载分享【含对应voc、coco和yolo三种格式标签】
实际项目应用:智能化垃圾分类系统、垃圾回收和处理领域的优化管理等方面数据集说明:垃圾分类检测数据集,真实场景的高质量图片数据,数据场景丰富,含报纸、蛋壳、矿泉水瓶、电池、拉链顶罐、塑料餐盒、纸质药盒、香蕉皮…...
Vue CLI的介绍【vue利器之一】
文章目录 前言Vue CLI 介绍CLICLI 服务CLI 插件后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:vue.js 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误&am…...
【学习笔记】插值之拉格朗日插值(Lagrange)
0 插值介绍 插值法是广泛应用于理论研究和工程实际的重要数值方法。用提供的部分离散的函数值来进行理论分析和设计都是极不方便的,因此希望能够用一个既能反映原函数特征,又便于计算的简单函数去近似原函数。 1 低次拉格朗日插值 定理:设…...

无人机电力巡检系统运行流程全解读
随着电力行业体系不断完善,保障电网运营的安全成为至关重要的任务。传统的人工巡检方式在面对电力设备广泛分布和复杂工况时显得效率低下,为了解决这一难题,无人机电力巡检系统应运而生,以智能化的运行流程,为电网安全…...
有关全局变量和sizeof的题
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int i; int main() {i--;if (i > sizeof(i)){printf(">");}else{printf("<");}return 0; } 这道题结果是 > 首先对于一个全局变量,当没有对其初始化时,它…...
vue简述
vue为渐进式框架:vmmv 1.易用 有html、css、javascript基础,即可学习vue框架 2.高效、开发前端页面 非常高效 1.vue的体积小、压缩完只需要20k的大小 2.超快的虚拟dom操作js中非常多的dom操作,vue设计虚拟dom非常快 3.设计时vue底层深度优化 …...

YOLOv8 训练自己的分割数据集
之前写过一篇 使用YOLOv8训练自己的【目标检测】数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】,里面带大家整个流程走过一遍了, 这篇文章我们来介绍如何使用 YOLOv8 训练分割数据集&a…...

Python实现DDos攻击实例详解
文章目录 SYN 泛洪攻击Scapy3k 基本用法代码实现DDos 实现思路argparse 模块socket 模块代码实现Client 端程序测试后记关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案…...

微信小程序实现【点击 滑动 评分 评星(5星)】功能
wxml文件: <view class"wxpl_xing"><view class"manyidu">{{scoreContent}}</view><view><block wx:for{{scoreArray}} wx:for-item"item"><view classstarLen bindtapchangeScore data-sy"{{…...
堡垒机的用途
堡垒机的用途 堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...