【JavaWeb】网上蛋糕商城后台-客户管理

news2024/10/4 20:18:56

概念

上文中已讲解和实现了后台管理系统中的订单管理功能,本文讲解客户信息管理功能。

客户信息列表

在后台管理系统的head.jsp头部页面中点击“客户管理”向服务器发送请求

在servlet包中创建AdminUserListServlet类接收浏览器的请求

package servlet;

import model.Page;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "admin_user_list",urlPatterns = "/admin/user_list")
public class AdminUserListServlet extends HttpServlet {
    private UserService uService = new UserService();
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int pageNumber = 1;
        if(request.getParameter("pageNumber") != null) {
            try {
                pageNumber=Integer.parseInt(request.getParameter("pageNumber") ) ;
            }
            catch (Exception e)
            {

            }

        }
        if(pageNumber<=0)
            pageNumber=1;
        Page p = uService.getUserPage(pageNumber);
        if(p.getTotalPage()==0)
        {
            p.setTotalPage(1);
            p.setPageNumber(1);
        }
        else {
            if(pageNumber>=p.getTotalPage()+1)
            {
                p = uService.getUserPage(pageNumber);
            }
        }
        request.setAttribute("p", p);
        request.getRequestDispatcher("/admin/user_list.jsp").forward(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

以上代码中,接收浏览器的请求后,并获得浏览器的页码参数,如果没有,则默认页码为1,然后根据页码传递给业务逻辑层执行操作

public Page getUserPage(int pageNumber) {
    Page p = new Page();
    p.setPageNumber(pageNumber);
    int pageSize = 7;
    int totalCount = 0;
    try {
        totalCount = uDao.selectUserCount();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    p.SetPageSizeAndTotalCount(pageSize, totalCount);
    List list=null;
    try {
        list = uDao.selectUserList( pageNumber, pageSize);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    p.setList(list);
    return p;
}

以上代码中,先调用dao数据访问层获得所有用户信息的总数量,然后根据页码以及每页显示的记录数作为条件查询用户表,获得用户列表信息

public int selectUserCount() throws SQLException {
    QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
    String sql = "select count(*) from user";
    return r.query(sql, new ScalarHandler<Long>()).intValue();
}
public List selectUserList(int pageNo, int pageSize) throws SQLException {
    QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
    String sql = "select * from user limit ?,?";
    return r.query(sql, new BeanListHandler<User>(User.class), (pageNo-1)*pageSize,pageSize );
}

最后将查询的用户列表信息发送给user_list.jsp页面显示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>客户列表</title>
<meta charset="utf-8"/>
<link rel="stylesheet" href="css/bootstrap.css"/> 
</head>
<body>
<div class="container-fluid">
   <jsp:include page="header.jsp"></jsp:include>
   <div class="text-right"><a class="btn btn-warning" href="user_add.jsp">添加客户</a></div>
   <c:if test="${!empty msg }">
      <div class="alert alert-success">${msg }</div>
   </c:if>
   <c:if test="${!empty failMsg }">
      <div class="alert alert-danger">${failMsg }</div>
   </c:if>
   <br>
   <br>
   <table class="table table-bordered table-hover">
   <tr>
      <th width="5%">ID</th>
      <th width="10%">用户名</th>
      <th width="10%">邮箱</th>
      <th width="10%">收件人</th>
      <th width="10%">电话</th>
      <th width="10%">地址</th>
      <th width="12%">操作</th>
   </tr>
      <c:forEach items="${p.list }" var="u">
         <tr>
            <td><p>${u.id }</p></td>
            <td><p>${u.username }</p></td>
            <td><p>${u.email }</p></td>
            <td><p>${u.name }</p></td>
            <td><p>${u.phone }</p></td>
            <td><p>${u.address }</p></td>
            <td>
               <a class="btn btn-info" href="/admin/user_reset.jsp?id=${u.id }&username=${u.username }&email=${u.email }">重置密码</a>
               <a class="btn btn-primary" href="/admin/user_editshow?id=${u.id }">修改</a>
               <a class="btn btn-danger" href="${pageContext.request.contextPath }/admin/user_delete?id=${u.id }">删除</a>
            </td>
         </tr>
      </c:forEach>
</table>

<br>
   <jsp:include page="/page.jsp">
      <jsp:param value="/admin/user_list" name="url"/>
   </jsp:include>
<br>
</div>
</body>
</html>

添加客户信息

点击上图右上角“添加客户按钮”跳转至user_add.jsp添加客户页面

<%@ page language="java" contentType="text/html; charset=utf-8"
       pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
   <title>客户添加</title>
   <meta charset="utf-8" />
   <link rel="stylesheet" href="css/bootstrap.css" />
</head>
<body>
<div class="container-fluid">
   <jsp:include page="/admin/header.jsp"></jsp:include>
   <c:if test="${!empty failMsg }">
      <div class="alert alert-danger">${failMsg }</div>
   </c:if>
   <br><br>
   <form class="form-horizontal" action="/admin/user_add" method="post">
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">用户名</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="username" required="required" value="${u.username }" />
         </div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">邮箱</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="email" required="required" value="${u.email }"/>
         </div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">密码</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="password" required="required" value="${u.password }"/>
         </div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">收货人</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="name" value="${u.name }"/>
         </div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">电话</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="phone" value="${u.phone }" />
         </div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">地址</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="address" value="${u.address }"/>
         </div>
      </div>
      <div class="form-group">
         <div class="col-sm-offset-1 col-sm-10">
            <button type="submit" class="btn btn-success">提交保存</button>
         </div>
      </div>
   </form>
   <span style="color:red;"></span>
</div>
</body>
</html>

当管理员录入完客户信息后,点击“提交保存”按钮,将新增客户数据发送给服务器/admin/user_add

在servlet包中创建AdminUserAddServlet类接收新增客户信息

package servlet;

import model.User;
import org.apache.commons.beanutils.BeanUtils;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

@WebServlet(name = "admin_user_add",urlPatterns = "/admin/user_add")
public class AdminUserAddServlet extends HttpServlet {
    private UserService uService = new UserService();
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        User user = new User();
        try {
            BeanUtils.copyProperties(user, request.getParameterMap());
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if(uService.register(user)) {
            request.setAttribute("msg", "客户添加成功!");
            request.getRequestDispatcher("/admin/user_list").forward(request, response);
        }else {
            request.setAttribute("failMsg", "用户名或邮箱重复,请重新填写!");
            request.setAttribute("u",user);
            request.getRequestDispatcher("/admin/user_add.jsp").forward(request, response);
        }
    }
}

以上代码中,将浏览器发送的数据以map集合的格式接收,并封装至user对象中,并发送给业务逻辑层执行添加客户信息操作,如果添加成功则刷新客户列表信息页面,否则返回添加客户页面,告知管理员添加失败的原因,重新录入客户信息。

重置客户密码

在客户列表页面中,选择要重置密码的客户信息的“重置密码”按钮,携带数据跳转至user_reset.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"
       pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
   <title>重置密码</title>
   <meta charset="utf-8"/>
   <link rel="stylesheet" href="css/bootstrap.css"/>
</head>
<body>
<div class="container-fluid">
   <jsp:include page="/admin/header.jsp"></jsp:include>
   <br><br>
   <form class="form-horizontal" action="/admin/user_reset" method="post">
      <input type="hidden" name="id" value="${param.id }">
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">用户名</label>
         <div class="col-sm-5">${param.username }</div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">邮箱</label>
         <div class="col-sm-5">${param.email }</div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">密码</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="password" value="" required="required">
         </div>
      </div>
      <div class="form-group">
         <div class="col-sm-offset-1 col-sm-10">
            <button type="submit" class="btn btn-success">提交修改</button>
         </div>
      </div>
   </form>
   <span style="color:red;"></span>
</div>
</body>
</html>

当管理员填写新密码后,点击提交修改按钮,向服务器发送请求/admin/user_reset

在servlet包中创建AdminUserResetServlet类,完成重置密码操作

package servlet;

import model.User;
import org.apache.commons.beanutils.BeanUtils;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

@WebServlet(name = "admin_user_reset",urlPatterns = "/admin/user_reset")
public class AdminUserResetServlet extends HttpServlet {
    private UserService uService = new UserService();
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        User u = new User();
        try {
            BeanUtils.copyProperties(u, request.getParameterMap());
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        uService.updatePwd(u);
        request.getRequestDispatcher("/admin/user_list").forward(request, response);
    }
}

以上代码中,将接收的用户信息发送给业务逻辑层进行密码的修改,修改成功后刷新客户列表页面

修改客户信息

点击客户列表页面中,要修改的客户中的“修改”按钮,向服务器发送请求/admin/user_editshow并携带客户编号

在servlet包中创建AdminUserEditshowServlet类,接收浏览器请求,根据客户编号查询该客户的信息

package servlet;

import model.User;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "admin_user_editshow",urlPatterns = "/admin/user_editshow")
public class AdminUserEditshowServlet extends HttpServlet {
    private UserService uService = new UserService();
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        User user = uService.selectById(id);
        request.setAttribute("u", user);
        request.getRequestDispatcher("/admin/user_edit.jsp").forward(request, response);
    }
}

将客户编号发送给业务逻辑层执行

public User selectById(int id) {
    User u=null;
    try {
        u = uDao.selectById(id);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return u;
}

以上代码中,将接收的客户编号发送给数据访问层查询客户信息

public User selectById(int id) throws SQLException {
    QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
    String sql = "select * from user where id=?";
    return r.query(sql, new BeanHandler<User>(User.class),id);
}

最后,将查询的用户信息发送至user_edit.jsp页面进行展示,供管理员修改

<%@ page language="java" contentType="text/html; charset=utf-8"
       pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
   <title>客户修改</title>
   <meta charset="utf-8"/>
   <link rel="stylesheet" href="css/bootstrap.css"/>
</head>
<body>
<div class="container-fluid">
   <jsp:include page="/admin/header.jsp"></jsp:include>
   <br><br>
   <form class="form-horizontal" action="/admin/user_edit" method="post">
      <input type="hidden" name="id" value="${u.id }">
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">用户名</label>
         <div class="col-sm-5">${u.username }</div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">邮箱</label>
         <div class="col-sm-5">${u.email }</div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">收货人</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="name" value="${u.name }">
         </div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">电话</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="phone" value="${u.phone }">
         </div>
      </div>
      <div class="form-group">
         <label for="input_name" class="col-sm-1 control-label">地址</label>
         <div class="col-sm-6">
            <input type="text" class="form-control" id="input_name" name="address" value="${u.address }">
         </div>
      </div>
      <div class="form-group">
         <div class="col-sm-offset-1 col-sm-10">
            <button type="submit" class="btn btn-success">提交修改</button>
         </div>
      </div>
   </form>
   <span style="color:red;"></span>

</div>
</body>
</html>

当管理员修改了客户的收货人,电话或者地址后,点击提交修改按钮,将修改的信息发送给/admin/user_edit服务器地址

在servlet包中创建AdminUserEditServlet类,接收浏览器的请求以及更新的客户信息

package servlet;

import model.User;
import org.apache.commons.beanutils.BeanUtils;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "admin_user_edit",urlPatterns = "/admin/user_edit")
public class AdminUserEditServlet extends HttpServlet {
    private UserService uService = new UserService();
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        User u = new User();
        try {
            BeanUtils.copyProperties(u, request.getParameterMap());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        uService.updateUserAddress(u);
        request.getRequestDispatcher("/admin/user_list").forward(request, response);
    }
}

以上代码中,以map集合的格式接收数据参数并封装在user对象中,将user对象发送给业务逻辑层执行

当修改成功后,同步刷新返回客户列表页面

删除客户信息

在客户列表页面中,选择要删除的客户信息的“删除”按钮,向服务器发送/admin/user_delete地址请求,并携带客户编号,在servlet包中创建AdminUserDeleteServlet类,根据客户编号执行删除客户信息操作

package servlet;

import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "admin_user_delete",urlPatterns = "/admin/user_delete")
public class AdminUserDeleteServlet extends HttpServlet {
    private UserService uService = new UserService();
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        boolean isSuccess = uService.delete(id);
        if(isSuccess) {
            request.setAttribute("msg", "客户删除成功");
        }else {
            request.setAttribute("failMsg", "客户有下的订单,请先删除该客户下的订单,再来删除客户!");
        }
        request.getRequestDispatcher("/admin/user_list").forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

以上代码中,将接收的客户编号发送给业务逻辑层执行

public boolean delete(int id ) {
    try {
        uDao.delete(id);
        return true;
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return false;
    }
}

接着,将客户编号发送给数据访问层操作

public void delete(int id) throws SQLException {
    QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
    String sql = "delete from user where id = ?";
    r.update(sql,id);
}

最后,删除成功返回true,否则返回false,servlet根据返回值为true则同步刷新客户列表页面,返回值false则告知管理员删除失败,可能该客户有未完成的订单关联,不能删除该客户信息。

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

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

相关文章

FebHost:什么是新西兰.NZ域名?

.nz域名是新西兰的顶级域名&#xff08;TLD&#xff09;。它是专门分配给新西兰的国家代码顶级域&#xff08;ccTLD&#xff09;。以 .nz 结尾的域名用于标识与新西兰或其居民相关的网站、电子邮件地址和其他在线资源。 .nz 域名由新西兰域名委员会管理。负责监督 .nz 域名的注…

驱动丹佛斯比例电磁铁放大器

驱动丹佛斯比例电磁铁是一种用于实现对液压系统连续且精确控制的通电带磁性装置。比例阀由直流比例电磁铁和液压阀两部分组成。其中&#xff0c;比例电磁铁是其核心部件&#xff0c;负责将输入的电信号转换成力和位移输出&#xff0c;从而控制液压阀的工作状态。比例电磁铁通过…

啥是PLCnext?它能干啥?

PLCnext控制器 简单来说&#xff0c;PLCnext是基于Linux操作系统的一个控制器运行时&#xff0c;所以它原生具备的两个特点&#xff1a; 1.原生兼容IEC61131 2.原生兼容Linux各类应用 PLCnext的控制器大概长下面这样&#xff08;AXC F 1152、2152&#xff09;&#xff0c;通…

在全志H616核桃派开发板上进行PyQt5的代码编写和运行

核桃派本地 在上一节我们通过Qt Designer设计了ui窗口并转换成了Python代码&#xff0c;由于是Python编程&#xff0c;因此我们可以在核桃派开发板打开Python代码进行编程。 在核桃派上推荐使用Thonny来打开编写Python文件, 使用请参考&#xff1a;Thonny IDE。 打开上一节生…

每天认识新职业——网络工程师

一、网络工程师是什么 网络工程师是通过学习和训练&#xff0c;掌握网络技术的理论知识和操作技能的网络技术人员。网络工程师能够从事计算机信息系统的设计、建设、运行和维护工作。相关职业&#xff1a;系统集成工程师、计算机硬件工程师职业其他名称&#xff1a;网络管理员、…

TriCore: 从RTOS内核的角度看CSA

今天尝试从RTOS内核的角度来看看 TriCore 的 CSA。 CSA的细节信息可以参考前一篇文章 TriCore User Manual 笔记 1-CSDN博客 CSA 的全称是 Context Save Area&#xff0c;顾名思义就是专门用来保存上下文的一块存储区域。 既然是上下文使用&#xff0c;那必然要求低延迟&…

VS小知识----qDebug打印中文时乱码

问题&#xff1a;vs在打印中文时乱码 分析解决&#xff1a;编码问题&#xff0c;改为UTF-8试试

2024最新独立版校园跑腿校园社区小程序源码+附教程 适合跑腿,外卖,表白,二手,快递等校园服务

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 后台php&#xff0c;前端uniapp可以二次开 2024最新独立版校园跑腿校园社区小程序源码附教程 测试环境&#xff1a;NginxPHP7.2MySQL5.6 多校版本&#xff0c;多模块&#xff0c;适…

银河麒麟服务器sshd启动失败,报错(code=exited, status=255/EXCEPTION)

服务器版本&#xff0c;银河麒麟高级服务器操作系统V10-SP3 查看sshd服务状态systemctl status sshd&#xff0c;报错(codeexited, status255/EXCEPTION) 查看日志journalctl -xe&#xff0c;没有得到太多有用信息。 尝试卸载ssh服务&#xff0c;并重装&#xff1a; yum r…

螺杆式冷水机的回油问题

螺杆式冷水机出现冷冻油回油不畅是非常让人头痛的事情&#xff0c;一般来说&#xff0c;螺杆式冷水机回油不畅的原因主要是因为在运行过程中&#xff0c;出现冷冻油与制冷剂的气体混合物现象。具体是&#xff0c;在制冷系统的运行中&#xff0c;遇到制冷剂与冷冻机润滑油互溶会…

Kubernetes-容器的生命周期(init容器、健康检查探针、钩子)

目录 一、概述 二、init容器 1.概述 2.init容器作用 3.InitC容器示例 三、容器探针 1.概述 2.探针类型 3.readinessProbe-就绪检测示例 4.livenessProbe-存活检测示例 5.livenessProbe-tcp--检测端口模板 四、钩子 1.概述 2.yaml模板 3.示例 一、概述 1.当一个p…

GO+树莓派+E53_IA1智慧农业模块

简介 之前手头上有小熊派的开发板&#xff0c; 有一个E53_IA1模块&#xff0c; 刚好用到树莓派上&#xff0c; 使用GO进行控制&#xff0c;实现智慧农业模块功能。 模块介绍 模块电路介绍 按硬件分成五块&#xff0c; 其中四块在本次用上了&#xff0c; 分别是 1. 补光模块&…

C语言 | Leetcode C语言题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; int removeDuplicates(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int slow 2, fast 2;while (fast < numsSize) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return slow; }

如何利用代理IP高效采集全球热点,赋能短视频创作?

如何利用代理IP高效采集全球热点&#xff0c;赋能短视频创作&#xff1f; 一、摘要二、代理IP1. 什么是代理IP&#xff1f;2. 代理IP的分类3. 代理的重要性 三、如何选择可靠的代理IP服务商&#xff1f;四、IPIDEA代理IP简介1.IPIDEA简介2.IPIDEA的优势 五、获取代理IP1. 注册平…

【数据结构】折半查找/二分查找 查找判定树+效率分析+完整代码

2.2 折半查找 算法思想 定义&#xff1a; 折半查找&#xff0c;又称二分查找&#xff0c;仅用于有序的顺序表。 实现思路&#xff1a; 1.设置low和high指针&#xff0c;分别在序列首尾&#xff1b; 2.取中间位置mid(lowhigh)/2&#xff1b; 3.若mid所指元素大&#xff0c;则去…

乡村振兴的乡村社会治理创新:创新社会治理模式,提升社会治理能力,构建乡村社会治理新格局,建设和谐美丽乡村

一、引言 乡村振兴是我国现代化进程中的重要战略&#xff0c;而乡村社会治理创新则是乡村振兴的关键环节。随着社会的不断发展和进步&#xff0c;传统的乡村社会治理模式已难以满足当前乡村发展的需要。因此&#xff0c;创新社会治理模式、提升社会治理能力、构建乡村社会治理…

04 贝尔曼最优公式

贝尔曼最优公式 前言1、Motivating examples2、Definition of optimal policy3、Bellman optimality equation(BOE)&#xff1a;Introduction4、 BOE&#xff1a;Maximization on the right-hand side5、BOE&#xff1a;Rewrite as v f(v)6、Contraction mapping theorem7、BO…

最新微信智能电子名片源码 全开源可二开 智能名片系统开发

在数字化日益深入人心的今天&#xff0c;名片已不再是简单的纸质交换工具&#xff0c;而是成为了一个展示个人或企业形象、促进商务交流的重要窗口。分享一款全新的微信智能电子名片系统&#xff0c;源码开源、可二次开发的灵活性&#xff0c;更在功能上进行了全面升级和优化&a…

MySQL软件安装基于压缩包

打开mysql官网网址 MySQL :: Download MySQL Community Server 本次针对版本8的安装包方式进行安装&#xff0c;下载成功后接下来对MySQL进行安装 下载后有一个以zip后缀结尾的压缩包文件 对于安装包方式安装&#xff0c;比起可视化安装省去了许多安装步骤&#xff0c;这里直接…

数据结构的二叉树(c语言版)

一.二叉树的概念 1.二叉树的基本概念 二叉树是一种常见的树状数据结构&#xff0c;它由若干个节点组成&#xff0c;这些节点通过边连接起来。每个节点最多可以有两个子节点&#xff0c;分别称为左子节点和右子节点。 二叉树的特点是每个节点最多有两个子节点&#xff0c;而且…