一、实验背景
随着信息化、智能化的快速发展,各种自动化、数字化办公软件逐渐普及,其中包括酒店文员办公软件。酒店文员办公软件是集宾客信息管理、订单管理、账务管理、房态管理等多个功能于一体的综合性软件,它可以帮助酒店文员更好地管理和维护酒店的日常运营。
本次实验旨在通过自学Java编程基础知识,实现一个简单的酒店文员办公软件,加深对Java编程语言的理解和掌握。
二、实验要求
1. 要求使用Java编程语言实现一个酒店文员办公软件,包括以下功能:
- 客房信息管理:新增客房信息,查询客房信息,修改客房信息,删除客房信息。
- 客户信息管理:新增客户信息,查询客户信息,修改客户信息,删除客户信息。
- 订单管理:新增订单信息,查询订单信息,修改订单信息,删除订单信息。
- 账务管理:查询账单明细,统计收入情况。
- 房态管理:查询房间状态,修改房间状态。
2. 要求实现简单易用、界面友好的图形用户界面(GUI)。
三、实验过程
1. Java 编程环境搭建
首先需要搭建 Java 编程环境,具体步骤如下:
- 下载及安装 JDK(Java Development Kit):在Oracle官网下载适合自己操作系统的 JDK。
- 配置JDK环境变量:将 JDK 的 bin 目录加入 PATH 环境变量中,让系统能够执行 Java 程序。
- 下载及安装 IDE(集成开发环境):常见的 IDE 有 Eclipse、NetBeans、IntelliJ IDEA 等。本次实验中使用 IntelliJ IDEA。
2. 设计软件的数据模型
酒店文员办公软件有若干个模块,每个模块都有多个操作,因此需要先设计出软件的数据模型。可以先画出 E-R 图或者用文本的方式描述。
本次实验使用的是文本的方式描述数据模型,如下所示:
客房信息表(Room):
- 房间编号(roomNo):唯一的整数,作为客房的标识符。
- 房间类型(roomType):表示房间的类型,如标准间、豪华套房等。
- 房间状态(roomState):表示房间的当前状态,如未入住、已入住、等待清扫等。
- 房间价格(price):表示客房的价格。
客户信息表(Customer):
- 客户编号(id):唯一的整数,每个客户对应一个唯一的编号。
- 客户姓名(name):客户的姓名。
- 身份证号(idCard):客户的身份证号。
- 手机号(phone):客户的手机号。
订单信息表(Order):
- 订单编号(orderId):唯一的整数,作为订单的标识符。
- 下单时间(createTime):订单的下单时间。
- 入住时间(checkInTime):订单的入住时间。
- 离店时间(checkOutTime):订单的离店时间。
- 房间编号(roomNo):订单对应的客房编号。
- 客户编号(customerId):订单对应的客户编号。
- 订单状态(orderState):表示订单的当前状态,如已完成、已取消等。
- 订单价格(orderPrice):订单的价格。
3. 设计软件的UI界面
在 IntelliJ IDEA 中设计 UI 界面,可以使用 JavaFX、Swing 等框架,本次实验使用 JavaFX 实现。
界面设计分为两部分,一部分是菜单栏,另一部分是主界面。其中菜单栏包括 “客房”、“客户”、“订单”、“账务”、“房态” 五个菜单,用于展示各个模块的功能操作。主界面则包含若干个组件,如表格、文本框等,用于显示数据和进行操作。
下面是主界面的设计示意图:
![界面设计示意图][1]
图中左侧为客房信息表格,提供了新增、查询、修改、删除等操作。右侧为“客户信息”、“订单信息”、“账务信息”和“房态管理”的 tab 页,用于切换不同的信息管理功能。每个 tab 页中都有类似客房信息表格的组件,用于维护对应的信息。
4. 编写 Java 代码
在设计完 UI 界面后,需要编写 Java 代码来实现功能。
在本次实验中,将数据模型翻译成了 Java 类,分别为 Room、Customer、Order、Bill 和 RoomState 类。编写过程中,需要使用 SQL 语句来对数据库进行操作。
JavaFX 框架提供了若干个控件,如 Button、TableView 等,用于构建 UI 界面。我们可以在控件上绑定事件,比如单击按钮时调用对应的 Java 方法。
下面是主要的 Java 代码:
- Room 类
```java
public class Room {
private int roomNo;
private String roomType;
private RoomState roomState;
private float price;
// getter 和 setter 略
public void save() {
String sql = "insert into room(roomNo, roomType, roomState, price) values(?, ?, ?, ?)";
try (Connection conn = getConnection()) {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, getRoomNo());
stmt.setString(2, getRoomType());
stmt.setString(3, getRoomState().toString());
stmt.setFloat(4, getPrice());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void update() {
String sql = "update room set roomType=?, roomState=?, price=? where roomNo=?";
try (Connection conn = getConnection()) {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, getRoomType());
stmt.setString(2, getRoomState().toString());
stmt.setFloat(3, getPrice());
stmt.setInt(4, getRoomNo());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete() {
String sql = "delete from room where roomNo=?";
try (Connection conn = getConnection()) {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, getRoomNo());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Room findByRoomNo(int roomNo) {
String sql = "select * from room where roomNo=?";
try (Connection conn = getConnection()) {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, roomNo);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
Room room = new Room();
room.setRoomNo(rs.getInt("roomNo"));
room.setRoomType(rs.getString("roomType"));
room.setRoomState(RoomState.valueOf(rs.getString("roomState")));
room.setPrice(rs.getFloat("price"));
return room;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static List String sql = "select * from room"; List try (Connection conn = getConnection()) { PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Room room = new Room(); room.setRoomNo(rs.getInt("roomNo")); room.setRoomType(rs.getString("roomType")); room.setRoomState(RoomState.valueOf(rs.getString("roomState"))); room.setPrice(rs.getFloat("price")); rooms.add(room); } } catch (SQLException e) { e.printStackTrace(); } return rooms; } public static List String sql = "select * from room where roomType=?"; List try (Connection conn = getConnection()) { PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, roomType); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Room room = new Room(); room.setRoomNo(rs.getInt("roomNo")); room.setRoomType(rs.getString("roomType")); room.setRoomState(RoomState.valueOf(rs.getString("roomState"))); room.setPrice(rs.getFloat("price")); rooms.add(room); } } catch (SQLException e) { e.printStackTrace(); } return rooms; } } ``` - RoomController 类 ```java public class RoomController { @FXML private TextField roomNoField; @FXML private TextField roomTypeField; @FXML private ComboBox @FXML private TextField priceField; @FXML private TableView @FXML private TableColumn @FXML private TableColumn @FXML private TableColumn @FXML private TableColumn private ObservableList @FXML private void initialize() { roomStateBox.setItems(FXCollections.observableArrayList(RoomState.values())); roomTable.setItems(roomList); roomNoColumn.setCellValueFactory(new PropertyValueFactory<>("roomNo")); roomTypeColumn.setCellValueFactory(new PropertyValueFactory<>("roomType")); roomStateColumn.setCellValueFactory(new PropertyValueFactory<>("roomState")); priceColumn.setCellValueFactory(new PropertyValueFactory<>("price")); refreshRoomList(); } @FXML private void onAddRoom(ActionEvent event) { Room room = new Room(); room.setRoomNo(Integer.parseInt(roomNoField.getText())); room.setRoomType(roomTypeField.getText()); room.setRoomState(roomStateBox.getValue()); room.setPrice(Float.parseFloat(priceField.getText())); room.save(); roomList.add(room); roomNoField.clear(); roomTypeField.clear(); roomStateBox.getSelectionModel().clearSelection(); priceField.clear(); } @FXML private void onUpdateRoom(ActionEvent event) { Room room = roomTable.getSelectionModel().getSelectedItem(); if (room == null) { Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("Warning"); alert.setHeaderText("No selection"); alert.setContentText("Please select a room."); alert.showAndWait(); return; } room.setRoomType(roomTypeField.getText()); room.setRoomState(roomStateBox.getValue()); room.setPrice(Float.parseFloat(priceField.getText())); room.update(); refreshRoomList(); } @FXML private void onDeleteRoom(ActionEvent event) { Room room = roomTable.getSelectionModel().getSelectedItem(); if (room == null) { Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("Warning"); alert.setHeaderText("No selection"); alert.setContentText("Please select a room."); alert.showAndWait(); return; } room.delete(); roomList.remove(room); } private void refreshRoomList() { roomList.clear(); roomList.addAll(Room.findAll()); } } ``` 五、实验结果 通过运行 Java 代码,可以看到 UI 界面和实现的功能。界面友好,操作简单易用。客房、客户、订单、账务、房态等模块的功能都得到了实现。 六、实验反思 本次实验让我更深入地理解了 Java 编程语言的核心知识,如 Java 类、继承、封装、多态、接口、异常处理、MySQL 连接等。同时,通过对 JavaFX 框架的学习,可以更方便地实现图形用户界面。这些知识对于今后的编程工作和学习都具有重要的意义。 需要注意的是,本次实验只是一个简单的酒店文员办公软件,对于实际生产中的酒店管理来说,还需要实现更多的功能和更高的可扩展性。因此,需要不断地学习和实践,提高自己的编程实力和设计能力。
购买后如果没出现相关链接,请刷新当前页面!!!
链接失效的请留言 ,我看见了就补上!!!
网站内容来源于互联网,我们将这些信息转载出来的初衷在于分享与学习,这并不意味着我们站点对这些信息的观点或真实性作出认可,我们也不承担对这些信息的责任。
适度游戏益脑,沉迷游戏伤身。 合理安排时间,享受健康生活。适龄提示:适合18岁以上使用!
瑞羊迎春接福,全方位送祝福,预祝你:东行顺利,南走吉祥,西出平安,北遇祥瑞,中有如意,左右逢缘,前后添福,内外顺畅,上下和谐,牛年好运!