目录
1、 首先要动态生成一个酒店房间信息的数组,用几维数组好呢?
2、 控制台的欢迎界面和控制台输入的次数控制写个方法封装起来,通过用户输入的数字去判断对应的不同功能
3、 数字对应的功能方法执行单独用个方法写起来,在此方法里面调用具体的功能实现
1.需求说明
1.1 需求
实现一个简单的酒店客房管理系统,它具备
5
个功能,分别为【
1
:查看所有房间功能;
2
:订房功能; 3:退房功能;
4
:修改价格功能;
5
:退出本系统功能】
1.2. 实现分析
我们要实现的主体数据就是酒店的房间, 以及房间有哪些信息:所在楼层、房间编号、房间价格、房间状态、房间的类型等等,数组非常适合存储这些信息
-
房间的类型: 单人间、双人间,标准间,商务房,豪华包
-
房间的价格: 98 128 148 288 68
-
房间的状态:空闲 有人
-
房间的楼层: 1,2,3,4,5,6.........
- 房间的编号:101,102,103,104,201,202,203….
String[] roomTypeArr = {"单人间", "双人间", "标准间", "商务房", "豪华包"}; //房间类型
int[] priceArr = {98, 128, 148, 228, 688}; //房间价格
int[][][] rooms = new int[3][5][3]; //房间信息,3层,每层5个房间,每个房间3个信息(价格、类型、状态)
rooms= { //楼层---1,2,3,4……
{ //房间----101,102,103……
{类型,单价,入住状态} //101
{类型,单价,入住状态} //102
{类型,单价,入住状态} //103
{类型,单价,入住状态} //104
},
{
{类型,单价,入住状态}
{类型,单价,入住状态}
{类型,单价,入住状态}
{类型,单价,入住状态}
},
{
{类型,单价,入住状态}
{类型,单价,入住状态}
{类型,单价,入住状态}
{类型,单价,入住状态}
}
}
1.3 功能点
1
:查看所有房间
实际上就是对数组的遍历,打印在控制台显示
2
:订房
要根据用户输入的房间号给该房间改变一下房间的状态即可
3
:退房
根据用户的输入房间号,对该房间号状态改变为空闲即可
4
:修改价格
要根据房间的类型,修改该类型的价格(拿到用户输入的新的价格,把这个新的价格替换掉老的价格)
5
:退出
结束,用户不能在控制继续输入了
1.4 项目运行效果
1.5. 代码实现思路
1、 首先要动态生成一个酒店房间信息的数组,用几维数组好呢?
通过观察发现,我们的楼层和房间都是有序的
,
可以作为数组下标
,
那我们房间的价格
.
类型
,
状态是变
化的
, 可以作为数据,
那我们先把这些数据使用一个数组来存储
,
那我们可以使用到三维数组
,
结构图如下
:
2、 控制台的欢迎界面和控制台输入的次数控制写个方法封装起来,通过用户输入的数字去判断对应的不同功能
3、 数字对应的功能方法执行单独用个方法写起来,在此方法里面调用具体的功能实现
4、 编写各个功能代码的实现
4-1
:查看
将数组遍历打印出来
4-2
:订房
根据用户输入的房间号修改房间的状态值
4-3
:退房
根据用户输入的房间号修改房间的状态值
4-4
:修改价格
根据用户输入的类型,将用户输入的新价格替换旧的价格
4-5
:退出
System.exit(0);
2.实现思路与源码
2.1 创建class类
import java.util.Scanner;
/**
* 酒店管理系统:
* 需求:
* 实现一个简单的酒店客房管理系统,它具备5个功能,分别为
* 【1:查看所有房间功能;2:订房功能;3:退房功能;4:修改价格功能;5:退出本系统功能】
*/
public class HotelManagement {
//创建实现功能的方法
}
2.2 创建main方法
public static void main(String[] args) {
/**
* 实现思路:
* 1.定义房间类型数组--单人间、双人间、标准间、商务房、豪华包
* 2.定义房间价格数组--98、128、148、228、688
* 3.定义房间信息数组--3层,每层5个房间,每个房间3个信息(价格、类型、状态)
* 4.初始化房间信息--遍历房间信息,给房间信息赋值--价格、类型、状态--0表示空闲,1表示
有人
* 5.显示菜单--查看所有房间功能;订房功能;退房功能;修改价格功能;退出本系统功能
* 6.根据用户选择的菜单,执行相应的功能
*/
String[] roomTypeArr = {"单人间", "双人间", "标准间", "商务房", "豪华包"}; //房间类型
int[] priceArr = {98, 128, 148, 228, 688}; //房间价格
int[][][] rooms = new int[3][5][3]; //房间信息,3层,每层5个房间,每个房间3个信息(价格、类型、状态)
// 遍历房间信息,给房间信息赋值
for (int i = 0; i < rooms.length; i++) { //遍历楼层
for (int j = 0; j < rooms[i].length; j++) { //遍历房间
for (int h = 0; h < rooms[i][j].length; h++) { //遍历房间信息
//根据房间信息的下标,给房间信息赋值
switch (h) {
case 0: //价格
//房间价格,0表示98,1表示128,2表示148,3表示228,4表示688
rooms[i][j][h] = j % priceArr.length;
break;
case 1: //类型
//房间类型,0表示单人间,1表示双人间,2表示标准间,3表示商务房,4表示豪华包
rooms[i][j][h] = j % roomTypeArr.length;
break;
case 2: //状态
//房间状态,0表示空闲,1表示有人
rooms[i][j][h] = 0;
break;
}
}
}
}
System.out.println("==========欢迎使用酒店管理系统========");
System.out.println("1:查看所有房间功能;2:订房功能;3:退房功能;4:修改价格功 能;5:退出本系统功能");
while (true) {// 无限循环,直到用户选择“5”才退出系统
System.out.println("请输入您的服务选择项:");
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {//判断输入的是否是数字
int choice = scanner.nextInt();// 接收用户输入的数字
switch (choice) {
case 1:
System.out.println("查看所有房间功能");
showRoomInfo(rooms, roomTypeArr, priceArr);// 查看所有房间功能
break;
case 2:
roomReservation(rooms, true);// 订房功能,true表示订房
break;
case 3:
roomReservation(rooms, false);// 退房功能,false表示退房
break;
case 4:
System.out.println("修改价格功能");
modifyprice(rooms, priceArr);// 修改价格功能
break;
case 5:
System.out.println("退出本系统功能");
System.exit(0);// 退出JVM虚拟机
break;
default:
System.out.println("您的输入有误,请重新输入");
break;
}
} else {
System.out.println("您的输入是非法字符,请重新输入");
}
}
}
2.3 创建房屋详情信息方法
public static void showRoomInfo(int[][][] rooms, String[] roomTypeArr, int[] priceArr) {
/**
* 遍历房间信息,打印房间信息
* 1.打印楼层
* 2.打印房间号
* 3.打印价格
* 4.打印类型
* 5.打印状态
* 6.换行
* 7.打印下一层的房间信息
* 8.换行
*/
System.out.println("酒店房间详情表:");
System.out.println("楼层\t房间号\t价格\t类型\t\t状态");
for (int i = 0; i < rooms.length; i++) { //遍历楼层
System.out.print(i + 1); //楼层
for (int j = 0; j < rooms[i].length; j++) { //遍历房间
int roomNo = (i + 1) * 100 + (j + 1);//房间号 = 楼层+两位的房间号
System.out.print("\t" + roomNo);//房间号
for (int h = 0; h < rooms[i][j].length; h++) { //遍历房间信息
switch (h) { //根据房间信息的下标,打印房间信息
case 0: //价格
//根据房间信息的下标,打印房间价格
System.out.print("\t\t" + priceArr[rooms[i][j][h]]);
break;
case 1: //类型
//根据房间信息的下标,打印房间类型
System.out.print("\t" + roomTypeArr[rooms[i][j][h]]);
break;
case 2: //状态
if (rooms[i][j][h] == 0) { //0表示空闲,1表示有人
System.out.print("\t空闲");
} else if (rooms[i][j][h] == 1) {
System.out.print("\t有人");
}
break;
}
}
System.out.println();//换行
}
}
}
2.4 创建订房与退房的方法
public static void roomReservation(int[][][] rooms, boolean isReservation) {
/**
* 订房与退房功能
* 1.接收用户输入的楼层
* 2.接收用户输入的房间号
* 3.判断用户选择的是订房还是退房--true表示订房,false表示退房
* 4.如果是订房,判断房间是否已经有人,如果有人,提示重新选择,如果没有人,修改房间状态为1,
表示有人
* 5.如果是退房,判断房间是否已经有人,如果有人,修改房间状态为0,表示空闲,如果没有人,提示
重新选择
*/
Scanner scanner = new Scanner(System.in);
out1:
while (true) {
System.out.println("请选择楼层(1-3):");
int floor = scanner.nextInt() - 1;// 接收用户输入的楼层
if (floor >= 0 && floor < 3) {
System.out.println("请选择房间(1-5):");
while (true) {
int roomNo = scanner.nextInt() - 1;// 接收用户输入的房间号
if (roomNo >= 0 && roomNo < 5) {
if (isReservation) { //true表示订房,false表示退房
if (rooms[floor][roomNo][2] == 0) { //0表示空闲,1表示有人
rooms[floor][roomNo][2] = 1;//修改房间状态为1,表示有人
System.out.println("房间订好了,入住愉快!");
return; //退出方法
} else {
System.out.println("您选择的房间已经有人了,请重新选择");
return; //退出方法
}
} else {
if (rooms[floor][roomNo][2] == 1) { //0表示空闲,1表示有人
rooms[floor][roomNo][2] = 0;// 修改房间状态为0,表示空闲
System.out.println("退房成功,欢迎下次光临!");
return; //退出方法
} else {
System.out.println("您选择的房间未入住,请重新选择");
return; //退出方法
}
}
} else {
System.out.println("您输入的房间号有误,请重新输入(1-5)");
}
}
} else {
System.out.println("您输入的楼层有误,请重新输入");
}
}
}
2.5 修改房间价格
public static void modifyprice(int[][][] rooms, int[] priceArr) {
/**
* 修改房间价格
* 1.接收用户输入的房间类型
* 2.接收用户输入的价格
* 3.根据用户输入的房间类型,修改价格
*/
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,退出循环
}
}
3.完整代码展示
package day240317;
import java.util.Scanner;
/**
* 酒店管理系统:
* 需求:
* 实现一个简单的酒店客房管理系统,它具备5个功能,分别为
* 【1:查看所有房间功能;2:订房功能;3:退房功能;4:修改价格功能;5:退出本系统功能】
*/
public class HotelManagement {
//创建实现功能的方法
public static void main(String[] args) {
/**
* 实现思路:
* 1.定义房间类型数组--单人间、双人间、标准间、商务房、豪华包
* 2.定义房间价格数组--98、128、148、228、688
* 3.定义房间信息数组--3层,每层5个房间,每个房间3个信息(价格、类型、状态)
* 4.初始化房间信息--遍历房间信息,给房间信息赋值--价格、类型、状态--0表示空闲,1表示
有人
* 5.显示菜单--查看所有房间功能;订房功能;退房功能;修改价格功能;退出本系统功能
* 6.根据用户选择的菜单,执行相应的功能
*/
String[] roomTypeArr = {"单人间", "双人间", "标准间", "商务房", "豪华包"}; //房间类型
int[] priceArr = {98, 128, 148, 228, 688}; //房间价格
int[][][] rooms = new int[3][5][3]; //房间信息,3层,每层5个房间,每个房间3个信息(价格、类型、状态)
// 遍历房间信息,给房间信息赋值
for (int i = 0; i < rooms.length; i++) { //遍历楼层
for (int j = 0; j < rooms[i].length; j++) { //遍历房间
for (int h = 0; h < rooms[i][j].length; h++) { //遍历房间信息
//根据房间信息的下标,给房间信息赋值
switch (h) {
case 0: //价格
//房间价格,0表示98,1表示128,2表示148,3表示228,4表示688
rooms[i][j][h] = j % priceArr.length;
break;
case 1: //类型
//房间类型,0表示单人间,1表示双人间,2表示标准间,3表示商务房,4表示豪华包
rooms[i][j][h] = j % roomTypeArr.length;
break;
case 2: //状态
//房间状态,0表示空闲,1表示有人
rooms[i][j][h] = 0;
break;
}
}
}
}
System.out.println("==========欢迎使用酒店管理系统========");
System.out.println("1:查看所有房间功能;2:订房功能;3:退房功能;4:修改价格功 能;5:退出本系统功能");
while (true) {// 无限循环,直到用户选择“5”才退出系统
System.out.println("请输入您的服务选择项:");
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {//判断输入的是否是数字
int choice = scanner.nextInt();// 接收用户输入的数字
switch (choice) {
case 1:
System.out.println("查看所有房间功能");
showRoomInfo(rooms, roomTypeArr, priceArr);// 查看所有房间功能
break;
case 2:
roomReservation(rooms, true);// 订房功能,true表示订房
break;
case 3:
roomReservation(rooms, false);// 退房功能,false表示退房
break;
case 4:
System.out.println("修改价格功能");
modifyprice(rooms, priceArr);// 修改价格功能
break;
case 5:
System.out.println("退出本系统功能");
System.exit(0);// 退出JVM虚拟机
break;
default:
System.out.println("您的输入有误,请重新输入");
break;
}
} else {
System.out.println("您的输入是非法字符,请重新输入");
}
}
}
public static void showRoomInfo(int[][][] rooms, String[] roomTypeArr, int[] priceArr) {
/**
* 遍历房间信息,打印房间信息
* 1.打印楼层
* 2.打印房间号
* 3.打印价格
* 4.打印类型
* 5.打印状态
* 6.换行
* 7.打印下一层的房间信息
* 8.换行
*/
System.out.println("酒店房间详情表:");
System.out.println("楼层\t房间号\t价格\t类型\t\t状态");
for (int i = 0; i < rooms.length; i++) { //遍历楼层
System.out.print(i + 1); //楼层
for (int j = 0; j < rooms[i].length; j++) { //遍历房间
int roomNo = (i + 1) * 100 + (j + 1);//房间号 = 楼层+两位的房间号
System.out.print("\t" + roomNo);//房间号
for (int h = 0; h < rooms[i][j].length; h++) { //遍历房间信息
switch (h) { //根据房间信息的下标,打印房间信息
case 0: //价格
//根据房间信息的下标,打印房间价格
System.out.print("\t\t" + priceArr[rooms[i][j][h]]);
break;
case 1: //类型
//根据房间信息的下标,打印房间类型
System.out.print("\t" + roomTypeArr[rooms[i][j][h]]);
break;
case 2: //状态
if (rooms[i][j][h] == 0) { //0表示空闲,1表示有人
System.out.print("\t空闲");
} else if (rooms[i][j][h] == 1) {
System.out.print("\t有人");
}
break;
}
}
System.out.println();//换行
}
}
}
public static void roomReservation(int[][][] rooms, boolean isReservation) {
/**
* 订房与退房功能
* 1.接收用户输入的楼层
* 2.接收用户输入的房间号
* 3.判断用户选择的是订房还是退房--true表示订房,false表示退房
* 4.如果是订房,判断房间是否已经有人,如果有人,提示重新选择,如果没有人,修改房间状态为1,
表示有人
* 5.如果是退房,判断房间是否已经有人,如果有人,修改房间状态为0,表示空闲,如果没有人,提示
重新选择
*/
Scanner scanner = new Scanner(System.in);
out1:
while (true) {
System.out.println("请选择楼层(1-3):");
int floor = scanner.nextInt() - 1;// 接收用户输入的楼层
if (floor >= 0 && floor < 3) {
System.out.println("请选择房间(1-5):");
while (true) {
int roomNo = scanner.nextInt() - 1;// 接收用户输入的房间号
if (roomNo >= 0 && roomNo < 5) {
if (isReservation) { //true表示订房,false表示退房
if (rooms[floor][roomNo][2] == 0) { //0表示空闲,1表示有人
rooms[floor][roomNo][2] = 1;//修改房间状态为1,表示有人
System.out.println("房间订好了,入住愉快!");
return; //退出方法
} else {
System.out.println("您选择的房间已经有人了,请重新选择");
return; //退出方法
}
} else {
if (rooms[floor][roomNo][2] == 1) { //0表示空闲,1表示有人
rooms[floor][roomNo][2] = 0;// 修改房间状态为0,表示空闲
System.out.println("退房成功,欢迎下次光临!");
return; //退出方法
} else {
System.out.println("您选择的房间未入住,请重新选择");
return; //退出方法
}
}
} else {
System.out.println("您输入的房间号有误,请重新输入(1-5)");
}
}
} else {
System.out.println("您输入的楼层有误,请重新输入");
}
}
}
public static void modifyprice(int[][][] rooms, int[] priceArr) {
/**
* 修改房间价格
* 1.接收用户输入的房间类型
* 2.接收用户输入的价格
* 3.根据用户输入的房间类型,修改价格
*/
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,退出循环
}
}
}