学生管理系统升级版
1.需求
为学生管理系统书写一个登陆、注册、忘记密码的功能
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
(1)登录界面
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
(2)用户类
属性:用户名、密码、身份证号码、手机号码
(3)注册功能
1.用户名需要满足以下要求:
验证要求:
用户名唯一
用户名长度必须在3~15位之间
只能是字母加数字的组合,但是不能是纯数字
2.密码键盘输入两次,两次一致才可以进行注册
3.身份证号码需要验证
验证要求:
长度为18位
不能以0开头
前17位,必须都是数字
最后一位可以是数字,也可以是大写或小写x
4.手机号验证
验证要求:
长度为11位
不能以0开头
必须都是数字
(4)登录功能
1.键盘录入用户名
2.键盘录入密码
3.键盘录入验证码
验证要求:
用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
判断验证码是否正确,如不正确,重新输入
再判断用户名和密码是否正确,有3次机会
(5)忘记密码
1.键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
2.键盘录入身份证号码和手机号
3.判断当前用户的身份证号码和手机号码是否一致
如果一致,则提示输入密码,进行修改
如果不一致,则提示:账号密码不匹配,修改失败
(6)验证码规则:
长度为5
有4位大写或小写字母和1位数字组成,同一个字母可重复
数字可以出现在任意位置
比如:aQa1k
2.代码实现
public class User{
private String username;
private String password;
private String id;
private String phone;
public User(){
}
public User(String username,String password,String id,String phone){
this.username = username;
this.password = password;
this.id = id;
this.phone = phone;
}
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
}
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public void setPhone(String phone){
this.phone = phone;
}
public String getPhone(){
return phone;
}
}
import java.util.Scanner;
import java.util.Random;
import java.util.ArrayList;
public class UserText{
public static void main(String[] args) {
ArrayList<User> users = new ArrayList<>();
Scanner sc = new Scanner(System.in);
User u1 = new User("7777uuuu","1234aaaa","362330200308244584","18296423420");
User u2 = new User("8888vvvv","1234aaaa","362330200308244584","18296423420");
users.add(u1);
users.add(u2);
String a;
loop:while(true){
System.out.println("-----------欢迎来到学生管理系统---------");
System.out.println("---------------1.登录-----------------");
System.out.println("---------------2.注册-----------------");
System.out.println("---------------3.忘记密码--------------");
System.out.println("---------------4.退出-----------------");
System.out.println("--------------------------------------");
System.out.println("----------------请输入选择:------------");
a = sc.next();
switch(a){
case "1" -> logIn(users);
case "2" -> users = register(users);
case "3" -> users = forget(users);
case "4" -> {
System.out.println("退出成功");
break loop;
}
default -> System.out.println("没有这个选项");
}
}
}
public static ArrayList<User> register(ArrayList<User> users){
Scanner sc = new Scanner(System.in);
System.out.println("请输入新的用户名");
String username = sc.next();
boolean flag = false;
if(!usernameCheck(username)) {//先判断格式,再判断唯一
System.out.println("用户名未注册但不符合要求");
}else {
for (int i = 0; i < users.size(); i++) {
if (username.equals(users.get(i).getUsername())) {
System.out.println("用户名已被注册");
flag = true;
}
}
if (!flag) {
System.out.println("设置登录密码");
String pw1 = sc.next();
System.out.println("再次输入");
String pw2 = sc.next();
if (pw1.equals(pw2)) {
System.out.println("密码输入一致");
System.out.println("请输入身份证号");
String s1 = sc.next();
System.out.println("请输入手机号");
String s2 = sc.next();
System.out.println("请输入验证码");
String s = getCaptcha();
System.out.println(s);
String captcha = sc.next();
if (checkId(s1) && checkPhone(s2)) {
if(captcha.equals(s)){//也可用equalsIgnoreCase()
User u = new User(username, pw1, s1, s2);
users.add(u);
System.out.println("注册成功");
return users;
}else{
System.out.println("验证码错误");
}
} else {
System.out.println("身份证号或手机号不符合要求");
}
} else {
System.out.println("两次输入密码不同");
}
}
}
return users;
}
public static boolean usernameCheck(String username){
char[] arr = username.toCharArray();
int count1 = 0;
int count2 = 0;
if(arr.length < 3 || arr.length > 15){
return false;
}else {
for (int i = 0; i < arr.length; i++) {
if ((arr[i] >= 'A' && arr[i] <= 'Z') || (arr[i] >= 'a' && arr[i] <= 'z')) {
count1++;
} else if ((arr[i] >= '0' && arr[i] <= '9')) {
count2++;
}
}
if (count1 + count2 == arr.length && count2 != arr.length) {
return true;
} else {
return false;
}
}
}
public static String getCaptcha(){
Random r = new Random();
char[] arr = new char['Z' - 'A' + 1 + 'z' - 'a' + 1];
String s = "";
for (int i = 0; i < arr.length / 2; i++) {
arr[i] = (char) (i + 'A');
}
for (int i = arr.length / 2; i < arr.length; i++) {
arr[i] = (char) (i + 'a' - arr.length / 2);
}
for (int i = 0; i < 4; i++) {
s += arr[r.nextInt(arr.length)];
}
s += r.nextInt(10);
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
int j = r.nextInt(chs.length);
char tmp = chs[i];
chs[i] = chs[j];
chs[j] = tmp;
}
String result = new String(chs);
return result;
}
public static boolean checkId(String id){
int count = 0;
for (int i = 0; i < id.length(); i++) {
if(id.charAt(i) >= '0' && id.charAt(i) <= '9'){
count++;
}
}
if(id.length() == 18 && id.charAt(0) != '0' && count >= 17 && last(id.charAt(17))){//id.startsWith("0")是否以"0"开头
return true;
}else{
return false;
}
}
public static boolean last(char c){
if((c == 'X') || (c == 'x') || (c >= '0' && c <= '9')){
return true;
}else{
return false;
}
}
public static boolean checkPhone(String phone){
int count = 0;
for (int i = 0; i < phone.length(); i++) {
if(phone.charAt(i) >= '0' && phone.charAt(i) <= '9'){
count++;
}
}
if(phone.length() == 11 && count == 11){
return true;
}else {
return false;
}
}
public static ArrayList<User> forget(ArrayList<User> users){
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.next();
boolean flag = false;
int index = 0;
for (int i = 0; i < users.size(); i++) {
if(username.equals(users.get(i).getUsername())) {
flag = true;
index = i;
}
}
if(!flag){
System.out.println("未注册");
return users;
}else{
System.out.println("请输入身份证号");
String uId= sc.next();
System.out.println("请输入手机号");
String uPhone = sc.next();
if(uId.equals(users.get(index).getId()) && uPhone.equals(users.get(index).getPhone())){
System.out.println("请输入新密码");
String newPassword =sc.next();
if(newPassword.equals(users.get(index).getPassword())){
System.out.println("新密码与原密码一致,修改失败");
}else {
users.get(index).setPassword(newPassword);
System.out.println("修改成功,请重新登录");
}
}else{
System.out.println("身份证号或手机号输入错误,密码修改失败");
}
}
return users;
}
public static void logIn(ArrayList<User> users){
Scanner sc = new Scanner(System.in);
boolean flag = false;
int index = 0;
System.out.println("请输入您的用户名");
String username = sc.next();
for (int i = 0; i < users.size(); i++) {
if(username.equals(users.get(i).getUsername())) {
flag = true;
index = i;
}
}
if(!flag){
System.out.println("未注册");
}else {
String captcha;
String s;
int count = 0;
do {
count++;;
s = getCaptcha();;
System.out.println(s);
System.out.println("请输入验证码");
captcha = sc.next();
if(count > 1){
System.out.println("验证码错误,请重新输入");
}
} while (!s.equals(captcha));
System.out.println("验证码正确");
int i;
for (i = 0; i < 3; i++) {
System.out.println("请输入密码,还有" + (3 - i) + "次机会");
String uPassword = sc.next();
if (uPassword.equals(users.get(index).getPassword())) {
System.out.println("登录成功");
break;
}
}
if (i == 3) {
System.out.println("3次机会用完,登录失败");
}
}
}
}
IDEA注释:Ctrl(+Shift)+/