学生管理系统

需求

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

### 分析:

#### 初始菜单:

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

#### 学生类:

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

#### 添加功能:

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

* id唯一

#### 删除功能:

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

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

#### 修改功能:

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

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

#### 查询功能:

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

* 如果没有学生信息,提示:当前无学生信息,请添加后再查询
* 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)

```java
id               姓名        年龄          家庭住址
001            张三        23                 南京
002            李四        24                 北京
003            王五        25                 广州
004            赵六        26                 深圳
```


学生类

package StudentManagementSystem;

public class Student {

    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {

    }

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

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

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getAddress() {
        return address;
    }


}

学生管理系统
 

package StudentManagementSystem;

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

public class StudentSystem {
    public static void main() {
        {
            ArrayList<Student> list = new ArrayList<>();

            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("请输入您的选择:");
                //键盘录入
                Scanner sc = new Scanner(System.in);
                String choose = sc.next();

                switch (choose) {
                    case "1" -> addStudent(list);
                    case "2" -> deleteStudent(list);
                    case "3" -> updateStudent(list);
                    case "4" -> queryStudent(list);
                    case "5" -> {
                        System.out.println("退出");
                        // break loop;
                        System.exit(0);
                    }
                    default -> {
                        System.out.println("输入错误!请重新输入");
                        break;
                    }

                }

            }


        }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list) {
        System.out.println("添加学生");
        Scanner sc = new Scanner(System.in);

            //创建学生对象
            Student stu = new Student();

            while (true) {
                System.out.println("请输入学生的Id");
                String id = sc.next();
                boolean flag = contains(list, id);
                if (flag) {
                    System.out.println("id已存在,请重新录入id");
                } else {
                    stu.setId(id);
                    break;
                }
            }

            System.out.println("请输入学生的姓名");
            String name = sc.next();
            stu.setName(name);

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

            System.out.println("请输入学生的家庭地址");
            String address = sc.next();
            stu.setAddress(address);

            //将学生对象存入集合中
            list.add(stu);

        }




    //删除学生
    public static void deleteStudent(ArrayList<Student> list) {
        System.out.println("删除学生");
        Scanner sc = new Scanner(System.in);

            System.out.println("请输入要删除的学生的Id");
            String id = sc.next();
            boolean flag = contains(list, id);
            if (flag) {
                int index = getIndex(list, id);
                list.remove(index);
                System.out.println("id为:" + id + "的学生,已为您删除!");
            } else {
                System.out.println("id不存在,删除失败!");
        }

    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list) {
        System.out.println("修改学生");
        Scanner sc = new Scanner(System.in);
        int index = 0;//初始化索引
        while (true){
            System.out.println("请输入要修改的学生的id");
            String id = sc.next();
            index = getIndex(list, id);//通过getIndex方法获取到id所对应的学生对象的索引
            if (index == -1){
                System.out.println("id为"+id+"的学生不存在,请重新输入id");
            }else {
                break;
            }
        }
        //创建学生对象
        Student stu =list.get(index);

        System.out.println("请输入学生的姓名");
        String name = sc.next();
        stu.setName(name);

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

        System.out.println("请输入学生的家庭地址");
        String address = sc.next();
        stu.setAddress(address);

        System.out.println("学生信息修改成功!");

    }

    //查询学生
    public static void queryStudent(ArrayList<Student> list) {
        System.out.println("查询学生");
        //判断集合是否为空
        if (list.size() == 0) {
            System.out.println("当前学生信息为空,请添加后再查询");
            return;
        }
        //表头信息
        System.out.println("id\t\t姓名\t年龄\t家庭住址");
        //循环遍历打印
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
        }

    }

    //判断id在集合中是否存在
    public static boolean contains(ArrayList<Student> list, String id) {
        //循环遍历得到集合中的每一个学生对象
        //通过学生对象获取id,并进行判断,存在返回true,不存在返回false
       /* for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String sid = stu.getId();
            if (sid.equals(id)) {
                return true;
            }
        }
        return false;*/

        return getIndex(list, id) >= 0;
    }

    //通过id获取索引
    public static int getIndex(ArrayList<Student> list, String id) {
        //循环遍历得到集合中的每一个学生对象
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            //通过学生对象获取id
            String sid = stu.getId();
            //进行判断
            if (sid.equals(id)) {
                //存在就返回索引
                return i;
            }
        }
        //不存在就返回-1(java中不存在-1索引)
        return -1;
    }
}

升级

需求:

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

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

### 分析:

#### 登录界面:

```java
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 StudentManagementSystem;

public class User {

    private String username;
    private String password;
    private String id;
    private String phonenumber;


    public User() {
    }

    public User(String username, String password, String id, String phonenumber) {
        this.username = username;
        this.password = password;
        this.id = id;
        this.phonenumber = phonenumber;
    }

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

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

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

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

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

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

    /**
     * 获取
     * @return phone
     */
    public String getPhonenumber() {
        return phonenumber;
    }

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

}

APP(登陆、注册、忘记密码)

package StudentManagementSystem;

import com.sun.source.tree.ReturnTree;

import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        ArrayList<User> 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("请输入您的选择:");
            Scanner sc = new Scanner(System.in);
            String choose = sc.next();

            switch (choose) {
                case "1" -> login(list);//登录
                case "2" -> enroll(list);//注册
                case "3" -> forgotPassword(list);//忘记密码
                case "4" -> {
                    System.out.println("退出");
                    // break loop;
                    System.exit(0);
                }
                default -> {
                    System.out.println("输入错误!请重新输入");
                    break;
                }
            }

        }


    }

    //登录
    private static void login(ArrayList<User> list) {
        System.out.println("登录");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.next();
        boolean flag = contains(list, username);
        if (!flag) {
            System.out.println("用户名未注册,请先注册");
            return;
        }
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入密码");
            String password = sc.next();
            String rightverify = getVerify();
            System.out.println("请输入验证码");
            String verify = sc.next();
            boolean pwd = checkPassword(list, username, password);
            if (pwd && verify.equalsIgnoreCase(rightverify)) {
                break;
            }
            System.out.println("您输入的密码或验证码有误");
            if (i == 2) {
                System.out.println("错误次数太多");
                return;
            }
        }
        System.out.println("登录成功!!!");
        StudentSystem.main();
    }

    //注册
    private static void enroll(ArrayList<User> list) {
        System.out.println("注册");
        Scanner sc = new Scanner(System.in);
        User user = new User();

        while (true) {
            System.out.println("请输入您的用户名:");
            String username = sc.next();
            boolean flag = contains(list, username);
            System.out.println(flag);
            boolean flag1 = checkUsername(username);
            System.out.println(flag1);
            if (!flag && flag1) {
                user.setUsername(username);
                break;
            } else {
                System.out.println("用户名已存在,或不合法,请重新输入");
            }
        }

        while (true) {
            System.out.println("请输入您的密码:");
            String password = sc.next();
            System.out.println(password);
            System.out.println("请确认您的密码:");
            String againpassword = sc.next();
            System.out.println(againpassword);
            if (password.equals(againpassword)) {
                user.setPassword(password);
                break;
            } else {
                System.out.println("俩次密码不一致,请重新输入密码");
            }
        }

        while (true) {
            System.out.println("请输入您的身份证号:");
            String id = sc.next();
            boolean flag = checkId(id);
            if (flag) {
                user.setId(id);
                break;
            } else {
                System.out.println("您输入的身份证号不合法,请重新输入");
            }
        }

        while (true) {
            System.out.println("请输入您的手机号:");
            String phonenumber = sc.next();
            boolean flag = checkPhonenumber(phonenumber);
            if (flag) {
                user.setPhonenumber(phonenumber);
                break;
            } else {
                System.out.println("您输入的手机号不合法,请重新输入");
            }
        }
        list.add(user);

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

    //忘记密码
    private static void forgotPassword(ArrayList<User> list) {
        System.out.println("忘记密码");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.next();
        boolean flag = contains(list, username);
        if (!flag) {
            System.out.println("用户名未注册,请先注册");
            return;
        }

        for (int i = 1; i <= 3; i++) {
            System.out.println("请输入手机号");
            String phonenumber = sc.next();
            System.out.println("请输入身份证号");
            String id = sc.next();
            boolean b = checkIdPhonenumber(list, username, id, phonenumber);
            if (b) {
                break;
            } else if (i == 3) {
                System.out.println("错误次数太多");
                return;
            } else {
                System.out.println("手机号或身份证号错误,请重新输入,您还有" + i + "次机会");
            }

        }


        System.out.println("输入密码");
        String newpwd = sc.next();

        User user = list.get(getIndex(list, username));
        user.setPassword(newpwd);
    }

    //检查用户名在集合中是否存在
    private static boolean contains(ArrayList<User> list, String username) {

        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String name = user.getUsername();

            if (name.equals(username)) {
                return true;
            }
        }

        return false;
    }

    //检查用户名是否合法
    private static boolean checkUsername(String username) {

        int length = username.length();
        if (length < 3 || length > 15) {
            return false;
        }


        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'))) {
                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')) {
                count++;
            }
        }
        if (count < 0) {
            return false;
        }

        return true;
    }

    //检查身份证号是否合法
    private static boolean checkId(String id) {
        int length = id.length();
        if (length != 18) {
            return false;
        }

        char fist = id.charAt(0);
        if (fist == '0') {
            return false;
        }

        for (int i = 0; i < id.length() - 2; i++) {
            char c = id.charAt(i);
            if (!(c >= '0' && c <= '9')) {
                return false;
            }
        }

        char last = id.charAt(id.length() - 1);
        if (!(last >= '0' && last <= '9') || (last == 'X') || (last == 'x')) {
            return false;
        }


        return true;
    }

    //检查手机号是否合法
    private static boolean checkPhonenumber(String phonenumber) {
        int length = phonenumber.length();
        if (length != 11) {
            return false;
        }

        char fist = phonenumber.charAt(0);
        if (fist == '0') {
            return false;
        }
        for (int i = 0; i < phonenumber.length(); i++) {
            char c = phonenumber.charAt(i);
            if (!(c >= '0' && c <= '9')) {
                return false;
            }
        }

        return true;
    }

    //通过username获取索引
    private static int getIndex(ArrayList<User> list, String username) {

        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String temp = user.getUsername();

            if (temp.equals(username)) {
                //存在就返回索引
                return i;
            }
        }
        //不存在就返回-1(java中不存在-1索引)
        return -1;
    }

    //随机验证码
    private static String getVerify() {
        char[] arr1 = new char[52];
        for (int i = 0; i < arr1.length; i++) {
            if (i <= 25) {
                arr1[i] = (char) (97 + i);

            } else {
                arr1[i] = (char) (65 + i - 26);
            }

        }

        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int randomIndex = random.nextInt(arr1.length);
            sb.append(arr1[randomIndex]);
        }
        int number = random.nextInt(10);
        sb.append(number);
        String verify = sb.toString();
        char[] arr = verify.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            int randomIndex = random.nextInt(arr.length);
            char temp = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = temp;

        }

        String result = new String(arr);
        System.out.println(result);

        return result;
    }

    //验证密码是否正确
    private static boolean checkPassword(ArrayList<User> list, String username, String password) {
        int index = getIndex(list, username);
        User user = list.get(index);
        String pwd = user.getPassword();
        if (password.equals(pwd)) {
            return true;
        }
        return false;

    }

    //验证手机号和身份证号是否正确
    private static boolean checkIdPhonenumber(ArrayList<User> list, String username, String id, String phonenumber) {
        int index = getIndex(list, username);
        User user = list.get(index);
        String rightid = user.getId();
        String rightPhonenumber = user.getPhonenumber();
        if (id.equals(rightid) && phonenumber.equals(rightPhonenumber)) {
            return true;
        }
        return false;
    }


}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值