组件技术--设计--jsp+servlet+bean+MySQL 简单的登录注册案例

news2025/2/2 4:53:34

JavaBean+MySQL+jsp+servlet 简单的登录注册案例

  • 登录注册案例需求
      • 核心
      • 系统组成
    • Javaweb项目框架
      • 基本思想
    • Bean
      • counter
      • User
    • Dao
      • UserDao
    • servlet
      • LoginCl
    • jsp
      • index.jsp
      • LoginServlet.jsp
      • register.jsp
      • registerMessage.jsp
      • welcome.jsp
    • target
      • pom.xml
    • WEB-INF
      • web.xml

登录注册案例需求

本项目利用Java中的DAO类(data access object)来访问数据库。用过滤器实现session的检查以此防止用户非法登录,并使用过滤器通过cookie进行检查其登录是否与数据库信息正确。成功登录页面包含用户账号密码,计数器即第几次登录,返回重新登录的跳转链接,上次访问时间。

核心

1.将数据库查询的代码写在DAO内,然后用jsp调用DAO。DAO通过查询得到相应的结果,返回给用户。

2.将VO(value object)配合DAO来使用,在DAO中可以每查询到一条记录就将其封装为ursert对象,该对象属于VO。最后将所有实例化的VO 存放在集合内返回。这样就可以实现层次分开,降低耦合度。

数据库需要MySQL来存储用户的注册信息以及后续登录等的调用。
MySQL下载配置好后,可以直接在编辑器(我这里用的IDE,eclipse也可以)如下图建立并连接数据库进行编辑。当然也可以在MySQL里面建好架构,然后建表编辑数据也可以。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

系统组成

本系统由4个可视界面组成:
1.运行系统,显示登录主页面。附有输入验证码和选择两周内免登陆,以及注册,登录按钮。
在这里插入图片描述

2.新用户点击注册后会显示注册界面,填入用户账号,登录密码,性别,家乡,爱好(多选)信息,点击注册。
在这里插入图片描述
在这里插入图片描述

3.提交后会跳转至注册信息管理界面,显示用户成功注册的信息,并将内容传递给,MySQL数据库,在登录时内部查询并调用。(记住或保存密码,在两周内免登陆时候可以用)
在这里插入图片描述
在这里插入图片描述

4.点击返回登录界面,输入注册过的信息,此时会调用数据库已经保存的cookie信息,跳转至成功登录的界面。(输入错误或未输入完整会若点击登录会跳转至空白界面)
在这里插入图片描述
在这里插入图片描述

Javaweb项目框架

在这里插入图片描述

基本思想

本项目主要思想:
(1)基于MVC模式。思想步骤主要是:
用户在表单中输入,将表单提交给servlet,servlet验证输入,然后实例化Javabean。
Javabean查询数据库,查询结果暂存在Javabean中。
Servlet跳转到jsp,jsp使用Javabean,得到它里面的查询结果,并显示出来。
(2)在register.jsp页面可以保存多个注册用户,并将数据保存到MySQL连接的数据库中。
(3)注册时利用DAO查询数据库中的记录,判断用户名是否存在,不存在可注册。
(4)注册成功后,跳转到登录LoginServlet.jsp页面。
(5)取出cookie里面的值,进行判断,若用户输入的用户名和密码匹配成功则成功登录。

Bean

counter

通过Bean封装计数器信息

package Bean;

public class Counter {
    private int count=1;
    public Counter(){}
    public int getCount() {
        return count++;
    }

    public void setCount(int count) {
        this.count = count;
    }
}

User

通过Bean封装用户信息

package Bean;

public class User {
    private String name;
    private String pd;
    public User(){}
    public String getPd() {
        return pd;
    }
    public void setPd(String pd) {
        this.pd = pd;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Dao

UserDao

负责通过数据库查询用户信息

package Dao;
        import java.sql.*;
        import java.util.ArrayList;

public class UserDao {
    public boolean SearchUser(String u,String p) throws SQLException {
        PreparedStatement preparedStatement = null;
        ResultSet rs =null;
        Connection con = null;
        //启动mysql驱动器
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/webdatabase?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false", "root", "123456");
            String sql = "select * from usert where username=? and password=?";
            preparedStatement = con.prepareStatement(sql);
            preparedStatement.setString(1, u);
            preparedStatement.setString(2, p);
            rs = preparedStatement.executeQuery();
            if(rs.next()){
                return true;
            }
            else {
                return false;
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            if(rs!=null) {
                rs.close();
            }
            if(preparedStatement!=null) {
                preparedStatement.close();
            }
            if(con!=null){
                con.close();
            }
        }
        return false;
    }

    public void insertUser(String u,String p) throws SQLException {
        ArrayList users=new ArrayList();
        PreparedStatement preparedStatement = null;
        Connection con = null;
        //启动mysql驱动器
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/webdatabase?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false", "root", "123456");
            preparedStatement = con.prepareStatement("insert into usert values(?,?)");
            preparedStatement.setString(1,u);
            preparedStatement.setString(2,p);
            preparedStatement.executeUpdate();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            if(con!=null) {
                con.close();
            }
            if(preparedStatement!=null) {
                preparedStatement.close();
            }
        }
    }
}

servlet

LoginCl

servlet类,session防止用户非法登录,获取验证码并通过数据库检查是否正确登录

package servlet;
import Dao.UserDao;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.sql.*;
@WebServlet("/LoginCl")
public  class LoginCl extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
        //中文乱码解决方法
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        //防止非法登录    得到session
        HttpSession httpSession = request.getSession(true);
        //修改session的存在时间为20s
        httpSession.setMaxInactiveInterval(20);
        httpSession.setAttribute("pass", "ok");
        //获取用户名的账号和密码
        String u = null;
        //针对jsp 其username为username1
        u = request.getParameter("username1");
        String p = null;
        p = request.getParameter("passwd");
        //得到提交的验证码
        String code = request.getParameter("code");
        //获取session验证码
        HttpSession session = request.getSession();
        String randStr = (String) session.getAttribute("randStr");
        //获取到
        if (code.equals(randStr)) {
            //访问数据库
            UserDao userDao=new UserDao();
            try {
                if (!userDao.SearchUser(u,p)) {
                    response.getWriter().println("<a href=LoginServlet.jsp>抱歉:账号或密码错误,请注意核实信息重新输入</a>");
                    return;
                } else {
                    String keep = request.getParameter("keep");
                    if (keep != null) {
                        //创建cookie
                        Cookie cookie1 = new Cookie("username", u);
                        Cookie cookie2 = new Cookie("password", p);
                        //设置关联路径
                        cookie1.setPath(request.getContextPath());
                        cookie2.setPath(request.getContextPath());
                        //设置cookie的消亡时间  两周
                        cookie1.setMaxAge(2 * 7 * 24 * 60 * 60);
                        cookie1.setMaxAge(2 * 7 * 24 * 60 * 60);
                        //把cookie信息写给浏览器
                        response.addCookie(cookie1);
                        response.addCookie(cookie2);
                    }
                    response.sendRedirect("welcome.jsp?uname=" + URLEncoder.encode(u, "utf-8") + "&password=" + p);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
        this.doGet(request,response);
    }
}

jsp

index.jsp

提供验证码并点击刷新

<script type="text/javascript">
  function refresh() {
  src="index.jsp?id="+Math.random();
  }
</script>
<%@ page contentType="charset=UTF-8" language="java"
         import ="java.awt.*"
         import ="java.awt.image.BufferedImage"
         import="java.util.*"
         import="javax.imageio.ImageIO"
         pageEncoding="gb2312"%>
<%
  response.setHeader("Cache-Control","no-cache");
//在内存中创建图像
  int width=60,height=20;
  BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  //获取画笔
  Graphics g=image.getGraphics();
  //设置背景色
  g.setColor(new Color(200,200,200));
  g.fillRect(0,0,width,height);
  //取随机产生的验证码(4位数字)
  Random rnd=new Random();
  int randNum=rnd.nextInt(8999)+1000;
  String randStr=String.valueOf(randNum);
  //将验证码存入session
  session.setAttribute("randStr",randStr);
  //将验证码显示到图像中
  g.setColor(Color.black);
  g.setFont(new Font("", Font.PLAIN,20));
  g.drawString(randStr,10,17);
  //随机产生100个干扰点,使图像中的验证码不易被其他程序探测到
  for (int i = 0; i < 100; i++) {
    int x=rnd.nextInt(width);
    int y=rnd.nextInt(height);
    g.drawOval(x,y,1,1);
  }
  //输出图像到页面
  ImageIO.write(image,"JPEG",response.getOutputStream());
  out.clear();
  out=pageContext.pushBody();

%>

LoginServlet.jsp

登录页面,成功登录跳转到welcome.jsp主页面

<%@ page import="java.net.URLEncoder" %>
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8" language="java" %>
<html>
<head>
  <title>LoginServlet</title>
</head>
<body>
<script type="text/javascript">
  function validate() {
    if(login.username1.value===""){
      alert("账号不能为空");
      return;
    }
    if(login.passwd.value===""){
      alert("密码不能为空");
      return;
    }
    if(login.code.value===""){
      alert("请输入正确的验证码");
      return;
    }
    login.submit();
  }
  function refresh() {
    login.imgValidate.src="index.jsp?id="+Math.random();
  }
</script>
<%   response.setCharacterEncoding("utf-8"); %>
<form name="login" action="/LoginCl" method="post">
  用户名:<input type="text" name="username1"><br>
  密码:<input type="password" name="passwd"><br>
  <input type="checkbox" name="keep" >两周内免登陆<br>
  验证码:<input type="text" name="code" size=10>
  <%--点击图片可进行验证码刷新--%>
  <img name="imgValidate" src = "index.jsp" onclick="refresh()" ><br>
  <%--注意此处的button和submit的区别--%>
  <input type="button" value="登录"  onclick="validate()">
  <%
    String username = null;
    String password = null;
    Cookie[] cookies = request.getCookies();
    for (int i = 0; i < cookies.length; i++) {
      if ("username".equals(cookies[i].getName())) {
        username = cookies[i].getValue();
      } else if ("password".equals(cookies[i].getName())) {
        password = cookies[i].getValue();
      }
    }
    if (username != null && password != null) {
      response.sendRedirect("welcome.jsp?uname=" +URLEncoder.encode(username,"utf-8")+ "&password=" + password);
    }
  %>
</form>
<form action="register.jsp" method="post">
  <input  type="submit" value="注册">
</form>
</body>
</html>

register.jsp

注册页面,注册成功,将用户信息传递给数据库

<%@ page language="java" pageEncoding="gb2312" %>
<html>
<head>
    <title>register</title>
</head>
<body>
<h1>欢迎您进行注册</h1>
<script language="JavaScript" type="text/javascript">
    function checkPassword() {
        var ps=/^[A-Za-z0-9]{6,20}$/;
        if (!ps.exec(register.password1.value)) {
            alert("密码必须同时包含大小写字母和数字且长度应该在6-20之间");
            return;
        }
        register.submit();
    }
</script>
<form name="register" action="registerMessage.jsp" method="post">
    请输入账号:<input type="text" name="name"><br>
    请输入密码(要求:必须包含大小写英文和数字无非法字符,长度大于6位小于20):<input type="password" name="password1"><br>
    请选择性别:<input name="sex" type="radio" value="男" checked><input name="sex" type="radio" value="女" ><br>
    请选择家乡:<select name="home" >
    <option value="北京">北京</option>
    <option value="上海">上海</option>
    <option value="陕西">陕西</option>
</select>
    <br>
    请选择您的爱好:<input name="fav" type="checkbox" value="唱歌">唱歌
    <input name="fav" type="checkbox" value="跳舞">跳舞
    <input name="fav" type="checkbox" value="打球">打球
    <input name="fav" type="checkbox" value="玩游戏">玩游戏<br>
    <input type="button" value="注册" onclick="checkPassword()">
</form>
</body>
</html>

registerMessage.jsp

注册成功跳转用户信息展示页面

<%@ page import="java.sql.*" %>
<%@ page import="Dao.UserDao" %>
<%@ page language="java" pageEncoding="gb2312" %>
<html>
<head>
    <title>message</title>
</head>
<body>
<h2>信息注册成功!!!注册信息如下:</h2>
<%
    request.setCharacterEncoding("gb2312");
    String name=request.getParameter("name");
    String password=request.getParameter("password1");
    String sex = request.getParameter("sex");
    String home = request.getParameter("home");
    out.println("账号:"+name);
    out.println("密码:"+password);
    out.println("性别:"+sex);
    out.println("家乡:"+home);
    out.println("兴趣爱好:");
    String[] fav = request.getParameterValues("fav");
    for (int i = 0; i < fav.length; i++) {
        out.print(fav[i]+" ");
    }
    try {
        UserDao userDao=new UserDao();
        userDao.insertUser(name,password);
        out.println("<a href=LoginServlet.jsp>您的信息注册成功,请点击此处进行登录!!!</a>");
    } catch (SQLException e) {
        e.printStackTrace();
    }
%>
</body>
</html>

welcome.jsp

登陆成功跳转到主界面

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=gb2312" pageEncoding="gb2312" language="java" import="Bean.*"
%>
<%@ page import="java.net.URLDecoder" %>
<html>
<head>
  <title>welcome</title>
</head>
<body>
<%
  request.setCharacterEncoding("gb2312");
  HttpSession httpSession=request.getSession(true);
  String val=(String)httpSession.getAttribute("pass");
  if(val==null){
    response.sendRedirect("LoginServlet.jsp");
  }
%>
<jsp:useBean id="mycount" class="Bean.Counter" scope="session"/>
<jsp:useBean id="user" class="Bean.User" scope="session">
  <jsp:setProperty name="user"  property="name" param="uname"/>
  <jsp:setProperty name="user" property="pd" param="password"/>
</jsp:useBean>
<h1>主界面</h1>
<%--welcome name =<%=u%>  password =<%=p%><br>--%>
<%--welcome name :<jsp:getProperty name="user" property="name" />--%>
welcome name :
<%
  out.println(URLDecoder.decode(user.getName(),"utf-8"));
%>
password:<jsp:getProperty  name="user" property="pd" /><br>

<%--welcome name :<%out.println(session.getAttribute("username"));%>
password:<%out.println(session.getAttribute("password"));%><br>--%>
<%--这是你第:<%=counter%>次访问本网站!<br>--%>
这是你第:<jsp:getProperty name="mycount" property="count"/>
次访问本网站!<br>
<a href='LoginServlet.jsp'>返回重新登录</a><br>
<%
  Cookie[] cookies = request.getCookies();
  if(cookies!=null) {
    for (int i = 0; i < cookies.length; i++) {
      if (cookies[i].getName().equals("lastAccessTime")) {
        out.println("您上次访问的时间是:");
        Long lastAccessTime = Long.parseLong(cookies[i].getValue());
        Date date = new Date(lastAccessTime);
        out.println(date.toLocaleString());
      }
    }
  }
  //用户访问过后重新设置用户的访问时间,存储在cookie中,然后发送到客户端浏览器
  Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+"");
  //设置cookie的有效期为5min
  cookie.setMaxAge(300);
  //将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时
  // 就会把cookie也输入到客户端浏览器
  response.addCookie(cookie);
%>
</body>
</html>

target

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   https://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.companyname.bank</groupId>
    <artifactId>consumerBanking</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>consumerBanking</name>
    <url>https://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

    </dependencies>
</project>

WEB-INF

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">
    <display-name>Welcome to Tomcat</display-name>
    <description> Welcome to Tomcat </description>
    <!--在该位置添加关于一个信息 -->
    <servlet>
        <servlet-name> LoginCl </servlet-name>
        <servlet-class>servlet.LoginCl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name> LoginCl </servlet-name>
        <url-pattern>/LoginCl</url-pattern>
    </servlet-mapping>

</web-app>

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

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

相关文章

【论文阅读笔记】CycleISP: Real Image Restoration via Improved Data Synthesis

论文地址&#xff1a;https://arxiv.org/abs/2003.07761 代码地址&#xff1a;https://github.com/swz30/CycleISP 论文小结 总的来说&#xff0c;就是现实世界中无法获取有效的图像对。且之前合成噪声的方式是在sRGB上添加高斯白噪声&#xff0c;但对于相机传感器成像管道来说…

工控CTF之协议分析7——OMRON

协议分析 流量分析 主要以工控流量和恶意流量为主&#xff0c;难度较低的题目主要考察Wireshark使用和找规律&#xff0c;难度较高的题目主要考察协议定义和特征 简单只能简单得干篇一律&#xff0c;难可以难得五花八门 常见的工控协议有&#xff1a;Modbus、MMS、IEC60870、…

同源策略跨域

目录1.同源策略限制的意义1.请求协议 均为 http2.主机此这为 localhost3.端口号不同 一个 8080 一个 50002.注意3.解决跨域代理服务器 80801.同源策略限制的意义 让前端发送的请求不能随意访问其他端口的服务器&#xff0c;一定程度保护服务器和用户的隐私 1.请求协议 均为 …

nexus上传jar包

nexus上传自定义starter1、普通jar包和springboot的starter1.1、starter上传简介1.2、上传方法2.1.1、setting.xml文件2.1.2、项目中的pom文件1.3、具体部署2、父pom文件上传这里我们主要讲解两种&#xff0c;一种是jar包上传&#xff0c;包含普通jar包和springboot的starter包…

jmeter简单压力测试

测试目的&#xff1a;10个用户并发访问一个接口&#xff08;http://127.0.0.1:8080/dfm/login.action&#xff09;&#xff0c;能否正常响应。 一、打开JMeter 二、右击“测试计划”&#xff0c;添加线程组 三、设置线程组的线程数 JMeter中的线程组&#xff0c;类似于LoadRunn…

RCTFweb复现

文章目录filechecker_minieasy_uploadfilechecker_plusfilechecker_pro_maxezbypassezruoyifilechecker_mini 给了附件&#xff0c;代码比较短&#xff0c;先审计一下。 在这里发现了file –b命令&#xff0c;且filepath部分可控&#xff0c;明显的ssti漏洞&#xff0c;没过…

Clickhouse引擎之kafka

Clickhouse kafka引擎需要结合kafka使用&#xff0c;需要确保已经安装clickhouse和kafka 实战环境&#xff1a; Clickhouse-server 版本&#xff1a;22.4.5 Kafka版本&#xff1a;kafka_2.13-3.2.0 Clickhouse数据库执行&#xff1a; 1、使用引擎创建一个kafka消费者 CREA…

【OpenCV+Qt】使用车牌识别系统EasyPR识别车牌号

EasyPR是一个中文的开源车牌识别系统&#xff0c;其车牌识别划分为了两个过程&#xff1a;即车牌检测&#xff08;Plate Detection&#xff09;和字符识别&#xff08;Chars Recognition&#xff09;两个过程&#xff1a; 车牌检测&#xff08;Plate Detection&#xff09;&am…

用于医疗诊断的花青染料ICG-Sulfo-EG8-OSu,

凯新生物产品介绍&#xff1a; (ICG)是一个用于医疗诊断的花青染料。它是用于测定心输出量、肝脏功能、肝血流量,和对于眼科血管造影术。它有一个最大吸收光谱在800nm附近。这些红外波段可以穿透视网膜层,相比荧光素血管造影ICG血管造影图像允许进入更深的血液循环。传统的激活…

华为机试_HJ24 合唱队【中等】【收藏】

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 解题过程 提交代码 学习代码 代码一 代码二 收藏点 描述 N 位同学站成一排&#xff0c;音乐老师要请最少的同学出列&#xff0c;使得剩下的 K 位同学排成合唱队形。 设KK位同学从左到右依次编号为 1&#xff0…

想学Redis却不会安装,这有一个快速入门请拿去

一. Redis简介 1.什么是Redis Redis是一个完全开源免费、且遵守BSD协议的&#xff0c;高性能(NOSQL)的key-value数据库。Redis本身使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型&#xff0c;并提供多种语言的API。 2.Redis特点 Redis具有如下特点&#xff1…

DJ13-2 汇编语言程序设计

目录 一、顺序程序设计 二、分支程序设计 1. 用比较/测试命令条件转移指令实现分支 2. 采用跳转表实现多路分支 三、循环程序设计 1. 计数循环程序设计 2. 条件判断循环程序设计 四、子程序设计 1. 子程序设计举例 2. 主程序和子程序设计举例 一、顺序程序设计 举例…

低代码为什么会受到企业青睐?是何原因?

低代码为什么会受到企业青睐&#xff1f;是何原因&#xff1f;回答这个问题&#xff0c;只需用4个“更”字&#xff0c;就能很好的概括。 1、更快&#xff08;开箱即用&#xff09; 2、更省&#xff08;人力、时间成本&#xff09; 3、更合适&#xff08;需求贴合业务&#…

mfc常用控件

mfc在编写桌面客户端应用应用程序&#xff0c;在设计界面时&#xff0c;如果像一般的界面&#xff0c;实施人员或者适配人员使用(特定的用户群体)对界面要求没有那么高&#xff0c;只要软件功能正常&#xff0c;稳定就行&#xff0c;我们在做这些界面时&#xff0c;通常使用原生…

CSDN第16期竞赛

目录 1.比赛详情 2.竞赛感悟 3.竞赛题目回顾 &#xff08;1&#xff09;鬼画符门莲台争夺战 (2)津津的储蓄计划 &#xff08;3&#xff09;多边形的面积 (4)小桥流水人家 1.比赛详情 比赛地址&#xff1a;http://t.csdn.cn/b1Lzm 2.竞赛感悟 通过这次的周赛&#xff0c…

SQLserver技巧 年份判断,以及向上想下取整

SELECT [出厂日期],DATEDIFF(month,出厂日期,getdate())*1.0/12 as 使用年限/年 ---------得到的结果实际&#xff08;浮点&#xff09;,cast(DATEDIFF(month,出厂日期,getdate())*1.0/12 as decimal(18,1)) as 使用年限/年 FROM tableA参考&#xff1a; https://blog.csdn.…

这篇文章来告诉你几个实用的视频转文字的方法

相信大家在闲暇之余&#xff0c;都会通过一些网课来提高自己的知识本领吧&#xff01;有的时候在上网课的过程中&#xff0c;会感觉自己做笔记的速度赶不上老师的进度&#xff0c;重复观看又比较麻烦&#xff0c;这时我们就可以借助一些视频转换软件来将视频转换成文字&#xf…

元宇宙产业委共同主席倪健中:发挥元宇宙总部基地优势,探索农业元宇宙发展之路|2022首届海南自贸港(临高)乡村振兴发展论坛

12月12日&#xff0c;2022首届海南自贸港&#xff08;临高&#xff09;乡村振兴发展论坛暨经济合作洽谈周活动在临高开幕。此次活动以“精彩新临高抢滩自贸港”为主题&#xff0c;重点推介“红色”文旅、“黄色”农业、“蓝色”海洋、“绿色”金牌港和“紫色”数字经济组成的五…

【c++提高1】二叉树二叉堆(万字总结)

大纲 一、二叉树 二叉树&#xff1a;1.二叉树简介 二叉树&#xff1a;2.二叉树的性质 二叉树&#xff1a;3.二叉树的存储 二叉树&#xff1a;4.二叉树的遍历 二叉树&#xff1a;5.求解先序、后序、层次遍历序列 二叉树&#xff1a;6.例题 二、二叉堆 二叉堆&#xff1a;1.二叉堆…

Windows下NCNN环境配置(VS2019)

Windows下NCNN环境配置&#xff08;VS2019&#xff09; 本文修改自&#xff1a;Windows下ncnn环境配置&#xff08;VS2019&#xff09; 一、下载VS2019并安装 1、下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 2、下载后安装工作负载&#xff08;安装以…