016 规格参数

文章目录

    • 新增
      • AttrController.java
      • AttrVo.java
      • AttrServiceImpl.java
      • AttrAttrgroupRelationEntity.java
      • AttrEntity.java
      • AttrGroupEntity.java
    • 查询
      • AttrController.java
      • AttrServiceImpl.java
      • AttrRespVo.java
    • 修改回显
      • AttrController.java
      • AttrServiceImpl.java
    • 修改提交
      • AttrController.java
      • AttrServiceImpl.java
    • baseattr.vue

分类属性属性分组

vo

新增

AttrController.java

@RestController
@RequestMapping("product/attr")
public class AttrController {@Autowiredprivate AttrService attrService;/*** 保存*/@RequestMapping("/save")//@RequiresPermissions("product:attr:save")public R save(@RequestBody AttrVo attrVo){attrService.saveAttr(attrVo);return R.ok();}}

AttrVo.java

package com.xd.cubemall.product.vo;import lombok.Data;@Data
public class AttrVo {private static final long serialVersionUID = 1L;/*** 自增ID*/private Long id;/*** 名称*/private String name;/*** 搜索类型*/private Integer searchType;/*** 图标*/private String icon;/*** 选择值*/private String valueSelect;/*** 属性类型:0-销售属性,1-基本属性,2-既是基本属性又是销售属性*/private Integer attrType;/*** 启用*/private Long enable;/*** 分类ID*/private Integer categoryId;/*** 描述*/private Integer showDesc;/*** 分组ID*/private Long attrGroupId;
}

AttrServiceImpl.java

@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {@Autowiredprivate AttrAttrgroupRelationDao attrAttrgroupRelationDao;/*** 在attr表中保存基本属性信息,然后在关联表中保存关联信息* @param attrVo*/@Overridepublic void saveAttr(AttrVo attrVo) {AttrEntity attrEntity = new AttrEntity();BeanUtils.copyProperties(attrVo, attrEntity);//保存基本属性数据this.save(attrEntity);//在AttrServiceImpl类中,this.save(attrEntity)这一行代码中的this关键字指的是当前对象的实例,即AttrServiceImpl的一个实例。在这里,this代表了正在执行代码的AttrServiceImpl类的对象。////save方法是ServiceImpl类中的一个方法,该类是AttrServiceImpl的父类(通过extends ServiceImpl<AttrDao, AttrEntity>)。ServiceImpl类是MyBatis-Plus框架中提供的一个基础服务实现类,它封装了一些常用的CRUD(创建、读取、更新、删除)操作。save方法用于保存或插入一个新的实体到数据库中。////因此,当你调用this.save(attrEntity)时,你实际上是在调用从ServiceImpl类继承来的save方法,将attrEntity对象保存到数据库中。这个方法会利用MyBatis-Plus提供的ORM(对象关系映射)功能,将AttrEntity对象的属性与数据库表中的列进行映射,并执行插入操作。//保存关联数据AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = new AttrAttrgroupRelationEntity();attrAttrgroupRelationEntity.setAttrId(attrEntity.getId());attrAttrgroupRelationEntity.setAttrGroupId(attrVo.getAttrGroupId());attrAttrgroupRelationDao.insert(attrAttrgroupRelationEntity);}
}

AttrAttrgroupRelationEntity.java

package com.xd.cubemall.product.entity;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.util.Date;
import lombok.Data;/*** 属性分组关联表* * @author xuedong* @email email@gmail.com* @date 2024-08-13 01:36:04*/
@Data
@TableName("tb_attr_attrgroup_relation")
public class AttrAttrgroupRelationEntity implements Serializable {private static final long serialVersionUID = 1L;/*** id*/@TableIdprivate Long id;/*** 属性ID*/private Long attrId;/*** 属性分组ID*/private Long attrGroupId;/*** 排序*/private Integer attrSort;}

AttrEntity.java

package com.xd.cubemall.product.entity;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.util.Date;
import lombok.Data;/*** 属性表* * @author xuedong* @email email@gmail.com* @date 2024-08-13 01:36:04*/
@Data
@TableName("tb_attr")
public class AttrEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 自增ID*/@TableIdprivate Long id;/*** 名称*/private String name;/*** 搜索类型*/private Integer searchType;/*** 图表*/private String icon;/*** 选择值*/private String valueSelect;/*** 属性类型:0-销售属性,1-基本属性,2-既是基本属性又是销售属性*/private Integer attrType;/*** 启用*/private Long enable;/*** 分类ID*/private Integer categoryId;/*** 描述*/private Integer showDesc;}

AttrGroupEntity.java

package com.xd.cubemall.product.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.util.Date;
import lombok.Data;/*** 属性分组表* * @author xuedong* @email email@gmail.com* @date 2024-08-13 01:36:04*/
@Data
@TableName("tb_attr_group")
public class AttrGroupEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 自增ID*/@TableIdprivate Long id;/*** 名称*/private String name;/*** 排序*/private Integer sort;/*** 描述*/private String descript;/*** 图表*/private String icon;/*** 分类ID*/private Integer categoryId;/*** 完整的categoryID的路径*/@TableField(exist = false)private Long[] categoryPath;
}

查询

AttrController.java

@RestController
@RequestMapping("product/attr")
public class AttrController {@Autowiredprivate AttrService attrService;/*** 列表*/@RequestMapping("/base/list/{categoryId}")//@RequiresPermissions("product:attr:list")public R list(@RequestParam Map<String, Object> params,@PathVariable("categoryId") Long categoryId){PageUtils page = attrService.queryBaseAttrPage(params, categoryId);return R.ok().put("page", page);}}

AttrServiceImpl.java

@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {@Autowiredprivate AttrAttrgroupRelationDao attrAttrgroupRelationDao;@Autowiredprivate AttrGroupDao attrGroupDao;@Autowiredprivate CategoryDao categoryDao;/**  * 获取指定分类的所有基本属性列表  * @param params 查询参数,可能包含分页信息和其他筛选条件  * @param categoryId 分类ID,用于筛选属性所属的分类  * @return 封装了查询结果和分页信息的PageUtils对象  */  
@Override  
public PageUtils queryBaseAttrPage(Map<String, Object> params, Long categoryId) {  // 创建一个QueryWrapper对象,用于构建查询条件  QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();  // 如果categoryId不为0,则添加查询条件:属性所属的分类ID等于传入的categoryId  if (categoryId != 0) {  queryWrapper.eq("category_id", categoryId);  }  // 从查询参数中获取关键字key  String key = (String) params.get("key");  // 如果key不为空,则添加查询条件:属性ID等于key或者属性名称包含key  // 注意:这里的逻辑可能有些问题,因为通常我们不会用ID来做模糊查询,这里可能是为了演示多种查询方式  // 实际上,应该根据实际需求来调整查询逻辑  if (StringUtils.isEmpty(key)){ // 这里判断应该是 !StringUtils.isEmpty(key),即key不为空时才执行查询  queryWrapper.and(wrapper -> {  wrapper.eq("id", key).or().like("name", key);  });  }  // 使用分页查询,获取属性列表的分页结果  IPage<AttrEntity> page = this.page(  new Query<AttrEntity>().getPage(params), // 从查询参数中获取分页信息  queryWrapper // 传入构建好的查询条件  );  // 创建一个PageUtils对象,用于封装分页结果和额外信息  PageUtils pageUtils = new PageUtils(page);  // 获取分页结果中的属性列表  List<AttrEntity> records = page.getRecords();  // 使用Java 8的Stream API对属性列表进行转换,封装成包含额外信息的AttrRespVo对象列表  List<AttrRespVo> respVos = records.stream().map(attrEntity -> {  // 创建一个AttrRespVo对象,用于封装返回的属性信息  AttrRespVo attrRespVo = new AttrRespVo();  // 1. 复制属性实体的基础信息到AttrRespVo对象中  BeanUtils.copyProperties(attrEntity, attrRespVo);  // 2. 封装属性分组名称  // 根据属性ID查询属性与属性分组的关联关系  AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = attrAttrgroupRelationDao.selectOne(  new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getId())  );  // 如果关联关系存在,则根据关联的属性分组ID查询属性分组名称  if (attrAttrgroupRelationEntity != null) {  AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrAttrgroupRelationEntity.getAttrGroupId());  if (attrGroupEntity != null) {  attrRespVo.setGroupName(attrGroupEntity.getName());  }  }  // 3. 封装分类名称  // 根据属性所属的分类ID查询分类名称  CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCategoryId());  if (categoryEntity != null) {  attrRespVo.setCategoryName(categoryEntity.getName());  }  // 返回封装好的AttrRespVo对象  return attrRespVo;  }).collect(Collectors.toList());  // 将封装好的AttrRespVo对象列表设置到PageUtils对象中  pageUtils.setList(respVos);  // 返回封装了查询结果和分页信息的PageUtils对象  return pageUtils;  
}
}

AttrRespVo.java

package com.xd.cubemall.product.vo;import lombok.Data;@Data
public class AttrRespVo extends AttrVo{/*** 分类名称*/private String categoryName;/*** 属性分组名称*/private String groupName;/*** 分类路径*/private Long[] categoryPath;
}

修改回显

AttrController.java

    /*** 指定属性信息的回显*/@RequestMapping("/info/{id}")//@RequiresPermissions("product:attr:info")public R info(@PathVariable("id") Long id){//AttrEntity attr = attrService.getById(id);AttrRespVo attrRespVo = attrService.getAttrInfo(id);return R.ok().put("attr", attrRespVo);}

AttrServiceImpl.java

import com.xd.cubemall.common.utils.PageUtils;
import com.xd.cubemall.common.utils.Query;
import com.xd.cubemall.product.dao.AttrAttrgroupRelationDao;
import com.xd.cubemall.product.dao.AttrGroupDao;
import com.xd.cubemall.product.dao.CategoryDao;
import com.xd.cubemall.product.entity.AttrAttrgroupRelationEntity;
import com.xd.cubemall.product.entity.AttrGroupEntity;
import com.xd.cubemall.product.entity.CategoryEntity;
import com.xd.cubemall.product.service.CategoryService;
import com.xd.cubemall.product.vo.AttrRespVo;
import com.xd.cubemall.product.vo.AttrVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.xd.cubemall.product.dao.AttrDao;
import com.xd.cubemall.product.entity.AttrEntity;
import com.xd.cubemall.product.service.AttrService;@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {@Autowiredprivate AttrAttrgroupRelationDao attrAttrgroupRelationDao;@Autowiredprivate AttrGroupDao attrGroupDao;@Autowiredprivate CategoryDao categoryDao;@Autowiredprivate CategoryService categoryService;@Overridepublic AttrRespVo getAttrInfo(Long id) {AttrRespVo attrRespVo = new AttrRespVo();AttrEntity attrEntity = this.getById(id);//attrEntity中的基本属性 拷贝到 attrRespVoBeanUtils.copyProperties(attrEntity,attrRespVo);//1.设置分组信息AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = attrAttrgroupRelationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attrEntity.getId()));if (attrAttrgroupRelationEntity != null) {attrRespVo.setAttrGroupId(attrAttrgroupRelationEntity.getAttrGroupId());AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrAttrgroupRelationEntity.getAttrGroupId());if (attrGroupEntity != null) {attrRespVo.setGroupName(attrGroupEntity.getName());}}//2.设置分类路径Long[] categoryPath = categoryService.findCategoryPath(attrEntity.getCategoryId());attrRespVo.setCategoryPath(categoryPath);//3.设置分类名称CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCategoryId());if (categoryEntity != null) {attrRespVo.setCategoryName(categoryEntity.getName());}return attrRespVo;}}

修改提交

AttrController.java

    /*** 修改提交操作*/@RequestMapping("/update")//@RequiresPermissions("product:attr:update")public R update(@RequestBody AttrVo attrVo){attrService.updateAttr(attrVo);return R.ok();}

AttrServiceImpl.java

    /*** 基本属性的修改--提交操作* @param attrVo*/@Overridepublic void updateAttr(AttrVo attrVo) {AttrEntity attrEntity = new AttrEntity();//基本属性的对拷BeanUtils.copyProperties(attrVo,attrEntity);this.updateById(attrEntity);//修改属性分组关联AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = new AttrAttrgroupRelationEntity();attrAttrgroupRelationEntity.setAttrId(attrVo.getId());attrAttrgroupRelationEntity.setAttrGroupId(attrVo.getAttrGroupId());Integer count = attrAttrgroupRelationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrVo.getId()));if(count > 0){attrAttrgroupRelationDao.update(attrAttrgroupRelationEntity,new UpdateWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attrVo.getId()));}else {attrAttrgroupRelationDao.insert(attrAttrgroupRelationEntity);}}

baseattr.vue

<template><el-row :gutter="20"><el-col :span="6"><category @tree-node-click="treenodeclick"></category></el-col><el-col :span="18"><div class="mod-config"><el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()"><el-form-item><el-input v-model="dataForm.key" placeholder="参数名" clearable></el-input></el-form-item><el-form-item><el-button @click="getDataList()">查询</el-button><el-button type="success" @click="getAllDataList()">查询全部</el-button><el-buttontype="primary"@click="addOrUpdateHandle()">新增</el-button><el-buttonv-if="isAuth('product:attr:delete')"type="danger"@click="deleteHandle()":disabled="dataListSelections.length <= 0">批量删除</el-button></el-form-item></el-form><el-table:data="dataList"borderv-loading="dataListLoading"@selection-change="selectionChangeHandle"style="width: 100%;"><el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column><el-table-column prop="id" header-align="center" align="center" label="id"></el-table-column><el-table-column prop="name" header-align="center" align="center" label="属性名"></el-table-column><el-table-columnv-if="attrtype == 1"prop="searchType"header-align="center"align="center"label="可检索"><template slot-scope="scope"><i class="el-icon-success" v-if="scope.row.searchType==1"></i><i class="el-icon-error" v-else></i></template></el-table-column><el-table-column prop="valueType" header-align="center" align="center" label="值类型"><template slot-scope="scope"><el-tag type="success" v-if="scope.row.valueType==0">单选</el-tag><el-tag v-else>多选</el-tag></template></el-table-column><el-table-column prop="icon" header-align="center" align="center" label="图标"></el-table-column><el-table-column prop="valueSelect" header-align="center" align="center" label="可选值"><template slot-scope="scope"><el-tooltip placement="top"><div slot="content"><span v-for="(i,index) in scope.row.valueSelect.split(';')" :key="index">{{i}}<br/></span></div><el-tag>{{scope.row.valueSelect.split(";")[0]+" ..."}}</el-tag></el-tooltip></template></el-table-column><el-table-column prop="enable" header-align="center" align="center" label="启用"><template slot-scope="scope"><i class="el-icon-success" v-if="scope.row.enable==1"></i><i class="el-icon-error" v-else></i></template></el-table-column><el-table-column prop="categoryName" header-align="center" align="center" label="所属分类"></el-table-column><el-table-columnv-if="attrtype == 1"prop="groupName"header-align="center"align="center"label="所属分组"></el-table-column><el-table-column v-if="attrtype == 1" prop="showDesc" header-align="center" align="center" label="快速展示"><template slot-scope="scope"><i class="el-icon-success" v-if="scope.row.showDesc==1"></i><i class="el-icon-error" v-else></i></template></el-table-column><el-table-columnfixed="right"header-align="center"align="center"width="150"label="操作"><template slot-scope="scope"><el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">修改</el-button><el-button type="text" size="small" @click="deleteHandle(scope.row.id)">删除</el-button></template></el-table-column></el-table><el-pagination@size-change="sizeChangeHandle"@current-change="currentChangeHandle":current-page="pageIndex":page-sizes="[10, 20, 50, 100]":page-size="pageSize":total="totalPage"layout="total, sizes, prev, pager, next, jumper"></el-pagination><!-- 弹窗, 新增 / 修改 --><add-or-update:type="attrtype"v-if="addOrUpdateVisible"ref="addOrUpdate"@refreshDataList="getDataList"></add-or-update></div></el-col></el-row>
</template><script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import Category from "../common/category";
import AddOrUpdate from "./attr-add-or-update";
export default {//import引入的组件需要注入到对象中才能使用components: { Category, AddOrUpdate },props: {attrtype: {type: Number,default: 1}},data() {return {catId: 0,type: 1,dataForm: {key: ""},dataList: [],pageIndex: 1,pageSize: 10,totalPage: 0,dataListLoading: false,dataListSelections: [],addOrUpdateVisible: false};},activated() {this.getDataList();},methods: {//感知树节点被点击treenodeclick(data, node, component) {if (node.level == 3) {this.catId = data.catId;this.getDataList(); //重新查询}},getAllDataList(){this.catId = 0;this.getDataList();},// 获取数据列表getDataList() {this.dataListLoading = true;let type = this.attrtype == 0 ? "sale" : "base";this.$http({url: this.$http.adornUrl(`/product/attr/${type}/list/${this.catId}`),method: "get",params: this.$http.adornParams({page: this.pageIndex,limit: this.pageSize,key: this.dataForm.key})}).then(({ data }) => {if (data && data.code === 0) {this.dataList = data.page.list;this.totalPage = data.page.totalCount;} else {this.dataList = [];this.totalPage = 0;}this.dataListLoading = false;});},// 每页数sizeChangeHandle(val) {this.pageSize = val;this.pageIndex = 1;this.getDataList();},// 当前页currentChangeHandle(val) {this.pageIndex = val;this.getDataList();},// 多选selectionChangeHandle(val) {this.dataListSelections = val;},// 新增 / 修改addOrUpdateHandle(id) {this.addOrUpdateVisible = true;this.$nextTick(() => {this.$refs.addOrUpdate.init(id);});},// 删除deleteHandle(id) {var ids = id? [id]: this.dataListSelections.map(item => {return item.id;});this.$confirm(`确定对[id=${ids.join(",")}]进行[${id ? "删除" : "批量删除"}]操作?`,"提示",{confirmButtonText: "确定",cancelButtonText: "取消",type: "warning"}).then(() => {this.$http({url: this.$http.adornUrl("/product/attr/delete"),method: "post",data: this.$http.adornData(ids, false)}).then(({ data }) => {if (data && data.code === 0) {this.$message({message: "操作成功",type: "success",duration: 1500,onClose: () => {this.getDataList();}});} else {this.$message.error(data.msg);}});});}}
};
</script>
<style scoped>
</style>

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

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

相关文章

Word 插入表格的具体步骤图解

Word 是工作和学习中比较常用的软件之一&#xff0c;有时候在使用的过程中可能需要插入一个表格来整理一些数据&#xff0c;但是有的人可能不知道如何插入表格&#xff0c;下面就给大家总结了 Word 怎么插入表格。 Word 插入表格 Word 插入表格之后可以在里面填写数据和文本&…

时序约束进阶四:set_input_delay和set_output_delay详解

目录 一、前言 二、set_input_delay/set_output_delay 2.1 延时约束 2.2 约束设置界面 2.3 示例工程 2.4 Delay Value 2.5 Delay value is relative to clock edge 2.6 Delay value already includes latencies of the specified clock edge 2.7 Rise/Fall 2.8 Max/M…

更新C语言题目

1.以下程序输出结果是() int main() {int a 1, b 2, c 2, t;while (a < b < c) {t a;a b;b t;c--;}printf("%d %d %d", a, b, c); } 解析:a1 b2 c2 a<b 成立 ,等于一个真值1 1<2 执行循环体 t被赋值为1 a被赋值2 b赋值1 c-- c变成1 a<b 不成立…

使用IOT-Tree Server制作一个边缘计算设备(Arm Linux)

最近实现了一个小项目&#xff0c;现场有多个不同厂家的设备&#xff0c;用户需要对此进行简单的整合&#xff0c;并实现一些联动控制。 我使用了IOT-Tree Server这个软件轻松实现了&#xff0c;不外乎有如下过程&#xff1a; 1&#xff09;使用Modbus协议对接现有设备&#…

9-贪心算法

PDF文档下载&#xff1a;LeetCode-贪心算法-java 参考&#xff1a;代码随想录 题目分类大纲如下&#xff1a; 贪心算法理论基础 什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心的套路&#xff08;什么时候用贪心&#xff…

C++ STL容器(五) —— priority_queue 底层剖析

这篇来讲下 priority_queue&#xff0c;其属于 STL 的容器适配器&#xff0c;容器适配器是在已有容器的基础上修改活泼限制某些数据接口以适应更特定的需求&#xff0c;比如 stack 栈使数据满足后进先出&#xff0c;queue 队列使数据满足先进先出&#xff0c;其都是在已有容器上…

转型AI产品经理需要掌握的硬知识、经理能力模型和常见AI概念梳理

近几年&#xff0c;从亚马逊&#xff0c; Facebook&#xff0c;到谷歌&#xff0c;微软&#xff0c;再到国内的BAT&#xff0c;全球最具影响力的技术公司都将目光转向了人工智能&#xff08; AI &#xff09;。2016年 AlphaGo 战胜李世石&#xff0c;把公众的目光也聚集到了人工…

哪些因素会影响PMC对生产质量问题的响应速度?

在制造业中&#xff0c;生产物料控制&#xff08;PMC&#xff09;扮演着至关重要的角色&#xff0c;它负责协调生产计划、物料采购、库存管理和生产进度等多个环节&#xff0c;确保生产活动能够顺利进行。然而&#xff0c;面对生产过程中可能出现的各种质量问题&#xff0c;PMC…

详解 PDF 转 JPG:简单操作,高效转换

如今&#xff0c;众多软件都已具备将PDF转换为JPG的功能&#xff0c;所以pdf怎么转换成jpg图片已经不难解决了吧。接下来&#xff0c;我想分享几款依然保存在我电脑中&#xff0c;且非常实用的PDF转JPG工具给大家。 1.福昕PDF转换大师 链接一下>>https://www.pdf365.cn…

C语言基础之结构体

今天我们来讲讲C语言基础的最后一个知识点了 —— 结构体。不知道大家对前面的C语言基础的知识点掌握的怎么样了呢&#xff1f;下面我们就开始讲解结构体的相关知识点吧&#xff01; 什么是结构体呢&#xff1f;或者说结构体有什么作用呢&#xff1f;对于复杂对象来说&#xff…

盘点2024年4款打工人都在用的PDF软件。

PDF 软件在现代的办公或者是学习当中的应用非常广泛&#xff0c;已经成了很多人的必备工具。因为PDF 文件具有跨设备、跨系统的优势&#xff0c;所以在很多设备上都可以打开浏览。如果有了PDF 编辑软件&#xff0c;查看&#xff0c;编辑&#xff0c;分享也会变得更加方便简单&a…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据&#xff0c;数据类型转换不会改变原数据&#xff0c;是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

DAMA数据管理知识体系(第9章 文件和内容管理)

课本内容 9.1 引言 概要 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理[1]。它的重点在于保持文件和其他非结构化或半结构化信息的完整性&#xff0c;并使这些信息能够被访问。业务驱动因素 法规遵从性要求 法律法规要求组织保…

每日OJ题_牛客_平方数_数学_C++_Java

目录 牛客_平方数_数学 题目解析 C代码1暴力 C代码2数学 Java代码数学 牛客_平方数_数学 平方数 (nowcoder.com) 描述&#xff1a; 牛妹是一个喜欢完全平方数的女孩子。 牛妹每次看到一个数 x&#xff0c;都想求出离 x 最近的完全平方数 y。 每次手算太麻烦&#xff0c;…

LeetCode讲解篇之322. 零钱兑换

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们可以使用动态规划解决这道题&#xff0c;我们首先定义一个数组&#xff0c;数组中第i个元素表示组成金额 i 的最少硬币个数 我们遍历数组的1 ~ amount号位置&#xff0c;对coins进行遍历&#xff0c;查找选…

Chromium 搜索引擎功能浅析c++

地址栏输入&#xff1a;chrome://settings/searchEngines 可以看到 有百度等数据源&#xff0c;那么如何调整其顺序呢&#xff0c;此数据又存储在哪里呢&#xff1f; 1、浏览器初始化搜索引擎数据来源在 components\search_engines\prepopulated_engines.json // Copyright …

【C语言刷力扣】1678.设计Goal解析器

题目&#xff1a; 解题思路&#xff1a; 遍历分析每一个字符&#xff0c;对不同情况分别讨论。 若是字符 G &#xff0c;则 res 中添加字符 G若是字符 &#xff08; &#xff0c;则再分别讨论。 若下一个字符是 &#xff09;&#xff0c; 则在 res 末尾添加字符 o若下一个字符…

【CSS in Depth 2 精译_045】7.1 CSS 响应式设计中的移动端优先设计原则(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

分布式锁--redission 最佳实践!

我们知道如果我们的项目服务不只是一个实例的时候&#xff0c;单体锁就不再适用&#xff0c;而我们自己去用redis实现分布式锁的话&#xff0c;会有比如锁误删、超时释放、锁的重入、失败重试、Redis主从一致性等等一系列的问题需要自己解决。 当然&#xff0c;上述问题并非无…

刷题 二叉树

二叉树的核心思想 - 递归 - 将问题分解为子问题 题型 递归遍历迭代遍历层序遍历 bfs&#xff1a;队列各种递归题目&#xff1a;将问题分解为子问题二叉搜索树 - 中序遍历是递增序列 TreeNode* &prev 指针树形dp 面试经典 150 题 - 二叉树 104. 二叉树的最大深度 广度优…