复制代码
package com.jdL.studentmanagement;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class UserMain {
public static void main(String[] args) {
//建立一个user对象的集合
ArrayList<user> userlist = new ArrayList<>();
while (true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作:1登录 2注册 3忘记密码");
System.out.println("请输入您的选择:");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose) {
case "1":
boolean flag=login(userlist);
if(flag){
System.out.println("登录成功");
}
break;
case "2":
userlist=register(userlist);
break;
case "3":
forgetPassword(userlist);
break;
default:
System.out.println("无此相关操作");
break;
}
}
}
//在一个集合中判断数据是否存在
public static boolean contains(ArrayList<user> list, String name) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(name)) {
return true;
}
}
return false;
}
//获取一个number位数的验证码
public static String getVerification(int number){
char[] chars = new char[number];
char[] array={'a','b','c','d','e','f','g','h','A','B','C','D','E','F','G','H'};
char temp=' ';
Random random=new Random();
for (int i = 0; i < chars.length-1; i++) {
//每次都随机产生一个
int num=random.nextInt(array.length);
chars[i]=array[num];
}
int num1=random.nextInt(10);
chars[chars.length-1]=(char)(num1+'0');
//把验证码数组中数字放在任意位置
int num2=random.nextInt(chars.length-1);
temp=chars[num2];
chars[num2]=chars[chars.length-1];
chars[chars.length-1]=temp;
//输出验证码字符串
return String.valueOf(chars);
}
//在一个集合中获取姓名对应的密码
public static String getpassword(ArrayList<user> list, String name) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(name)) {
return list.get(i).getPassword();
}
}
return null;
}
//在一个集合中获取姓名对应的索引
public static int getIndex(ArrayList<user> list, String name) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(name)) {
return i;
}
}
return -1;
}
//2、注册
public static ArrayList<user> register(ArrayList<user> list) {
//注册:用户名的判断
Scanner sc = new Scanner(System.in);
String name=" ";
loop:
while (true) {
int count = 0;
System.out.println("请输入用户名:");
name = sc.next();
//判断录入的用户名是否已经存在,利用contain方法输出真假
if (contains(list, name)) {
System.out.println("此用户名已存在");
} else {
//不存在继续判断字符串长度
if (name.length() >= 3 && name.length() <= 15) {
for (int i = 0; i < name.length(); i++) {
//用户名的每一个字符都必须在a~z,A~Z,0~9三个之间
char ch = name.charAt(i);
//System.out.println(ch);
if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))) {
System.out.println("注册的用户名需要包含字母和数字");
break;
} else {
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
count++;
}
}
}
if(count>0){
//list.add(new user().setName(name);
break;
}else{
System.out.println("注册的用户不能为数字");
}
} else {
System.out.println("用户名长度必须在3~15之间,请确认");
}
}
}
//注册:键盘密码输入的时候,需两次一样才可以注册
String password = " ";
while (true) {
System.out.println("请输入密码:");
String passwordFirst = sc.next();
System.out.println("请再次输入密码:");
String passwordSecond = sc.next();
if (!passwordFirst.equals(passwordSecond)) {
System.out.println("两次密码输入不一致,");
} else {
password = passwordFirst;
break;
}
}
//注册:身份证号码的验证
String idcard = " ";
loop:while (true) {
System.out.println("请输入用户名身份证号:");
String idcardtemp = sc.next();
if (idcardtemp.charAt(0) == '0' || idcardtemp.length() != 18) {
System.out.println("录入的身份证号必须满足18位且第一位不能为0");
continue;
} else {
for (int i = 0; i < idcardtemp.length() - 1; i++) {
if (!((idcardtemp.charAt(i) >= '0' && idcardtemp.charAt(i) <= '9'))) {
System.out.println("身份证号前面17位必须为纯数字");
continue loop;
} else {
char last = idcardtemp.charAt(idcardtemp.length() - 1);
if (!((last >= '0' && last <= '9') || (last == 'X') || (last == 'x'))) {
System.out.println("录入的身份证号最后一位需要在0~9之间,或者为X、x");
continue loop;
}
}
}
}
idcard = idcardtemp;
break loop;
}
//注册:手机号验证
String phonenumbe=" ";
loop:while (true) {
System.out.println("请输入手机号");
String phonenum = sc.next();
if(phonenum.length() != 11||phonenum.charAt(0)=='0'){
System.out.println("手机号录入格式错误");
}else{
for(int i=0;i<phonenum.length();i++){
if(!(phonenum.charAt(i)>='0' && phonenum.charAt(i)<='9')){
System.out.println("手机号只能全部都是数字,请确认");
continue loop;
}
}
phonenumbe=phonenum;
break loop;
}
}
list.add(new user(name,password,idcard,phonenumbe));
System.out.println("注册成功");
return list;
}
//1、登录
public static boolean login(ArrayList<user> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入登录的用户名");
String name = sc.next();
if(contains(list,name)){
while (true) {
//先获取一个验证码
String PorVerification=getVerification(5);
System.out.println(PorVerification);
System.out.println("请输入验证码");
String EnterVerification = sc.next();
if(PorVerification.equals(EnterVerification)){
break;
}
}
int count= 0;
while (true) {
//count = 0;
System.out.println("请输入登录的用户密码");
String password = sc.next();
//获取登录用户名的密码
String proPassword=getpassword(list,name);
System.out.println("用户的初始密码是:"+proPassword);
if(password.equals(proPassword)){
return true;
}else{
count++;
}
if(count>=3){
System.out.println("用户密码录入错误,超过三次");
return false;
}
}
}else {
System.out.println("未查询到用户名,请先注册");
}
return false;
}
//3、忘记密码
public static boolean forgetPassword(ArrayList<user> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入登录的用户名");
String name = sc.next();
if(contains(list,name)){
//找到用户名对象的索引
int index=getIndex(list,name);
while (true) {
System.out.println("输入身份证号");
String idCard = sc.next();
if(!(list.get(index).getIdcard().equals(idCard))){
System.out.println("用户身份证号错误");
}else{
break;
}
}
while (true) {
System.out.println("输入手机号");
String phonenumber = sc.next();
if(!(list.get(index).getPhonenumber().equals(phonenumber))){
System.out.println("用户手机号错误");
}else{
break;
}
}
//身份证和手机号都正确
//if((list.get(index).getIdcard().equals(idCard))&&list.get(index).getPhonenumber().equals(phonenumber)){
System.out.println("请输入新的密码");
String newPassword = sc.next();
list.get(index).setPassword(newPassword);
//return true;
//}
}else{
System.out.println("用户名不存在,请先注册");
return false;
}
return true;
}
}