/**
* 为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能。
* 1、该系统的用户是:酒店前台
* 2、酒店使用一个二维数组来模拟。Room[][] rooms;
* 3、酒店中的每一个房间应该是一个java对象:Room
* 4、每一个房间Room应该有:房间编号、房间类型、房间是否空闲等属性。
* 5、系统对外提供的方法有:
* * 可以预定房间:输入房间编号,订房
* * 可以退房:输入房间编号,退房
* * 可任意查看所有房间的状态:用户输入某个指令能够查看所有房间状态
*/
package com.javase.进阶.数组;
/**
* 酒店房间类
*/
public class Room {
/**
* 房间编号
* 一楼:101、102、103...
* 二楼:201、202、203...
* ......
*/
private int no;
/**
* 房间类型
* 标准间、双人间、豪华间
*/
private String type;
/**
* 房间状态
* true 表示占用,不能预定
* false 表示空闲,可以预定
*/
private boolean status;
// 无参构造方法
public Room() {
}
// 有参构造方法
public Room(int no, String type, boolean status) {
this.no = no;
this.type = type;
this.status = status;
}
// set and get 方法
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
//IDEA提供的Boolean的构造方法是isXxx(),可以改成getXxx()
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
// 重写equals()方法
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof Room)) return false;
Room room = (Room) o;
return this.no == room.getNo();
}
// 重写toString()方法
public String toString() {
return "[" + no + " " + type + " " + (status? "占用]" : "空闲]");
}
public static void main(String[] args) {
Room room = new Room(101,"标准间",false);
System.out.println(room);
}
}
package com.javase.进阶.数组;
import java.util.Arrays;
/**
* 酒店类,用二维数组模拟酒店大楼
*/
public class Hotel {
/**
* 使用二维数组来模拟酒店中的所有房间
*/
private Room[][] rooms;
/**
* 默认创建一个三层楼,每层10个房间的酒店
* 一层:标准间,二层:双人间,三层:豪华间
* 房间编号:一层 101、102、103...
* 二层 201、202、203...
* 三层 301、302、303...
*/
// 无参构造方法
public Hotel() {
rooms = new Room[3][10];
// 通过遍历二维数组来创建每个房间
for (int i = 0; i < rooms.length ; i++) {
for (int j = 0; j < rooms[i].length; j++) {
if (i == 0){
// 一楼是标准间
rooms[i][j] = new Room((i + 1) * 100 + j + 1,"标准间",false);
}else if (i == 1){
// 二楼双人间
rooms[i][j] = new Room((i + 1) * 100 + j + 1,"双人间",false);
}else {
// 三楼豪华间
rooms[i][j] = new Room((i + 1) * 100 + j + 1,"豪华间",false);
}
}
}
}
// 有参构造方法
public Hotel(Room[][] rooms) {
this.rooms = rooms;
}
// set and get 方法
public Room[][] getRooms() {
return rooms;
}
public void setRooms(Room[][] rooms) {
this.rooms = rooms;
}
// 重写equals()方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Hotel hotel = (Hotel) o;
return Arrays.equals(rooms, hotel.rooms);
}
// 重写toString()方法
@Override
public String toString() {
return "Hotel{" +
"rooms=" + Arrays.toString(rooms) +
'}';
}
/**
* 打印所有房间状态
*/
public void print(){
// 既然是所有房间,那就应该是遍历数组
for (int i = 0; i < rooms.length; i++) {
for (int j = 0; j < rooms[i].length; j++) {
Room room = rooms[i][j];
//下行代码会自动调用room.toString(),由此可以看出重写toString()方法的必要
System.out.print(room);
}
// 换行
System.out.println();
}
}
/**
* 订房方法
* @param roomNo 调用此方法时,需要传递一个房间号码
*/
public void order(int roomNo){
// 需要通过房间号码转换成二维数组中对象的下标
Room room = rooms[(roomNo / 100) - 1][(roomNo % 100) - 1];
// 订房的主要操作是将房间对象的属性status修改成true
// 判断当前想订房间状态,如果是占用状态,就不能接受预定
if (room.getStatus() == true){
System.out.println(roomNo + "有人居住,当前不接受预订!");
}
// 如果是空闲状态,则能接受预定
else {
room.setStatus(true);
System.out.println(roomNo + "房间预订成功!");
}
}
/**
* 退房方法
* @param roomNo 调用此方法时,也需要传递一个房间号码
*/
public void exit(int roomNo){
// 需要通过房间号码转换成二维数组中对象的下标
Room room = rooms[(roomNo / 100) - 1][(roomNo % 100) - 1];
// 订房的主要操作是将房间对象的属性status修改成false
if (room.getStatus() == false){
System.out.println(roomNo + "房间已经退房,现在不接受退房服务!");
}
else {
room.setStatus(false);
System.out.println(roomNo + "房间退房成功!");
}
}
}
public class HotelSystem {
public static void main(String[] args) {
// 创建酒店
Hotel hotel = new Hotel();
System.out.println("欢迎使用本酒店管理系统!");
// 将系统的运行代码放到while循环中,就避免了每次执行一个功能都需要执行一次主方法
while (true) {
System.out.println("请仔细阅读使用说明:【0】退出本系统,【1】查看本酒店房间状态,【2】预订房间,【3】退房");
Scanner s = new Scanner(System.in);
System.out.print("请输入对于功能编号:");
int i = s.nextInt();
if (i == 0) {
// 退出系统
System.out.println("即将退出本系统,再见!欢迎下次回来!");
return;
} else if (i == 1) {
// 查看酒店房间状态
hotel.print();
} else if (i == 2) {
// 预订房间
System.out.print("请输入想订房间编号:");
int roomNo = s.nextInt();
hotel.order(roomNo);
} else if (i == 3) {
// 退房
System.out.print("请输入需退房编号:");
int roomNo = s.nextInt();
hotel.exit(roomNo);
} else {
System.out.println("输入功能代码有误,请重新输入!");
}
}
}
}