当前位置: 首页 > news >正文

民宿管理系统5

管理员管理:

新增管理员信息:

前端效果:

前端代码:

<body>
<div class="layui-fluid"><div class="layui-row"><div class="layui-form"><div class="layui-form-item"><label for="loginname" class="layui-form-label"><span class="x-red">*</span>登录名</label><div class="layui-input-inline"><input type="text" id="loginname" name="loginname" lay-verify="required|loginname" class="layui-input"></div></div><div class="layui-form-item"><label for="L_loginpassword" class="layui-form-label"><span class="x-red">*</span>设置登录密码</label><div class="layui-input-inline"><input type="password" id="L_loginpassword" name="loginpassword" lay-verify="required|loginpassword" class="layui-input"></div></div><div class="layui-form-item"><label for="L_confirmloginpassword" class="layui-form-label"><span class="x-red">*</span>确认密码</label><div class="layui-input-inline"><input type="password" id="L_confirmloginpassword" name="confirmloginpassword" lay-verify="required|confirmloginpassword" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label"></label><button class="layui-btn" lay-filter="submit" lay-submit="">保存</button></div></div></div>
</div><script>layui.use(['form', 'layer', 'upload'], function () {$ = layui.jquery;var form = layui.form,upload = layui.upload,layer = layui.layer;//自定义验证规则form.verify({loginname: function (value) {var code;$.ajax({url: "/admin/checkloginname",type: "GET",async: false,  //关闭异步,当success返回结果后才执行ajax之后的内容data: {"loginname": value},success: function (s) {code = s;}});if (code != true) {return '登录名重复,请重新输入!';}},loginpassword: [/(.+){6,12}$/, '密码必须6到12位'],confirmloginpassword: function () {if ($('#L_confirmloginpassword').val() != $('#L_loginpassword').val()) {return '两次密码不一致';}}});//监听提交form.on('submit(submit)', function (data) {console.log(data.field);$.ajax({url: "/admin/addadmin",type: "post",data: data.field,success: function (s) {if (s == true) {layer.alert("新增管理员信息成功!", {icon: 6}, function () {parent.layer.closeAll();parent.location.href = "/admin/sysindex";});} else {layer.msg("登录名重复!", function () {});}},error: function () {layer.msg("接口异常!", function () {});}});});});
</script></body>

后端代码:

AdminController:
/*** 新增管理员页面*/@GetMapping("/addadminpage")public String addadminpage() {return "admin/addadminpage";}/*** 新增管理员,判断新增管理员登录名是否重复*/@GetMapping("/checkloginname")@ResponseBodypublic boolean checkaddadminloginname(@RequestParam("loginname") String loginname) {return adminService.checkaddadminloginname(loginname);}/*** 新增管理员信息*/@PostMapping("/addadmin")@ResponseBodypublic boolean addadmin(@RequestParam("loginname") String loginname,@RequestParam("loginpassword") String loginpassword,@RequestParam("confirmloginpassword") String confirmloginpassword) {return adminService.addadmin(loginname,loginpassword);}
AdminService:
/*** 新增管理员,判断新增管理员登录名是否重复*/boolean checkaddadminloginname(String loginname);/*** 新增管理员*/boolean addadmin(String loginname, String loginpassword);
AdminServicelpml:
/*** 新增管理员,判断新增管理员登录名是否重复*/@Overridepublic boolean checkaddadminloginname(String loginname) {Admin admin = adminMapper.selectaddadminloginname(loginname);return admin==null;}/*** 新增管理员*/@Overridepublic boolean addadmin(String loginname, String loginpassword) {Admin admin=new Admin();admin.setGname(loginname);admin.setGpassword(loginpassword);Admin admin1=adminMapper.selectaddadminloginname(loginname);if(admin1==null)return adminMapper.addadmin(admin);else return false;
AdminMapper:
/*** 新增管理员,判断新增管理员登录名是否重复*/Admin selectaddadminloginname(@Param("loginname")String loginname);/*** 新增管理员*/boolean addadmin(Admin admin);
AdminMapper.xml:
 <select id="selectaddadminloginname" resultType="com.homestay.pojo.Admin">select gname from adminwhere gname=#{loginname}</select><insert id="addadmin">insert into admin(gname,gpassword)values (#{gname,jdbcType=VARCHAR},#{gpassword,jdbcType=VARCHAR})</insert>

测试:

登录名重复:

必填项为空:

两次密码不一样:

新增成功:

管理员分页查询:

前端效果:

前端代码:

<body>
<div class="layui-fluid"><div class="layui-row layui-col-space15"><div class="layui-col-md12"><div class="layui-card"><div class="layui-card-body "><form class="layui-form layui-col-space5"><div class="layui-inline layui-show-xs-block"><input type="text" name="dname" placeholder="管理员名称" autocomplete="off" class="layui-input"></div><div class="layui-inline layui-show-xs-block"><button class="layui-btn" lay-submit="" lay-filter="search_btn"><i class="layui-icon">&#xe615;</i></button></div><a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="reload();" title="刷新"><i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a></form></div><div class="layui-card-body "><table id="departmenList" lay-filter="departmenList"></table></div></div></div></div>
</div><script type="text/html" id="departmenListBar"><a class="layui-btn layui-btn-xs" lay-event="edit" >编辑</a>
<!--    <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>-->
</script><script type="text/javascript" th:inline="javascript">layui.use(['form', 'layer', 'table'], function () {var form = layui.form,layer = layui.layer,$ = layui.jquery,table = layui.table;var tableIns = table.render({elem: '#departmenList',url: '/admin/pagequaryadmin',method: 'get',title: '管理员列表',page: true,  //开启分页height: "full-110",  //高度最大化减去差值110,高度将始终铺满// toolbar: true,  //开启工具栏limit:10,  //每页显示的条数limits: [5,10,20,30],  //每页条数的选择项cols:[[{type: 'checkbox', field: 'gid', fixed: "left"},{field: 'gid', title: '管理员id', align: "center", unresize: "true"},{field: 'gname', title: '管理员名称', align: 'center', unresize: "true"},{field: 'gpassword',title: '管理员密码',align: 'center',unresize: true,hide: true  // 关键设置:隐藏列},{title: '操作', align: "center", unresize: "true", toolbar: "#departmenListBar"}]]});//搜索form.on('submit(search_btn)', function (data) {tableIns.reload({url: '/admin/listbyname',where: data.field, page: {curr: 1 //重新从第 1 页开始}});return false;});//监听工具条table.on('tool(departmenList)', function (obj) {var data = obj.data, //获得当前行数据layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)switch (layEvent) {case 'del':layer.confirm('确定删除此管理员?', {icon: 3, title: '提示信息'}, function (index) {$.post("/admin/department/delete",{"gid": data.gid}, function (s) {layer.msg(s.msg);});layer.close(index);tableIns.reload();});break;// case 'edit'://     xadmin.open('管理员编辑', '/admin/checkadminpasswordpage?gid=' + data.gid, 450, 300);//     break;case 'edit':// 构建传递的参数var params = {gid: data.gid,gname: data.gname,gpassword: data.gpassword};// 将参数转换为查询字符串var queryString = $.param(params);// 打开弹窗layer.open({type: 2,title: '管理员编辑',area: ['450px', '300px'],content: '/admin/checkadminpasswordpage?' + queryString});break;default:break;}});});function reload() {$.get("/admin/reload", function (data) {if (data) {location.reload();} else {parent.location.reload();}});}
</script>
</body>

后端代码:

AdminController:
/*** 编辑管理员页面*/@GetMapping("/updateadminpage")public String updateadminnpage() {return "admin/updateadminpage";}/*** 管理员分页查询* @return*/@GetMapping("/pagequaryadmin")@ResponseBodypublic Result pagequaryadmin(@RequestParam Map<String,Object> map) {int page = Integer.parseInt(map.get("page").toString());int limit = Integer.parseInt(map.get("limit").toString());int start=(page-1)*limit;return adminService.getadminList(start,limit);}
AdminService:
/*** 管理员分页查询* @param start* @param limit* @return*/Result getadminList(int start, int limit);
AdminServicelpml:
/*** 管理员分页查询* @param start* @param limit* @return*/@Overridepublic Result getadminList(int start, int limit) {int totaladmin=adminMapper.getTotaladmin();//获取管理员总数List<Admin> adminList=adminMapper.findadminList(start, limit);//获取管理员数据Result result = new Result();result.setCode(0);result.setMsg("查询成功");result.setCount(totaladmin);result.setData(adminList);return result;}
AdminMapper:
/*** 获取管理员总数* @return*/int getTotaladmin();/*** 获取管理员数据* @param start* @param limit* @return*/List<Admin> findadminList(@Param("start")int  start,@Param("limit") int limit);
AdminMappe.xml:
 <select id="getTotaladmin" resultType="java.lang.Integer">select count(*) from admin</select><select id="findadminList" resultType="com.homestay.pojo.Admin">select<include refid="Base_Column_List"></include>from adminorder by gidlimit #{start},#{limit}</select>

测试:

选择5页:

选择10页:

搜索框模糊查询:

后端代码:

AdminController:

/*** 模糊查询* @param map* @return*/@GetMapping("/listbyname")@ResponseBodypublic Result listbyname(@RequestParam Map<String,Object> map) {int page = Integer.parseInt(map.get("page").toString());int limit = Integer.parseInt(map.get("limit").toString());int start=(page-1)*limit;String dname=map.get("dname").toString();return adminService.listbyname(start,limit,dname);}

AdminService:

/*** 模糊查询* @param start* @param limit* @param dname* @return*/Result listbyname(int start, int limit, String dname);

AdminServicelpml:

/*** 模糊查询* @param start* @param limit* @param dname* @return*/@Overridepublic Result listbyname(int start, int limit, String dname) {int totaladmin=adminMapper.getTotaladminbyname(dname);//获取管理员总数List<Admin> adminList=adminMapper.findadminListbyname(start, limit,dname);//获取管理员数据Result result = new Result();result.setCode(0);result.setMsg("查询成功");result.setCount(totaladmin);result.setData(adminList);return result;}

AdminMapper:

 /*** 模糊查询获取总数* @param dname* @return*/int getTotaladminbyname(@Param("dname") String dname);/*** 模糊查询* @param start* @param limit* @param dname* @return*/List<Admin> findadminListbyname(@Param("start")int  start,@Param("limit") int limit, @Param("dname") String dname);

AdminMapper.xml:

    <select id="getTotaladminbyname" resultType="java.lang.Integer">select count(*)from adminwhere gname like concat('%',#{dname},'%')</select><select id="findadminListbyname" resultType="com.homestay.pojo.Admin">select <include refid="Base_Column_List"></include>from adminwhere gname like concat('%',#{dname},'%')order by gidlimit #{start},#{limit}</select>

测试:

编辑、删除管理员:

需要输入该管理员密码才能进行编辑信息,包括删除该管理员

前端效果:

检查管理员密码:

密码正确后:

前端代码:

检查密码页面:

<body>
<div class="layui-fluid"><div class="layui-row"><div class="layui-form"><div class="layui-form-item"><label for="gid" class="layui-form-label"><span class="x-red">*</span>管理员id: </label><div class="layui-input-inline"><input type="text" id="gid" name="gid"  class="layui-input" readonly="readonly" th:value="${session.gid}"></div></div><div class="layui-form-item"><label for="adminpassword" class="layui-form-label"><span class="x-red">*</span>输入管理员密码</label><div class="layui-input-inline"><input type="password" id="adminpassword" name="adminpassword" lay-verify="required" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label"></label><button class="layui-btn" lay-filter="submit" lay-submit="">确定</button></div></div></div>
</div><script>layui.use(['form', 'layer', 'jquery'], function () {var form = layui.form,layer = layui.layer,$ = layui.jquery;form.on('submit(submit)', function (data) {var loadingIndex = layer.load(1);$.ajax({url: "/admin/checkadminpassword",type: "POST",data: data.field,dataType: "json",success: function (response) {layer.close(loadingIndex);// 调试输出console.log('验证响应:', response);// 兼容两种响应格式if ((response && response.success) || response === true) {layer.msg("验证成功", {icon: 1, time: 1000}, function() {// 解决方案1:直接使用top窗口的xadmintop.xadmin.open('修改管理员', '/admin/updateadmin');// 解决方案2:先关闭当前弹窗再打开新窗口var index = parent.layer.getFrameIndex(window.name);parent.layer.close(index);setTimeout(function() {top.xadmin.open('修改管理员', '/admin/updateadmin',300,300);}, 300);});} else {layer.msg(response.message || "密码错误");}},error: function(xhr) {layer.close(loadingIndex);console.error('请求失败:', xhr.responseText);layer.msg("请求失败: " + (xhr.responseJSON?.message || xhr.statusText));}});return false;});});
</script></body>

编辑页面:

<body >
<div class="layui-fluid"  style="padding: 65px;"><div class="layui-row"><div class="layui-form"><div class="layui-form-item"><label for="gid" class="layui-form-label"><span class="x-red">*</span>管理员id: </label><div class="layui-input-inline"><input type="text" id="gid" name="gid"  class="layui-input" readonly="readonly" th:value="${session.gid}"></div></div><div class="layui-form-item"><label for="newadminname" class="layui-form-label" >新登录名</label><div class="layui-input-inline"><input type="text" id="newadminname" name="newadminname" class="layui-input"  th:value="${session.adminname}"></div></div><div class="layui-form-item"><label for="L_newPwd" class="layui-form-label"><span class="x-red">*</span>新密码</label><div class="layui-input-inline"><input type="password" id="L_newPwd" name="newgpassword" lay-verify="required|newgpassword" class="layui-input" th:value="${session.adminpassword}"></div><div class="layui-form-mid layui-word-aux">6到16个字符</div></div><div class="layui-form-item"><label for="L_confirmPwd" class="layui-form-label"><span class="x-red">*</span>确认密码</label><div class="layui-input-inline"><input type="password" id="L_confirmPwd" name="confirmPwd" lay-verify="required|confirmPwd" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label"></label><button class="layui-btn" lay-filter="submit" lay-submit="">保存</button><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除管理员</a></div></div></div>
</div><script>layui.use(['form', 'layer', 'upload'], function () {$ = layui.jquery;var form = layui.form,upload = layui.upload,layer = layui.layer;// 删除按钮点击事件$('.layui-btn-danger').on('click', function() {layer.confirm('确定删除此管理员?', {icon: 3, title: '提示信息'}, function (index) {$.post("/admin/delete",{"gid": $('#gid').val()},function (success) {  // 直接接收布尔值if (success) {layer.msg('删除成功', {icon: 1});// 删除成功后刷新父窗口setTimeout(function() {xadmin.father_reload();}, 1000);} else {layer.msg('删除失败', {icon: 2});}});layer.close(index);});return false; // 阻止默认行为});//自定义验证规则form.verify({newgpassword: [/(.+){6,12}$/, '密码必须6到12位'],confirmPwd: function () {if ($('#L_newPwd').val() != $('#L_confirmPwd').val()) {return '两次密码不一致';}}});//监听提交form.on('submit(submit)', function (data) {console.log(data.field);$.ajax({url: "/admin/updateadmininformation",type: "post",data: data.field,success: function (s) {if (s == true) {layer.alert("修改成功!", {icon: 6}, function () {parent.layer.closeAll();});} else {layer.msg("登录名重复,修改失败!", function () {});}},error: function () {layer.msg("接口异常!", function () {});}});});});
</script>
</body>

后端代码:

AdminController:

/*** 编辑管理员,检查密码页面*/@GetMapping("/checkadminpasswordpage")public String checkadminpasswordpage(@RequestParam("gid") String gid,@RequestParam("gname")String gname,@RequestParam("gpassword")String gpassword, HttpSession session) {session.setAttribute("gid",gid);session.setAttribute("adminname",gname);session.setAttribute("adminpassword",gpassword);return "admin/updatecheckadminpasswordpage";}/*** 检查密码*/@PostMapping("/checkadminpassword")@ResponseBodypublic boolean checkadminpassword(@RequestParam("gid") String gid,@RequestParam("adminpassword") String adminpassword) {return adminService.checkadminpassword(gid,adminpassword);}/*** 跳转修改弹窗* @return*/@GetMapping("/updateadmin")public String updateadmin() {return "admin/updateadmin";}/*** 修改管理员信息* @param gid* @param newgpassword* @param newadminname* @return*/@PostMapping("/updateadmininformation")@ResponseBodypublic boolean updateadmininformation(@RequestParam("gid")String gid,@RequestParam("newgpassword")String newgpassword,@RequestParam("newadminname")String  newadminname ) {return adminService.updateadmininformation(gid,newgpassword,newadminname);}/*** 删除管理员*/@PostMapping("/delete")@ResponseBodypublic boolean delete(@RequestParam("gid")String gid) {return adminService.deleteadmin(gid);}@GetMapping("/reload")@ResponseBodypublic boolean reload() {return true;}

AdminService:

/*** 编辑管理员时,检查密码* @param gid* @param adminpassword* @return*/boolean checkadminpassword(String gid, String adminpassword);/*** 修改管理员信息* @param gid* @param newgpassword* @param newadminname* @return*/boolean updateadmininformation(String gid, String newgpassword, String newadminname);/*** 删除管理员* @param gid* @return*/boolean deleteadmin(String gid);

AdminServicelpml:

/*** 编辑管理员时,检查密码* @param gid* @param adminpassword* @return*/@Overridepublic boolean checkadminpassword(String gid, String adminpassword) {String gpassword=adminMapper.selectaddminpassword(gid);if(adminpassword.equals(gpassword))return true;else return false;}/*** 修改管理员信息* @param gid* @param newgpassword* @param newadminname* @return*/@Overridepublic boolean updateadmininformation(String gid, String newgpassword, String newadminname) {//检查登录名是否重复try {int count=adminMapper.countadminid(gid,newadminname);if(count>0){throw  new RuntimeException("登录名重复");}}catch (RuntimeException e) {return false;}//没有重复修改信息adminMapper.updateadmininformation(gid,newadminname,newgpassword);return true;
}/*** 删除管理员* @param gid* @return*/@Overridepublic boolean deleteadmin(String gid) {return adminMapper.deleteadmin(gid);}

AdminMapper:

/*** 编辑管理员时,检查密码是否正确* @param gid* @return*/String selectaddminpassword(String gid);/*** 检查登录名是否重复* @param gid* @param newadminname* @return*/int countadminid(@Param("gid") String gid,@Param("newadminname") String newadminname);/*** 修改信息* @param gid* @param newadminname* @param newgpassword*/void updateadmininformation(@Param("gid") String gid,@Param("newadminname") String newadminname,@Param("newgpassword") String newgpassword);/*** 删除管理员* @param gid* @return*/boolean deleteadmin(String gid);

AdminMapper.xml:

 <select id="selectaddminpassword" resultType="java.lang.String">select gpasswordfrom adminwhere gid=#{gid}</select><select id="countadminid" resultType="java.lang.Integer">select count(*)from adminwhere gid!=#{gid} and gname=#{newadminname}</select><update id="updateadmininformation">update adminsetgpassword=#{newgpassword},gname=#{newadminname}where gid=#{gid}</update><delete id="deleteadmin">delete from adminwhere gid = #{gid,jdbcType=INTEGER}</delete>

测试:

检查密码错误:

正确后:

提示:

密码两次不一样

登录名重复:

删除:

相关文章:

民宿管理系统5

管理员管理&#xff1a; 新增管理员信息&#xff1a; 前端效果&#xff1a; 前端代码&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-form-i…...

AI日报 · 2025年5月05日|雅诗兰黛与微软合作成立 AI 创新实验室,加速美妆产品研发与营销

1、苹果与 Anthropic 深化合作&#xff0c;内部测试 AI 驱动的新版 Xcode 据多方报道&#xff0c;苹果公司正与人工智能初创公司 Anthropic 合作&#xff0c;开发集成 AI 功能的新一代 Xcode 开发平台。该平台旨在利用 Anthropic 强大的 Claude Sonnet 模型&#xff0c;为开发…...

Matlab实现基于CNN-GRU的锂电池SOH估计

Matlab实现基于CNN-GRU的锂电池SOH估计 目录 Matlab实现基于CNN-GRU的锂电池SOH估计效果一览基本介绍程序设计参考资料 效果一览 基本介绍 锂电池SOH估计&#xff01;基于CNN-GRU的锂电池健康状态估计。CNN-GRU模型通过融合局部特征提取与长期依赖建模&#xff0c;显著提升了锂…...

神经网络在专家系统中的应用:从符号逻辑到连接主义的融合创新

自人工智能作为一个学科面世以来&#xff0c;关于它的研究途径就存在两种不同的观点。一种观点主张对人脑的结构及机理开展研究&#xff0c;并通过大规模集成简单信息处理单元来模拟人脑对信息的处理&#xff0c;神经网络是这一观点的代表。关于这方面的研究一般被称为连接机制…...

【Hive入门】Hive安全管理与权限控制:基于SQL标准的授权GRANT REVOKE深度解析

目录 引言 1 Hive权限模型概述 2 SQL标准授权基础 2.1 核心概念解析 2.2 授权模型工作流程 3 GRANT/REVOKE语法详解 3.1 基础授权语法 3.2 权限回收语法 3.3 参数说明 4 授权场景 4.1 基础授权示例 4.2 列级权限控制 4.3 视图权限管理 5 权限查询与验证 5.1 查看…...

详解RabbitMQ工作模式之发布订阅模式

目录 发布订阅模式 概念 概念介绍 特点和优势 应用场景 注意事项 代码案例 引入依赖 常量类 编写生产者代码 编写消费者1代码 运行代码 发布订阅模式 概念 RabbitMQ的发布订阅模式&#xff08;Publish/Subscribe&#xff09;是一种消息传递模式&#xff0c;它允许消…...

JobHistory Server的配置和启动

在 Hadoop 集群里&#xff0c;JobHistory Server&#xff08;JHS&#xff09;负责为所有已完成的 MapReduce 作业提供元数据与 Web 可视化&#xff1b;只有它启动并配置正确&#xff0c;开发者才能通过 http://<host>:19888 查看作业的执行详情、计数器和任务日志…...

刷leetcodehot100返航版--哈希表5/5

回顾一下之前做的哈希&#xff0c;貌似只有用到 unordered_set&#xff1a;存储无序元素unordered_map&#xff1a;存储无序键值对 代码随想录 常用代码模板2——数据结构 - AcWing C知识回顾-CSDN博客 1.两数之和5/5【30min】 1. 两数之和 - 力扣&#xff08;LeetCode&…...

【STM32 学习笔记】GPIO输入与输出

GPIO详解 一、GPIO基本概念 GPIO&#xff08;通用输入输出&#xff09;是微控制器与外部设备交互的核心接口&#xff0c;具有以下特性&#xff1a; 可编程控制输入/输出模式支持数字信号的读取与输出集成多种保护机制复用功能支持片上外设连接 二、GPIO位结构解析 2.1 保护二…...

网狐飞云娱乐三端源码深度实测:组件结构拆解与部署Bug复盘指南(附代码分析)

本文基于“网狐系列三网通飞云娱乐电玩”源码包&#xff0c;从项目结构、界面逻辑、三端兼容性、机器人机制、本地部署实践等多维角度进行全面剖析&#xff0c;并附录多个真实报错修复案例与源码片段。本组件适用于本地学习、框架研究与技术测试&#xff0c;不具备线上部署条件…...

HTML5好看的水果蔬菜在线商城网站源码系列模板9

文章目录 1.设计来源1.1 主界面1.2 商品界面1.3 购物车界面1.4 心愿列表界面1.5 商品信息界面1.6 博客界面1.7 关于我们界面1.8 联系我们界面1.9 常见问题界面1.10 登录界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&…...

【ArcGIS Pro微课1000例】0066:多边形要素添加折点,将曲线线段(贝塞尔、圆弧和椭圆弧)替换为线段?

文章目录 增密工具介绍举例1. 圆2. 椭圆3. 折线增密工具介绍 ArcGIS Pro中提供了【增密】工具,作用是: 沿线或多边形要素添加折点。还可将曲线线段(贝塞尔、圆弧和椭圆弧)替换为线段。 原理图如下所示: 用法: 通过距离参数对直线段进行增密。利用距离、最大偏转角或最大…...

虚拟dom是什么,他有什么好处

本编&#xff0c;博主将从虚拟dom是什么引出&#xff0c;为什么需要虚拟dom&#xff0c; 虚拟dom的益处 &#xff0c; 为什么需要Diff算法&#xff0c;for循环中key的作用是什么。 1.虚拟dom是什么 虚拟dom就是以js对象的形式表示真实dom结构 例如 const newVNode {type: di…...

算力经济模型推演:从中心化到去中心化算力市场的转变(区块链+智能合约的算力交易原型设计)

一、算力经济的历史脉络与范式转移 1.1 中心化算力市场的演进困境 传统算力市场以超算中心、云计算平台为核心载体&#xff0c;其运营模式呈现强中心化特征。中国移动构建的"四算融合"网络虽实现百万级服务器的智能调度&#xff0c;但动态资源分配仍受制于集中式控…...

数据结构之二叉树(4)

&#xff08;注&#xff1a;本文所示代码均为C&#xff09; 一.二叉树选择题 根据二叉树的性质&#xff0c;完成以下选择题: &#xff08;1&#xff09;第一组 某二叉树共有 399 个结点&#xff0c;其中有 199 个度为 2 的结点&#xff0c;则该二叉树中的叶子结点数为&am…...

互联网与无线广播:数字时代与模拟时代的通讯双轨制-优雅草卓伊凡

互联网与无线广播&#xff1a;数字时代与模拟时代的通讯双轨制-优雅草卓伊凡 一、无线广播&#xff1a;穿越百年的电磁波通讯 1.1 无线广播的技术本质 当卓伊凡深入研究无线广播技术后&#xff0c;发现这套诞生于19世纪末的通讯系统蕴含着惊人的智慧。无线广播本质上是一种单…...

Java 集合线程安全

在高并发环境下&#xff0c;Java集合ArrayList和HashMap读写可能会出现安全问题。其中有几个解决办法&#xff1a; 使用Collections类方法Collections.synchronizedList和Collections.synchronizedMap在Java并发包中提供了CopyOnWriteArrayList和ConcurrentHashMap类 一、Arr…...

解决 Builroot 系统编译 perl 编译报错问题

本文提供一种修复 Builroot 系统编译 perl 编译报错途径 2025-05-04T22:45:08 rm -f pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/ln -s perldelta.pod pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/gcc -c -DPERL_CORE -fwrapv -fpcc-struct-return -pipe -f…...

理解计算机系统_并发编程(1)_并发基础和基于进程的并发

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 并发是一种非常重要的机制,用于处理多个指令流.特别是在网…...

详细案例,集成算法

以下是一个使用 随机森林&#xff08;RF&#xff09; 和 XGBoost 解决结构化数据分类问题的完整案例&#xff08;以泰坦尼克号生存预测为例&#xff09;&#xff0c;包含数据处理、建模和结果分析&#xff1a; 案例&#xff1a;泰坦尼克号乘客生存预测 目标&#xff1a;根据乘客…...

57认知干货:AI机器人产业

机器人本质上由可移动的方式和可交互万物的机构组成,即适应不同环境下不同场景的情况,机器人能够做到根据需求调整交互机构和移动方式。因此,随着人工智能技术的发展,AI机器人的产业也将在未来逐步从单一任务的执行者,发展为能够完成复杂多样任务的智能体。 在未来的社会…...

谷歌 NotebookLM 支持生成中文播客

谷歌 NotebookLM 支持生成中文播客。 2025 年 4 月 29 日&#xff0c;NotebookLM 宣布其 “音频概览”&#xff08;Audio Overviews&#xff09;功能新增 76 种语言支持&#xff0c;其中包括中文。用户只需将文档、笔记、研究材料等上传至 NotebookLM&#xff0c;然后在设置中选…...

【MySQL数据库】用户管理

目录 1&#xff0c;用户信息 2&#xff0c;创建/删除/修改用户 3&#xff0c;数据库的权限 MySQL数据库安装完之后&#xff0c;我们最开始时使用的都是 root 用户&#xff0c;其它用户通常无法进行操作。因此&#xff0c;MySQL数据库需要对用户进行管理。 1&#xff0c;用户…...

杜教筛原理,实现与时间复杂度分析

引例 洛谷 P4213 【模板】杜教筛 题目描述 给定一个正整数&#xff0c;求 a n s 1 ∑ i 1 n φ ( i ) ans_1\sum_{i1}^n\varphi(i) ans1​i1∑n​φ(i) a n s 2 ∑ i 1 n μ ( i ) ans_2\sum_{i1}^n \mu(i) ans2​i1∑n​μ(i) 输入格式 本题单测试点内有多组数据。 输入的…...

【时时三省】(C语言基础)怎样定义和引用一维数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 一维数组是数组中最简单的&#xff0c;它的元素只需要用数组名加一个下标&#xff0c;就能唯一地确定。如上面介绍的学生成绩数组s就是一维数组。有的数组&#xff0c;其元素要指定两个下标才…...

二叉搜索树的最近祖先(递归遍历)

235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; class Solution { private:TreeNode*traversal(TreeNode*cur,TreeNode*p,TreeNode*q){if(curNULL){return NULL;}if(cur->val>p->val&&cur->val>q->val){TreeNode*lefttrave…...

蘑菇管理——AI与思维模型【94】

一、定义 蘑菇管理思维模型是一种形象地描述组织对待新员工或初入职场者的管理方式及相关现象的思维模型。它将新员工或初入职场者比作蘑菇&#xff0c;这些人在初期往往被置于阴暗的角落&#xff08;不受重视的部门&#xff0c;或打杂跑腿的工作&#xff09;&#xff0c;浇上…...

Uni-app 组件使用

在前端开发领域&#xff0c;能够高效地创建跨平台应用是开发者们一直追求的目标。Uni-app 凭借其 “一次开发&#xff0c;多端部署” 的特性&#xff0c;成为了众多开发者的首选框架。而组件作为 Uni-app 开发的基础单元&#xff0c;合理运用组件能够极大地提升开发效率和代码的…...

湖北理元理律师事务所:债务优化的合规化探索

在债务处置领域&#xff0c;合法性与有效性往往难以兼得。湖北理元理律师事务所通过标准化服务流程设计&#xff0c;尝试在二者间建立平衡点&#xff0c;其经验为行业提供了可参考的实践样本。 四阶服务模型 1.合规审查 核查债务来源合法性&#xff0c;重点筛查&#xff1a; …...

PISI:眼图1:眼图相关基本概念

0 英文缩写 TIE&#xff08;Time Interval Error&#xff09;时间间隔误差&#xff0c;UI&#xff08;Unit Interval&#xff09;单位间隔PDF&#xff08;Probability Density Function&#xff09;概率密度函数BER&#xff08;Bit Error Rate&#xff09;误码率TJ&#xff08…...

初试C++报错并解决记录

初试C报错并解决记录 报错开始解决问题记录1、考虑应该是没有指定dll位置 无法打开.lib文件1. 应该是没有包含Lib文件 问题解决➡ C 文件需要添加路径的位置记录&#xff1a; 显示调用dll文件位置注意问题解决➡调用位置&#xff1a; 调用人家的.h文件的方法&#xff08;项目使…...

Android运行时ART加载类和方法的过程分析

目录 一,概述 二,ART运行时的入口 一,概述 既然ART运行时执行的都是翻译DEX字节码后得到的本地机器指令了&#xff0c;为什么还需要在OAT文件中包含DEX文件&#xff0c;并且将它加载到内存去呢&#xff1f;这是因为ART运行时提供了Java虚拟机接口&#xff0c;而要实现Java虚…...

【力扣刷题记录】hot100错题本(一)

1. 简单题 我的答案&#xff1a;时间复杂度过高&#xff1a;O(N^3) class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for num in nums:if (target - num) in nums:#多余for i in range(len(nums)):if nums[i] num :for j in range(i1,len(nu…...

Android运行时ART加载OAT文件的过程

目录 一,概述 1.1 OAT是如何产生的 一,概述 OAT文件是一种Android私有ELF文件格式&#xff0c;它不仅包含有从DEX文件翻译而来的本地机器指令&#xff0c;还包含有原来的DEX文件内容。这使得我们无需重新编译原有的APK就可以让它正常地在ART里面运行&#xff0c;也就是我们不…...

Python读取comsol仿真导出数据并绘图

文章目录 comsol数据导出python读取文件python绘制云图python进一步分析数据 完整代码 当我们使用comsol&#xff0c;ansys等仿真工具进行仿真后&#xff0c;难免需要对仿真结果进行导出并进一步处理分析。 今天小姜以comsol的一个简单磁场仿真为例&#xff0c;详细介绍如何对c…...

cloudfare+gmail 配置 smtp 邮箱

这里介绍有一个域名后&#xff0c;不需要服务器&#xff0c;就可以实现 cloudfare gmail 的 邮箱收发。 为什么还需要 gmail 的 smtp 功能&#xff0c;因为 cloudfare 默认只是对 email 进行转发&#xff0c;就是只能收邮件而不能发送邮件&#xff0c;故使用 gmail 的功能来进…...

【翻译、转载】使用 LLM 构建 MCP

资料来源&#xff1a; https://modelcontextprotocol.io/tutorials/building-mcp-with-llms 本文仅仅是翻译。 使用 LLM 构建 MCP 利用 Claude 等大型语言模型&#xff08;LLM&#xff09;加速您的 MCP 开发&#xff01; 本指南将帮助您使用 LLM 来构建自定义的模型上下文协…...

Python速成系列二

文章目录 Python 条件语句与循环结构详解一、条件语句&#xff08;if-elif-else&#xff09;1. 基本 if 结构2. if-else 结构3. if-elif-else 结构4. 嵌套条件语句5. 三元表达式&#xff08;条件表达式&#xff09; 二、循环结构1. while 循环2. for 循环3. 循环控制语句break …...

基于STM32的心电图监测系统设计

摘要 本论文旨在设计一种基于 STM32 微控制器的心电图监测系统&#xff0c;通过对人体心电信号的采集、处理和分析&#xff0c;实现对心电图的实时监测与显示。系统采用高精度的心电信号采集模块&#xff0c;结合 STM32 强大的数据处理能力&#xff0c;能够有效去除噪声干扰&a…...

线程池的线程数配置策略

目录 1. CPU密集型任务 2. IO密集型任务 3. 混合型任务 1. CPU密集型任务 特点&#xff1a;任务主要消耗CPU资源&#xff08;如计算、加密、压缩&#xff09;。 推荐线程数&#xff1a; 线程数 ≈ 物理核心数 1 / CPU - 1&#xff08;不知道哪个√&#xff09; 例如&#…...

分享一个Android中文汉字手写输入法并带有形近字联想功能

最近我写了一个Android版本的中文汉字手写输入法功能&#xff0c;并实现了汉字形近字联想功能&#xff0c;此手写输入法功能完全满足公司的需求。 之前小编用Android SurfaceView&#xff0c;运用canvas的Path画坐标轨迹&#xff0c;并结合使用一个叫汉王输入法的so库来识别手…...

C语言:文件操作

文件的概念 文件是计算机用于存储数据的工具&#xff0c;我们计算机磁盘上的数据是混乱的&#xff0c;但是我们计算机系统通过文件的方式记录数据在磁盘上的位置来将数据整齐划分。 文件的类型 文件有两种类型&#xff0c;数据文件与程序文件 程序文件是用来执行的文件&#…...

2024年第十五届蓝桥杯省赛B组Python【 简洁易懂题解】

2024年第十五届蓝桥杯省赛B组Python题解 一、整体情况说明 2024年第十五届蓝桥杯省赛B组Python组考试共包含8道题目&#xff0c;分为结果填空题和程序设计题两类。 考试时间&#xff1a;4小时编程环境&#xff1a;Python 3.x&#xff0c;禁止使用第三方库&#xff0c;仅可使…...

线程与进程深度解析:从fork行为到生产者-消费者模型

线程与进程深度解析&#xff1a;从fork行为到生产者-消费者模型 一、多线程环境下的fork行为与线程安全 1. 多线程程序中fork的特殊性 核心问题&#xff1a;fork后子进程的线程模型 当多线程程序中的某个线程调用fork时&#xff1a; 子进程仅包含调用fork的线程&#xff1…...

2025年第十六届蓝桥杯省赛B组Java题解【完整、易懂版】

2025年第十六届蓝桥杯省赛B组Java题解 题型概览与整体分析 题目编号题目名称题型难度核心知识点通过率&#xff08;预估&#xff09;A逃离高塔结果填空★☆☆数学规律、模运算95%B消失的蓝宝结果填空★★★同余定理、中国剩余定理45%C电池分组编程题★★☆异或运算性质70%D魔法…...

【NTN 卫星通信】NTN关键问题的一些解决方法(一)

1 概述 3GPP在协议23.737中对一些卫星通信需要面对的关键问题进行了探讨&#xff0c;并且讨论了初步的解决方法&#xff0c;继续来看看这些内容把。   问题包括&#xff1a; 1、大型卫星覆盖区域的移动性管理 2、移动卫星覆盖区域的移动性管理 3、卫星延迟 4、卫星接入的QoS …...

C++基础算法9:Dijkstra

1、概念 Dijkstra算法 是一种用于计算图中单源最短路径的算法&#xff0c;主要用于加权图&#xff08;图中边的权重可以不同&#xff09;中找出从起点到各个其他节点的最短路径。 Dijkstra算法的核心概念&#xff1a; 图的表示&#xff1a; 有向图&#xff1a;图的边是有方…...

5块钱的无忧套餐卡可以变成流量卡吗

电信的 5 块钱无忧套餐卡理论上可以变成流量卡&#xff0c;但会受到一些条件限制&#xff0c;以下是具体介绍&#xff1a; 中国电信无忧卡简介 中国电信无忧卡是电信推出的低月租套餐&#xff0c;月租仅 5 元&#xff0c;包含 200M 国内流量、来电显示和 189 邮箱&#xff0c;全…...

word页眉去掉线

直接双击页眉处于下面状态&#xff1a; 然后&#xff1a; 按CtrlshiftN即可&#xff01;去除...

Spark,Idea中编写Spark程序 2

Idea中编写Spark程序 一、修改pom.xml文件 <build><sourceDirectory>src/main/scala</sourceDirectory><testSourceDirectory>src/test/scala</testSourceDirectory> <!-- 添加必要的插件以打包scala程序--><plugins><plu…...