大家好,今天我和大家分享一下用Java中的数组和ArrayList集合分别来实现简单的学生管理系统。过几期,我和大家分享一下用Java和数据库来实现学生管理系统。
一个简单的学生管理系统应该包括:学生对象,对学生对象的操作(管理):添加学生信息、删除学生信息、修改学生信息和显示学生信息,还有一个界面显示。在进行增删改查操作时,我们可以返回一个boolean类型的值来判断增删改查操作是否成功。
首先我先用数组来实现简单的学生管理系统:
学生类:就是一个实体类,只有学生的属性和相应的setter和getter方法还有构造器。这里我就只写学生属性。
public class Stu {
//学生学号
private int sno;
//学生姓名
private String name;
//学生性别
private String sex;
//学生年龄
private int age;
//学生学科
private String major;
}
学生管理类:我们对于数组的操作都是基于数组的索引,添加学生信息时,想要实现学生信息添加后,数组的索引要指向数组的下一个位置,我们就需要定义一个索引,在添加学生信息后索引就加1。
public class StuManage {
//储存学生对象的数组
private Stu[] stus = new Stu[10];
//数组的索引
private int index;
添加操作:因为我们定义的是一个定长的数组,所以要将考虑它是否已经装满数据。
//添加学生功能
public boolean addStu(Stu s) {
//判断数组是否已满
if (index > stus.length - 1) {
return false;
}
stus[index++] = s;
return true;
}
删除操作:由于不知道给定学号的学生在数组中的索引,所以我们要把数组中所有学生的学号拿出来和给定的学号来对比,找到给定学号的学生然后把他删除。删除数组的功能是基于数组拷贝,我们可以把要删除的地方后面的部分向前移动。注意要把数组的最后一位设置为空。
//根据学生学号删除学生功能
public boolean deleteStu(int sno) {
for (int i = 0; i < stus.length; i++) {
Stu s = stus[i];
if (Objects.nonNull(s) && Objects.equals(sno, s.getSno())) {
System.arraycopy(stus, i + 1, stus, i, stus.length - i - 1);
index--;
stus[stus.length-1]=null;
return true;
}
}
return false;
}
显示所有学生信息操作:就是把数组给遍历出来,在学生类中要重写toString方法,不然输出的会是地址。
//显示所有学生信息功能
public void showAllStu() {
for (Stu student : stus) {
if (Objects.nonNull(student)) {
System.out.println(student);
}
}
}
修改操作:修改和删除一样,要根据学生的学号找到学生在数组中的索引,再修改学生信息。
//根据学生学号修改学生学科功能
public boolean modifyStu(int sno, String major) {
for (int i = 0; i < stus.length; i++) {
Stu s = stus[i];
if (Objects.nonNull(s) && Objects.equals(sno, s.getSno())) {
s.setMajor(major);
return true;
}
}
return false;
}
显示单个学生信息操作:显示单个学生信息和修改还有删除一样。
//根据学生学号显示学生信息功能
public boolean showStuFromID(int sno) {
for (int i = 0; i < stus.length; i++) {
Stu s = stus[i];
if (Objects.nonNull(s) && Objects.equals(sno, s.getSno())) {
System.out.println(s);
return true;
}
}
return false;
}
测试类:
public class TestStu {
static Scanner sc = new Scanner(System.in);
//新建一个StuManage对象,后面方便调用里面的方法
static StuManage sm = new StuManage();
//下面用的输出语句多,我把它包装成方法
private static void msg(String msg) {
System.out.println(msg);
}
public static void main(String[] args) {
start();
}
显示界面:用switch来判断指令然后执行相应方法。
private static void start() {
msg("======学生成绩管理系统=====");
msg("[1] 添加学生信息");
msg("[2] 学生信息列表");
msg("[3] 删除指定学生信息");
msg("[4] 查询指定学生信息");
msg("[5] 修改指定学生的学科");
msg("[0] 退出系统");
msg("========================");
msg("请输入指令:");
int i = sc.nextInt();
switch (i) {
case 1:
addStu();
break;
case 2:
showAll();
break;
case 3:
delStu();
break;
case 4:
showStuFromID();
break;
case 5:
modify();
break;
case 0:
msg("谢谢使用,再见!");
System.exit(0);
break;
default:
msg("指令错误,请重新输入");
start();
break;
}
}
输入指令后执行的方法:
/**
* 添加学生信息
*/
private static void addStu() {
msg("请输入学号:");
int sno = sc.nextInt();
msg("请输入姓名");
String name = sc.next();
msg("请输入性别");
String sex = sc.next();
msg("请输入年龄");
int age = sc.nextInt();
msg("请输入学科");
String major = sc.next();
//根据读取的学生信息创建学生对象
Stu s = new Stu(sno, name, sex, age, major);
if (sm.addStu(s)) {
msg("添加成功");
} else {
msg("容量存储不足");
}
start();
/**
* 学生信息列表
*/
private static void showAll() {
sm.showAllStu();
start();
}
}
/**
* 删除指定学号的学生信息
*/
private static void delStu() {
msg("输出你想删除的学生学号");
int sno = sc.nextInt();
if (sm.deleteStu(sno)) {
msg("删除成功");
} else {
msg("删除失败");
}
start();
}
/**
* 显示指定学号的学生信息
*/
private static void showStuFromID() {
msg("输出你想显示的学生学号");
int sno = sc.nextInt();
if (sm.showStuFromID(sno)) {
msg("显示成功");
} else {
msg("没有这名学生,显示失败");
}
start();
}
/**
* 修改指定学号学生的学科
*/
private static void modify() {
msg("输出你想修改的学生学号");
int sno = sc.nextInt();
msg("输出你想修改的学科");
String major = sc.next();
if (sm.modifyStu(sno,major)) {
msg("修改成功");
} else {
msg("没有这名学生,修改失败");
}
start();
}
使用ArrayList集合来实现简单的学生管理系统:学生类和测试类都和用数组实现的方法一样。
学生管理类:ArrayList集合的增删改查和数组的原理一样,只不过ArrayList集合做添加功能用add方法就行了(它的索引会自动加1),删除功能用remove方法(内部的实现还是基于数组的拷贝)。
public class StudentManage {
List<Stu> stus = new ArrayList<>();
//添加学生功能
public boolean addStu(Stu s) {
stus.add(s);
return true;
}
//根据学生学号删除学生功能
public boolean deleteStu(int sno) {
if (Objects.nonNull(stus)) {
for (int i = 0; i < stus.size(); i++) {
if (Objects.equals(sno, stus.get(i).getSno())) {
stus.remove(i);
return true;
}
}
}
return false;
}
//显示所有学生信息功能
public void showAllStu() {
if (Objects.nonNull(stus)) {
for (Stu Stu : stus) {
System.out.println(Stu);
}
}
}
//根据学生学号修改学生学科功能
public boolean modifyStu(int sno, String major) {
if (Objects.nonNull(stus)) {
for (int i = 0; i < stus.size(); i++) {
if (Objects.equals(sno, stus.get(i).getSno())) {
stus.get(i).setMajor(major);
return true;
}
}
}
return false;
}
//根据学生学号显示学生信息功能
public boolean showStuFromID(int sno) {
if (Objects.nonNull(stus)) {
for (int i = 0; i < stus.size(); i++) {
if (Objects.equals(sno, stus.get(i).getSno())) {
System.out.println(stus.get(i));
return true;
}
}
}
return false;
}
}
运行结果: