前言

该程序已上线GitHub,也算是自己独立写的第一个Java程序,当个课设还是不错的,程序基本功能都可以实现,不过大家也别要求太高,毕竟是初学者; https://github.com/pulumusita/StudemtsSystem

这个系统相比大家都很熟悉,在大学课程肯定会有老师带着大家去开发这个程序,因为我之前没写过,所以这里就简单的再复习一下这个系统的写法

如果想去看原视频的,老师分析的更好更全面,大家可以去看看学习一下。

bilibili.com/video/BV17F411T7Ao?p=116&vd_source=94fb2114c3889338d33bcb41c3e25538

代码结构

App.java:主入口及登录界面

getVerificationCode.java:生成验证码程序

StudentsSystem.java:学生信息管理系统主程序,从App.java登录成功后跳转到这个程序

User.java:JavaBean程序

Students.java:JavaBean程序

学生管理系统登录界面需求文档

需求:

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

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

分析:

登录界面:

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

学生管理系统主程序需求文档

需求:

​ 采取控制台的方式去书写学生管理系统。

分析:

初始菜单:

"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"

学生类:

​ 属性:id、姓名、年龄、家庭住址

添加功能:

​ 键盘录入每一个学生信息并添加,需要满足以下要求:

  • id唯一

删除功能:

​ 键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除
  • id不存在,需要提示不存在,并回到初始菜单

修改功能:

​ 键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在,并回到初始菜单

查询功能:

​ 打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询
  • 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id			姓名		年龄		家庭住址
heima001	张三		23		 南京
heima002	李四		24		 北京
heima003	王五		25		 广州
heima004	赵六	 	26		 深圳

两个主程序

代码太多了我就不在这贴了,大家如果想看完整程序可以移步GitHub:https://github.com/pulumusita

登录主程序App.java

package Students;

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

public class App {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("----------------黑马学生信息管理系统登录系统----------------");
            System.out.println("1:登录");
            System.out.println("2:注册");
            System.out.println("3:忘记密码");
            System.out.println("4:退出程序");

            System.out.println("请输入你的选择:");
            String choose = sc.next();

            loop:
            switch (choose) {
                case "1":
                    login(list);
                    break;
                case "2":
                    register(list);
                    break;
                case "3":
                    forgetPassword(list);
                    break;
                case "4":
                    break loop;
                default:
                    System.out.println("该选项不存在,请重新选择");
            }
        }

    }

    //注册账号
    public static void register(ArrayList<User> list) {
        User user = new User();
        Scanner sc = new Scanner(System.in);
        //录入用户名
        while (true) {
            System.out.println("请输入你想注册的用户名:");
            String username = sc.next();

            boolean flag = checkUsername(list, username);
            if (flag == false) {
                continue;
            }
            System.out.println("添加成功");
            user.setUsername(username);
            break;

        }
        //录入密码
        while (true) {
            System.out.println("请输入密码:");
            String password = sc.next();

            System.out.println("请再次输入密码:");
            String password1 = sc.next();

            boolean flag = checkPassword(password, password1);

            if (!flag) {
                continue;
            }

            System.out.println("设置密码成功");
            user.setPassword(password);

            break;
        }

        //录入身份证号
        while (true) {
            System.out.println("请输入身份证号:");
            String identityNumber = sc.next();

            boolean flag = checkIdentityNumber(identityNumber);

            if (!flag) {
                continue;
            }
            System.out.println("身份证符合要求,添加成功");

            user.setIdentityNumber(identityNumber);

            break;

        }

        //录入手机号
        while (true) {
            System.out.println("请输入手机号码");
            String phoneNumber = sc.next();

            boolean flag = checkPhoneNumber(phoneNumber);
            if (!flag) {
                continue;
            }
            System.out.println("手机号添加成功");
            user.setPhoneNumber(phoneNumber);
            break;
        }
        //添加用户对象到数组中
        list.add(user);
    }

    //登录系统
    public static void login(ArrayList<User> list) {

        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < 3; i++) {

            System.out.println("请输入用户名:");
            String username = sc.next();
            int flag = containsIndex(list, username);

            if (flag < 0) {
                System.out.println("用户未注册,请先注册");
                return;
            }
            System.out.println("请输入您的密码:");
            String password = sc.next();

            while (true) {
                //调取生成验证码方法获取验证码
                getVerificationCode code = new getVerificationCode();

                String rightCode = code.getIdentifying();
                System.out.println("正确的验证码为:" + rightCode + "\n请输入验证码");
                String userCode = sc.next();

                //判断验证码是否正确
                if (userCode.equalsIgnoreCase(rightCode)) {
                    System.out.println("验证码正确");
                    break;
                } else {
                    System.out.println("验证码输入错误,请重新输入");
                    continue;
                }
            }

            //检查用户名和密码是否正确,封装一下username和password
            User userInfo = new User(username, password, null, null);
            boolean flagLogin = checkLogin(list, userInfo);
            if (flagLogin) {
                System.out.println("登录成功,欢迎使用学生管理系统");
                //进入学生信息管理系统
                StudentsSystem sy = new StudentsSystem();
                sy.app();
                return;
            } else {
                if (i == 2) {
                    System.out.println("登录失败,当前用户名或密码错误,用户被锁定,请联系工作人员");
                    return;
                } else {
                    System.out.println("登录失败,当前用户名或密码错误,请重新输入,还剩下" + (2 - i) + "次机会");
                }
            }
        }
    }

    //检查键盘录入用户名是否符合规定
    public static boolean checkUsername(ArrayList<User> list, String username) {
        if (containsIndex(list, username) > 0) {
            System.out.println("您输入的用户名已经存在,请重新输入");
            return false;
        }

        int len = username.length();
        if (len < 3 || len > 15) {
            System.out.println("username长度需要在3-15之间,您输入的用户名长度不符合,请重新输入");
            return false;
        }

        int count = 0;
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')) {
                count++;
            }
        }
        if (count > 0) {
            System.out.println("您输入的用户名存在符号或您输入的用户名为纯数字,不符合要求,请重新输入");
            return false;
        }

        int count1 = 0;
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
                count1++;
            }
        }
        if (count1 <= 0) {
            System.out.println("您输入的用户名存在符号或您输入的用户名为纯数字,不符合要求,请重新输入");
            return false;
        }
        return true;
    }

    //判断集合中是否有
    public static int containsIndex(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String username1 = user.getUsername();
            if (username1.equals(username)) {
                return i;
            }
        }
        return -1;
    }

    //检查密码格式
    public static boolean checkPassword(String p, String p1) {
        if (!(p.equals(p1))) {
            System.out.println("两次输入密码不一致,请重新输入");
            return false;
        }
        return true;
    }

    //检查身份证信息
    public static boolean checkIdentityNumber(String identityNumber) {
        if (!(identityNumber.length() == 18)) {
            System.out.println("你输入的身份证长度不符合18位,请重新输入");
            return false;
        }

        char c = identityNumber.charAt(0);
        if (c == '0') {
            System.out.println("身份证号不能以0开头,请重新输入");
            return false;
        }

        for (int i = 0; i < identityNumber.length() - 1; i++) {
            char c1 = identityNumber.charAt(i);
            if (c1 < '0' || c1 > '9') {
                System.out.println("身份证号只能为纯数字,您输入的身份证不合法,请重新输入");
                return false;
            }
        }

        char lastC = identityNumber.charAt(identityNumber.length() - 1);
        if (!(lastC >= '0' && lastC <= '9' || lastC == 'X' || lastC == 'x')) {
            System.out.println("您输入的身份证最后一位不符合要求,请重新输入(最后一位可以为数字以及Z和z)");
            return false;
        }
        return true;
    }

    //检查手机号格式
    public static boolean checkPhoneNumber(String phoneNumber) {
        char c = phoneNumber.charAt(0);
        if (c == '0') {
            System.out.println("手机号格式错误,第一位不能为0,请重新输入");
            return false;
        }

        for (int i = 0; i < phoneNumber.length(); i++) {
            char c1 = phoneNumber.charAt(i);
            if (!(c1 >= '0' && c1 <= '9')) {
                System.out.println("手机号格式错误,请重新输入");
                return false;
            }
        }
        return true;
    }

    //检查集合中是否存在与用户输入的username以及password一样数据
    public static boolean checkLogin(ArrayList<User> list, User userInfo) {
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            //集合中的username和password与用户输入的username和password进行比较
            if (user.getUsername().equals(userInfo.getUsername()) && user.getPassword().equals(userInfo.getPassword())) {
                return true;
            }
        }
        return false;
    }

    //忘记密码功能
    public static void forgetPassword(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println(
                "请输入你想找回密码的账号: "
        );
        String username = sc.next();
        int index = containsIndex(list, username);
        if (index < 0) {
            System.out.println("该用户不存在,请先注册");
            return;
        }
        while (true) {
            System.out.println("请输入身份证号");
            String personID = sc.next();
            System.out.println("请输入手机号码:");
            String phoneNumber = sc.next();

            User user = list.get(index);

            if (!(user.getIdentityNumber().equals(personID) && user.getPhoneNumber().equals(phoneNumber))) {
                System.out.println("身份证号或密码错误,请重新输入");
                continue;
            } else {
                break;
            }
        }
        User user = list.get(index);
        while (true) {
            System.out.println("请输入修改后的密码");
            String p1 = sc.next();
            System.out.println("请再次输入修改后的密码: ");
            String p = sc.next();

            boolean flag = checkPassword(p, p1);
            if (!flag) {
                System.out.println("两次输入密码不一致,请重新输入");
            }
            System.out.println("密码修改成功");
            user.setPassword(p1);
            break;
        }
    }
}

学生信息管理系统主程序StudentsSystem.java

package Students;

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

public class StudentsSystem {
    public static void app() {
        ArrayList<Students> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        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:退出学生信息管理系统");
            System.out.println("请输入您的选择:");
            String choose = sc.next();

            switch (choose) {
                case "1":
                    addStudents(list);
                    break;
                case "2":
                    deleteStudents(list);
                    break;
                case "3":
                    changeStudents(list);
                    break;
                case "4":
                    queryStudents(list);
                    break;
                case "5":
                    System.out.println("退出\n");
                    break loop;
                default:
                    System.out.println("没有这个选项,请重新输入\n");
            }
        }
    }

    //添加学生信息
    public static ArrayList<Students> addStudents(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        Students s = new Students();
        while (true) {
            System.out.println("请输入学生的id");
            String id = sc.next();
            //如果id存在,则接着循环,用户重新输入
            if (contains(list, id)) {
                System.out.println("当前录入id已经存在,请重新输入id");
            }
            //id不存在,跳出循环
            else {
                s.setId(id);
                break;
            }
        }
        System.out.println("请输入学生的姓名");
        String name = sc.next();
        s.setName(name);

        System.out.println("请输入学生的年龄");
        int age = sc.nextInt();
        s.setAge(age);

        System.out.println("请输入学生的家庭住址");
        String address = sc.next();
        s.setAddress(address);
        list.add(s);
        System.out.println("添加成功\n");
        return list;
    }


    public static void deleteStudents(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想删除的学生的id");
        String id = sc.next();
        //这里if判断以及remove中不能使用id,因为id为String类型,我第一次踩坑了,大家注意
        if (containsIndex(list, id) >= 0) {
            list.remove(containsIndex(list, id));
            System.out.println("删除" + containsIndex(list, id) + "的信息成功");
        } else {
            System.out.println(
                    "该学生信息不存在,删除失败"
            );
        }


    }

    //查询学生信息
    public static void queryStudents(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        //判断集合中是否有信息
        if (list.size() == 0) {
            System.out.println("系统中无数据,请先添加后再查询\n");
            return;
        }
        System.out.println("**************学生信息列表**************");
        System.out.println("id\t\t姓名\t\t年龄\t\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            Students s = list.get(i);
            System.out.println(s.getId() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getAddress());
        }
    }

    //修改学生信息
    public static void changeStudents(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想修改的学生id:");
        String id = sc.next();
        //这里用containsIndex方法进行判断吗,如果不存在需要重新输入
        if (containsIndex(list, id) == -1) {
            System.out.println("id为 " + id + " 的学生不存在,请重新输入");
            return;
        }

        Students s = list.get(containsIndex(list, id));

        loop:
        while (true) {
            System.out.println("**************学生信息修改系统**************");
            System.out.println("1:修改学生id");
            System.out.println("2:修改学生姓名");
            System.out.println("3:修改学生年龄");
            System.out.println("4:查询学生家庭住址");
            System.out.println("5:退出修改系统");
            System.out.println("请选择你想修改的选项");

            String choose = sc.next();

            switch (choose) {
                case "1":
                    System.out.println("请输入修改后的id");
                    String sid = sc.next();
                    s.setId(sid);
                    break;
                case "2":
                    System.out.println("请输入修改后的姓名");
                    String name = sc.next();
                    s.setName(name);
                    break;
                case "3":
                    System.out.println("请输入修改后的年龄");
                    int age = sc.nextInt();
                    s.setAge(age);
                    break;
                case "4":
                    System.out.println("请输入修改后的家庭住址");
                    String address = sc.next();
                    s.setAddress(address);
                    break;
                case "5":
                    break loop;
                default:
                    System.out.println("没有这个选项,请重新输入\n");
            }
            System.out.println("修改信息成功\n");
        }
    }

    //判断id在集合中是否存在
    public static boolean contains(ArrayList<Students> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            Students stu = list.get(i);
            String sid = stu.getId();
            if (id.equals(sid)) {
                return true;
            }
        }
        return false;
    }

    //查询集合中是否存在该id的学生,存在返回该学生id,不存在返回-1
    public static int containsIndex(ArrayList<Students> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            Students s = list.get(i);
            String sid = s.getId();
            if (sid.equals(id)) {
                return i;
            }
        }
        return -1;
    }
}

如有任何问题请留言或者通过微信 qq Instagram联系我