目录
/*
需求:
为学生管理系统书写一个登录、注册、忘记密码的功能
只要用户登录成功才能登录进学生管理系统进行增删查改操作
分析:
登录界面:
用户类
属性:用户名,密码,身份证,手机号
? ? //注册功能
? ? ? /*注册功能:
? ? ? ? 1.用户名需要满足以下要求:
? ? ? ? 验证要求:
? ? ? ? 用户名唯一
? ? ? ? 用户名长度必须在3-15之间
? ? ? ? 只能是数字加字母组合,但不能是纯数字
? ? ? ? 2.密码键盘输入两次,两次一致才可以进行注册
? ? ? ? 3.身份证号码需要验证
? ? ? ? ? ? 验证要求:
? ? ? ? ? ? 长度为18
? ? ? ? ? ? 开头不能为0
? ? ? ? ? ? 最后一位可以是数字也可以是大小写x
? ? ? ? 4.手机号码验证
? ? ? ? ? ? 验证要求:
? ? ? ? ? ? 长度为11
? ? ? ? ? ? 不能以0开头
? ? ? ? ? ? 必须是数字
? ? //登录功能
? ? ? ? /*
? ? ? ? 1.键盘录入用户名
? ? ? ? 2.键盘录入密码
? ? ? ? 3.键盘录入验证码
? ? ? ? ? ? 验证要求:
? ? ? ? ? ? 用户名如果未注册则结束方法,并提示:用户名未注册,请先注册
? ? ? ? ? ? 判断验证码是否正确,如不正确,请重新输入
? ? ? ? ? ? 在判断用户名和密码是否正确,有3次机会
? ? ? //忘记密码
? ? ? /*
? ? ? ? 1.键盘录入用户名,并判断用户是否存在,若不存在则结束方法,并提示未注册
? ? ? ? 2.键盘录入身份证号码和手机号码
? ? ? ? 3.判断当前用户身份证号码和手机号码是否一致
? ? ? ? ? ? 如果一致,则提示输入密码。进行修改
? ? ? ? ? ? 如果不一致,则提示账号信息不匹配,修改失败
? ? ?*/
//学生管理系统
/*业务需求:
.在控制台中书写学生管理系统
初始菜单:
-------------b站大学学生管理系统------------
1."添加学生信息"
2."删除学生信息"
3."查找学生信息"
4."修改学生信息"
5."退出管理系统"
学生类信息:id、姓名、年龄、家庭住址
添加功能:从键盘录入满足一下要求:id唯一
删除功能:从键盘输入
?*/
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
//创建输入对象
Scanner sc = new Scanner(System.in);
ArrayList<User> list = new ArrayList<>();
String i;
do {
LoginMenu();
while (true) {
i = sc.next();
if (i.length() == 1) {
break;
} else {
System.out.println("输入错误,请重新输入");
}
}
switch (i.charAt(0)) {
case '1' -> Register(list, sc);
case '2' -> Login(list, sc);
case '3' -> ForgetNum(list, sc);
case '4' -> System.out.println("退出成功");
default -> System.out.println("输入错误,请重新输入");
}
} while (i.charAt(0) != '4');
}
//登录界面
public static void LoginMenu() {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作: 1.登录 2.注册 3.忘记密码 4.退出");
}
//注册功能
/*注册功能:
1.用户名需要满足以下要求:
验证要求:
用户名唯一
用户名长度必须在3-15之间
只能是数字加字母组合,但不能是纯数字
2.密码键盘输入两次,两次一致才可以进行注册
3.身份证号码需要验证
验证要求:
长度为18
开头不能为0
最后一位可以是数字也可以是大小写x
4.手机号码验证
验证要求:
长度为11
不能以0开头
必须是数字
*/
public static void Login(ArrayList<User> list, Scanner sc) {
//创建对象
//录入成功存储进u
User u = new User();
String str;
//验证用户名
while (true) {
boolean flag = false;
System.out.println("请输入用户名:");
str = sc.next();
//验证长度是否符合要求
if (str.length() <= 3 || str.length() >= 15) {
System.out.println("用户名长度需在3-15之间,请重新输入");
continue;
}
//验证是否重名
for (int i = 0; i < list.size(); i++) {
if (str.equals(list.get(i).getName())) {
System.out.println("用户名重名,请重新输入");
flag = true;
break;
}
}
if (flag) {
continue;
}
//验证是否是纯数字
//统计数字个数
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
count++;
}
}
if (count == str.length()) {
System.out.println("用户名不能是纯数字,请重新输入");
continue;
}
u.setName(str);
System.out.println("用户名录入成功");
break;
}
//验证密码
while (true) {
System.out.println("请输入密码:");
str = sc.next();
//若前后一致将返回true
if (str.equals(sc.next())) {
System.out.println("密码录入成功");
u.setPassword(str);
break;
} else {
System.out.println("密码前后不一致,请重新输入");
}
}
//验证身份证号码
while (true) {
System.out.println("请输入身份证号码");
str = sc.next();
boolean flag = true;
//长度为18
if (str.length() != 18) {
System.out.println("身份证长度为18位,请重新输入");
continue;
}
//验证前面17位是否是数字
System.out.println(str.charAt(0));
for (int i = 0; i < 18; i++) {
//验证1-17位数字是否在0-9
if (i == 17 || (str.charAt(i) >= '0' && str.charAt(i) <= '9')) {
if (i == 17) {
if (str.charAt(17) == 'X' || str.charAt(17) == 'x' || (str.charAt(17) >= '0' && str.charAt(17) <= '9')) {
break;
} else {
flag = false;
System.out.println("前17位为数字,最后一位为数字或 X 或 x, 请重新输入");
continue;
}
}
if (str.charAt(0) == '0') {
System.out.println("身份证开头不为0,请重新输入");
flag = false;
break;
}
} else {
System.out.println("前17位为数字,最后一位为数字或 X 或 x, 请重新输入");
flag = false;
break;
}
}
//若flag为真即身份证录入成功,可跳出循环
if (flag) {
u.setId(str);
System.out.println("身份证录入成功");
System.out.println(str);
break;
}
}
//验证电话号码
while (true) {
boolean flag = true;
System.out.println("请输入手机号码:");
str = sc.next();
//验证号码长度
if (str.length() != 11) {
System.out.println("电话号码为11位数字,请重新输入");
continue;
}
//不能以零开头
if (str.charAt(0) == '0') {
System.out.println("电话号码不能以0开头,请重新输入");
continue;
}
//验证每一位是否为数字
for (int i = 0; i < 11; i++) {
if (str.charAt(i) < '0' || str.charAt(i) > '9') {
System.out.println("电话号码为11位数字,请重新输入");
flag = false;
break;
}
}
if (flag) {
u.setTel(str);
System.out.println("手机号码录入成功");
break;
}
}
list.add(u);
System.out.println("注册成功");
}
//登录功能
/*
1.键盘录入用户名
2.键盘录入密码
3.键盘录入验证码
验证要求:
用户名如果未注册则结束方法,并提示:用户名未注册,请先注册
判断验证码是否正确,如不正确,请重新输入
在判断用户名和密码是否正确,有3次机会
*/
public static void Register(ArrayList<User> list, Scanner sc) {
while (true) {
boolean flag = true;
//记录用户名所在下标
int x = 0;
System.out.println("请输入用户名:");
String Name = sc.next();
//判断用户名是否存在
for (int i = 0; i < list.size(); i++) {
//判断为真即用户名存在,进行下一步
if (Name.equals(list.get(i).getName())) {
x = i;
flag = false;
break;
}
}
//用户名如果未注册则结束方法,并提示:用户名未注册,请先注册
if (flag) {
System.out.println("用户名未注册,请先注册");
break;
}
//判断验证码是否正确
//随机获取验证码
//创建对象
String str = "";
Random r = new Random();
//随机获取6位验证码拼接成字符串
for (int i = 0; i < 6; i++) {
//获得随机索引拼接成字符串
str += r.nextInt(10);
}
System.out.println(str);
System.out.println("请输入6位验证码:");
String captcha = sc.next();
//对比随机验证码和输入的是否正确
while (true) {
if (str.equals(captcha)) {
break;
}
System.out.println("验证码错误,请重新输入");
captcha = sc.next();
}
//在判断用户名和密码是否正确,有3次机会
flag = true;
int count = 3;
while (count != 0) {
System.out.println("请输入密码:");
String password = sc.next();
if (list.get(x).getPassword().equals(password)) {
System.out.println("登陆成功");
StudentInformation();
flag = false;
break;
}
System.out.println("用户名或密码错误,剩余" + --count + "机会" + "请重新输入");
}
if (flag) {
System.out.println("登录失败,请稍后重试");
}
return;
}
}
//忘记密码
/*
1.键盘录入用户名,并判断用户是否存在,若不存在则结束方法,并提示未注册
2.键盘录入身份证号码和手机号码
3.判断当前用户身份证号码和手机号码是否一致
如果一致,则提示输入密码。进行修改
如果不一致,则提示账号信息不匹配,修改失败
*/
public static void ForgetNum(ArrayList<User> list, Scanner sc) {
while (true) {
boolean flag = true;
//记录用户名所在下标
int x = 0;
System.out.println("请输入用户名:");
String Name = sc.next();
//1.键盘录入用户名,并判断用户是否存在,若不存在则结束方法,并提示未注册
for (int i = 0; i < list.size(); i++) {
//判断为真即用户名存在,进行下一步
if (Name.equals(list.get(i).getName())) {
x = i;
flag = false;
break;
}
}
//用户名如果未注册则结束方法,并提示:用户名未注册,请先注册
if (flag) {
System.out.println("用户名未注册,请先注册");
break;
}
//2.键盘录入身份证号码和手机号码
System.out.println("请输入身份证号码:");
String id = sc.next();
System.out.println("请输入手机号码");
String tel = sc.next();
//3.判断当前用户身份证号码和手机号码是否一致
if (list.get(x).getId().equals(id) && list.get(x).getTel().equals(tel)) {
//如果一致,则提示输入密码。进行修改
//如果不一致,则提示账号信息不匹配,修改失败
System.out.println("请输入重置密码:");
String password = sc.next();
list.get(x).setPassword(password);
System.out.println("修改成功");
break;
} else {
System.out.println("账号信息不匹配,修改失败");
}
}
}
//学生管理系统
public static void StudentInformation() {
//创建输入对象
Scanner sc = new Scanner(System.in);
//创建用户集合
ArrayList<Student> list = new ArrayList<>();
int i;
do {
Menu();
i = sc.nextInt();
Student u = new Student();
boolean flag = true;
switch (i) {
//增
case 1 -> AddUser(list, sc, u);
//删
case 2 -> RemoveUser(list, sc, u);
//查
case 3 -> SearchUser(list, sc);
//改
case 4 -> ChangeUser(list, sc);
//展示
case 5 -> ShowUser(list);
//退出
case 6 -> System.out.println("退出成功");
default -> System.out.println("操作失败,请重新输入");
}
} while (i != 6);
}
//选择界面菜单
public static void Menu() {
System.out.println("-----------b站大学学生管理系统---------");
System.out.println("-------------1.添加学生信息------------");
System.out.println("-------------2.删除学生信息------------");
System.out.println("-------------3.查找学生信息------------");
System.out.println("-------------4.修改学生信息------------");
System.out.println("-------------5.展示系统信息------------");
System.out.println("-------------6.退出管理系统------------");
}
//增方法
public static void AddUser(ArrayList<Student> list, Scanner sc, Student u) {
System.out.println("请输入用户id:");
u.setId(sc.next());
System.out.println("请输入用户姓名:");
u.setName(sc.next());
System.out.println("请输入用户密码:");
u.setPassword(sc.next());
list.add(u);
System.out.println("添加成功");
}
//删方法
public static void RemoveUser(ArrayList<Student> list, Scanner sc, Student u) {
System.out.println("请输入要删除用户的id:");
String str = sc.next();
boolean flag = true;
for (int j = 0; j < list.size(); j++) {
if (str.equals(list.get(j).getId())) {
list.remove(j);
System.out.println("删除成功");
flag = false;
break;
}
}
if (flag) {
System.out.println("删除失败");
}
}
//查方法
public static void SearchUser(ArrayList<Student> list, Scanner sc) {
System.out.println("请输入要查找用户的id:");
String str = sc.next();
boolean flag = true;
for (int j = 0; j < list.size(); j++) {
if (str.equals(list.get(j).getId())) {
System.out.println("查找成功用户信息为:");
System.out.println(list.get(j).getId());
System.out.println(list.get(j).getName());
System.out.println(list.get(j).getPassword());
flag = false;
break;
}
}
if (flag) {
System.out.println("查找失败");
}
}
//改方法
public static void ChangeUser(ArrayList<Student> list, Scanner sc) {
System.out.println("请输入要修改用户的id:");
String str = sc.next();
boolean flag = true;
for (int j = 0; j < list.size(); j++) {
if (str.equals(list.get(j).getId())) {
System.out.println("请输入新的用户id:");
list.get(j).setId(sc.next());
System.out.println("请输入新的姓名:");
list.get(j).setName(sc.next());
System.out.println("请输入新的用户密码:");
list.get(j).setPassword(sc.next());
System.out.println("修改成功");
flag = false;
break;
}
}
if (flag) {
System.out.println("修改失败");
}
}
//显示方法
public static void ShowUser(ArrayList<Student> list) {
System.out.println("用户id" + '\t' + "用户姓名" + '\t' + "用户密码");
for (int j = 0; j < list.size(); j++) {
System.out.print(list.get(j).getId() + '\t');
System.out.print(list.get(j).getName() + '\t');
System.out.print(list.get(j).getPassword() + '\t');
System.out.println();
}
}
}
public class Student {
private String id;
private String name;
private String password;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Student() {
}
public Student(String id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
}
?
public class User {
//属性:用户名,密码,身份证,手机号
private String name;
private String password;
private String id;
private String tel;
//构造方法
public User() {
}
public User(String name, String password, String id, String tel) {
this.name = name;
this.password = password;
this.id = id;
this.tel = tel;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}