用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`对象并分配了一些学生到宿舍楼中,同时也测试了其他的方法。