学生管理系统含用户登录系统(Java)

使用Java实现学生管理系统

一. 任务

1. 实现学生管理系统

要求有以下功能:

  • 添加学生信息
  • 删除学生信息
  • 查询学生信息
  • 修改学生信息

2. 引入用户登录系统

只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
要求有以下功能:

  • 注册功能
  • 登录功能
  • 忘记密码功能

二. 代码实现

A. 创建学生类

属性:id、姓名、年龄、家庭住址
创建学生JavaBean类,包括四个私有成员变量属性和两种构造方法以及getter和setter方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package study;

//学生类属性:id、姓名、年龄、家庭住址
public class Student {
private String id;
private String name;
private int age;
private String homeAddress;

public Student(String id, String name, int age, String homeAddress) { //带全部参构造方法
this.id = id;
this.name = name;
this.age = age;
this.homeAddress = homeAddress;
}

public Student() { //空参构造方法
}

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 getHomeAddress() {
return homeAddress;
}

public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}

public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", homeAddress = " + homeAddress + "}";
}
}

B. 实现学生管理系统类的方法

包括添加、删除、修改、查询、显示学生信息等功能

1. 菜单界面
1
2
3
4
5
6
7
8
9
10
public static void showMenu() {
System.out.println("---------Welcome to student manager system--------");
System.out.println("1. Add student");
System.out.println("2. Delete student");
System.out.println("3. Modify students");
System.out.println("4. Query students");
System.out.println("5. Show all students");
System.out.println("6. Exit");
System.out.println("Please enter your choice:");
}
2.添加学生信息

键盘录入每一个学生信息并添加,需要满足要求:id唯一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//添加功能
public static ArrayList<Student> addStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
System.out.println("Please enter the student information to be ADDED, the student id is:");
String id = sc.next();
//判断添加学生的学号是否已经存在
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(id)) {
System.out.println("Student already exists");
return students;
}
}
System.out.println("Please enter student name:");
String name = sc.next();
System.out.println("Please enter student age:");
int age = sc.nextInt();
System.out.println("Please enter student's home address:");
String homeAddress = sc.next();
Student newStudent = new Student(id, name, age, homeAddress);
students.add(newStudent); //添加
return students;
}

首先判断学生的学号是否存在,已经存在直接返回;不存在则添加新的学生信息(学号、姓名、年龄、住址)

3.删除学生信息

键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除
  • id不存在,需要提示不存在,并回到初始菜单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//删除学生信息
public static ArrayList<Student> deleteStudent(ArrayList<Student> students) {
System.out.println("Please enter the student id to be DELETE:");
Scanner sc = new Scanner(System.in);
String delId = sc.next();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(delId)) {
students.remove(i); //删除
return students;
}
}
System.out.println("Student does not exist");
return students;
}
4. 修改学生信息

键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//修改学生信息
public static ArrayList<Student> modifyStudent(ArrayList<Student> students) {
System.out.println("Please enter the student id to be MODIFY:");
Scanner sc = new Scanner(System.in);
String modId = sc.next();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(modId)) {
System.out.println("Student exists,please enter student's new ID:");
students.get(i).setId(sc.next());
System.out.println("enter student's new name:");
students.get(i).setName(sc.next());
System.out.println("enter student's new age:");
students.get(i).setAge(sc.nextInt());
System.out.println("enter student's new home address:");
students.get(i).setHomeAddress(sc.next());
return students;
}
}
System.out.println("Student does not exist");
return students;
}
5.查询学生信息

查询某个学生信息,并输出显示

1
2
3
4
5
6
7
8
9
10
11
12
13
//查询某个学生信息
public static void queryStudents(ArrayList<Student> students) {
System.out.println("Please enter the student id to be QUERY:");
Scanner sc = new Scanner(System.in);
String queId = sc.next();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(queId)) {
System.out.println(students.get(i));
return;
}
}
System.out.println("Not found the student");
}
6. 打印全部学生信息

打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询
  • 如果有学生信息,输出。
1
2
3
4
5
6
7
8
9
10
11
12
//显示所有学生信息
public static void showAllStudents(ArrayList<Student> students) {
if (students.size() == 0) {
System.out.println("No students found, please add a student!");
return;
}
System.out.println("Students Information is as Follows:");
System.out.println("id name age home address");
for (int i = 0; i < students.size(); i++) {
System.out.println(students.get(i).getId() + " " + students.get(i).getName() + " " + students.get(i).getAge() + " " + students.get(i).getHomeAddress());
}
}

C. 创建用户类

属性:用户名、密码、身份证号码、手机号码,创建对应的JavaBean类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package study;

//用户类属性:用户名、密码、身份证号码、手机号码
public class User {
private String userName;
private String password;
private String idCard;
private String phoneNumber;

public User() {
}

public User(String userName, String password, String idCard, String phoneNumber) {
this.userName = userName;
this.password = password;
this.idCard = idCard;
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 getIdCard() {
return idCard;
}

public void setIdCard(String idCard) {
this.idCard = idCard;
}

public String getPhoneNumber() {
return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}

public String toString() {
return "User{userName = " + userName + ", password = " + password + ", idCard = " + idCard + ", phoneNumber = " + phoneNumber + "}";
}
}

D. 实现用户登录功能的方法

包括注册、登录、忘记密码等功能

1. 菜单
1
2
3
4
5
//菜单
public static void showMenu() {
System.out.println("---------Welcome to student manager system-------");
System.out.println("please choose your option: 1 is Login, 2 is Register, 3 is Forget password, 4 is Exit");
}
2. 注册功能
  1. 用户名需要满足以下要求:
    • 用户名唯一
    • 用户名长度必须在3~15位之间
    • 只能是字母加数字的组合,但是不能是纯数字
  2. 密码键盘输入两次,两次一致才可以进行注册。
  3. 身份证号码需要验证:
    • ​长度为18位
    • ​不能以0为开头
    • ​前17位,必须都是数字
    • ​最后一位可以是数字,也可以是大写X或小写x
  4. 手机号验证:
    • 长度为11位
    • 不能以0为开头
    • 必须都是数字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//注册
public static void registerUser() {
Scanner sc = new Scanner(System.in);
System.out.println("please enter username: ");
String userName = sc.next();

//用户名唯一
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUserName().equals(userName)) {
System.out.println("username already exists!");
return;
}
}

//用户名长度必须在3-15位
if (userName.length() < 3 || userName.length() > 15) {
System.out.println("username length must be between 3 and 15 characters!");
return;
}

//用户名必须是字母加数字组合
int countLetters = 0;
int countNumbers = 0;
int countOthers = 0;
for (int i = 0; i < userName.length(); i++) {
char ch = userName.charAt(i);
if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {
countLetters++;
} else if (ch >= '0' && ch <= '9') {
countNumbers++;
} else
countOthers++;
}
if (countOthers != 0) {
System.out.println("username cannot be special characters!");
return;
} else if (countLetters == 0 || countNumbers == 0) {
System.out.println("username cannot be only letters or numbers!");
return;
}

//密码键盘输入两次,两次一致才可以进行注册。
System.out.println("please enter password: ");
String psw1 = sc.next();
System.out.println("please enter password again: ");
String psw2 = sc.next();
if (!psw1.equals(psw2)) {
System.out.println("passwords do not match!");
return;
}

System.out.println("please enter id card Number: ");
String idCardNumber = sc.next();

//长度为18位,不能以0为开头
if (idCardNumber.length() != 18 || idCardNumber.charAt(0) == '0') {
System.out.println("id card number is not valid!");
return;
}

//前17位必须都是数字
for (int i = 0; i < idCardNumber.length() - 1; i++) {
char ch = idCardNumber.charAt(i);
if (ch > '9' || ch < '0') {
System.out.println("id card number is not valid!");
return;
}
}

//最后一位可以是数字,也可以是大写X或小写x
if (!((idCardNumber.charAt(17) >= '0' && idCardNumber.charAt(17) <= '9') || idCardNumber.charAt(17) == 'x' || idCardNumber.charAt(17) == 'X')) {
System.out.println("id card number is not valid!");
return;
}

//长度为11位 不能以0为开头必须都是数字
System.out.println("please enter phone number: ");
String phoneNumber = sc.next();

if (phoneNumber.length() != 11 || phoneNumber.charAt(0) == '0') {
System.out.println("phone number is not valid!");
return;
}

for (int i = 0; i < phoneNumber.length(); i++) {
char ch = phoneNumber.charAt(i);
if (ch > '9' || ch < '0') {
System.out.println("phone number is not valid!");
return;
}
}

User newUser = new User(userName, psw1, idCardNumber, phoneNumber);
users.add(newUser); //注册
System.out.println("user registered successfully!");
}
3. 登录功能
  1. 键盘输入用户名,用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
  2. 生成验证码,判断验证码是否正确,如不正确,重新输入
  3. 键盘输入密码,再判断用户名和密码是否正确,有3次机会
  4. 验证码规则:
    • 长度为5
    • 由4位大写或者小写字母和1位数字组成,同一个字母可重复
    • 数字可以出现在任意位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//登录
public static boolean login() {
Scanner sc = new Scanner(System.in);
System.out.println("please enter username: ");
String userName = sc.next();
//用户名是否已注册
boolean userExists = false;
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUserName().equals(userName)) {
userExists = true;
break;
}
}
if (!userExists) {
System.out.println("Username does not register!");
return false; // 如果用户名没有注册,直接返回
}

//随机生成验证码
Random rd = new Random();
int randomInt = rd.nextInt(5);//生成0-4随机整数
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
if (i == randomInt) {
int randomInt1 = rd.nextInt(10);
sb.append((char) ('0' + randomInt1)); //生成0-9随机字符
} else {
int randomInt2 = rd.nextInt(52);
if (randomInt2 < 26) {
sb.append((char) ('a' + randomInt2));
} else {
sb.append((char) ('A' + randomInt2 - 26));
}
}
}
String verifyCode = sb.toString();
System.out.println("the verify code is:" + verifyCode);

//验证验证码
while (true) {
System.out.println("please enter verification code: ");
String inputCode = sc.next();
if (!(verifyCode.equals(inputCode))) {
System.out.println("verification code is valid! Please try again!");
} else {
System.out.println("verification code is passed!");
break;
}
}

// 三次登录机会
for (int i = 0; i < 3; i++) {
boolean passwordCorrect = false;
System.out.println("please enter password: ");
String psw = sc.next();
// 遍历用户列表,检查用户名和密码是否匹配
for (int j = 0; j < users.size(); j++) {
if (users.get(j).getUserName().equals(userName) && users.get(j).getPassword().equals(psw)) {
passwordCorrect = true;
break; // 密码匹配,跳出循环
}
}
if (passwordCorrect) {
return true; // 密码正确,登录成功
} else {
System.out.println("Password is incorrect! Please try again!");
}
}

System.out.println("Three opportunities have been used up! Account has been locked!");
return false;
}
4. 忘记密码功能
  1. 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法
  2. 键盘录入身份证号码和手机号码
  3. 判断当前用户的身份证号码和手机号码是否一致:
    • 如果一致,则提示输入密码,进行修改。
    • 如果不一致,则提示:账号信息不匹配,修改失败。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//忘记密码
public static void ForgetPassword() {
Scanner sc = new Scanner(System.in);
System.out.println("please enter username: ");
String userName = sc.next();
int currentUserIndex = -1;
//用户名是否存在
// 检查用户名是否存在
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUserName().equals(userName)) {
currentUserIndex = i;
break; // 找到用户名,跳出循环
}
}

// 如果用户不存在
if (currentUserIndex == -1) {
System.out.println("Username does not register!");
return;
}

System.out.println("please enter id card Number: ");
String idCardNumber = sc.next();
System.out.println("please enter phone number: ");
String phoneNumber = sc.next();
//身份证号和手机号是否一致
if (!(users.get(currentUserIndex).getIdCard().equals(idCardNumber) && users.get(currentUserIndex).getPhoneNumber().equals(phoneNumber))) {
System.out.println("Account information does not match! Modification failed!");
return;
}

System.out.println("please enter new password: ");
String newPassword = sc.next();
users.get(currentUserIndex).setPassword(newPassword); //修改当前密码

System.out.println("Modify successfully!");
}

E. 主函数

  1. new一个学生集合
  2. 进入用户登录界面
  3. 登录成功则进入学生管理系统
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
boolean isLoginIn = false;

//用户登录功能
while (!isLoginIn) {
UserManager.showMenu();
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your choice: ");
int userChoice = scanner.nextInt();
switch (userChoice) {
case 1:
isLoginIn = UserManager.login();
break;
case 2:
UserManager.registerUser();
break;
case 3:
UserManager.ForgetPassword();
break;
case 4:
System.out.println("EXIT");
return;
default:
System.out.println("Invalid choice");
}
}

//进入学生管理系统
while (true) {
showMenu();
Scanner sc = new Scanner(System.in);
int choice = sc.nextInt();//选择相应的功能
switch (choice) {
case 1: {
System.out.println("please enter the number of students you want to add");
int num = sc.nextInt();
for (int i = 0; i < num; i++) {
students = addStudent(students);
}
}
;
break;
case 2:
students = deleteStudent(students);
break;
case 3:
students = modifyStudent(students);
break;
case 4:
queryStudents(students);
break;
case 5:
showAllStudents(students);
break;
case 6:
System.out.println("EXIT");
return;
default:
System.out.println("Invalid choice");
}
}
}

三. 测试

四. 完整代码

创建四个类,分别为Student.java, User.java, StudentSystem.java, UserManager.java
主函数在StudentSystem.java中,直接运行StudentSystem类即可

1. Student.java(学生类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package study;

//学生类属性:id、姓名、年龄、家庭住址
public class Student {
private String id;
private String name;
private int age;
private String homeAddress;

public Student(String id, String name, int age, String homeAddress) { //带全部参构造方法
this.id = id;
this.name = name;
this.age = age;
this.homeAddress = homeAddress;
}

public Student() { //空参构造方法
}

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 getHomeAddress() {
return homeAddress;
}

public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}

public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", homeAddress = " + homeAddress + "}";
}
}

2. User.java(用户类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package study;

//用户类属性:用户名、密码、身份证号码、手机号码
public class User {
private String userName;
private String password;
private String idCard;
private String phoneNumber;

public User() {
}

public User(String userName, String password, String idCard, String phoneNumber) {
this.userName = userName;
this.password = password;
this.idCard = idCard;
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 getIdCard() {
return idCard;
}

public void setIdCard(String idCard) {
this.idCard = idCard;
}

public String getPhoneNumber() {
return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}

public String toString() {
return "User{userName = " + userName + ", password = " + password + ", idCard = " + idCard + ", phoneNumber = " + phoneNumber + "}";
}
}

3. UserManager.java(用户登录类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
package study;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class UserManager {
private static ArrayList<User> users = new ArrayList<>();

//注册
public static void registerUser() {
Scanner sc = new Scanner(System.in);

System.out.println("please enter username: ");
String userName = sc.next();

//用户名唯一
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUserName().equals(userName)) {
System.out.println("username already exists!");
return;
}
}

//用户名长度必须在3-15位
if (userName.length() < 3 || userName.length() > 15) {
System.out.println("username length must be between 3 and 15 characters!");
return;
}

//用户名必须是字母加数字组合
int countLetters = 0;
int countNumbers = 0;
int countOthers = 0;
for (int i = 0; i < userName.length(); i++) {
char ch = userName.charAt(i);
if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {
countLetters++;
} else if (ch >= '0' && ch <= '9') {
countNumbers++;
} else
countOthers++;
}
if (countOthers != 0) {
System.out.println("username cannot be special characters!");
return;
} else if (countLetters == 0 || countNumbers == 0) {
System.out.println("username cannot be only letters or numbers!");
return;
}


//密码键盘输入两次,两次一致才可以进行注册。
System.out.println("please enter password: ");
String psw1 = sc.next();
System.out.println("please enter password again: ");
String psw2 = sc.next();
if (!psw1.equals(psw2)) {
System.out.println("passwords do not match!");
return;
}

System.out.println("please enter id card Number: ");
String idCardNumber = sc.next();

//长度为18位,不能以0为开头
if (idCardNumber.length() != 18 || idCardNumber.charAt(0) == '0') {
System.out.println("id card number is not valid!");
return;
}

//前17位必须都是数字
for (int i = 0; i < idCardNumber.length() - 1; i++) {
char ch = idCardNumber.charAt(i);
if (ch > '9' || ch < '0') {
System.out.println("id card number is not valid!");
return;
}
}

//最后一位可以是数字,也可以是大写X或小写x
if (!((idCardNumber.charAt(17) >= '0' && idCardNumber.charAt(17) <= '9') || idCardNumber.charAt(17) == 'x' || idCardNumber.charAt(17) == 'X')) {
System.out.println("id card number is not valid!");
return;
}

//长度为11位 不能以0为开头必须都是数字
System.out.println("please enter phone number: ");
String phoneNumber = sc.next();

if (phoneNumber.length() != 11 || phoneNumber.charAt(0) == '0') {
System.out.println("phone number is not valid!");
return;
}

for (int i = 0; i < phoneNumber.length(); i++) {
char ch = phoneNumber.charAt(i);
if (ch > '9' || ch < '0') {
System.out.println("phone number is not valid!");
return;
}
}

User newUser = new User(userName, psw1, idCardNumber, phoneNumber);
users.add(newUser); //注册
System.out.println("user registered successfully!");
}

//登录
public static boolean login() {
Scanner sc = new Scanner(System.in);
System.out.println("please enter username: ");
String userName = sc.next();
//用户名是否已注册
boolean userExists = false;
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUserName().equals(userName)) {
userExists = true;
break;
}
}
if (!userExists) {
System.out.println("Username does not register!");
return false; // 如果用户名没有注册,直接返回
}


//随机生成验证码
Random rd = new Random();
int randomInt = rd.nextInt(5);//生成0-4随机整数
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
if (i == randomInt) {
int randomInt1 = rd.nextInt(10);
sb.append((char) ('0' + randomInt1)); //生成0-9随机字符
} else {
int randomInt2 = rd.nextInt(52);
if (randomInt2 < 26) {
sb.append((char) ('a' + randomInt2));
} else {
sb.append((char) ('A' + randomInt2 - 26));
}
}
}
String verifyCode = sb.toString();
System.out.println("the verify code is:" + verifyCode);

//验证验证码
while (true) {
System.out.println("please enter verification code: ");
String inputCode = sc.next();
if (!(verifyCode.equals(inputCode))) {
System.out.println("verification code is valid! Please try again!");
} else {
System.out.println("verification code is passed!");
break;
}
}

// 三次登录机会
for (int i = 0; i < 3; i++) {
boolean passwordCorrect = false;
System.out.println("please enter password: ");
String psw = sc.next();
// 遍历用户列表,检查用户名和密码是否匹配
for (int j = 0; j < users.size(); j++) {
if (users.get(j).getUserName().equals(userName) && users.get(j).getPassword().equals(psw)) {
passwordCorrect = true;
break; // 密码匹配,跳出循环
}
}
if (passwordCorrect) {
return true; // 密码正确,登录成功
} else {
System.out.println("Password is incorrect! Please try again!");
}
}

System.out.println("Three opportunities have been used up! Account has been locked!");
return false;
}

//忘记密码
public static void ForgetPassword() {
Scanner sc = new Scanner(System.in);
System.out.println("please enter username: ");
String userName = sc.next();
int currentUserIndex = -1;
//用户名是否存在
// 检查用户名是否存在
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUserName().equals(userName)) {
currentUserIndex = i;
break; // 找到用户名,跳出循环
}
}

// 如果用户不存在
if (currentUserIndex == -1) {
System.out.println("Username does not register!");
return;
}

System.out.println("please enter id card Number: ");
String idCardNumber = sc.next();
System.out.println("please enter phone number: ");
String phoneNumber = sc.next();
//身份证号和手机号是否一致
if (!(users.get(currentUserIndex).getIdCard().equals(idCardNumber) && users.get(currentUserIndex).getPhoneNumber().equals(phoneNumber))) {
System.out.println("Account information does not match! Modification failed!");
return;
}

System.out.println("please enter new password: ");
String newPassword = sc.next();
users.get(currentUserIndex).setPassword(newPassword); //修改当前密码

System.out.println("Modify successfully!");
}

//菜单
public static void showMenu() {
System.out.println("---------Welcome to student manager system-------");
System.out.println("please choose your option: 1 is Login, 2 is Register, 3 is Forget password, 4 is Exit");
}
}

4. StudentSystem.java(学生管理系统测试类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package study;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
boolean isLoginIn = false;

//用户登录功能
while (!isLoginIn) {
UserManager.showMenu();
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your choice: ");
int userChoice = scanner.nextInt();
switch (userChoice) {
case 1:
isLoginIn = UserManager.login();
break;
case 2:
UserManager.registerUser();
break;
case 3:
UserManager.ForgetPassword();
break;
case 4:
System.out.println("EXIT");
return;
default:
System.out.println("Invalid choice");
}
}

while (true) {
showMenu();
Scanner sc = new Scanner(System.in);
int choice = sc.nextInt();//选择相应的功能
switch (choice) {
case 1: {
System.out.println("please enter the number of students you want to add");
int num = sc.nextInt();
for (int i = 0; i < num; i++) {
students = addStudent(students);
}
}
;
break;
case 2:
students = deleteStudent(students);
break;
case 3:
students = modifyStudent(students);
break;
case 4:
queryStudents(students);
break;
case 5:
showAllStudents(students);
break;
case 6:
System.out.println("EXIT");
return;
default:
System.out.println("Invalid choice");
}
}
}

//菜单界面
public static void showMenu() {
System.out.println("---------Welcome to student manager system--------");
System.out.println("1. Add student");
System.out.println("2. Delete student");
System.out.println("3. Modify students");
System.out.println("4. Query students");
System.out.println("5. Show all students");
System.out.println("6. Exit");
System.out.println("Please enter your choice:");
}

//添加功能
public static ArrayList<Student> addStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
System.out.println("Please enter the student information to be ADDED, the student id is:");
String id = sc.next();
//判断添加学生的学号是否已经存在
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(id)) {
System.out.println("Student already exists");
return students;
}
}
System.out.println("Please enter student name:");
String name = sc.next();
System.out.println("Please enter student age:");
int age = sc.nextInt();
System.out.println("Please enter student's home address:");
String homeAddress = sc.next();
Student newStudent = new Student(id, name, age, homeAddress);
students.add(newStudent); //添加
return students;
}

//删除学生信息
public static ArrayList<Student> deleteStudent(ArrayList<Student> students) {
System.out.println("Please enter the student id to be DELETE:");
Scanner sc = new Scanner(System.in);
String delId = sc.next();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(delId)) {
students.remove(i); //删除
return students;
}
}
System.out.println("Student does not exist");
return students;
}

//修改学生信息
public static ArrayList<Student> modifyStudent(ArrayList<Student> students) {
System.out.println("Please enter the student id to be MODIFY:");
Scanner sc = new Scanner(System.in);
String modId = sc.next();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(modId)) {
System.out.println("Student exists,please enter student's new ID:");
students.get(i).setId(sc.next());
System.out.println("enter student's new name:");
students.get(i).setName(sc.next());
System.out.println("enter student's new age:");
students.get(i).setAge(sc.nextInt());
System.out.println("enter student's new home address:");
students.get(i).setHomeAddress(sc.next());
return students;
}
}
System.out.println("Student does not exist");
return students;
}

//查询某个学生信息
public static void queryStudents(ArrayList<Student> students) {
System.out.println("Please enter the student id to be QUERY:");
Scanner sc = new Scanner(System.in);
String queId = sc.next();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(queId)) {
System.out.println(students.get(i));
return;
}
}
System.out.println("Not found the student");
}

//显示所有学生信息
public static void showAllStudents(ArrayList<Student> students) {
if (students.size() == 0) {
System.out.println("No students found, please add a student!");
return;
}
System.out.println("Students Information is as Follows:");
System.out.println("id name age home address");
for (int i = 0; i < students.size(); i++) {
System.out.println(students.get(i).getId() + " " + students.get(i).getName() + " " + students.get(i).getAge() + " " + students.get(i).getHomeAddress());
}
}
}