java实战项目-学生管理系统(附带全套源代码及其登录注册功能的实现)--《进阶篇》

一、前言

新增了登录注册的功能,代码量可能会有点大,所有代码加起来差不多560行。这个项目对于小白来说肯定是一大难关了。文章中的每张图都是作者亲手绘制的,简单明了,如果大家认同作者,希望可以支持一下作者。全套源代码一直会保持公开状态,有需要的话可以自行cv。

java专栏(从0开始的java之旅)

二、效果展示

注册功能展示

登录功能展示

忘记密码功能展示 

三、逻辑分析

1. 登录功能

2. 注册功能

3. 忘记密码功能

四、代码分析

1. 登录

循环尝试登录

for (int i = 0; i < 3; i++) {// 代码内容
}

使用了一个循环,最多允许用户尝试三次登录(包括第三次)。

输入用户名

System.out.println("请输入用户名");
String username = sc.next();

用户输入用户名,然后检查是否在已注册用户列表中。

检查用户名是否注册

boolean flag = comtains(users, username);
if (!flag) {System.out.println("用户名" + username + "未注册,请先注册在登录");System.exit(0);
}

如果用户名不在用户列表中,则提示用户未注册并退出程序。可能的改进是提供注册选项或重新提示输入。

输入密码和验证码

System.out.println("请输入密码");
String password = sc.next();

用户输入密码,并且每次登录尝试都需要输入验证码。

while (true) {String rightCode = GetCode();// 显示验证码并接受用户输入
}

这段代码通过 GetCode() 方法获取验证码,用户需要输入正确的验证码才能继续登录。验证码大小写不敏感。

验证用户名和密码

User userInfo = new User(username, password, null, null);
boolean result = checkUserInfo(users, userInfo);

checkUserInfo() 方法用于检查输入的用户名和密码是否在用户列表中匹配。如果匹配,则登录成功;否则,根据尝试次数给出失败提示。

登录结果处理

if (result) {System.out.println("登录成功");// 启动系统SyuSystem ss = new SyuSystem();ss.StartStuSystem();break;
} else {// 登录失败处理
}

如果登录成功,显示成功消息并启动系统;否则,根据尝试次数给出失败消息,并在达到最大尝试次数时锁定账号。

2. 注册

输入用户名

while (true) {System.out.println("请输入用户名");username = sc.next();boolean flag1 = checkUsername(username);if (!flag1) {System.out.println("格式不满足条件,需要重新输入");} else {boolean flag2 = contains(users, username);if (!flag2) {System.out.println("用户名" + username + "可用");break;} else {System.out.println("用户名" + username + "已存在,请重新输入");}}
}

用户首先输入用户名,程序会检查其格式是否符合要求(checkUsername(username) 方法的具体实现未给出,但通常会检查长度、字符等)。

如果用户名格式不正确,要求用户重新输入。

如果用户名已经存在于用户列表中(使用 contains(users, username) 方法判断),则要求用户重新输入。

输入密码

String password;
while (true) {System.out.println("请输入要注册的密码");password = sc.next();System.out.println("请再次输入密码");String password2 = sc.next();if (password.equals(password2)) {System.out.println("两次密码一致,继续输入其他数据");break;} else {System.out.println("两次密码不一致,请重新输入");}
}

用户输入密码,并要求再次确认密码。

如果两次输入的密码不一致,提示用户重新输入。

输入身份证号码和手机号码:

String personId;
while (true) {System.out.println("请输入身份证号");personId = sc.next();boolean flag = checkPersonId(personId);if (flag) {System.out.println("身份证号码满足需求");break;} else {System.out.println("身份证号码不满足需求,请重新输入");}
}String phoneNumber;
while (true) {System.out.println("请输入手机号码");phoneNumber = sc.next();boolean flag = checkPhoneNumber(phoneNumber);if (flag) {System.out.println("手机号格式正确");break;} else {System.out.println("手机号格式有误,请重新输入");}
}

用户依次输入身份证号码和手机号码。

每次输入后,程序会调用相应的验证方法(checkPersonId(personId) 和 checkPhoneNumber(phoneNumber))来验证格式的正确性。

如果格式不正确,提示用户重新输入。

创建用户对象并添加到列表

User user = new User(username, password, personId, phoneNumber);
users.add(user);

用户成功输入所有信息后,将信息封装成 User 对象,并将其添加到 users 列表中。

遍历集合打印用户信息

printList(users);

最后调用 printList(users) 方法遍历并打印注册的用户信息。

3. 忘记密码

输入用户名

System.out.println("请输入用户名");
String username = sc.next();
boolean flag = contains(users, username);
if (!flag) {System.out.println("当前用户" + username + "未注册,请先注册");return;
}

用户输入用户名,并检查该用户名是否存在于用户列表中(使用 contains(users, username) 方法)。

如果用户名不存在,提示用户先注册并结束函数。

输入身份证号和手机号

System.out.println("请输入身份证号码");
String personId = sc.next();
System.out.println("请输入手机号码");
String phoneNumber = sc.next();

用户输入身份证号码和手机号码。

验证身份信息

int index = findIndex(users, username);
User user = users.get(index);
if (!(user.getPersonId().equalsIgnoreCase(personId) && user.getPhoneNumber().equals(phoneNumber))) {System.out.println("身份证号码或手机号码输入有误,不能修改密码");return;
}

根据用户名找到对应的用户对象。

验证输入的身份证号码和手机号码是否与用户信息匹配,如果不匹配则提示信息输入有误并结束函数。

更改密码

String password;
while (true) {System.out.println("请输入新密码");password = sc.next();System.out.println("请再次输入密码");String newPassword = sc.next();if (password.equals(newPassword)) {System.out.println("两次密码输入一致");break;} else {System.out.println("两次密码不一致,请重新输入");continue;}
}

用户输入新的密码,并要求再次确认密码。

如果两次输入的密码不一致,提示用户重新输入。

修改密码

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

将用户对象中的密码字段更新为新输入的密码。

提示用户密码修改成功。

4. 方法

查找用户信息下标

方法签名和参数
private static int findIndex(ArrayList<User> users, String username)

findIndex 是一个静态方法,用于在给定的 ArrayList<User> 中查找指定用户名的用户。

users 是包含用户对象的列表。

username 是要查找的用户名。

循环遍历列表
for (int i = 0; i < users.size(); i++) {if (users.get(i).getUserName().equals(username)) {return i;}
}

使用 for 循环遍历 users 列表,从索引 0 开始逐个查找。

对于每个用户对象,通过 getUserName() 方法获取用户名,并与输入的 username 进行比较。

如果找到匹配的用户名,返回当前索引 i,即找到的用户在列表中的位置。

未找到用户情况
return -1;

如果循环结束后仍未找到匹配的用户名,返回 -1,表示未找到该用户。

检查用户名和密码是否正确

方法签名和参数

private static boolean checkUserInfo(ArrayList<User> users, User userInfo)

checkUserInfo 是一个静态方法,用于检查用户信息是否匹配。

users 是包含用户对象的列表。

userInfo 是要验证的用户信息对象,其中包含用户名和密码。

循环遍历列表

for (int i = 0; i < users.size(); i++) {if (users.get(i).getUserName().equals(userInfo.getUserName()) && users.get(i).getPassword().equals(userInfo.getPassword())) {return true;}
}

使用 for 循环遍历 users 列表,从索引 0 开始逐个检查每个用户对象。

对于每个用户对象,通过 getUserName() 方法获取用户名,并通过 getPassword() 方法获取密码。

如果当前用户对象的用户名和密码与 userInfo 中的用户名和密码完全匹配,则返回 true,表示找到匹配的用户信息。

未找到匹配的情况

return false;

如果循环结束后未找到任何匹配的用户名和密码组合,则返回 false,表示未找到匹配的用户信息。

检查手机号码

长度检查
if (phoneNumber.length() != 11) {return false;
}

首先检查手机号的长度是否为 11 位。如果不是,则返回 false。在大多数国家,手机号通常是固定长度的,这里假设长度为 11 位。

开头检查
if (phoneNumber.startsWith("0")) {return false;
}

接着检查手机号码是否以 "0" 开头。在某些国家和地区,手机号码不能以 "0" 开头,因此这里排除以 "0" 开头的情况。

数字检查
for (int i = 0; i < phoneNumber.length(); i++) {if (phoneNumber.charAt(i) > '9' || phoneNumber.charAt(i) < '0') {return false;}
}

然后通过循环遍历每个字符,检查是否都是数字。这是通过比较字符的 ASCII 值来实现的。条件 phoneNumber.charAt(i) > '9' || phoneNumber.charAt(i) < '0' 检查字符是否不在 '0' 到 '9' 的范围内。如果发现非数字字符,立即返回 false

 检查身份证号码

长度检查
if (personId.length() != 18) {return false;
}

首先检查身份证号的长度是否为 18 位。在大多数国家和地区,身份证号通常是固定长度的,因此这里假设长度为 18 位。

开头检查
boolean flag = personId.startsWith("0");
if (flag) {return false;
}

检查身份证号码是否以 "0" 开头。根据常见的身份证号规则,有些国家或地区的身份证号不应以 "0" 开头,因此这里排除以 "0" 开头的情况。

前17位检查
for (int i = 0; i < personId.length() - 1; i++) {if (personId.charAt(i) < '0' || personId.charAt(i) > '9') {return false;}
}

遍历身份证号的前 17 位,确保它们都是数字字符 ('0' 到 '9')。如果发现非数字字符,立即返回 false

第18位检查
char endChar = personId.charAt(personId.length() - 1);
if ((endChar >= '0' && endChar <= '9') || (endChar == 'x') || (endChar == 'X')) {return true;
} else {return false;
}

检查身份证号的第 18 位。它可以是数字字符 ('0' 到 '9'),或者是 'x' 或 'X'(用于表示身份证号的最后一位可能是大写字母 X)。

 检查用户名

长度检查
int len = username.length();
if (len > 15 || len < 2) {return false;
}

首先检查用户名的长度是否在 2 到 15 之间。这个范围内的长度通常被认为是合适的,太短可能不够描述,太长则可能过于复杂。

字符组成检查
for (int i = 0; i < username.length(); i++) {char ch = username.charAt(i);if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))) {return false;}
}

遍历用户名的每个字符,确保它们只包含字母(大小写)和数字。如果发现非这些字符,则返回 false

字母检查
int countnum = 0;
for (int i = 0; i < username.length(); i++) {char ch = username.charAt(i);if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {countnum++;}
}

计算用户名中字母的个数。这段代码似乎是想确保用户名中至少包含一个字母,因为 countnum 变量只有在字符是字母时才增加。

生成一个验证码

创建字母集合
ArrayList<Character> code = new ArrayList<>();
for (int i = 0; i < 26; i++) {code.add((char) ('a' + i));  // 添加小写字母code.add((char) ('A' + i));  // 添加大写字母
}

首先创建了一个包含所有小写和大写字母的集合 code,即 [a-zA-Z]

随机生成四个字母
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {int index = r.nextInt(code.size());char ch = code.get(index);sb.append(ch);
}

使用 Random 类生成四个随机位置的字母,并将它们添加到 StringBuilder sb 中。

生成一个随机数字
int num = r.nextInt(10);
sb.append(num);

使用 Random 类生成一个 0 到 9 之间的随机数字,并将其追加到 sb 中。

调整数字位置
char[] arr = sb.toString().toCharArray();
int index = r.nextInt(arr.length);
char ch = arr[index];
arr[index] = arr[arr.length - 1];
arr[arr.length - 1] = ch;

将生成的验证码转换为字符数组 arr,然后随机选择一个位置将最后一个字符(即数字)与之交换,以增加验证码的随机性。

五、全套源代码

APP.java

package com.von.StudentSystem;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class App {public static void main(String[] args) {ArrayList<User> users = new ArrayList<>();Scanner sc = new Scanner(System.in);while (true) {System.out.println("欢迎来到VON学生管理系统");System.out.println("请选择操作:1登录 2注册 3忘记密码 4退出");String choose = sc.next();switch (choose) {case "1" -> login(users);case "2" -> register(users);case "3" -> forget(users);case "4" -> {System.out.println("谢谢使用,再见");System.exit(0);}default -> System.out.println("没有这个选项");}}}//忘记密码private static void forget(ArrayList<User> users) {Scanner sc = new Scanner(System.in);System.out.println("请输入用户名");String username = sc.next();boolean flag = comtains(users, username);if (!flag) {System.out.println("当前用户" + username + "未注册,请先注册");return;}//输入身份证号和手机号System.out.println("请输入身份证号码");String perdonId = sc.next();System.out.println("请输入手机号码");String phoneNumber = sc.next();//比较身份证号,和手机号是否一样int index = findIndex(users, username);User user = users.get(index);if (!(user.getPersonId().equalsIgnoreCase(perdonId) && user.getPhoneNumber().equals(phoneNumber))) {System.out.println("身份证号码或手机号码输入有误,不能修改密码");return;}//更改密码String password;while (true) {System.out.println("请输入新密码");password = sc.next();System.out.println("请再次输入密码");String newPassword = sc.next();if (password.equals(newPassword)) {System.out.println("两次密码输入一致");break;} else {System.out.println("两次密码不一致,请重新输入");continue;}}//修改密码user.setPassword(password);System.out.println("密码修改成功");}//查找用户下标private static int findIndex(ArrayList<User> users, String username) {for (int i = 0; i < users.size(); i++) {if (users.get(i).getUserName().equals(username)) {return i;}}return -1;}//登录private static void login(ArrayList<User> users) {Scanner sc = new Scanner(System.in);for (int i = 0; i < 3; i++) {System.out.println("请输入用户名");String username = sc.next();boolean flag = comtains(users, username);if (!flag) {System.out.println("用户名" + username + "未注册,请先注册在登录");System.exit(0);}System.out.println("请输入密码");String password = sc.next();while (true) {String rightCode = GetCode();System.out.println("当前验证码为:" + rightCode);System.out.println("请输入验证码");String code = sc.next();if (code.equalsIgnoreCase(rightCode)) {System.out.println("验证码正确");break;} else {System.out.println("验证码错误,请重新输入");continue;}}//检查用户名和密码是否正确User userInfo = new User(username, password, null, null);boolean result = checkUserInfo(users, userInfo);if (result) {System.out.println("登录成功");SyuSystem ss = new SyuSystem();ss.StartStuSystem();break;} else {System.out.println("登录失败,用户名或密码错误");if (i == 2) {System.out.println("当前账号" + username + "被锁定");return;} else {System.out.println("用户名或密码错误,还剩下" + i + "次机会");}}}}//检查用户名和密码是否正确private static boolean checkUserInfo(ArrayList<User> users, User userInfo) {for (int i = 0; i < users.size(); i++) {if (users.get(i).getUserName().equals(userInfo.getUserName()) && users.get(i).getPassword().equals(userInfo.getPassword())) {return true;}}return false;}//注册private static void register(ArrayList<User> users) {//1.输入用户名Scanner sc = new Scanner(System.in);String username;while (true) {System.out.println("请输入用户名");username = sc.next();boolean flag1 = checkUsername(username);if (!flag1) {System.out.println("格式不满足条件,需要重新输入");} else {//检测用户名是否唯一boolean flag2 = comtains(users, username);if (!flag2) {System.out.println("用户名" + username + "可用");break;} else {System.out.println("用户名" + username + "已存在,请重新输入");}}}//2.输入密码String password;while (true) {System.out.println("请输入要注册的密码");password = sc.next();System.out.println("请再次输入密码");String password2 = sc.next();if (password.equals(password2)) {System.out.println("两次密码一致,继续输入其他数据");break;} else {System.out.println("两次密码不一致,请重新输入");continue;}}//3.输入身份证号码String personId;while (true) {System.out.println("请输入身份证号");personId = sc.next();boolean flag = checkPersonId(personId);if (flag) {System.out.println("身份证号码满足需求");break;} else {System.out.println("身份证号码不满足需求,请重新输入");continue;}}//4.输入手机号码String phoneNumber;while (true) {System.out.println("请输入手机号码");phoneNumber = sc.next();boolean flag = checkPhoneNumber(phoneNumber);if (flag) {System.out.println("手机号格式正确");break;} else {System.out.println("手机号格式有误,请重新输入");continue;}}//5.用户名、密码、身份证号、手机号放到用户中User user = new User(username, password, personId, phoneNumber);users.add(user);//6.遍历集合printList(users);}//遍历集合private static void printList(ArrayList<User> users) {for (int i = 0; i < users.size(); i++) {User user = users.get(i);System.out.println(user.toString());}}//检查手机号码private static boolean checkPhoneNumber(String phoneNumber) {//长度为11位if (phoneNumber.length() != 11) {return false;}//不能0开头if (phoneNumber.startsWith("0")) {return false;}//必须都是数字for (int i = 0; i < phoneNumber.length(); i++) {if (phoneNumber.charAt(i) > '9' && phoneNumber.charAt(i) < '0') {return false;}}return true;}//检查身份证号private static boolean checkPersonId(String personId) {//身份证号长度if (personId.length() != 18) {return false;}//检查开头数据boolean flag = personId.startsWith("0");if (flag) {return false;}//判断前17位for (int i = 0; i < personId.length() - 1; i++) {if (personId.charAt(i) < '0' || personId.charAt(i) > '9') {return false;}}//判断第18位char endChar = personId.charAt(personId.length() - 1);if ((endChar >= '0' && endChar <= '9') || (endChar == 'x') || (endChar == 'X')) {return true;} else {return false;}}//检查用户是否在集合中private static boolean comtains(ArrayList<User> users, String username) {for (int i = 0; i < users.size(); i++) {if (users.get(i).getUserName().equals(username)) {return true;}}return false;}//检查用户名private static boolean checkUsername(String username) {//用户长度必须在3-15位之间int len = username.length();if (len > 15 || len < 2) {return false;}//只能是字母加数字,不能是纯数字for (int i = 0; i < username.length(); i++) {char ch = username.charAt(i);if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))) {return false;}}//记录字母的个数int countnum = 0;for (int i = 0; i < username.length(); i++) {char ch = username.charAt(i);if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {countnum++;}}return countnum > 0;}//生成一个验证码private static String GetCode() {//创建一个集合存放字母ArrayList<Character> code = new ArrayList<>();for (int i = 0; i < 26; i++) {code.add((char) ('a' + i));code.add((char) ('A' + i));}//随机生成四个字母Random r = new Random();StringBuilder sb = new StringBuilder();for (int i = 0; i < 4; i++) {int index = r.nextInt(code.size());char ch = code.get(index);sb.append(ch);}//生成一个随机数字int num = r.nextInt(10);sb.append(num);//调整数字的位置char[] arr = sb.toString().toCharArray();int index = r.nextInt(arr.length);char ch = arr[index];arr[index] = arr[arr.length - 1];arr[arr.length - 1] = ch;return new String(arr);}
}

Student.java

package com.von.StudentSystem;public class Student {private String id;private String name;private int age;private String gender;private String address;public Student() {}public Student(String id, String name, int age, String gender, String address) {this.id = id;this.name = name;this.age = age;this.gender = gender;this.address = address;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

SyuSystem.java

package com.von.StudentSystem;import java.util.ArrayList;
import java.util.Scanner;public class SyuSystem {public static void StartStuSystem() {ArrayList<Student> students = new ArrayList<Student>();//菜单loop: while(true) {System.out.println("===================欢迎来到VON学生管理系统===================");System.out.println("====================1:添加学生============================");System.out.println("====================2:删除学生============================");System.out.println("====================3:修改学生============================");System.out.println("====================4:查找学生============================");System.out.println("====================5:退出系统============================");System.out.println("请输入您的选择");Scanner sc = new Scanner(System.in);String choose = sc.nextLine();switch (choose) {case "1" -> addStudent(students);case "2" -> delStudent(students);case "3" -> changeStudent(students);case "4" -> findStudent(students);case "5" -> {System.out.println("系统退出成功。欢迎再次使用");break loop;}default -> System.out.println("没有该选项");}}}//1.添加学生public static void addStudent(ArrayList<Student> students) {Student student = new Student();Scanner sc = new Scanner(System.in);while(true) {System.out.println("请输入学生ID");String id = sc.next();boolean flag = contains(students, id);if(flag) {//已经存在System.out.println("id已经存在请重新录入");}else {//不存在student.setId(id);System.out.println("请输入学生的姓名");String name = sc.next();student.setName(name);System.out.println("请输入学生年龄");int age = sc.nextInt();student.setAge(age);System.out.println("请输入学生性别");String gender = sc.next();student.setGender(gender);System.out.println("请输入学生家庭住址");String address = sc.next();student.setAddress(address);students.add(student);System.out.println("学生信息添加成功");break;}}}//2.删除学生public static void delStudent(ArrayList<Student> students) {System.out.println("请输入你要删除学生的id");Scanner sc = new Scanner(System.in);String id = sc.next();boolean flag = contains(students, id);if(flag) {//id存在for (int i = 0; i < students.size(); i++) {if(students.get(i).getId().equals(id)) {students.remove(i);System.out.println("id为"+id+"的学生删除成功");break;}}}else{//id不存在System.out.println("id不存在,删除失败");}}//3.修改学生public static void changeStudent(ArrayList<Student> students) {System.out.println("请输入要修改学生的id");Scanner sc = new Scanner(System.in);String id = sc.next();boolean flag = contains(students, id);if(flag) {//id存在for (int i = 0; i < students.size(); i++) {if(students.get(i).getId().equals(id)) {System.out.println("请输入要修改的学生姓名");students.get(i).setName(sc.next());System.out.println("请输入要修改的学生年龄");students.get(i).setAge(sc.nextInt());System.out.println("请输入要修改的学生性别");students.get(i).setGender(sc.next());System.out.println("请输入要修改的学生地址");students.get(i).setAddress(sc.next());break;}}}else{//id不存在System.out.println("要修改的id"+id+"不存在,请重新输入");}}//4.查询学生public static void findStudent(ArrayList<Student> students) {if(students.size() == 0) {System.out.println("当前没有任何学生信息,请添加后再查询");return;}System.out.println("id\t\t"+"姓名\t\t"+"年龄\t\t"+"性别\t\t"+"家庭住址");for (int i = 0; i < students.size(); i++) {Student stu = students.get(i);System.out.println(stu.getId()+"\t\t"+stu.getName()+"\t\t"+stu.getAge()+"\t\t"+stu.getGender()+"\t\t"+stu.getAddress());}}//5.判断id是否在集合中存在public static boolean contains(ArrayList<Student> students, String id) {for (int i = 0; i < students.size(); i++) {if(students.get(i).getId().equals(id)) {return true;}}return false;}
}

User.java

package com.von.StudentSystem;public class User {private String userName;private String password;private String personId;private String phoneNumber;public User() {}public User(String userName, String password, String personId, String phoneNumber) {this.userName = userName;this.password = password;this.personId = personId;this.phoneNumber = phoneNumber;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPersonId() {return personId;}public void setPersonId(String personId) {this.personId = personId;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}@Overridepublic String toString() {return "User{" +"userName='" + userName + '\'' +", password='" + password + '\'' +", personId='" + personId + '\'' +", phoneNumber='" + phoneNumber + '\'' +'}';}
}

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

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

相关文章

论文翻译 | LEAST-TO-MOST: 从最少到最多的提示使大型语言模型中的复杂推理成为可能

摘要 思维链提示&#xff08;Chain-of-thought prompting&#xff09;在多种自然语言推理任务上展现了卓越的性能。然而&#xff0c;在需要解决的问题比提示中展示的示例更难的任务上&#xff0c;它的表现往往不佳。为了克服从简单到困难的泛化挑战&#xff0c;我们提出了一种新…

快速在springboot项目中应用EasyExcel

目录 ​编辑一、介绍 二、准备工作 三、初始化项目 3.1 创建项目 3.2 引入依赖 3.3 创建数据库和数据表 3.4 编写application.properties文件 四、开始编写 4.1 目录结构 4.2 MyBatis配置类 4.3 用户实体类 4.4 mapper接口 4.5 编写数据操作文件 4.6 编写Service 业…

【Linux】03.权限

一、权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以在 linux 系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在linux下做有限的事情超级用户的命令提示符是“#”&#xff0c;普通用户的命…

字节算法岗面试,效率贼高

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友…

python--实验 11 模块

目录 知识点 模块基础 模块使用方式 自定义模块示例 模块的有条件执行 Python包结构 定义和导入包 常用第三方库及安装 实例代码 第三方库自动安装脚本 Python标准库介绍 PyInstaller 小结 实验 1.(基础题)制作文本进度条。 2.(基础题) 蒙特卡罗方法计算圆周率…

[GXYCTF2019]BabySQli

原题目描述&#xff1a;刚学完sqli&#xff0c;我才知道万能口令这么危险&#xff0c;还好我进行了防护&#xff0c;还用md5哈希了密码&#xff01; 我看到是个黑盒先想着搞一份源码 我dirsearch明明扫到了.git&#xff0c;算了直接注入试试看 随便输入了两个东西&#xff0c…

Type-C PD芯片:引领充电技术的新纪元

随着科技的飞速发展&#xff0c;人们对电子设备的依赖日益加深&#xff0c;对充电速度、效率和安全性的要求也越来越高。在这样的背景下&#xff0c;Type-C PD&#xff08;Power Delivery&#xff09;芯片应运而生&#xff0c;以其高效、安全、智能的特点&#xff0c;成为了充电…

vscode编译环境配置-golang

1. 支持跳转 如果单测函数上方不显示run test | debug test&#xff0c;需要安装Code Debugger&#xff08;因为以前的go Test Explorer不再被维护了&#xff09; 2. 单测 指定单个用例测试 go test -v run TestXXXdlv 调试 需要安装匹配的go版本和delve版本&#xff08;如…

Linux多线程编程-生产者与消费者模型详解与实现(C语言)

1.什么是生成者与消费者模型 生产者-消费者模型是并发编程中的经典问题&#xff0c;描述了多个线程&#xff08;或进程&#xff09;如何安全、有效地共享有限的缓冲区资源。在这个模型中&#xff0c;有两种角色&#xff1a; 生产者&#xff08;Producer&#xff09;&#xff1…

<数据集>光伏板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2400张 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Crack,Grid,Spot] 序号类别名称图片数框数1Crack8688922Grid8248843S…

研究生发表期刊/会议必看,一文看懂A/B/C类和顶刊

主要看&#xff1a;中国计算机学会&#xff08;CCF&#xff09;推荐国际学术期刊 里面的划分等级 等级为&#xff1a;A类&#xff08;最难&#xff09;>B类&#xff08;中等难度&#xff09;>C类&#xff08;难度一般&#xff09; 本人这边计划&#xff1a;最低发C刊&a…

css-grid布局(栅格布局)

css新世界-auto-fit grid 一个比flex更强大的布局,适合做整体布局 grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); auto-fit的话有strech效果gap 不仅可以用于grid 也可用flex. 在grid-template-areas表示这个位置空着grid area 的 [a b]命名可重复命名 表示的…

双向收发的信号应该在哪进行串联端接?分享几个实用设计方法!

高速先生成员--黄刚 经过上次高速先生的描述&#xff0c;相信大家已经掌握了串联端接的秘诀了&#xff0c;简单来说&#xff0c;那就是第一步&#xff1a;先看看芯片的驱动内阻&#xff0c;第二步&#xff1a;再用加起来50欧姆匹配的方法来选择适合的串阻值&#xff0c;第三步&…

【C语言报错已解决】格式化字符串漏洞(Format String Vulnerability)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述&#xff1a;1.1 报错示例&#xff1a;1.2 报错分析&#xff1a;1.3 解决思路&#xff…

HEROIC FANTASY WERE CREATURES PACK VOL 2 (幻想生物)

这个包收集了5种英雄幻想生物:狼人,狼人,狼人山羊,狼人鲨鱼和狼人蜘蛛。 狼人:27.5 Ktris Max//101个骨骼//4种材质//最多4096*4096个纹理//40个动画(11个是根运动变体) 狼人:15.83 Ktris//66个骨骼//3种材质//最多4096*4096个纹理//35个动画(9个是根运动变体) wereg…

Centos 使用nfs配置共享目录使docker集群所有容器日志统一主机访问

Centos 使用nfs配置共享目录&#xff0c;使docker集群所有容器日志统一存放在主机一个共享目录下&#xff0c;供开发人员访问查看 准备两台或以上Centos服务器 192.168.0.1 nfs服务器 192.168.0.2 nfs客户端 以root用户登录192.168.0.1服务器&#xff0c;执行以下操作 注意先…

excel根据数据批量创建并重命名工作表

需求 根据一列数据&#xff0c;批量创建并重命名工作表 做法 1. 右键该sheet&#xff0c;选择查看代码 2. 输入VBA代码 正向创建 Sub create_sheets_by_col()Dim num% 定义为integer*num Application.WorksheetFunction.CountA(Sheet1.Range("A:A")) num是非空…

接着探索Linux的世界 -- 基本指令(文件查看、时间相关、打包压缩等等)

话不多说&#xff0c;直接进入主题 一、cat指令 -- 查看目标文件的内容 语法&#xff1a;cat [选项][文件] 功能&#xff1a; 查看目标文件的内容 -b 对非空输出行编号 -n 对输出的所有行编号 -s 不输出多行空行 1、查看目标文件的内容 2、 -b 对非空输出行编号 3、-n 对…

项目部署笔记

1、安全组需开放&#xff08;如果不开放配置nginx也访问不到&#xff09; 2、域名解析配置IP(子域名也需配置IP&#xff0c;IP地址可以不同) 3、如果出现图片获其他的文件找不到的情况请仔细检查一下路径是否正确 4、服务器nginx配置SSL证书后启动报错&#xff1a; nginx: […

巧用 VScode 网页版 IDE 搭建个人笔记知识库!

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 巧用 VScode 网页版 IDE 搭建个人笔记知识库! 描述&#xff1a;最近自己在腾讯云轻量云服务器中部署了一个使用在线 VScode 搭建部署的个人Markdown在线笔记&#xff0c;考虑到在线 VScode 支持终…