JavaSE:用二维数组实现酒店管理系统

这是一个Java初学者的项目,通过二维数组构建了一个简单的酒店管理系统。然而,系统存在一个问题:在运行中如果断电,所有数据会丢失,因为当前未使用数据库存储。博主计划在学习数据库后对此系统进行优化。

这是Java软件工程师的第一个小型项目。

要求:

        为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能。
        1、该系统的用户是:酒店前台。
        2、该酒店4层楼,每层20间
                一楼为单人间,二楼为双人间,三楼为标准间,四楼为豪华套房。
        3、酒店使用一个二维数组来模拟。“Room[][] rooms;”
        4、酒店中的每一个房间应该是一个java对象:Room
        5、每一个房间Room应该有:房间编号、房间类型、房间是否空闲.
        6、系统应该对外提供的功能:
                可以预定房间:用户输入房间编号,订房。
                可以退房:用户输入房间编号,退房。
                可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间状态。
public class Room{
    //实例变量
    private int number;
    private String type;
    private boolean status;
    //构造方法
    public Room(){

    }
    public Room(int number, String type, boolean status){
        this.number = number;
        this.type = type;
        this.status = status;
    }
    //getter and setter
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean getStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }
    //预定方法
    public void reserve(){
        if(this.status == false){
            System.out.println("该房间以被占用,预定失败");
            return;
        }
        //预定即将room对象的status变量改变为false
        this.setStatus(false);
        System.out.println("预定房间" + number + "成功");
    }
    //退房方法
    public void exit(){
        if (this.status == true){
            System.out.println("该房间未被占用,无法退房");
            return;
        }
        //退房即将room对象的status变量改变为true
        this.setStatus(true);
        System.out.println("退房" + number + "成功");
    }
    //重写toString方法
    @Override
    public String toString() {
        return "["+ this.number + "," + this.type + "," + (this.status ? "空闲" : "占用") + "]";
    }
    //重写equals方法,尽管该方法在该系统中不使用,但还是建议写出,就像构造方法和set、get方法一样尽量写出
    @Override
    public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof Room)){
            return false;
        }
        if (this == obj){
            return true;
        }
        Room room = (Room)obj;
        return this.number == room.number;
    }

}
public class Hotel {
    //用二维数组来模拟酒店
    //动态初始化,防止空指针异常
    private Room[][] rooms = new Room[4][20];
    //构造方法,并且对rooms进行初始化
    public Hotel() {
        for (int i = 0; i < rooms.length; i++) {
            for (int j = 0; j < rooms[i].length; j++) {
                //数组下标从0开始
                if(i == 0){
                    rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"单人间",true);
                }else if (i == 1){
                    rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"双人间",true);
                }else if (i == 2){
                    rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"标准间",true);
                }else{
                    rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"豪华套房",true);
                }
            }
        }
    }
    //getter and setter
    public Room[][] getRooms() {
        return rooms;
    }

    public void setRooms(Room[][] rooms) {
        this.rooms = rooms;
    }
    //打印所有房间的状态的方法print()
    public void print(){
         for (int i = 0; i < rooms.length; i++){
             for (int j = 0, k = 0; j < rooms[i].length; j++) {
                 System.out.print(rooms[i][j] + "\t");
                 k++;
                 //对输出的房间信息进行排版
                 if (k % 5 == 0){
                     System.out.println();
                 }
             }
             System.out.println();
         }
    }
}
import java.util.Scanner;

public class ManagementSystem {
    public static void main(String[] args) {
        //该系统的一些操作方法
        System.out.println("欢迎使用本系统,请仔细阅读以下使用说明!!!");
        System.out.println("使用说明:");
        System.out.println("\t1、输入编号[1]使用订房功能。");
        System.out.println("\t2、输入编号[2]使用退房功能。");
        System.out.println("\t3、输入编号[3]查看所有房间状态。");
        System.out.println("\t4、输入编号[0]退出该系统。");

        Hotel hotel = new Hotel();
        //采用死循环来是系统多次运行,并且提供了退出系统的条件
        for (; true ;){
            System.out.print("请输入编号:");
            Scanner s = new Scanner(System.in);
            int i = s.nextInt();
            //对用户输入的编号进行不同的操作
            if(i == 1){
                System.out.print("输入房间编号:");
                int number = s.nextInt();
                //对用户输入的房间编号进行判断,防止bug。
                if (number / 100 > 4 || number / 100 < 1 || number % 100 > 20 || number % 100 < 1){
                    System.out.println("输入的房间编号有误。");
                    continue;
                }else{
                    //数组下标从0开始,所以对用户输入的房间编号进行变换,使之与数组下标对应
                    hotel.getRooms()[number / 100 - 1][number % 100 - 1].reserve();
                }
            }else if(i == 2){
                System.out.print("输入房间编号:");
                int number = s.nextInt();

                if (number / 100 > 4 || number / 100 < 1 || number % 100 > 20 || number % 100 < 1){
                    System.out.println("输入的房间编号有误。");
                    continue;
                }else{
                    hotel.getRooms()[number / 100 - 1][number % 100 - 1].exit();
                }
            }else if(i == 3){
                //打印所有房间的状态
                hotel.print();
            }else if(i == 0){
                //退出系统
                System.out.println("再见,欢迎下次再来!");
                return;
            }else{
                System.out.println("输入的编号有误,请重新输入");
            }
        }
    }
}

        此系统还有个致命bug:在程序运行当中,如果断电的话,内存将被释放,之前的数据都会被清除,当再次启动该系统时,所有数据都会变为初始状态。由于博主还未学习数据库,无法将数据写入硬盘,待学习了数据库后,会对该系统进行优化。

        如有可以改进的地方,欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值