为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
System.out.println("欢迎来到学生管理系统"); System.out.println("请选择操作1登录 2注册 3忘记密码");
属性:用户名、密码、身份证号码、手机号码
1,用户名需要满足以下要求:
验证要求:
用户名唯一
用户名长度必须在3~15位之间
只能是字母加数字的组合,但是不能是纯数字
2,密码键盘输入两次,两次一致才可以进行注册。
3,身份证号码需要验证。
验证要求:
长度为18位
不能以0为开头
前17位,必须都是数字
最为一位可以是数字,也可以是大写X或小写x
4,手机号验证。
验证要求:
长度为11位
不能以0为开头
必须都是数字
1,键盘录入用户名
2,键盘录入密码
3,键盘录入验证码
验证要求:
用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
判断验证码是否正确,如不正确,重新输入
再判断用户名和密码是否正确,有3次机会
1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
2,键盘录入身份证号码和手机号码
3,判断当前用户的身份证号码和手机号码是否一致,
如果一致,则提示输入密码,进行修改。
如果不一致,则提示:账号信息不匹配,修改失败。
长度为5
由4位大写或者小写字母和1位数字组成,同一个字母可重复
数字可以出现在任意位置
比如:
aQa1K
升级版在做到需求文档的实现后,还将登录功能与学生管理系统(增删改查功能)相连接。
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StudengtSystemPlus {
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 choose = sc.next();
switch (choose) {
case "1":
record(list);
//调用StudentSystem里面的mian方法
//传递一个String[] args的参数
StudentSystem.main(new String[1]);
break;
case "2":
register(list);
System.out.println("用户名\t密码\t身份证\t手机号");
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
System.out.println(user.getUserName() + "\t" + user.getPassword() + "\t" + user.getIdCard() + "\t" + user.getPhoneNumber());
}
break;
case "3":
forget(list);
break;
default:
System.out.println("没有这个选项,请重新输入");
break;
}
}
}
//忘记密码功能
public static void forget(ArrayList<User> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String userName = sc.next();
if (list.isEmpty()) {
System.out.println("用户未注册,请先注册");
return;
} else {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (user.getUserName().equals(userName)) {
break;
} else {
System.out.println("用户未注册,请先注册");
}
}
}
System.out.println("请输入身份证号码");
String idCard = sc.next();
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (user.getIdCard().equals(idCard)){
break;
}else {
System.out.println("账号信息不匹配,修改失败");
return;
}
}
System.out.println("请输入手机号码");
String phoneNumber = sc.next();
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (user.getPhoneNumber().equals(phoneNumber)){
break;
}else {
System.out.println("账号信息不匹配,修改失败");
return;
}
}
System.out.println("请输入修改后的密码");
String newPassWord = sc.next();
int index = getIndex(list, userName);
User user = new User(userName,newPassWord,idCard,phoneNumber);
list.set(index,user);
System.out.println("密码修改成功");
return;
}
//注册功能
public static void register(ArrayList<User> list) {
User u = new User();
Scanner sc = new Scanner(System.in);
//注册功能
//用户名的输入和判断
String userName = null;
while (true) {
System.out.println("请输入要注册的用户名");
userName = sc.next();
//进行用户名的判断 唯一性
boolean judgeUserName = judgeUserName(list, userName);
if (judgeUserName) {
System.out.println("用户名已经存在,请重新输入");
continue;
} else {
//对用户名的长度进行判断 3~15之间
int length = userName.length();
if (length >= 3 && length <= 15) {
//用户名只能是数字+字母
boolean judegeUserNameType = judegeUserNameType(userName);
if (judegeUserNameType) {
break;
} else {
System.out.println("用户名格式错误,请重新输入");
continue;
}
} else {
System.out.println("用户名长度不符合,请重新输入");
continue;
}
}
}
u.setUserName(userName);
System.out.println("用户名输入正确");
//进行密码的输入和判断
String password1 = null;
while (true) {
System.out.println("请输入密码");
password1 = sc.next();
System.out.println("请再次输入密码");
String password2 = sc.next();
boolean judgePassWord = password1.equals(password2);
if (judgePassWord) {
System.out.println("密码输入正确");
break;
} else {
System.out.println("两次密码输入不一致,请重新输入");
continue;
}
}
u.setPassword(password1);
//身份证号码的输入和判断
String idCard = null;
while (true) {
char a = 'a';
System.out.println("请输入身份证号码");
idCard = sc.next();
//判断身份证号码的长度
int length = idCard.length();
if (length != 18) {
System.out.println("身份证号码长度错误,请重新输入");
continue;
}
//判断身份证号码第一位
//不能为0
char first = idCard.charAt(0);
if (first == '0') {
System.out.println("身份证号码第一位错误,请重新输入");
continue;
}
//判断身份证号码前17位
//都必须为数字
for (int i = 0; i < idCard.length() - 1; i++) {
char c = idCard.charAt(i);
if (c >= '0' && c <= '9') {
if (i == idCard.length() - 2) {
a = 'b';
}
continue;
} else {
System.out.println("身份证格式错误");
break;
}
}
if (a == 'a') {
continue;
}
//判断最后一位
//可以为数字,也可以位X或x
char end = idCard.charAt(idCard.length() - 1);
if ((end >= '0' && end <= '9') || end == 'x' || end == 'X') {
break;
} else {
System.out.println("身份证最后一位错误");
continue;
}
}
u.setIdCard(idCard);
System.out.println("身份证输入正确");
//手机号的输入与判断
String phoneNumber = null;
while (true) {
char a = 'a';
System.out.println("请输入手机号码");
phoneNumber = sc.next();
//判断手机号的长度
int length = phoneNumber.length();
if (length != 11) {
System.out.println("手机号码长度错误,请重新输入");
continue;
}
//判断手机号的第一位
char first = phoneNumber.charAt(0);
if (first == '0') {
System.out.println("手机号第一位错误");
continue;
}
//判断是否为数字
for (int i = 0; i < phoneNumber.length(); i++) {
char c = phoneNumber.charAt(i);
if (c >= '0' && c <= '9') {
if (i == phoneNumber.length() - 1) {
a = 'b';
}
continue;
} else {
System.out.println("手机号格式错误");
break;
}
}
if (a == 'b') {
break;
} else if (a == 'a') {
continue;
}
}
u.setPhoneNumber(phoneNumber);
System.out.println("手机号输入正确");
list.add(u);
System.out.println("注册成功");
return;
}
//登录功能
public static void record(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String userName = sc.next();
if (list.isEmpty()) {
System.out.println("用户未注册,请先注册");
return;
} else {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (user.getUserName().equals(userName)) {
break;
} else {
System.out.println("用户未注册,请先注册");
}
}
}
// for (User user :list) {
// if(user.getUserName().equals(userName)){
// break;
// }else {
// System.out.println("用户未注册,请先注册");
// }
//
// }
int j = 0;
loop:
while (true && j < 3) {
System.out.println("请输入密码");
String passWord = sc.next();
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (user.getPassword().equals(passWord)) {
break loop;
} else {
System.out.println("密码输入错误");
System.out.println("当前还剩下" + (2 - j) + "次机会");
j++;
break;
}
}
}
//生成一个随机的验证码
while (true && j < 3) {
String getCode = changeLetter();
System.out.println("验证码为" + getCode);
System.out.println("请输入验证码");
String code = sc.next();
if (getCode.equals(code)) {
break;
} else {
System.out.println("验证码输入错误");
System.out.println("当前还剩下" + (2 - j) + "次机会");
j++;
}
}
if (j < 3) {
System.out.println("登录成功");
return;
}
}
//将生成的字符数组内容放到一个字符串里面
public static String changeLetter() {
char[] code = getCode();
String getcode = "";
for (int i = 0; i < code.length; i++) {
getcode = getcode + code[i];
}
return getcode;
}
//通过用户名得到要修改的id
public static int getIndex(ArrayList<User> list,String userName){
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (user.getUserName().equals(userName)){
return i;
}
}
return -1;
}
//生成验证码
//4位大小写字母+1数字
///数字可以出现在任何位置
public static char[] getCode() {
//创建一个字符串数组,长度为5
char[] arr = new char[5];
Random r = new Random();
//获得随机的一个数字
int number = r.nextInt(9);
//获得随机的一个字母数组
char[] letter = getLetter();
String result = "";
//先将数字放在最后一位
for (int i = 0; i < arr.length - 1; i++) {
int letterNumber = r.nextInt(52);
result = result + letter[letterNumber];
}
result = result + number;
//将数字索引进行打乱
int numberIndex = r.nextInt(arr.length - 1);
//将结果变成一个字符串数组
for (int i = 0; i < result.length(); i++) {
char c = result.charAt(i);
arr[i] = c;
}
//将最后一个索引的内容与前面交换
char temp = arr[arr.length - 1];
arr[arr.length - 1] = arr[numberIndex];
arr[numberIndex] = temp;
return arr;
}
//获得随机的一个字母数组
public static char[] getLetter() {
char[] arr = new char[52];
for (int i = 0; i < arr.length; i++) {
if (i <= 25) {
arr[i] = (char) (97 + i);
} else {
arr[i] = (char) (65 + i - 26);
}
}
return arr;
}
//判断用户名的格式
public static boolean judegeUserNameType(String userName) {
int count = 0;
for (int i = 0; i < userName.length(); i++) {
char c = userName.charAt(i);
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
//得到用户名是字母的个数
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
count++;
}
} else {
return false;
}
}
if (count > 0) {
return true;
} else {
return false;
}
}
//判断用户名是否重复
public static boolean judgeUserName(ArrayList<User> list, String userName) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (user.getUserName().equals(userName)) {
return true;
}
}
return false;
}
}
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;
}
}