项目(姑且称为项目吧)包含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();
}
}
}