10.9.1-Dataway+Echarts动态图表方案

news2024/11/27 22:24:36

文章目录

  • 1. 技术选型
  • 2. 实现方案
    • 2.1. 方案介绍
    • 2.2. 方案实现(demo)
      • 2.2.1. 使用echarts绘制html静态页
        • 2.2.1.1. 选择合适的图表
        • 2.2.1.2. 下载html demo
      • 2.2.2. 使用Dataway准备数据接口
        • 2.2.2.1. 部署dataway
        • 2.2.2.2. 创建数据接口
      • 2.2.3. 调试html demo + dataway接口
      • 2.2.4. 发布html到nginx
        • 2.2.4.1. 将完整url,放入到系统菜单上(配置菜单),使其可访问
  • 3. 后期工作

整体 目标:

无代码或低代码,可以实现数据的图形化显示。

1. 技术选型

  • 图表:Apache ECharts。样例官网:https://echarts.apache.org/examples/zh/index.html
  • 后端接口数据:Hasor Dataway。官网:https://www.dataql.net/docs/dataway/overview

2. 实现方案

2.1. 方案介绍

**流程整合方案:**Dataway数据接口 + ECharts绘制Html = 动态图表

  • 工作流图:

  • 数据流图:

2.2. 方案实现(demo)

我们以一个日历图为例,来看一个动态图表实现的全过程。

  • 目标:在日历图上,显示有数据推送的日期,并根据推送的数据量多少,对日期色块以深浅进行区分。

  • 效果:

2.2.1. 使用echarts绘制html静态页

根据需求,从Apache ECharts样例官网:https://echarts.apache.org/examples/zh/index.html,筛选符合需求的图表。

2.2.1.1. 选择合适的图表

日历坐标系可以满足。

2.2.1.2. 下载html demo

下载样例,下载到的是一个完整可运行的html demo

<!--
	此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=calendar-simple
-->
<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%">
<head>
  <meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
  <div id="container" style="height: 100%"></div>

  
  <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.1/dist/echarts.min.js"></script>

  <script type="text/javascript">
    var dom = document.getElementById('container');
    var myChart = echarts.init(dom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app = {};
    
    var option;

    function getVirtualData(year) {
  const date = +echarts.time.parse(year + '-01-01');
  const end = +echarts.time.parse(year + '-12-31');
  const dayTime = 3600 * 24 * 1000;
  const data = [];
  for (let time = date; time <= end; time += dayTime) {
    data.push([
      echarts.time.format(time, '{yyyy}-{MM}-{dd}', false),
      Math.floor(Math.random() * 10000)
    ]);
  }
  return data;
}
option = {
  visualMap: {
    show: false,
    min: 0,
    max: 10000
  },
  calendar: {
    range: '2017'
  },
  series: {
    type: 'heatmap',
    coordinateSystem: 'calendar',
    data: getVirtualData('2017')
  }
};

    if (option && typeof option === 'object') {
      myChart.setOption(option);
    }

    window.addEventListener('resize', myChart.resize);
  </script>
</body>
</html>

至此,静态页面有了,我们需要的是一个动态数据接口,选择使用dataway开源项目来实现动态接口的创建。

dataway手册:https://www.dataql.net/docs/dataway/overview

需要的数据格式应该是:

[
  ['2022-11-16',9],
  ['2022-11-17',8],
  ['2022-12-03',66],
  ['2022-12-05',1014],
  ['2022-12-06',2253],
  ['2022-12-07',135]
]

2.2.2. 使用Dataway准备数据接口

2.2.2.1. 部署dataway

只需要在基础的springboot开箱代码基础上加上maven依赖及少量配置,即可run一个dataway服务。

  • dataway依赖表创建

    CREATE TABLE `interface_release` (
      `pub_id` varchar(64) NOT NULL COMMENT 'Publish ID',
      `pub_api_id` varchar(64) NOT NULL COMMENT '所属API ID',
      `pub_method` varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',
      `pub_path` varchar(512) NOT NULL COMMENT '拦截路径',
      `pub_status` varchar(4) NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',
      `pub_comment` varchar(255) NOT NULL COMMENT '注释',
      `pub_type` varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL',
      `pub_script` mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx',
      `pub_script_ori` mediumtext NOT NULL COMMENT '原始查询脚本,仅当类型为SQL时不同',
      `pub_schema` mediumtext NOT NULL COMMENT '接口的请求/响应数据结构',
      `pub_sample` mediumtext NOT NULL COMMENT '请求/响应/请求头样本数据',
      `pub_option` mediumtext NOT NULL COMMENT '扩展配置信息',
      `pub_release_time` varchar(32) NOT NULL COMMENT '发布时间(下线不更新)',
      PRIMARY KEY (`pub_id`),
      KEY `idx_interface_release_api` (`pub_api_id`),
      KEY `idx_interface_release_path` (`pub_path`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='Dataway API 发布历史。';
    
    CREATE TABLE `interface_release` (
      `pub_id` varchar(64) NOT NULL COMMENT 'Publish ID',
      `pub_api_id` varchar(64) NOT NULL COMMENT '所属API ID',
      `pub_method` varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',
      `pub_path` varchar(512) NOT NULL COMMENT '拦截路径',
      `pub_status` varchar(4) NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',
      `pub_comment` varchar(255) NOT NULL COMMENT '注释',
      `pub_type` varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL',
      `pub_script` mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx',
      `pub_script_ori` mediumtext NOT NULL COMMENT '原始查询脚本,仅当类型为SQL时不同',
      `pub_schema` mediumtext NOT NULL COMMENT '接口的请求/响应数据结构',
      `pub_sample` mediumtext NOT NULL COMMENT '请求/响应/请求头样本数据',
      `pub_option` mediumtext NOT NULL COMMENT '扩展配置信息',
      `pub_release_time` varchar(32) NOT NULL COMMENT '发布时间(下线不更新)',
      PRIMARY KEY (`pub_id`),
      KEY `idx_interface_release_api` (`pub_api_id`),
      KEY `idx_interface_release_path` (`pub_path`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='Dataway API 发布历史。';
    
  • dataway springboot项目引入相关依赖

    <!--hasor dataway-->
    <dependency>
        <groupId>net.hasor</groupId>
        <artifactId>hasor-spring</artifactId>
        <version>4.2.2</version>
    </dependency>
    <dependency>
        <groupId>net.hasor</groupId>
        <artifactId>hasor-dataway</artifactId>
        <version>4.2.2</version>
    </dependency>
    
    <!--作为 Spring Boot 项目有着自己完善的数据库方面工具支持。我们这次采用 druid + mysql + spring-boot-starter-jdbc 的方式。-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.30</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.21</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>
    
  • dataway springboot项目配置

    # 解决接口返回中文都是乱码
    server.servlet.encoding.charset=utf-8
    server.servlet.encoding.force=true
    server.servlet.encoding.enabled=true
    
    # 是否启用 Dataway 功能(必选:默认false)
    HASOR_DATAQL_DATAWAY=true
    # 是否开启 Dataway 后台管理界面(必选:默认false)
    HASOR_DATAQL_DATAWAY_ADMIN=true
    # dataway  API工作路径(可选,默认:/api/)
    HASOR_DATAQL_DATAWAY_API_URL=/api/
    # dataway-ui 的工作路径(可选,默认:/interface-ui/)
    HASOR_DATAQL_DATAWAY_UI_URL=/interface-ui/
    # SQL执行器方言设置(可选,建议设置)
    HASOR_DATAQL_FX_PAGE_DIALECT=mysql
    
    # db
    spring.datasource.url=jdbc:mysql://localhost:3306/cdc?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    # druid
    spring.datasource.druid.initial-size=3
    spring.datasource.druid.min-idle=3
    spring.datasource.druid.max-active=10
    spring.datasource.druid.max-wait=60000
    spring.datasource.druid.stat-view-servlet.login-username=admin
    spring.datasource.druid.stat-view-servlet.login-password=admin
    spring.datasource.druid.filter.stat.log-slow-sql=true
    spring.datasource.druid.filter.stat.slow-sql-millis=1
    
  • dataway springboot把数据源设置到 Hasor 容器中

    package com.example.simple;
    
    import net.hasor.core.ApiBinder;
    import net.hasor.core.DimModule;
    import net.hasor.db.JdbcModule;
    import net.hasor.db.Level;
    import net.hasor.spring.SpringModule;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import javax.sql.DataSource;
    
    @DimModule
    @Component
    public class ExampleModule implements SpringModule {
        @Autowired
        private DataSource dataSource = null;
    
        @Override
        public void loadModule(ApiBinder apiBinder) throws Throwable {
            // .DataSource form Spring boot into Hasor
            apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));
        }
    }
    
  • 在 dataway springboot 中启用 Hasor

    package com.example.simple;
    
    import net.hasor.spring.boot.EnableHasor;
    import net.hasor.spring.boot.EnableHasorWeb;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @EnableHasor()
    @EnableHasorWeb()
    @SpringBootApplication
    public class SimpleApplication {
    
        public static void main(String[] args) {
            System.setProperty("file.encoding","UTF-8");
            SpringApplication.run(SimpleApplication.class, args);
        }
    
    }
    
    
  • 至此,即可启动应用

2.2.2.2. 创建数据接口

书接上回,我们需要的数据格式应该是:

[
  ['2022-11-16',9],
  ['2022-11-17',8],
  ['2022-12-03',66],
  ['2022-12-05',1014],
  ['2022-12-06',2253],
  ['2022-12-07',135]
]
  • sql编写

    对此,我们如果通过简单的sql,按天汇总数据量,那sql应该这么写:

    select DATE_FORMAT(add_time,'%Y-%m-%d') as time,sum(received_data_total) as sum 
    from cdc.`cdc_receive_round_log` where add_time > '2022-10-01' and data_platform='zgl' group by DATE_FORMAT(add_time,'%Y-%m-%d') ;
    

    在mysql中执行结果如下:

  • 基于sql,在dataway中创建接口

  • 验证接口是否可访问

    在浏览器访问: http://localhost:8080/api/received_count_per_day2

    可以拿到结果:

    {"success":true,"message":"OK","code":0,"lifeCycleTime":128,"executionTime":32,"value":{"zgl":[{"time":"2022-11-16","sum":9},{"time":"2022-11-17","sum":8},{"time":"2022-12-03","sum":66},{"time":"2022-12-05","sum":1014},{"time":"2022-12-06","sum":2253},{"time":"2022-12-07","sum":135}],"hsh":[{"time":"2022-10-08","sum":582},{"time":"2022-10-11","sum":165},{"time":"2022-10-14","sum":400},{"time":"2022-10-26","sum":200},{"time":"2022-11-03","sum":427},{"time":"2022-11-11","sum":200},{"time":"2022-11-18","sum":1500},{"time":"2022-11-30","sum":700},{"time":"2022-12-01","sum":882746},{"time":"2022-12-02","sum":260753}]}}
    

    上述如图:

but:

dataway接口返回的数据value.zgl内的报文,是一个list中嵌套dict。但是我们echarts需要的数据报文,是list里嵌套list。

我们要怎么将dataway的返参结果调整为echarts所需结构?

方案有二:

其一:通过dataway的dataql语法进行调整

其二:在echarts html中,拿到dataway接口数据报文后,通过js进行调整。

经过思考,毋庸置疑应选方案二,以减少学习成本。(下一节描述此案例如何调整。)

2.2.3. 调试html demo + dataway接口

直接看代码注释:

<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%">

<head>
  <meta charset="utf-8">
</head>

<body style="height: 100%; margin: 0">
  <!-- 图表容器 -->
  <div id="container" style="height: 100%"></div>
  <!-- echarts js -->
  <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.1/dist/echarts.min.js"></script>
  <!-- 由于需要异步加载数据,此处需要引入jquery -->
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>

  <script type="text/javascript">
    // 获取dom,以便使用echarts进行渲染
    var dom = document.getElementById('container');
    var myChart = echarts.init(dom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });

    // 异步加载数据,http://localhost:8080/api/received_count_per_day2 就是我们使用dataway动态创建的接口
    $.get('http://localhost:8080/api/received_count_per_day2').done(function (data) {
      // zgl日历数据处理,将list嵌套dict,改为list嵌套list结构。
      var zgl_origion = data.value.zgl
      var zgl_echarts_data = []
      for (var i = 0; i < zgl_origion.length; i++) {
        var item = []
        item.push(zgl_origion[i]['time'])
        item.push(zgl_origion[i]['sum'])
        zgl_echarts_data.push(item)
      }
      //hsh日历数据处理,将list嵌套dict,改为list嵌套list结构。
      var hsh_origion = data.value.hsh
      var hsh_echarts_data = []
      for (var i = 0; i < hsh_origion.length; i++) {
        var item = []
        item.push(hsh_origion[i]['time'])
        item.push(hsh_origion[i]['sum'])
        hsh_echarts_data.push(item)
      }

      // 渲染图表
      myChart.setOption({
        title: {
          text: '' // 图表的头部文本
        },
        tooltip: {
          // 在划过日期块的时候,显示日期和数据。不写的话,默认只会显示数值,没有日期。
          formatter: function (p) {
            var format = echarts.format.formatTime('yyyy-MM-dd', p.data[0]);
            return format + '数量: ' + p.data[1];
          }
        },
        visualMap: {
          show: false,
          min: 0,
          max: 5000,
          textStyle: { color: '#000' },
          precision: 0,
          inRange: {
            // 在线调色板 https://www.sojson.com/web/panel.html
            // 色块深浅,将从下面的列表中根据数值大小自动选择
            color: ['#D4EFDF', '#82E0AA', '#58D68D', '#27AE60', '#229954', '#196F3D'],
            colorAlpha: 0.9, // 图元的颜色的透明度
          }
        },
        calendar: [{
          range: '2022',
          dayLabel: {
            show: true
          }
        },
        {
          top: 260,
          range: '2022',
          // cellSize: ['auto', 20]
        }
        ],
        series: [{
          type: 'heatmap',
          coordinateSystem: 'calendar',
          data: zgl_echarts_data // zgl数据渲染
        },
        {
          type: 'heatmap',
          coordinateSystem: 'calendar',
          calendarIndex: 1,
          data: hsh_echarts_data  // hsh数据渲染
        }]
      })
    });

    window.addEventListener('resize', myChart.resize);
  </script>
</body>

</html>

然后,直接用浏览器访问此页面,或在vscode中的live server进行访问:

可以看到,dataway是已经允许了跨域访问的,无需再做调整。

2.2.4. 发布html到nginx

2.2.4.1. 将完整url,放入到系统菜单上(配置菜单),使其可访问

这里要做的,是echarts html页面路径跟我们将要嵌入的系统域名保持一致,echarts html页面路径可以放在一个特别标记的位置上,比如 https://hello.com/my_echarts/calender_summary.html, 用诸如/my_echarts来让nginx区分是访问原系统页面或我们编写的echarts html页面即可。

同时,dataway接口已经支持跨域访问,不用调整不提。

3. 后期工作

  • 是否支持类似时间区间筛选之类的表头?

    理论上是支持的,因为echarts的图表,默认是放在一个html元素如div中,只需要进行简单的html编写

  • 图表的空间布局摆放要求?

    同上,记上css定位等html技术,即可实现静态页的调整。

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

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

相关文章

代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

代码随想录算法训练营第七天| 哈希表理论基础 &#xff0c;454.四数相加II&#xff0c; 383. 赎金信&#xff0c; 15. 三数之和&#xff0c; 18. 四数之和 454.四数相加II 建议&#xff1a;本题是 使用map 巧妙解决的问题&#xff0c;好好体会一下 哈希法 如何提高程序执行效…

【洞察人性】 理解行为背后的动机

《洞察人性》 关于作者 阿尔弗雷德•阿德勒&#xff0c;奥地利精神病学家&#xff0c; 人本主义心理学先驱&#xff0c;曾经在美国哥伦比亚大学任客座教授。同时他也是个体心理学的创始人&#xff0c;在学术界拥有重要的地位。著作有《自卑与超越》《人性的研究》 《洞察人性…

DPDK源码分析之rte_eal_init

EAL是什么 环境抽象层(EAL)负责获得对底层资源(如硬件和内存空间)的访问。对于应用程序和其他库来说&#xff0c;使用这个通用接口可以不用关系具体操作系统的环境细节。rte_eal_init初始化例程负责决定如何分配操作系统的这些资源(即内存空间、设备、定时器、控制台等等)。 …

【IVIF:搜索架构】

Searching a Hierarchically Aggregated Fusion Architecture for Fast Multi-Modality Image Fusion &#xff08;搜索用于快速多模态图像融合的分层聚合融合架构&#xff09; 现有的基于CNN的方法使主要点在于设计各种体系结构&#xff0c;以端到端的方式实现这些任务。但是…

JSP ssh美食娱乐分享网站系统myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh美食娱乐分享网站系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采 用B/S模式开发。开发环境为TOMCA…

学习二叉树必须要了解的各种遍历方式及节点统计

哈喽&#xff0c;大家好&#xff0c;我是小林。今天给大家分享一下对二叉树的一些常规操作。 愿我们都能保持一颗向上的心。 目录一、前序遍历二、中序遍历三、后序遍历四、 统计节点个数五、统计叶子节点个数六、第K层的节点个数七、二叉树的深度八、查找值为x的节点九、层序遍…

TensorFlow TFRecords简介

TensorFlow TFRecords简介 这篇博客将介绍TensorFlow的TFRecords&#xff0c;提供有关TFRecords的所有信息的一应俱全的介绍。从如何构建基本TFRecords到用于训练 SRGAN 和 ESRGAN 模型的高级TFRecords的所有内容。包括什么是TFRecords&#xff0c;如何序列化&#xff0c;反序…

SQL 语句练习03

目录 一、建表 二、插入数据 三、查询 一、建表 这里先建好我们下面查询需要的表&#xff0c;方便后续查询。 建立如下学生表(命名格式“姓名拼音_三位学号_week5s”&#xff0c; 如LBJ_023_week5s&#xff09;create table LYL_116_week5s(SNO varchar(4) primary key,SNA…

【Kubernetes】DashBoard部署

kubernetes&#xff0c;是一个全新的基于容器技术的分布式架构领先方案&#xff0c;是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本&#xff0c;于2014年9月发布第一个版本&#xff0c;2015年7月发布第一个正式版本。 kubernetes的本质是一组服务器集群&#xff0…

数字孪生智慧水务建设综述

随着新时期治水方针的逐步落实&#xff0c;水利现代化、智能化建设已全面开启&#xff0c;数字孪生等新技术的成熟&#xff0c;也为智慧水务体系的搭建提供了技术保障&#xff0c;新时代治水新思路正逐步得到落实。本文将重点对智慧水务的内涵及建设内容进行解读&#xff0c;力…

2022年航空与物流行业研究报告

第一章 行业概况 航空与物流行业是指以各种航空飞行器为运输工具&#xff0c;以空中运输的方式运载人员或货物的企业。航空公司是以各种航空飞行器为运输工具为乘客和货物提供民用航空服务的企业。航空公司使用的飞行器可以是他们自己拥有的&#xff0c;也可以是租来的&#x…

物联网通信技术原理-作业汇总(更新ing)

第一章 第二章 第三章 第四章 第五章 1. 移动通信中典型的多址接入方式有哪些&#xff1f;简要说明其工作原理2. 分集技术的基本原理是什么&#xff1f;简要说明空间、频率和时间分集、合并的异同。 1&#xff09;分集技术的基本原理 通过多个信道&#xff08;时间、频率或…

25.访客功能

访客功能 一、需求分析 用户在浏览我的主页时&#xff0c;需要记录访客数据&#xff0c;访客在一天内每个用户只记录一次。 首页展示最新5条访客记录 我的模块&#xff0c;分页展示所有的访客记录 二、数据库表 visitors&#xff08;访客记录表&#xff09; { “_id”: …

尚医通 (三十五) --------- 预约下单

目录一、预约下单前端1. 封装 api 请求2. 页面修改二、后端逻辑1. 需求分析2. 搭建 service-order 模块3. 添加订单基础类4. 封装 Feign 调用获取就诊人接口5. 封装 Feign 调用获取排班下单信息接口6. 实现下单接口7. 预约成功后处理逻辑① rabbit-util 模块封装② 封装短信接口…

C++ Reference: Standard C++ Library reference: Containers: map: map: cend

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/cend/ 公有成员函数 <map> std::map::cend const_iterator cend() const noexcept;返回指向结束的const_iterator 返回一个指向容器结束后元素的const_iterator。 const_iterator是指向const内容的it…

正弦交流电物理量表征

前言 这一讲主要来表征正弦交流电的物理量 文章目录前言一、周期和频率二、最大值、有效值和平均值一、周期和频率 周期&#xff1a;正弦交流电每重复变化1次所需要的时间称为周期&#xff0c;用符号T表示&#xff0c;单位是秒&#xff08;s&#xff09;。 频率&#xff1a;正…

web前端期末大作业 绿色环境保护(4个页面) HTML5网站模板农业展示网站 html5网页制作代码 html5网页设计作业代码 html制作网页案例代码

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

体育馆场地预约管理系统/球馆管理系统

摘 要 随着体育馆规模的不断扩大&#xff0c;人流数量的急剧增加&#xff0c;有关体育馆的各种信息量也在不断成倍增长。面对庞大的信息量&#xff0c;就需要有体育馆场地预约管理系统来提高体育馆工作的效率。通过这样的系统&#xff0c;我们可以做到信息的规范管理和快速查询…

TCP/IP网络原理 【IP篇】

&#x1f389;&#x1f389;&#x1f389;写在前面&#xff1a; 博主主页&#xff1a;&#x1f339;&#x1f339;&#x1f339;戳一戳&#xff0c;欢迎大佬指点&#xff01; 目标梦想&#xff1a;进大厂&#xff0c;立志成为一个牛掰的Java程序猿&#xff0c;虽然现在还是一个…

聚观早报 | 马斯克丢掉世界首富宝座;加密货币FTX创始人被捕

今日要闻&#xff1a;马斯克丢掉世界首富宝座&#xff1b;加密货币FTX创始人被捕&#xff1b;美团推出高峰打车极速版&#xff1b;魔兽制作组正研发新功能&#xff1b;SpaceX出售公司内部股票马斯克丢掉世界首富宝座 12 月 13 日消息&#xff0c;据国外媒体报道&#xff0c;受特…