javase复习day12(学生管理系统升级)

学生管理系统升级版

需求:

为学生管理系统书写一个登陆、注册、忘记密码的功能。

只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

分析:

登录界面:
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());
            }
        }
    }
    
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值