这是小生第一次发表博客,比较紧张哈哈哈。
小生是一名Java初学者,经过一两个月的学习,对Java基础和Java面向对象的思想有一定的掌握,并使用数组的方式,结合所学知识,写出来这一款Java版学生管理系统,可能写的不是特别好,之前也写过C、Python版本的学生管理系统,可能受到了前者影响,所以就能快速的写出来一款Java版,如果写的不好,还希望大家能够指点指点,我会改进,哈哈哈。
这边小生采用的是Jetbrians中的Intellij IDEA和Clion,Clion我们知道主要是用来C/C++开发的,那这里主要使用它来完成由Java通过JNI技术之后传过来的.h的头文件,对头文件里面需要由C完成的函数功能实现进行处理,因为我们知道Java是与平台无关的语言,加上Java本身也无法 *** 作底层,当初小生在寻找Java的某部分函数时因找不到,所以顺便学习了JNI技术的使用,不过JNI技术确实挺好用的,还顺便巩固了C。
那么总体项目目录大致就是这样。
看起来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 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(){} 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/project_package
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)