Java,一个简陋的酒店管理系统,控制台输出

本文介绍了使用Java编写的酒店管理系统,包含Room类、主界面类等,涉及开房、退房、查询和日志功能,数据持久化至room.dat和hotel.log文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目(姑且称为项目吧)包含6个java文件,包括一个Room类,一个主界面类,一个开房类,一个退房类,一个查询房间类,一个输入输出文件类(保存room房间状况,和日志)。

以下全部源码:

全部6个java文件,均在同一个java项目的hotel包中,保存的room状况(room.dat)和日志文件(hotel.log)在第一次运行后会自动生成,默认保存在项目目录下。

HotelLogin类(包含room对象初始化,主菜单,入口类)

package hotel;

import java.util.*;

import static hotel.ChaRoom.*;
import static hotel.OpenRoom.*;
import static hotel.CloseRoom.*;
import static hotel.RoomData.*;

public class HotelLogin {
    public static void main(String[] args) {
        readData();
        longin();
    }

    static TreeMap<Integer, Room> room = new TreeMap<>();

    static {
        room.put(1, new Room(101, "无人", "单人间", 100L));
        room.put(2, new Room(102, "无人", "单人间", 100L));
        room.put(3, new Room(103, "无人", "双人间", 170L));
        room.put(4, new Room(105, "无人", "双人间", 170L));
        room.put(5, new Room(106, "无人", "三人间", 230L));
        room.put(6, new Room(201, "无人", "单人间", 100L));
        room.put(7, new Room(202, "无人", "单人间", 100L));
        room.put(8, new Room(203, "无人", "双人间", 170L));
        room.put(9, new Room(205, "无人", "双人间", 170L));
        room.put(10, new Room(206, "无人", "三人间", 230L));
        room.put(11, new Room(301, "无人", "单人间", 100L));
        room.put(12, new Room(302, "无人", "单人间", 100L));
        room.put(13, new Room(303, "无人", "双人间", 170L));
        room.put(14, new Room(305, "无人", "双人间", 170L));
        room.put(15, new Room(306, "无人", "三人间", 230L));
        room.put(16, new Room(401, "无人", "单人间", 100L));
        room.put(17, new Room(402, "无人", "单人间", 100L));
        room.put(18, new Room(403, "无人", "双人间", 170L));
        room.put(19, new Room(405, "无人", "双人间", 170L));
        room.put(20, new Room(406, "无人", "三人间", 230L));
        room.put(21, new Room(501, "无人", "双人间", 170L));
        room.put(22, new Room(502, "无人", "双人间", 170L));
        room.put(23, new Room(503, "无人", "大床房", 280L));
        room.put(24, new Room(505, "无人", "大床房", 280L));
        room.put(25, new Room(506, "无人", "大床房", 280L));
    }

    static void door() {

        System.out.println("==========================酒店管理系统==========================");
        System.out.println("                           1、开房");
        System.out.println("                           2、退房");
        System.out.println("                           3、查询");
        System.out.println("                           4、日志");
        System.out.println("                           5、显示主菜单");
        System.out.println("                           0、退出");
        System.out.println("                           6、备用");
    }

    public static void longin() {
        Scanner sc = new Scanner(System.in);
        door();
        while (true) {

            System.out.print("请输入操作的数字:");
            try {
                int num = sc.nextInt();
                switch (num) {
                    case 1:
                        open();
                        door();
                        break;
                    case 2:
                        closeRoom();
                        door();
                        break;
                    case 3:
                        select();
                        door();
                        break;
                    case 4:
                        hotelLogs();
                        door();
                        break;
                    case 5:
                        door();
                        break;
                    case 0:
                        break;
                    default:
                }
                if(num == 0){
                    System.out.println("**************正在退出程序,欢迎下次使用**************");
                    break;
                }
            } catch (Exception e) {
                sc.next();
                System.out.println("输入有误,请重新输入。");
            }
        }
    }
}

Room类

package hotel;

import java.io.Serializable;

//room类  
public class Room implements Serializable {

    private static final long serialVersionUID = -678151166567812449L;

/*
id:房间ID
haveProple:是否有人,内容是“有人”或者“无人”
roomProple:几人房,如单人间,双人房
prople:客户名称
idCard:客户身份证号
phone:客户手机号
price:房间单日价格
startTime:开房时间
time:开房时长,如1天,2天等
*/
    private Integer id;
    private String haveProple;
    private String roomProple;
    private String prople;
    private long idCard;
    private long phone;
    private double price;
    private long startTime;
    private int time;

    public String getProple() {
        return prople;
    }

    public void setProple(String prople) {
        this.prople = prople;
    }

    public long getIdCard() {
        return idCard;
    }


    public long getPhone() {
        return phone;
    }

    public void setPhone(long phone) {
        this.phone = phone;
    }

    public Room() {
    }

    public Room(Integer id, String haveProple, String roomProple, double price) {
        this.id = id;
        this.haveProple = haveProple;
        this.roomProple = roomProple;
        this.price = price;
    }

    public Room(Integer id, String haveProple, String roomProple, double price, int startTime, int time) {
        this.id = id;
        this.haveProple = haveProple;
        this.roomProple = roomProple;
        this.price = price;
        this.startTime = startTime;
        this.time = time;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getHaveProple() {
        return haveProple;
    }

    public void setHaveProple(String haveProple) {
        this.haveProple = haveProple;
    }

    public String getRoomProple() {
        return roomProple;
    }

    public void setRoomProple(String roomProple) {
        this.roomProple = roomProple;
    }

    public void setIdCard(long idCard) {
        this.idCard = idCard;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public long getStartTime() {
        return startTime;
    }

    public void setStartTime(long startTime) {
        this.startTime = startTime;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }

    @Override
    public String toString() {

        if ("有人".equals(haveProple)) {


            return "房间号:" + id + ", 当前状态:" + haveProple + ",客户名称:"+ prople+ ",客户手机号:"+ phone+ ",客户身份证号:"+ idCard+ "\n" + roomProple + ", 单日房价:" + price + ", 开始时间:" + String.format("%tF,%<tT",startTime) + ", 开房时长:" + time + "天";
        } else {
            return "房间号:" + id +
                    ", 当前状态:" + haveProple +
                    "," + roomProple +
                    ", 单日房价:" + price ;
        }
    }
}

OpenRoom类(开房类)

package hotel;

import java.util.Scanner;

import static hotel.HotelLogin.*;
import static hotel.ChaRoom.*;
import static hotel.RoomData.*;

public class OpenRoom {

    public static void open() {
        allRoom();
        int num = 1;
        Scanner sc = new Scanner(System.in);
        int id = 0;

        while (true) {
            try {
                if (num == 1) {
                    System.out.print("请输入房间号(输入0退出开房):");
                    id = sc.nextInt();
                    if (id < 100 && id > 1) {
                        id = 104;
                    }
                    if (id == 0) {
                        break;
                    }
                    int j = id / 100;
                    int k = id % (j * 10);
                    if (k > 4 && k < 7) {
                        k--;
                    } else if (k > 0 && k < 4) {
                    } else {
                        j = 0;
                        k = 0;
                    }
                    id = (j - 1) * 5 + k;
                    if (!room.containsKey(id)) {
                        System.out.println("输入的房间号有误");
                        continue;
                    } else if ("有人".equals(room.get(id).getHaveProple())) {
                        System.out.println("该房间已有客户,请重新选择房间:");
                        continue;
                    }
                } else if (num == 2) {
                    System.out.print("请输入客户名称(输入0退出开房):");
                    sc.nextLine();
                    String name = sc.nextLine();
                    if ("0".equals(name)) {
                        id = 0;
                        break;
                    }
                    room.get(id).setProple(name);

                } else if (num == 3) {
                    System.out.print("请输入客户手机号(输入0退出开房):");
                    long n = sc.nextLong();
                    if (n == 0) {
                        room.get(id).setProple(null);
                        id = 0;
                        break;
                    }
                    room.get(id).setPhone(n);
                } else if (num == 4) {
                    System.out.print("请输入客户18位身份证号(输入0退出开房):");
                    long n = sc.nextLong();
                    if (n == 0) {
                        room.get(id).setProple(null);
                        room.get(id).setPhone(0);
                        id = 0;
                        break;
                    }
                    room.get(id).setIdCard(n);
                }else if (num == 5){
                    System.out.print("请输入需要开房天数(输入0退出开房):");
                    int n = sc.nextInt();
                    if (n == 0) {
                        room.get(id).setProple(null);
                        room.get(id).setPhone(0);
                        room.get(id).setIdCard(0);
                        id = 0;
                        break;
                    }
                    room.get(id).setTime(n);
                }
                num++;
                if (num == 6) break;
            } catch (Exception e) {
                sc.nextLine();
                System.out.println("输入有误,请重新输入");
            }
        }
        if (id != 0) {
            room.get(id).setHaveProple("有人");
            room.get(id).setStartTime(System.currentTimeMillis());
            roomLogs(id,"开房");
            writeData();

            System.out.println("\n**************开房成功**************\n");
        }
    }
}

CloseRoom类(退房类,与开房类相似)

package hotel;

import java.util.Scanner;

import static hotel.ChaRoom.allRoom;
import static hotel.HotelLogin.room;
import static hotel.RoomData.roomLogs;
import static hotel.RoomData.writeData;

public class CloseRoom {
    public static void closeRoom() {
        allRoom();
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("请输入需要退房的房间号(输入0返回主菜单):");
            try {
                int id = sc.nextInt();
                int n;
                if (id < 100 && id > 1) {
                    id = 104;
                }
                if (id == 0) {
                    break;
                }
                int j = id / 100;
                int k = id % (j * 10);
                if (k > 4 && k < 7) {
                    k--;
                } else if (k > 0 && k < 4) {
                } else {
                    j = 0;
                    k = 0;
                }
                n = (j - 1) * 5 + k;
                if (!room.containsKey(n)){
                    System.out.println("该房间号不存在");
                } else if (room.containsKey(n) && ("有人".equals(room.get(n).getHaveProple()))) {
                    roomLogs(n,"退房");
                    System.out.printf("\n**************退房成功,房间号:%d,客户:%s已退房**************\n\n",id,room.get(n).getProple());
                    room.get(n).setProple(null);
                    room.get(n).setPhone(0);
                    room.get(n).setIdCard(0);
                    room.get(n).setStartTime(0);
                    room.get(n).setHaveProple("无人");
                    writeData();
                    break;
                } else {
                    System.out.println("此房间无人居住,不需要退房");
                }
            } catch (Exception e) {
                sc.nextLine();
                System.out.println("输入的房间号有误");
            }
        }
    }
}


ChaRoom类(房间查询)

package hotel;


import java.util.Scanner;

import static hotel.HotelLogin.*;

public class ChaRoom {


    public static void select() {
        Scanner sc = new Scanner(System.in);
        allRoom();

        while (true) {
            System.out.print("请输入想要查询的房间号(输入0返回菜单):");
            try {
                int num = sc.nextInt();
                if (num < 100 && num != 0) {
                    num = 104;
                }
                if (num == 0) {
                    break;
                }
                int j = num / 100;
                int k = num % (j * 10);
                if (k > 4 && k < 7) {
                    k--;
                } else if (k > 0 && k < 4) {

                } else {
                    j = 0;
                    k = 0;
                }
                int num2 = (j - 1) * 5 + k;
                if (room.containsKey(num2)) {
                    System.out.println(room.get(num2).toString());
                } else {
                    System.out.println("查询房间号有误,请重新输入。");
                }

            } catch (Exception e) {
                sc.nextLine();
                System.out.println("查询房间号有误,请重新输入。");
            }
        }
    }
    
//allRoom方法,显示所有房间的部分信息
    public static void allRoom() {
        for (int i = 1; i <= room.size() / 5; i++) {
            for (int j = (i - 1) * 5 + 1; j <= (i - 1) * 5 + 5; j++) {
                Room ro = room.get(j);
                System.out.printf("[房间号:%d   %s]   ", ro.getId(), ro.getRoomProple());
            }
            System.out.println();

            for (int j = (i - 1) * 5 + 1; j <= (i - 1) * 5 + 5; j++) {
                Room ro = room.get(j);
                if ("有人".equals(ro.getHaveProple())) {
                    System.out.printf("[  %s       %.1f]   ", ro.getHaveProple(), ro.getPrice());
                } else {
                    System.out.printf("[            %.1f]   ", ro.getPrice());
                }
            }
            System.out.println();
        }
    }
}

RoomData类(输入输出room对象和日志类)

package hotel;

import java.io.*;
import java.util.TreeMap;

import static hotel.HotelLogin.*;

public class RoomData {
//读取room.dat文件,(room对象)
    public static void readData() {
        String path = "room.dat";
        try (ObjectInputStream oot = new ObjectInputStream(new FileInputStream(path))) {
            room = (TreeMap<Integer, Room>) oot.readObject();
        } catch (FileNotFoundException e) {

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

//写入room.dat文件
    public static void writeData() {
        String path = "room.dat";
        try (ObjectOutputStream oot = new ObjectOutputStream(new FileOutputStream(path))) {
            oot.writeObject(room);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

//写入日志
    public static void roomLogs(int id, String s1) {
        String path = "hotel.log";
        try (FileWriter fw = new FileWriter(path, true)) {
            String s2 = String.format("操作:%s    房间号:%d, %s,房间单日价格:%.2f,客户租住时长:%d\n    客户姓名:%s,  客户手机号:%d,   客户身份证号:%d\n    开房时间:%tF %<tT    ", s1, room.get(id).getId(), room.get(id).getRoomProple(), room.get(id).getPrice(), room.get(id).getTime(), room.get(id).getProple(),room.get(id).getPhone(), room.get(id).getIdCard(), room.get(id).getStartTime());

            if ("退房".equals(s1)) {
                String s3 = String.format("退房时间:%tF %<tT\n", System.currentTimeMillis());
                fw.write(s2 + s3);
            } else {
                fw.write(s2+"\n");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

//读取日志
    public static void hotelLogs(){
        String path = ".\\Jdk8\\src\\hotel\\hotel.log";
        try (FileReader fr = new FileReader(path)) {
            System.out.println("--------------------------------日志--------------------------------");
            for (int i = fr.read(); i != -1; i=fr.read()) {
                System.out.print((char) i);
            }
            System.out.println("\n\n");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值