基于Javaweb实现ATM机系统开发实战(十四)交易记录分页实现

还是老规矩,先看前端页面查看需要传递哪些参数,并且把逻辑有问题的部分进行修改~

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%> 
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>IMUT_BANK ATM WelCome!!</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content=""><meta name="author" content=""><!-- Le styles --><script type="text/javascript" src="assets/js/jquery.min.js"></script><link rel="stylesheet" href="assets/css/style.css"><link rel="stylesheet" href="assets/css/loader-style.css"><link rel="stylesheet" href="assets/css/bootstrap.css"><link href="assets/css/icons-style.css" rel="stylesheet"><!-- HTML5 shim, for IE6-8 support of HTML5 elements --><!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]--><!-- Fav and touch icons --><link rel="shortcut icon" href="assets/ico/minus.png">
<!--     <style type="text/css">a{color: blue;}a: hover {color: Red;}</style> -->
</head><body><!-- Preloader --><div id="preloader"><div id="status">&nbsp;</div></div><!-- TOP NAVBAR --><nav role="navigation" class="navbar navbar-static-top"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button data-target="#bs-example-navbar-collapse-1" data-toggle="collapse" class="navbar-toggle" type="button"><span class="entypo-menu"></span></button><button class="navbar-toggle toggle-menu-mobile toggle-left" type="button"><span class="entypo-list-add"></span></button><div id="logo-mobile" class="visible-xs"><h1>IMUT ATM<span>v2.2.7</span></h1></div></div><!-- Collect the nav links, forms, and other content for toggling --><div id="bs-example-navbar-collapse-1" class="collapse navbar-collapse"><ul class="nav navbar-nav"><li class="dropdown"><ul style="margin: 11px 0 0 9px;" role="menu" class="dropdown-menu dropdown-wrap"></ul></li><li><a href="#"><i data-toggle="tooltip" data-placement="bottom" title="Help" style="font-size:20px;" class="icon-help tooltitle"></i></a></li></ul><div id="nt-title-container" class="navbar-left running-text visible-lg"><ul id="digital-clock" class="digital"><div id="time"><script>document.getElementById('time').innerHTML = new Date().toLocaleString()+ ' 星期' + '日一二三四五六'.charAt(new Date().getDay());setInterval("document.getElementById('time').innerHTML=new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",1000);</script>
</div></ul><ul id="nt-title"><li><i class="wi-day-lightning"></i>&#160;&#160;北京&#160;<b>24°</b><i class="wi-Celsius"></i>&#160;; </li><li><i class="wi-day-lightning"></i>&#160;&#160;上海&#160;<b>28°</b><i class="wi-Celsius"></i>&#160;;</li><li><i class="wi-day-lightning"></i>&#160;&#160;内蒙古&#160;<b>26°</b><i class="wi-Celsius"></i>&#160;;</li><li><i class="wi-day-lightning"></i>&#160;&#160;海南&#160;<b>31°</b><i class="wi-Celsius"></i>&#160;; </li><li><i class="wi-day-lightning"></i>&#160;&#160;四川&#160;<b>29°</b><i class="wi-Celsius"></i>&#160;; </li></ul></div><ul style="margin-right:0;" class="nav navbar-nav navbar-right"><li><a data-toggle="dropdown" class="dropdown-toggle" href="#"><img alt="" class="admin-pic img-circle" src="http://api.randomuser.me/portraits/thumb/men/10.jpg">欢迎您 <b class="caret"></b></a><ul style="margin-top:14px;" role="menu" class="dropdown-setting dropdown-menu"><li><a href="#"><span class="entypo-user"></span>&#160;&#160;我的账户</a></li><li><a href="#"><span class="entypo-vcard"></span>&#160;&#160;账户设置</a></li><li><a href="#"><span class="entypo-lifebuoy"></span>&#160;&#160;帮助</a></li><li class="divider"></li><li><a href="/changepage/login.jsp"><span class="entypo-user"></span>&#160;&#160; 退出账户</a></li></ul></li><li><a data-toggle="dropdown" class="dropdown-toggle" href="#"><span class="icon-gear"></span>&#160;&#160;背景颜色</a><ul role="menu" class="dropdown-setting dropdown-menu"><li class="theme-bg"><div id="button-bg"></div><div id="button-bg2"></div><div id="button-bg3"></div><div id="button-bg5"></div><div id="button-bg6"></div><div id="button-bg7"></div><div id="button-bg8"></div><div id="button-bg9"></div><div id="button-bg10"></div><div id="button-bg11"></div><div id="button-bg12"></div><div id="button-bg13"></div></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid --></nav><!-- /END OF TOP NAVBAR --><!-- SIDE MENU --><div id="skin-select"><div id="logo"><h1>IMUT ATM<span>v2.2.7</span></h1></h1></div><a id="toggle"><span class="entypo-menu"></span></a><div class="dark"><form action="#"><span><input type="text" name="search" value="" class="search rounded id_search" placeholder="Search Menu..." autofocus=""></span></form></div><div class="search-hover"><form id="demo-2"><input type="search" placeholder="Search Menu..." class="id_search"></form></div><div class="search-hover"><form id="demo-2"><input type="search" placeholder="Search Menu..." class="id_search"></form></div><div class="skin-part"><div id="tree-wrap"><div class="side-bar"><ul class="topnav menu-left-nest"></ul><ul class="topnav menu-left-nest"><li><a class="tooltip-tip2 ajax-load" href="/changepage/UserIndex.jsp" title="Profile Page"><i class="icon-user"></i><span>用户信息</span></a></li><li><a class="tooltip-tip" href="/changepage/UserChangePwd.jsp" title="Extra Pages"><i class="icon-lock"></i><span>修改密码</span></a><li><a class="tooltip-tip2 ajax-load" href="/UserSerch" title="Blank Page"><i class="icon-media-record"></i><span>查询余额</span></a></li><li><a class="tooltip-tip2 ajax-load" href="/changepage/UserStore.jsp" title="Invoice"><i class="entypo-newspaper"></i><span>存款</span></a></li><li><a class="tooltip-tip2 ajax-load" href="/changepage/UserFetch.jsp" title="Pricing Table"><i class="fontawesome-money"></i><span>取款</span></a></li><li><a class="tooltip-tip2 ajax-load" href="/changepage/UserTransfer.jsp" title="Time Line"><i class="entypo-clock"></i><span>转账</span></a></li><li><a class="tooltip-tip2" href="/serchDetaile" title="404 Error Page"><i class="icon-preview"></i><span>交易明细</span></a></li><li><a class="tooltip-tip2" href="/changepage/login.jsp" title="login.jsp"><i class="icon-mail"></i><span>退卡</span></a></li></ul></div></div></div></div><!-- END OF SIDE MENU --><!--  PAPER WRAP --><div class="wrap-fluid"><div class="container-fluid paper-wrap bevel tlbr"><!--/ TITLE --><!-- BREADCRUMB --><ul id="breadcrumb"><li><span class="entypo-home"></span></li><li><i class="fa fa-lg fa-angle-right"></i></li><li><a href="#" title="Sample page 1">首页</a></li><li><i class="fa fa-lg fa-angle-right"></i></li><li><a href="#" title="Sample page 1">交易明细</a></li></ul><!-- END OF BREADCRUMB --><div class="content-wrap"><div class="row"><div class="col-sm-12"><!-- BLANK PAGE--><h2 align="center"><b>IMUT BANK借记卡明细对账单</b></h2><%SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式request.setAttribute("date_time", df.format(new Date()));%><h4 align="center">打印日期:${date_time }</h4><div class="body-nest" id="Blank_Page_Content"><div class="form_center"></table> <table width="90%" border='2'><tr align="center"><br><br><th><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;卡&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></th><th><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></th><th><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;货&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;币&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></th><th><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;交&nbsp;&nbsp;易&nbsp;&nbsp;金&nbsp;&nbsp;额&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></th><th><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;账&nbsp;&nbsp;户&nbsp;&nbsp;余&nbsp;&nbsp;额&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></th></tr><c:forEach items="${pageBean.list }" var="user"><tr><td>${user.icno }</td><td>${user.rm_date }</td><td>${user.rm_currency }</td><td>${user.rm_balance }</td><td>${user.rm_rest }</td></tr></c:forEach></table>                </div></div></div></div><!-- END OF BLANK PAGE --></div>
<%-- ${requestScope.pageBean.pageNum == 1} --%>
<!-- <input hidden="true" name="pageNum" value="1"/> -->
<%-- <c:if test="${pageBean.pageNum==0}">${pageContext.request.contextPath}/serchDetaile?pageNum=1
</c:if> --%>
<div align="center">
<br/>
<br/>
<br/>
<!-- ---------------------------------------------------------------------------------------------------------- -->
<%-- 构建分页导航 --%><p style="font-size:20px; color:gray">共有${pageBean.totalRecord}条数据,共${pageBean.totalPage}页,当前为${pageBean.pageNum}页</p><br/><div style="font-size: 17px; color: black"><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=1" style="font-color: green">首页</a><%--如果当前页为第一页时,就没有上一页这个超链接显示 --%><c:if test="${pageBean.pageNum ==1}"><c:forEach begin="${pageBean.start}" end="${pageBean.end}" step="1" var="i"><c:if test="${pageBean.pageNum == i}">${i}</c:if>                <c:if test="${pageBean.pageNum != i}"><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${i}">${i}</a>                                        </c:if>                        </c:forEach><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${pageBean.pageNum+1}">下一页</a></c:if><%--如果当前页不是第一页也不是最后一页,则有上一页和下一页这个超链接显示 --%><c:if test="${pageBean.pageNum > 1 && pageBean.pageNum < pageBean.totalPage}"><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${pageBean.pageNum-1}">上一页</a><c:forEach begin="${pageBean.start}" end="${pageBean.end}" step="1" var="i">    <c:if test="${pageBean.pageNum == i}">${i}</c:if>            <c:if test="${pageBean.pageNum != i}"><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${i}">${i}</a>                                        </c:if>                        </c:forEach><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${pageBean.pageNum+1}">下一页</a>    </c:if><%-- 如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有 --%><c:if test="${pageBean.pageNum!=1 &&pageBean.pageNum == pageBean.totalPage}"><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${pageBean.pageNum-1}">上一页</a><c:forEach begin="${pageBean.start}" end="${pageBean.end}" step="1" var="i"><c:if test="${pageBean.pageNum == i}">${i}</c:if><c:if test="${pageBean.pageNum != i}"><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${i}">${i}</a>                                        </c:if>                </c:forEach></c:if><%--尾页 --%><a href="${pageContext.request.contextPath}/serchDetaile?pageNum=${pageBean.totalPage}">尾页</a></div><!-- /END OF CONTENT --><!-- ---------------------------------------------------------------------------------------------------------------- -->
</div><!-- FOOTER --><div class="footer-space"></div><div id="footer"><div class="devider-footer-left"></div><div class="time"><p id="spanDate"><p id="clock"></div><div class="copyright">本网站基于百度查询开发 <a href="http://www.baidu.com/" title="百度" target="_blank">百度</a> All Rights Reserved</div><div class="devider-footer"></div></div><!-- / END OF FOOTER --></div></div><!--  END OF PAPER WRAP --><!-- RIGHT SLIDER CONTENT --><div class="sb-slidebar sb-right"><div class="right-wrapper"><div class="row"><h3><span><i class="entypo-gauge"></i>&nbsp;&nbsp;MAIN WIDGET</span></h3><div class="col-sm-12"><div class="widget-knob"><span class="chart" style="position:relative" data-percent="86"><span class="percent"></span></span></div><div class="widget-def"><b>Distance traveled</b><br><i>86% to the check point</i></div><div class="widget-knob"><span class="speed-car" style="position:relative" data-percent="60"><span class="percent2"></span></span></div><div class="widget-def"><b>The average speed</b><br><i>30KM/h avarage speed</i></div><div class="widget-knob"><span class="overall" style="position:relative" data-percent="25"><span class="percent3"></span></span></div><div class="widget-def"><b>Overall result</b><br><i>30KM/h avarage Result</i></div></div></div></div><div style="margin-top:0;" class="right-wrapper"><div class="row"><h3><span><i class="entypo-chat"></i>&nbsp;&nbsp;CHAT</span></h3><div class="col-sm-12"><span class="label label-warning label-chat">Online</span><ul class="chat"><li><a href="#"><span><img alt="" class="img-chat img-circle" src="http://api.randomuser.me/portraits/thumb/men/20.jpg"></span><b>Dave Junior</b><br><i>Last seen : 08:00 PM</i></a></li><li><a href="#"><span><img alt="" class="img-chat img-circle" src="http://api.randomuser.me/portraits/thumb/men/21.jpg"></span><b>Kenneth Lucas</b><br><i>Last seen : 07:21 PM</i></a></li><li><a href="#"><span><img alt="" class="img-chat img-circle" src="http://api.randomuser.me/portraits/thumb/men/22.jpg"></span><b>Heidi Perez</b><br><i>Last seen : 05:43 PM</i></a></li></ul><span class="label label-chat">Offline</span><ul class="chat"><li><a href="#"><span><img alt="" class="img-chat img-offline img-circle" src="http://api.randomuser.me/portraits/thumb/men/23.jpg"></span><b>Dave Junior</b><br><i>Last seen : 08:00 PM</i></a></li><li><a href="#"><span><img alt="" class="img-chat img-offline img-circle" src="http://api.randomuser.me/portraits/thumb/women/24.jpg"></span><b>Kenneth Lucas</b><br><i>Last seen : 07:21 PM</i></a></li><li><a href="#"><span><img alt="" class="img-chat img-offline img-circle" src="http://api.randomuser.me/portraits/thumb/men/25.jpg"></span><b>Heidi Perez</b><br><i>Last seen : 05:43 PM</i></a></li><li><a href="#"><span><img alt="" class="img-chat img-offline img-circle" src="http://api.randomuser.me/portraits/thumb/women/25.jpg"></span><b>Kenneth Lucas</b><br><i>Last seen : 07:21 PM</i></a></li><li><a href="#"><span><img alt="" class="img-chat img-offline img-circle" src="http://api.randomuser.me/portraits/thumb/men/26.jpg"></span><b>Heidi Perez</b><br><i>Last seen : 05:43 PM</i></a></li></ul></div></div></div></div><!-- END OF RIGHT SLIDER CONTENT--><!-- MAIN EFFECT --><script type="text/javascript" src="assets/js/preloader.js"></script><script type="text/javascript" src="assets/js/bootstrap.js"></script><script type="text/javascript" src="assets/js/app.js"></script><script type="text/javascript" src="assets/js/load.js"></script><script type="text/javascript" src="assets/js/main.js"></script></div></body></html>

创建一个PageBean对象,封装这些数据:

package com.atm.pojo;
import java.util.List;public class PageBean<T> {private int pageNum;//当前页页码,从请求传过来private int pageSize; //每页显示的数据条数private int totalRecord;//总的记录条数,查询数据库得到的数据//需要计算得来private  int totalPage; //总页数 通过总条数和每页显示多少条计算得来private int startIndex;//从哪开始拿//把每页要显示的数据放集合里private  List<T> list;//分页显示的页数  1-5中的1和5private  int start;private int end;public int getPageNum() {return pageNum;}public void setPageNum(int pageNum) {this.pageNum = pageNum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalRecord() {return totalRecord;}public void setTotalRecord(int totalRecord) {this.totalRecord = totalRecord;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public int getStartIndex() {return startIndex;}public void setStartIndex(int startIndex) {this.startIndex = startIndex;}public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}public int getStart() {return start;}public void setStart(int start) {this.start = start;}public int getEnd() {return end;}public void setEnd(int end) {this.end = end;}public PageBean(int pageNum, int pageSize, int totalRecord){this.pageNum=pageNum;this.pageSize=pageSize;this.totalRecord=totalRecord;//totalpage 总页数if(totalRecord%pageSize==0){//说明整除,正好每页显示pagesize条数据this.totalPage=totalRecord/pageSize;}else{//不整除,就要多加一页,显示多余的数据this.totalPage=totalRecord/pageSize+1;}//开始索引this.startIndex=(pageNum-1)*pageSize;this.start=1;this.end=5;if(totalPage<=5){this.end=this.totalPage;}else{this.start=pageNum-2;this.end=pageNum+2;if(start<=0){//比如当前页是第一页,或者第二页,就不如和这个规则this.start=1;this.end=5;}if(end >=this.totalPage){//比如当前页是倒数第二页或者最后一页,也同样不符合上面这个规则this.end=totalPage;this.start=end-4;}}}}

之前我们把查询交易明细的代码都写到Userservice中了,其实应该写到RunMessageService中,对应的数据层和实现类也是同样的操作~

然后对交易记录的Servlet进行修改,插入分页功能:

package com.atm.servlet;import com.atm.pojo.PageBean;
import com.atm.pojo.RunMessage;
import com.atm.pojo.User;
import com.atm.service.RunMessageService;
import com.atm.service.UserService;
import com.atm.service.impl.RunMessageServiceImpl;
import com.atm.service.impl.UserServiceImpl;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;//查询交易记录
@WebServlet("/serchDetaile")
public class SerchDetaileServlet extends HttpServlet {private RunMessageService runMessageService=new RunMessageServiceImpl();@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {User user =(User)request.getSession().getAttribute("ua");try {//分页处理//获得页码String pageNum=request.getParameter("pageNum");int page=1;if(pageNum!=null){page=Integer.parseInt(pageNum);}//每页显示的条数int pagesize=5;//计算分页的总条数int totalRecord= runMessageService.countRunmessage(user.getIcno());//封装pagebean对象PageBean<RunMessage> pageBean=new PageBean<>(page,pagesize,totalRecord);//查询当前页的数据,并设置到pageBean中返回List<RunMessage> lists =runMessageService.findRunMessageByPage(user.getIcno(),page,pagesize);pageBean.setList(lists);request.getSession().setAttribute("pageBean",pageBean);response.sendRedirect("/changepage/UserDetaile.jsp");} catch (Exception e) {e.printStackTrace();}}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}

接口:

    //查询交易记录总条数public  int countRunmessage(String icno) throws Exception{return runMessageDao.countRunMessage(icno);}//查询当前页数据public List<RunMessage> findRunMessageByPage(String icno,int page, int pagesize)   throws Exception{return runMessageDao.findRunMessageByPage(icno,page,pagesize);}

数据层:

//用户交易记录总条数public int countRunMessage(String icno)  throws Exception{Connection connection=DBUtils.getConnection();PreparedStatement preparedStatement = connection.prepareStatement("select count(1) from runmessage where icno=?");preparedStatement.setString(1,icno);ResultSet rs=  preparedStatement.executeQuery();int totalRecord=0;if (rs.next()){totalRecord=rs.getInt(1);}DBUtils.release(connection,preparedStatement,null);return totalRecord;}//查询当前页的交易记录public List<RunMessage> findRunMessageByPage(String icno,int page, int pagesize) throws Exception {Connection connection=DBUtils.getConnection();int startIndex =(page-1)*pagesize;PreparedStatement preparedStatement = connection.prepareStatement("select * from runmessage where icno=? limit ?,?");preparedStatement.setString(1,icno);preparedStatement.setInt(2,startIndex);preparedStatement.setInt(3,pagesize);ResultSet rs=  preparedStatement.executeQuery();List<RunMessage> lists=new ArrayList<>();while (rs.next()){RunMessage runMessage=new RunMessage();runMessage.setId(rs.getInt(1));runMessage.setIcno(rs.getString(2));runMessage.setRm_date(rs.getString(3));runMessage.setRm_currency(rs.getString(4));runMessage.setRm_balance(rs.getDouble(5));runMessage.setRm_rest(rs.getDouble(6));lists.add(runMessage);}DBUtils.release(connection,preparedStatement,null);return lists;}

再随便添加几条数据方便测试效果:

 重启一下系统,然后就发现功能实现啦!~

 实现代码已上传~

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

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

相关文章

自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配&#xff0c;用于找到与查询语句最相似的文本。NLP中的文本匹配是指通过计算文本之间的相似度来找到与查询语句最相似的文本。其中一种常用的方法是基于文本…

AcrelEMS企业微电网能效管理平台实现用户侧智能配电和智能用电管理-安科瑞黄安南

摘要&#xff1a;随着科技的发展&#xff0c;电力系统正逐步向智能化、数字化、互联网化迈进。智能配电与智能用电是电力产业发展的重要方向&#xff0c;将为传统电力系统带来革命性的变革。本文将对智能配电和智能用电的概念、特点、关键技术及应用进行详细介绍。 1、智能配电…

数据结构初阶--带头双向循环链表

目录 一.带头双向循环链表的定义 二.带头双向循环链表的功能实现 2.1.带头双向循环链表的定义 2.2.带头双向循环链表的结点创建 2.3.带头双向循环链表的初始化 2.4.带头双向循环链表的打印 2.5.带头双向循环链表的判空 2.6.带头双向循环链表的尾插 2.7.带头双向循环链…

白皮书|数字孪生工厂:成就智能制造的未来

前言 目前我国已经进入“技术应用”的数字孪生双驱动时代&#xff0c;在市场需求和国家政策的推动下&#xff0c;各地因地制宜发展数字孪生技术&#xff0c;深入开展数字孪生应用建设。今天我们就重点来聊一聊数字孪生技术在工厂中的应用&#xff0c;希望通过本次案例的深度剖析…

深“扒”云原生高性能分布式文件系统JuiceFS

JuiceFS 是一款面向云原生设计的高性能分布式文件系统&#xff0c;在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性&#xff0c;可将几乎所有对象存储接入本地作为海量本地磁盘使用&#xff0c;亦可同时在跨平台、跨地区的不同主机上挂载读写。 JuiceFS 简介 JuiceFS…

推荐几款不错的AI绘画工具

随着近年来数据、算法等核心技术的不断进步&#xff0c;人工智能在内容创作各垂直领域的比例不断增加&#xff0c;包括人工智能写作、人工智能编辑和最近流行的人工智能绘画。 许多朋友也想跟上潮流&#xff0c;使用人工智能绘画生成软件创建人工智能图像&#xff0c;但我不知…

手机变局2023:一场瞄准产品和技术的“思维革命”

以折叠屏冲高端&#xff0c;已成为中国手机厂商们的共识。 在这个苹果未涉足的领域&#xff0c;国产手机厂商们加快脚步迭代推新&#xff0c;积极抢占机遇。但平心而论&#xff0c;虽然国产折叠屏机型众多&#xff0c;但市场上始终缺乏一款突破性的产品作为标杆&#xff0c;为…

数据结构【树】

第五章 树 一、树 1.定义&#xff1a;n个结点的集合&#xff0c;n0为空树&#xff1b;是递归的&#xff0c;是一种逻辑结构&#xff0c;同时也是一种分层结构&#xff1b; 特点 树的根结点没有前驱结点&#xff0c;除了根结点外的所有结点有且只有一个前驱结点&#xff1b;树…

Clion开发STM32之W5500系列(综合实验)

说明 此为w5500模块的综合实验测试模块,包含dhcp、dns、ntp以上三个模块的驱动参考之前的文章&#xff0c;本篇不做说明.使用的开发芯片 stm32f103vet6系列,外设接口使用的spi2 实验内容: 通过dhcp动态获取ip,通过dns解析NTP服务域名的ip通过NTP服务ip获取时间 w5500配置驱…

学生护眼台灯几瓦最舒适?2023全新五款护眼台灯推荐

每次经过学校&#xff0c;发现戴眼镜的小学生真的不少&#xff0c;通过近几年的儿童以及青少年的近视人数可看出&#xff0c;我国的近视人数中&#xff0c;儿童以及青少年占比53.5%&#xff0c;所以许多家长逐渐重视孩子用眼健康问题&#xff0c;会选择护眼台灯用于孩子写作业和…

第1章 获取数据库中的数据

CoreShop源程序是以数据库优先进行定义的&#xff0c;所以其本身不包含代码优先的定义&#xff0c;但本从更习惯于代码优先&#xff0c;所以为其定义了代码优先的定义。 1 CoreCms.Net.Model.Entities.SysRole using SqlSugar; using System.ComponentModel.DataAnnotations…

【JavaEE初阶】Tomcat安装与使用及初识Servlet

文章目录 1. Tomcat的安装与使用1.1 Tomcat安装1.2 Tomcat的启动1.3 Tomcat部署前端页面 2. Servlet2.1 Servlet是什么2.2 第一个Servlet程序2.3 常见错误 1. Tomcat的安装与使用 1.1 Tomcat安装 在浏览器中搜索Tomcat,打开官方网页.Tomcat官网 点击下载Tomcat8. 点击下载压…

PSP - 使用 MMseqs2 工具快速搜索蛋白质序列数据库 (GMGC)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131934642 MMseq2 是非常强大和高效的生物信息学软件&#xff0c;可以在极短的时间内对大规模的核苷酸和蛋白质序列进行搜索和聚类。主要特点有&a…

fpga_pwm呼吸灯(EP4CE6F17C8)

文章目录 一、呼吸灯二、代码实现三、引脚分配 一、呼吸灯 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化&#xff0c;使用开发板上的四个led灯实现1s间隔的呼吸灯。 二、代码实现 c module pwm_led( input clk ,input rst_n ,output reg [3:0] led ); …

c++网络编程:Boost.asio源码剖析

1、前言 Boost库是一个可移植、提供源代码的C库&#xff0c;作为标准库的后备&#xff0c;是C标准化进程的开发引擎之一。Boost库由C标准委员会库工作组成员发起&#xff0c;其中有些内容有望成为下一代C标准库内容。在C社区中影响甚大&#xff0c;是不折不扣的“准”标准库。…

未来行星探索希望:新型多脚机器人-团队版

机器人正在探索一个模拟的外星环境 即使一个机器人失败了&#xff0c;其余的团队成员也可以抵消它的损失。 背景 虽然探测器取得了令人难以置信的发现&#xff0c;但它们的轮子可能会拖慢它们的速度&#xff0c;而不稳定的地形可能会导致损坏。虽然没有东西可以取代“毅力号”…

Vue3输入框(Input)

APIs 参数说明类型默认值必传width输入框宽度string | number‘100%’falseaddonBefore设置前置标签string | slot‘’falseaddonAfter设置后置标签string | slot‘’falseallowClear可以点击清除图标删除内容booleanfalsefalsepassword是否启用密码框booleanfalsefalsedisabl…

两个小封装电机驱动芯片:MLX813XX、A4950

一&#xff0e;MLX813XX MELEXIS的微型电机驱动MLX813XX系列芯片集成MCU、预驱动以及功率模块等能够满足10W以下的电机驱动。 相对于普通分离器件的解决方案&#xff0c;MLX813XX系列电机驱动芯片是一款高集成度的驱动控制芯片&#xff0c;可以满足汽车系统高品质和低成本的要…

Spring Boot实践一

一、Spring Boot简介 Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它提供了一种快速、方便的方式来创建基于Spring的应用程序&#xff0c;而无需繁琐的配置。Spring Boot通过自动配置和约定大于配置的方式&#xff0c;使得开发者可以更加专注于业务逻辑的实现&…

【CEEMDAN-WOA-LSTM】完备集合经验模态分解-鲸鱼优化-长短时记忆神经网络研究(Python代码实现)

目录 &#x1f4a5;1 概述 1.1 完备集合经验模态分解原理 1.2 鲸鱼优化 1.3 LSTM &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Python代码实现 &#x1f4a5;1 概述 1.1 完备集合经验模态分解原理 早期的 EMD 方法具有较强的自适应性&#xff0c;能够有…