这是小生第一次发表博客,比较紧张哈哈哈。

小生是一名Java初学者,经过一两个月的学习,对Java基础和Java面向对象的思想有一定的掌握,并使用数组的方式,结合所学知识,写出来这一款Java版学生管理系统,可能写的不是特别好,之前也写过C、Python版本的学生管理系统,可能受到了前者影响,所以就能快速的写出来一款Java版,如果写的不好,还希望大家能够指点指点,我会改进,哈哈哈

io学生管理系统 java 学生系统管理系统java_后端

这边小生采用的是Jetbrians中的Intellij IDEA和Clion,Clion我们知道主要是用来C/C++开发的,那这里主要使用它来完成由Java通过JNI技术之后传过来的.h的头文件,对头文件里面需要由C完成的函数功能实现进行处理,因为我们知道Java是与平台无关的语言,加上Java本身也无法操作底层,当初小生在寻找Java的某部分函数时因找不到,所以顺便学习了JNI技术的使用,不过JNI技术确实挺好用的,还顺便巩固了C。

那么总体项目目录大致就是这样。

io学生管理系统 java 学生系统管理系统java_System_02

 看起来Development_Student_System包下看起来确实有点杂,但是为了类与类之间能够快速引用,小生也是不得已哈哈哈,那大家可以看到Development_Student_System包下有两个.dll文件,这两个就是由C完成的函数功能,然后通过动态链接库的方式进行封装到.dll文件给Java使用,而Development_Student_System_Development.h头文件就是由JNI技术生成的,并在Clion里面进行处理。

那么Test_Development_Student包下的Test类,则是程序开始的主类。

package Test_Development_Student;
import Development_Student_System.Development;
public class Test {
    @SuppressWarnings("all")
    public static void main(String... args) {
        while (true){
            Development.start();
        }
    }
}

然后通过循环进入到Development类的函数start,那么就是直接进入到Development类中。

package Development_Student_System;
import System_Student.Student;
import java.util.Scanner;

public class Development {

    static {
        // 使用JNI技术调用C

        /*
            因小生的文件目录跟大家是不一样的,所以若使用的话,
            请将Java_Project包及包下的所有文件,一起放在一个目录下
            并使用System.getProperty("user.id"),获取当前文件的目录
            并与Java_Project包拼接,例:
            System.load(System.getProperty("user.id") + "\\Java_Project\\" +
                "src\\Development_Student_System\\clear.dll");
            System.load(System.getProperty("user.id") + "\\Java_Project\\" +
                "src\\Development_Student_System\\time.dll");

            如果不行,直接将文件全路径写在System.load()函数中
            System.load("某盘:\\xx\\xx\\...\\Java_Project\\" +
                "src\\Development_Student_System\\clear.dll");
            System.load("某盘:\\xx\\xx\\...\\Java_Project\\" +
                "src\\Development_Student_System\\time.dll");
        */

        System.load(System.getProperty("user.id") + "\\Java_Project\\" +
                "src\\Development_Student_System\\clear.dll");
        System.load(System.getProperty("user.id") + "\\Java_Project\\" +
                "src\\Development_Student_System\\time.dll");
    }

    public final native void clear(); // 调用C程序的清除

    public final native void time(); // 调用C程序的时间

    protected Development(){} // 除了本包中的本类和子类、其他类可以创建,其他不允许

    protected static Student[] student = null;  // 静态数组

    public static final Scanner
            scanner = new Scanner(System.in);  // 静态常量输入流

    private static final Development development = new Development(); // 私有的静态常量对象

    // 使用创建学生类对象
    private final Creat_Student creat_student_at = new Creat_Student();

    // 使用修改学生类对象
    private final Update_Student update_student_at = new Update_Student();

    public boolean number_flag = false;
    
    public boolean creat_flag = false;

    public int index = 0; // 学生当前个数

    boolean delete_index_zero = false; // 当删除学生全部信息后,索引为0时

    boolean delete_function_execution = false;  // 当删除函数执行时

    @SuppressWarnings("all")
    public static final void enter_exit(){
        while (true){
            System.out.println();
            System.out.print("输入0退出:");
            if (scanner.hasNextInt()){
                if (scanner.nextInt() == 0){
                    development.time();
                    development.clear();
                    break;
                }
            }else {
                scanner.next();
            }
        }
    }

    @SuppressWarnings("all")
    private static int print_main(){
        // 打印主菜单
        development.clear();
        System.out.println("-----------Welcome To The Student Management System-----------");
        System.out.println("1. Create Student");
        System.out.println("2. Update Student");
        System.out.println("3. Delete Student");
        System.out.println("4. Select Student");
        System.out.println("5. Number Of Students");
        System.out.println("6. Exit System");
        System.out.print("input:");
        if (scanner.hasNextInt()){
            int number = scanner.nextInt();
            int zero_false_or_true = number != 0 ? number : 0;
            return zero_false_or_true;
        }else {
            String next = scanner.next();
            return -1;
        }
    }

    public static void start(){
        int number = print_main();
        if (number != -1){
            if (!(number < 1) && !(number >= 7)){
                switch (number){
                    case 1:
                        development.creat_flag = development.creat_student();
                        break;
                    case 2:
                        development.update_student();
                        break;
                    case 3:
                        development.delete_student();
                        break;
                    case 4:
                        development.select_student();
                        break;
                    case 5:
                        development.number_flag = development.number_of_students();
                        break;
                    default:
                        System.out.println("感谢您的使用,再见!");
                        development.time();
                        System.out.println("两秒后退出系统");
                        development.time();
                        development.clear();
                        scanner.close();  // 关闭输入流
                        System.exit(0); // 退出系统
                }
            }else {
                System.err.println(String.format("%d 不在(1 - 6)的范围内", number));
                development.time();
                development.clear();
            }
        }else {
            System.err.println("请检查输入的是否不是整数!");
            System.out.println("请重新输入(两秒后刷新)");
            development.time();
            development.clear();
        }
    }

    // 创建学生信息
    public boolean creat_student(){
        development.clear();
        if (development.number_flag){

            // 全部信息被删除后
            if (development.delete_index_zero){
                for (int i = 0; i < development.index; i++)
                    student[i] = new Student();
                System.out.println("因数据为空,正在为您重新创建信息录入表");
                System.out.println("正在创建...");
                development.time();
                System.out.println("创建成功!正在退出....");
                development.time();
                development.clear();
                development.delete_index_zero = false;
                return false;
            }
            if (development.delete_function_execution)
                for (int i = 0; i < development.index + 1; ++i)
                    if (student[i] == null)
                        student[i] = new Student();

            while (true) {
                if (development.index < student.length) {
                    this.creat_student_at.creat_student_applet(development.index, scanner,
                            student, development);
                    development.index++;

                    System.out.print("是否继续 (1.是  2.否):");
                    String next = scanner.next();
                    if ("2".equals(next)){
                        System.out.println("正在退出....");
                        development.time();
                        break;
                    }
                    development.clear();
                } else {
                    development.time();
                    System.out.println("无法录入,原因如下:");
                    System.out.println();
                    System.out.println(String.format("学生总数为:%d", student.length));
                    System.err.println(String.format("当前学生个数为:%d", development.index));
                    System.out.println("已经达到您最开始输入的学生个数,若需要删除个别学生可转到3选项中" +
                            ",若需要重新录取学生个数,可选择5选项中");
                    enter_exit();
                    break;
                }
            }
            return true;
        }else {
            System.err.print("请先输入要录入的学生个数");
            enter_exit();
            return false;
        }
    }

    // 修改学生信息
    public void update_student(){
        development.clear();
        if (development.creat_flag)
        {
            this.update_student_at.update_student_applet
                    (development.index, scanner, development, student);
        }else {
            System.err.print("请先创建学生");
            enter_exit();
        }
    }

    @SuppressWarnings("all")
    // 删除学生信息
    public void delete_student(){
        development.clear();
        if (development.creat_flag){
            System.out.print("请输入要删除的学生序号:");
            if (scanner.hasNextInt()){
                int number = scanner.nextInt();
                if (number <= 0){
                    System.out.println("请重新进入....");
                }else {
                    if (number <= development.index) {
                        number -= 1;
                        System.out.print("一旦删除,就无法恢复!是否删除?(y / 其他字符):");
                        String yes_no = scanner.next();
                        if ("y".equalsIgnoreCase(yes_no)) {
                            for (int i = number; i < development.index; i++) {
                                if (i == development.index - 1)
                                    student[i] = null;
                                else
                                    student[i] = student[i + 1];
                            }
                            development.delete_function_execution = true;
                            System.out.println("正在删除....");
                            development.time();
                            System.out.println("删除成功!正在为您跳转....");
                            development.index--;
                            if (development.index == 0)
                                development.delete_index_zero = true;
                        }else
                            System.out.println("正在返回....");
                    }else {
                        System.out.println(String.format(
                                "无法删除序号为:%d, 该序号的数据为空~", number
                        ));
                        enter_exit();
                        return;
                    }
                }
            }else {
                String next = scanner.next();
                if ("exit".equalsIgnoreCase(next))
                    System.out.println("正在退出....");
                else
                    System.out.println(next + " 非数字的序号, 请重新进入....");
            }
            development.time();
            development.clear();
        }else {
            System.err.print("请先创建学生");
            enter_exit();
        }
    }

    // 查询学生信息
    public void select_student(){
        development.clear();
        if (development.creat_flag){
            for (int i = 0; i < development.index; ++i){
                if (student[i] != null)
                    System.out.println(
                            String.format("序号: %d   学号:  %d    姓名:  %s     年龄:  %d     年级:  %s     " +
                                            "班级:  %s     座位号:  %d", i + 1,
                                    student[i].getID(), student[i].getName(), student[i].getAge(),
                                    student[i].getGrade(), student[i].getClass_grade(),
                                    student[i].getSeat())
                    );
            }
        }
        else {
            if (development.index == 0 && development.delete_index_zero){
                System.out.println("数据空啦~");
                System.out.println("请重新录入学生信息或者重新录入学生人数哦~");
            }else {
                System.err.print("请先创建学生");
            }
        }
        enter_exit();
    }

    // 创建学生个数
    public boolean number_of_students(){
        development.clear();
        if (student == null) {
            System.out.print("input students number:");
            if (scanner.hasNextInt()) {
                int number = scanner.nextInt();
                if (number > 0) {
                    student = new Student[number];
                    for (int i = 0; i < student.length; i++){
                        student[i] = new Student();
                    }
                    System.out.println("输入成功!");
                    development.time();
                    development.clear();
                    return true;
                }else {
                    System.err.println("不能输入小于等于0的数字");
                    development.time();
                    development.clear();
                }
            } else {
                System.err.println("输入的不是整数");
                scanner.next();
                development.time();
                development.clear();
            }
            return false;
        }
        System.out.println(String.format("当前学生个数为:%d, 录入学生信息的个数为:%d", student.length, development.index));
        System.err.print("是否将学生个数全部清除?并重新录取?(y / 其他字符):");
        String yes_no = scanner.next();
        if ("y".equalsIgnoreCase(yes_no)){
            student = null;
            development.index = 0;
            System.out.println("数据已清空");
            development.time();
            System.out.println("两秒后返回");
            development.time();
            development.clear();
            development.creat_flag = false;
            return false;
        }else {
            System.out.println("两秒后返回");
            development.time();
            development.clear();
        }
        return true;
    }
}

 那么接下来就是通过start函数进入到主界面,然后通过用户输入的数字,进入到增删改查任意一个函数中进行对学生信息的处理。

那么学生信息就在Student类中。

package System_Student;

public class Student {

    public Student(){}
    private int ID; // 学生学号
    private String name; // 学生姓名
    private int age; // 学生年龄
    private String grade; // 学生年级
    private String class_grade; // 学生班级
    private int seat; // 学生座位号

    public void setID(int ID){
        this.ID = ID;
    }

    public int getID(){
        return this.ID;
    }

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

    public String getName(){
        return this.name;
    }

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

    public int getAge() {
        return this.age;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public String getGrade(){
        return this.grade;
    }

    public void setClass_grade(String class_grade){
        this.class_grade = class_grade;
    }

    public String getClass_grade(){
        return this.class_grade;
    }

    public void setSeat(int seat){
        this.seat = seat;
    }

    public int getSeat(){
        return this.seat;
    }
}

但是小生在写创建学生函数的时候,由于小生考虑了多个因素的发生,所以我把创建学生函数里面的内容写到一个新的类:Creat_Student类,然后写一个创建学生信息内部的程序函数,然后将学生信息再次分支写入各个函数之中,主要是应对录取学生信息时会发生的一些问题。

package Development_Student_System;
import System_Student.Student;
import java.util.Scanner;

public class Creat_Student {

    protected Creat_Student(){}

    /**
     函数名根据大小写判断功能实现的是什么,比如: ID就是学号
     */
    public void set_student_ID_name_age_grade_class_seat
            (Scanner scanner, Student[] student, int index)
    {
        while (true) {
            System.out.print("请输入学生学号:");
            if (scanner.hasNextInt()) {
                int number = scanner.nextInt();
                boolean flag = true;
                for (Student num : student){
                    if (num.getID() == number) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    student[index].setID(number);
                    break;
                }else {
                    System.out.println(String.format("%d 已经存在", number));
                }
            }else {
                String next = scanner.next();
                System.out.println(String.format(
                        "%s 不是一个合法的id", next
                ));
            }
        }
    }

    public void set_student_id_NAME_age_grade_class_seat
            (Scanner scanner, int index, Student[] student)
    {
        while (true) {
            System.out.print("请输入学生姓名:");
            String name = scanner.next();
            boolean flag = true;
            for (Student stu : student){
                if (name.equalsIgnoreCase(stu.getName())){
                    flag = false;
                    break;
                }
            }
            if (flag) {
                student[index].setName(name);
                break;
            }else {
                System.out.println(String.format("%s 已存在", name));
            }
        }
    }

    public void set_student_id_name_AGE_grade_class_seat
            (int index, Scanner scanner, Student[] student)
    {
        while (true) {
            System.out.print("请输入学生年龄:");
            if (scanner.hasNextInt()) {
                int age = scanner.nextInt();
                if (age > 0 && age < 101) {
                    student[index].setAge(age);
                    break;
                }else {
                    System.err.println(String.format("%d 不是合法的年龄", age));
                }
            }else {
                String next = scanner.next();
                System.out.println(String.format(
                        "%s 不是一个合法的年龄", next
                ));
            }
        }
    }

    public void set_student_id_name_age_GRADE_class_seat
            (int index, Student[] student, Scanner scanner)
    {
        System.out.print("请输入学生年级:");
        String grade = scanner.next();
        student[index].setGrade(grade);
    }

    public void set_student_id_name_age_grade_CLASS_seat
            (Student[] student, int index, Scanner scanner)
    {
        System.out.print("请输入学生班级:");
        String class_grade = scanner.next();
        student[index].setClass_grade(class_grade);
    }

    public void set_student_id_name_age_grade_class_SEAT
            (Student[] student, Scanner scanner, int index)
    {
        while (true) {
            System.out.print("请输入学生座位号:");
            if (scanner.hasNextInt()) {
                int seat = scanner.nextInt();
                boolean flag = true;
                for (Student num : student){
                    if (num.getSeat() == seat) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    student[index].setSeat(seat);
                    break;
                }else {
                    System.out.println(String.format("%d 已经存在", seat));
                }
            }else {
                String next = scanner.next();
                System.out.println(String.format(
                        "%s 不是一个合法的数字", next
                ));
            }
        }
    }

    // 创建学生信息的内部小程序
    public void creat_student_applet(int index, Scanner scanner,
                                      Student[] student, Development development)
    {
        // 学号
        this.set_student_ID_name_age_grade_class_seat(scanner, student, index);

        // 姓名
        this.set_student_id_NAME_age_grade_class_seat(scanner, index, student);

        //年龄
        this.set_student_id_name_AGE_grade_class_seat(index, scanner, student);

        // 年级
        this.set_student_id_name_age_GRADE_class_seat(index, student, scanner);

        // 班级
        this.set_student_id_name_age_grade_CLASS_seat(student, index, scanner);

        // 座位号
        this.set_student_id_name_age_grade_class_SEAT(student, scanner, index);

        System.out.println("录入成功");
    }
}

同样的道理,修改信息的函数,我也创建了一个Update_Student类,因为小生在写的时候发现,修改信息函数的功能很多与创建学生函数的功能很类似,所以为了不重复写多余的代码,小生为此做了很多的代码优化,在修改信息时因为会遇到修改名字什么的,所以为此我在修改信息类中创建了一个Creat_Student类的对象,由此来调用里面的一些函数,从而实现代码的不重复性,

package Development_Student_System;
import java.util.Scanner;
import System_Student.Student;

public class Update_Student {

    private final Creat_Student creat_student = new Creat_Student();

    protected Update_Student(){}

    public void update_student_context(int number, Development development,
                                       Scanner scanner, Student[] student)
    {
        development.clear();
        System.out.println("1. 学生学号修改");
        System.out.println("2. 学生姓名修改");
        System.out.println("3. 学生年龄修改");
        System.out.println("4. 学生年级修改");
        System.out.println("5. 学生班级修改");
        System.out.println("6. 学生座位号修改");
        System.out.print("请选择:");
        if (scanner.hasNextInt()){
            int student_select = scanner.nextInt();
            if (!(student_select <= 0) && !(student_select >= 7)){
                System.out.print("是否修改?1.y 2.n (一旦选择修改就必须修改, 无法回头):");
                String yes_no = scanner.next();
                if ("y".equalsIgnoreCase(yes_no)) {
                    System.out.println("正在为您跳转....");
                    development.time();
                    development.clear();
                    switch (student_select) {
                        case 1:
                            System.out.println("当前学生学号:" + student[number].getID());
                            this.creat_student.set_student_ID_name_age_grade_class_seat(
                                    scanner, student, number
                            );
                            break;
                        case 2:
                            System.out.println("当前学生姓名:" + student[number].getName());
                            this.creat_student.set_student_id_NAME_age_grade_class_seat(
                                    scanner, number, student
                            );
                            break;
                        case 3:
                            System.out.println("当前学生的年龄:" + student[number].getAge());
                            this.creat_student.set_student_id_name_AGE_grade_class_seat(
                                    number, scanner, student
                            );
                            break;
                        case 4:
                            System.out.println("当前学生的年级:" + student[number].getGrade());
                            this.creat_student.set_student_id_name_age_GRADE_class_seat(
                                    number, student, scanner
                            );
                            break;
                        case 5:
                            System.out.println("当前学生的班级:" + student[number].getClass_grade());
                            this.creat_student.set_student_id_name_age_grade_CLASS_seat(
                                    student, number, scanner
                            );
                            break;
                        case 6:
                            System.out.println("当前学生的座位号:" + student[number].getSeat());
                            this.creat_student.set_student_id_name_age_grade_class_SEAT(
                                    student, scanner, number
                            );
                            break;
                    }
                    System.out.println("修改成功!(两秒自动返回).....");
                }else {
                    System.out.println("正在返回....");
                }
            }else {
                System.err.println("请重新进入....");
            }
        }else {
            String next = scanner.next();
            System.err.println(next + " 不是数字,请重新进入...");
        }
    }

    // 修改学生信息的内部小程序
    public void update_student_applet(int index, Scanner scanner,
                                      Development development, Student[] student)
    {
        while (true) {
            System.out.print("请输入要修改的序号(若不修改输入exit退出信息修改模式):");
            if (scanner.hasNextInt()) {
                int number = scanner.nextInt();
                if (number == 0)continue;
                if (number <= index){
                    number -= 1; // 数组的索引值
                    this.update_student_context(number, development, scanner, student);
                }else {
                    System.err.println("当前录取学生信息人数为:" + index +
                            "而您输入的已经超过了范围,请重新输入");
                    Development.enter_exit();
                    return;
                }
            } else {
                String next = scanner.next();
                if ("exit".equalsIgnoreCase(next)){
                    System.out.println("正在退出....");
                    development.time();
                    development.clear();
                    break;
                }
                System.err.println(next + " 不是合法的序号");
            }
            development.time();
            development.clear();
        }
    }
}

然后写完代码,整理项目和包管理之后,通过控制台运行Java程序(PS:这里的控制台是指Windows下的控制台,就是通过win+R键之后,输入cmd进入的控制台),就可以完成的运行出一个学生管理系统了,那么在文件中里面也包含了两个.dll文件,那么若需要完整的项目,可以点击下方链接获取Java学生管理系统的完整项目。

百度网盘:

链接:https://pan.baidu.com/s/1lBkxk10Mahb7djk79LAhfA 
提取码:4acb 

GitHub:

GitHub - pypy-django/JavaSystemStudent