控制台实现学生管理系统

目录


前言

完成了学生管理系统已经学生管理系统的升级需求

一、需求

​
分析:
初始菜单:

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

学生类:

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

添加功能:

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

删除功能:

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

修改功能:

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

查询功能:

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

二、升级需求

 需求:
​	为学生管理系统书写一个登陆、注册、忘记密码的功能。
​	只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

 登录界面:

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.工具类

主要内容是

1.对输入的值是否为int类型进行判断

2.非零验证,主要配合代码起到缓冲的作用

import java.util.Scanner;

public class Util {
    //整数判断
    public static int isInt(String s){
        Scanner input = new Scanner(System.in);
        int i;
        while (true) {
            System.out.print(s);
            if (input.hasNextInt()){
                i = input.nextInt();
                break;
            }else {
                System.out.println("请输入一个整数,");
                input.next();
            }
        }
        return i;
    }

    //非零验证,主要配合代码起到缓冲的作用
    public static void isZero(String s){
        Scanner input = new Scanner(System.in);
        int i;
        while (true) {
            System.out.print(s);
            if (input.hasNextInt()){
                i = input.nextInt();
                if (i==0){
                    return;
                }else {
                    System.out.println("输入错误,请重新输入");
                }
            }else {
                System.out.println("请输入一个整数,");
                input.next();
            }
        }
    }
}

2.学生类和用户类

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

    /**
     * 获取
     * @return id
     */
    public int getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return address
     */
    public String getAddress() {
        return address;
    }

    /**
     * 设置
     * @param address
     */
    public void setAddress(String address) {
        this.address = address;
    }

    public String toString() {
        return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
    }
}

public class User {
    private String username;
    private int password;
    private String ID_card;
    private String phone_num;


    public User() {
    }

    public User(String username, int password, String ID_card, String phone_num) {
        this.username = username;
        this.password = password;
        this.ID_card = ID_card;
        this.phone_num = phone_num;
    }

    /**
     * 获取
     * @return username
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取
     * @return password
     */
    public int getPassword() {
        return password;
    }

    /**
     * 设置
     * @param password
     */
    public void setPassword(int password) {
        this.password = password;
    }

    /**
     * 获取
     * @return ID_card
     */
    public String getID_card() {
        return ID_card;
    }

    /**
     * 设置
     * @param ID_card
     */
    public void setID_card(String ID_card) {
        this.ID_card = ID_card;
    }

    /**
     * 获取
     * @return phone_num
     */
    public String getPhone_num() {
        return phone_num;
    }

    /**
     * 设置
     * @param phone_num
     */
    public void setPhone_num(String phone_num) {
        this.phone_num = phone_num;
    }

    public String toString() {
        return "User{username = " + username + ", password = " + password + ", ID_card = " + ID_card + ", phone_num = " + phone_num + "}";
    }
}

3.实现类,一个实现基础功能,一个实现升级版功能

import java.util.ArrayList;
import java.util.Scanner;
//基础功能
public class Function {

    //添加功能
    public Student add(ArrayList<Student> list){
        Student st= new Student();
        Scanner input = new Scanner(System.in);

        Student student = list.get(list.size() - 1);
        int id = student.getId();
        st.setId(id+1);
        System.out.print("请输入姓名:");
        st.setName(input.next());
        st.setAge(Util.isInt("请输入年龄:"));
        System.out.print("请输入地址:");
        st.setAddress(input.next());

        return st;
    }
    //删除功能
    public int delete(ArrayList<Student> list,int id){
        for (int i = 0; i < list.size(); i++) {
            Student student = list.get(i);
            int id1 = student.getId();
            if (id==id1){
                System.out.println("删除成功");
                return i;
            }
        }
        System.out.println("删除失败");
        return 0;
    }
    //修改功能
    public Student update(ArrayList<Student> list,int id){
        boolean flag = false;
        Student student = new Student();
        Student student1 = new Student();
        Scanner input =  new Scanner(System.in);
        while (true) {
            for (int i = 0; i < list.size(); i++) {
                student = list.get(i);
                int id1 = student.getId();
                if (id1==id){
                    student1=student;
                    System.out.println("您要修改的信息列为:");
                    flag=true;
                    System.out.println(student);
                }
            }
            if (flag){
                break;
            }else {
                return null;
            }
        }
        System.out.println("请选择您要修改的信息");
        int anInt = Util.isInt("请输入(1.姓名,2.年龄,3.地址):");
        if (anInt==1){
            System.out.print("请输入姓名:");
            student1.setName(input.next());
        }else if (anInt==2){
            student1.setAge(Util.isInt("请输入年龄:"));
        }else if (anInt==3){
            System.out.print("请输入地址:");
            student1.setAddress(input.next());
        }
        return student1;
    }
    //根据id查询
    public  ArrayList<Student> select(ArrayList<Student> list, int id){
        ArrayList<Student> list1 = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            Student student = list.get(i);
            int id1 = student.getId();
            if (id1==id){
                list1.add(list.get(i));
            }
        }
        return list1;
    }

}
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
//升级版功能
public class Account {
    //登录功能
    public boolean dengLu(ArrayList<User> list, String username, int password) {
        Scanner input = new Scanner(System.in);
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String name = user.getUsername();
            int ps = user.getPassword();
            if (name.equals(username)) {
                int num = 3;
                while (num>1){
                    if (ps==password){
                        int password1 = Util.isInt("请再次输入密码:");
                        if (password1 == ps) {

                            System.out.println("密码正确");
                            //验证码
                            String val = "";
                            Random random = new Random();
                            //用循环输出六个字符进行拼接
                            for (int j = 0; j < 5; j++) {
                                // 本次循环是数字还是字母
                                String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "number";
                                // 字母
                                if ("char".equalsIgnoreCase(charOrNum)) {
                                    // 本次字母为大写还是小写(ASCII)
                                    int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;
                                    //生成这个字符
                                    val += (char) (choice + random.nextInt(26));
                                }
                                // 数字
                                else if ("number".equalsIgnoreCase(charOrNum)) {
                                    //数字可以直接生成
                                    val += String.valueOf(random.nextInt(10));
                                }
                            }
                            System.out.println("5位验证码为:" + val);
                            System.out.print("请输入验证码:");
                            String s = input.next();
                            while (true) {
                                if (s.equals(val)){
                                    System.out.println("登录成功");
                                    return true;
                                }else {
                                    System.out.println("验证码错误,请重新输入");
                                    s=input.next();
                                }
                            }
                        } else {
                            System.out.println("两次密码输入不一致,请重新输入");
                            return false;
                        }
                    }else {
                        num--;
                        System.out.println("您还有"+num+"次机会");
                        password=Util.isInt("密码错误,请重新输入:");
                    }
                }
                System.out.println("次数已用完,请重新登录");
                return false;
            }

        }
        System.out.println("用户名未注册,请先注册");

        return false;
    }

    //注册功能
    public User zhuCe(ArrayList<User> list) {
        User user = list.get(list.size() - 1);

        Scanner input = new Scanner(System.in);
        String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{3,15}$";
        System.out.print("请输入用户名:");
        String s = input.next();
            for (int i = 0; i < list.size(); i++) {
                User user1 = list.get(i);
                String username = user1.getUsername();
                while (true) {
                    if (s.equals(username)){
                        System.out.print("用户名已注册,请重新输入用户名:");
                        s=input.next();
                    }else {
                        break;
                    }
                }
            }
        while (true) {
            if (s.matches(regex)){
                user.setUsername(s);
                break;
            }else {
                System.out.print("输入的用户名不符合规范,请重新输入:");
                s=input.next();
            }
        }
        while (true) {
            int ps1 = Util.isInt("请输入密码:");
            int ps2 = Util.isInt("请再次输入密码:");
            if (ps1==ps2){
                user.setPassword(ps1);
                break;
            }else {
                System.out.println("两次密码输入不一致,请重新输入");
            }
        }

        String regExp = "^[1-9]\\d{5}(18|19|20|(3\\d))\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
        System.out.print("请输入身份证号:");
        String s1 = input.next();
        while (true) {
            if (s1.length()==18) {
                if (s1.matches(regExp)){
                    user.setID_card(s1);
                    break;
                }else {
                    System.out.print("输入的身份证号不符合规范,请重新输入:");
                    s1=input.next();
                }
            }else {
                System.out.print("输入的身份证号不符合规范,请重新输入:");
                s1=input.next();
            }
        }
        String phNum="^1[3|4|5|7|8][0-9]\\d{4,8}$";
        System.out.print("请输入手机号:");
        String s2 = input.next();
        while (true){
            if (s2.length()==11){
                if (s2.matches(phNum)){
                    user.setPhone_num(s2);
                    break;
                }else {
                    System.out.print("输入的手机号不符合规范,请重新输入:");
                    s2=input.next();
                }
            }else {
                System.out.print("输入的手机号不符合规范,请重新输入:");
                s2=input.next();
            }
        }

        System.out.println("注册成功");
        return user;
    }

    //忘记密码
    public int[] zhaoHui(ArrayList<User> list){
        Scanner input = new Scanner(System.in);
        System.out.print("请输入用户名:");
        int []a= {-1,0};
        String s = input.next();
        for (int i = 0; i < list.size(); i++) {
            User user1 = list.get(i);
            String username = user1.getUsername();
            if (s.equals(username)){
                String id_card = user1.getID_card();
                String phone_num = user1.getPhone_num();
                System.out.print("请输入身份证号码:");
                String s1 = input.next();
                System.out.print("请输入手机号码:");
                String s2 = input.next();
                if (s1.equals(id_card)&&s2.equals(phone_num)){
                    int miMa = Util.isInt("请输入要修改的密码:");
                    a[0]=i;
                    a[1]=miMa;
                    return a;
                }else {
                    System.out.println("账号信息不匹配,修改失败");
                }
            }
        }
        System.out.println("输入的用户名未注册");
        return a;
    }
}

4.测试类

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

public class Test {
    public static void main(String[] args) {
        Student st1 = new Student(101, "小张", 19, "岳阳");
        Student st2 = new Student(102, "小李", 21, "长沙");
        Student st3 = new Student(103, "小张", 22, "江西");
        ArrayList<Student> list = new ArrayList<>();
        list.add(st1);
        list.add(st2);
        list.add(st3);

        User us1 = new User("admin1",123456,"360502212111352210","15344521621");
        User us2 = new User("admin2",123456,"360502212111352210","15344521621");
        ArrayList<User> users = new ArrayList<>();
        users.add(us1);
        users.add(us2);


        Function fu = new Function();
        Account ac = new Account();

        boolean flag = true;
        Scanner input = new Scanner(System.in);
        while (true) {
            if(flag){
                System.out.println("欢迎来到学生管理系统");
                int ad = Util.isInt("请选择操作:1登录 2注册 3忘记密码 4退出系统:");
                if (ad==1){
                    System.out.print("请输入用户名:");
                    String name = input.next();
                    int password = Util.isInt("请输入密码:");
                    if (ac.dengLu(users, name, password)){
                        flag=false;
                    }
                } else if (ad==2){
                    User user = ac.zhuCe(users);
                    users.add(user);
                } else if (ad==3){
                    int a[]=ac.zhaoHui(users);
                    if (a[0]!=-1){
                        User user = users.get(a[0]);
                        user.setPassword(a[1]);
                        System.out.println("修改密码成功");
                    }else {
                        System.out.println("修改密码失败");
                    }
                } else if (ad==4){
                    System.out.println("退出系统");
                    return;
                }else {

                }
            }else {
                System.out.println("--------------------欢迎来到学生信息管理系统--------------------");
                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 = Util.isInt("请输入1-5中的任意一个数:");
                switch (num) {
                    //添加功能
                    case 1:
                        System.out.println("您选择了添加功能");
                        list.add(fu.add(list));
                        System.out.println("添加成功");
                        break;
                    //删除功能
                    case 2:
                        System.out.println("您先择了删除功能");
                        int id1 = Util.isInt("请输入id:");
                        int id = fu.delete(list, id1);
                        if (id != 0) {
                            list.remove(id);
                        }
                        break;
                    //修改功能
                    case 3:
                        System.out.println("您先择了修改功能");
                        while (true) {
                            int id2 = Util.isInt("请输入要修改学生的id:");
                            Student student = fu.update(list, id2);
                            if (student == null) {
                                System.out.println("修改失败!");
                                System.out.println("未找到输入的id,请重新输入");
                            } else {
                                System.out.println("修改成功!");
                                break;
                            }
                        }
                        break;
                    //查询功能
                    case 4:
                        System.out.println("您先择了查询功能");
                        System.out.println("请选择要查询的类型(1.根据id查询,2.查询全部信息):");
                        while (true) {
                            int le = Util.isInt("请输入1或者2:");
                            if (le == 1) {
                                System.out.println("已选择根据id查询学生信息");
                                int id3 = Util.isInt("请输入id:");
                                ArrayList<Student> list1 = fu.select(list, id3);
                                if (list1.size() == 0) {
                                    System.out.println("未查询到结果");
                                    break;
                                } else {
                                    System.out.println("已选择查询所有学生信息");
                                    System.out.println(list1);
                                    break;
                                }
                            } else if (le == 2) {
                                for (int i = 0; i < list.size(); i++) {
                                    Student student = list.get(i);
                                    System.out.println(student);
                                }
                                break;
                            } else {
                                System.out.println("输入错误,请重新输入");
                            }
                        }
                        break;
                    //注销账号
                    case 5:
                        System.out.println("注销成功");
                        flag=true;
                        break;

                    default:
                        System.out.println("请输入1-5以内的数:");
                        break;
                }
            }


            Util.isZero("请输入0返回:");
        }

    }
}

知识点:

1.熟悉并运用ArrayList

2.学习正则表达式

3.学会对输入的值进行数据验证


总结

这个小项目作为练习并掌握面向对象的知识还是非常不错的,也算是本人学习Java的一个小里程碑


版权声明:本文为m0_60844009原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。