Java 复习笔记 -学生管理系统进阶篇

news2024/11/27 1:44:59

文章目录

  • 学生管理系统进阶版
    • 一,需求部分
      • (一)需求
      • (二)分析
        • 1,登录界面
        • 2,用户类
        • 3,注册功能
        • 4,登录功能
        • 5,忘记密码
        • 6,验证码规则
    • 二,实现部分
      • (一)登录界面
      • (二)编写方法实现注册功能
      • (三)编写方法实现登录功能
      • (四)编写方法实现忘记密码功能
      • (五)编写生成验证码方法
      • (六)集成代码,实现系统


学生管理系统进阶版

一,需求部分

(一)需求

为学生管理系统书写一个登陆、注册、忘记密码的功能。

只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

(二)分析

1,登录界面

System.out.println("-------------欢迎来到学生管理系统-------------");
System.out.println("请选择操作:1登录 2注册 3忘记密码");

2,用户类

属性:用户名、密码、身份证号码、手机号码

3,注册功能

1,用户名需要满足以下要求:
验证要求:

  • 用户名唯一
  • 用户名长度必须在3~15位之间
  • 只能是字母加数字的组合,但是不能是纯数字

2,密码键盘输入两次,两次一致才可以进行注册。

3,身份证号码需要验证。
验证要求:

  • 长度为18位
  • 不能以0为开头
  • 前17位,必须都是数字
  • 最为一位可以是数字,也可以是大写X或小写x

4,手机号验证。
验证要求:

  • 长度为11位
  • 不能以0为开头
  • 必须都是数字

4,登录功能

1,键盘录入用户名

2,键盘录入密码

3,键盘录入验证码

验证要求:

  • 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册

  • 判断验证码是否正确,如不正确,重新输入

  • 再判断用户名和密码是否正确,有3次机会

5,忘记密码

1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册

2,键盘录入身份证号码和手机号码

3,判断当前用户的身份证号码和手机号码是否一致,如果一致,则提示输入密码,进行修改;如果不一致,则提示:账号信息不匹配,修改失败。

6,验证码规则

  • 长度为5

  • 由4位大写或者小写字母和1位数字组成,同一个字母可重复

  • 数字可以出现在任意位置

  • 比如:aQa1K

二,实现部分

(一)登录界面

要为学生管理系统编写一个登录页面,你可以按照以下代码示例进行操作:

import java.util.Scanner;

public class LoginSystem {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("-------------欢迎来到学生管理系统-------------");
        System.out.println("请选择操作:1登录 2注册 3忘记密码");

        int choice = input.nextInt();
        switch (choice) {
            case 1:
                login();
                break;
            case 2:
                register();
                break;
            case 3:
                forgetPassword();
                break;
            default:
                System.out.println("无效的选择");
                break;
        }
    }

    public static void login() {
        // TODO: 实现登录逻辑
    }

    public static void register() {
        // TODO: 实现注册逻辑
    }

    public static void forgetPassword() {
        // TODO: 实现忘记密码逻辑
    }
}

在上述代码中,我们首先使用Scanner类创建一个接收用户输入的对象input。然后打印欢迎信息和操作选项。接下来,根据用户的选择,使用switch语句调用相应的方法,即login()register()forgetPassword()

你可以在login()register()forgetPassword()方法中实现登录、注册和忘记密码的具体逻辑。根据实际需求,可以使用数据库或文件来存储和验证用户信息。这些方法留给你自己来实现。

(二)编写方法实现注册功能

你可以按照以下代码示例来编写注册方法:

public static void register() {
    Scanner input = new Scanner(System.in);

    System.out.print("请输入用户名:");
    String username = input.nextLine();

    // 校验用户名
    if (!validateUsername(username)) {
        System.out.println("用户名不符合要求,请重新注册");
        return;
    }

    System.out.print("请输入密码:");
    String password1 = input.nextLine();

    System.out.print("请再次输入密码:");
    String password2 = input.nextLine();

    // 校验密码
    if (!validatePassword(password1, password2)) {
        System.out.println("两次输入的密码不一致,请重新注册");
        return;
    }
    
    System.out.print("请输入身份证号码:");
    String idNumber = input.nextLine();
    
    // 校验身份证号码
    if (!validateIdNumber(idNumber)) {
        System.out.println("身份证号码不符合要求,请重新注册");
        return;
    }
    
    System.out.print("请输入手机号:");
    String phoneNumber = input.nextLine();
    
    // 校验手机号
    if (!validatePhoneNumber(phoneNumber)) {
        System.out.println("手机号码不符合要求,请重新注册");
        return;
    }

    // 注册成功
    System.out.println("注册成功");
}

public static boolean validateUsername(String username) {
    // 校验用户名是否唯一
    // TODO: 根据实际需求,编写判断用户名是否唯一的代码

    // 校验用户名长度
    int length = username.length();
    if (length < 3 || length > 15) {
        return false;
    }

    // 校验用户名是否是字母加数字的组合,但不能是纯数字
    if (!username.matches("^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]+$") || username.matches("^\\d+$")) {
        return false;
    }

    return true;
}

public static boolean validatePassword(String password1, String password2) {
    // 校验两次输入的密码是否一致
    return password1.equals(password2);
}

public static boolean validateIdNumber(String idNumber) {
    // 校验身份证号码长度和开头是否满足要求
    if (idNumber.length() != 18 || idNumber.startsWith("0")) {
        return false;
    }

    // 校验前17位是否都是数字
    String idNumber17 = idNumber.substring(0, 17);
    if (!idNumber17.matches("^\\d{17}$")) {
        return false;
    }

    // 校验最后一位是否是数字或大写X或小写x
    String lastChar = idNumber.substring(17);
    if (!lastChar.matches("^\\d|[Xx]$")) {
        return false;
    }

    return true;
}

public static boolean validatePhoneNumber(String phoneNumber) {
    // 校验手机号码长度和开头是否满足要求
    if (phoneNumber.length() != 11 || phoneNumber.startsWith("0")) {
        return false;
    }

    // 校验是否都是数字
    if (!phoneNumber.matches("^\\d+$")) {
        return false;
    }

    return true;
}

在上述代码中,我们首先使用Scanner类创建一个接收用户输入的对象input。然后,通过validateUsername()方法来校验用户名是否符合要求。在该方法中,我们首先需要根据实际需求编写判断用户名是否唯一的代码。然后,校验用户名长度是否在3~15位之间,以及是否是字母加数字的组合,但不能是纯数字。

接着,通过validatePassword()方法来校验两次输入的密码是否一致。

然后,通过validateIdNumber()方法来校验身份证号码是否符合要求。在该方法中,我们首先校验身份证号码的长度和开头是否满足要求,然后校验前17位是否都是数字,最后一位是否是数字或大写X或小写x。

最后,通过validatePhoneNumber()方法来校验手机号码是否符合要求。在该方法中,我们校验手机号码的长度和开头是否满足要求,以及是否是纯数字。

如果所有的校验都通过,则输出注册成功的提示信息。

需要注意的是,上述代码中的校验逻辑只是简单示例,实际开发中,你可能需要根据具体需求来进行更严格和完善的校验。例如,可以使用正则表达式、外部库、数据库等来实现更复杂的校验逻辑。

(三)编写方法实现登录功能

你可以按照以下代码示例来编写登录方法:

public static void login() {
    String username = "admin"; // 假设已注册的用户名为admin
    String password = "123456"; // 假设密码为123456
    String verificationCode = "aQa1K"; // 假设验证码为aQa1K

    Scanner input = new Scanner(System.in);
    int attempts = 3; // 登录尝试次数

    while (attempts > 0) {
        System.out.print("请输入用户名:");
        String inputUsername = input.nextLine();

        // 判断用户名是否正确
        if (!inputUsername.equals(username)) {
            System.out.println("用户名未注册,请先注册");
            return;
        }

        System.out.print("请输入密码:");
        String inputPassword = input.nextLine();

        System.out.print("请输入验证码:");
        String inputVerificationCode = input.nextLine();

        // 判断验证码是否正确
        if (!inputVerificationCode.equals(verificationCode)) {
            System.out.println("验证码不正确,请重新输入");
            continue;
        }

        // 判断用户名和密码是否正确
        if (inputUsername.equals(username) && inputPassword.equals(password)) {
            System.out.println("登录成功");
            return;
        } else {
            attempts--;
            System.out.println("用户名或密码错误,剩余尝试次数:" + attempts);
        }
    }

    System.out.println("登录失败,已达到最大尝试次数");
}

在上述代码中,我们首先定义了已注册的用户名admin、密码123456和验证码aQa1K。然后使用Scanner类创建一个接收用户输入的对象input。接下来,使用while循环来控制登录尝试次数,初始值为3。

在循环中,首先要求用户输入用户名,然后判断用户名是否正确。如果用户名未注册,则直接结束方法,并提示用户先进行注册。如果用户名正确,则要求用户输入密码和验证码。

接着,判断验证码是否正确。如果验证码不正确,则重新要求用户输入验证码,并继续下一次循环。如果验证码正确,则判断用户名和密码是否正确。如果用户名和密码都正确,则登录成功并结束方法。如果用户名或密码不正确,则尝试次数减1,并提示剩余尝试次数。

当尝试次数减到0时,循环结束,并提示登录失败。

这个示例只是简单地演示了登录方法的逻辑,实际开发中,你还需要结合具体需求来实现更完整和安全的登录功能。例如,可以使用数据库来存储和验证用户信息,使用加密算法对密码进行加密等。

(四)编写方法实现忘记密码功能

public static void forgetPassword() {
    Scanner input = new Scanner(System.in);

    System.out.print("请输入用户名:");
    String username = input.nextLine();

    // 判断用户名是否存在
    if (!userMap.containsKey(username)) {
        System.out.println("未注册");
        return;
    }

    System.out.print("请输入身份证号码:");
    String idNumber = input.nextLine();

    System.out.print("请输入手机号码:");
    String phoneNumber = input.nextLine();

    UserInfo userInfo = userMap.get(username);

    // 判断身份证号码和手机号码是否一致
    if (userInfo.getIdNumber().equals(idNumber) && userInfo.getPhoneNumber().equals(phoneNumber)) {
        System.out.print("请输入新密码:");
        String newPassword = input.nextLine();

        // 修改密码
        userInfo.setPassword(newPassword);

        System.out.println("密码修改成功");
    } else {
        System.out.println("账号信息不匹配,修改失败");
    }
}

public static void registerUser(String username, String password, String idNumber, String phoneNumber) {
    UserInfo userInfo = new UserInfo(username, password, idNumber, phoneNumber);
    userMap.put(username, userInfo);
}

static class UserInfo {
    private String username;
    private String password;
    private String idNumber;
    private String phoneNumber;

    public UserInfo(String username, String password, String idNumber, String phoneNumber) {
        this.username = username;
        this.password = password;
        this.idNumber = idNumber;
        this.phoneNumber = phoneNumber;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getIdNumber() {
        return idNumber;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }
}

(五)编写生成验证码方法

public static void generateCaptcha() {                  
    StringBuilder captcha = new StringBuilder();        
    Random random = new Random();                       
                                                        
    // 生成4位字母                                           
    for (int i = 0; i < 4; i++) {                       
        char letter = (char) (random.nextInt(26) + 'a');
        captcha.append(letter);                         
    }                                                   
                                                        
    // 生成1位数字                                           
    captcha.append(random.nextInt(10));                 
                                                        
    System.out.println("验证码为:" + captcha.toString());   
}                                                       

(六)集成代码,实现系统

package net.army.java.studentmanger;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

/**
 * 功能:学生管理系统(注册、登录和忘记)
 * 日期:2023年09月02日
 * 作者:梁辰兴
 */

public class StudentManagementSystem {
    private static Map<String, User> userMap = new HashMap<>();
    private static String loggedInUser = null;
    private static int loginAttempts = 0;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while (true) {
            System.out.println("-------------欢迎来到学生管理系统-------------");
            System.out.println("请选择操作:1登录 2注册 3忘记密码");

            int choice = input.nextInt();
            input.nextLine(); // 清除输入缓冲区的换行符

            switch (choice) {
                case 1:
                    login();
                    break;
                case 2:
                    register();
                    break;
                case 3:
                    forgotPassword();
                    break;
                default:
                    System.out.println("无效的操作,请重新选择!");
            }
        }
    }

    public static void generateCaptcha() {
        StringBuilder captcha = new StringBuilder();
        Random random = new Random();

        // 生成4位字母
        for (int i = 0; i < 4; i++) {
            char letter = (char) (random.nextInt(26) + 'a');
            captcha.append(letter);
        }

        // 生成1位数字
        captcha.append(random.nextInt(10));

        System.out.println("验证码为:" + captcha.toString());
    }

    public static void login() {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入用户名:");
        String username = input.nextLine();

        System.out.print("请输入密码:");
        String password = input.nextLine();

        generateCaptcha();
        System.out.print("请输入验证码:");
        String captcha = input.nextLine();

        if (!userMap.containsKey(username)) {
            System.out.println("用户名未注册,请先注册!");
            return;
        }

        if (!validateCaptcha(captcha)) {
            System.out.println("验证码错误,请重新输入!");
            return;
        }

        User user = userMap.get(username);
        if (user.getPassword().equals(password)) {
            loggedInUser = username;
            System.out.println("登录成功!");
        } else {
            loginAttempts++;
            if (loginAttempts < 3) {
                System.out.println("用户名或密码错误,请重新输入!");
            } else {
                System.out.println("登录失败次数过多,退出系统!");
                System.exit(0);
            }
        }
    }

    public static void register() {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入用户名:");
        String username = input.nextLine();

        if (userMap.containsKey(username)) {
            System.out.println("用户名已存在,请重新输入!");
            return;
        }

        if (!validateUsername(username)) {
            System.out.println("用户名不符合要求,请重新输入!");
            return;
        }

        System.out.print("请输入密码:");
        String password1 = input.nextLine();

        System.out.print("请再次输入密码:");
        String password2 = input.nextLine();

        if (!password1.equals(password2)) {
            System.out.println("两次输入的密码不一致,请重新输入!");
            return;
        }

        System.out.print("请输入身份证号码:");
        String idCard = input.nextLine();

        if (!validateIdCard(idCard)) {
            System.out.println("身份证号码不符合要求,请重新输入!");
            return;
        }

        System.out.print("请输入手机号码:");
        String phoneNumber = input.nextLine();

        if (!validatePhoneNumber(phoneNumber)) {
            System.out.println("手机号码不符合要求,请重新输入!");
            return;
        }

        User user = new User(username, password1, idCard, phoneNumber);
        userMap.put(username, user);

        System.out.println("注册成功!");
    }

    public static void forgotPassword() {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入用户名:");
        String username = input.nextLine();

        if (!userMap.containsKey(username)) {
            System.out.println("未注册的用户名,请先注册!");
            return;
        }

        User user = userMap.get(username);

        System.out.print("请输入身份证号码:");
        String idCard = input.nextLine();

        if (!user.getIdCard().equals(idCard)) {
            System.out.println("账号信息不匹配,修改失败!");
            return;
        }

        System.out.print("请输入手机号码:");
        String phoneNumber = input.nextLine();

        if (!user.getPhoneNumber().equals(phoneNumber)) {
            System.out.println("账号信息不匹配,修改失败!");
            return;
        }

        System.out.print("请输入新密码:");
        String newPassword = input.nextLine();

        user.setPassword(newPassword);
        System.out.println("密码修改成功!");
    }

    public static boolean validateUsername(String username) {
        // 验证用户名的规则
        // 用户名唯一
        // 用户名长度必须在3~15位之间
        // 只能是字母加数字的组合,但是不能是纯数字
        if (userMap.containsKey(username)) {
            return false;
        }

        int length = username.length();
        if (length < 3 || length > 15) {
            return false;
        }

        boolean containsLetter = false;
        boolean containsDigit = false;

        for (char c : username.toCharArray()) {
            if (Character.isLetter(c)) {
                containsLetter = true;
            } else if (Character.isDigit(c)) {
                containsDigit = true;
            }
        }

        if (!containsLetter || !containsDigit) {
            return false;
        }

        if (containsDigit && !containsLetter && length == 1) {
            return false;
        }

        return true;
    }

    public static boolean validateIdCard(String idCard) {
        // 验证身份证号码的规则
        // 长度为18位
        // 不能以0为开头
        // 前17位,必须都是数字
        // 最后一位可以是数字,也可以是大写X或小写x
        if (idCard.length() != 18) {
            return false;
        }

        if (idCard.startsWith("0")) {
            return false;
        }

        String idCardDigits = idCard.substring(0, 17);
        String idCardLastDigit = idCard.substring(17);

        if (!idCardDigits.matches("\\d+")) {
            return false;
        }

        if (!idCardLastDigit.matches("[\\dXx]")) {
            return false;
        }

        return true;
    }

    public static boolean validatePhoneNumber(String phoneNumber) {
        // 验证手机号码的规则
        // 长度为11位
        // 不能以0为开头
        // 必须都是数字
        if (phoneNumber.length() != 11) {
            return false;
        }

        if (phoneNumber.startsWith("0")) {
            return false;
        }

        if (!phoneNumber.matches("\\d+")) {
            return false;
        }

        return true;
    }

    public static boolean validateCaptcha(String captcha) {
        // 验证码的规则
        // 长度为5
        // 由4位大写或者小写字母和1位数字组成,同一个字母可重复
        // 数字可以出现在任意位置
        if (captcha.length() != 5) {
            return false;
        }

        int digitCount = 0;
        int letterCount = 0;
        char lastChar = '\0';

        for (char c : captcha.toCharArray()) {
            if (Character.isDigit(c)) {
                digitCount++;
            } else if (Character.isLetter(c)) {
                letterCount++;
                if (c == lastChar) {
                    return false;
                }
                lastChar = c;
            } else {
                return false;
            }
        }

        if (digitCount == 0 || letterCount == 0) {
            return false;
        }

        return true;
    }

    static class User {
        private String username;
        private String password;
        private String idCard;
        private String phoneNumber;

        public User(String username, String password, String idCard, String phoneNumber) {
            this.username = username;
            this.password = password;
            this.idCard = idCard;
            this.phoneNumber = phoneNumber;
        }

        public String getUsername() {
            return username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getIdCard() {
            return idCard;
        }

        public String getPhoneNumber() {
            return phoneNumber;
        }
    }
}

请注意,以上代码只是一个简单的示例,可能还有其他更复杂的验证规则需要根据实际需求进行实现和调整。

运行效果:
在这里插入图片描述

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

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

相关文章

【具身智能】RT-2:视觉-语言-动作模型(VLA)

文章目录 前言一、视觉-语言-动作(VLA)模型二、利用 VLM 控制机器人三、实验四、 Demo五、总结前言 Robotic Transformer 2(RT-2)是由谷歌 DeepMind 新推出的大语言模型,它为人类提供了通过纯语言命令来优化机器人控制的能力。与此前的大模型不同,RT-2是一种新型的视觉-…

使用C语言EasyX 创建动态爱心背景

简介 在计算机图形学的世界中&#xff0c;有很多方法可以使程序的界面更加吸引人。在本篇博客中&#xff0c;我将向大家介绍如何使用 EasyX 图形库在 C 中创建一个动态的爱心背景。这不仅是一个简单的动画效果&#xff0c;它还包括背景的星星、旋转的心形以及一个美观的背景渐…

Scrapy爬虫框架实战

Python实现爬虫是很容易的&#xff0c;一般来说就是获取目标网站的页面&#xff0c;对目标页面的分析、解析、识别&#xff0c;提取有用的信息&#xff0c;然后该入库的入库&#xff0c;该下载的下载。以前写过一篇文章《Python爬虫获取电子书资源实战》&#xff0c;以一个电子…

Vite+React+Electron开发入门,10分钟搭建本地环境并打包

前言 想使用vite和react开发跨平台桌面的软件方案有electron和tauri两种&#xff0c;但是我个人更喜欢tauri&#xff0c;无奈electron名声大燥&#xff0c;面试要求里很多都写着&#xff1a;electron...可见这类公司多么落后。但是呢&#xff0c;又秉持着存在即合理的理念&…

Android 12 源码分析 —— 应用层 五(SystemUI的StatusBar类的启动过程和三个窗口的创建)

Android 12 源码分析 —— 应用层 五&#xff08;SystemUI的StatusBar类的启动过程和三个窗口的创建&#xff09; 在前面的文章中&#xff0c;我们介绍了SystemUI App的基本布局和基本概念。接下来&#xff0c;我们进入SystemUI应用的各个UI是如何被加入屏幕的。那么我们就先从…

计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

图像分类 教程博客_传送门链接:链接 在本教程中&#xff0c;您将学习如何使用迁移学习训练卷积神经网络以进行图像分类。您可以在 cs231n 上阅读有关迁移学习的更多信息。 本文主要目的是教会你如何自己搭建分类模型&#xff0c;耐心看完&#xff0c;相信会有很大收获。废话不…

Linux——Shell脚本编程(1)

一、为什么要学习 Shell 编程 &#xff1f; 1)Linux运维工程师在进行服务器集群管理时&#xff0c;需要编写Shell程序来进行服务器管理。 2)对于 JavaEE 和 Python 程序员来说&#xff0c;工作的需要&#xff0c;要求你编写一些 Shell脚本进行程序或者是服务器的维护&#xff…

【Linux学习笔记】基础命令2

1. rmdir指令 && rm指令1.1. 基础概念1.2. 命令用法1.2.1. rmdir命令1.2.2. rm命令1.2.3. rm命令的注意事项 2. man命令3. cp指令3.1. cp指令基础概念3.2. cp命令的用法 4. mv命令5. cat命令6. more命令 && less命令6.1. more命令6.2. less命令 7. head命令和t…

C#下使用IronPython来实现热更新

问题 之前我们学习过Roslyn&#xff0c;他可以动态编译代码并运行&#xff0c;然后通过ALC加载即插即用&#xff0c;但是遇到一些问题感觉无法解决&#xff0c;我编写一个类A在ALC中&#xff0c;另外一个类B要实例化这个A&#xff0c;我想让他们都能灵活卸载&#xff0c;但是如…

MySQL与ES数据同步的四种方案及实践演示

文章目录 一、同步双写优点缺点双写失败风险项目演示 二、异步双写&#xff08;MQ方式&#xff09;优点缺点项目演示 三、基于Datax同步核心组件架构图支持的数据源及操作项目演示 四、基于Binlog实时同步实现原理优点缺点项目演示 一、同步双写 也就是同步调用&#xff0c;这…

IPIDEA动态代理IP更适合于哪些业务场景?为什么动态代理IP更经济实惠?

动态代理IP是一种非常有用的工具&#xff0c;在许多业务场景中发挥重要作用。动态代理IP可以帮助用户提高网络速度和稳定性&#xff0c;提高工作效率&#xff0c;对于需要进行跨境业务的企业和个人来说尤为重要。 让我们先来看看动态代理IP更适合于哪些业务场景。 1.数据采集…

StraUML的详细使用步骤

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于JRebel & XRebel的相关操作吧 下载和安装&#xff1a;首先&#xff0c;你需要从StarUML的官方网站或适用于你操作系统的应用商店下载并安装StarUML软件Sta…

人工智能:神经细胞模型到神经网络模型

人工智能领域中的重要流派之一是&#xff1a;从神经细胞模型&#xff08;Neural Cell Model&#xff09;到神经网络模型&#xff08;Neural Network Model&#xff09;。 一、神经细胞模型 第一个人工神经细胞模型是“MP”模型&#xff0c;它是由麦卡洛克、匹茨合作&#xff0…

基于spingboot的websocket订阅、广播、多人聊天室示例

概述 基于spingboot的websocket多人聊天系统。包括订阅&#xff0c;广播、点对点单人聊天&#xff0c;多人聊天室功能。 详细 一、运行效果 简单示例 广播 单人聊天 多人聊天室 二、相关代码 websocket配置 package com.iamgpj.demowebsocket.config;import com.iamgpj.d…

更大的数据库,更多的分析内容!凌恩明星产品鱼类eDNA产品再次大升级!!

喜大普奔&#xff0c;凌恩生物明星产品鱼类eDNA产品再次大升级&#xff01;自建鱼类数据库&#xff0c;本次升级获得了更大的数据库&#xff0c;更全面的物种分类&#xff0c;更多的分析内容&#xff0c;鱼类物种检测更加精准&#xff01;&#xff01; eDNA宏条形码技术在鱼类…

移植FlashDB、SFUD到STM32f407

个人上篇文章 搭建STM32F407的SPI-Flash&#xff08;基于STM32CubeMX&#xff09;_小刚学長的博客-CSDN博客 主要是解决STM32CubeMX这边的配置&#xff0c;对code端侧是简单介绍了下 实际项目上一般都是拿片外flash存储一些东西&#xff0c;比如一些比较多的配置、参数&…

stu01-IDEA怎么创建一个HTML项目

1.打开idea&#xff0c;依次点击file→new→project 2.点击Java&#xff0c;选择你的jdk&#xff0c;没有下载的点击“Download JDK”/已经下载有JDK但在这里没显示的→点击“Add JDK”&#xff0c;选择你安装的JDK的路径&#xff0c;然后next 3.next 4.起好名字&#xff0c;我…

Python之OS模块

os模块负责程序与操作系统的交互&#xff0c;提供了访问操作系统底层的接口;即os模块提供了非常丰富的方法用来处理文件和目录。 使用的时候需要导入该模块:import os

【数据结构】树的基础知识及三种存储结构

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

定时任务执行脚本

1、编写bat脚本 将newman运行测试集的命令编写为bat脚本保存 2、设置定时任务 在计算机上右键->管理&#xff0c;在弹出菜单里的任务计划程序里创建定时任务配置执行