学生管理系统的登录,注册,以及忘记密码页面
这是一个众人皆知的一个代码了,在这里不太提页面要求了,有关注意的我都会写在注释哪里.欢迎大家多多讨论
用户类
首先我们先定一个一个用户类,用来乘放用户名,密码,身份证号以及电话号码,代码如下
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) {
UserName = userName;
Password = password;
PersonID = personID;
PhoneNumber = phoneNumber;
}
public String getUserName() {
return UserName;
}
public void setUserName(String userName) {
UserName = userName;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
public String getPersonID() {
return PersonID;
}
public void setPersonID(String personID) {
PersonID = personID;
}
public String getPhoneNumber() {
return PhoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
PhoneNumber = phoneNumber;
}
这样我们就定义了一个用户类,我们后面就会不断地去调用这个用户类
主页面
用户类我们定义完成之后,后面就是我们的主页面了
public class Login {
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,忘记密码");
String Choice = sc.nextLine();
switch (Choice) {
case "1"-> LoGin(list);
case "2"-> Makeit(list);
case "3"-> Changepassword(list);
case "4"-> {
System.out.println("退出");
System.exit(0);
}
default -> System.out.println("您输入的内容有误,请重新输入,选择范围在1-4之间");
}
}
}
//修改密码
private static void Changepassword(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
String username;
System.out.println("请输入用户名");
username = sc.nextLine();
//判断用户名是否存在
boolean flag = contains(list,username);
if (!flag) {
System.out.println("用户名不存在,请在注册后重新尝试");
return;
}
//录入身份证号和手机号
System.out.println("请输入身份证号");
String personID = sc.nextLine();
System.out.println("请输入手机号码");
String phonenumber = sc.nextLine();
//获取用户名所在集合的索引
int index = login(list,username);
if (personID.equals(list.get(index).getPersonID())&&phonenumber.equals(list.get(index).getPhoneNumber())) {
System.out.println("请输入你要修改的密码");
String password = sc.nextLine();
list.get(index).setPassword(password);
}else {
System.out.println("验证信息有误,无法修改密码,请在检查信息后重新输入");
}
}
//注册
private static void Makeit(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
String Username = null;
while (true) {
//输入用户名并进行验证
System.out.println("请输入用户名");
Username = sc.nextLine();
//对用户名长度进行验证
if (!(Username.length()>= 3 && Username.length()<=15) ) {
System.out.println("用户名长度应该在3~15之间,请重新输入");
continue;
}
//对用户名的内容进行验证
boolean flagnum = Usernumber(Username);
if (!flagnum) {
System.out.println("用户名不能为纯数字,并且不能带有特殊字符");
continue;
}
//对用户名重复验证
boolean flag = contains(list,Username);
if (flag) {
System.out.println("用户名已存在,请重新输入用户名");
continue;
}else{
System.out.println("用户名登记成功");
break;
}
}
//验证密码
String Password = null;
while (true) {
System.out.println("请输入密码");
Password = sc.nextLine();
System.out.println("请再次输入密码");
String Password2 = sc.nextLine();
if (Password.equals(Password2)) {
System.out.println("密码输入成功");
break;
}else {
System.out.println("两次密码输入不一致,请重新输入");
continue;
}
}
//身份证号验证
String personID = null;
while (true) {
System.out.println("请输入身份证号");
personID = sc.nextLine();
//验证长度
if (!(personID.length() == 18)){
System.out.println("身份证号长度不正确,请重新输入");
continue;
}
//不能0开头
char c = personID.charAt(0);
boolean flagID = ID0(c);
if (flagID) {
System.out.println("身份证号首位不能为0,请重新输入");
continue;
}
//前17位为数字,最后一位可以是X或者x
boolean flag = containsX(personID);
if (!flag) {
System.out.println("身份证号前17位是数字,最后一位可以使X或者x,请重新输入");
continue;
}else{
System.out.println("身份证号输入成功");
break;
}
}
//手机号验证
String PhoneNumber = null;
while (true) {
System.out.println("请输入手机号码");
PhoneNumber = sc.nextLine();
//判断手机号长度是否是11位
if (PhoneNumber.length()!=11) {
System.out.println("手机号长度不正确,请重新输入");
continue;
}
//判断手机号是否0开头
char c = PhoneNumber.charAt(0);
boolean flag = ID0(c);
if (flag) {
System.out.println("手机号开头不能是0开头,请重新输入");
continue;
}
//判断手机号是否全部都为数字
boolean flag1 = num(PhoneNumber);
if (!flag1) {
System.out.println("手机号必须是纯数字,请重新输入");
continue;
}else {
System.out.println("手机号输入成功");
break;
}
}
User u1 = new User(Username,Password,personID,PhoneNumber);
list.add(u1);
System.out.println("用户注册成功");
}
//登录
private static void LoGin(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.nextLine();
//验证用户名是否存在(是否重复)
boolean flag = contains(list,username);
if (!flag){
System.out.println("用户名不存在,请重新输入");
return;
}
//重复验证验证码,直到正确为止
while (true) {
String index = samenum();
System.out.println(index);
System.out.println("请输入验证码");
String index2 = sc.nextLine();
if (!index.equalsIgnoreCase(index2)) {
System.out.println("验证码输入错误,请重新输入");
continue;
}else {
System.out.println("验证码输入正确");
break;
}
}
//验证用户名和密码是否正确,3次机会
for (int i = 0; i < 3; i++) {
System.out.println("请输入密码");
String password = sc.nextLine();
int n = login(list,username);
if (!password.equals(list.get(n).getPassword())){
System.out.println("用户名或密码不正确,请重新输入");
System.out.println("您还剩下"+(2-i)+"次机会");
if (i==2){
System.out.println("您的账户"+username+"已经被锁定,请联系管理员");
return;
}
continue;
}else {
System.out.println("身份验证成功,登录成功");
StudentSyetem ss = new StudentSyetem();
ss.startStudentSystem();
break;
}
}
}
//判断身份证号的内容
private static boolean containsX(String personID) {
char[] chars = personID.toCharArray();
for (int i = 0; i < chars.length-1; i++) {
if(!(chars[i]>='0' && chars[i]<='9')){
return false;
}
}
if (!((chars[17] >= '0'&&chars[17] <= '9')||(chars[17]=='X')||(chars[17]=='x'))) {
return false;
}
return true;
}
//验证首位是否为0
private static boolean ID0(char c) {
if (c == '0'){
return true;
}
return false;
}
//验证用户名是否重复
public static boolean contains(ArrayList<User> list, String Username) {
//当集合中的元素数量为0的时候代表一定不会重复
if (list.size() == 0) {
return false;
}
//当上面的判断结束后代表集合中的长度不为0,那就依次进行判断
for(int i = 0; i < list.size(); i++) {
String Username2 = list.get(i).getUserName();
if (Username.equals(Username2)) {
return true;
}
}
return false;
}
//判断用户名内部是否符合要求
public static boolean Usernumber(String Username) {
//将用户名字符串拆分成各个字符
char[] ch = Username.toCharArray();
//计数器
int count = 0;
//这个循环判断是不是纯数字
for (int i = 0; i < ch.length; i++) {
if (ch[i] >= '0' && ch[i] <= '9') {
count++;
}
}
//当计数器的值等于字符数组的长度的时候,代表整个字符串全部都是数字,不符合要求
if (count == ch.length) {
return false;
}
//这个循环判断是不是有其他的字符
for (int i = 0; i < ch.length; i++) {
//意思就是除了数字,小写字母,大写字母意外其余所有的字符全部是错误的
if (!((ch[i] >= '0' && ch[i] <= '9')||(ch[i] >= 'a' && ch[i] <= 'z')||(ch[i] >= 'A' && ch[i] <= 'Z'))) {
return false;
}
}
return true;
}
//判断是否纯数字
public static boolean num(String PhoneNumber){
char[] ch = PhoneNumber.toCharArray();
for (int i = 0; i < ch.length; i++) {
if (!(ch[i] >= '0' && ch[i] <= '9')) {
return false;
}
}
return true;
}
//获取验证码
public static String samenum(){
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < 26; i++) {
list.add((char)('a'+i));
list.add((char)('A'+i));
}
Random r = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int c = r.nextInt(list.size());
char ch = list.get(c);
sb.append(ch);
}
int a = r.nextInt(10);
sb.append(a);
char[] arr = sb.toString().toCharArray();
int index = r.nextInt(arr.length);
char temp = arr[index];
arr[index] = arr[arr.length-1];
arr[arr.length-1]= temp;
return new String(arr);
}
//获取用户名的索引
public static int login(ArrayList<User> list,String Username) {
for (int i = 0; i < list.size(); i++) {
String Username2 = list.get(i).getUserName();
if (Username.equals(Username2)) {
return i;
}
}
return -1;
}
}
这个登录界面的是由最简单的代码组成的,主要是用来给初学者一个很好的一个练习用来记住各个代码的应用,以便提升使用的熟练度