学生管理系统升级版
需求:
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
分析:
登录界面:
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
实现代码:
package Management_system_student;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StudentSystem2 {
//用于全局存储公共信息,即存储用户信息
private static ArrayList<User> users = new ArrayList<>();
public static void main(String[] args) {
login();
}
public static void login(){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1.登录 2.注册 3.忘记密码 4.退出系统");
int i = sc.nextInt();
// ArrayList<User> users = new ArrayList<>();
switch (i){
case 1:
loginByid(users);
break;
case 2:
users= enroll(users);
break;
case 3:
users= Forgot_password(users);
break;
case 4:
return;
}
}
}
//注册功能
public static ArrayList<User> enroll(ArrayList<User> users){
System.out.println("--------------注册用户---------------------");
Scanner sc = new Scanner(System.in);
//创建一个User对象
User u = new User();
String username;
while (true) {
System.out.println("请输入用户名");
username = sc.next();
//判断用户名是否唯一
boolean flag = true;
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUsername().equals(username)){
//用户名重复
System.out.println("用户名重复请重新输入");
flag = false;
}
}
if (flag){
//没有重复,继续进行其他校验
/*用户名长度必须在3~15位之间
只能是字母加数字的组合,但是不能是纯数字*/
if (username.length()>=3&&username.length()<=15){
//只能是字母加数字的组合,但是不能是纯数字
//即至少有一个数字
//用于记录是否有数字
boolean numflag = true;
for (int i = 0; i < username.length(); i++) {
char charAt = username.charAt(i);
//判断是否合规
if ((charAt>='0'&&charAt<='9')||(charAt>='a'&&charAt<='z')||(charAt>='A'&&charAt<='Z')){
//判断是否有数字
if (!(charAt>='0'&&charAt<='9')){
//有字母
numflag = false;
}
}
}
if (!numflag){
//有数字
break;
}else {
System.out.println("只能是字母加数字的组合,但是不能是纯数字");
}
}else {
System.out.println("用户名长度必须在3~15位之间,输入数据不符合");
}
}
}
//用户名的要求完成
//开始输入密码
String password1;
while (true) {
System.out.println("请输入密码");
password1 = sc.next();
System.out.println("请再次输入密码");
String password2 = sc.next();
if (password2.equals(password1)){
break;
}else {
System.out.println("两次输入的密码不同请重新输入");
}
}
//开始输入身份证
String cardid;
while (true) {
System.out.println("亲输入身份证号码");
cardid = sc.next();
boolean verify = verify(cardid);
if (verify){
break;
}else {
System.out.println("身份证号不合法,请重新输入");
}
}
//开始输入手机号
String phonrNumber;
while (true) {
System.out.println("请输入手机号");
phonrNumber = sc.next();
boolean validPhoneNumber = isValidPhoneNumber(phonrNumber);
if (validPhoneNumber){
break;
}else {
System.out.println("你输入的手机号错误,请重新输入");
}
}
//将各个数据都写入到对象中加入集合
u.setIdCard(cardid);
u.setPassword(password1);
u.setUsername(username);
u.setPhoneNumber(phonrNumber);
//加入list集合
users.add(u);
System.out.println("注册成功");
return users;
}
//校验身份证是否合法的方法
public static boolean verify(String str) {
//判断是否为18位
if (str.length() == 18) {
//判断第一位是否为0开头
if (!(str.charAt(0) == '0')) {
//判断前17位是否为数字
for (int i = 0; i < str.length() - 1; i++) {
if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
} else {
return false;
}
}
//判断最后一位
if ((str.charAt(str.length() - 1) >= '0' && str.charAt(str.length() - 1) <= '9') || (str.charAt(str.length() - 1) == 'X')) {
} else {
return false;
}
return true;
} else {
return false;
}
} else {
return false;
}
}
//校验手机号是否合法
public static boolean isValidPhoneNumber(String phoneNumber) {
// 定义正则表达式:长度为11位,不能以0开头,必须都是数字
String regex = "^[1-9][0-9]{10}$";
// 使用正则表达式匹配手机号码
return phoneNumber != null && phoneNumber.matches(regex);
}
//登录功能
public static void loginByid(ArrayList<User> users){
System.out.println("-------登录界面--------------");
//设置用户名和密码
String username = "";
String password = "";
boolean flag = true;
for (int i = 0; i < 3; i++) {
//录入用户输入的信息
Scanner sc = new Scanner(System.in);
//用户名
String name = null;
while (true) {
System.out.println("请输入用户名");
name = sc.next();
boolean flagUserName = false;
//对用户名进行校验,未找到则返回,找到则给用户名和密码赋值
for (int i1 = 0; i1 < users.size(); i1++) {
User user = users.get(i1);
if (user.getUsername().equals(name)){
//找到用户名和密码
username = user.getUsername();
password = user.getPassword();
flagUserName = true;
}
}
if (flagUserName){
//找到
break;
}else {
System.out.println("用户未注册请重新注册");
return;
}
}
//密码
System.out.println("请输入密码");
String pass = sc.next();
//验证码,即s
String pa = pa();
String s = suiJi(pa);
System.out.println("请输入验证码,验证码为: "+s);
String identifying = sc.next();
//验证码校验可以不考虑大小写
if (username.equals(name)&&password.equals(pass)&&s.equalsIgnoreCase(identifying)){
System.out.println("恭喜登录成功");
flag = false;
break;
}else {
System.out.println("账号或密码错误");
System.out.println("还有"+(2-i) +"次机会");
}
}
if (flag){
System.out.println("登录机会已用完,账号被锁定");
}else {
//进入登录后的页面
start();
}
}
//忘记密码功能
public static ArrayList<User> Forgot_password(ArrayList<User> users){
System.out.println("-------------忘记密码操作-----------------");
//创建一个User对象接受查询到的数据
User u = new User();
//输入用户名并判断
//录入用户输入的信息
Scanner sc = new Scanner(System.in);
//用户名
String name = null;
//用户的索引,用于list的修改
int index= -1;
while (true) {
System.out.println("请输入用户名");
name = sc.next();
boolean flagUserName = false;
//对用户名进行校验,未找到则返回,找到则给用户名和密码赋值
for (int i1 = 0; i1 < users.size(); i1++) {
User user = users.get(i1);
if (user.getUsername().equals(name)){
//找到用户名和密码
u = user;
index = i1;
flagUserName = true;
}
}
if (flagUserName){
//找到
break;
}else {
System.out.println("用户未注册,请先注册");
return users;
}
}
//键盘录入身份证和电话
System.out.println("请输入你的身份证");
String cardId = sc.next();
System.out.println("请输入你的手机号");
String phoneNumber = sc.next();
//进行校验
if (u.getIdCard().equals(cardId)&&u.getPhoneNumber().equals(phoneNumber)){
while (true) {
//校验通过,修改密码并修改list
System.out.println("请输入新密码进行修改");
String pw1 = sc.next();
System.out.println("请再次输入新密码确认");
String pw2 = sc.next();
if (pw1.equals(pw2)){
u.setPassword(pw1);
//修改list集合
users.set(index,u);
System.out.println("密码修改成功,请重新登录");
return users;
}else {
System.out.println("两次输入的密码不同请重新输入");
}
}
}else {
System.out.println("信息不匹配,修改失败!");
}
return users;
}
//String随机方法
public static String suiJi(String next){
//新建一个random对象
Random r = new Random();
//将String对象转化为char数组
char[] chars = next.toCharArray();
for (int i = 0; i < chars.length; i++) {
//获取随机数,将随机数和当前的i互换位置
int index = r.nextInt(chars.length);
char temp = chars[i];
chars[i] = chars[index];
chars[index] = temp;
}
String result = "";
for (int i = 0; i < chars.length; i++) {
result = result+ chars[i];
}
return result;
}
//生出验证码的方法
public static String pa(){
//生成验证码
Random r = new Random();
//生成字符串接收验证码
String ma = "";
//根据i判断生成大写还是小写
for (int j = 0; j < 4; j++) {
int i = r.nextInt(2)+1;
if (i==1){
//生成大写
char Char = (char)(r.nextInt(26)+65);
ma = ma + Char;
} else if (i==2) {
//生成小写
char Char = (char)(r.nextInt(26)+97);
ma = ma + Char;
}
}
//加入数字
int i = r.nextInt(10);
ma = ma + i;
return ma;
}
//登录后的一系列界面
//开始界面
public static void start(){
Scanner sc = new Scanner(System.in);
//定义集合存储学生信息
ArrayList<Student> list = new ArrayList<>();
while (true) {
System.out.println("-----------学生管理系统---------------------");
System.out.println("1.添加学生");
System.out.println("2.删除学生");
System.out.println("3.修改学生");
System.out.println("4.查询学生");
System.out.println("5.退出");
System.out.println("请输入您的选择");
int i = sc.nextInt();
switch (i){
case 1:
list = insert(list);
break;
case 2:
list= delectByid(list);
break;
case 3:
list= UpdateByid(list);
break;
case 4:
Inquire(list);
break;
case 5:
return;
default:
System.out.println("输入的选择有误,请重新输入");
}
}
}
//添加学生
public static ArrayList<Student> insert(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
//新建学生对象
Student stu = new Student();
String id;
while (true) {
System.out.println("请输入学生id");
id = sc.next();
//对输入的id进行唯一判断
//标记是否有冲突
boolean flag = true;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)){
System.out.println("id重复请重新输入");
flag = false;
}
}
if (flag){
break;
}
}
System.out.println("请输入学生姓名");
String name = sc.next();
System.out.println("请输入学生年龄");
int age = sc.nextInt();
System.out.println("请输入学生家庭住址");
String address = sc.next();
//将数据写入Student对象
stu.setId(id);
stu.setName(name);
stu.setAge(age);
stu.setAddress(address);
//将对象写入list集合
list.add(stu);
return list;
}
//删除学生
public static ArrayList<Student> delectByid(ArrayList<Student> list){
Scanner sc= new Scanner(System.in);
System.out.println("请输入要删除的学生的id");
String id = sc.next();
boolean flag = true;
//查询是否存在该id
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)){
//存在
flag = false;
//开始进行删除操作
Student remove = list.remove(i);
System.out.println("该ID删除成功");
System.out.println("删除的数据为:"+ remove);
}
}
if (flag){
//不存在
System.out.println("该id不存在,请查证后再输入");
return list;//似乎不需要这一步。
}
return list;
}
//修改学生信息
public static ArrayList<Student> UpdateByid(ArrayList<Student> list){
Scanner sc= new Scanner(System.in);
System.out.println("请输入要修改的学生的id");
String id = sc.next();
boolean flag = true;
//查询是否存在该id
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)){
//存在
flag = false;
//开始进行修改操作
//创建Student对象
Student stu = new Student();
System.out.println("谁否要修改ID,是输入1,否输入2");
int qw = sc.nextInt();
//用于存储新ID
String nid;
if (qw==1){
while (true) {
System.out.println("请输入学生id");
nid = sc.next();
//对输入的id进行唯一判断
//标记是否有冲突
boolean flag2 = true;
for (int j = 0; j < list.size(); j++) {
if (list.get(j).getId().equals(nid)){
System.out.println("id重复请重新输入");
flag2 = false;
}
}
if (flag2){
break;
}
}
}
else {
nid = id;
}
System.out.println("请输入学生姓名");
String name = sc.next();
System.out.println("请输入学生年龄");
int age = sc.nextInt();
System.out.println("请输入学生家庭住址");
String address = sc.next();
//将数据写入Student对象
stu.setId(nid);
stu.setName(name);
stu.setAge(age);
stu.setAddress(address);
//将Student对象存入list集合
list.set(i,stu);
}
}
if (flag){
//不存在
System.out.println("该id不存在,请查证后再输入");
return list;//似乎不需要这一步。
}
return list;
}
//查询功能
public static void Inquire(ArrayList<Student> list){
//判断是否有信息
if (list.size()==0){
//无信息
System.out.println("当前无学生信息,请添加后再查询");
}else {
System.out.println("id\t\t\t姓名\t\t\t年龄\t\t\t家庭住址");
//有信息,进行遍历
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
//打印信息
System.out.println(s.getId()+"\t\t\t"+s.getName()+"\t\t\t"+s.getAge()+"\t\t\t"+s.getAddress());
}
}
}
}