Java小项目--学生信息管理系统--用户登录系统--课程设计

发布时间:2024年01月15日

?学生管理系统

### 需求:

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

### 分析:

#### 初始菜单:

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

#### 学生类:

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

#### 添加功能:

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

* id唯一

#### 删除功能:

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

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

#### 修改功能:

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

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

#### 查询功能:

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

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

```java
id?? ??? ??? ?姓名?? ??? ?年龄?? ??? ?家庭住址
001?? ?张三?? ??? ?23?? ??? ? 南京
002?? ?李四?? ??? ?24?? ??? ? 北京
```

## 学生管理系统升级版

### 需求:

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

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

### 分析:

#### 登录界面:

```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 studentmangemnet;

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

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

    /**
     * 设置
     * @param id
     */
    public void setId(String 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 + "}";
    }
}

用户类

package studentmangemnet;

public class User {
    private String name;
    private String password;
    private String idNumber;
    private String phoneNumber;

    public User() {
    }

    public User(String name, String password, String idNumber, String phoneNumber) {
        this.name = name;
        this.password = password;
        this.idNumber = idNumber;
        this.phoneNumber = phoneNumber;
    }

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

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

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

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

    /**
     * 获取
     * @return idNumber
     */
    public String getIdNumber() {
        return idNumber;
    }

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

    /**
     * 获取
     * @return phoneNumber
     */
    public String getPhoneNumber() {
        return phoneNumber;
    }

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

    public String toString() {
        return "User{name = " + name + ", password = " + password + ", idNumber = " + idNumber + ", phoneNumber = " + phoneNumber + "}";
    }
}

学生信息管理系统类

package studentmangemnet;
/*
    学生信息管理系统
*/

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

public class Test {
    public static void method() {
        ArrayList<Student> list = new ArrayList<>();
        boolean flag = true;
        while (flag) {
            switch (menu()) {
                case 1 -> addStu(list);
                case 2 -> deleteStu(list);
                case 3 -> alterStu(list);
                case 4 -> soutStu(list);
                case 5 -> {
                    flag = false;
                    System.out.println("成功退出");
                }
                default -> System.out.println("请输入正确的序号!");
            }
        }
    }

    //主菜单方法
    public static int menu() {
        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);
        return sc.nextInt();
    }

    //添加学生方法
    public static void addStu(ArrayList<Student> list) {
        System.out.println("请输入相关学生信息");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生id:");
        String id = sc.next();
        if (!idIsonly(id, list)) {
            System.out.println("该学生已经存在!即将退回到菜单!");
            return;
        }
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请输入学生家庭住址:");
        String address = sc.next();
        Student stu = new Student(id, name, age, address);
        list.add(stu);
        System.out.println("添加成功!即将退回到菜单!");
    }

    //判断id是否唯一方法
    public static boolean idIsonly(String id, ArrayList<Student> list) {
        for (int i = 0; i < list.size(); i++) {
            if (id.equals(list.get(i).getId()))
                return false;
        }
        return true;
    }

    //删除学生信息方法
    public static void deleteStu(ArrayList<Student> list) {
        System.out.println("请输入需要删除的学生id:");
        Scanner sc = new Scanner(System.in);
        String id = sc.next();
        if (idIsonly(id, list)) {
            System.out.println("该学生不存在!即将退回到菜单!");
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            if (id.equals(list.get(i).getId())) {
                list.remove(i);
                System.out.println("删除成功!即将退回到菜单!");
                return;
            }
        }
    }

    //修改学生信息方法
    public static void alterStu(ArrayList<Student> list) {
        System.out.println("请输入需要修改的学生id:");
        Scanner sc = new Scanner(System.in);
        String id = sc.next();
        if (idIsonly(id, list)) {
            System.out.println("该学生不存在!即将退回到菜单!");
            return;
        }
        System.out.println("请输入新的学生信息");
        System.out.println("请输入新的学生姓名:");
        String name = sc.next();
        System.out.println("请输入新的学生年龄:");
        int age = sc.nextInt();
        System.out.println("请输入新的学生家庭住址:");
        String address = sc.next();
        for (int i = 0; i < list.size(); i++) {
            if (id.equals(list.get(i).getId())) {
                list.get(i).setName(name);
                list.get(i).setAge(age);
                list.get(i).setAddress(address);
                System.out.println("修改成功!即将退回到菜单!");
                return;
            }
        }
    }

    //查询学生信息方法
    public static void soutStu(ArrayList<Student> list) {
        if (list.size() == 0) {
            System.out.println("当前无学生信息,请添加后再查询!");
            System.out.println("即将退回到主菜单");
            return;
        }
        System.out.println("id" + '\t' + "姓名" + '\t' + "年龄" + '\t' + "家庭住址");
        Student stu = new Student();
        for (int i = 0; i < list.size(); i++) {
            stu = list.get(i);
            System.out.println(stu.getId() + '\t' + stu.getName() + '\t' + stu.getAge() + '\t' + stu.getAddress());
        }
    }

}

用户登录类

package studentmangemnet;

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

public class LogIn {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        boolean flag = true;
        while (flag) {
            switch (menu()) {
                case 1 -> logIn(list);
                case 2 -> register(list);
                case 3 -> lossPassword(list);
                case 4 -> {
                    flag = false;
                    return;
                }
            }
        }

    }

    //主菜单
    public static int menu() {
        System.out.println("欢迎来到学生管理系统");
        System.out.println("请选择操作 1登录 2注册 3忘记密码 4退出");
        Scanner sc = new Scanner(System.in);
        return sc.nextInt();
    }

    //登录函数
    public static void logIn(ArrayList<User> list) {
        System.out.println("请输入用户名:");
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        //判断用户名是否存在,如果不存在则提示先注册,并直接结束方法
        if (!nameIsExist(name, list)) {
            System.out.println("用户名未注册,请先注册!");
            System.out.println("即将退回到初始界面!");
            return;
        }
        System.out.println("请输入密码:");
        String password = sc.next();
        String str, newStr;

        //进行验证码匹配(忽略大小写),验证码输入错误则会重新生生成
        while (true) {
            str = getIdCode();
            System.out.println("请输入验证码(不区分大小写):" + str);
            newStr = sc.next();
            if (str.equalsIgnoreCase(newStr))
                break;
            else System.out.println("验证码错误!请重新输入!");
        }
        //判断用户名和密码是否正确,三次机会
        int i = 2;
        for (; i > 0; i--) {
            if (passwordIsTure(name, password, list)) {
                i++;
                break;
            } else {
                System.out.println("密码错误!请重新输入!你还有" + i + "次机会!");
                password = sc.next();
                while (true) {
                    str = getIdCode();
                    System.out.println("请输入验证码:" + str);
                    newStr = sc.next();
                    if (str.equalsIgnoreCase(newStr))
                        break;
                    else System.out.println("验证码错误!请重新输入!");
                }
            }
        }
        if (i == 0) {
            System.out.println("很抱歉次数已经用完!即将退出系统!");
            System.exit(0);
        } else {
            System.out.println("登录成功!");
            Test t = new Test();
            t.method();
        }

    }

    //判断用户名密码是匹配方法
    public static boolean passwordIsTure(String name, String password, ArrayList<User> list) {
        for (int i = 0; i < list.size(); i++) {
            if (name.equals(list.get(i).getName())) {
                if (password.equals(list.get(i).getPassword()))
                    return true;
                else return false;
            }
        }
        return false;
    }

    //用户名是否存在方法
    public static boolean nameIsExist(String name, ArrayList<User> list) {
        for (int i = 0; i < list.size(); i++) {
            if (name.equals(list.get(i).getName()))
                return true;
        }
        return false;
    }

    //生成验证码函数
    public static String getIdCode() {
        char[] arr = new char[5];
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            //循环产生4次
            //随机产生一个在65-90,97-122之间的数字
            //可利用循环产生65-122之间随机数,如果在91-96直接则舍弃重新生成
            int x = r.nextInt(58) + 65; //random产生0-57,加上65后就是65-122
            while (x >= 91 && x <= 96) {
                x = r.nextInt(58) + 65;
            }
            arr[i] = (char) x; //将随机字母拼接进入验证码容器
        }
        arr[4] = (char) (r.nextInt(10) + 48);
        return new String(arr);
    }

    //用户注册方法
    public static void register(ArrayList<User> list) {
        System.out.println("请输入用户名(长度必须在3~15位之间,字母加数字的组合,但是不能是纯数字):");
        Scanner sc = new Scanner(System.in);
        String name;
        while (true) {
            name = sc.next();
            if (nameIsTrue(name, list))
                break;
            else System.out.println("用户名格式不对或重复!请重新输入:");
        }
        String password, password1;
        while (true) {
            System.out.println("请输入密码:");
            password = sc.next();
            System.out.println("请再次输入确认密码:");
            password1 = sc.next();
            if (password.equals(password1))
                break;
            else System.out.println("两次输入不相同,请重新输入!");
        }
        String idNumber;
        while (true) {
            System.out.println("请输入身份证号:");
            idNumber = sc.next();
            if (idNumberIsTrue(idNumber))
                break;
            else System.out.println("身份证格式错误!请重新输入!");
        }
        String phoneNumber;
        while (true) {
            System.out.println("请输入手机号:");
            phoneNumber = sc.next();
            if (phoneNumberIsTrue(phoneNumber))
                break;
            else System.out.println("手机号格式错误!请重新输入!");
        }
        User user = new User(name, password, idNumber, phoneNumber);
        list.add(user);
        System.out.println("注册成功!");

    }

    //用户名验证方法
/*  用户名唯一
    用户名长度必须在3~15位之间
    只能是字母加数字的组合,但是不能是纯数字
*/
    public static boolean nameIsTrue(String name, ArrayList<User> list) {
        if (name.length() < 3 || name.length() > 15)
            return false;
        if (nameIsExist(name, list))
            return false;
        int charNum = 0;
        for (int i = 0; i < name.length(); i++) {
            char x = name.charAt(i);
            if ((x >= '0' && x <= '9') || (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z')) {
                if ((x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'))
                    charNum++;
            } else return false;
        }
        if (charNum == 0) return false;
        return true;
    }

    //身份证号验证方法
    public static boolean idNumberIsTrue(String idNumber) {
        if (idNumber.length() != 18)
            return false;
        if (idNumber.charAt(0) == 0)
            return false;
        for (int i = 0; i < 17; i++) {
            if (idNumber.charAt(i) < '0' || idNumber.charAt(i) > '9')
                return false;
        }
        char x = idNumber.charAt(17);
        if ((x < '0' || x > '9') && x != 'x' && x != 'X')
            return false;
        return true;
    }

    //手机号验证方法
    public static boolean phoneNumberIsTrue(String phoneNumber) {
        if (phoneNumber.length() != 11)
            return false;
        if (phoneNumber.charAt(0) == 0)
            return false;
        for (int i = 0; i < 11; i++) {
            if (phoneNumber.charAt(i) <= '0' || phoneNumber.charAt(i) >= '9')
                return false;
        }
        return true;
    }

    //忘记密码方法
    public static void lossPassword(ArrayList<User> list) {
        System.out.println("请输入用户名");
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        if (!nameIsExist(name, list)) {
            System.out.println("未注册!");
            return;
        }
        String idNumber;
        while (true) {
            System.out.println("请输入身份证号:");
            idNumber = sc.next();
            if (idNumberIsTrue(idNumber))
                break;
            else System.out.println("身份证格式错误!请重新输入!");
        }
        String phoneNumber;
        while (true) {
            System.out.println("请输入手机号:");
            phoneNumber = sc.next();
            if (phoneNumberIsTrue(phoneNumber))
                break;
            else System.out.println("手机号格式错误!请重新输入!");
        }
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getIdNumber().equals(idNumber) && list.get(i).getPhoneNumber().equals(phoneNumber)) {
                String password, password1;
                while (true) {
                    System.out.println("请输入新密码:");
                    password = sc.next();
                    System.out.println("请再次输入确认密码:");
                    password1 = sc.next();
                    if (password.equals(password1))
                        break;
                    else System.out.println("两次输入不相同,请重新输入!");
                }
                list.get(i).setPassword(password);
                System.out.println("修改成功!");
                return;
            } else {
                System.out.println("账号信息不匹配,修改失败!");
                return;
            }
        }

    }

}

总结

代码部分为原创

整个项目可以作为课程设计题目

前文的需求功能已全部实现

将上面四个类全部放在一个包里面即可成功运行

写代码不易,多点赞收藏!

文章来源:https://blog.csdn.net/qq_62827225/article/details/135590991
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。