步骤1:思路分析,b站链接:思路分析
步骤2:创建StudentSystemPlus包。
步骤3:编写StudentSystemPlus类和User类。
代码:
StudentSystemPlus类:
package StudentSystemPlus;
import org.w3c.dom.css.CSSStyleRule;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StudentSystemPlus {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
// 登录界面
while(true){
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作: 1登录 2注册 3忘记密码 4 退出");
System.out.println("请输入您的选择:");
// int choose = sc.nextInt();
String choose = sc.next();
switch (choose){
case "1":{ enroll(list); break; }
case "2": { login(list); break;}
case "3": { forgetPassword(list); break; }
case "4": { System.out.println("谢谢使用,再见"); System.exit(0); }
default: {System.out.println("没有这个选项"); break;}
}
}
}
//注册
private static void login(ArrayList<User> list){
Scanner sc = new Scanner(System.in);
System.out.println("用户注册");
String name, password, personid, phoneNumber;
while(true){
System.out.println("请输入用户名");
name = sc.next();
if(checkname(list, name) == true) break;
else System.out.println("输入的用户名不合法,请重新输入");
}
//用户名合法后,输入注册密码
while(true){
System.out.println("请输入密码");
password = sc.next();
System.out.println("请再次输入密码");
String password2 = sc.next();
if(checkpassword(password2, password) == true)break;
else System.out.println("两次输入的密码不一样,请重新输入");
}
//进行身份证号验证
while(true){
System.out.println("请输入身份证号码");
personid = sc.next();
if(checkpersonid(personid) == true) break;
else System.out.println("身份证密码不合法,请重新输入");
}
//验证手机号码
while (true){
System.out.println("请输入手机号码");
phoneNumber = sc.next();
if(checkphoneNumber(phoneNumber) == true) break;
else System.out.println("手机号不合法,请重新输入");
}
//都合法,加入集合
User u = new User(name, password, personid, phoneNumber);
list.add(u);
System.out.println("注册成功!");
printlist(list);
}
//登录
private static void enroll(ArrayList<User> list){
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名");
String name = sc.next();
int userIndex = getindex(list, name);
if(userIndex < 0) { System.out.println("用户未注册,请先注册"); return; }
System.out.println("请输入密码");
String password = sc.next();
while(true){
String rightcode = getCode();
System.out.println("当前正确的验证码为" + rightcode);
String code = sc.next();
if(code.equalsIgnoreCase(rightcode)) { System.out.println("验证码正确"); break; }
else System.out.println("验证码错误");
}
User useInfo = new User(name, password, null,null);
//判断登录的用户名和密码对不对得上
if( list.get(userIndex).getPassword().equals(password)) { System.out.println("登录成功!可以开始使用学生管理系统了"); break; }
else if(i == 2) { System.out.println("登录失败,账户已被锁定,请联系客服"); return; }
else System.out.println("用户名或密码错误,当前还剩下" + (2 - i) + "次机会" );
}
}
//忘记密码
private static void forgetPassword(ArrayList<User> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String usename = sc.next();
int useindex = getindex(list, usename);
if(useindex < 0) { System.out.println("用户名" + usename + "未注册,请先注册"); return; }
System.out.println("请输入身份证号码");
String personid = sc.next();
System.out.println("请输入手机号码");
String phoneNumber = sc.next();
User u = list.get(useindex);
if(!(u.getPersonid().equals(personid) && u.getPhoneNumber().equals(phoneNumber))){
System.out.println("身份证号码或手机号码有误,不能修改密码");
return;
}
String password; //设置新密码
while(true){
System.out.println("请输入密码");
password = sc.next();
System.out.println("请再次输入密码");
String password2 = sc.next();
if(checkpassword(password2, password) == true){ System.out.println("两次输入密码一致"); break; }
else System.out.println("两次输入的密码不一样,请重新输入");
}
u.setPassword(password);
list.set(useindex, u);
}
//寻找下标
private static int getindex(ArrayList<User> list, String name){
//判断name是否存在
for (int i = 0; i < list.size(); i++) {
User u = list.get(i);
if(u.getUsername().equals(name)) return i; // 如果用户名存在,返回xiabiao
}
return -1;
}
//判断用户名是否合法
private static boolean checkname(ArrayList<User> list, String name){
if(name.length() < 3 || name.length() > 15) return false;
int zimu=0;
char[] c = name.toCharArray();
for (int i = 0; i < c.length; i ++) // 判断name是否合法
{
if(!((c[i]>= '0' && c[i] <= '9') || (c[i]>= 'a' && c[i] <= 'z') || (c[i]>= 'A' && c[i] <= 'Z'))) return false;
if((c[i]>= 'a' && c[i] <= 'z') || (c[i]>= 'A' && c[i] <= 'Z')) zimu ++;
}
if(zimu == 0) return false;
if(getindex(list, name) > 0) return false;
return true;
}
//判断密码是否一致
private static boolean checkpassword(String s1, String s2){
if(s1.equals(s2) != true) return false;
return true;
}
//检查身份证号码是否合法
private static boolean checkpersonid(String personid){
if(personid.length() != 18) return false; // 长度不合法
char[] shenfenzhenghao = personid.toCharArray();
for (int i = 0; i < shenfenzhenghao.length - 1; i++) //前17位如果不全是数字,就不合法
if(shenfenzhenghao[i] >'9' || shenfenzhenghao[i] <'0') return false;
//如果最后一位不是x或者X,就不行
char zuihouyiwei = shenfenzhenghao[shenfenzhenghao.length - 1];
if(zuihouyiwei != 'x' && zuihouyiwei != 'X' && (zuihouyiwei > '9' && zuihouyiwei <'0'))
return false;
return true;
}
//检查手机号码是否合法
private static boolean checkphoneNumber(String phoneNumber){
if(phoneNumber.length() != 11) return false;
if(phoneNumber.charAt(0) == '0') return false;
for (int i = 0; i < phoneNumber.length(); i++) {
char z = phoneNumber.charAt(i);
if(z > '9' || z < '0') return false; break;
}
return true;
}
//遍历list
private static void printlist(ArrayList<User> list){
for (int i = 0; i < list.size(); i++) {
User u = list.get(i);
System.out.println(u.getUsername() + "\t" + u.getPassword() + "\t" + u.getPersonid() + "\t" + u.getPhoneNumber());
}
}
//获取验证码
private static String getCode(){
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < 26; i++) {
list.add((char)('a' + i));
list.add((char)('A' + i));
}
StringBuilder sb = new StringBuilder();
Random rm = new Random();
for (int i = 0; i < 4; i++) {
int index = rm.nextInt(list.size());
char c = list.get(index);
sb.append(c);
}
int k = rm.nextInt(9);
sb.append(k);
//打乱顺序
char[] arr = sb.toString().toCharArray();
k = rm.nextInt(arr.length);
char c = arr[k];
arr[k] = arr[4];
arr[4] = c;
return new String(arr);
}
}
User类:
package StudentSystemPlus;
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;
}
}