springboot + vue3实现增删改查分页操作

news2024/10/6 0:29:18

springboot + vue3实现增删改查分页操作

      • 环境
      • 最终实现效果
      • 实现功能
      • 主要框架
      • 代码实现
        • 数据库
        • 后端
        • 前端
      • 注意事项

环境

jdk17 vue3

最终实现效果

在这里插入图片描述

实现功能

添加用户,禁用,启用,删除,编辑,分页查询

主要框架

后端
springboot mybatis-plus
前端
element-plus axios

代码实现

数据库

数据库中就一个 user表主要就包含以下字段
在这里插入图片描述

后端

yml配置文件

server:
  port: 8000
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/java-db1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT-8
  thymeleaf:
    cache: false
mybatis-plus:
  global-config:
    db-config:
      id-type: assign_id
  configuration:
    map-underscore-to-camel-case: true

xml依赖文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>demo</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.11</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-crypto -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-crypto</artifactId>
            <version>6.2.1</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

User实体类

package com.example.demo.entity;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.sql.Timestamp;

@Data
@AllArgsConstructor
public class User {
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;

    private String username;

    private String password;
    private String nickname;

    private String email;

    private Timestamp add_time;

    private Integer disabled;

}

UserService接口中我们需要添加一个方法

   Page<User> getPage(Page<User> page, QueryWrapper<User> queryWrapper);

UserServiceImple实现类中实现这个方法
这个方法主要用来实现分页

 @Autowired
    private UserMapper userMapper;
    @Override
    public Page<User> getPage(Page<User> page, QueryWrapper<User> queryWrapper) {
       return userMapper.selectPage(page,queryWrapper);
    }

UserMapper类和 我们平时写的mapper类一样,没有区别
在config包下添加Mybatis-plus分页插件

package com.example.demo.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 向MyBatis-Plus的过滤器链中添加分页拦截器,需要设置数据库类型(主要用于分页方言)
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 添加乐观锁拦截器
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

UserController控制器类

package com.example.demo.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import com.example.demo.util.Res;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*;

import java.sql.Timestamp;
import java.util.Date;

@RestController
@RequestMapping("/user")
public class UserController{
    @Autowired
    private UserService userService;

    @PostMapping("/add")
    public Res<User> add (@RequestBody User user){
        //判断用户是否存在
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username",user.getUsername());

        User u = userService.getOne(queryWrapper);
        if(u!=null){
            return Res.error("用户已存在");
        }

        //设置添加时间
        Timestamp timestamp = new Timestamp(new Date().getTime());
        user.setAdd_time(timestamp);
        //加密密码
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();

        String hash_password =bCryptPasswordEncoder.encode(user.getPassword());

        user.setPassword(hash_password);

        boolean res = userService.save(user);
        if(!res){
            return Res.error("添加失败");
        }
        return Res.success("添加用户成功",user);
    }

    @PostMapping("/edit")
    public Res<User> edit(@RequestBody User user){
        boolean res = userService.updateById(user);
        if(!res){
            return Res.error("编辑用户信息失败");
        }
        return Res.success("编辑用户信息成功",user);
    }

    @DeleteMapping("/delete/{id}")
    public Res<Object> delete(@PathVariable int id){
        boolean res = userService.removeById(id);
        if(!res){
            return Res.error("删除失败");
        }
        return Res.success("删除成功",id);
    }

    @GetMapping("/getid/{id}")
    public Res<User> getId(@PathVariable int id){
        User user = userService.getById(id);
        if(user!=null){
            return Res.success("获取数据成功",user);
        }
        return Res.error("获取数据失败");
    }

    @GetMapping("/page")
    public Res<Object> page(@RequestParam(defaultValue = "1") int page,
                            @RequestParam(defaultValue = "10") int pageSize,
                            @RequestParam(defaultValue = "") String username,
                            @RequestParam(defaultValue = "") String nickname
                            ){
        Page<User> userPage = new Page<>(page,pageSize);

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("username",username).or().like("nickname",nickname);

        return Res.success("获取数据成功",userService.getPage(userPage,queryWrapper));
    }

    @PostMapping("/disabled")
    public Res<Object> disabledById(@RequestBody User user){
        boolean res =userService.updateById(user);
        if(res){
            return Res.success("禁用成功",user);
        }
        return Res.error("禁用失败");
    }

    @PostMapping("/enable")
    public Res<Object> enableById(@RequestBody User user){
        boolean res =  userService.updateById(user);
        if(res){
            return Res.success("启用成功",user);
        }
        return Res.error("启用失败");
    }
}

在UserController控制器中Res是我们自己封装的返回类

package com.example.demo.util;

import lombok.Data;
import org.springframework.stereotype.Component;

@Data
public class Res<T> {
    private Integer code;
    private String msg;
    private T data;

    public static <T> Res<T> success(String msg,T data){
        Res<T> res = new Res<T>();
        res.code = 200;
        res.msg = msg;
        res.data = data;
        return res;
    }

    public static <T> Res<T> error(String msg){
        Res<T> res = new Res<T>();
        res.code = 400;
        res.msg = msg;
        res.data = null;
        return res;
    }
}

配置跨域请求
在config包下配置

package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
//                .allowedOrigins("*")
                .allowedOriginPatterns("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}
前端

依赖

  "dependencies": {
    "axios": "^1.6.4",
    "element-plus": "^2.4.4",
    "pinia": "^2.1.7",
    "sass": "^1.69.7",
    "vue": "^3.3.11",
    "vue-router": "^4.2.5"
  },

这里我给axios添加了一个baseUrl可以根据我们自己的需要添加请求头

import axios from "axios"

const http = axios.create({
    baseURL:"http://127.0.0.1:8000",
    timeout:5000
});

export default http

实现代码
由于功能不是很多我只写了一个页面
下面是全部实现代码

<script setup>
import { onMounted, ref } from 'vue';
import http from "@/http/http.js"
import { ElMessage, ElMessageBox } from 'element-plus'

const currentPage = ref(1)
const pageSize = ref(10)

const total = ref(0)

const dialogVisible = ref(false)

const addDialogVisible = ref(false)

const tableData = ref([])

const form = ref({})

const keyword = ref("")

const addForm =ref({
    username:"",
    password:"",
    email:"",
    nickname:""
})

const addFormRef = ref(null)

const rules = ref({
  username: [
    { required: true, message: 'Please input username', trigger: 'blur' },
    { min: 5, max: 14, message: 'Length should be 5 to 14', trigger: 'blur' },
  ],
  password: [
  { required: true, message: 'Please input password', trigger: 'blur' },
    { min: 5, max: 15, message: 'Length should be 5 to 15', trigger: 'blur' },
  ]
})

const handleSizeChange = (size) => {
    pageSize.value = size
    currentPage.value = 1
    getPage()
}

const handleCurrentChange = (page) => {
    currentPage = page
    getPage()
}



const getPage = async () => {
    const { data: res } = await http.get(`/user/page?page=${currentPage.value}&pageSize=${pageSize.value}&username=${keyword.value}&nickname=${keyword.value}`)
    total.value = res.data.total
    tableData.value = res.data.records
}

const disabledById = async (row) => {
    const { data: res } = await http.post("/user/disabled", {
        id: row.id,
        disabled: 1
    }
    );
    if (res.code == 200) {
        ElMessage.success("禁用成功");
        getPage()
    } else {
        ElMessage.error("禁用失败");
    }
}

const enableById = async (row) => {
    const { data: res } = await http.post("/user/enable", {
        id: row.id,
        disabled: 0
    }
    );
    if (res.code == 200) {
        ElMessage.success("启用成功");
        getPage()
    } else {
        ElMessage.error("启用失败");
    }
}

const openDialogVisible = (row) => {
    dialogVisible.value = true
    form.value = row
}

const edit = async () => {
    const { data: res } = await http.post("user/edit",
        form.value
    )
    if (res.code !== 200) {
        dialogVisible.value = false
        return ElMessage.error("编辑失败")
    }
    ElMessage.success("编辑成功");
    dialogVisible.value = false
    getPage()
}

const deleteById = (row) => {
    ElMessageBox.confirm(
        '此操作将永久删除该项,是否继续?',
        '警告',
        {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning',
        }
    )
        .then(async () => {
            const { data: res } = await http.delete(`/user/delete/${row.id}`)
            if (res.code !== 200) {
                return ElMessage.error("删除失败");
            }
            ElMessage({
                type: 'success',
                message: '删除成功!',
            })
            getPage()
        })
        .catch(() => {
            ElMessage({
                type: 'info',
                message: '已取消删除!',
            })
        })
}

const openAddDialogVisible = () => {
    addDialogVisible.value = true
}

const addUser = async () =>{
    const {data:res} = await http.post("/user/add",addForm.value)
    if(res.code!==200){
        addDialogVisible.value =false
        return ElMessage.error("添加用户失败");
    }
    ElMessage.success("添加用户成功");
    addDialogVisible.value = false
    getPage()
}

const findUser = () =>{
    getPage()
}

const handleClose = () =>{
    addFormRef.value.resetFields()
}

onMounted(() => {
    getPage()
})
</script>

<template>
    <div class="index">
        <el-row :gutter="20">
            <el-col :span="4">
                <el-button type="primary" @click="openAddDialogVisible">添加用户</el-button>
            </el-col>
            <el-col :span="6">
                <el-input v-model="keyword" class="w-50 m-2" placeholder="请输入用户名或昵称">
                    <template #append>
                        <el-button @click="findUser">查找用户</el-button>
                    </template>
                </el-input>
            </el-col>
        </el-row>
        <el-table :data="tableData" border style="width: 100%" stripe>
            <el-table-column prop="id" label="ID" />
            <el-table-column prop="username" label="用户名" />
            <el-table-column prop="nickname" label="昵称" />
            <el-table-column prop="email" label="邮箱" />
            <el-table-column prop="add_time" label="添加时间" />
            <el-table-column label="状态">
                <template v-slot="scoped">
                    <el-tag v-if="scoped.row.disabled == 1" type="danger">禁用</el-tag>
                    <el-tag v-else type="success">启用</el-tag>
                </template>
            </el-table-column>
            <el-table-column label="操作">
                <template v-slot="scoped">
                    <el-button size="small" type="info" @click="disabledById(scoped.row)">禁用</el-button>
                    <el-button size="small" type="success" @click="enableById(scoped.row)">启用</el-button>
                    <el-button size="small" type="warning" @click="openDialogVisible(scoped.row)">编辑</el-button>
                    <el-button size="small" type="danger" @click="deleteById(scoped.row)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize" :page-sizes="[1, 2, 3, 4]"
            :small="small" :disabled="disabled" :background="background" layout="total, sizes, prev, pager, next, jumper"
            :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />

        <el-dialog v-model="dialogVisible" title="编辑" width="30%" :before-close="handleClose">
            <el-form :model="form" label-width="120px">
                <el-form-item label="id">
                    <el-input v-model="form.id" disabled />
                </el-form-item>
                <el-form-item label="昵称">
                    <el-input v-model="form.nickname" />
                </el-form-item>
                <el-form-item label="邮箱">
                    <el-input v-model="form.email" />
                </el-form-item>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="dialogVisible = false">取消</el-button>
                    <el-button type="primary" @click="edit">
                        确定
                    </el-button>
                </span>
            </template>
        </el-dialog>

        <el-dialog v-model="addDialogVisible" title="添加用户" width="30%" @close="handleClose" >
            <el-form :model="addForm" label-width="120px" :rules="rules" ref="addFormRef">
                <el-form-item label="用户名" prop="username">
                    <el-input v-model="addForm.username" />
                </el-form-item>
                <el-form-item label="密码" prop="password"> 
                    <el-input v-model="addForm.password" />
                </el-form-item>
                <el-form-item label="邮箱">
                    <el-input v-model="addForm.email" placeholder="选填" />
                </el-form-item>
                <el-form-item label="昵称">
                    <el-input v-model="addForm.nickname" placeholder="选填" />
                </el-form-item>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="addDialogVisible = false">取消</el-button>
                    <el-button type="primary" @click="addUser">
                        添加
                    </el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>

<style lang="scss" scoped>
.index {
    width: auto;
    height: auto;
    padding: 30px;

    .el-pagination {
        margin-top: 25px;
    }

    .el-row {
        margin-bottom: 25px;
    }
}
</style>

注意事项

后端使用mybatis-plus分页记得添加分页插件
记得配置跨域请求文件
springboot3.2.1 搭配的mybatis-plus 要使用3.5.5,其他的会报错

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

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

相关文章

【机器学习:余弦相似度 】机器学习中余弦相似度的理解和应用

【机器学习&#xff1a;余弦相似度 】机器学习中余弦相似度的理解和应用 定义余弦距离角距离和相似度 L 2 L_2 L2​归一化欧几里得距离Otsuka–Ochiai 系数属性余弦相似度的三角不等式软余弦测量应用示例扩展GPT图像示例 在数据分析领域&#xff0c;余弦相似度用于度量内积空间…

残疾大学生找工作好难

有点肢体残疾且普通话不太标准的大学生好难找工作啊&#xff0c;怎么办&#xff1f;难道得去捡垃圾了&#xff1f;求学多年&#xff0c;好容易读了个大学(省内一本)&#xff0c;我咋这么命苦&#xff0c;找了800多家&#xff0c;面试好几家&#xff0c;都没一个要我的。

《剑指 Offer》专项突破版 - 面试题 3 :前 n 个数字二进制形式中 1 的个数(C++ 实现)

目录 前言 方法一 方法二 方法三 前言 题目链接&#xff1a;338. 比特位计数 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 输入一个非负数 n&#xff0c;请计算 0 到 n 之间每个数字的二进制形式中 1 的个数&#xff0c;并输出一个数组。例如&#xff0…

【python爬虫开发实战 情感分析】利用爬虫爬取城市评论并对其进行情感分析

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a; python网络爬虫从基础到实战 带你学习爬虫从基础到实战 深度学习带你感受AI的魅力 &#x1f4a1;往期推荐&#xff1a; ⭐️前面比较重要的基础内容&#xff1a; 【Py…

日常测试工作中哪些是必须知道的 SQL 语句?

SQL 简介 SQL(Structured Query Language&#xff0c;结构化查询语言)是一套用于管理关系数据库管理系统(RDBMS)&#xff0c;基于 ANSI&#xff08;American National Standards Institute 美国国家标准化组织&#xff09;标准的计算机语言&#xff0c;比较重要的版本是 SQL92…

2023 最火的是什么? 超维计算 + 神经网络

从chatgpt开始&#xff0c;人工智能进步的步伐似乎势不可挡&#xff0c;但支撑这些程序的人工神经网络遇到了一些重大限制&#xff0c;其他的很难推理但是人类的大脑能够通过类比进行推理&#xff0c;当我们看到新事物时&#xff0c;我们不必生长新的神经元&#xff0c;我们可以…

飞凌全志T113-i开发板视频编码测试

前言 本文测试OK113i-S开发板-视频编解码的功能 OK113i-S开发板是支持视频的编解码的&#xff0c;下面是官方介绍的编解码功能 T113-i 是一种为多媒体解码平台设计的高级应用处理器。T113-i 集成了64位玄铁C906 RISC-V CPU&#xff0c; 双核 Cortex - A7 CPU 和 HiFi4 DSP&a…

Java反射篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、反射使用步骤(获取 Class 对象、调用对象方法)二、获取 Class 对象有几种方法三、利用反射动态创建对象实例前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

所有单片机使用的汇编语言是统一的吗?

所有单片机使用的汇编语言是统一的吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&…

跑通大模型领域的 hello world

跑通书生浦语大模型的 3 个趣味 demo&#xff08;InternLM-Chat-7B 智能对话、Lagent工具调用解简单数学题、浦语灵笔多模态图文创作和理解&#xff09;视频和文档。 1、两个框架 InternLM 是⼀个开源的轻量级训练框架&#xff0c;旨在⽀持⼤模型训练⽽⽆需⼤量的依赖。 Lage…

TSINGSEE青犀智能分析网关V4在智慧园区车辆违停检测场景中的应用

一、背景与需求 园区作为企业办公、生产制造的重要场所&#xff0c;主要道路车辆违停等违规行为会对园区的安全造成隐患&#xff0c;并且在上下班高峰期内&#xff0c;由于发现不及时&#xff0c;车辆违停行为会造成出入口拥堵现象&#xff0c;这也成为园区管理的棘手问题。为了…

提升软件质量与效率:UI自动化测试的重要性

在软件开发领域&#xff0c;UI自动化测试工具被广泛应用&#xff0c;其意义不仅仅体现在节省时间和资源上&#xff0c;更关系到软件质量的提升、团队效率的增加&#xff0c;以及用户体验的改善。本文将探讨使用UI自动化测试工具的重要性&#xff0c;以及它在软件开发生命周期中…

JVM知识总结(简单且高效)

1. JVM内存与本地内存 JVM内存&#xff1a;受虚拟机内存大小的参数控制&#xff0c;当大小超过参数设置的大小时会报OOM。本地内存&#xff1a;本地内存不受虚拟机内存参数的限制&#xff0c;只受物理内存容量的限制&#xff1b;虽然不受参数的限制&#xff0c;如果所占内存超过…

C语言学习NO.13-字符函数(三)-strncpy,strncat,strncmp长度受限制的字符串函数

长度受限制的字符串函数介绍 一、strncpy函数的使用 &#xff08;一&#xff09;strncpy使用 #include <stdio.h> #include <string.h>int main() {char arr1[20] "asdfgdfv";char arr2[7] "zxcvbn";strncpy(arr1, arr2, 4);printf("…

Origin无法使用主题管理器相关功能或报错:Err, Save Theme dialog error!

问题描述 在使用origin绘图时&#xff0c;往往需要进行大批量绘制同样类型的图。如果每个图都不断地去修改相关设置&#xff0c;无疑是浪费了许多宝贵的时间。为了提高绘图效率&#xff0c;了解到了主题管理器&#xff0c;可在“工具–主题管理器”找到。 然而&#xff0c;当我…

计算机毕业设计-----SSM宠物商城带后台管理系统

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 加入购物车,发表留言,提交订单,查看订单信息,会员注册,登录页面等功能。 管理员角色包含以下…

静态网页设计——极乐迪斯科(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV11k4y1X7mH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

C++补充内容--EasyX-UI界面

esay x 其他 地图打印(利用二维数组) 双缓冲 当我们绘制一张图 然后另一张图盖住前一张图的某个部分的时候 由于while的存在 会导致 两张图不停的闪烁 所以加入双缓冲可以解决这个问题 开启双缓冲 之后等待Flush或者End 才会进行图片的绘制 不然不会进行图片的绘制,这样就可…

Python学习之路——文件部分【文件的读取】

目录 先解释一下引文的答案 一、open()打开函数 二、mode常用的三种基础访问模式 三、读-操作相关方法 &#xff08;一&#xff09;read方法 &#xff08;二&#xff09;readlines方法 &#xff08;三&#xff09;with open 语法 &#xff08;四&#xff09;操作汇总 …

腾讯云2核2G3M服务器够用吗?腾讯云2核2G3M云服务器性能评测

阿里云轻量应用服务器2核2G3M带宽优惠价格62元一年&#xff0c;100%CPU性能&#xff0c;3M带宽下载速度384KB/秒&#xff0c;40GB SSD系统盘&#xff0c;月流量200GB&#xff0c;折合每天6.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支付流量费&#xff0c;地域…