用java实现一个简单的电通宿舍管理系统。 定义抽象类Student,根据需要设计属性和行为。定义派生类,即三个专业的学生:DianxinStu、DiankeStu、TongxinStu。必须应用方法的覆盖。 宿舍楼有6层,每层20个房间,每个房间最多可以住学生4人。男生和女生要分在不同层,同专业的学生优先安排在同一宿舍。 主要功能有:新生来了为其分配宿舍;学生毕业了离开宿舍;根据房间号、性别、所属专业查询宿舍(包括宿舍为空的情况);根据学生要求调换宿舍;其他功能可自行拓展,比如统计等。

时间: 2023-06-12 20:07:38 浏览: 70
以下是一个简单的电通宿舍管理系统的Java实现: ``` abstract class Student { protected String name; protected String gender; protected String major; protected int roomNumber; protected int floorNumber; public Student(String name, String gender, String major) { this.name = name; this.gender = gender; this.major = major; } public void setRoomNumber(int roomNumber) { this.roomNumber = roomNumber; } public void setFloorNumber(int floorNumber) { this.floorNumber = floorNumber; } public abstract void displayInfo(); } class DianxinStu extends Student { public DianxinStu(String name, String gender) { super(name, gender, "Dianxin"); } @Override public void displayInfo() { System.out.println("Name: " + name + ", Gender: " + gender + ", Major: " + major + ", Floor Number: " + floorNumber + ", Room Number: " + roomNumber); } } class DiankeStu extends Student { public DiankeStu(String name, String gender) { super(name, gender, "Dianke"); } @Override public void displayInfo() { System.out.println("Name: " + name + ", Gender: " + gender + ", Major: " + major + ", Floor Number: " + floorNumber + ", Room Number: " + roomNumber); } } class TongxinStu extends Student { public TongxinStu(String name, String gender) { super(name, gender, "Tongxin"); } @Override public void displayInfo() { System.out.println("Name: " + name + ", Gender: " + gender + ", Major: " + major + ", Floor Number: " + floorNumber + ", Room Number: " + roomNumber); } } class Dormitory { private Student[][] rooms; private int[] maleFloors; private int[] femaleFloors; public Dormitory() { rooms = new Student[6][20]; maleFloors = new int[]{1, 2, 3}; femaleFloors = new int[]{4, 5, 6}; } public boolean allocateRoom(Student student) { int floorNumber; if (student.gender.equals("Male")) { floorNumber = getAvailableFloor(maleFloors, student.major); } else { floorNumber = getAvailableFloor(femaleFloors, student.major); } if (floorNumber == -1) { return false; } int roomNumber = getAvailableRoom(floorNumber); if (roomNumber == -1) { return false; } student.setFloorNumber(floorNumber); student.setRoomNumber(roomNumber); rooms[floorNumber - 1][roomNumber - 1] = student; return true; } private int getAvailableFloor(int[] floors, String major) { for (int floorNumber : floors) { if (isFloorAvailable(floorNumber, major)) { return floorNumber; } } return -1; } private boolean isFloorAvailable(int floorNumber, String major) { for (int i = 0; i < 20; i++) { if (rooms[floorNumber - 1][i] == null) { continue; } if (rooms[floorNumber - 1][i].major.equals(major)) { return false; } } return true; } private int getAvailableRoom(int floorNumber) { for (int i = 0; i < 20; i++) { if (rooms[floorNumber - 1][i] == null) { return i + 1; } } return -1; } public boolean removeStudent(int floorNumber, int roomNumber) { if (rooms[floorNumber - 1][roomNumber - 1] == null) { return false; } rooms[floorNumber - 1][roomNumber - 1] = null; return true; } public Student getStudent(int floorNumber, int roomNumber, String gender, String major) { if (rooms[floorNumber - 1][roomNumber - 1] == null) { return null; } Student student = rooms[floorNumber - 1][roomNumber - 1]; if (!student.gender.equals(gender) || !student.major.equals(major)) { return null; } return student; } public boolean changeRoom(int floorNumber, int roomNumber, String gender, String major) { Student student = getStudent(floorNumber, roomNumber, gender, major); if (student == null) { return false; } if (!allocateRoom(student)) { return false; } removeStudent(floorNumber, roomNumber); return true; } public void displayStudents() { for (int i = 0; i < 6; i++) { System.out.println("Floor " + (i + 1) + ":"); for (int j = 0; j < 20; j++) { if (rooms[i][j] != null) { rooms[i][j].displayInfo(); } else { System.out.println("Room " + (j + 1) + ": Empty"); } } } } } public class DormitoryManagementSystem { public static void main(String[] args) { Dormitory dormitory = new Dormitory(); // Allocate rooms for students dormitory.allocateRoom(new DianxinStu("John", "Male")); dormitory.allocateRoom(new DiankeStu("Lucy", "Female")); dormitory.allocateRoom(new TongxinStu("Tom", "Male")); dormitory.allocateRoom(new DianxinStu("Alice", "Female")); dormitory.allocateRoom(new DiankeStu("Bob", "Male")); dormitory.allocateRoom(new TongxinStu("Kate", "Female")); // Display all students dormitory.displayStudents(); // Remove a student dormitory.removeStudent(1, 1); // Display all students again dormitory.displayStudents(); // Change a student's room dormitory.changeRoom(2, 1, "Male", "Dianxin"); // Display all students again dormitory.displayStudents(); } } ``` 上述代码定义了一个抽象类`Student`,以及三个具体的子类`DianxinStu`、`DiankeStu`和`TongxinStu`。它还定义了一个`Dormitory`类来管理宿舍楼。`Dormitory`类包含了分配房间、删除学生、查询学生、调换房间以及显示所有学生等方法。`DormitoryManagementSystem`类是一个简单的测试程序,它创建了一个`Dormitory`对象并分配了一些学生到宿舍楼中,同时也测试了其他的方法。

相关推荐

最新推荐

recommend-type

风光互补发电系统行业标准

本标准是离网型通信用风/光互补供电系统的标准,在本标准的制定过程中还注意了与以下标准的协调统一。 1、 GB/T 19064-2003《家用太阳能光伏电源系统技术条件和试验方法》; 2、 YD/T 1058-2000《通信用高频开关...
recommend-type

大学物理练习册答案(下学期)

1. 定义: = /q0 单位:N/C =V/m B=Fmax/qv;方向,小磁针指向(S→N);单位:特斯拉(T)=104高斯(G) ① 和 : =q( + × )洛仑兹公式 ②电势: 电势差: 电动势: ( ) ③电通量: 磁通量: 磁通链:ΦB...
recommend-type

微信小程序-番茄时钟源码

微信小程序番茄时钟的源码,支持进一步的修改。番茄钟,指的是把工作任务分解成半小时左右,集中精力工作25分钟后休息5分钟,如此视作种一个“番茄”,而“番茄工作法”的流程能使下一个30分钟更有动力。
recommend-type

激光雷达专题研究:迈向高阶智能化关键,前瞻布局把握行业脉搏.pdf

电子元件 电子行业 行业分析 数据分析 数据报告 行业报告
recommend-type

安享智慧理财测试项目Mock服务代码

安享智慧理财测试项目Mock服务代码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。