1.案例需求
实现一个简单的酒店客房管理系统,它具备5个功能,分别为
- 查看所有房间功能;
- 订房功能;
- 退房功能;
- 修改价格功能;
- 退出本系统功能
2.编程思路
- 首先我们在主函数里面要做以下事情:
-
定义房间类型数组-----单人间、双人间、标准间、商务房、豪华包
-
定义房间价格数组-----98、128、148、228、688
-
定义房间信息数组-----3层,每层5个房间,每个房间3个信息(价格、类型、状态)
-
初始化房间信息-----遍历房间信息,给房间信息赋值–价格、类型、状态(0表示空闲,1表示有人)
-
显示菜单-----查看所有房间功能;订房功能;退房功能;修改价格功能;退出本系统功能
-
根据用户选择的菜单,执行相应的功能
- 在查看房间功能时要做以下的事情:
- 打印楼层
- 打印房间号
- 打印价格
- 打印类型
- 打印状态 *
- 换行
- 打印下一层的房间信息
- 换行
- 在订房与退房功能时需要做以下事情:
- 接收用户输入的楼层
- 接收用户输入的房间号
- 判断用户选择的是订房还是退房–true表示订房,false表示退房
- 如果是订房,判断房间是否已经有人,如果有人,提示重新选择,如果没有人,修改房间状态为1,表示有人
- 如果是退房,判断房间是否已经有人,如果有人,修改房间状态为0,表示空闲,如果没有人,提示重新选择
- 在修改价格功能时需要做以下事情:
- 接收用户输入的房间类型
- 接收用户输入的价格
- 根据用户输入的房间类型,修改价格
3.案例源码
package JavaDemo.day0317;
import java.util.Scanner;
/*
酒店管理系统:
功能需求:
1.查看所有房间
2订房间
3退房间
4修改价格
5退出系统
* */
public class HotelManagement {
public static void main(String[] args) {
int[][][] rooms = new int[3][5][3];//创建一个三维数组,表示楼层,房间号,类型
int[] priceArr = {98, 128, 148, 228, 688};//房间价格
String[] roomTypeArr = {"单人间", "双人间", "标准间", "商务房", "豪华包"}; //房间类型
// 遍历房间信息,给房间信息赋值
for (int i = 0; i < rooms.length; i++) {//楼层信息
for (int j = 0; j < rooms[i].length; j++) {//房间号
for (int k = 0; k < rooms[i][j].length; k++) {//每个房间具体的信息类型,状态,价格
switch (k) {
case 0:
rooms[i][j][k] = j;//价格 j % priceArr.length rooms[0][0][0]:第1楼的1号房间的价格 rooms[0][0][1]:第一楼的1号房间的类型 rooms[0][0][2]:第一楼的1号房间的
break;
case 1:
rooms[i][j][k] = j;//类型 j % roomTypeArr.length
break;
case 2:
rooms[i][j][k] = 0;//状态
break;
}
}
}
}
System.out.println("==========欢迎使用酒店管理系统==========");
System.out.println("1:查看所有房间功能;2:订房功能;3:退房功能;4:修改价格功能;5:退出本系统功能");
OUT1:
while (true) {
System.out.println("请输入您的服务选择项:");
Scanner scanner = new Scanner(System.in);
// hasNextInt()方法判断输入的是否是数字
// scanner.hasNext() 方法判断输入的是否是字符串
if (scanner.hasNextInt()) {
int choose = scanner.nextInt();
switch (choose) {
case 1: {
System.out.println("查看所有房间功能");
roomDetails(rooms, priceArr, roomTypeArr);
break;
}
case 2: {
System.out.println("订房功能");
roomReservation(rooms, true);
break;
}
case 3: {
System.out.println("退房功能");
roomReservation(rooms, false);
break;
}
case 4: {
System.out.println("修改价格功能");
modifyprice(rooms,priceArr);
break;
}
case 5: {
System.out.println("退出本系统功能");
System.exit(0);//退出JVM虚拟机
}
default: {
System.out.println("您输入的数字有误,请重新选择");
break;
}
}
} else {
System.out.println("非法输入字符,请重新输入");
}
}
}
// 创建一个显示酒店房间详情信息的方法
public static void roomDetails(int[][][] rooms, int[] priceArr, String[] roomTypeArr) {
System.out.println("楼层\t房间号\t价格\t\t类型\t\t状态");
for (int i = 0; i < rooms.length; i++) {
System.out.print((i + 1) + "\t");
for (int j = 0; j < rooms[i].length; j++) {
System.out.print((i + 1) * 100 + (j + 1) + "\t\t");
for (int k = 0; k < rooms[i][j].length; k++) {
switch (k) {
case 0:
System.out.print(priceArr[rooms[i][j][k]] + "\t\t");
break;
case 1:
System.out.print(roomTypeArr[rooms[i][j][k]] + "\t");
break;
case 2:
if (rooms[i][j][k] == 0)
System.out.println("空闲");
else
System.out.println("有人");
break;
}
}
System.out.print("\t");
}
System.out.println("");
}
}
// 创建订房、退房的方法
public static void roomReservation(int[][][] rooms, boolean isReservation) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入楼层:");
int floor = scanner.nextInt() - 1;
if (floor >= 0 && floor <= 2) {
System.out.println("请输入房间号:");
int number = scanner.nextInt() - 1;
if (number >= 0 && number <= 4) {
if (isReservation) {
if (rooms[floor][number][2] == 0) {
rooms[floor][number][2] = 1;
System.out.println("订房成功,欢迎入住!");
} else
System.out.println("订房失败,房间已有人!");
} else {
if (rooms[floor][number][2] == 1) {
rooms[floor][number][2] = 0;
System.out.println("退房成功,欢迎下次光临!");
} else
System.out.println("退房失败,此房间无人!");
}
} else
System.out.println("您输入的房间号不正确,请重新输入");
} else
System.out.println("您输入的楼层不正确,请重新输入");
}
//修改价格功能
public static void modifyprice(int[][][] rooms, int[] priceArr) {
int type = 0;//房间类型
Scanner scanner = new Scanner(System.in);
boolean flag = true;
while (flag) {
System.out.println("请输入需求修改的房间类型:");
String roomType = scanner.next();// 接收用户输入的房间类型
switch (roomType) {
case "单人间":
type = 0;
break;
case "双人间":
type = 1;
break;
case "标准间":
type = 2;
break;
case "商务房":
type = 3;
break;
case "豪华包":
type = 4;
break;
default:
System.out.println("您输入的房间类型有误,请重新输入");
continue;//跳出本次循环,继续下一次循环
}
System.out.println("请输入修改后的价格:");
int price = scanner.nextInt();// 接收用户输入的价格
priceArr[type] = price;// 修改价格
System.out.println("修改成功!");
flag = false;//修改成功,将标记改为false,退出循环
}
}
}
4.小结
本系统是我曾经在学校课堂上跟着老师做过的一个系统,现在写成博客复习了之前所学知识,更好的疏导了实现思路以便于更好的理解,在这个系统中根据房间信息的特点,使用三维数组来存储房间信息。楼层和房间号可以作为数组的下标,而房间的价格、类型和状态作为数组的数据元素。使用while (true)循环和switch语句来根据用户的输入选择执行不同的功能。在接收用户输入时,程序进行了异常检查,确保输入的是有效的数字,并在输入错误时给出提示。这种异常处理机制可以防止程序因为无效输入而崩溃。
总之,编写这篇博客加深了我对酒店客房管理系统的理解,并且掌握如何将项目需求转化为具体的编程实践。同时,这也是一个很好的练习,帮助我提高编程能力和逻辑思维。