javaweb酒店管理系统设计与实现_java餐饮管理系统源码

javaweb酒店管理系统设计与实现_java餐饮管理系统源码前言学习java这段时间以来,给我的感觉是非常枯燥和乏味的,因为学习编程这个过程就是这样,除此之外我是自学,所以遇到问题只能自己上网找资料,或者看一些大佬的文章来解决问题。不过学习过程中让我接触到了这样一个非常有趣的项目:酒店管理系统的小型项目,实现了一些功能,废话不多说看题目。题目为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能要求:该系统的用户是:酒店前台。 酒店使用一个二维数组来模拟。“Room[][]room;”…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

学习java这段时间以来,给我的感觉是非常枯燥和乏味的,因为学习编程这个过程就是这样,除此之外我是自学,所以遇到问题只能自己上网找资料,或者看一些大佬的文章来解决问题。不过学习过程中让我接触到了这样一个非常有趣的项目:酒店管理系统的小型项目,实现了一些功能,废话不多说看题目。

题目

        为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能

        要求:

  1.  该系统的用户是:酒店前台。
  2. 酒店使用一个二维数组来模拟。“Room[][] room;”
  3. 酒店中的每一个房间应该是一个java对象:Room
  4. 每一个房间Room应该有:房间编号,房间类型属性,房间是否空闲。
  5. 系统应该对外提供的功能:
    1. 可以预订房间:用户输入房间编号,订房。
    2. 可以退房:用户输入房间编号,退房。
    3. 可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间状态。

思路

看到这样的题目我开始也是有点懵的,不知道到从什么地方下手,对于新手小白来说是很正常的,没有那个编程逻辑。现在来看看我的逻辑吧

        第一:拿到题目我们先把最简单的,自己看的懂得能做的先做了。比如说:题目中提到的每个房间有房间编号,房间类型属性,房间是否空闲,我们就可以先写一个房间类,并且有房间编号,房间类型属性,房间是否空闲这几个属性。

        第二:酒店使用一个二维数组模拟,并且每一个房间应该是一个java对象,我们可以去定义一个酒店类,定义一个二维数组初始化我们的每一个房间对象

        第三:写订房、退房、打印所有房间状态的逻辑代码

        第四:写一个好看的用户页面

代码

Room类

 房间编号,房间类型属性,房间是否空闲3个属性,提供无参构造,有参构造和setting and getter 方法,并且重写toString()方法和equals()方法

public class Room {
    //房间编号
    private int roomsId;
    /**
    *房间类型
    *标准间 单人间 豪华间
    */
    private String type;
    /**
    *房间是否为空
    *true 为空
    *false为不空
    */
    private boolean state;

    //构造方法
    public Room(){

    }

    public Room(int roomsId, String type, boolean state){
        this.roomsId = roomsId;
        this.type = type;
        this.state = state;
    }

    //setter and getter
    public int getRoomsId() {
        return roomsId;
    }

    public void setRoomsId(int roomsId) {
        this.roomsId = roomsId;
    }

    public String getType() {
        return type;
    }

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

    public boolean isState() {
        return state;
    }

    public void setState(boolean state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "Room[" + this.roomsId + "," + this.type + "," + (this.state ? "空闲" : "占用") + "]";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || !(o instanceof Room) ) return false;
        Room room = (Room) o;
        return this.getRoomsId() == room.getRoomsId();
    }
}

Hotel类

 定义一个二维数组,我们在new Hotel对象时调用无参构造方法初始化二维数组和每一个房间,还有我们一个setter and getter方法

public class Hotel{
    //数组
    private Room[][] rooms;

    //构造方法
    public Hotel(){
        //动态初始化房间
        this.rooms = new Room[3][5];
        //二维数组遍历
        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, "标准间", 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);
                }
            }
        }
    }

    /**
     * 打印所有房间信息
     */
    public void printState(){
        for (int i = 0; i < rooms.length; i++) {
            for (int j = 0; j < rooms[i].length; j++) {
                System.out.print(rooms[i][j] + "\t");
            }
            System.out.println();
        }
    }

    /**
     * 订房
     * @param roomsId
     */
    public void order(int roomsId){
        //获取房间在数组中的下标
        Room room = rooms[roomId / 100 - 1][roomId % 100 -1];
        //修改房间状态
        room.setState(false);
        System.out.println("订房成功" + "," + "房间号是:" + room.getRoomsId());
    }

    /**
     * 退房
     * @param roomsId
     */
    public void exit(int roomsId){
        //获取房间在数组中的下标
        Room room = rooms[roomId / 100 - 1][roomId % 100 -1];
        //修改房间状态
        room.setState(true);
        System.out.println( "房间号:"+ room.getRoomsId() + "," + "退房成功");
    }

    //setter and getter
    public Room[][] getRooms() {
        return rooms;
    }

    public void setRooms(Room[][] rooms) {
        this.rooms = rooms;
    }
}

HotelTest类

这里我们写一个好看的用户界面,这样我们的题目上的功能就算写完了。

public class HotelTest {
    public static void main(String[] args) {
        Hotel hotel = new Hotel();
        System.out.println("欢迎使用酒店管理系统");
        System.out.println("=======================================================");
        System.out.println("我们有以下业务:" + "[1]订房" + "\t" + "[2]退房" + "\t" + "[3]查看房间信息" + "\t" + "[0]退出系统");
        Scanner s = new Scanner(System.in);
        while (true){
            System.out.print("请选择你的业务:");
            int result = s.nextInt();
            switch (result){
                case 1:
                    System.out.print("请输入订房的房间编号:");
                    int i = s.nextInt();
                    hotelManagement.order(i);
                    break;
                case 2:
                    System.out.print("请输入退房的房间编号:");
                    int x = s.nextInt();
                    hotelManagement.exit(x);
                    break;
                case 3:
                    hotelManagement.printState();
                    break;
                case 0:
                    System.out.print("成功退出系统");
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入错误,请重新选择业务");
                    break;
            }
            System.out.println();
        }

    }
}

 效果

a08ce7aba6034f13a74bbab488ea0705.png

解决问题 

 虽然我们把题目中提到的要求都实现了,但是我们想让我们的项目变的好看就需要解决项目中的一些问题:

  1. 如果我们输入的房间编号超过数组长度,我们不想让它提示数组索引长度异常这个错误,而是提示“该房间不存在”或者提示“别的信息”。
  2. 如果我们的房间已经被预订了,客户输入已被预订的房间是不是提示客户“此房间被预订,不能再被预订”,或者退房时,客户不小心输错房间号,把一间空房给退了,此时我们是不是要提示客户“此房间是空房,不能操作退房”。

针对以上问题我们要修改我们的订房方法和退房方法,修改如下:

        针对第一个问题,我是将传过来的房间编号,通过计算分别存到一个int类型的变量中,然后判断它是否大于数组的长度-1,大于就提示“该房间不存在”,其次第二个问题就很容易解决我们只要判断房间状态是否true或者false就行了,订房的时房间状态为true订房,false为房间已有预定,退房操作也是同理。

订房

public void order(int roomsId){
        //楼层
        int floor = roomsId / 100 - 1;
        //间,房间
        int between = roomsId % 100 - 1;
        //判断房间编号是否大于数组的长度
        if (floor > rooms.length -1 || between > rooms[floor].length -1;){
            System.out.println("该房间不存在");
            return;
        }
        Room room = rooms[floor][between];
        //判断房间状态是false的时候,那就提示订房失败
        if (!(room.isState())){
            System.out.println("订房失败,房间已有预定");
            return;
        }
        //程序执行到此处说明房间是true,执行订房
        room.setState(false);
        System.out.println("订房成功" + "," + "房间号是:" + room.getRoomsId());
    }

 退房

public void exit(int roomsId){
        //楼层
        int floor = roomsId / 100 - 1;
        //间,房间
        int between = roomsId % 100 - 1;
        //判断房间编号是否大于数组的长度
        if (floor > rooms.length -1 || between > rooms[floor].length -1;){
            System.out.println("该房间不存在");
            return;
        }
        Room room = rooms[floor][between];
        //判断房间状态,如果是true那就是空房,所以不能退房
        if (room.isState()){
            System.out.println("退房失败,该房间是空房");
            return;
        }
        //程序执行到此处说明房间是false,执行退房操作
        room.setState(true);
        System.out.println( "房间号:"+ room.getRoomsId() + "," + "退房成功");
    }

优化代码

此时我们会发现订房和退房中floor和between这两个属性我们都需要用到,那么我们可不可以将它们两个写出实例属性呢?答案是可以的。将它们拿出来写成实例属性,并且进行封装,提供setter and getter方法,其次写一个方法用于去计算我们的楼层和房间。

还有下面的判断房间编号是否大于数组长度,我们可以定义一个方法,返回值为Boolean类型,这样我们在if()的条件语句中可以直接调用这个方法,就不用写那么长了。

代码如下:

在Hotel类中添加floor和betwe这两个属性,并且属性私有化,提供setter and getter方法。

    //楼层
    private int floor;
    //间,房间
    private int between;

提供计算楼层和房间的方法和判断房间编号是否大于数组长度方法(这里的方法名随便取的,不要在意)

    //用于计算楼层和间数的方法
    public void count(int roomsId){
        this.floor = roomsId / 100 - 1;
        this.between = roomsId % 100 - 1;
    }

    //用于判断楼层和单间是否越过数组长度的方法
    public boolean isArrRoom(){
        return floor > rooms.length -1 || between > rooms[floor].length -1;
    }

最终的订房和退房的方法

 订房:

public void order(int roomsId){
        //调用方法计算楼层和间数
        count(roomsId);
        //调用方法判断楼层和单间是否越过数组长度
        if (isArrRoom()){
            System.out.println("该房间不存在");
            return;
        }
        Room room = rooms[floor][between];
        //判断房间状态,如果不是false那就是true。那就提示订房失败
        if (!(room.isState())){
            System.out.println("订房失败,房间已有预定");
            return;
        }
        //程序执行到此处说明房间是true,执行订房
        room.setState(false);
        System.out.println("订房成功" + "," + "房间号是:" + room.getRoomsId());
    }

退房:

public void exit(int roomsId){
        //调用方法计算楼层和间数
        count(roomsId);
        //调用方法判断楼层和单间是否越过数组长度
        if (isArrRoom()){
            System.out.println("该房间不存在");
            return;
        }
        Room room = rooms[floor][between];
        //判断房间状态,如果是true那就是空房,所以不能退房
        if (room.isState()){
            System.out.println("退房失败,该房间是空房");
            return;
        }
        //程序执行到此处说明房间是false,执行退房操作
        room.setState(true);
        System.out.println( "房间号:"+ room.getRoomsId() + "," + "退房成功");
    }

最终的运行效果

 javaweb酒店管理系统设计与实现_java餐饮管理系统源码

javaweb酒店管理系统设计与实现_java餐饮管理系统源码

总结 

        最后总结一下,后面的优化代码我也是根据自己的想法写出来的,所以不知道写的好不好,写的不好可以指出来,通过这个项目我学习到了很多,除了一些逻辑外,更多的是学习到了分析题目的能力,刚开始拿到题目是会有些迷茫不知道从何处下手,不多我们可以先把自己会写会做的给做了,慢慢的思路就清晰了。除此之外,通过项目可以复习自己所学到的知识,正所谓“温故而知新”,我们在学习了新的知识后,不能忘记旧的知识。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193052.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号