学生管理系统(升级)
需求
为学生管理系统书写一个登录.注册.忘记密码的功能,只有用户登陆成功才能进入学生管理系统中进行增删改查操作
分析
登陆界面
““欢迎来到学生管理系统””
“请操作.1.登录2.注册.3.忘记密码”
用户类
属性:用户名,密码,身份证号码,手机号码
注册功能
1.用户名需要满足以下要求:
用户名唯一
用户名长度必须在3-15之间
只能是字母加数字的组合,但是不能是纯数字
2.密码键盘输入两次,两次一致才进行注册
3.身份证号码需要验证
长度为18位
不能以0开头
前十七位必须都是数字
最后一位可以是数字也可以是大写X或小写x
4.手机号验证
长度为11位
不能以0开头
必须都是数字
登录功能
1.键盘录入用户名
2.键盘录入密码
3.键盘录入验证码
验证要求
用户如果未注册,直接结束方法,并提示:用户名为注册,请先注册
判断验证码是否正确,如果不正确,重新输入
再判断用户名和密码是否正确,有3次机会
忘记密码
1.键盘录入用户名,判断当前用户名是否存在,如果不存在,直接结束方法,并提示:未注册
2.键盘录入身份证号码和手机号码
3.判断当前用户的身份证号和手机号码是否一致:如果一致,则提示输入密码,进行修改.如果不一致,则提示:账号信息不匹配,修改失败
验证码规则
长度为5
由4位大写或者小写字母和1位数字组成,同一个字母可重复
数字可以出现在任意位置
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class UserSystem {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
loop:
while (true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请操作:1.登录2.注册3.忘记密码");
Scanner sc = new Scanner(System.in);
int option = sc.nextInt();
switch (option) {
case 1:
//登录
login(list);
break;
case 2:
//注册
register(list);
break;
case 3:
//忘记密码
forget(list);
break;
default:
System.out.println("系统无此操作");
break loop;
}
}
}
//忘记密码
public static void forget(ArrayList<User> list){
System.out.println("请输入用户名");
Scanner sc = new Scanner(System.in);
String username = sc.next();
//判断当前用户是否存在
int index = isUnique(list,username);
if(index == -1){
System.out.println("未注册");
return ;
}
System.out.println("请输入身份证号码");
String idCard = sc.next();
System.out.println("请输入手机号码");
String phoneNumber = sc.next();
if(idCard.equals(list.get(index).getIdCard()) && phoneNumber.equals(list.get(index).getPhoneNumber())){
System.out.println("请输入新密码");
String password = sc.next();
list.remove(index);
list.add(new User(username,password,idCard,phoneNumber));
System.out.println("修改成功");
return ;
}else{
System.out.println("身份证号或手机号码错误,修改失败");
return ;
}
}
//用户登录
public static void login(ArrayList<User> list) {
System.out.println("请输入用户名");
Scanner sc = new Scanner(System.in);
String username = sc.next();
System.out.println("请输入用户密码");
String password = sc.next();
System.out.println("请输入验证码");
String code = sc.next();
//验证用户名
if(isUnique(list,username) == -1){
System.out.println("用户名未注册,请先注册");
return ;
}
//验证验证码
String systemCode = getCode();
System.out.println(systemCode);
while(!code.equals(systemCode)) {
System.out.println("验证码错误,请重新输入");
code = sc.next();
}
//验证用户名和密码
for (int i = 0; i < 3; i++) {
boolean flag = true;
int index = isUnique(list,username);
if(index == -1){
System.out.println("用户名或密码错误");
flag = false;
continue;
}else{
if(! list.get(index).getPassword().equals(password)){
System.out.println("用户名或密码错误");
flag = false;
continue;
}
}
if(flag){
System.out.println("登陆成功");
return ;
}
}
}
//系统获得随机验证码
public static String getCode() {
char[] bigChar = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
char[] smallChar = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
Random r = new Random();
String s = "";
int numberindex = r.nextInt(5);//随机数的位置
int number = r.nextInt(10);//随机数
for (int i = 0; i < 6; i++) {
if(i == numberindex){
s += number;
continue;
}
int option = r.nextInt(2);
int rr = r.nextInt(26);
if (option == 0) {
s += bigChar[rr];
} else {
s += smallChar[rr];
}
}
return s;
}
//用户注册
public static void register(ArrayList<User> list) {
System.out.println("请输入用户名");
Scanner sc = new Scanner(System.in);
String username = sc.next();
System.out.println("请输入用户密码");
String password = sc.next();
System.out.println("请再次输入密码");
String repassword = sc.next();
System.out.println("请输入身份证号码");
String idCard = sc.next();
System.out.println("请输入手机号");
String phoneNumber = sc.next();
//验证用户名是否符合规定
if (!isUserName(username, list)) {
System.out.println("注册失败");
return;
}
//验证密码是否符合规定
if (!password.equals(repassword)) {
System.out.println("两次密码输入不一致,注册失败");
return;
}
//验证身份证号
if (!isIdCard(idCard)) {
System.out.println("注册失败");
return;
}
//验证手机号
if(!isPhoneNumber(phoneNumber)){
System.out.println("注册失败");
return;
}
System.out.println("注册成功");
User user = new User(username, password, idCard, phoneNumber);
list.add(user);
}
//验证手机号是否符合规定
public static boolean isPhoneNumber(String phoneNumber){
if(phoneNumber.length() != 11){
System.out.println("手机号长度不正确");
return false;
}
if(phoneNumber.charAt(0) == '0'){
System.out.println("第一位不能是0");
return false;
}
for (int i = 0; i < phoneNumber.length(); i++) {
if(phoneNumber.charAt(i) < '0' || phoneNumber.charAt(i) > '9'){
System.out.println("电话号码只能是数字");
}
}
return true;
}
//验证身份证号是否符合规定
public static boolean isIdCard(String idCard) {
if (idCard.length() != 18) {
System.out.println("身份证号码长度错误");
return false;
}
if (idCard.charAt(0) == '0') {
System.out.println("身份证号码不能以0开头");
return false;
}
for (int i = 0; i < idCard.length() - 1; i++) {
if (idCard.charAt(i) < '0' || idCard.charAt(i) > '9') {
System.out.println("身份证号码前17为必须是数字");
return false;
}
}
char c = idCard.charAt(idCard.length() - 1);
if ((c < '0' || c > '9') && (c != 'X') && (c != 'x')) {
System.out.println("最后一位有问题");
return false;
}
return true;
}
//验证用户名是否符合规定
public static boolean isUserName(String username, ArrayList<User> list) {
//判断用户名长度是否合规
if (username.length() < 3 || username.length() > 15) {
System.out.println("用户名长度应在3-15之间");
return false;
}
//判断用户名是否由字母加数字的组合
boolean containChar = false;
boolean containNumber = false;
for (int i = 0; i < username.length(); i++) {
if ((username.charAt(i) >= 'a' && username.charAt(i) <= 'z') ||
(username.charAt(i) >= 'A' && username.charAt(i) <= 'Z')) {
containChar = true;
}
if (username.charAt(i) >= '0' && username.charAt(i) <= '9') {
containNumber = true;
}
if (containChar && containNumber) {
break;
}
}
if (!(containChar && containNumber)) {
System.out.println("用户名需为数字和字母的组合");
return false;
}
//判断用户名的唯一性
int unique = isUnique(list, username);
if (unique != -1) {
System.out.println("用户名已被注册");
return false;
}
return true;
}
//验证用户名的唯一性
public static int isUnique(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUsername().equals(username)) {
return i;
}
}
return -1;
}
}