宿舍管理查询系统要求

(1)主体要求:为宿舍管理人员编写一个宿舍管理软件,程序设计要求为:
A. 采用交互工作方式,功能菜单下可连续操作,直至选择退出
B.建立数据文件 ,数据文件按关键宇(姓名、学号、房号)进行排序(冒泡、选择、插入
排序等任诜一种)
(2)查询菜单:用二分查找实现以下查询功能:
A.按姓名查询
B.按学号杳询
C.按房号查询
(3)其它功能:插入、删除、修改学生信息,每个操作都需打印操作结果

首先,我们需要定义一个类来存储学生信息,包括姓名、学号、房号。

public class Student {
    private String name;
    private String studentId;
    private String dormitoryId;

    public Student(String name, String studentId, String dormitoryId) {
        this.name = name;
        this.studentId = studentId;
        this.dormitoryId = dormitoryId;
    }

    public String getName() {
        return name;
    }

    public String getStudentId() {
        return studentId;
    }

    public String getDormitoryId() {
        return dormitoryId;
    }
}

然后,我们可以创建一个类来管理宿舍信息,并实现插入、删除、修改学生信息的功能。

import java.util.ArrayList;
import java.util.List;

public class DormitoryManager {
    private List<Student> students;

    public DormitoryManager() {
        students = new ArrayList<>();
    }

    public void addStudent(Student student) {
        students.add(student);
    }

    public void deleteStudent(String studentId) {
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getStudentId().equals(studentId)) {
                students.remove(i);
                return;
            }
        }
    }

    public void updateStudent(String studentId, Student newStudent) {
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getStudentId().equals(studentId)) {
                students.set(i, newStudent);
                return;
            }
        }
    }
}

接下来,我们可以创建一个类来实现查询功能,包括按姓名、学号、房号查询。

在这里,我们使用二分查找来实现查询功能,时间复杂度为 $O(\log n)$,其中 $n$ 为学生总数。

import java.util.List;

public class QueryManager {
    public static int binarySearch(List<Student> students, String key, int l, int r, Getter getter) {
        while (l <= r) {
            int mid = l + (r - l) / 2;
            int cmp = getter.get(students.get(mid)).compareTo(key);
            if (cmp == 0) {
                return mid;
            } else if (cmp < 0) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return -1;
    }

    public static Student searchByName(List<Student> students, String name) {
        int index = binarySearch(students, name, 0, students.size() - 1, new Getter() {
            @Override
            public String get(Student student) {
                return student.getName();
            }
        });
        return index == -1 ? null : students.get(index);
    }

    public static Student searchByStudentId(List<Student> students, String studentId) {
        int index = binarySearch(students, studentId, 0, students.size() - 1, new Getter() {
            @Override
            public String get(Student student) {
                return student.getStudentId();
            }
        });
        return index == -1 ? null : students.get(index);
    }

    public static Student searchByDormitoryId(List<Student> students, String dormitoryId) {
        int index = binarySearch(students, dormitoryId, 0, students.size() - 1, new Getter() {
            @Override
            public String get(Student student) {
                return student.getDormitoryId();
            }
        });
        return index == -1 ? null : students.get(index);
    }

    public interface Getter {
        String get(Student student);
    }
}

最后,我们可以创建一个类来实现交互工作方式,并通过菜单连续操作。

为了方便,我们可以使用 Scanner 类来读取用户的输入。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        DormitoryManager dormitoryManager = new DormitoryManager();
        QueryManager queryManager = new QueryManager();

        while (true) {
            System.out.println("1. 查询");
            System.out.println("2. 插入");
            System.out.println("3. 删除");
            System.out.println("4. 修改");
            System.out.println("5. 退出");
            System.out.print("请输入你的选择:");

            int choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("1. 按姓名查询");
                    System.out.println("2. 按学号查询");
                    System.out.println("3. 按房号查询");
                    System.out.print("请输入你的选择:");
                    int queryChoice = scanner.nextInt();
                    switch (queryChoice) {
                        case 1:
                            System.out.print("请输入姓名:");
                            String name = scanner.next();
                            Student student = queryManager.searchByName(dormitoryManager.getStudents(), name);
                            if (student == null) {
                                System.out.println("未找到学生信息。");
                            } else {
                                System.out.println("学生信息如下:");
                                System.out.println("姓名:" + student.getName());
                                System.out.println("学号:" + student.getStudentId());
                                System.out.println("房号:" + student.getDormitoryId());
                            }
                            break;
                        case 2:
                            System.out.print("请输入学号:");
                            String studentId = scanner.next();
                            student = queryManager.searchByStudentId(dormitoryManager.getStudents(), studentId);
                            if (student == null) {
                                System.out.println("未找到学生信息。");
                            } else {
                                System.out.println("学生信息如下:");
                                System.out.println("姓名:" + student.getName());
                                System.out.println("学号:" + student.getStudentId());
                                System.out.println("房号:" + student.getDormitoryId());
                            }
                            break;
                        case 3:
                            System.out.print("请输入房号:");
                            String dormitoryId = scanner.next();
                            student = queryManager.searchByDormitoryId(dormitoryManager.getStudents(), dormitoryId);
                            if (student == null) {
                                System.out.println("未找到学生信息。");
                            } else {
                                System.out.println("学生信息如下:");
                                System.out.println("姓名:" + student.getName());
                                System.out.println("学号:" + student.getStudentId());
                                System.out.println("房号:" + student.getDormitoryId());
                            }
                            break;
                        default:
                            System.out.println("输入无效,请重新输入。");
                            break;
                    }
                    break;
                case 2:
                    System.out.println("请输入学生信息:");
                    System.out.print("姓名:");
                    String name = scanner.next();
                    System.out.print("学号:");
                    String studentId = scanner.next();
                    System.out.print("房号:");
                    String dormitoryId = scanner.next();
                    dormitoryManager.addStudent(new Student(name, studentId, dormitoryId));
                    System.out.println("插入成功。");
                    break;
                case 3:
                    System.out.print("请输入学号:");
                    studentId = scanner.next();
                    dormitoryManager.deleteStudent(studentId);
                    System.out.println("删除成功。");
                    break;
                case 4:
                    System.out.println("请输入学生信息:");
System.out.print("学号:");
                    studentId = scanner.next();
                    System.out.print("姓名:");
                    name = scanner.next();
                    System.out.print("房号:");
                    dormitoryId = scanner.next();
                    dormitoryManager.updateStudent(studentId, new Student(name, studentId, dormitoryId));
                    System.out.println("修改成功。");
                    break;
                case 5:
                    System.out.println("退出系统。");
                    return;
                default:
                    System.out.println("输入无效,请重新输入。");
                    break;
            }
        }
    }
}


这样,我们就完成了使用 Java 编写的宿舍管理查询系统。

import java.util.Scanner;

public class DormitoryManager {
    // 定义学生信息的结构体
    static class Student {
        String name;
        String id;
        String room;

        Student(String name, String id, String room) {
            this.name = name;
            this.id = id;
            this.room = room;
        }
    }

    static final int MAX_STUDENT_COUNT = 100;
    static Student[] students = new Student[MAX_STUDENT_COUNT];
    static int studentCount = 0;

    static void addStudent(Student student) {
        students[studentCount++] = student;
    }

    static void deleteStudent(int index) {
        // 将要删除的学生信息后面的学生信息往前移动一位
        for (int i = index; i < studentCount - 1; i++) {
            students[i] = students[i + 1];
        }
        studentCount--;
    }

    static void updateStudent(int index, Student student) {
        students[index] = student;
    }

    static int searchStudentByName(String name) {
        // 采用二分查找实现
        int low = 0;
        int high = studentCount - 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            int compareResult = name.compareTo(students[mid].name);
            if (compareResult == 0) {
                return mid;
            } else if (compareResult < 0) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        return -1;
    }

    static int searchStudentById(String id) {
        // 采用二分查找实现
        int low = 0;
        int high = studentCount - 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            int compareResult = id.compareTo(students[mid].id);
            if (compareResult == 0) {
                return mid;
            } else if (compareResult < 0) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        return -1;
    }

    static int searchStudentByRoom(String room) {
        // 采用二分查找实现
        int low = 0;
        int high = studentCount - 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            int compareResult = room.compareTo(students[mid].room);
            if (compareResult == 0) {
                return mid;
            } else if (compareResult < 0) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
static void sortStudents(int sortType) {
    // sortType: 0 - 冒泡排序,1 - 选择排序,2 - 插入排序
    switch (sortType) {
        case 0:
            for (int i = 0; i < studentCount; i++) {
                for (int j = 0; j < studentCount - i - 1; j++) {
                    // 按姓名排序
                    if (students[j].name.compareTo(students[j + 1].name) > 0) {
                        Student temp = students[j];
                        students[j] = students[j + 1];
                        students[j + 1] = temp;
                    }
                }
            }
            break;
        case 1:
            for (int i = 0; i < studentCount; i++) {
                int minIndex = i;
                for (int j = i + 1; j < studentCount; j++) {
                    // 按姓名排序
                    if (students[j].name.compareTo(students[minIndex].name) < 0) {
                        minIndex = j;
                    }
                }
                Student temp = students[i];
                students[i] = students[minIndex];
                students[minIndex] = temp;
            }
            break;
        case 2:
            for (int i = 1; i < studentCount; i++) {
                Student temp = students[i];
                int j = i - 1;
                // 按姓名排序
                while (j >= 0 && temp.name.compareTo(students[j].name) < 0) {
                    students[j + 1] = students[j];
                    j--;
                }
                students[j + 1] = temp;
            }
            break;
    }
}

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    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.println("7. 对学生信息进行排序");
        System.out.println("0. 退出系统");
            int choice = scanner.nextInt();
            if (choice == 0) {
                break;
            }
            switch (choice) {
                case 1:
                    System.out.print("请输入学生姓名:");
                    String name = scanner.next();
                    System.out.print("请输入学生学号:");
                    String id = scanner.next();
                    System.out.print("请输入学生房号:");
                    String room = scanner.next();
                    addStudent(new Student(name, id, room));
                    System.out.println("添加学生信息成功");
                    break;
                case 2:
                    System.out.print("请输入要删除的学生的序号:");
                    int index = scanner.nextInt();
                    if (index >= 0 && index < studentCount) {
                        deleteStudent(index);
                        System.out.println("删除学生信息成功");
                    } else {
                        System.out.println("无效的序号");
                    }
                    break;
                case 3:
                    System.out.print("请输入要修改的学生的序号:");
                    index = scanner.nextInt();
                    if (index >= 0 && index < studentCount) {
                        System.out.print("请输入学生姓名:");
                        name = scanner.next();
                        System.out.print("请输入学生学号:");
                        id = scanner.next();
                        System.out.print("请输入学生房号:");
                        room = scanner.next();
                        updateStudent(index, new Student(name, id, room));
                        System.out.println("修改学生信息成功");
                    } else {
                        System.out.println("无效的序号");
                    }
                    break;
                case 4:
                    System.out.print("请输入要查询的学生姓名:");
                    name = scanner.next();
                    index = searchStudentByName(name);
                    if (index >= 0) {
                        System.out.println("学生信息如下:");
                        System.out.println("姓名:" + students[index].name);
                        System.out.println("学号:" + students[index].id);
                        System.out.println("房号:" + students[index].room);
                    } else {
                        System.out.println("没有找到该学生信息");

                case 5:
                    System.out.print("请输入要查询的学生学号:");
                    id = scanner.next();
                    index = searchStudentById(id);
                    if (index >= 0) {
                        System.out.println("学生信息如下:");
                        System.out.println("姓名:" + students[index].name);
                        System.out.println("学号:" + students[index].id);
                        System.out.println("房号:" + students[index].room);
                    } else {
                        System.out.println("没有找到该学生信息");
                    }
                    break;
                case 6:
                    System.out.print("请输入要查询的学生房号:");
                    room = scanner.next();
                    index = searchStudentByRoom(room);
                    if (index >= 0) {
                        System.out.println("学生信息如下:");
                        System.out.println("姓名:" + students[index].name);
                        System.out.println("学号:" + students[index].id);
                        System.out.println("房号:" + students[index].room);
                    } else {
                        System.out.println("没有找到该学生信息");
                    }
                    break;
                case 7:
                    System.out.print("请输入排序方式(0 - 冒泡排序,1 - 选择排序,2 - 插入排序):");
                    int sortType = scanner.nextInt();
                    sortStudents(sortType);
                    System.out.println("学生信息排序成功");
                    break;
                default:
                    System.out.println("无效的输入");
                    break;
            }
        }
        scanner.close();
    }
}
import java.io.*;
import java.util.*;

// Student class to represent a student
class Student implements Serializable {
  private String name;
  private int id;
  private int room;

  public Student(String name, int id, int room) {
    this.name = name;
    this.id = id;
    this.room = room;
  }

  public String getName() {
    return name;
  }

  public int getId() {
    return id;
  }

  public int getRoom() {
    return room;
  }

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

  public void setId(int id) {
    this.id = id;
  }

  public void setRoom(int room) {
    this.room = room;
  }
}

// StudentList class to store a list of students
class StudentList implements Serializable {
  private List<Student> students;

  public StudentList() {
    students = new ArrayList<>();
  }

  public void addStudent(Student student) {
    students.add(student);
  }

  public void removeStudent(int index) {
    students.remove(index);
  }

  public void modifyStudent(int index, Student student) {
    students.set(index, student);
  }

  public List<Student> getStudents() {
    return students;
  }
}

// DormitoryManagement class to represent the main program
class DormitoryManagement {
  // Method to load the student list from the file
  private static StudentList loadStudentList() throws Exception {
    try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students.dat"))) {
      return (StudentList) ois.readObject();
    }
  }

  // Method to save the student list to the file
  private static void saveStudentList(StudentList studentList) throws Exception {
    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("students.dat"))) {
      oos.writeObject(studentList);
    }
  }

  // Method to sort the student list by name
  private static void sortByName(StudentList studentList) {
    studentList.getStudents().sort(new Comparator<Student>() {
      @Override
      public int compare(Student s1, Student s2) {
        return s1.getName().compareTo(s2.getName());
      }
    });
  }

  // Method to sort the student list by id
  public void sortById()
    {
        for (int i=0; i<count-1; i++)
            for (int j=i+1; j<count; j++)
                if (students[i].getId() > students[j].getId())
                {
                    Student temp = students[i];
                    students[i] = students[j];
                    students[j] = temp;
                }
    }
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632