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

概念

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

客户信息列表

在后台管理系统的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);}@Overrideprotected 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 blocke.printStackTrace();}p.SetPageSizeAndTotalCount(pageSize, totalCount);List list=null;try {list = uDao.selectUserList( pageNumber, pageSize);} catch (SQLException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.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 blocke.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 blocke.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 stubdoGet(request, response);}
}

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

public boolean delete(int id ) {try {uDao.delete(id);return true;} catch (SQLException e) {// TODO Auto-generated catch blocke.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.mzph.cn/diannao/9365.shtml

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

相关文章

totoriseSVN 常见问题

1. SVN 无法 clean up 上传时没有关闭 Excel&#xff0c;导致传入了一些临时文件&#xff08;文件名以$开头&#xff09;&#xff0c;关闭文件后临时文件自动删除&#xff0c;导致 SVN 版本错乱&#xff0c;使用 CleanUp 功能无效 更新时提示【Previous operation has not fin…

【Java探索之旅】super 子类构造 掌握

文章目录 &#x1f4d1;前言一、继承1.1 super1.2 子类的构造方法1.3 super与this的区别 &#x1f324;️全篇总结 &#x1f4d1;前言 继承作为面向对象编程中的重要概念&#xff0c;为我们提供了一种强大的代码复用和扩展机制。在Java中&#xff0c;通过继承可以实现子类对父类…

大数据毕业设计Python+Django地铁客流量预测 时间序列 深度学习 机器学习 人工智能 Python爬虫 计算机毕业设计

​ 博主介绍&#xff1a;全网粉丝100W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路 西安工程大学本科毕业设计&#xff…

C++中的std::bind深入剖析

目录 1.概要 2.原理 3.源码分析 3.1._Binder分析 3.2._CALL_BINDER的实现 4.总结 1.概要 std::bind是C11 中的一个函数模板&#xff0c;用于创建一个可调用对象&#xff08;函数对象或者函数指针&#xff09;的绑定副本&#xff0c;其中一部分参数被固定为指定值&#xf…

Visual Studio编译QT工程

1、安装QT 2、安装VS 3、选择扩展和更新 4、搜索Qt Visual Studio Tools&#xff0c;安装或卸载 5、安装成功后工具栏显示Qt VS Tools 6、配置Qt VS Tools&#xff1a;打开Qt VS Tools的下拉菜单&#xff0c;选择Qt Versions 7、选择qt qmake.exe 的路径

汽车行业芯片 车规级芯片 单车芯片( soc mcu)数量

链接&#xff1a;https://xueqiu.com/3000217281/272114755 10大车规级MCU芯片10大车规级MCU芯片 汽车芯片是什么&#xff1f; 汽车芯片即车规级芯片&#xff0c;标准要高于工业级和民用级芯片&#xff0c;仅次于军工级芯片。芯片大概有以下四种级别&#xff0c;分别是军工级…

猿匹配,一款使用环信实现的一个开源聊天应用含服务器

前言 之前写了一篇Android开发集成聊天环信SDK3.x简单开始&#xff0c;然后最近得空开发了一款使用环信实现的实时聊天应用&#xff0c;包含简单的服务器端&#xff0c;并开源给大家&#xff0c;有兴趣的同学可以一起搞一下&#xff0c;详细介绍看下边吧 上代码 服务器&#…

Java基于Spring Boot框架的校园外卖服务系统设计与实现(附源码,说明文档)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

第二篇【AI与传奇开心果系列】Python的AI技术点库案例示例:详解AI工业应用算法原理

AI与传奇开心果系列博文 系列博文目录Python的AI技术点库案例示例系列 博文目录前言一、AI工业应用算法原理介绍二、机器学习在工业领域的应用算法示例代码三、深度学习算法在工业领域应用示例代码四、强化学习在工业领域应用示例代码五、自然语言处理在工业领域应用示例代码六…

9. Django Admin后台系统

9. Admin后台系统 Admin后台系统也称为网站后台管理系统, 主要对网站的信息进行管理, 如文字, 图片, 影音和其他日常使用的文件的发布, 更新, 删除等操作, 也包括功能信息的统计和管理, 如用户信息, 订单信息和访客信息等. 简单来说, 它是对网站数据库和文件进行快速操作和管…

Hive多字节分隔符处理

Hive多字节分隔符处理 1.Hive分隔符默认规则 2.问题与需求 3.解决方案 &#xff08;1&#xff09;替换分隔符 &#xff08;2&#xff09;RegeSerDe正则加载 &#xff08;3&#xff09;自定义InputFormat

SAP-ABAP-ALV报表

1、功能介绍 什么是ALV报表 2、开发步骤 事物码: SE38创建报表程序SE93生成TCODESE43SE91消息号报表类型:简单报表、复杂报表、报表树 报表组成:查询界面(选择屏幕)、展示界面、功能按钮 基本流程: 重点:数据放在内表里,临时表,放在内存里。 3、开发实战 按标题…

【Linux系统编程】31.pthread_detach、线程属性

目录 pthread_detach 参数pthread 返回值 测试代码1 测试结果 pthread_attr_init 参数attr 返回值 pthread_attr_destroy 参数attr 返回值 pthread_attr_setdetachstate 参数attr 参数detachstate 返回值 测试代码2 测试结果 线程使用注意事项 pthread_deta…

百度地图API 快速入门

一、创建一个应用 创建成功可以在应用程序中查看到自己的ak密钥 二、基本使用 2.1 显示地图 在static下创建demo1.html &#xff08;将密钥换成自己的就可以显示地图了&#xff09; 示例&#xff1a; <!DOCTYPE html> <html> <head><meta name"…

顺序表的实现(迈入数据结构的大门)(2)

目录 顺序表的头插(SLPushFront) 此时&#xff1a;我们有两个思路&#xff08;数组移位&#xff09; 顺序表的头删(学会思维的变换)(SLPopFront) 顺序表的尾插(SLPushBack) 有尾插就有尾删 既然头与尾部的插入与删除都有&#xff0c;那必然少不了指定位置的插入删除 查找…

特征提取与深度神经网络(二)

关键点/角点检测 2011论文-ORB关键点检测&#xff0c;比SIFT与SURF速度更快。 ORB算法可以看出两个部分组成&#xff1a;快速关键点定位BRIEF描述子生成 Fast关键点检测&#xff1a; 选择当前像素点P&#xff0c;阈值T&#xff0c;周围16个像素点&#xff0c;超过连续N12个像素…

Flutter笔记:Widgets Easier组件库 - 使用标签(Tag)

Flutter笔记 Widgets Easier组件库 - 使用标签&#xff08;Tag&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this …

电路板维修【一】

最近喜欢上了电路板维修&#xff0c;经常看很多博主的维修视频&#xff0c;觉得还是颇有收获的&#xff08;维修板子原来有方法可循&#xff09;&#xff0c;于是做笔记如下&#xff1a; 一.【修了半天也没找到问题&#xff0c;原来是检查方向错了&#xff0c;变频油烟机板维修…

LifeCycle之ProcessLifeCycleOwner

问题&#xff1a;想要知道应用程序当前处在前台、后台、或从后台回到前台&#xff0c;想要知道应用的状态&#xff0c; LifeCycle提供了ProcessLifeCycleOwner的类&#xff0c;方便我们知道整个应用程序的生命周期情况 ProcessLifeCycleOwner 使用方法 1.首先添加依赖 imple…

如何设置内网打印机端口网络穿透到公网

打印机是当前公司企业办公输出纸质文件处理过程中必不可少的工具设备。出差在外&#xff0c;我们经常会面对需要远程使用公司内部打印机复印或打印各种文件资料的情况&#xff0c;或不在家又需要远程访问家里打印机进行打印的情况。这时候&#xff0c;就必须学会远程打印的方法…