(1)主体要求:为宿舍管理人员编写一个宿舍管理软件,程序设计要求为:
A. 采用交互工作方式,功能菜单下可连续操作,直至选择退出
B.建立数据文件 ,数据文件按关键宇(姓名、学号、房号)进行排序(冒泡、选择、插入
排序等任诜一种)
(2)查询菜单:用二分查找实现以下查询功能:
A.按姓名查询
B.按学号杳询
C.按房号查询
(3)其它功能:插入、删除、修改学生信息,每个操作都需打印操作结果
宿舍管理查询系统要求
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 我不是idol 2022-12-25 12:49关注
首先,我们需要定义一个类来存储学生信息,包括姓名、学号、房号。
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 编写的宿舍管理查询系统。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度