用java写宾馆管理系统,swing写界面,用io流
时间: 2024-04-16 16:27:09 浏览: 16
好的,我明白了你的要求。以下是一个简单的宾馆管理系统的示例,使用Java编写,使用Swing库构建界面,并使用IO流进行数据的读写操作。
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
class Room implements Serializable {
private int roomNumber;
private String guestName;
public Room(int roomNumber) {
this.roomNumber = roomNumber;
this.guestName = "";
}
public int getRoomNumber() {
return roomNumber;
}
public String getGuestName() {
return guestName;
}
public void setGuestName(String guestName) {
this.guestName = guestName;
}
}
class Hotel implements Serializable {
private List<Room> rooms;
public Hotel(int roomCount) {
rooms = new ArrayList<>();
for (int i = 1; i <= roomCount; i++) {
rooms.add(new Room(i));
}
}
public List<Room> getRooms() {
return rooms;
}
public void checkIn(int roomNumber, String guestName) {
for (Room room : rooms) {
if (room.getRoomNumber() == roomNumber) {
room.setGuestName(guestName);
break;
}
}
}
public void checkOut(int roomNumber) {
for (Room room : rooms) {
if (room.getRoomNumber() == roomNumber) {
room.setGuestName("");
break;
}
}
}
}
class HotelManagementSystem extends JFrame implements ActionListener {
private JTextField tfRoomNumber, tfGuestName;
private JTextArea taStatus;
private JButton btnCheckIn, btnCheckOut;
private Hotel hotel;
public HotelManagementSystem() {
setTitle("Hotel Management System");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 2));
panel.add(new JLabel("Room Number:"));
tfRoomNumber = new JTextField();
panel.add(tfRoomNumber);
panel.add(new JLabel("Guest Name:"));
tfGuestName = new JTextField();
panel.add(tfGuestName);
btnCheckIn = new JButton("Check In");
btnCheckIn.addActionListener(this);
panel.add(btnCheckIn);
btnCheckOut = new JButton("Check Out");
btnCheckOut.addActionListener(this);
panel.add(btnCheckOut);
taStatus = new JTextArea();
panel.add(taStatus);
add(panel);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnCheckIn) {
int roomNumber = Integer.parseInt(tfRoomNumber.getText());
String guestName = tfGuestName.getText();
hotel.checkIn(roomNumber, guestName);
updateStatus();
} else if (e.getSource() == btnCheckOut) {
int roomNumber = Integer.parseInt(tfRoomNumber.getText());
hotel.checkOut(roomNumber);
updateStatus();
}
}
private void updateStatus() {
StringBuilder sb = new StringBuilder();
for (Room room : hotel.getRooms()) {
sb.append("Room ").append(room.getRoomNumber()).append(": ");
if (room.getGuestName().isEmpty()) {
sb.append("Vacant\n");
} else {
sb.append("Occupied by ").append(room.getGuestName()).append("\n");
}
}
taStatus.setText(sb.toString());
}
public void loadHotelData() {
try {
FileInputStream fileIn = new FileInputStream("hotel.dat");
ObjectInputStream in = new ObjectInputStream(fileIn);
hotel = (Hotel) in.readObject();
in.close();
fileIn.close();
} catch (IOException | ClassNotFoundException e) {
hotel = new Hotel(10);
}
}
public void saveHotelData() {
try {
FileOutputStream fileOut = new FileOutputStream("hotel.dat");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(hotel);
out.close();
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void display() {
setVisible(true);
updateStatus();
}
}
public class HotelManagementSystemApp {
public static void main(String[] args) {
HotelManagementSystem hms = new HotelManagementSystem();
hms.loadHotelData();
hms.display();
hms.saveHotelData();
}
}
```
这个示例中,我们定义了两个类:`Room` 和 `Hotel`。`Room` 类表示一个宾馆房间,包括房间号和入住客人的姓名。`Hotel` 类表示整个宾馆,包含多个房间。
`HotelManagementSystem` 类是宾馆管理系统的主界面,继承自 `JFrame`。在构造函数中,我们设置了界面的标题、大小和布局,并创建了输入框、按钮和文本区域等组件。我们还实现了 `ActionListener` 接口,通过重写 `actionPerformed` 方法来处理按钮的点击事件。
在 `loadHotelData` 方法中,我们尝试从文件中读取宾馆数据,如果文件不存在或读取失败,则创建一个新的宾馆对象。在 `saveHotelData` 方法中,我们将宾馆数据保存到文件中。
在 `main` 方法中,我们创建了一个 `HotelManagementSystem` 对象,加载宾馆数据、显示界面,并在程序退出时保存宾馆数据。
请注意,在实际应用中,您可能需要进一步添加错误处理、输入验证、日志记录等功能。此示例仅供参考,你可以根据实际需求进行修改和扩展。