Java:学生管理系统(添加了管理员登录,注册找回密码模块)

题目需求
学生类:
属性 :id、姓名、年龄、家庭住址

添加功能
键盘录入每一个学生信息并添加,需要满足以下要求:
*id唯一

删除功能
键盘录入要删除的学生id,需要满足以下要求:
*id存在才能删除
*id不存在,需要提示不存在,并回到初始菜单

修改功能
键盘录入要修改的学生id,需要满足以下要求:
*id存在,继续录入需要修改的信息
*id不存在,需要提示不存在,并回到初始菜单

查询功能
打印所有学生信息,需要满足以下要求:
*如果没有学生信息,提示:当前无学生信息,请添加后再查询

用户类
属性:用户名、密码、身份证号、手机号

注册功能:
1.用户名需要满足一下要求:
   *用户名唯一
   *用户名长度必须在3~15位之间
   *只能是字母加数字组合,但是不能是纯数字或者纯字母
2.密码键盘输入两次,两次一致才可以进行注册
3.身份证号码需要验证
   *长度为18位
   *不能以0开头
   *前17位,必须是数字
   *最后一位可以是数字、大小写的x
4.手机号验证
   *长度为11位
   *不能以0开头
   *必须为纯数字

登录功能
1.键盘录入用户名
2.键盘录入密码
3.键盘录入验证码
验证要求:
   *用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
   *判断验证码是否正确,如果不正确,重新输入
   *判断用户名和密码是否正确

忘记密码
1.键盘录入用户名,判断用户名是否存在,如果不存在,直接结束方法并提示未注册
2.键盘录入身份证号码和手机号
3.判断当前用户的身份证号码和手机号码是否一致
   *如果一致,则提示输入密码,进行修改
   *如果不一致,则提示:账号信息不匹配,修改失败
验证码规则:
长度4~6位之间,随机
随机包含大小写字母或数字
比如:xpO8Yh

学生类

package com.iweb.list.test1.StudentSystem;

/**
 * @author Caesar
 * @date 2022 11 2022/11/14 15:50
 * @description 类的描述与介绍
 */
public class Student {
    private int id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(int id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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;
    }
}

用户类

package com.iweb.list.test1.StudentSystem;

/**
 * @author Caesar
 * @date 2022 11 2022/11/15 9:05
 * @description 类的描述与介绍
 */
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;
    }
}

测试类

package com.iweb.list.test1.StudentSystem;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/**
 * @author Caesar
 * @date 2022 11 2022/11/14 16:01
 * @description 类的描述与介绍
 */
public class StudentSystem {
    public static void main(String[] args) {
//            定义一个集合,用于存储学生对象
        ArrayList<Student> list = new ArrayList<>();
//        定义一个集合用于存储用户对象
        ArrayList<User> userList = new ArrayList<>();

//        开始菜单
        loginPage(userList,list);
    }

//    登录页面
    public static void loginPage(ArrayList<User> userList,ArrayList<Student> list){

        while (true){
            System.out.println(">>>>>>>>>>欢迎来到某某大学学生管理系统<<<<<<<<<<");
            System.out.println(">>>>>>>>>>>>>>>>>>1:登录<<<<<<<<<<<<<<<<<<<<<");
            System.out.println(">>>>>>>>>>>>>>>>>>2:注册<<<<<<<<<<<<<<<<<<<<<");
            System.out.println(">>>>>>>>>>>>>>>>>>3:找回密码<<<<<<<<<<<<<<<<<");
            System.out.println(">>>>>>>>>>>>>>>>>>4:退出<<<<<<<<<<<<<<<<<<<<");
            Scanner scr = new Scanner(System.in);
            String chose = scr.next();
            switch (chose){
                case "1":
                    login(userList,list);
                    break;
                case "2":
                    registered(userList);
                    break;
                case "3":

                    updatePassword(userList);
                    break;
                case "4":
                    System.out.println("谢谢惠顾");
                    System.exit(0);
                default:
                    System.out.println("输入有误,请重新输入!");
            }
        }
    }
//    登录后的菜单
    public static String homePage(ArrayList<Student> list,ArrayList<User> userList){
        loop:
        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:退出登录<<<<<<<<<<<<<<<<<<<");
            Scanner scr = new Scanner(System.in);
            String chose = scr.next();
            switch (chose) {
                case "1":
                    addStudents(list);
                    break;
                case "2":
                    deleteStudent(list);
                    break;
//                    for (int i = 0; i < list.size(); i++) {
//                        System.out.println(list.get(i).getId());
//                    }
                case "3":
                    updateStudent(list);
                    break;
                case "4":
                    searchStudent(list);
                    break;
                case "5":
                    System.out.println("谢谢惠顾!!!");
//                    break loop;
//                    这里的loop用于给while循环起名
//                    结束指定循环,才会结束
//                    若直接break,只能跳出switch case这个循环,不能跳出外面的while循环
//                退出的第二种写法:
                    loginPage(userList,list);
//                表示虚拟机停止运行
                default:
                    System.out.println("没有这个选项!请重新输入");
            }
        }
    }


//    学生信息管理模块————————————————————————————
    //    用于添加学生
    public static void addStudents(ArrayList<Student> list) {
        Scanner scr = new Scanner(System.in);
        Student stu = new Student();
//        利用空参构造创建学生对象
        System.out.println("请输入学生id");
        int sid = scr.nextInt();
        stu.setId(sid);
        boolean flag = contains(list, sid);
        if (flag) {
//            表示id已经存在
            System.out.println("学生信息已存在!");
        } else {
//            表示id不存在,并插入学生信息
            System.out.println("请输入学生姓名");
            String sname = scr.next();
            stu.setName(sname);

            System.out.println("请输入学生年龄");
            int sage = scr.nextInt();
            stu.setAge(sage);

            System.out.println("请输入学生地址");
            String saddress = scr.next();
            stu.setAddress(saddress);

            list.add(stu);
            System.out.println("学生信息添加成功!");
        }
    }

//    学生删除模块
    public static void deleteStudent(ArrayList<Student> list) {
        Scanner scr = new Scanner(System.in);
        System.out.println("请输入要删除的学生id");
        int sid = scr.nextInt();
        int index = getIndex(list, sid);
//        调用下面的getIndex方法获取集合的索引
//        如果索引>=0,则表示对象存在,反之不存在
        if (index >= 0) {
//            添加确认删除
//            Y:确认删除,N:取消删除
            System.out.println("确认删除:Y,取消删除:N");
            String delete = scr.next();
            if (delete.equals("Y") || delete.equals("y")) {
                list.remove(index);
                System.out.println("删除成功!");
            } else if (delete.equals("N") || delete.equals("n")) {
                System.out.println("已取消删除!");
            } else {
                System.out.println("输入有误!");
            }
        } else {
            System.out.println("你要删除的id不存在!");
        }
    }

//    学生信息修改模块
    public static void updateStudent(ArrayList<Student> list) {
        Scanner scr = new Scanner(System.in);
        Student stu = new Student();
        System.out.println("请输入需要修改信息的学生id");
        int sid = scr.nextInt();
        int index = getIndex(list, sid);
        if (index >= 0) {
            list.remove(index);
            stu.setId(sid);
            System.out.println("请输入需要求改的姓名");
            String sname = scr.next();
            stu.setName(sname);

            System.out.println("请输入需要修改的年龄");
            int sage = scr.nextInt();
            stu.setAge(sage);

            System.out.println("请输入需要求改的地址");
            String saddress = scr.next();
            stu.setAddress(saddress);
            System.out.println("您要修改的信息为:");
            System.out.println("姓名:" + sname);
            System.out.println("年龄:" + sage);
            System.out.println("地址:" + saddress);
            System.out.println("确认修改:Y,取消修改:N");
            String comfirm = scr.next();

            if (comfirm.equals("Y") || comfirm.equals("y")) {
                System.out.println("修改成功!");
                list.add(stu);
            } else if (comfirm.equals("N") || comfirm.equals("n")) {
                System.out.println("已取消!");
            } else {
                System.out.println("输入有误!");
            }
        } else {
            System.out.println("学生信息不存在!");

        }
    }

    //    查询学生
    public static void searchStudent(ArrayList<Student> list) {
        if (list.size() == 0) {
            System.out.println("当前无学生信息,请添加后再查");
//            结束方法
            return;
        } else {
            System.out.println("id\t姓名\t年龄\t家庭住址");
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i).getId() + "\t" + list.get(i).getName() +
                        "\t" + list.get(i).getAge() + "\t\t" + list.get(i).getAddress());
            }
        }
    }

    //    写一个方法用于判断id是否在集合中存在
    public static boolean contains(ArrayList<Student> list, int id) {
        int index = getIndex(list, id);
        if (index >= 0) {
            return true;

        }
        return false;
//        3.存在,true,不存在,false
    }

    //    写一个方法用于获取学生对象的索引
    public static int getIndex(ArrayList<Student> list, int id) {
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            int sid = stu.getId();
            if (id == sid) {
                return i;
            }
        }
        return -1;
    }


//    注册模块——————————————————————————————————————————
    //    注册registered
    public static void registered(ArrayList<User> userList) {
        User user = new User();
        Scanner scr = new Scanner(System.in);
        System.out.println("欢迎来到注册界面:");
        System.out.println("请输入您要注册的用户名:");
        String userName = scr.next();
        int dicide = containsUser(userList, userName);
        if (dicide >= 0) {
            System.out.println("用户已存在!");
        } else {
//            判断用户名
            int decide = containsUserName(userName);
            if (decide == 1) {
                user.setUserName(userName);

                System.out.println("请输入您的密码");
                String firstPassword = scr.next();
//                判断两次密码是否一致
                while (true) {
                    System.out.println("请再次输入密码确认");
                    String secondPassword = scr.next();
                    if (firstPassword.equals(secondPassword)) {
                        user.setPassword(secondPassword);
                        break;
                    }else {
                        System.out.println("两次密码不一致");
                    }
                }
//                判断身份证号是否满足要求
                while (true) {
                    System.out.println("请输入您的身份证号");
                    String idCard=scr.next();
                    int check=chechIdCard(idCard,userList);
                    if(check==-1){
                        System.out.println("身份证号输入有误!");
                    }else if(check==-2){
                        System.out.println("身份证号已存在!");
                    }else if(check==1){
                        user.setIdCard(idCard);
                        break;
                    }
                }
                while (true){
                    System.out.println("请输入您的手机号");
                    String phoneNumber=scr.next();
                    int check=checkPhoneNumber(phoneNumber,userList);
                    if(check==-1){
                        System.out.println("手机号输入有误!");
                    }else if(check==-2){
                        System.out.println("手机号已存在!");
                    }else if(check==1) {
                        user.setPhoneNumber(phoneNumber);
                        break;
                    }
                }
                userList.add(user);

                System.out.println("注册成功!");
            } else {
                System.out.println("注册失败!");
            }


        }
    }

    //    用于判断用户是否存在
    public static int containsUser(ArrayList<User> userList, String userName) {
        for (int i = 0; i < userList.size(); i++) {
            if (userName.equals(userList.get(i).getUserName())) {
                return i;
            }
        }
        return -1;
    }

    //    判断用户名长度和组成
    public static int containsUserName(String userName) {
        String name = userName;
        if (name.length() <= 15 && name.length() >= 3) {
//            这里判断用户名长度是否是在3~15位之间
            int countNum = 0;
            int countLeter = 0;
            for (int i = 0; i < name.length(); i++) {
                char uname = name.charAt(i);
//                判断用户名是否为数字和字母
                if ((uname >= 'a' && uname <= 'z') || (uname >= 'A' && uname <= 'Z') || (uname >= '0' && uname <= '9')) {
                    if (uname >= '0' && uname <= '9') {
//                        这里用于判断字符是否为数字
                        countNum++;
                    } else if ((uname >= 'a' && uname <= 'z') || (uname >= 'A' && uname <= 'Z')) {
                        countLeter++;
                    }
                } else {
                    System.out.println("用户名只能为字母加数字");
                    break;
                }
            }
            if (countNum == name.length()) {
                System.out.println("用户名不能为纯数字!");
            } else if (countLeter == name.length()) {
                System.out.println("用户名不能为纯字母");
            } else {
                return 1;
            }
        } else {
            System.out.println("用户名长度不符合要求!");
            return -1;
        }
        return -1;
    }

    //    检验身份证号是否符合要求!
    public static int chechIdCard(String idCard,ArrayList<User> userList) {
//        先判断长度是否为18位
        if (idCard.length() == 18) {
//            判断不能以0开头
            if (idCard.charAt(0)=='0') {
                return -1;
//                身份证号开头为0,返回-1
            } else {
//                判断身份证号最后一位,最后一位是数字或者大写x或者小写x
                if ((idCard.charAt(idCard.length() - 1) >= '0' && idCard.charAt(idCard.length() - 1) <= '9') ||
                        idCard.charAt(idCard.length() - 1) == 'x' || idCard.charAt(idCard.length() - 1) == 'X') {

//                判断身份证前17位为数字
                    for (int i = 0; i < idCard.length() - 1; i++) {
                        char idcard = idCard.charAt(i);
                        if (idcard >= '0' && idcard <= '9') {
                            int dicideIdcard=decideIdCard(idCard,userList);
                            if(dicideIdcard==1){
                                return 1;
                            }else {
                                return -2;
                            }
                        }else {
                            return -1;
                        }
                    }
                }else {
                    return -1;
                }
            }
        } else {
            return -1;
        }
//        身份证号满足要求返回1,不满足返回-1
        return -1;
    }
//    检验身份证号是否已存!
    public static int decideIdCard(String IdCard,ArrayList<User> userList){
        for (int i = 0; i < userList.size(); i++) {
            if(IdCard.equals(userList.get(i).getIdCard())){
                return -1;
            }
        }
        return 1;
    }


//    检验手机号是否满足
    public static int checkPhoneNumber(String phone,ArrayList<User> userList){
        if(phone.length()==11){
            if(phone.charAt(0)=='0'){
                return -1;
            }else {
                int decidePhoneNumber=decidePhoneNumber(phone,userList);
                if(decidePhoneNumber==1){
                    return 1;
                }else if(decidePhoneNumber==-1){
                    return -2;
//                    返回2表示手机号已存在
                }
            }
        }
        return -1;
    }
//    判断手机号是否已注册!
    public static int decidePhoneNumber(String phone,ArrayList<User> userList){
        for (int i = 0; i < userList.size(); i++) {
            String thisPhone=userList.get(i).getPhoneNumber();
            if(phone.equals(thisPhone)){
                return -1;
//                如果手机号码已存在,则返回-1
            }
        }
        return 1;
//        如果手机号码不存在,则返回1
    }

//    登录模块——————————————————————————————————————————————
//    登录
    public static int login(ArrayList<User> userList,ArrayList<Student> list){
        Scanner scr=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName=scr.next();
        int check=containsUser(userList,userName);
//        用于判断用户是否已注册
            if(check==-1){
                System.out.println("用户不存在,请先注册!");
            }else {
    //            如果用户存在,containsUser这个方法返回的是用户对象的索引
                loop:for (int i = 0; i <3;) {
                    System.out.println("请输入密码:");
                    String password=scr.next();
                    if(userList.get(check).getUserName().equals(userName)&&userList.get(check).getPassword().equals(password)){
                        String autoCodeFirst=autoCode();
                        System.out.println(autoCodeFirst);
                        System.out.println("请输入验证码");
                        String autoCodeSecond=scr.next();
                        if(autoCodeFirst.equals(autoCodeSecond)){
                            System.out.println("登录成功!");
                            homePage(list,userList);
                            return 1;
                        }else {
                            System.out.println("验证码输入有误!");
                            i++;
                            continue loop;
                        }
                    }else {
                        System.out.println("用户名或账号错误!");
                        i++;
                        continue loop;
                    }
                }
                System.out.println("密码输错次数过多,请找回密码!");
            }

        return -1;
    }
//    生成验证码
    public static String autoCode(){
        //        定义一个长度为大写字母+小写字母+数字的char类型数组
        char[] arrLeter=new char[62];
        for (int i = 0; i <arrLeter.length ; i++) {
            if(i<10){
//                存0~9的数字
                arrLeter[i]= (char) (48+i);
            }else if(i>=10&&i<36){
                arrLeter[i]=(char)(55+i);
            }else if(i>=36){
                arrLeter[i]=(char)(61+i);
            }
        }

//        定义一个字符串,随机从char类型数组中抽取4~6个字符存进字符串例
        Random r=new Random();
//        用于定义验证码长度,验证码长度为4~6
        int autoCodeLength=r.nextInt(3)+4;
//        定义一个字符串,用于在下面存抽取到的字符
        String result="";
        for (int i = 0; i < autoCodeLength; i++) {
//            for循环没执行依次,便从数组里面抽取一个字符存进字符串里面
            int letterNum=r.nextInt(arrLeter.length);
            result=result+arrLeter[letterNum];
        }
        return result;
    }

//    忘记密码————————————————————————————————————
//    先判断用户名是否存在,存在则执行下一步,反之提醒未注册
//    若用户存在,则让用户输入手机号和身份证号,若都正确,返回该用户的索引
//    调用下面的方法用于修改用户密码
    public static int getUserIndex(ArrayList<User> userList,String userName,String phoneNumber,String idCard){
        int checkUser=containsUser(userList,userName);
        if(checkUser>=0){
//            判断用户是否存在
            int checkPhone=decidePhoneNumber(phoneNumber,userList);
            int checkIdCard=decideIdCard(idCard,userList);
            if(checkIdCard==-1&&checkPhone==-1){
                return checkUser;
            }else {
                System.out.println("手机号或身份证号有误!");
            }

        }else if(checkUser==-1){
            System.out.println("用户不存在,请注册!");
        }
        return -1;
    }

//    修改密码
    public static void updatePassword(ArrayList<User> userList){
        Scanner scr=new Scanner(System.in);

        User user=new User();
        System.out.println("请输入您要找回的用户名:");
        String userName=scr.next();

        int userIndex=containsUser(userList,userName);
        if(userIndex>=0){
            System.out.println("请输入您的手机号:");
            String phone=scr.next();

            System.out.println("请输入您的身份证号:");
            String idCard=scr.next();

            System.out.println("请输入新密码");
            String newPassword=scr.next();

            int indexIn=getUserIndex(userList,userName,phone,idCard);
            userList.remove(indexIn);
            user.setUserName(userName);
            user.setPassword(newPassword);
            user.setPhoneNumber(phone);
            user.setIdCard(idCard);
            userList.add(user);

            System.out.println("修改成功!");
        }else {
            System.out.println("用户名不存在,请先注册!");
            registered(userList);
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值