用java设计个学生管理系统,能对学生成绩进行增删改查,并用io将数据保存在文件s,若不存在文件s则先创建文件s再将数据存入
时间: 2024-03-04 12:51:52 浏览: 24
以下是一个简单的学生管理系统的实现,可以对学生的姓名和成绩进行增删改查,并将数据保存在文件中:
```java
import java.io.*;
import java.util.*;
public class StudentManagementSystem {
static List<Student> students = new ArrayList<>();
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
loadStudents(); // 加载学生数据
while (true) {
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("请选择操作:");
int choice = scanner.nextInt();
scanner.nextLine(); // 处理换行符
switch (choice) {
case 1:
addStudent();
break;
case 2:
removeStudent();
break;
case 3:
modifyStudent();
break;
case 4:
queryStudent();
break;
case 5:
displayAllStudents();
break;
case 6:
saveStudents();
System.out.println("保存成功,程序已退出。");
return;
default:
System.out.println("无效操作,请重新输入。");
}
}
}
// 添加学生
static void addStudent() {
System.out.print("请输入学生姓名:");
String name = scanner.nextLine();
System.out.print("请输入学生成绩:");
int score = scanner.nextInt();
scanner.nextLine(); // 处理换行符
students.add(new Student(name, score));
System.out.println("添加成功。");
}
// 删除学生
static void removeStudent() {
System.out.print("请输入要删除的学生姓名:");
String name = scanner.nextLine();
for (Iterator<Student> it = students.iterator(); it.hasNext();) {
Student student = it.next();
if (student.name.equals(name)) {
it.remove();
System.out.println("删除成功。");
return;
}
}
System.out.println("未找到该学生。");
}
// 修改学生
static void modifyStudent() {
System.out.print("请输入要修改的学生姓名:");
String name = scanner.nextLine();
for (Student student : students) {
if (student.name.equals(name)) {
System.out.print("请输入新的学生姓名:");
String newName = scanner.nextLine();
System.out.print("请输入新的学生成绩:");
int newScore = scanner.nextInt();
scanner.nextLine(); // 处理换行符
student.name = newName;
student.score = newScore;
System.out.println("修改成功。");
return;
}
}
System.out.println("未找到该学生。");
}
// 查询学生
static void queryStudent() {
System.out.print("请输入要查询的学生姓名:");
String name = scanner.nextLine();
for (Student student : students) {
if (student.name.equals(name)) {
System.out.println("姓名:" + student.name + ",成绩:" + student.score);
return;
}
}
System.out.println("未找到该学生。");
}
// 显示所有学生
static void displayAllStudents() {
System.out.println("所有学生:");
for (Student student : students) {
System.out.println("姓名:" + student.name + ",成绩:" + student.score);
}
}
// 加载学生数据
static void loadStudents() throws IOException {
File file = new File("s.txt");
if (!file.exists()) {
file.createNewFile();
}
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
try {
while (true) {
Student student = (Student) ois.readObject();
students.add(student);
}
} catch (EOFException e) {
// 文件读取完毕
} catch (ClassNotFoundException e) {
// 类未定义
e.printStackTrace();
}
ois.close();
}
// 保存学生数据
static void saveStudents() throws IOException {
File file = new File("s.txt");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
for (Student student : students) {
oos.writeObject(student);
}
oos.close();
}
static class Student implements Serializable {
String name;
int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
}
}
```
在上面的代码中,我们定义了一个 `Student` 类表示学生,其中包含学生的姓名和成绩。我们使用一个 `List` 来存储所有学生的信息。
在 `main` 方法中,我们显示一个菜单,让用户选择要执行的操作。然后根据用户的选择调用相应的方法。
在 `addStudent` 方法中,我们要求用户输入学生的姓名和成绩,并将其添加到 `List` 中。
在 `removeStudent` 方法中,我们要求用户输入要删除的学生的姓名,然后遍历 `List`,寻找该姓名对应的学生,并将其从 `List` 中删除。
在 `modifyStudent` 方法中,我们要求用户输入要修改的学生的姓名,然后遍历 `List`,寻找该姓名对应的学生,并要求用户输入新的姓名和成绩,然后修改该学生的信息。
在 `queryStudent` 方法中,我们要求用户输入要查询的学生的姓名,然后遍历 `List`,寻找该姓名对应的学生,并将其信息输出到控制台中。
在 `displayAllStudents` 方法中,我们遍历 `List`,输出所有学生的信息到控制台中。
在 `loadStudents` 方法中,我们从文件中读取保存的学生数据,并将其添加到 `List` 中。如果文件不存在,则创建文件。
在 `saveStudents` 方法中,我们将所有学生的信息写入文件中。
最后,我们在 `Student` 类中实现了 `Serializable` 接口,以便可以将学生对象序列化并写入文件中。