当前位置:

首页 > 编程开发 > 如何使用Java代码实现酒店管理系统

如何使用Java代码实现酒店管理系统

一.需求分析我们如果要实现酒店管理系统,就需要先对酒店管理系统的业务要求进行分析:1.酒店管理系统需要实现哪些功能?(1)输入某个命令查询酒店中的所有房间;(2)输入某个房间的编号订房;(3)输入某个房间的编号退房;(4)输入某个命令可以退出酒店管理系统;2.酒店管理系统使用什么数据结构来表示房间?(1)酒店管理系统使用数组的形式来存储房间,这里我们用二维数组来表示;3.酒店的房间我们都有什么属性?(1)房间编号;(2)房间类型;(3)房间是否空闲;4.我们用什么来控制房间类有上面这些属性?(1)我们可以

本文目录

    一. 需求分析

    我们如果要实现酒店管理系统,就需要先对酒店管理系统的业务要求进行分析:

    1.酒店管理系统需要实现哪些功能?

    (1)输入某个命令查询酒店中的所有房间;
    (2)输入某个房间的编号订房;
    (3)输入某个房间的编号退房;
    (4)输入某个命令可以退出酒店管理系统;

    2.酒店管理系统使用什么数据结构来表示房间?

    (1)酒店管理系统使用数组的形式来存储房间,这里我们用二维数组来表示;

    3.酒店的房间我们都有什么属性?

    (1)房间编号;
    (2)房间类型;
    (3)房间是否空闲;

    4.我们用什么来控制房间类有上面这些属性?

    (1)我们可以使用自定义注解来实现;

    二. 画图分析

    如何使用Java代码实现酒店管理系统

    三. 代码结构

    如何使用Java代码实现酒店管理系统

    四. 代码实现

    /**
        自定义注解类:该类作用在房间类上。
    */
    @Retention(RUNTIME)        // 用该注解表示此自定义注解可以被外部映射到
    @Target(TYPE)            // 用该注解表示此自定义注解只可以作用在类上
    public @interface ProperyAnnotation {}
    /**
        当自定义注解类作用在房间实体类上时,该类是用来判断房间实体类上是否有:房间编号、房间类型、房间是否空闲这些属性的。
    */
    public class ProperyAnnotationToJudge {
    
        // 判断ProperyAnnotation注解的某个类中是否有某些属性的方法
        public static void Judge () {
            try {
                // 使用反射机制来反射Room类
                // 我这里的房间Room类放到了test包下,您可以自定义它的路径。
                Class c = Class.forName("test.Room");
                // 判断Room类上是否存在@ProperyAnnotation注解
                if (c.isAnnotationPresent(ProperyAnnotation.class)) {
                    // 如果Room类上存在@ProperyAnnotation注解就获取这个Room类中的全部属性
                    Field[] fields = c.getFields();
                    boolean isExist = false;
                    for (Field field : fields) {
                        // 如果Room类中存在房间编号、房间类型、房间是否空闲这些属性,就让isExist=true,否则抛出异常
                        if (item.getName().equals("rId") && item.getType().getSimpleName().equals("Integer")) {
                            for (Field item1 : fields) {
                                if (item1.getName().equals("rType") && item1.getType().getSimpleName().equals("String")) {
                                    for (Field item2 : fields) {
                                        if (item2.getName().equals("rFree") && item2.getType().getSimpleName().equals("Boolean")) {
                                            isExist = true;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (!isExist) {
                        throw new ProperyException("Room类中不存在房间编号、房间类型、房间是否空闲这些属性");
                    }
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    /**
        当ProperyAnnotation注解作用的房间实体类中没有房间编号、房间类型、房间是否空闲这些属性时,此类为抛出的异常类。
    */
    public class ProperyException extends RuntimeException {
        private static final long serialVersionUID = -8343113740914228496L;
        public ProperyException () {}
        public ProperyException (String msg) {super(msg);}
    }
    /**
        Room房间实体类
    */
    @ProperyAnnotation
    public class Room {
        private Integer rId;    // 房间编号
        private String rType;    // 房间类型
        private Boolean rFree;    // 房间是否空闲
        public Room () {}
        public Room (Integer rId, String rType, Boolean rFree) {
            this.rId = rId;
            this.rType = rType;
            this.rFree = rFree;
        }
        protected Integer getrId() {
            return rId;
        }
        protected void setrId(Integer rId) {
            this.rId = rId;
        }
        protected String getrType() {
            return rType;
        }
        protected void setrType(String rType) {
            this.rType = rType;
        }
        protected Boolean getrFree() {
            return rFree;
        }
        protected void setrFree(Boolean rFree) {
            this.rFree = rFree;
        }
        @Override
        public String toString() {
            return "Room [" + rId + ", " + rType + ", "+ (rFree ? "有人入住" : "无人入住")+"]";
        }
    }
    /**
        酒店管理实体类:用来管理房间的,其中包括查看所有房间状态、订房、退房功能。
    */
    public class Hotel {
    
        // 这里需要定义一个二维数组来表示房间,因为我们设想的酒店有很多层,且每层有很多你发件。
        private static Room[][] rooms;
        
        public Hotel () {
            // 这里定义酒店为5层,且每层有9个房间
            rooms = new Room[5][9];
            // 这里我们来设置酒店的房间,由于酒店的房间很多,所以我们使用for循环来分别设置每个楼层。
            for (int m = 0 ; m < rooms.length ; m ++) {
                for (int n = 0 ; n < rooms[m].length ; n ++) {
                    // 第一层
                    if (m == 0) {
                        /*
                            这里我们的房间编号这样设置:
                            如果是是酒店的第一层楼的第一个房间,我们将房间编号设置成:101
                            我规定我们的酒店的楼层为1~5层;
                            我规定我们的酒店的第一个房间为1
                            所以如果我们用二维数组来表示酒店的楼层和第几个房间时,因为我们的二维数组的横纵坐标都是从0开始的,所以我们需要分别加上1,此时房间编号的表达式就为:
                            (m + 1) * 100 + n + 1
                            当m = 0时:
                                n = 0:房间编号为101;
                                n = 1:房间编号为102;
                                n = 2;房间编号为103;
                                ...
                            当m = 1时:
                                n = 0:房间编号为201;
                                n = 1:房间编号为202;
                                ...
                            ...
                        */
                        rooms[m][n] = new Room((m + 1) * 100 + n + 1, "单人豪华房", false);
                    }
                    
                    // 第二层
                    if (m == 1) {
                        rooms[m][n] = new Room((m + 1) * 100 + n + 1, "双人豪华房", false);
                    }
                    
                    // 第三层
                    if (m == 2) {
                        rooms[m][n] = new Room((m + 1) * 100 + n + 1, "三人豪华房", false);
                    }
                    
                    // 第四层
                    if (m == 3) {
                        rooms[m][n] = new Room((m + 1) * 100 + n + 1, "三人豪华房", false);
                    }
                    
                    // 第五层
                    if (m == 4) {
                        rooms[m][n] = new Room((m + 1) * 100 + n + 1, "三人豪华房", false);
                    }
                }
            }
        }
        
        // 查看所有房间状态
        public void queryAllRooms () {
            for (int m = 0 ; m < rooms.length ; m ++) {
                for (int n = 0 ; n < rooms[m].length ; n ++) {
                    System.out.println(rooms[m][n].toString());
                }
            }
        }
        
        // 使用房间编号订房
        public void makeRoom (int rId) {
            Room room = rooms[rId / 100 - 1][rId % 100 - 1];
            // 如果该编号的房间已经有人订了
            if (room.getrFree() == true) {
                System.out.println("抱歉,请您订购其他房间,此房间已经有人居住!");
            } else {
                room.setrFree(true);
                System.out.println("订房完成");
            }
        }
        
        // 使用房间编号退房
        public void existRoom (int rId) {
            Room room = rooms[rId / 100 - 1][rId % 100 - 1];
            // 如果该编号的房间本来就没有人居住
            if (room.getrFree() == false) {
                System.out.println("抱歉,请您退订其他房间,该房间没有人居住不需要退订!");
            } else {
                room.setrFree(false);
                System.out.println("退房完成");
            }
        }
    }
    /**
        酒店的操作测试类:
    */
    public class Test {
        public static void main (String[] args) {
            ProperyAnnotationToJudge.Judge();
            Hotel hotel = new Hotel();
            System.out.println("欢迎使用酒店管理系统,请认真阅读以下使用说明:");
            System.out.println("请输入对应的功能编号:[1]查看房间列表; [2]订房; [3]退房; [0]退出系统");
            Scanner scanner = new Scanner(System.in);
            while (true) {
                System.out.print("请输入功能编号:");
                Integer i = scanner.nextInt();
                if (i == 1) {
                    hotel.queryAllRooms();
                    System.out.println("酒店所有的房间已经加载完毕!");
                }
                else if (i == 2) {
                    System.out.print("请输入房间编号,房间编号为101~110、201~210、301~310、401~410、501~510:");
                    Integer rId = scanner.nextInt();
                    if (rId >= 101 && rId <= 110 || rId >= 201 && rId <= 210 || rId >= 301 && rId <= 310 || rId >= 401 && rId <= 410 || rId >= 501 && rId <= 510) {
                        hotel.makeRoom(rId);
                    } else {
                        System.out.println("请输入正确的房间编号!");
                    }
                }
                else if (i == 3) {
                    System.out.print("请输入房间编号,房间编号为101~110、201~210、301~310、401~410、501~510:");
                    Integer rId = scanner.nextInt();
                    if (rId >= 101 && rId <= 110 || rId >= 201 && rId <= 210 || rId >= 301 && rId <= 310 || rId >= 401 && rId <= 410 || rId >= 501 && rId <= 510) {
                        hotel.existRoom(rId);
                    } else {
                        System.out.println("请输入正确的房间编号!");
                    }
                    
                }
                else if (i == 0) {
                    System.out.println("成功退出酒店管理系统!");
                    scanner.close();
                    return;
                }
                else {
                    System.out.println("请仔细阅读使用说明,输入正确的功能编号");
                }
            }
        }
    }

    输出结果:

    如何使用Java代码实现酒店管理系统

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。