学生管理系统

需求:

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

分析:

初始菜单:
"-------------学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:

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

添加功能:

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

  • id唯一

删除功能:

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

  • id存在删除

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

修改功能:

键盘录入要修改的学生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

//Student.java

package student.manage.system;

import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
/**
 * 定义学生类,包含以下成员变量
 * ​       private String sid            // 学生id
 * ​       private String name       // 学生姓名
 * ​       private String age          // 学生年龄
 * ​       private String address   // 学生所在地
 */
public class Student {
    private String sid;       // 学生id
    private String name;      // 学生姓名
    private int age;       // 学生年龄
    private String address;   // 学生所在地

    @Override
    public String toString() {
        return sid + "\t\t" + name + "\t\t" + age + "\t\t" + address;
    }
}
//User

package student.manage.system;

import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class User {
    private String username;
    private String password;
    private String ID;
    private String phone;

}
//Logon

package student.manage.system;

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

public class Logon extends User {
    public boolean loggedIn = false;
    List list = new ArrayList<>();

    //登录
    public void logon() {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入用户名:");
            String user = sc.nextLine();
            System.out.println("请输入密码:");
            String pwd = sc.nextLine();
            System.out.println("验证码:");
            String a = Code();
            System.out.println("请输入验证码:");
            String code = sc.nextLine();
            //集合长度不为0;
            if (list.isEmpty()) {
                System.out.println("目前没有任何用户,请先添加在登陆");
                break;
            }
            boolean isUserFound = false;
            for (User us : list) {
                //判断用户名和密码是否一致
                if (us.getUsername().equals(user)) {
                    isUserFound = true;
                    if (us.getPassword().equals(pwd)) {
                        //判断验证码
                        if (a.equals(code)) {
                            System.out.println("登录成功");
                            loggedIn = true;
                            return;
                        } else {
                            System.out.println("验证不对,请重新输入");
                        }
                    } else {
                        System.out.println("密码错误,请重新输入");
                    }
                    break;
                }
            }
            if (!isUserFound) {
                System.out.println("用户名未注册,请先注册");
                break;
            } else {
                System.out.println("登录失败,你还有" + (2 - i) + "此机会");
            }
        }
    }

    //忘记密码
    public void forgotPwd() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要找回的用户名:");
        String name = sc.nextLine();
        User st = new User();
        int count = 0;
        //判断用户是否存在
        boolean userExists = false; // 标记是否存在用户
        for (int i = 0; i < list.size(); i++) {
            st = list.get(i);
            if (st.getUsername().equals(name)) {
                userExists = true;
                count = i;
                break;
            }
        }
        if (!userExists) {
            System.out.println("没有此用户");
            return;
        }
        System.out.println("请输入身份证号码:");
        String id = sc.nextLine();
        System.out.println("请输入手机号码:");
        String phone = sc.nextLine();
        //判断身份证号码和手机号码是否匹配
        if (!(st.getID().equals(id) || st.getPhone().equals(phone))) {
            System.out.println("账号信息不匹配,修改失败");
        } else {
            System.out.println("请输入新的密码");
            String pwd = sc.nextLine();
            st.setPassword(pwd);
            list.set(count, st);
            System.out.println("修改成功");
        }
    }

    //注册
    public void register() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的用户名");
        String username = sc.nextLine();
        for (User user : list) {
            if (username.equals(user.getUsername())) {
                return;
            }
        }
        //验证用户名是否符合规则
        String regex = "^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]{3,15}$";
        if (!username.matches(regex)) {
            System.out.println("用户名不符合要求");
            return;
        }
        //判断2次密码是否一致
        //输入密码
        System.out.println("请输入你的密码");
        String password = sc.nextLine();
        //再次确认密码
        System.out.println("请再次输入你的密码");
        String password1 = sc.nextLine();
        if (!password.equals(password1)) {
            System.out.println("你两次输入的密码不一致");
            return;
        }

        //判断身份证号码是否规则
        String idRegex = "\\d{17}[\\dXx]";
        System.out.println("请输入身份证号码:");
        String id = sc.nextLine();
        if (!id.matches(idRegex)) {
            System.out.println("你输入的身份证号码有误,请重新输入");
            return;
        }

        //判断手机号码是否符合规则
        String phoneRegex = "1[345789]\\d{9}";
        System.out.println("请输入手机号码:");
        String phone;
        phone = sc.nextLine();
        if (!phone.matches(phoneRegex)) {
            System.out.println("你输入的手机号码有误,请重新输入");
            return;
        }
        //创建对象,把对象信息添加到集合
        User newUser = new User(username, password, id, phone);
        list.add(newUser);
        System.out.println("添加成功");
    }

    //验证码
    public String Code() {
        StringBuilder sb = new StringBuilder();
        Random r = new Random();
        //随机生成大小写字母
        for (int i = 0; i < 4; i++) {
            int a = r.nextInt(52);
            if (a < 26) {
                sb.append((char) (a + 'A'));
            } else {
                sb.append((char) ((a - 26) + 'a'));
            }
        }
        //随机生成0-9数字,并且随机插入验证码中
        int num = r.nextInt(10);
        int position = r.nextInt(4);
        sb.insert(position, num);
        String code = String.valueOf(sb);
        System.out.println(sb);
        return code;
    }

    //登录界面
    public void log() {
        Scanner sc = new Scanner(System.in);
        while (!loggedIn) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作1登录 2注册 3忘记密码");
            String in = sc.nextLine();
            switch (in) {
                case "1":
                    logon();
                    break;
                case "2":
                    register();
                    break;
                case "3":
                    forgotPwd();
                    break;
                default:
                    System.out.println("没有这个选项");
            }
        }
    }
}
/*
isEmpty()是一个用于判断集合是否为空的方法
 */
//StudentDome

package student.manage.system;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

public class StudentDome {
    public static void main(String[] args) {
        //调用登录
        Logon l = new Logon();
        l.log();
        //创建集合保存学生信息
        List list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        //打印操作展示界面
        logt:
        while (true) {
            System.out.println("-------------欢迎来到学生管理系统-------------");
            System.out.print("1.添加学生\n2.删除学生\n3.修改学生\n4.查看学生\n5.退出系统" + "\n请输入你的选择:");
            String in = sc.nextLine();
            switch(in){
                case "1":
                    addStudent(sc,list);
                    break;
                case "2":
                    deleteStudent(sc,list);
                    break;
                case "3":
                    modifyStudent(sc,list);
                    break;
                case "4":
                    seekStudent(sc,list);
                    break;
                case "5":
                    break logt;
                default:
                    System.out.println("你输入的选项有误,请重新输入");
                    break;
            }
        }
    }

    //添加学生
    public static void addStudent(Scanner sc,List list) {
        System.out.println("请输入要添加的学生信息:");
        System.out.print("请输入学号:");
        String sid = sc.nextLine();
        //判断学号是否存在,存在:提示存在;不存在:录入信息
        for (Student stu : list) {
            if (stu.getSid().equals(sid)) {
                System.out.println("此学号已经存在,请重新输入");
                return;
            }
        }
        System.out.print("请输入姓名:");
        String name = sc.nextLine();
        int age;
        try{
            System.out.print("请输入年龄:");
            age = sc.nextInt();
            sc.nextLine();
            //判断年龄是否正常
            if(age < 0){
                System.out.println("年龄有误");
                return;
            }
        }catch(InputMismatchException e){
            System.out.println("你输入的不是数字,请重新输入");
            sc.nextLine();
            return;
        }

        System.out.print("请输入地址:");
        String address = sc.nextLine();
        Student student = new Student(sid,name,age,address);
        list.add(student);
        System.out.println("添加学生成功!");
    }

    //删除学生
    public static void deleteStudent(Scanner sc,List list) {
        System.out.println("请输入要删除的学生学号");
        System.out.print("请输入学号:");
        String sid = sc.nextLine();
        //1.遍历集合查看要删除的学生是否存在
        for(int i = 0; i  list) {
        //判断有无学生信息,有就下一个,没有就结束
        if(list.isEmpty()){
            System.out.println("当前无学生信息,请添加后再查询");
            return;
        }
        //判断查询所有学生还是查询某个学生
        while (true) {
            System.out.println("请输入查询选项:\n1.查询所有的学生信息,\n2.按学号查询");
            int in = sc.nextInt();
            sc.nextLine();
            switch(in){
                case 1:
                    System.out.println("学号: " + "\t姓名: " + "\t年龄: " + "\t地址: ");
                    for(Student key : list){
                        System.out.println(key);
                    }
                    return;
                case 2:
                    System.out.println("请输入要查询的学生的学号");
                    System.out.print("请输入学号:");
                    String sid = sc.nextLine();
                    //判断此学号是否存在
                    for (Student stu : list) {
                        if (stu.getSid().equals(sid)) {
                            System.out.println("学号: " + "\t姓名: " + "\t年龄: " + "\t地址: ");
                            System.out.println(stu.toString());
                            return;
                        }
                    }
                    System.out.println("未找到匹配的学生信息");
                    return;
                default:
                    System.out.println("你输入的选项有误,请重新输入");
            }
        }
    }

    //修改学生
    public static void modifyStudent(Scanner sc,List list) {
        System.out.println("请输入要修改的学生的学号");
        System.out.print("请输入学号:");
        String sid = sc.nextLine();
        for(int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            //学生信息存在
            if(stu.getSid().equals(sid)){
                System.out.print("请输入新的姓名:");
                String name = sc.nextLine();
                int age;
                try{
                    System.out.print("请输入新的年龄:");
                    age = sc.nextInt();
                    sc.nextLine();
                    //判断年龄是否正常
                    if(age < 0){
                        System.out.println("年龄有误");
                        return;
                    }
                }catch(InputMismatchException e){
                    System.out.println("你输入的不是数字,请重新输入");
                    sc.nextLine();
                    return;
                }

                System.out.print("请输入新的地址:");
                String address = sc.nextLine();
                Student student = new Student(sid,name,age,address);
                list.set(i,student);
                System.out.println("学生信息修改成功!");
                return;
            }
        }
        //学生信息不存在
        System.out.println("未找到学生信息,请重新输入");
    }
}
/*
1.拥有增删改查功能
2.判断了年龄为负数的情况,还有可能用户输入的不是数字,此时会出现InputMismatchException异常
3.如果使用了int in = sc.nextInt();可能要加sc.nextLine();
  因为Scanner.nextInt()方法会读取用户输入的整数,但它不会读取换行符。
  当你在接下来的代码中再次调用Scanner.nextLine()时,它会读取上一次输入中的换行符(即空字符串),而不是你期望的下一行输入。
  为了解决这个问题,可以在调用Scanner.nextInt()之后立即调用Scanner.nextLine()方法,以消耗掉剩余的换行符。
  这样,下一个Scanner.nextLine()调用就会正确地读取到用户的下一行输入
 */

你可能感兴趣的:(java,intellij-idea)