创建一个学生类Student,具有姓名、学号、年龄、班级属性。使用Hashtable存储几个学生对象,分别按照学号和年龄对集合中的学生对象进行排序,实现对学生对象信息的增删改查。各项功能要有必要的提示信息。
时间: 2024-11-05 17:34:53 浏览: 19
一个改造的Sqlite通用访问类
首先,我们创建一个名为`Student`的类,它包含姓名、学号、年龄和班级属性:
```java
public class Student {
private String name;
private int studentId;
private int age;
private String className;
public Student(String name, int studentId, int age, String className) {
this.name = name;
this.studentId = studentId;
this.age = age;
this.className = className;
}
// 获取和设置方法
// ...
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", studentId=" + studentId +
", age=" + age +
", className='" + className + '\'' +
'}';
}
}
```
接下来,我们可以使用`Hashtable`(在Java 7之后应该使用`HashMap`)来存储学生,并通过`TreeMap`对学号和年龄进行排序:
```java
import java.util.*;
public class Main {
private Map<Integer, Map<Integer, Student>> studentsByAgeAndId = new TreeMap<>(); // 使用TreeMap进行自然排序
// 添加学生
public void addStudent(Student student) {
if (studentsByAgeAndId.containsKey(student.getStudentId())) {
System.out.println("警告:学生ID已存在,请检查是否需要替换现有记录。");
} else {
Map<Integer, Student> classMap = studentsByAgeAndId.getOrDefault(student.getStudentId(), new HashMap<>());
classMap.put(student.getAge(), student);
studentsByAgeAndId.put(student.getStudentId(), classMap);
}
}
// 删除学生
public boolean removeStudent(int studentId, int age) {
Map<Integer, Student> classMap = studentsByAgeAndId.get(studentId);
if (classMap != null && classMap.remove(age) != null) {
return true;
} else {
System.out.println("未找到指定的学生或年龄。");
return false;
}
}
// 修改学生信息
public void updateStudent(int studentId, int oldAge, int newAge, String newName) {
Map<Integer, Student> classMap = studentsByAgeAndId.get(studentId);
if (classMap != null) {
Student student = classMap.get(oldAge);
if (student != null) {
student.age = newAge;
student.name = newName;
System.out.println("更新成功:学生ID " + studentId + " 的信息已更改。");
} else {
System.out.println("未找到指定的学生。");
}
} else {
System.out.println("学生ID不存在。");
}
}
// 查询学生
public List<Student> searchStudentsByAgeOrId(int idOrAge) {
List<Student> result = new ArrayList<>();
for (Map<Integer, Student> classMap : studentsByAgeAndId.values()) {
result.addAll(classMap.values().stream()
.filter(s -> s.getStudentId() == idOrAge || s.getAge() == idOrAge)
.collect(Collectors.toList()));
}
return result;
}
public static void main(String[] args) {
Main main = new Main();
// ... 实现添加、删除、修改和查询操作
}
}
```
在这个例子中,你可以通过`addStudent()`方法添加学生,`removeStudent()`方法删除学生,`updateStudent()`方法修改学生信息,而`searchStudentsByAgeOrId()`方法可以按学号或年龄查找学生。
阅读全文