Java---学生管理系统(控制台)

本篇博客继上一篇内容继续记录听黑马课的时候的笔记以及课堂上练习的代码,该学生管理系统算是对前面整体知识的综合运用。下面是课程链接,可点击自行跳转。

黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)https://www.bilibili.com/video/BV17F411T7Ao/?p=116&share_source=copy_web&vd_source=d521b664e1113402904fa9336bd1d0ac


目录

退出嵌套循环的外层循环

需求

分析

初始菜单

学生类

添加功能

删除功能

修改功能

查询功能

学生信息后台代码

升级系统

需求

分析

登录界面

用户类

注册功能

登录功能

忘记密码

验证码规则

用户登录前台代码

合并前后台代码

系统小结


退出嵌套循环的外层循环

有两种方法

1、无限循环控制:

loop(随便定义) : while(true){
    switch(choice){
        case 1:
            ...(操作);
            break;
        case 2:
            break loop;//退出外层循环
    }
}

解释:

  1. 定义了一个无限循环(while (true))
  2. 在循环内部使用 switch 语句根据 choice 变量的值执行不同操作
  3. 当 choice 为 1 时,执行输出操作(sout)
  4. 当 choice 为 2 时,使用带标签的 break 语句(break loop)跳出整个外层无限循环

题目要求:

        1、实现一个带有交互功能的菜单系统,通过控制台与用户进行交互
        2、使用带标签的循环(labeled loop)和 break 语句来控制程序流程
        3、具体功能包括:
                        显示菜单选项(至少包含 "显示信息" 和 "退出程序" 两个选项)
                        根据用户输入的选项执行相应操作
                        当用户选择退出选项时,能正确终止程序运行
                        对无效输入进行处理并提示用户重新输入

小练手(实现一个简单的菜单交互功能):

import java.util.Scanner;

public class MenuExample {
    public static void main(String[] args) {
        showMenu();
    }
    
    // 展示菜单并处理用户选择的方法
    public static void showMenu() {
        Scanner scanner = new Scanner(System.in);
        int choice;
        
        // 带标签的无限循环
        loop: while (true) {
            System.out.println("\n请选择操作:");
            System.out.println("1. 显示欢迎信息");
            System.out.println("2. 退出程序");
            System.out.print("请输入选项: ");
            choice = scanner.nextInt();
            
            switch (choice) {
                case 1:
                    System.out.println("欢迎使用本系统!");
                    break; // 跳出switch语句
                case 2:
                    System.out.println("程序已退出");
                    break loop; // 跳出外层循环
                default:
                    System.out.println("无效选项,请重新输入");
            }
        }
        scanner.close();
    }
}

2、调用System.exit(0);这个方法,表示退出虚拟机

需求

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

分析

初始菜单

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

学生类

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

添加功能

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

  • id唯一

删除功能

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

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

修改功能

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

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

查询功能

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

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

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

学生信息后台代码

Student.java:

package listDemo;

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 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 getAddress() {
        return address;
    }

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

StudentManage.java:

//StudentManage.java
package listDemo;

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

public class studentManage {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        loop : while (true){
            System.out.println("\"-------------欢迎来到黑马学生管理系统----------------\"\n" +
                    "\"1:添加学生\"\n" +
                    "\"2:删除学生\"\n" +
                    "\"3:修改学生\"\n" +
                    "\"4:查询学生\"\n" +
                    "\"5:退出\"\n" +
                    "\"请输入您的选择:\"");
            Scanner sc = new Scanner(System.in);
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    boolean flag = addStudent(students);
                    if (flag) {
                        System.out.println("添加成功,请继续输入您的选择");
                    }
                    break;
                case 2:
                    System.out.println("请输入要删除的学生id:");
                    String id1 = sc.next();
                    deleteStudent(id1, students);
                    break;
                case 3:
                    System.out.println("请输入要修改的学生id:");
                    String id2 = sc.next();
                    editStudent(id2, students);
                    break;
                case 4:
                    selectStudent(students);
                    break;
                case 5:
                    System.out.println("感谢使用,再见!");
                    break loop;
                default:
                    System.out.println("输入错误请重新输入1-5");
            }
        }

    }

    private static void selectStudent(ArrayList<Student> students) {
        if (students.size() == 0) {
            System.out.println("当前无学生信息,请添加后再查询");
        }else {
            System.out.println("id   姓名   年龄   家庭住址");
            for (int i = 0; i < students.size(); i++) {
                Student student = students.get(i);
                System.out.println(student.getId()+"   "+student.getName()+"   "+student.getAge()+"   "+student.getAddress());
            }
        }

    }

    private static void editStudent(String id,ArrayList<Student> students) {
        boolean flag = false;
        for (int i = 0; i < students.size(); i++) {
            if (id.equals(students.get(i).getId())){
                flag = true;
                System.out.println("请输入要修改的学生姓名:");
                Scanner sc = new Scanner(System.in);
                students.get(i).setName(sc.next());
                System.out.println("请输入要修改的学生年龄:");
                students.get(i).setAge(sc.nextInt());
                System.out.println("请输入要修改的学生地址:");
                students.get(i).setAddress(sc.next());
            }
        }
        if (!flag) {
            System.out.println("id不存在,将回到初始菜单");
        }
    }

    private static void deleteStudent(String id,ArrayList<Student> students) {
        boolean flag = false;
        for (int i = 0; i < students.size(); i++) {
            String uid = students.get(i).getId();
            if (uid.equals(id)) {
                students.remove(i);
                flag = true;
                System.out.println("id为"+id+"的学生信息删除成功!");
                break;
            }
        }
        if (!flag) {
            System.out.println("id不存在,删除失败,将回到初始菜单...");
        }
    }

    private static boolean addStudent(ArrayList<Student> list) {
        System.out.println("请输入录入学生的id:");
        Scanner sc = new Scanner(System.in);
        String id = sc.next();
        while (true){
            for (int i = 0; i < list.size(); i++) {
                if (id.equals(list.get(i).getId())){
                    System.out.println("录入id已存在,请重新输入:");
                    id = sc.next();
                }
            }
            break;
        }
        System.out.println("请输入录入学生的姓名:");
        String name = sc.next();
        System.out.println("请输入录入学生的年龄:");
        int age = sc.nextInt();
        System.out.println("请输入录入学生的地址:");
        String address = sc.next();
        list.add(new Student(id,name,age,address));
        return true;
    }
}

升级系统

需求

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

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

分析

登录界面

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次机会

忘记密码

  • 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
  • 键盘录入身份证号码和手机号码
  • 判断当前用户的身份证号码和手机号码是否一致,如果一致,则提示输入密码,进行修改。如果不一致,则提示:账号信息不匹配,修改失败。

验证码规则

  • 长度为5
  • 由4位大写或者小写字母和1位数字组成,同一个字母可重复
  • 数字可以出现在任意位置
  • 比如:aQa1K

用户登录前台代码

studentUser.java:

//StudentUser.java
package listDemo;

public class studentUser {
    private  String name;
    private String password;
    private String cardid;
    private String phone;

    public studentUser() {
    }

    public studentUser(String name, String password, String cardid, String phone) {
        this.name = name;
        this.password = password;
        this.cardid = cardid;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

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

    public String getCardid() {
        return cardid;
    }

    public void setCardid(String cardid) {
        this.cardid = cardid;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

studentFront.java:

//studentFront.java
package listDemo;

import javax.naming.Name;
import javax.sound.midi.Soundbank;
import java.awt.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class studentFront {
    public static void main(String[] args) {
        ArrayList<studentUser> users = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作1登录 2注册 3忘记密码 4退出系统");
            int choice = sc.nextInt();
            switch (choice){
                case 1:
                    login(users);
                    break;
                case 2:
                    register(users);
                    break;
                case 3:
                    findPassword(users);
                    break;
                case 4:
                    return;
                default:
                    System.out.println("输入错误请重新输入1-3");
            }
        }
    }
    private static String growCode(){
        StringBuilder code = new StringBuilder();
        char []word = new char[54];
        for (int i = 0; i < word.length; i++) {
            if(i<26){
                word[i] = (char)('a'+i);
            }else {
                word[i] = (char)('A'+i-26);
            }
        }
        char []newCode = new char[5];
        Random random = new Random();
        for (int i = 0; i < 4; i++) {
            int randomNum = random.nextInt(word.length);
            newCode[i] = word[randomNum];
        }
        int r = new Random().nextInt(10);
        char number = (char) (48+r);
        newCode[4] = number;
        int index = new Random().nextInt(5);
        char tmp = newCode[index];
        newCode[index] = newCode[4];
        newCode[4] = tmp;
        for (int i = 0; i < 5; i++) {
            code.append(newCode[i]);
        }
        return code.toString();
    }
    private static void login(ArrayList<studentUser> users) {
        System.out.println(users.size());
        Scanner sc = new Scanner(System.in);
        String username;
        String password;
        usernameloop:while(true){
            System.out.println("请输入用户名:");
            username = sc.nextLine();
            boolean flag = false;
            for (int i = 0; i < users.size(); i++) {
                if (username.equals(users.get(i).getName())){
                    flag = true;
                    break;
                    }
            }
            if (flag){
                break;
            }else {
                System.out.println("用户名未注册,请先注册再登录。如果要返回主界面,请输入1,否则输入任意内容继续");
                String choice = sc.nextLine(); // 使用nextLine()避免换行符问题

                if ("1".equals(choice)) {
                    return; // 直接退出登录方法,返回主界面
                } else {
                    continue; // 继续用户名输入循环
                }
            }
        }
        code:while(true){
            String code = growCode();
            System.out.println("验证码为:"+code);
            System.out.println("请输入验证码");
            String code2 = sc.nextLine();
            if (!code.equals(code2)) {
                System.out.println("验证码错误,请重新输入!");
                continue code;
            }
            for (int i = 0; i < 3; i++) {
                System.out.println("请输入密码:");
                password = sc.nextLine();
                boolean flag = false;
                for (int j = 0; j < users.size(); j++) {
                    if ((users.get(j).getName().equals(username)
                            &&users.get(j).getPassword().equals(password))){
                        flag = true;
                        break;
                    }
                }
                if (flag){
                    System.out.println("登录成功!");
                    return;
                }else {
                    System.out.println("用户名或密码错误!您还有"+(3-i-1)+"次机会");
                    continue;
                }
            }

        }

    }

    private static void findPassword(ArrayList<studentUser> users) {
        System.out.println("请输入用户名:");
        Scanner sc = new Scanner(System.in);
        String username;
        String cardid;
        String phone;
        username = sc.nextLine();
        boolean flag = false;
        for (int i = 0; i < users.size(); i++) {
            if (username.equals(users.get(i).getName())){
                flag = true;
                break;
            }
        }
        if (!flag){
            System.out.println("未注册,即将返回主界面...");
            return;
        }
        System.out.println("请输入身份证号码:");
        cardid = sc.nextLine();
        System.out.println("请输入手机号码:");
        phone = sc.nextLine();
        boolean flag2 = false;
        int index = 0;
        for (int j = 0; j < users.size(); j++) {
            if (cardid.equals(users.get(j).getCardid())&&phone.equals(users.get(j).getPhone())){
                index = j;
                flag2 = true;
            }
        }
        if (flag2){
            //一致
            System.out.println("请输入要修改的密码:");
            String newPassword = sc.nextLine();
            users.get(index).setPassword(newPassword);
            System.out.println("修改成功!");
        }else {
            System.out.println("账号信息不匹配,修改失败,返回主界面");
        }
    }

    private static void register(ArrayList<studentUser> users) {
        Scanner sc = new Scanner(System.in);
        String username;
        String password;
        String cardid;
        String phone;
        //输入用户名,用户名判断
        usernameloop:
        while (true) {
            System.out.println("请输入要注册的用户名");
            username = sc.nextLine();
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i).getName().equals(username)) {
                    System.out.println("用户名存在请重新输入:");
                    continue usernameloop;
                }
            }
            int len = username.length();
            int count = 0;

            if (len >= 3 && len <= 15) {
                for (int i = 0; i < username.length(); i++) {
                    if (!((username.charAt(i) >= '0' && username.charAt(i) <= '9') ||
                            (username.charAt(i) >= 'A' && username.charAt(i) <= 'Z') ||
                            (username.charAt(i) >= 'a' && username.charAt(i) <= 'z'))) {
                        System.out.println("输入用户名格式(只能是字母加数字的组合)错误,请重新输入:");
                        continue usernameloop; // 直接跳回用户名输入
                    } else {
                        if ((username.charAt(i) >= 'A' && username.charAt(i) <= 'Z')
                                || (username.charAt(i) >= 'a' && username.charAt(i) <= 'z')) {
                            count++;
                        }
                    }
                }
                if (count == 0) {
                    System.out.println("输入用户名格式(只能是字母加数字的组合,不能全是数字)错误,请重新输入:");
                    continue;
                } else {
                    break;
                }
            } else {
                System.out.println("用户名长度需在3-15位之间");
                continue;
            }

        }

        //输入密码
        while (true) {
            System.out.println("请输入密码:");
            password = sc.nextLine();
            System.out.println("请再次输入密码进行验证:");
            String password2 = sc.nextLine();
            if (!password.equals(password2)) {
                System.out.println("两次输入的密码不一样,请重新输入");
                continue;
            } else {
                break;
            }
        }
        //身份证号验证
        cardidloop:
        while (true) {
            System.out.println("请输入身份证号:");
            cardid = sc.nextLine();
            int len = cardid.length();
            if (len != 18) {
                System.out.println("长度必须为18位");
                continue cardidloop;
            }
            if (cardid.charAt(0) == '0') {
                System.out.println("输入错误,身份证号不能以0开头,请重新输入");
                continue;
            }
            for (int i = 0; i < cardid.length(); i++) {
                if (i < 17) {
                    if (cardid.charAt(i) < '0' || cardid.charAt(i) > '9') {
                        System.out.println("前17位必须都是数字!请重新输入");
                        break;
                    }
                } else {//最后一位
                    if (!(cardid.charAt(i) >= '0' && cardid.charAt(i) <= '9') ||
                            (cardid.charAt(i) == 'x' || cardid.charAt(i) == 'X')) {
                        System.out.println("最后一位i必须是数字或者大小写x,请重新输入");
                        continue cardidloop;
                    }
                }
            }
            break;
        }

        //电话号码验证
        passwordloop:
        while (true) {
            System.out.println("请输入手机号:");
            phone = sc.nextLine();
            int count1 = 0;
            if (phone.length() != 11) {
                System.out.println("手机号长度必须为11位,请重新输入");
                continue;
            }
            if (phone.charAt(0) == '0') {
                System.out.println("手机号不能以0开头,请重新输入");
                continue;
            }
            for (int i = 0; i < phone.length(); i++) {
                if (phone.charAt(i) < '0' && phone.charAt(i) > '9') {
                    System.out.println("输入的电话号码必须都是数字!请重新输入");
                    continue;
                }
                break;
            }

            users.add(new studentUser(username, password, cardid, phone));
            System.out.println("注册成功");
            break passwordloop;
        }
    }
}

合并前后台代码

package listDemo;

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

public class StudentSystemMain {
    // 存储所有用户和学生数据的集合
    private static ArrayList<StudentUser> users = new ArrayList<>();
    private static ArrayList<Student> students = new ArrayList<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 主循环
        while (true) {
            System.out.println("\n欢迎来到学生管理系统");
            System.out.println("请选择操作:1登录 2注册 3忘记密码 4退出系统");
            System.out.print("请输入您的选择: ");

            int choice = sc.nextInt();
            sc.nextLine(); // 清除输入缓冲

            switch (choice) {
                case 1:
                    login();
                    break;
                case 2:
                    register();
                    break;
                case 3:
                    findPassword();
                    break;
                case 4:
                    System.out.println("感谢使用,再见!");
                    return;
                default:
                    System.out.println("输入错误,请重新输入1-4");
            }
        }
    }

    // 登录功能
    private static void login() {
        Scanner sc = new Scanner(System.in);
        String username;
        String password;

        // 用户名验证
        while (true) {
            System.out.print("请输入用户名: ");
            username = sc.nextLine();

            boolean exists = false;
            for (StudentUser user : users) {
                if (username.equals(user.getName())) {
                    exists = true;
                    break;
                }
            }

            if (exists) {
                break;
            } else {
                System.out.println("用户名未注册,请先注册");
                return;
            }
        }

        // 验证码验证
        while (true) {
            String code = generateCode();
            System.out.println("验证码为: " + code);
            System.out.print("请输入验证码: ");
            String inputCode = sc.nextLine();

            if (!code.equals(inputCode)) {
                System.out.println("验证码错误,请重新输入!");
            } else {
                break;
            }
        }

        // 密码验证(3次机会)
        for (int i = 0; i < 3; i++) {
            System.out.print("请输入密码: ");
            password = sc.nextLine();

            boolean valid = false;
            for (StudentUser user : users) {
                if (username.equals(user.getName()) && password.equals(user.getPassword())) {
                    valid = true;
                    break;
                }
            }

            if (valid) {
                System.out.println("登录成功!");
                // 进入学生管理系统
                startStudentManagement();
                return;
            } else {
                System.out.println("用户名或密码错误!您还有" + (2 - i) + "次机会");
            }
        }
        System.out.println("登录失败,返回主菜单");
    }

    // 注册功能
    private static void register() {
        Scanner sc = new Scanner(System.in);
        String username;
        String password;
        String cardid;
        String phone;

        // 用户名验证
        usernameLoop:
        while (true) {
            System.out.print("请输入用户名(3-15位字母数字组合): ");
            username = sc.nextLine();

            // 检查长度
            if (username.length() < 3 || username.length() > 15) {
                System.out.println("用户名长度必须在3-15位之间");
                continue;
            }

            // 检查唯一性
            for (StudentUser user : users) {
                if (username.equals(user.getName())) {
                    System.out.println("用户名已存在,请重新输入");
                    continue usernameLoop;
                }
            }

            // 检查格式(字母+数字组合,不能纯数字)
            boolean hasLetter = false;
            boolean valid = true;
            for (char c : username.toCharArray()) {
                if (Character.isLetter(c)) {
                    hasLetter = true;
                } else if (!Character.isDigit(c)) {
                    valid = false;
                    break;
                }
            }

            if (!valid) {
                System.out.println("用户名只能包含字母和数字");
            } else if (!hasLetter) {
                System.out.println("用户名不能是纯数字");
            } else {
                break;
            }
        }

        // 密码验证
        while (true) {
            System.out.print("请输入密码: ");
            password = sc.nextLine();
            System.out.print("请再次输入密码: ");
            String password2 = sc.nextLine();

            if (!password.equals(password2)) {
                System.out.println("两次输入的密码不一致,请重新输入");
            } else {
                break;
            }
        }

        // 身份证验证
        cardidLoop:
        while (true) {
            System.out.print("请输入身份证号(18位): ");
            cardid = sc.nextLine();

            // 检查长度
            if (cardid.length() != 18) {
                System.out.println("身份证号长度必须为18位");
                continue;
            }

            // 检查首位不能为0
            if (cardid.charAt(0) == '0') {
                System.out.println("身份证号不能以0开头");
                continue;
            }

            // 检查前17位是否为数字
            for (int i = 0; i < 17; i++) {
                if (!Character.isDigit(cardid.charAt(i))) {
                    System.out.println("前17位必须都是数字");
                    continue cardidLoop;
                }
            }

            // 检查最后一位
            char lastChar = cardid.charAt(17);
            if (!Character.isDigit(lastChar) && lastChar != 'X' && lastChar != 'x') {
                System.out.println("最后一位必须是数字或X");
            } else {
                break;
            }
        }

        // 手机号验证
        phoneLoop:
        while (true) {
            System.out.print("请输入手机号(11位): ");
            phone = sc.nextLine();

            // 检查长度
            if (phone.length() != 11) {
                System.out.println("手机号长度必须为11位");
                continue;
            }

            // 检查首位不能为0
            if (phone.charAt(0) == '0') {
                System.out.println("手机号不能以0开头");
                continue;
            }

            // 检查是否全为数字
            for (char c : phone.toCharArray()) {
                if (!Character.isDigit(c)) {
                    System.out.println("手机号必须都是数字");
                    continue phoneLoop;
                }
            }
            break;
        }

        // 创建新用户
        users.add(new StudentUser(username, password, cardid, phone));
        System.out.println("注册成功!");
    }

    // 忘记密码功能
    private static void findPassword() {
        Scanner sc = new Scanner(System.in);

        System.out.print("请输入用户名: ");
        String username = sc.nextLine();

        // 检查用户是否存在
        StudentUser targetUser = null;
        for (StudentUser user : users) {
            if (username.equals(user.getName())) {
                targetUser = user;
                break;
            }
        }

        if (targetUser == null) {
            System.out.println("用户名未注册");
            return;
        }

        // 验证身份信息
        System.out.print("请输入身份证号: ");
        String cardid = sc.nextLine();
        System.out.print("请输入手机号: ");
        String phone = sc.nextLine();

        if (!cardid.equals(targetUser.getCardid()) || !phone.equals(targetUser.getPhone())) {
            System.out.println("身份信息不匹配");
            return;
        }

        // 设置新密码
        while (true) {
            System.out.print("请输入新密码: ");
            String newPassword = sc.nextLine();
            System.out.print("请再次输入新密码: ");
            String newPassword2 = sc.nextLine();

            if (!newPassword.equals(newPassword2)) {
                System.out.println("两次输入的密码不一致");
            } else {
                targetUser.setPassword(newPassword);
                System.out.println("密码修改成功!");
                break;
            }
        }
    }

    // 生成验证码
    private static String generateCode() {
        StringBuilder code = new StringBuilder();
        Random random = new Random();

        // 添加4个字母
        for (int i = 0; i < 4; i++) {
            char letter = (char) (random.nextBoolean() ?
                    'A' + random.nextInt(26) : 'a' + random.nextInt(26));
            code.append(letter);
        }

        // 添加1个数字
        code.append(random.nextInt(10));

        // 随机打乱顺序
        char[] chars = code.toString().toCharArray();
        for (int i = 0; i < chars.length; i++) {
            int j = random.nextInt(chars.length);
            char temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }

        return new String(chars);
    }

    // 学生管理系统主菜单
    private static void startStudentManagement() {
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("\n---------------------------------");
            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.print("请输入您的选择: ");

            int choice = sc.nextInt();
            sc.nextLine(); // 清除输入缓冲

            switch (choice) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    deleteStudent();
                    break;
                case 3:
                    editStudent();
                    break;
                case 4:
                    selectStudent();
                    break;
                case 5:
                    System.out.println("返回主菜单...");
                    return;
                default:
                    System.out.println("输入错误,请重新输入1-5");
            }
        }
    }

    // 添加学生
    private static void addStudent() {
        Scanner sc = new Scanner(System.in);

        String id;
        while (true) {
            System.out.print("请输入学生ID: ");
            id = sc.nextLine();

            // 检查ID是否唯一
            boolean exists = false;
            for (Student student : students) {
                if (id.equals(student.getId())) {
                    exists = true;
                    break;
                }
            }

            if (exists) {
                System.out.println("该ID已存在,请重新输入");
            } else {
                break;
            }
        }

        System.out.print("请输入学生姓名: ");
        String name = sc.nextLine();

        System.out.print("请输入学生年龄: ");
        int age = sc.nextInt();
        sc.nextLine(); // 清除输入缓冲

        System.out.print("请输入学生家庭住址: ");
        String address = sc.nextLine();

        // 创建新学生
        students.add(new Student(id, name, age, address));
        System.out.println("添加成功!");
    }

    // 删除学生
    private static void deleteStudent() {
        if (students.isEmpty()) {
            System.out.println("当前无学生信息");
            return;
        }

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入要删除的学生ID: ");
        String id = sc.nextLine();

        boolean found = false;
        for (int i = 0; i < students.size(); i++) {
            if (id.equals(students.get(i).getId())) {
                students.remove(i);
                found = true;
                System.out.println("删除成功!");
                break;
            }
        }

        if (!found) {
            System.out.println("未找到该ID的学生");
        }
    }

    // 修改学生
    private static void editStudent() {
        if (students.isEmpty()) {
            System.out.println("当前无学生信息");
            return;
        }

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入要修改的学生ID: ");
        String id = sc.nextLine();

        Student target = null;
        for (Student student : students) {
            if (id.equals(student.getId())) {
                target = student;
                break;
            }
        }

        if (target == null) {
            System.out.println("未找到该ID的学生");
            return;
        }

        System.out.print("请输入新姓名(" + target.getName() + "): ");
        String newName = sc.nextLine();
        if (!newName.isEmpty()) {
            target.setName(newName);
        }

        System.out.print("请输入新年龄(" + target.getAge() + "): ");
        String ageInput = sc.nextLine();
        if (!ageInput.isEmpty()) {
            try {
                int newAge = Integer.parseInt(ageInput);
                target.setAge(newAge);
            } catch (NumberFormatException e) {
                System.out.println("年龄格式无效,保持不变");
            }
        }

        System.out.print("请输入新地址(" + target.getAddress() + "): ");
        String newAddress = sc.nextLine();
        if (!newAddress.isEmpty()) {
            target.setAddress(newAddress);
        }

        System.out.println("修改成功!");
    }

    // 查询学生
    private static void selectStudent() {
        if (students.isEmpty()) {
            System.out.println("当前无学生信息");
            return;
        }

        System.out.println("ID\t\t姓名\t年龄\t家庭住址");
        System.out.println("---------------------------------");
        for (Student student : students) {
            System.out.printf("%-10s\t%-5s\t%-3d\t%-10s%n",
                    student.getId(),
                    student.getName(),
                    student.getAge(),
                    student.getAddress());
        }
    }

    // 学生类
    static 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;
        }

        // Getter和Setter方法
        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 getAddress() { return address; }
        public void setAddress(String address) { this.address = address; }
    }

    // 用户类
    static class StudentUser {
        private String name;
        private String password;
        private String cardid;
        private String phone;

        public StudentUser() {}

        public StudentUser(String name, String password, String cardid, String phone) {
            this.name = name;
            this.password = password;
            this.cardid = cardid;
            this.phone = phone;
        }

        // Getter和Setter方法
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
        public String getPassword() { return password; }
        public void setPassword(String password) { this.password = password; }
        public String getCardid() { return cardid; }
        public void setCardid(String cardid) { this.cardid = cardid; }
        public String getPhone() { return phone; }
        public void setPhone(String phone) { this.phone = phone; }
    }
}

系统小结

  • 要注意在对用户名什么的进行判断时,要用一个标志符进行判断,不然就会将每一个用户名都与所输入的用户名进行比较之后,报错显示。因为一个用户名不可能与所有用户名都相等,所以不要去判断它不相等的情况,只去判断它相等,标识符设置为true,跳出当前循环。
  • 若想用户名什么的输入错误之后,再让用户重新输入的话。就用高级语法在while(true)前面加一个"名词(××loop):",想让它再继续就用continue ××loop;即可

这篇文章就先更到这里,接下来的内容可查看我的下一篇博客,希望对你有帮助,感谢观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值