axios实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台

news2024/12/26 10:58:30

文章目录

  • 📋前言
  • 🎯demo 介绍
  • 🎯后端与接口的调试
    • 🧩关于运行后端项目
    • 🧩关于接口的调试
  • 🎯功能分析
    • 🧩数据的展示与分页功能
    • 🧩添加功能
    • 🧩编辑功能
    • 🧩删除功能
  • 🎯完整代码
  • 📝最后


在这里插入图片描述

📋前言

书接上回,上一篇文章介绍了一个基于 Vue3ElementPlus 的联系人列表管理后台小 demo (Vue3 + ElementPlus实战学习——模拟简单的联系人列表管理后台),在有了上一篇文章的基础上,我们试着用 axios 来获取数据,而不是用写死的数据,然后用 Node.js + Vue3 + ElementPlus 来实现联系人列表管理后台的 demo 。功能包括功能包括了数据的展示、添加功能、编辑功能、删除功能以及列表分页功能。


🎯demo 介绍

通过上一篇文章的铺垫,我们可以继续使用那套布局,因此使用到的 ElementPlus 组件也是基本上一样的。功能包括了数据的展示、编辑功能、删除功能以及列表分页功能,在这基础上,新添加了一个添加联系人的功能。

关于后台数据方面,不同于上一篇文章,这里使用到 Node.js 模拟后端接口环境。因此需要用到 axios 来获取数据,然后展示出来。

接下来我们来分析每个功能具体如何实现,以及核心代码,首先我们可以看到一些效果图如下。
在这里插入图片描述
添加联系人的模块。
在这里插入图片描述
编辑联系人的弹窗。
在这里插入图片描述
删除联系人的弹窗。
在这里插入图片描述


🎯后端与接口的调试

🧩关于运行后端项目

在搭建项目之前,我们要先把 Node 后端的数据和接口处理好,首先把后端接口跑起来,然后再进行接口的测试。

这里有两种方法运行后端接口,第一种是通过 cmd 来运行,第二种是直接在 vscode 上面跑。这里我认为在 vscode 上面跑比较方便,有功能的上的需求可以直接修改,同时也可以手动修改 JSON 数据。接下来我们来用这两种方法来运行一下。

首先看一下 Node 后端项目的目录结构,我们可以看到这个后端的 api ,包含非常经典的增删查改功能,同时也是本次项目使用到的接口名称。然后 index.js 是这个后端项目的入口文件,运行只需要把 index.js 跑起来即可,通过 node index 来运行后端接口程序。
在这里插入图片描述
我们先用 cmd 来跑一次,在该项目文件的目录栏输入 cmd ,打开 cmd 窗口,然后输入 node index ,回车运行。如果出现 http://127.0.0.1:9999/api/select 地址,就代表后端接口运行起来了。
在这里插入图片描述
在这里插入图片描述
然后我们再试试看用 vscode 来跑,打开终端(快捷键:Ctrl + ~ ),输入 node index ,回车运行。如果出现 http://127.0.0.1:9999/api/select 地址,就代表后端接口运行起来了。
在这里插入图片描述

🧩关于接口的调试

后端接口运行成功后,出现的 http://127.0.0.1:9999/api/select 这个地址,我们可以通过浏览器或相关软件(这里用到的是 postman)来测试一下这个接口。(图一为浏览器测试、图二为 postman 测试)
在这里插入图片描述
在这里插入图片描述
我们可以看到返回的是一个 JSON 格式数据,每请求一次这个地址,我们都可以看到终端出现查询结果的提示,这里我们请求了两次。
在这里插入图片描述
最后要注意,在开始写前端后台的代码时,要保持后端接口的运行,如果关闭了这个终端或者 Ctrl + c 了,这个后端接口服务会终止,导致数据获取不到。然后接下来我们来具体看看如何实现这个后台项目。


🎯功能分析

在分析具体功能之前,我们先看看这个后台的布局和设计。首先数据展示跟上一篇文章的基本上一模一样,都是实现分页功能,每页展示五条数据,操作包括了编辑和删除功能,不同的是多了个添加联系人的按钮功能,因此还新增一个添加联系人的窗口。

然后我们分析一下这个后台要用到的 Element 组件,比如有 el-rowel-buttonel-formel-cardel-dialogel-tableel-pagination 等等。

这个后台的 template 部分结构很简单,只包括了数据列表和弹窗,通过 el-cardel-tableel-button 实现数据列表,el-dialogel-formel-button 实现弹窗的部分。
在这里插入图片描述
介绍完基本的布局和设计思路,我们来看看具体的功能有哪些,又是怎么样实现的。

🧩数据的展示与分页功能

上面我们也把后端接口服务跑起来了,同时也测试了接口的数据。接下来我们先通过 axios 来异步获取数据,我们可以通过下图的代码来获取数据。
在这里插入图片描述
通过 console.log(contactList.list); 我们可以在控制台看到成功获取到了数据。
在这里插入图片描述
接下来我们用相关的组件布局好初始的页面,如下图(无数据时)。
在这里插入图片描述
从上到下首先是标题,然后是添加联系人的按钮,这里用到了两个 el-row 来区分这两个模块。
在这里插入图片描述然后是数据列表的部分,列表包括了 id 、姓名、电话以及相关操作,操作包括了编辑功能和删除功能的按钮。
在这里插入图片描述
在这里插入图片描述
如上图代码截图所示,这里使用到了 el-cardel-table 等相关组件来完成布局。然后是数据列表的分页,这里用到的是 el-pagination 实现分页的功能,五条数据为一页。
在这里插入图片描述
其中 table 中的 data 是 pageData ,我们对其的 id 进行了处理,为了保证其 id 是按照递增的顺序展示出来,而不是每一页都是 1-5 的排序。其中还有一个特点就是,通过后端接口插入的数据显示的 id 是时间戳,因为我们不一定知道最后插入的那条数据的 id 是多少,也没必要去特地看一眼,然后才接着插入数据。因此我们默认插入的 id 是时间戳,然后再对 id 进行处理。

🧩添加功能

相比上一篇文章的 demo 功能,这个项目多了一个添加联系人的功能,我们通过后端写好的 insert 接口来实现添加,我们只需要在使用 axios 获取数据的时候,使用到这个接口,以及传递对应的数据给后端即可实现添加功能,接下来我们看看 Node 代码。
在这里插入图片描述
其中红框的部分是一些对添加的数据的判断逻辑,然后就是把新传递的参数写入 JSON 格式数据,最后返回结果信息。接下来我们通过 post 请求以及写好的添加联系人模块来添加一条数据。
在这里插入图片描述
在添加联系人窗口输入数据,然后点击确认添加。
在这里插入图片描述
然后我们可以在终端看到添加成功的反馈,以及 JSON 数据中出现了刚刚新添加的数据。
在这里插入图片描述
然后在后台的联系人列表也可以看到。
在这里插入图片描述
通过上面的一系列操作,我们实现了添加联系人的功能,其中添加联系人的窗口这里没用使用弹窗的形式,而是使用卡片嵌套表单的形式。为了使添加联系人成功后会自动刷新列表,方便数据的显示,这里我们要把通过 axios 异步获取数据的方法封装到一个函数,然后挂载到 onMounted 函数,这样就方便在任意地方调用了。

🧩编辑功能

这下来我们来看看编辑功能,通过点击编辑按钮,然后出现弹窗,对数据进行修改和保持,这里使用到了 el-dialogElMessage 实现窗口的出现、隐藏以及一些交互效果(消息框)。
在这里插入图片描述
关于编辑功能,我们通过后端写好的 update 接口来实现编辑功能,我们只需要在使用 axios 获取数据的时候,使用到这个接口,以及传递对应的数据给后端即可实现编辑功能,接下来我们看看 Node 代码。
在这里插入图片描述
其中红框的部分是一些对编辑的数据的判断逻辑,然后就是把新传递的参数重新修改代替原本的数据,然后写入 JSON 格式数据,最后返回结果信息。接下来我们通过 post 请求以及写好的编辑模块来编辑刚刚新添加的那一条数据。
在这里插入图片描述
找到刚刚新添加的那条数据,然后点击编辑按钮,把姓名测试添加改成测试编辑
在这里插入图片描述
在这里插入图片描述
然后我们可以在终端看到 id:xxx 编辑成功的反馈,以及 JSON 数据中更新了刚刚编辑的数据。
在这里插入图片描述
通过上面的一系列操作,我们实现了编辑功能,这里的编辑功能模块就是用了弹窗的形式,不同于添加联系人功能模块。

🧩删除功能

最后我们来看看删除功能,通过点击删除按钮,然后出现是否确认删除的弹窗,这里使用到了 ElMessageBox 实现弹窗的出现以及确认、取消的交互效果。

关于删除功能,我们通过后端写好的 delete 接口来实现删除功能,我们只需要在使用 axios 获取数据的时候,使用到这个接口,以及传递联系人的 id 给后端即可实现删除功能,接下来我们看看 Node 代码和 js 代码。
在这里插入图片描述
在这里插入图片描述

然后找到刚刚编辑的那条数据,然后点击删除按钮,删除这条数据。
在这里插入图片描述
然后我们可以在终端看到 id:xxx 删除功的反馈,以及 JSON 数据中删除这条数据。
在这里插入图片描述
通过上面的一系列操作,我们实现了删除功能。至此这个后台的功能已经基本全部实现了,上述的功能分析以及代码分析的完整内容还需要到具体的源码中去编写、浏览了才能体验的到了,最后附上完整代码,供大家参考和学习


🎯完整代码

<template>
  <div class="contact-list">
    <!-- 标题 -->
    <el-row justify="center">
      <h1 style="text-align: center">Node.js 联系人列表管理后台</h1>
    </el-row>
    <!-- 添加联系人按钮 -->
    <el-row justify="center">
      <el-button type="primary" style="text-align: center" @click="addShowForm">添加联系人</el-button>
    </el-row>
    <br />
    <!-- 添加联系人表单窗口 -->
    <el-card class="add-card" v-if="addFormVisible">
      <el-row justify="center">
        <h1 style="text-align: center">添加</h1>
      </el-row>
      <el-form :model="formData" label-width="60px" style="text-align: center">
        <el-col :sm="{ span: 12, offset: 5 }" :xs="{ span: 24 }">
          <el-form-item label="姓名" prop="name">
            <el-input v-model="formData.name" placeholder="请输入联系人姓名"></el-input>
          </el-form-item>
        </el-col>
        <el-col :sm="{ span: 12, offset: 5 }">
          <el-form-item label="电话" prop="tel">
            <el-input v-model="formData.tel" placeholder="请输入联系人电话"></el-input>
          </el-form-item>
        </el-col>
        <el-col>
          <el-button type="primary" @click="addContact">确认添加</el-button>
          <el-button @click="addFormVisible = false">取 消</el-button>
          <el-button @click="refreshFormData()">清空</el-button>
        </el-col>
      </el-form>
    </el-card>

    <!-- 原编辑联系人表单窗口 -->
    <!-- <el-card class="edit-card" v-if="editFormVisible">
      <el-row justify="center">
        <h1 style="text-align: center">编辑</h1>
      </el-row>
      <el-form :model="row" label-width="60px" style="text-align: center">
        <el-col :sm="{ span: 12, offset: 5 }" :xs="{ span: 24 }">
          <el-form-item label="姓名" prop="name">
            <el-input v-model="row"></el-input>
          </el-form-item>
        </el-col>
        <el-col :sm="{ span: 12, offset: 5 }">
          <el-form-item label="电话" prop="tel">
            <el-input v-model="row"></el-input>
          </el-form-item>
        </el-col>
        <el-col>
          <el-button type="primary" @click="editContact">确认修改</el-button>
          <el-button @click="editFormVisible = false">取 消</el-button>
        </el-col>
      </el-form>
    </el-card> -->

    <!-- 编辑联系人dialog窗口 -->
    <el-dialog title="编辑" v-model="editFormVisible" width="30%">
      <el-form :model="formData">
        <el-form-item label="姓名">
          <el-input v-model="formData.name"></el-input>
        </el-form-item>
        <el-form-item label="电话">
          <el-input v-model="formData.tel"></el-input>
        </el-form-item>
      </el-form>

      <template #footer>
        <el-button @click="editFormVisible = false">取消</el-button>
        <el-button type="primary" @click="editContact()">保存</el-button>
      </template>
    </el-dialog>

    <!-- 联系人数据表格 -->
    <el-card class="list-card">
      <el-table :data="pagedData" empty-text="暂无联系人" stripe>
        <el-table-column prop="virtualId" label="id" width="60" align="center"></el-table-column>
        <el-table-column prop="name" label="姓名" align="center"></el-table-column>
        <el-table-column prop="tel" label="电话" align="center"></el-table-column>
        <el-table-column label="操作" width="150" align="center">
          <template #default="{ row }">
            <el-button size="small" @click="editShowForm(row)">编辑</el-button>
            <el-button type="primary" size="small" @click="delContact(row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-row style="margin-top: 20px">
        <el-col :span="24">
          <el-pagination v-model:current-page="currentPage" :page-size="5" layout="prev, pager, next"
            :total="contactList.list.length" @current-change="handleCurrentChange"></el-pagination>
        </el-col>
      </el-row>
    </el-card>
  </div>
</template>

<script setup>
// import { ElMessage, ElMessageBox } from "element-plus";
import { ref, reactive, onMounted, computed } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import axios from "axios";
// 给json数据定义一个list
const contactList = reactive({
  list: [],
});

// 当前页数
const currentPage = ref(1);

// 当前页数变化时的回调函数
const handleCurrentChange = (val) => {
  currentPage.value = val;
};

// 分页后的数据
// const pagedData = computed(() => {
//   const start = (currentPage.value - 1) * 5;
//   const end = start + 5;
//   return contactList.list.slice(start, end);
// });
const pagedData = computed(() => {
  let start = (currentPage.value - 1) * 5;
  const end = start + 5;
  const res = contactList.list.slice(start, end);
  for (let data of res) {
    data.virtualId = ++start;
  }
  return res;
});

// axios默认数据
const instance = axios.create({
  baseURL: "http://127.0.0.1:9999/api/",
  timeout: 10000,
});

// 在组件挂载完毕后调用 refreshList 函数
onMounted(() => {
  // instance.get("select").then((res) => {
  //   contactList.list = res.data.data.data;
  //   console.log(contactList.list);
  // });
  refreshList();
});
// 封装这个方法,方便在任意地方调用
const refreshList = async () => {
  await instance
    .get("select")
    .then((res) => {
      if (res.data.code === 200) {
        contactList.list = res.data.data.data;
        console.log(contactList.list);
      } else {
        ElMessage({
          message: res.data.message,
          grouping: true,
          type: "error",
        });
      }
    })
    .catch((err) => {
      ElMessage({
        message: err,
        grouping: true,
        type: "error",
      });
    });
};

// 表单的数据
const formData = reactive({
  id: "",
  name: "",
  tel: "",
});

// 清空formData数据
const refreshFormData = () => {
  formData.id = "";
  formData.name = "";
  formData.tel = "";
};

// 添加联系人模块
const addFormVisible = ref(false);
const addShowForm = () => {
  addFormVisible.value = true;
};

const addContact = () => {
  // console.log(formData);
  const params = {
    name: formData.name,
    tel: formData.tel,
  };
  instance
    .post("insert", params)
    .then((res) => {
      if (res.data.code === 200) {
        ElMessage({
          message: "添加成功!",
          grouping: true,
          type: "success",
        });
        refreshList();
        refreshFormData();
      } else {
        ElMessage({
          message: res.data.message,
          grouping: true,
          type: "error",
        });
      }
    })
    .catch((err) => {
      ElMessage({
        message: err,
        grouping: true,
        type: "error",
      });
    });
};

// 编辑联系人模块
const editFormVisible = ref(false);
const editShowForm = (row) => {
  formData.id = row.id;
  formData.name = row.name;
  formData.tel = row.tel;
  editFormVisible.value = true;
};

const editContact = () => {
  const params = {
    id: formData.id,
    name: formData.name,
    tel: formData.tel,
  };
  console.log(params);
  // .then(() => {
  instance
    .post("update", params)
    .then((res) => {
      if (res.data.code === 200) {
        ElMessage({
          message: "编辑成功!",
          grouping: true,
          type: "success",
        });
        editFormVisible.value = false;
        refreshList();
      } else {
        ElMessage({
          message: res.data.message,
          grouping: true,
          type: "error",
        });
      }
    })
    .catch((err) => {
      ElMessage({
        message: err,
        grouping: true,
        type: "error",
      });
    });
  // })
  // .catch(() => {
  //   ElMessage({
  //     type: "info",
  //     message: "已取消编辑!",
  //   });
  // });
};

// 删除联系人模块
const delContact = (row) => {
  console.log(row);
  ElMessageBox.confirm(`确定要删除联系人${row.name}`, "Warning", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      instance
        .delete("delete?id=" + row.id)
        .then((res) => {
          if (res.data.code === 200) {
            ElMessage({
              type: "success",
              message: "删除成功!",
            });
            refreshList();
          } else {
            ElMessage({
              message: res.data.message,
              grouping: true,
              type: "error",
            });
          }
        })
        .catch((err) => {
          ElMessage({
            message: err,
            grouping: true,
            type: "error",
          });
        });
    })
    .catch(() => {
      ElMessage({
        type: "info",
        message: "已取消删除!",
      });
    });
};
</script>

<style scoped>
.contact-list {
  max-width: 800px;
  margin: auto;
  padding: 20px;
}

.add-card {
  margin-bottom: 20px;
}

.list-card {
  overflow-x: auto;
}

el-form {
  margin: 0 auto;
}

/* el-dialog 遮罩突然变黑问题解决 */
.v-modal {
  opacity: 0.5 !important;
  background: rgba(0, 0, 0, 0.5) !important;
}

@media (max-width: 768px) {
  .add-card {
    width: 100%;
    box-shadow: none;
    border-radius: 0;
  }

  .list-card {
    width: 100%;
    box-shadow: none;
    border-radius: 0;
  }

  el-dialog {
    --el-dialog-width: 80%;
  }
}

@media only screen and (min-width: 768px) {
  .el-col-sm-offset-1 {
    margin-left: 0;
  }
}
</style>

如果需要 Node 后端代码,或者完整项目的,可以私信或者在评论区留言,我会第一时间回复。


📝最后

通过这篇文章的实战进阶学习,我们可以学会一个基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台的 demo,同时对 axios 的使用更上一层楼,文章中的 Node 不是本次项目的重点,这篇文章重点是练习 axios 多方面的用法,因此后续会讲讲、记录一下 axios 进一步封装的操作。
在这里插入图片描述

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

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

相关文章

大话Stable-Diffusion-Webui-动手开发一个简单的stable-diffusion-webui(一)

文章目录 写在前面整体效果开发所需环境开发工具需要具备的知识Node安装更改npm包安装的目录设置npm镜像vscode安装创建vue项目代码编写项目先体验注意写在前面 stable-diffusion-webui(以下简称sd)项目通过FastAPI对外提供了一系列的api用于开发者二次开发或者集成到自己的…

真正理解微软Windows程序运行机制——窗口机制(第三部分)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术&#xff0c;为了解释这个我之前还写过帖子&#xff0c;但是很多人还是不理解。其实这没什么&#xff0c;我在学生时代也被这个问题困绕过。…

帆软报表二次开发 树组件节点上添加自己的按钮

我这里的需求是在树组件的子节点上加一个复制按钮。 先看效果 这是一颗多选树,用的是bi.tree_value_chooser_pane 这个组件,这个组件默认支持多选,它默认的效果为: 这个组件没有提供机制来自定义节点的渲染。 通过查找源码发现这个组件内部构建树是通过BI.$.fn.zTree来构…

C语言进阶---数据的存储

1、整形存储和大小端 本章重点&#xff1a; 1、数据类型详细介绍 2、整型在内存中的存储&#xff1a;原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 1.1、数据类型介绍 char 1byte //字符数据类型 short 2byte //…

【MyBatis】3、一文介绍如何用 MyBatis 进行多表级联查询

目录 一、设置新插入记录的主键&#xff08;id&#xff09;到参数对象中二、PageHelper 分页插件三、多表关系四、一对一五、一对多六、多对多 一、设置新插入记录的主键&#xff08;id&#xff09;到参数对象中 <insert id"insert01" parameterType"Studen…

【二叉树---堆】

二叉树---堆 一、树的概念及结构1. 树的概念2.树的相关概念3.树的表示 二、二叉树1.二叉树的概念2.特殊的二叉树3.二叉树的性质 三、堆1.堆的概念及结构2.堆的实现&#xff08;1&#xff09;函数的声明&#xff08;2&#xff09;函数的实现&#xff08;3&#xff09;测试堆的基…

chatgpt赋能python:Python多次运行的优势及方法

Python多次运行的优势及方法 随着Python在计算机领域的广泛应用&#xff0c;越来越多的企业和个人开始使用Python进行编程。在Python编程中&#xff0c;多次运行同一份代码不仅是常见的需求&#xff0c;而且有着众多的优势。 Python多次运行的优势 调试 在编程过程中&#…

chatgpt赋能python:Python安装EGG——一个简单的指南

Python安装EGG——一个简单的指南 如果你使用Python有一段时间了&#xff0c;你可能会遇到需要安装扩展包&#xff08;Package&#xff09;的情况。在Python中&#xff0c;这些扩展包的文件格式通常是.egg&#xff08;Easy Installable GZip&#xff09;。在本文中&#xff0c…

chatgpt赋能python:Python如何安装CSV模块

Python如何安装CSV模块 CSV是一种广泛使用的文件格式&#xff0c;用于存储表格数据。Python已经内置了CSV模块&#xff0c;可以轻松地读取和写入CSV文件。在这篇文章中&#xff0c;我们将关注如何安装CSV模块并开始与CSV文件进行交互。 什么是CSV&#xff1f; CSV是Comma Se…

chatgpt赋能python:如何安装pyecharts

如何安装pyecharts Pyecharts是一个基于echarts的数据可视化工具&#xff0c;它是Python语言的一个库&#xff0c;可以通过Python编程语言进行数据可视化&#xff0c;并且能通过交互式的方式展示出来。 在本文中&#xff0c;我们将介绍如何安装pyecharts&#xff0c;如果您是…

chatgpt赋能python:Python宏定义:编写高效、灵活和可维护的代码

Python宏定义&#xff1a;编写高效、灵活和可维护的代码 Python是一种非常流行的编程语言&#xff0c;它的简洁性、易读性以及灵活性使得它成为了众多开发者的首选。Python是一个强大的语言&#xff0c;它可以大大提高您的编程效率。Python的宏定义是一种非常有用的技巧&#…

【VB6|第18期】基于libxl导出Excel之导出失败的解决方案

日期&#xff1a;2023年6月12日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

康耐视Visionpro-插入脚本的标准流程 _ 简单方式

机器视觉海康Visionmaster-字符缺失缺陷检测 支持脚本添加的工具如下&#xff1a;添加的脚本只针对当前工具容器有效 Step - 1 &#xff1a; 制作ToolBlock&#xff0c;添加输入/输出等 Step - 2 &#xff1a; 新建Script Step - 3 &#xff1a; 检查界面终端 Step - 4 &am…

【黑马程序员 C++教程从0到1入门编程】【笔记4-2】C++核心编程(类和对象——运算符重载)(左操作数、右操作数)(仿函数)

文章目录 4 类和对象&#xff08;类属性【成员属性】&#xff0c;类函数【成员函数】&#xff09;4.5 运算符重载&#xff08;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型&#xff09;4.5.0.1 可重载运算符和不可重载运算符4.5.0…

案例:创建一个学生管理系统(PXSCJ1)的数据库(SQL)

1、新建数据库&#xff1a;PXSCJ1 --创建数据库CREATE DATABASE PXSCJ1 --创建并确认属性&#xff1a;XSB、KCB、CJB&#xff08;以下代码用于2、3、4、5题&#xff09; use PXSCJ1 create table XSB (学号 char(6) primary key check(学号 like [0][8][1][12][0-9][0-9])…

SM3_Robotics,轴组函数调用

1轴组状态&#xff1a; AXIS_GROUP_REF_SM3 (FB) 2使能&#xff1a; MC_GroupEnable &#xff08;使能&#xff09; 默认在&#xff1a; MC_GroupDisable &#xff08;轴组关闭&#xff09;位置 1&#xff1a;用 MC_GroupEnable &#xff08;使能&#xff09;进入 Gro…

chatgpt赋能python:Python怎么定义主函数:完整指南

Python怎么定义主函数&#xff1a;完整指南 Python是当今最流行的编程语言之一&#xff0c;因为它提供了简单易学、高效率、高度可读性和可维护性的代码编写方式。在Python中定义主函数是一个重要的编程技能&#xff0c;使您能够将Python程序变成可执行的Python应用程序。在本…

chatgpt赋能python:Python多次输入——如何自动化处理数据输入

Python多次输入——如何自动化处理数据输入 作为一名有10年Python编程经验的工程师&#xff0c;我曾遇到过很多需要重复输入数据的情况。这不仅浪费时间&#xff0c;而且容易出错&#xff0c;影响我们的工作效率和准确性。作为程序员&#xff0c;我们需要借助Python的自动化技…

openGauss5 企业版之SQL语法和数据结构

文章目录 1.openGauss SQL 语法2. 数据类型2.1数值类型2.2 布尔类型2.3 字符类型2.4 二进制类型2.5日期/时间类型2.6 几何类型2.7 网络地址类型2.8 位串类型2.9 文本搜索类型2.10 UUID数据类型2.11 JSON/JSONB类型2.11 HLL数据类型2.12 范围类型2.13 索引2.14 对象标识符类型2.…