利用JAVA实现学生管理系统

先给大家看一看代码的运行结果:

 

1. 第一步:我们首先要写出学生类,利用面向对象思想,将学生的信息封装成一个类,里面定义好学生的属性,方法等

//	属性:id、姓名、年龄、家庭住址
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;
    }
}

 

 2.第二步:当然是要创建User用户类咯,没有用户,我们怎么实现登录,查看学生信息,退出等操作呢

里面的属性有用户名,密码等(你也可以按照自己的需求和想法多封装几个属性或者方法)

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

 3.第三步:我们就要进行当前模块比较核心的逻辑代码了:

实现学生信息的增,删,改,查操作.

首先我们要构建一个大体模型,大家可以思考,要怎么实现用户想选择哪个操作呢?我们需要做的是:

用户选哪个操作,我们就进行哪一个操作的逻辑.所以大家应该明白了.  没错,我们可以利用选择结构,

用户想操作哪个我们就进入那个逻辑代码,并把逻辑代码包装成一个方法,这样会使代码更有阅读性!

需要注意的是,我们可以把用户选择的1,2,3,4赋给对应的常量(用final修饰的)这样也会使得代码更易

读!

剩下每个操作的逻辑我在代码中都有注释,大家仔细看应该就能理解

public class StudentSystem {
    //常量:使得代码更易阅读和维护
    //静态:因为下面main是静态,只能访问静态;final:不想被别人改写
    private static final String ADD_STUDENT = "1";
    private static final String DELETE_STUDENT = "2";
    private static final String UPDATE_STUDENT = "3";
    private static final String QUERY_STUDENT = "4";
    private static final String EXIT = "5";

    public static void startStudentSystem() {
        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 ADD_STUDENT -> addStudent(list);
                case DELETE_STUDENT -> deleteStudent(list);
                case UPDATE_STUDENT -> updateStudent(list);
                case QUERY_STUDENT -> queryStudent(list);
                case EXIT -> {
                    System.out.println("退出");
                    /*System.exit(0);*/  //停止虚拟机运行,即强制停止代码运行

                    //还可以用loop
                    break loop;
                }
                default -> System.out.println("输入错误,请再次输入!");
            }
        }
    }

    public static void addStudent(ArrayList<Student> list) {
        System.out.println("添加学生");
        Scanner sc = new Scanner(System.in);
        String id = null;
        while (true) {
            System.out.println("请输入学生的id:");
            id = sc.next();
            boolean flag = contains(list, id);
            if (flag) {
                System.out.println("该id已存在,请重新输入");
            } else {
                break;
            }
        }
        System.out.println("请输入学生的姓名:");
        String name = sc.next();
        System.out.println("请输入学生的年龄:");
        int age = sc.nextInt();
        System.out.println("请输入学生的家庭住址:");
        String address = sc.next();
        Student student = new Student(id, name, age, address);
        list.add(student);

    }

    public static void deleteStudent(ArrayList<Student> list) {
        System.out.println("删除学生");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的id:");
        String id = sc.next();
        int index = getIndex(list, id);
        if (index == -1) {
            System.out.println("id不存在,删除失败!");
            return;
        }
        if (index >= 0) {
            list.remove(index);
            System.out.println("删除成功!");
        }
    }

    public static void updateStudent(ArrayList<Student> list) {
        System.out.println("修改学生");
        Scanner sc = new Scanner(System.in);
        String id = sc.next();
        int index = getIndex(list, id);
        if (index == -1) {
            System.out.println("id不存在");
            return;
        }
        System.out.println("请输入要修改的学生姓名:");
        String newName = sc.next();
        System.out.println("请输入要修改的学生年龄:");
        int newAge = sc.nextInt();
        System.out.println("请输入要修改的学生家庭住址:");
        String newAdress = sc.next();
        Student student = new Student(id, newName, newAge, newAdress);//将修改的内容放在创建的新对象
        list.set(index, student);//将新对象的内容改进去
    }

    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 student = list.get(i);
            System.out.println(student.getId() + "\t" + student.getName() + "\t" + student.getAge() + "\t" + student.getAddress());
        }
    }

    public static boolean contains(ArrayList<Student> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return true;
            }
        }
        return false;
    }

    public static int getIndex(ArrayList<Student> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return i;
            }
        }
        return -1;
    }
}

 

第四步:也是最重要的一步,我们要实现用户注册,登录,忘记密码,退出的操作了.也就是登陆学生管理系统的整体逻辑

每一块代码我都有对应的注释

package com.itheima.studentsystem;

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

public class App {
    //因为静态只能访问静态所以static修饰
    static ArrayList<User> list = new ArrayList<>();
    //静态代码块:进行初始化,多次调用main方法时,不用多次创建新集合,就不会浪费内存
    static{
        list.add(new User("张三","123456","001","110"));
    }

    public static void main(String[] args) {
        //ArrayList<User> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        loop:
        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("已退出!");
                    break loop;
                }
                default -> System.out.println("输入错误!");
            }
        }
    }


    private static void login(ArrayList<User> list) {
        System.out.println("---注册---");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.next();
        if (!(contains(list, username))) {
            System.out.println("用户名未注册,请先注册!");
            return;//直接结束方法
        }

        System.out.println("请输入密码:");
        String password = sc.next();
        while (true) {
            System.out.println("请输入验证码:");
            String right_verification_code = verification_code_generate();
            System.out.println(right_verification_code);
            String verification_code = sc.next();
            boolean flag = verification_code_check(verification_code, right_verification_code);
            if (!flag) {
                System.out.println("验证码输入错误,请重新输入!");
                continue;
            } else {
                System.out.println("验证码输入正确!");
                break;
            }
        }


        //当代码执行到这里,说明用户名存在且验证码正确,判断用户名和密码匹配是否正确
        int i = 2;
        while (i >= 0) {
            //封装思想
            User userInfo = new User(username, password, null, null);
            if (!(checkPassword(list, userInfo))) {
                if (i > 0) {
                    System.out.println("密码输入错误,你还有" + i + "次机会");
                    System.out.println("请输入密码:");
                    password = sc.next();
                }
                if (i == 0) {
                    System.out.println("密码输入次数已用完,即将退出页面!");
                    return;
                }
                i--;
                continue;
            } else {
                System.out.println("密码正确,登录成功!");
                StudentSystem studentSystem = new StudentSystem();
                studentSystem.startStudentSystem();
                break;
            }
        }
    }


    private static void register(ArrayList<User> list) {
        System.out.println("---注册---");
        Scanner sc = new Scanner(System.in);
        String username = null;//先定义,否则出了while下面就用不了
        while (true) {
            System.out.println("请输入用户名:");
            username = sc.next();
            if (!(checkUsername(username))) {
                System.out.println("用户名格式错误,请重新输入用户名!");
                continue;
            }
            //代码执行到这说明此时格式是正确的,判断唯一性
            boolean flag = contains(list, username);
            if (flag) {
                System.out.println("用户名重复,请重新输入!");
            } else {
                System.out.println("用户名创建成功!");
                break;
            }
        }

        String password = null;
        while (true) {
            System.out.println("请输入密码:");
            password = sc.next();
            System.out.println("请再次输入密码:");
            String password2 = sc.next();
            if (!(password.equals(password2))) {
                System.out.println("密码输入错误,请重新输入!");
                continue;
            } else {
                System.out.println("密码创建成功!");
                break;
            }
        }

        String idNumber = null;
        while (true) {
            System.out.println("请输入身份证号码:");
            idNumber = sc.next();
            if (!(checkIdNumber(idNumber))) {
                System.out.println("身份证格式错误,请重新输入!");
                continue;
            } else {
                System.out.println("身份证输入成功!");
                break;
            }
        }

        String phoneNumber = null;
        while (true) {
            System.out.println("请输入手机号码:");
            phoneNumber = sc.next();
            if (!(checkPhoneNumber(phoneNumber))) {
                System.out.println("手机号格式错误,请重新输入!");
                continue;
            } else {
                System.out.println("手机号输入成功");
                break;
            }
        }

        //把信息填到对象中
        User user = new User(username, password, idNumber, phoneNumber);
        //再把对象存入集合中
        list.add(user);

        System.out.println("注册成功!");
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            System.out.println(u.getUsername() + " " + u.getIdNumber() + " " + u.getPhoneNumber() + " " + u.getPassword());
        }
    }


    private static void forgetPassword(ArrayList<User> list) {
        System.out.println("---忘记密码---");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的用户名:");
        String username = sc.next();
        if (!(contains(list, username))){
            System.out.println("改用户名不存在");
            return;
        }
        System.out.println("请输入身份证号码");
        String idNumber = sc.next();
        System.out.println("请输入手机号码:");
        String phoneNumber = sc.next();
        User userInfo = new User(null,null,idNumber,phoneNumber);
        int index = checkUserInfo(list,userInfo);
        if(index < 0 ){
            System.out.println("账号信息不匹配,修改失败!");
            return;
        }else{
            System.out.println("账号信息匹配成功!");
            System.out.println("请输入要修改的密码:");
            String newPassword = sc.next();
            list.get(index).setPassword(newPassword);
            System.out.println("您的新密码已修改为"+newPassword+",即将退出此页面");
        }
    }

    //返回索引才能进行修改
    private static int checkUserInfo(ArrayList<User> list, User userInfo) {
        for (int i = 0; i < list.size(); i++) {
            User rightUserInfo = list.get(i);
            if(rightUserInfo.getIdNumber().equals(userInfo.getIdNumber()) && rightUserInfo.getPhoneNumber().equals(userInfo.getPhoneNumber())){
                return i;
            }
        }
        return -1;
    }


    private static boolean contains(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getUsername().equals(username)) {
                return true;
            }
        }
        return false;
    }

    private static boolean checkUsername(String username) {
        int len = username.length();//赋给一个变量,在下面就不用多次调用字符串方法了,代码更简洁
        if (len < 3 || len > 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++;
                break;
            }
        }
        return count > 0;
    }

    private static boolean checkIdNumber(String idNumber) {
        int len = idNumber.length();
        for (int i = 0; i < idNumber.length(); i++) {
            if (len != 18) {
                return false;
            }
        }
        if (idNumber.charAt(0) == '0') {
            return false;
        }

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

        char c = idNumber.charAt(17);
        if (!(c == 'x' || c == 'X' || c >= '0' && c <= '9')) {
            return false;
        }
        return true;
    }

    private static boolean checkPhoneNumber(String phoneNumber) {
        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;
    }

    private static boolean verification_code_check(String verification_code, String right_verification_code) {
        if (verification_code.equalsIgnoreCase(right_verification_code)) {
            return true;
        } else {
            return false;
        }
    }

    private static String verification_code_generate() {
        //集合做法
        //将大小写字母存到一个集合中
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char) ('A' + i)); //也可以把'A'换成97
            list.add((char) ('a' + i));
        }
        //将集合中抽出4个随机的字母存入一个容器中
        StringBuilder sb = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIndex = r.nextInt(list.size());
            sb.append(list.get(randomIndex));
        }
        //将随机数字添加到容器末尾
        int number = r.nextInt(10);
        sb.append(number);
        //将容器转化为字符再转为字符数组以便修改内容,不用字符是因为,每个字符不能进行交换
        char[] chs = sb.toString().toCharArray();
        //只要将最后一位索引(数字)与随机索引交换位置即可
        int randomIndex = r.nextInt(chs.length);
        char temp = chs[chs.length - 1];
        chs[chs.length - 1] = chs[randomIndex];
        chs[randomIndex] = temp;
        String verification_code = new String(chs);
        return verification_code;

        //数组做法
        /*String verification_code = "";
        //将大小写字母存在一个数组中
        char[] chs = new char[52];//大写加小写字母52个
        for (int i = 0; i < chs.length; i++) {
            if (i < 26) {
                chs[i] = (char) (97 + i);
            } else {
                chs[i] = (char) (65 + i - 26);//因为此时i是从26开始的所以要减去26从0开始,也就是65A开始赋值
            }
        }

        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            //生成随机索引
            int randomIndex = r.nextInt(chs.length);
            verification_code += chs[randomIndex];
        }
        //随机生成一位数字
        int number = r.nextInt(10);
        verification_code += number;
        char[] ver = verification_code.toCharArray();
        for (int i = 0; i < ver.length; i++) {
            int ramdomIndex = r.nextInt(ver.length);
            char temp = ver[i];
            ver[i] = ver[ramdomIndex];
            ver[ramdomIndex] = temp;
        }
        String verification_code1 = new String(ver);
        return verification_code1;*/
    }

    private static boolean checkPassword(ArrayList<User> list, User userInfo) {
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (user.getUsername().equals(userInfo.getUsername()) && user.getPassword().equals(userInfo.getPassword())) {
                return true;
            }
        }
        return false;
    }

}

 最后,相信大家都看明白了,建议大家可以离开答案自己敲一遍代码哦!!

 

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java利用MySQL实现学生信息管理系统的主要步骤如下: 1. 创建数据库和表:首先,需要在MySQL中创建一个适当的数据库,用于存储学生信息。然后,创建一个学生表,其中包含学生的各个属性,如学号、姓名、年龄、性别等。 2. 连接数据库:使用Java的JDBC API连接MySQL数据库。在Java程序中,可以使用相应的JDBC驱动程序来连接数据库,并定义连接字符串、用户名和密码。 3. 编写Java类和方法:开始编写Java类和方法,用于各种操作,如插入、删除、更新和查询学生信息。 4. 插入学生信息:通过Java程序,向学生表中插入学生的各项信息。可以通过定义一个插入方法,在方法内部使用SQL语句将学生信息插入数据库。 5. 删除和更新学生信息:通过Java程序,可以根据学号或其他条件来删除和更新学生的信息。同样,可以定义相应的方法来执行这些操作。 6. 查询学生信息:可以通过Java程序实现各种查询功能,如根据学号查询学生信息、查询全部学生信息等。定义相应的查询方法,并通过执行SQL语句从数据库中获取查询结果。 7. 展示学生信息:通过Java程序将查询结果展示在用户界面上,可以使用图形用户界面(GUI)或命令行界面(CLI)等方式展示。 总之,Java利用MySQL实现学生信息管理系统需要创建数据库和表、连接数据库、编写Java类和方法来实现各种操作,并将查询结果展示给用户。这样可以方便地对学生信息进行管理和查询。 ### 回答2: 学生信息管理系统使用Java语言结合MySQL数据库实现,可以通过以下几个步骤: 1. 创建MySQL数据库:首先在MySQL中创建一个数据库,用于存储学生的各种信息。可以通过MySQL的命令行或者可视化工具进行创建。 2. 创建学生信息表:在数据库中创建一个学生信息表,包含学生的各种字段,如学号、姓名、性别、年龄等。可以使用MySQL的CREATE TABLE语句来创建表格。 3. 使用Java连接MySQL:在Java代码中使用JDBC API来连接MySQL数据库。导入相应的JDBC库文件,创建数据库连接字符串,并使用getConnection()方法连接到MySQL数据库。 4. 实现学生信息的增删改查功能:通过执行SQL语句,实现学生信息的增加、删除、修改和查询功能。可以使用Java的PreparedStatement或Statement来执行SQL语句。 5. 编写用户界面:通过Java的GUI工具包(如Swing或JavaFX)编写学生信息管理系统的用户界面。可以添加按钮、文本框等组件,用于用户的输入和显示。 6. 实现用户交互:将用户的操作与数据库的增删改查功能进行关联。例如,当用户点击“添加”按钮时,将用户输入的信息插入到数据库中;当用户点击“查询”按钮时,从数据库中查询符合条件的学生信息,并在界面上显示出来。 7. 异常处理和数据校验:对用户的输入数据进行合法性校验,例如判定学生年龄是否为数字等。同时,要在代码中进行异常处理,防止程序崩溃或出错。 通过以上步骤,就可以实现一个基于Java和MySQL的学生信息管理系统。用户可以通过界面进行学生信息的增删改查操作,数据将被存储在MySQL数据库中,实现数据的持久化。 ### 回答3: Java利用MySQL实现学生信息管理系统是一种常见的做法。MySQL是一种开源的关系型数据库,而Java是一种广泛使用的面向对象编程语言,二者结合可以实现学生信息的增删改查等功能。 首先,通过Java可以建立数据库连接,使用MySQL提供的JDBC驱动程序完成数据库连接的操作。连接成功后,可以通过执行SQL语句来创建学生信息相关的表,并定义表中的字段,例如学生的学号、姓名、年龄、性别等信息。 接下来,通过Java可以实现学生信息的增删改查功能。通过执行相应的SQL语句,可以将学生信息插入到数据库中,或者从数据库中删除学生信息。对于修改学生信息的操作,可以先查询到需要修改的学生信息,然后用新的信息更新数据库中的记录。对于查询学生信息的功能,可以根据不同的条件编写SQL查询语句,例如根据学号查询、根据姓名查询等。 此外,Java还可以实现学生信息管理系统的用户界面。可以使用Java的GUI库,如Swing或JavaFX,设计出一个用户友好的界面,方便用户输入与显示学生信息。例如,可以用文本框接收用户输入的学生信息,或者用表格显示从数据库中查询到的学生信息。 总之,Java利用MySQL实现学生信息管理系统是一种强大而灵活的方法。通过Java的编程能力与MySQL的数据存储能力相结合,可以达到高效地管理学生信息的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值