扇区架次数动态展示

news2024/11/14 18:45:19

打开前端Vue项目:kongguan_web,完成前端src/components/echart/SectorFlightChart.vue页面设计,使用ECharts插件实现柱状图和饼状图

  • 在src/components目录下创建echart目录,完成src/components/echart/SectorFlightChart.vue 的页面div设计:
<template xmlns:el-col="http://www.w3.org/1999/html">
  <div class="home">
    <div id="barFlightChart" class="chart" />
  </div>
</template>
... 接下文 ...
  • 初始化数据,代码如下:
... 接上文 ...
<script>
  import {findATCTime} from "../../api/chartdata/chartdata";

  export default {
    name: "SectorFlightChart",
    data() {
      return {
        sectorData: [],
        barChartData: [],
        barChartAxis: [],
        sectorCharData: [],
        sectorCharOneData: [],
        sectorChartAxis: ['K', 'S', 'E', 'P', 'G'],

        chartOption: {},
        myChart: {},
      }
    },
     mounted() {
      this.initChart();
      this.loadData();
    },
... 接下文 ...
  • 初始化ECharts,代码如下:
... 接上文 ...
    methods: {
      initChart() {
        this.myChart = this.$echarts.init(document.getElementById("barFlightChart"));
        this.chartOption = {
          baseOption: {
            timeline: {
              axisType: 'category',
              // realtime: false,
              // loop: false,
              autoPlay: true,
              // currentIndex: 2,
              playInterval: 1000,
              // controlStyle: {
              //     position: 'left'
              // },
              lineStyle: {color: "#bcc9d7", width: 1},
              controlStyle: {showPlayBtn: !1, showPrevBtn: !1, showNextBtn: !1},
              checkpointStyle: {color: "#f19326", symbol: "circle", symbolSize: 10, borderWidth: 0},
              itemStyle: {normal: {color: "#419ae7"}},
            },
            title: {
              text: "扇区架次数动态循环展示",
              subtext: "",
              top:18,
              left: 26,
              textStyle: {
                color: "#000000"
              },
            },
            tooltip: {
              trigger: "item",
              padding: 10,
              backgroundColor: "#222",
              borderColor: "#777",
              borderWidth: 1,
            },
            angleAxis: {
              type: "category",
              axisTick: {show: !1},
              axisLine: {show: !0, lineStyle: {color: "#d2dde7"}},
              axisLabel: {color: "#d2dde7"},
              data: ["G区", "K区", "E区", "P区", "S区"],
              z: 10
            },
            radiusAxis: {
              min: 0,
              axisLine: {show: !1, lineStyle: {color: "#000", opacity: .3}},
              axisLabel: {show: !1, color: "#000"},
              axisTick: {show: !1},
              splitLine: {lineStyle: {color: "#d2dde7"}},
              splitArea: {show: !1, areaStyle: {color: "rgb(1, 10, 63)", opacity: .8}}
            },
            grid: {left: "10%", right: "50%", top: "10%", bottom: "9%", containLabel: !1},
            polar: {center: ["75%", "45%"], radius: "50%"},
            xAxis: [{
              type: 'value',
              boundaryGap: [0, 0.01],
              splitLine: {
                show: false
              },
              show: false,
              axisLine: {   //横轴样式
                lineStyle: {},
              },
              position:'top'
            }],
            yAxis: [{
              type: 'category',
              data: this.barChartAxis,
              inverse:true,
              axisLine: {   //纵轴样式
                lineStyle: {
                  color: '#73777d'
                }
              },
              axisLabel: {
                rotate: -45
              }
            }],
            series: [{
              type: "bar",
              coordinateSystem: "polar",
              name: "扇区",
              center: ["75%", "45%"],
              stack: "a",
              itemStyle: {
                normal: {
                  color: function (t) {
                    return ["#51b8f9", "#7d92ff", "#5fccc3", "#f19326", "#f258b6"][t.dataIndex]
                  }, label: {show: !0, position: "top", formatter: "{b}\n{c}"}
                }
              }
            }, {
              name: "本日架次数",
              type: "bar",
              barWidth: 8,
              radius: 90,
              avoidLabelOverlap: !1,
              label: {
                normal: {show: !1, position: "outside", formatter: "{c}"},
                emphasis: {show: !0, textStyle: {fontSize: "12", fontWeight: "normal"}}
              },
              labelLine: {normal: {show: !1}},
              itemStyle: {normal: {color: "#51b8f9"}, emphasis: {color: "#f19326"}}
            }]
          }
        }
        this.myChart.setOption(this.chartOption);
      },
... 接下文 ...
  • 加载整理数据,然后拼装ECharts专用的options对象,代码如下:
  //加载数据
      loadData() {
        findATCTime().then(data => {
          if (data.isSuccess) {
            this.formatData(data.result);
          } else {
            this.$message.error("数据获取失败");
          }
        });
      },
      //整理数据
      formatData(data) {
        let timeLineData = [];
        let barDataArr = [];
        let pieDataArr = [];
        let optionArr = [];
        for (let i = 0; i < data.length; i++) {
          let dayItemData = data[i];
          timeLineData.push(i + 1);
          let dayFlightSum = 0;
          let dayFlightDetail = [];
          for (let j = 0; j < dayItemData.length; j++) {
            dayFlightDetail.push(dayItemData[j][this.sectorChartAxis[j]]);
            dayFlightSum = dayFlightSum + parseInt(dayItemData[j][this.sectorChartAxis[j]]);
          }
          pieDataArr.push(dayFlightDetail);
          barDataArr.push(dayFlightSum);
        }
        //拼装 echart专用的options对象
        for (let i = 0; i < timeLineData.length; i++) {
          optionArr.push({
            series: [{data: pieDataArr[i]}, {data: barDataArr}],
            yAxis: [{data: timeLineData, nameTextStyle: {fontSize: 4, align: "center"},axisLabel:{formatter:'第{value}天'}}]
          })
        }
        this.chartOption.baseOption.timeline.data = timeLineData;
        this.chartOption.options = optionArr;
        this.refreshChart();
      }
      refreshChart() {
        this.myChart.setOption(this.chartOption);
      }
    }
  }
</script>
  • 页面样式,代码如下:
<style scoped>
  .home {
    height: 700px;
    overflow: auto;
    background-color: #ffffff;
    border: 1px solid #ebedf2;
    border-radius: 10px;
    box-shadow: 3px 3px 3px 3px #ebedf2;
  }
  .home::-webkit-scrollbar {
    display: none;
  }
  .chart {
    height: 680px;
  }
</style>
  • 加载数据时,会调用src/api/chartdata/chartdata.js中定义的findATCTime方法,向服务端发送GET请求,获取扇区架次数动态统计,chartdata.js的完整代码如下:
import request from '../../utils/request'
const baseUrl = "/api"
/**
 * 扇区架次数动态统计
 */
export function findATCTime() {
  return request({
    url: baseUrl + "/atc/findATCTime",
    method: "GET"
  })
}
/**
 * 获取各个扇区通话饱和度
 */
export function findCallSaturation() {
  return request({
    url: baseUrl + "/callSaturation/findCallSaturation",
    method: "GET"
  })
}
export function annualWarningStatisticsByCategory() {
  return request({
    url: baseUrl + "/warnFlightHistory/annualWarningStatisticsByCategory",
    method: "GET"
  })
}
export function getAirPortCount() {
  return request({
    url: baseUrl + "/company/getAirPortCount",
    method: "GET"
  })
}
/**
 * 获取从青岛起飞航班数前十的航线
 * @returns {AxiosPromise}
 */
export function findByLimit() {
  return request({
    url: baseUrl + "/airLine/findByLimit",
    method: "GET"
  })
}

2、后端的实现,打开后端项目:BigData-KongGuan

  • 编写实体类com/qrsoft/entity/Atc.java(前面任务时,已经创建过)
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("atc_number")
public class Atc implements Serializable {
	@TableId(value = "id",type = IdType.AUTO)
	private Integer id;

	@TableField(value = "ACID")
	private String acId;

	@TableField(value = "ATC_TIME")
	private String atcTime;

	@TableField(value = "EXECUTE_DATE")
	private String executeDate;

	@TableField(value = "PLAN_SECTOR_NAME")
	private String planSectorName;

	@TableField(exist = false)
	private String count;
}
  • 编写数据访问类com/qrsoft/mapper/AtcMapper.java,添加findATCTime()方法和findATCTime2()方法,AtcMapper类的完整代码如下:
import com.qrsoft.entity.Atc;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface AtcMapper extends BaseMapper<Atc> {
    @Select("select PLAN_SECTOR_NAME,COUNT(*) as count from atc_number GROUP BY PLAN_SECTOR_NAME;")
    List<Atc> findSectorSortie();

    @Select("select EXECUTE_DATE from atc_number group by EXECUTE_DATE order by EXECUTE_DATE desc limit 19;")
    List<String> findATCTime();

    @Select("select PLAN_SECTOR_NAME,count(*) as count from atc_number where EXECUTE_DATE = #{executeTime} and PLAN_SECTOR_NAME = #{sectorName}")
    Atc findATCTime2(String executeTime,String sectorName);
}
  • 编写Service类com/qrsoft/service/AtcService.java,添加findATCTime()方法,AtcService类的完整代码如下:
package com.qrsoft.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qrsoft.common.Result;
import com.qrsoft.common.ResultConstants;
import com.qrsoft.entity.Atc;
import com.qrsoft.entity.MultiRadar;
import com.qrsoft.mapper.AtcMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Service
public class AtcService extends ServiceImpl<AtcMapper, Atc> {
    @Autowired
    private MultiRadarService multiRadarService;

    /**
     * 查询所有扇区航班架次
     */
    public Result findSectorSortie() {
        List<Atc> sectorSortie = baseMapper.findSectorSortie();
        return new Result(ResultConstants.SUCCESS, ResultConstants.C_SUCCESS, sectorSortie);
    }

    /**
     * 根据扇区号查询架次
     * @param planSectorName
     */
    public Result findLocusCount(String planSectorName) {
        QueryWrapper<MultiRadar> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("section",planSectorName);
        int count = multiRadarService.count(queryWrapper);
        return new Result(ResultConstants.SUCCESS, ResultConstants.C_SUCCESS, count);
    }

    /**
     * 扇区架次数动态统计(饼状图)
     */
    public Result findATCTime() {
        List<String> sectorName = new ArrayList<>();
        sectorName.add("K");
        sectorName.add("S");
        sectorName.add("E");
        sectorName.add("P");
        sectorName.add("G");
        List<String> executeTime = baseMapper.findATCTime();

        List list = new ArrayList();
        for (int i = 0; executeTime.size() > i; i++) {
            ArrayList<Object> objects = new ArrayList<>();
            for (int j = 0; sectorName.size() > j; j++) {
                Atc atcTime2 = baseMapper.findATCTime2(executeTime.get(i), sectorName.get(j));
                HashMap<String, Object> map = new HashMap<>();
                if (atcTime2.getPlanSectorName() != null) {
                    map.put(atcTime2.getPlanSectorName(), atcTime2.getCount());
                }else {
                    map.put(sectorName.get(j),0);
                }
                objects.add(map);
            }
            list.add(objects);
        }
        return new Result(ResultConstants.SUCCESS, ResultConstants.C_SUCCESS, list);
    }
}
  • 编写扇区操作的控制器类com/qrsoft/controller/AtcController.java,添加findATCTime()方法,AtcController类的完整代码如下:
package com.qrsoft.controller;

import com.qrsoft.common.Result;
import com.qrsoft.service.AtcService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "扇区操作类")
@RestController
@RequestMapping("/api/atc")
public class AtcController {
    @Autowired
    private AtcService service;
    /**
     * 获取各扇区航班数
     */
    @ApiOperation(value = "获取各扇区航班数")
    @GetMapping("/findSectorSortie")
    public Result findSectorSortie(){
        return service.findSectorSortie();
    }

    /**
     * 根据扇区名称获取该扇区航班数
     * @param planSectorName
     */
    @ApiOperation(value = "根据扇区名称获取该扇区航班数")
    @GetMapping("/findLocusCount")
    public Result findLocusCount(@RequestParam String planSectorName){
        return service.findLocusCount(planSectorName);
    }

    /**
     * 扇区架次数动态统计(饼状图)
     */
    @ApiOperation(value = "扇区架次数动态统计(饼状图)")
    @GetMapping("/findATCTime")
    public Result findATCTime(){
        return service.findATCTime();
    }
}

3、实现前端的报表展示

  • 回顾前面已经完成的src/components/echart/SectorFlightChart.vue页面,在页面中绑定数据的核心代码为:
  //加载数据
      loadData() {
        findATCTime().then(data => {
          if (data.isSuccess) {
            this.formatData(data.result);
          } else {
            this.$message.error("数据获取失败");
          }
        });
      },
      //整理数据
      formatData(data) {
        let timeLineData = [];
        let barDataArr = [];
        let pieDataArr = [];
        let optionArr = [];
        for (let i = 0; i < data.length; i++) {
          let dayItemData = data[i];
          timeLineData.push(i + 1);
          let dayFlightSum = 0;
          let dayFlightDetail = [];
          for (let j = 0; j < dayItemData.length; j++) {
            dayFlightDetail.push(dayItemData[j][this.sectorChartAxis[j]]);
            dayFlightSum = dayFlightSum + parseInt(dayItemData[j][this.sectorChartAxis[j]]);
          }
          pieDataArr.push(dayFlightDetail);
          barDataArr.push(dayFlightSum);
        }

        //拼装 echart专用的options对象
        for (let i = 0; i < timeLineData.length; i++) {
          optionArr.push({
            series: [{data: pieDataArr[i]}, {data: barDataArr}],
            yAxis: [{data: timeLineData, nameTextStyle: {fontSize: 4, align: "center"},axisLabel:{formatter:'第{value}天'}}]
          })
        }

        this.chartOption.baseOption.timeline.data = timeLineData;
        this.chartOption.options = optionArr;
        this.refreshChart();
      }
,
      //重新绑定数据
      refreshChart() {
        this.myChart.setOption(this.chartOption);
      }
  • 在src/views/Home/Index.vue引入SectorFlightChart组件,代码如下:
... 略 ...

  import AirLine from "../../components/AirLine";
  import Section from "../../components/Section";
  import Delay from "../../components/Delay";
  import WarnStatistice from "../../components/WarnStatistice";
  import SectorFlightChart from "../../components/echart/SectorFlightChart";

  import {hasPermission} from "../../utils/permission";

  export default {
    data() {
      return {
      };
    },
    mounted() {
    },
    components: {AirLine,Section,Delay,WarnStatistice,SectorFlightChart},
    methods: {
      isShow(permission){
        return hasPermission(permission);   
      }
    }

... 略 ...
  • 在src/views/Home/Index.vue添加“扇区架次动态展示”组件,代码如下:
<el-row :gutter="30" v-show="isShow('/section/detail')">
    <el-col :span="16" align="center">
      <SectorFlightChart/>
    </el-col>

    // ... 略 ...
</el-row>

注意:在上面代码中【 v-show="isShow('/section/detail')" 】属性的作用是判断当前登录的用户是否有权限显示当前内容,如果当前登录的用户没有权限,则不会显示当前内容,新用户的权限需要到MySQL数据库中进行设置。

这里有两种方式,可以显示当前内容:

1)去掉【 v-show="isShow('/section/detail')" 】属性,即不判断是否有权限显示。

2)需要使用有权限的用户登录才能显示,或到数据库中分配权限。

参照任务“动态航线图”进行设置。

例如我们前面使用的用户admin,该用户没有权限显示,所以使用admin用户登录系统时是不会显示当前内容的,如果要进行权限设置,可以进入MySQL安装节点(node3节点),然后进入数据库,为admin用户授权。

[root@node3 ~]# mysql -uroot -p123456
mysql> use kongguan;

先查看角色表中,“管理员”的ID:

修改sys_auth表,添加一个【/section/detail】权限:

mysql> insert into sys_auth(auth_name,auth_code,menu_url) values('show detail','/section/detail','/section/detail');

修改role_auth表,将权限授权给“管理员”角色:

mysql>insert into role_auth(role_id,auth_id) values(3,198);

  • src/views/Home/Index.vue的完整代码如下:
<template>
  <div class="index">
   <el-row :gutter="30" v-show="isShow('/flight/airline')">
      <el-col :span=24 align="center">
        <AirLine/>
      </el-col>
    </el-row> 
    <el-row :gutter="30"  v-show="isShow('/flight/section')">
      <el-col :span="24" align="center">
        <Section/>
      </el-col>
    </el-row>
    <el-row :gutter="30" v-show="isShow('/flight/delay')">
      <el-col :span="16" align="center">
        <Delay/>
      </el-col>
      <el-col :span="8" align="center">
        <year-warning-chart/>
      </el-col>
    </el-row>
    <el-row :gutter="30" v-show="isShow('/section/warning')">
      <el-col :span="12" align="center">
        <air-port-count-chart/>
      </el-col>
      <el-col :span="12" align="center">
        <WarnStatistice/>
      </el-col>
    </el-row>
    <el-row :gutter="30" v-show="isShow('/section/detail')">
      <el-col :span="16" align="center">
        <SectorFlightChart/>
      </el-col>
      <el-col :span="8" align="center">
        <sector-call-chart/>
      </el-col>
    </el-row>
  </div>
</template>

<script>
  import AirLine from "../../components/AirLine";
  import Section from "../../components/Section";
  import WarnStatistice from "../../components/WarnStatistice";
  import Delay from "../../components/Delay";

  import {hasPermission} from "../../utils/permission";

  import SectorFlightChart from "../../components/echart/SectorFlightChart";

  export default {
    data() {
      return {
      };
    },

    mounted() {
    },
    components: {AirLine, Section, WarnStatistice, Delay,SectorFlightChart},
    methods: {
      isShow(permission){
        return hasPermission(permission);
      }
    }
  };
</script>

<style scoped>
  .index {
    height: 100%;
    overflow: auto;
    padding-left: 44px;
    padding-right: 44px
  }
  .index::-webkit-scrollbar {
    display: none;
  }
  .caseClass {
    background: url('../../assets/images/index-bg.png') no-repeat;
    background-size: cover;
    margin-top: 20px;
    height: 284px;
  }
  .el-button {
    background: transparent;
  }
</style>
  • 确保Hadoop、Spark、Kafka、Redis、MySQL等服务均已经正常启动,如果没有正常启动,请参照前面的安装部署任务,完成这些服务的启动。

例如:查看MySQL是否正常启动。

  • 启动后端项目 BigData-KongGuan

  • 启动前端项目 kongguan_web

  • 报表的最终展示效果如下图所示:

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

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

相关文章

【重温设计模式】观察者模式及其Java示例

观察者模式的概念和原理 在编程世界中&#xff0c;设计模式作为一种解决问题的策略&#xff0c;它的存在就如同人类语言中的成语&#xff0c;是一种经过时间考验的有效解决方案。 观察者模式就是其中一种重要的设计模式&#xff0c;它在很多场景中都有着广泛的应用。那么&…

自然语言处理: 第十七章RAG的评估技术RAGAS

论文地址&#xff1a;[2309.15217] RAGAS: Automated Evaluation of Retrieval Augmented Generation (arxiv.org) 项目地址: explodinggradients/ragas: Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines (github.com) 上一篇文章主要介绍了R…

【论文阅读笔记】Split frequency attention network for single image deraining

1.论文介绍 Split frequency attention network for single image deraining 用于单幅图像去噪的分频注意力网络 Paper Code 2023年 SIVP 2.摘要 雨纹对图像质量的影响极大&#xff0c;基于数据驱动的单图像去噪方法不断发展并取得了巨大的成功。然而&#xff0c;传统的卷积…

7大结构型设计模式

结构性设计模式是软件工程中常用的一类设计模式。 作用&#xff1a;主要用于处理类或对象之间的组合以实现更灵活、可扩展和可维护的代码结构。 这些模式通常涉及到类和对象之间的静态组合关系&#xff0c;以及如何将它们组织在一起以满足特定的设计目标。 结构型模式有&#x…

git设置别名及查看别名

设置别名 git config --global alias.lg "具体的参数"git config --global alias.lg "log --dateformat:%Y/%m/%d %H:%M:%S --prettyformat:%C(yellow)%h%C(reset) %C(bold blue)%ad%C(reset) %an %C(green)%s%C(reset)"查看别名 git config --list | fi…

新能源汽车小三电系统

小三电系统 新能源电动汽车的"小三电"系统&#xff0c;一般指车载充电机(OBC)、车载 DC/DC 变换器&#xff0c;和高压直流配电盒(PDU)。一辆纯电动汽车一般配备一台OBC 和一台车载 DC/DC 变换器。OBC将外部输入的交流电转化为直流电输出给电池&#xff0c;DC/DC衔接…

数据可视化实战(二)

将每个城市在每个月份平均PM2.5绘制成折线图 import pandas as pd import matplotlib.pyplot as plt df pd.read_excel(./PM2.5.xlsx)display(df.head(10)) df.shape # (161630, 15)城市年份月份日期小时季节PM2.5露点湿度压强温度风向累计风速降水量累计降水量0北京2010112…

总结mac下解决matplotlib中文显示问题的几种方法

一、前言&#xff1a; 使⽤matplotlib画图时&#xff0c;由于matplotlib默认没有中⽂&#xff0c;显⽰中文时会出现空⽩⼩⽅块。 二、方法&#xff1a; 2.1 matplotlib中使用SimHei字体 1&#xff09;进入终端后查看matplotlib的字体路径&#xff1a; $ python >>&g…

机器学习-04-分类算法-04-支持向量机SVM

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与SVM算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

Qt5.14.2 深入理解Qt多线程编程,掌握线程池架构实现高效并发

在高并发的软件系统中&#xff0c;多线程编程是解决性能瓶颈和提高系统吞吐量的有效手段。作为跨平台的应用程序开发框架&#xff0c;Qt为我们提供了强大的多线程支持。本文将深入探讨Qt多线程编程的实现细节&#xff0c;并介绍线程池的设计思想&#xff0c;帮助读者彻底掌握Qt…

Pytorch常用的函数(七)空洞卷积详解

Pytorch常用的函数(七)空洞卷积详解 1 初识空洞卷积 1.1 空洞卷积与语义分割任务 语义分割面临的困境&#xff1a; 与检测模型类似&#xff0c;语义分割模型也是建立是分类模型基础上的&#xff0c;即利用CNN网络来提取特征进行分类。在CNN分类模型中&#xff0c;一般情况下…

鸿蒙开发 一 (一)、框架了解

一、UI框架 开发范式名称 语言生态 UI更新方式 适用场景 适用人群 声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员 类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端…

2025张宇考研数学基础36讲,视频百度网盘+PDF

一、张宇老师全年高数体系&#xff08;听课用书指南&#xff09; 25张宇全程&#xff1a; docs.qq.com/doc/DTmtOa0Fzc0V3WElI 复制粘贴在浏览器上打开&#xff0c;就可以看到2025张宇的全部的啦&#xff01; 一般来说我们把考研数学划分为3-4个阶段&#xff0c;分别是基础阶…

详解基于快速排序算法的qsort的模拟实现

目录 1. 快速排序 1.1 快速排序理论分析 1.2 快速排序的模拟实现 2. qsort的模拟实现 2.1 qsort的理论分析 2.2 qsort的模拟实现 qsort函数是基于快速排序思想设计的可以针对任意数据类型的c语言函数。要对qsort进行模拟实现&#xff0c;首先就要理解快速排序。 1. 快…

【物联网应用】基于云计算的智能化温室种植一体化平台

目录 第一章 作品概述 1.1. 作品名称 1.2. 应用领域 1.3.主要功能 1.4.创新性说明 第二章 需求分析 2.1 现实背景 2.2 用户群体及系统功能 2.3 竞品分析 第三章 技术方案 3.1. 硬件组成与来源 3.2. 硬件设计合理性 3.3. 硬件系统设计图 3.4. 接口的通用性与可扩展性 3.5. 代码规…

【已解决】在pycharm终端无法激活conda环境,但在cmd命令行中可以

一、问题描述 在windows下winr启动cmd命令行&#xff0c;可以成功运行conda命令并且激活环境在pycharm中打开Terminal终端&#xff0c;发现无法运行conda和pip命令&#xff0c;报错环境无法激活 无法在管道中间运行文档: D:\software\Anaconda3\condabin\conda.bat。 所在位置…

uniapp+vue3+setup语法糖开发微信小程序时不能定义globalData的解决方法

在使用 uniapp 开发小程序的时候&#xff0c; 发现使用了setup 语法糖 &#xff0c;定义 globalData 时&#xff0c;要不是定义不了&#xff0c; 要不就是使用 getApp()取不到&#xff0c;后来想到一个不伦不类的方法解决了&#xff0c; 这个方法有点难看&#xff0c; 但是解决…

云手机的数据安全有保障吗?

随着移动互联网的迅速发展&#xff0c;云手机作为一种新兴的移动终端技术&#xff0c;正在逐渐受到人们的关注和应用。然而&#xff0c;对于云手机而言&#xff0c;数据安全问题一直是人们关注的焦点之一。本文将探讨云手机的数据安全性&#xff0c;并分析其是否具备足够的保障…

每周编辑精选|微软开源 Orca-Math 高质量数学数据集、清华大学研究团队发布条件去噪扩散模型 SPDiff...

Orca-Math 是微软研究院发布的数学推理模型&#xff0c;该模型展示了较小的专业模型在特定领域的价值&#xff0c;它们可以匹配甚至超越更大模型的性能。微软近期开源了用于训练 Orca-Math 的 Orca-Math-200K 数学单词问题数据集&#xff0c;现已在 hyper.ai 官网提供下载&…

记录对NSIS的一些微调 实现Electron安装包美化

利洽科技-nsNiuniuSkinUI - NSIS 实现了electron 的安装包美化&#xff0c;免费&#xff0c;便捷。 下面我整理了一些关于它的微调&#xff0c;使其安装卸载更加简单快捷。 1. 默认展示安装路径部分 &#xff08;1&#xff09;将moreconfiginfo标签visible 设置为 true&#…