Java代码实现酒店管理系统(基于java的宾馆客房管理系统)

网友投稿 307 2022-07-27


我们通过学习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[] fhttp://ields = 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()http:// {

return rFree;

}

protected void setrFree(Boolhttp://ean 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("请仔细阅读使用说明,输入正确的功能编号");

}

}

}

}

输出结果:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot2入门自动配置原理及源码分析(springboot有几种配置方法)
下一篇:从0开始教你开发一个springboot应用(搭建springboot)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~