需求:
采取控制台的方式去书写学生管理系统,能进行增删改查等操作
为学生管理系统写一个登录、注册、忘记密码的功能
只有用户登录成功后,才能进入到学生管理系统中进行操作
学生类
属性:
id 、姓名、年龄、家庭住址
添加功能:
键盘录入每一学生信息并添加,满足以下要求:
*** id唯一
删除功能:
键盘录入要删除学生的id,满足以下要求:
*** id存在删除
*** id不存在,提示不存在,并回到初始菜单
修改功能:
键盘录入要修改学生的id,满足以下要求:
*** id存在,继续录入其他信息
*** id不存在,提示不存在,并回到初始菜单
学生管理系统功能菜单:
"--------------欢迎来到郑轻学生管理系统--------------"
"1:添加学生"
"2:删除学生"
"3:修改学生
"4:查讯学生"
"5:退出"
"请输入您的选择"
用户类
属性:
用户名、密码、身份证号码、手机号码
注册功能:
1.用户名需要满足以下要求:
*** 用户名唯一
*** 用户名长度必须在3~15位之间
*** 只能是数字加字母的组合,但不能是纯数字
2.密码键入两次,两次一致才可以进行注册
3.身份证号码需要验证:
*** 长度为18位
*** 不能以0开头
*** 前十七位,必须都是数字
*** 最后一位可以是数字,也可以是大写或小写x
4.手机号验证:
*** 长度为11位
*** 不能以0开头
*** 必须都是数字
登录功能:
1.键盘录入用户名
2.键盘录入密码
3.键盘录入验证码
要求:
用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
判断验证码是否正确,如不正确,重新输入
再判断用户名和密码是否正确,有三次机会
忘记密码:
1.键盘录入用户名,判断用户名是否存在,如不存在直接结束方法,并提示:未注册
2.键盘录入身份证号码和手机号码
3.判断当前用户的身份证号码和手机号是否一致
如果一致,提示输入密码,进行修改
如果不一致,提示:账号信息不匹配,修改失败
验证码规则:
长度为5
由4位大写或小写字母和一位数字组成,字母可重复
数字可以出现在任意位置
用户登录界面菜单:
--------------欢迎来到郑轻学生管理系统--------------"
"请选择操作 1:登录 2:注册 3:忘记密码"
完整代码:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
//创建一个用户集合
ArrayList<User> userList = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//业务
boolean b=true;
while (b) {
//登录界面
System.out.println("--------------欢迎来到郑轻学生管理系统--------------");
System.out.println("请选择操作 1:登录 2:注册 3:忘记密码");
String chose = sc.next();
switch (chose) {
case "1" -> b=!( login(userList) );
case "2" -> registered(userList);
case "3" -> forgetPassWord(userList);
default -> System.out.println("您的输入有误,请重新输入");
}
}
//创建一个学生集合
ArrayList<Student> studentList = new ArrayList<>();
//业务
boolean temp = true;
while (temp) {
//主菜单
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 num = sc.nextInt();
switch (num) {
case 1 -> addStudent(studentList);
case 2 -> removeStudent(studentList);
case 3 -> setStudent(studentList);
case 4 -> getStudent(studentList);
case 5 -> temp = false;
default -> System.out.println("您的输入有误,请重新输入");
}
}
}
// 判断 id 是否已存在 存在返回下标
public static int idCheck(String id, ArrayList<Student> studentList) {
for (int i = 0; i < studentList.size(); i++) {
if (studentList.get(i).getId().equals(id)) {
return i;
}
}
return -1;
}
public static void addStudent(ArrayList<Student> studentList) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的 id");
String id = sc.next();
System.out.println("请输入学生的 姓名");
String name = sc.next();
System.out.println("请输入学生的 年龄");
int age = sc.nextInt();
System.out.println("请输入学生的 地址");
String address = sc.next();
//判断id
int index = idCheck(id, studentList);
//
if (index >= 0) { //true 存在
System.out.println("id已存在,请重新输入");
addStudent(studentList);
} else { // 不存在
Student stu = new Student();
stu.setId(id);
stu.setName(name);
stu.setAge(age);
stu.setAddress(address);
studentList.add(stu);
System.out.println("添加成功");
}
}
public static void removeStudent(ArrayList<Student> studentList) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入删除学生的id");
String id = sc.next();
int index = idCheck(id, studentList);
if (index >= 0) {
//存在
studentList.remove(index);
System.out.println("删除成功");
} else {
//不存在
System.out.println("id不存在");
}
}
public static void setStudent(ArrayList<Student> studentList) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入修改学生id");
String id = sc.next();
int index = idCheck(id, studentList);
if (index == -1) {
//不存在
System.out.println("id不存在");
} else {
//存在
String name = sc.next();
int age = sc.nextInt();
String address = sc.next();
studentList.get(index).setName(name);
studentList.get(index).setAge(age);
studentList.get(index).setAddress(address);
System.out.println("修改成功");
}
}
public static void getStudent(ArrayList<Student> studentList) {
//判断是否存了学生
int size = studentList.size();
if (size == 0) {
System.out.println("当前无学生信息,请添加后再查询");
} else {
System.out.println("id " + " " + "姓名 " + " " + "年龄" + " " + "家庭住址");
for (int i = 0; i < studentList.size(); i++) {
Student stu = new Student();
stu = studentList.get(i);
System.out.println(stu.getId() + " " + stu.getName() + " " + stu.getAge() + " " + stu.getAddress());
}
}
}
//注册用户
public static void registered(ArrayList<User> userList) {
Loop:while (true) {
User u = new User();
Scanner sc = new Scanner(System.in);
System.out.println("请输入新用户的用户名");
String userName = sc.next();
System.out.println("请输入新用户的密码");
String passWord1 = sc.next();
System.out.println("请再次输入密码");
String passWord2 =sc.next();
System.out.println("请输入新用户的身份证号");
String id = sc.next();
System.out.println("请输入新用户的手机号");
String phoneNumber = sc.next();
//判断用户名是否重复
int index = userNameCheck(userName,userList);
if(index>=0){
//重复
System.out.println("用户名已重复,请重新注册");
break;
}
//判断用户名长度
if (userName.length()<=3||userName.length()>=15){
System.out.println("用户名长度不在3~15之间,请重新注册");
break;
}
//判断用户名组合
boolean b=userNameZuHe(userName);
if (b==false){
System.out.println("用户名只能是字母加数字的组合,但不能是纯数字,请重新注册");
break;
}
//判断密码是否一致
if(!passWord1.equals(passWord2)){
System.out.println("两次密码不一致,请重新注册");
break;
}
//判断身份号是否18位 第一位是不是0
if(id.length()!=18 || id.charAt(0)=='0'){
System.out.println("请输入正确的身份证号码(长度18 第一位不是0)");
break;
}
//判断前17位是不是数字
for (int i = 0; i < id.length()-1; i++) {
char c=id.charAt(i);
if (c<'0'||c>'9'){
System.out.println("请输入正确的身份证号码(前17位)");
break Loop;
}
}
//判断最后一位是否是数字或者x、X
if( (id.charAt(id.length()-1)>='0'&&id.charAt(id.length()-1)<='9')||(id.charAt(id.length()-1)=='x')||(id.charAt(id.length()-1)=='X') ){
}else {
System.out.println("请输入正确的身份证号码(最后一位)");
break ;
}
//判断手机号
if (phoneNumber.length()!=11){
System.out.println("请输入正确的手机号(11位)");
break ;
}
if(phoneNumber.charAt(0)=='0'){
System.out.println("请输入正确的手机号(第一位不是0)");
break ;
}
for (int i = 0; i < phoneNumber.length(); i++) {
char c=phoneNumber.charAt(i);
if(c<'0'||c>'9'){
System.out.println("请输入正确的手机号(数字)");
break Loop;
}
}
//注册用户 并添加到用户数组
u.setUserName(userName);
u.setPassWord(passWord1);
u.setId(id);
u.setPhoneNumber(phoneNumber);
userList.add(u);
//结束注册
System.out.println("注册成功");
return;
}
}
//判断用户名组合
public static boolean userNameZuHe(String userName){
boolean b=true;
int count=0;
for (int i = 0; i < userName.length(); i++) {
char c=userName.charAt(i);
if( (c>='0'&&c<='9') || (c>='a'&&c<='z') || (c>='A'&&c<='Z') ){
}else {
b=false;
break;
}
if( (c>='a'&&c<='z') || (c>='A'&&c<='Z') ) count++;
}
if(count==0) b=false;
return b;
}
//判断用户名是否存在 返回下标
public static int userNameCheck(String userName,ArrayList<User> userList) {
for (int i = 0; i < userList.size(); i++) {
if (userList.get(i).getUserName().equals(userName)) {
return i;
}
}
return -1;
}
//登录用户
public static boolean login(ArrayList<User> userList){
Scanner sc=new Scanner(System.in);
int count=0;
while (true) {
System.out.println("请输入用户名");
String userName=sc.next();
//判断用户名
int index = userNameCheck(userName, userList);
if(index==-1){
System.out.println("用户名未注册,请先注册");
return false;
}
System.out.println("请输入密码");
String passWord=sc.next();
String codeRight=setCode();
System.out.println("请输入验证码:"+codeRight);
String code=sc.next();
//判断验证码
if(!codeRight.equals(code)){
System.out.println("验证码错误,请重新输入");
continue;
}
//判断用户名密码是否正确
if (passWord.equals(userList.get(index).getPassWord())){
System.out.println("登录成功");
return true;
}else {
count++;
if(count==3){
System.out.println("密码错误三次");
return false;
}else System.out.println("密码错误,请重新输入");
}
}
}
//生成验证码
public static String setCode(){
StringBuilder code=new StringBuilder();
Random r=new Random();
for (int i=0;i<5-1;i++){
int numaA=r.nextInt(2);
int num=r.nextInt(26);
if(numaA==0){
char c=(char)('a'+num);
code.append(c);
}else {
char c=(char)('A'+num);
code.append(c);
}
}
int num2=r.nextInt(10);
code.append(num2);
//打乱顺序
String code1=code.toString();
char[] chars = code1.toCharArray();
for (int i = 0; i < chars.length; i++) {
int index=r.nextInt(chars.length);
char c= chars[i];
chars[i]=chars[index];
chars[index]=c;
}
StringBuilder codeResult=new StringBuilder();
for (int i = 0; i < chars.length; i++) {
codeResult=codeResult.append(chars[i]);
}
return codeResult.toString();
}
//忘记密码
public static void forgetPassWord(ArrayList<User> userList){
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名");
String userName=sc.next();
//判断用户名
int index = userNameCheck(userName, userList);
if(index==-1){
System.out.println("用户名未注册,请先注册");
return;
}
System.out.println("请输入身份证号码");
String id=sc.next();
System.out.println("请输入手机号码");
String phoneNumber=sc.next();
String idRight=userList.get(index).getId();
String phoneNumberRight=userList.get(index).getPhoneNumber();
if( idRight.equals(id) && phoneNumberRight.equals(phoneNumber) ){
System.out.println("请输入新密码");
String newPassWord=sc.next();
//修改密码
userList.get(index).setPassWord(newPassWord);
System.out.println("修改成功");
}else {
System.out.println("账号信息不匹配,修改失败");
}
}
}
学生类
public class Student {
private String name;
private String id;
private int age;
private String address;
public Student() {
}
public Student(String name, String id, int age, String address) {
this.name = name;
this.id = id;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
用户类
public class User {
private String userName;
private String passWord;
private String id;
private String phoneNumber;
public User() {
}
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 getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public User(String userName, String passWord, String id, String phoneNumber) {
this.userName = userName;
this.passWord = passWord;
this.id = id;
this.phoneNumber = phoneNumber;
}
}