Java代码实现酒店管理系统

我们通过学习Java基础知识,让自己正式踏入学习Java语言的行列,这篇博客是用来让我们真正的了解并应用面向对象的思想来实现的。

使用简单的Java代码实现酒店管理系统,供大家参考,具体内容如下

一. 需求分析

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

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

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

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

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

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

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

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

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

二. 画图分析

三. 代码结构

四. 代码实现

/**
    自定义注解类:该类作用在房间类上。
*/
@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("请仔细阅读使用说明,输入正确的功能编号");
            }
        }
    }
}

输出结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现简单酒店管理系统

    用Java编写一个简单的酒店管理系统,供大家参考,具体内容如下 为某个酒店编写程序:酒店管理系统,模拟订房.退房.打印所有房间状态等功能. 1.该系统的用户是:酒店前台.2.酒店使用一个二维数组来模拟.“Room[][] rooms;”3.酒店中的每一个房间应该是一个java对象:Room4.每一个房间Room应该有:房间编号.房间类型.房间是否空闲.5.系统应该对外提供的功能: 可以预定房间:用户输入房间编号,订房.可以退房:用户输入房间编号,退房.可以查看所有房间的状态:用户输入某个指令应该

  • java实现酒店管理系统

    本文实例为大家分享了java实现酒店管理系统的具体代码,供大家参考,具体内容如下 编写环境:MyEclipse2014+sql server2014 系统功能: 1.登录验证 2.房态统计显示 3.预定登记并入库 4.入住登记并入库 5.换房登记并入库 6.客人信息查询 7.退房并入库 运行界面如下: =====登录界面====== =====主界面===== =====为每个房间设置弹出菜单====== =====登记界面====== =====换房界面===== =====退房界面=====

  • 基于JavaSwing设计和实现的酒店管理系统

    目录 前言: 引言 主要技术和工具: 功能截图: 登录管理: 酒店管理信息: 开房: 退房: 房间信息: 顾客信息: 关键代码: 主入口: 开房入住: 数据库设计: 用户表: 入住信息表: 房间信息表 : 总结: 前言: 项目是使用Java swing开发,可实现基础数据维护用户登录.系统首页酒店信息管理.主要模块是开房管理.退房管理.房间信息管理.顾客信息管理等功能.界面设计比较简介.适合作为Java课设设计以及学习技术使用.获取源码 引言 在信息高度发达的今天, 酒店业务涉及的各个工作环节已

  • Java实现简单的酒店管理系统

    本文实例为大家分享了java实现酒店管理系统的具体代码,供大家参考,具体内容如下 要求: [酒店管理系统]HotelSystem.java 某酒店有12层楼,每层楼有10个房间(二维数组),要求为该酒店设计一套简单的前台房间管理程序,该程序可以通过在命令行输入命令来为客人办理入住和退房手续.要求该程序支持通过命令行输入以下命令来进行入住,退房及查询的操作: (1).search:查询所有房间的状态  无人住显示empty,有人则显示住户姓名(2).in 房间号码 姓名 :客人入住 命令:in 请

  • Java 实战练手项目之酒店管理系统的实现流程

    一.项目简述 功能包括(管理员和用户角色): 酒店预订,酒店管理,员工管理,入住原理,订单管理, 楼层管理,退房管理,营业额报表等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+

  • Java实现酒店客房管理系统

    本文实例为大家分享了Java实现酒店客房管理系统的具体代码,供大家参考,具体内容如下 LoginFrame.java package loginManage; import java.awt.Color; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing

  • Java swing实现酒店管理系统

    今天给大家提供一个由今天给大家提供一个由Java swing实现的酒店管理系统,数据库采用sqlserver,我会贴上部分代码,完整的代码请看文章最下方下载,下面看代码: 1.主框架代码: package 主框架窗口; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEven

  • Java实战之酒店人事管理系统的实现

    目录 一.项目运行 二.效果图 三.核心代码 用户管理注册登录控制层 房间管理控制层 订单管理控制层 角色管理控制层 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax 等等 二.效果图 三.核心代码 用户管理

  • Java代码实现酒店管理系统

    我们通过学习Java基础知识,让自己正式踏入学习Java语言的行列,这篇博客是用来让我们真正的了解并应用面向对象的思想来实现的. 使用简单的Java代码实现酒店管理系统,供大家参考,具体内容如下 一. 需求分析 我们如果要实现酒店管理系统,就需要先对酒店管理系统的业务要求进行分析: 1.酒店管理系统需要实现哪些功能? (1)输入某个命令查询酒店中的所有房间:(2)输入某个房间的编号订房:(3)输入某个房间的编号退房:(4)输入某个命令可以退出酒店管理系统: 2.酒店管理系统使用什么数据结构来表示

  • java代码实现银行管理系统

    本文实例为大家分享了java银行管理系统的具体代码,供大家参考,具体内容如下 银行业务调度 一.系统要求 1.银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 2.有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 3.异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户  =  1 :6 :3. 4.客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客

  • Java代码实现简单酒店管理系统

    本文实例为大家分享了Java实现简单酒店管理系统的具体代码,供大家参考,具体内容如下 为某个酒店编写程序:酒店管理系统,模拟订房.退房和打印所有房间状态等功能 1.该系统的用户是:酒店前台 2.酒店使用一个二维数组来模拟”Room[][] rooms" 3.酒店中的每一个房间应该是一个对象:Room 4.每一个房间应该有:房间编号.房间类型.房间是否空闲 5.一同应该对外提供的功能:      订房:用户输入房间编号来订房      退房:用户输房间编号来退房      查看所有房间状态:用户输

  • Java 实现简易教务管理系统的代码

    Main.java import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println("\t\t简易教务管理系统"); System.out.println("1.录入学生\t2.显示学生\t3.录入课程\t4.显示课程\t5.录入教师" +"\t6.显示教师\t7.学生选课\t8.教师录入成绩\t9.教师排课\

  • Java+MySQL实现图书管理系统(完整代码)

    (完整代码+实训报告): 链接: https://pan.baidu.com/s/1E6BhEaHMa6Wch5yf6YAjOA 提取码: vnrx 觉着有用就点个赞哦~ 一,功能 管理员登录 图书借阅信息管理 图书信息管理 管理员更改密码 退出系统 二,工具 Eclipse Version: 2018-09 (4.9.0) MySQL Workbench 8.0 CE mysql-connector-java-8.0.13.jar 三.效果图: 登录界面: 主界面: 借阅书籍管理: 个人书库管

  • 3分钟纯 Java 注解搭个管理系统的示例代码

    最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护页面,有时候觉得自己好像天生不适合干前端,你要是让我研究研究后端的技术,看个中间件源码啊,分析分析什么框架底层原理啊,这都问题不大,偶尔搞一下JS也可以.你要是让我写个css样式,那简直要命了,一点也提不起兴趣,不知道有没有跟我一样的. 今天要介绍的框架直接不用写页面了,话不多说,下边咱们直奔主题 Erupt一个通用后

随机推荐