Java版学生管理系统题目及详解

1.学生管理系统

1.1 学生管理系统

需求:

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

分析:

初始菜单:

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

学生类:

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

添加功能:

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

  • id唯一

删除功能:

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

  • id存在删除

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

修改功能:

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

  • id存在,继续录入其他信息

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

查询功能:

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

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询

  • 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)

id			姓名		年龄		家庭住址
heima001	张三		23		 南京
heima002	李四		24		 北京
heima003	王五		25		 广州
heima004	赵六	 	26		 深圳

1.2 业务结构分析

 

1.3 完整代码

public class Student {
    private String id;
    private String name;
    private int age;
    private String home;

    public Student() {

    }

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

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getHome() {
        return home;
    }

    public void setHome(String home) {
        this.home = home;
    }
}

 先写Student的Javabean类

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

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

            switch (choose) {
                case "1" -> addStudent(list);
                case "2" -> deleteStudent(list);
                case "3" -> revise(list);
                case "4" -> inquiry(list);
                case "5" -> {
                    System.out.println("退出");
                    break loop;
                }
                default -> System.out.println("输入错误!");
            }
        }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        Student s = new Student();
        while (true) {
            System.out.println("请输入id:");
            String id = sc.next();
            if (check(list, id)) {
                System.out.println("该id已存在,请重新输入");
            } else {
                s.setId(id);
                break;
            }
        }

        System.out.println("请输入name:");
        String name = sc.next();
        s.setName(name);

        System.out.println("请输入age:");
        int age = sc.nextInt();
        s.setAge(age);

        System.out.println("请输入home:");
        String home = sc.next();
        s.setHome(home);

        list.add(s);
        System.out.println("添加成功!");
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生id:");
        String id = sc.next();
        if (check(list, id)) {
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getId().equals(id)) {
                    list.remove(i);
                }
            }
            System.out.println("删除成功!");
        } else {
            System.out.println("该id不存在!");
        }
    }

    //查询学生
    public static void inquiry(ArrayList<Student> list) {
        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 s = list.get(i);
            System.out.println(s.getId() + "\t" + s.getName() + "\t" + s.getAge() + "\t\t" + s.getHome());
        }
    }

    //修改学生
    public static void revise(ArrayList<Student> list){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要修改的学生id:");
        String id=sc.next();
        int index=0;
        if(check(list,id)){
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getId().equals(id)) {
                   index=i; //获取输入的id对应索引
                }
            }
            Student s=list.get(index);
            System.out.println("请输入要修改的学生姓名");
            String name=sc.next();
            s.setName(name);

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

            System.out.println("请输入要修改的学生地址");
            String home=sc.next();
            s.setHome(home);

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

        }else{
            System.out.println("该id不存在!");
        }
    }

    //检查id是否已经存在
    public static boolean check(ArrayList<Student> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return true; //如果id存在,返回true
            }
        }
        return false;//如果id不存在,返回false;
    }
}

2.学生管理系统PLUS版

2.1学生管理系统升级版

需求:

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

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

分析:

登录界面:

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

2.2 完整代码如下

public class User {
    private String username;
    private String password;
    private String idnumber;
    private String phonenumber;

    public User() {
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getIdnumber() {
        return idnumber;
    }

    public void setIdnumber(String idnumber) {
        this.idnumber = idnumber;
    }

    public String getPhonenumber() {
        return phonenumber;
    }

    public void setPhonenumber(String phonenumber) {
        this.phonenumber = phonenumber;
    }
}

先创建User的Javabean类,然后根据业务需求写相应代码

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

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

        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作1.登录 2.注册 3.忘记密码 4.退出");
            String choose = sc.next();
            switch (choose) {
                case "1" -> login(list);
                case "2" -> register(list);
                case "3" -> forgetPassword(list);
                case "4" -> {
                    System.out.println("谢谢使用,再见!");
                    System.exit(0); //系统关闭
                }
                default -> System.out.println("输入错误!");

            }
        }

    }


    //1.注册功能
    public static void register(ArrayList<User> list) {
        User u = new User();
        Scanner sc = new Scanner(System.in);
        //先对格式进行验证,再验证是否唯一
        //输入用户名并验证
        System.out.println("请输入用户名:");
        while (true) {
            String name = sc.next();
            if (checkName(list, name)) {
                u.setUsername(name);
                break;
            } else {
                System.out.println("请重新输入:");
            }
        }

        //输入密码并验证
        while (true) {
            System.out.println("请输入密码:");
            String password1 = sc.next();
            System.out.println("请确定密码:");
            String password2 = sc.next();
            if (password2.equals(password1)) {
                u.setPassword(password1);
                break;
            } else {
                System.out.println("俩次密码输入不一致,请重新操作");
            }
        }

        //输入身份证号并验证
        System.out.println("请输入身份证号:");
        while (true) {
            String id = sc.next();
            if (checkId(id)) {
                u.setIdnumber(id);
                break;
            } else {
                System.out.println("所输入的身份证号不满足要求,请重新输入:");
            }
        }

        //输入手机号并验证
        System.out.println("请输入手机号:");
        while (true) {
            String phone = sc.next();
            if (checkPhone(phone)) {
                u.setPhonenumber(phone);
                break;
            } else {
                System.out.println("输入的手机号不合规,请重新输入:");
            }
        }

        list.add(u);
        System.out.println("注册成功!");

        printList(list);
    }

    private static void printList(ArrayList<User> list) {
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            System.out.println(u.getUsername() + "," + u.getPassword() + "," + u.getIdnumber() + "," + u.getPhonenumber());
        }
    }

    //验证用户名
    public static boolean checkName(ArrayList<User> list, String name) {
        //用户名长度在3-15之间
        int len = name.length();
        if (len < 3 || len > 15) {
            System.out.println("该用户名长度不符合要求!");
            return false;
        }

        //用户名不是纯数字
        int count = 0;
        for (int i = 0; i < name.length(); i++) {
            char c = name.charAt(i);
            if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))) {
                return false;
            }
        }

        for (int i = 0; i < name.length(); i++) {
            char c = name.charAt(i);
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                count++;
                break;
            }
        }
        if (count == 0) {
            System.out.println("用户名不能为纯数字!");
            return false;
        }


        //确保用户名唯一
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getUsername().equals(name)) {
                System.out.println("该用户名已存在!");
                return false;
            }
        }

        return true; //满足以上条件则返回true

    }

    //验证身份证号
    public static boolean checkId(String id) {
        //长度为18
        if (id.length() != 18) {
            return false;
        }
        //首位不为零
        if (id.charAt(0) == '0') {
            return false;

        }
        //前17位是数字
        for (int i = 0; i < id.length() - 1; i++) {
            char c = id.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }
        //最后一位是数字或x或X
        char last = id.charAt(id.length() - 1);
        if ((last < '0' || last > '9') && last != 'x' && last != 'X') {
            return false;
        }

        return true;//以上条件都满足返回true
    }

    //验证手机号
    public static boolean checkPhone(String phoneNumber) {
        //长度为11
        if (phoneNumber.length() != 11) {
            return false;
        }

        //首位不为零
        if (phoneNumber.charAt(0) == '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;
    }

    //2.登录功能
    public static void login(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < 3; i++) {
            //输入用户名
            System.out.println("请输入用户名:");
            String name = sc.next();
            if (!(checkName2(list, name))) {
                System.out.println("用户名未注册,请先注册");
                return;
            }
            //输入密码
            System.out.println("请输入密码:");
            String password = sc.next();

            //验证码
            while (true) {
                String rightcode=getCode();
                System.out.println("当前正确的验证码是:"+rightcode);
                System.out.println("请录入验证码:");
                String code= sc.next();
                if(code.equalsIgnoreCase(rightcode)){
                    System.out.println("验证码输入正确");
                    break;
                }else {
                    System.out.println("验证码输入错误");
                }
            }

            //验证用户名和密码是否正确
            User userInfo=new User(name,password,null,null);
            if(checkUserInfo(userInfo,list)){
                System.out.println("登陆成功");
                //创建对象,调用方法,启动学生管理系统
                StudentSystem ss=new StudentSystem();
                ss.startStudentSystem();
                break;
            }else{
                System.out.println("");
                if(i==2){
                    System.out.println("当前登录次数已达三次,账号已被锁定");
                }else{
                    System.out.println("登录失败,用户名或密码错误,还剩下"+(2-i)+"次机会");
                }
            }

        }

    }

    //验证用户名和密码是否正确
    public static  boolean checkUserInfo(User userInfo,ArrayList<User> list) {
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            if (u.getUsername().equals(userInfo.getUsername())
                    && u.getPassword().equals(userInfo.getPassword())) {
                return true;
            }
        }
        return false;
    }


    //验证用户名是否已注册
    public static boolean checkName2(ArrayList<User> list, String name) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getUsername().equals(name)) {
                return true;
            }
        }
        return false;
    }

    //生成验证码
    public static String getCode() {
        Random r = new Random();
        //1.创建集合存储大小写字母
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char) ('a' + i));
            list.add((char) ('A' + i));
        }
        //2.生成四个随机字母
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(list.size());
            sb.append(list.get(index));
        }

        //3.生成随机数放在最后一个索引
        int number = r.nextInt(10);
        sb.append(number);

        //4.将数字与字母随机交换位置,
        // 要改变字符串的内容得先将字符串变成字符数组,在字符数组中修改,然后变回字符串
        int randomIndex = r.nextInt(sb.length());
        char[] arr = sb.toString().toCharArray();
        //将最大索引与随机索引进行交换
        char temp = arr[randomIndex];
        arr[randomIndex] = arr[sb.length() - 1];
        arr[sb.length() - 1] = temp;

        return new String(arr);

    }

    //3.忘记密码
    private static void forgetPassword(ArrayList<User> list) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name=sc.next();
        if(!(checkName2(list,name))){
            System.out.println("当前用户名未注册");
            return;
        }
        System.out.println("请输入身份证号码:");
        String id=sc.next();
        System.out.println("请输入手机号码");
        String phone=sc.next();

        int index=getindex(list,name);
        User u=list.get(index);
        if(!(u.getIdnumber().equalsIgnoreCase(id)&&u.getPhonenumber().equals(phone))){
            System.out.println("账号信息不匹配,修改失败");
            return;
        }

        String password;
        while (true) {
            System.out.println("请输入新密码进行修改:");
             password=sc.next();
            System.out.println("请确认密码:");
            String againPassword=sc.next();
            if(password.equals(againPassword)){
                u.setPassword(password);
                System.out.println("密码修改成功!");
                break;
            }else {
                System.out.println("俩次密码不一致,请重新输入");
            }
        }
    }
    //获取用户名对应索引
    private static int getindex(ArrayList<User> list, String name) {
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getUsername().equals(name)){
                return i;
            }
        }
        return -1;
    }



}

 

  • 39
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值