这是Java软件工程师的第一个小型项目。
要求:
为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能。 1、该系统的用户是:酒店前台。 2、该酒店4层楼,每层20间 一楼为单人间,二楼为双人间,三楼为标准间,四楼为豪华套房。 3、酒店使用一个二维数组来模拟。“Room[][] rooms;” 4、酒店中的每一个房间应该是一个java对象:Room 5、每一个房间Room应该有:房间编号、房间类型、房间是否空闲. 6、系统应该对外提供的功能: 可以预定房间:用户输入房间编号,订房。 可以退房:用户输入房间编号,退房。 可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间状态。
public class Room{
//实例变量
private int number;
private String type;
private boolean status;
//构造方法
public Room(){
}
public Room(int number, String type, boolean status){
this.number = number;
this.type = type;
this.status = status;
}
//getter and setter
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
//预定方法
public void reserve(){
if(this.status == false){
System.out.println("该房间以被占用,预定失败");
return;
}
//预定即将room对象的status变量改变为false
this.setStatus(false);
System.out.println("预定房间" + number + "成功");
}
//退房方法
public void exit(){
if (this.status == true){
System.out.println("该房间未被占用,无法退房");
return;
}
//退房即将room对象的status变量改变为true
this.setStatus(true);
System.out.println("退房" + number + "成功");
}
//重写toString方法
@Override
public String toString() {
return "["+ this.number + "," + this.type + "," + (this.status ? "空闲" : "占用") + "]";
}
//重写equals方法,尽管该方法在该系统中不使用,但还是建议写出,就像构造方法和set、get方法一样尽量写出
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Room)){
return false;
}
if (this == obj){
return true;
}
Room room = (Room)obj;
return this.number == room.number;
}
}
public class Hotel {
//用二维数组来模拟酒店
//动态初始化,防止空指针异常
private Room[][] rooms = new Room[4][20];
//构造方法,并且对rooms进行初始化
public Hotel() {
for (int i = 0; i < rooms.length; i++) {
for (int j = 0; j < rooms[i].length; j++) {
//数组下标从0开始
if(i == 0){
rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"单人间",true);
}else if (i == 1){
rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"双人间",true);
}else if (i == 2){
rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"标准间",true);
}else{
rooms[i][j] = new Room((i + 1) * 100 + (j + 1),"豪华套房",true);
}
}
}
}
//getter and setter
public Room[][] getRooms() {
return rooms;
}
public void setRooms(Room[][] rooms) {
this.rooms = rooms;
}
//打印所有房间的状态的方法print()
public void print(){
for (int i = 0; i < rooms.length; i++){
for (int j = 0, k = 0; j < rooms[i].length; j++) {
System.out.print(rooms[i][j] + "\t");
k++;
//对输出的房间信息进行排版
if (k % 5 == 0){
System.out.println();
}
}
System.out.println();
}
}
}
import java.util.Scanner;
public class ManagementSystem {
public static void main(String[] args) {
//该系统的一些操作方法
System.out.println("欢迎使用本系统,请仔细阅读以下使用说明!!!");
System.out.println("使用说明:");
System.out.println("\t1、输入编号[1]使用订房功能。");
System.out.println("\t2、输入编号[2]使用退房功能。");
System.out.println("\t3、输入编号[3]查看所有房间状态。");
System.out.println("\t4、输入编号[0]退出该系统。");
Hotel hotel = new Hotel();
//采用死循环来是系统多次运行,并且提供了退出系统的条件
for (; true ;){
System.out.print("请输入编号:");
Scanner s = new Scanner(System.in);
int i = s.nextInt();
//对用户输入的编号进行不同的操作
if(i == 1){
System.out.print("输入房间编号:");
int number = s.nextInt();
//对用户输入的房间编号进行判断,防止bug。
if (number / 100 > 4 || number / 100 < 1 || number % 100 > 20 || number % 100 < 1){
System.out.println("输入的房间编号有误。");
continue;
}else{
//数组下标从0开始,所以对用户输入的房间编号进行变换,使之与数组下标对应
hotel.getRooms()[number / 100 - 1][number % 100 - 1].reserve();
}
}else if(i == 2){
System.out.print("输入房间编号:");
int number = s.nextInt();
if (number / 100 > 4 || number / 100 < 1 || number % 100 > 20 || number % 100 < 1){
System.out.println("输入的房间编号有误。");
continue;
}else{
hotel.getRooms()[number / 100 - 1][number % 100 - 1].exit();
}
}else if(i == 3){
//打印所有房间的状态
hotel.print();
}else if(i == 0){
//退出系统
System.out.println("再见,欢迎下次再来!");
return;
}else{
System.out.println("输入的编号有误,请重新输入");
}
}
}
}
此系统还有个致命bug:在程序运行当中,如果断电的话,内存将被释放,之前的数据都会被清除,当再次启动该系统时,所有数据都会变为初始状态。由于博主还未学习数据库,无法将数据写入硬盘,待学习了数据库后,会对该系统进行优化。
如有可以改进的地方,欢迎指出。
这是一个Java初学者的项目,通过二维数组构建了一个简单的酒店管理系统。然而,系统存在一个问题:在运行中如果断电,所有数据会丢失,因为当前未使用数据库存储。博主计划在学习数据库后对此系统进行优化。
2815

被折叠的 条评论
为什么被折叠?



