3.27旅馆住宿系统
旅馆住宿系统中,旅馆业主可进行添加房间操作。
– 旅馆业主登录旅馆住宿系统后,可以请求添加房间;
– 待进入“房间管理”对话框,单击“添加”按钮可进行添加房间操作;
– 添加房间时,可以设定房间的房间编号、房间类型、房间描述信息;
– 添加房间信息不能缺失,若某一项未填写,要给出提示信息;
– 房间编号长度不超过5个字符;
– 房间描述长度不超过1000个字符;
– 房间信息不能重复,成功填写后,可进行保存或取消操作,之后返回“房间管理”对话框,结束添加房间流程。
实验步骤:
① 设计程序
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Set;
public class HotelRoomManagementSystem {
private JFrame mainFrame;
private Set<String> existingRoomNumbers = new HashSet<>();
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new HotelRoomManagementSystem().initialize();
});
}
private void initialize() {
// 主窗口设置
mainFrame = new JFrame("旅馆住宿系统 - 业主端");
mainFrame.setSize(800, 600);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLayout(new BorderLayout());
// 模拟登录(实际系统应有完整登录逻辑)
JButton loginButton = new JButton("业主登录");
loginButton.addActionListener(e -> showRoomManagementDialog());
mainFrame.add(loginButton, BorderLayout.CENTER);
mainFrame.setLocationRelativeTo(null);
mainFrame.setVisible(true);
}
private void showRoomManagementDialog() {
JDialog roomManagementDialog = new JDialog(mainFrame, "房间管理", true);
roomManagementDialog.setSize(600, 400);
roomManagementDialog.setLayout(new BorderLayout());
// 房间列表(模拟)
JTextArea roomListArea = new JTextArea();
roomListArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(roomListArea);
roomManagementDialog.add(scrollPane, BorderLayout.CENTER);
// 添加房间按钮
JButton addButton = new JButton("添加房间");
addButton.addActionListener(e -> showAddRoomDialog(roomListArea));
JPanel buttonPanel = new JPanel();
buttonPanel.add(addButton);
roomManagementDialog.add(buttonPanel, BorderLayout.SOUTH);
roomManagementDialog.setLocationRelativeTo(mainFrame);
roomManagementDialog.setVisible(true);
}
private void showAddRoomDialog(JTextArea roomListArea) {
JDialog addRoomDialog = new JDialog(mainFrame, "添加房间", true);
addRoomDialog.setSize(400, 300);
addRoomDialog.setLayout(new GridLayout(5, 2, 10, 10));
// 表单组件
JLabel roomNumberLabel = new JLabel("房间编号*:");
JTextField roomNumberField = new JTextField();
JLabel roomTypeLabel = new JLabel("房间类型*:");
JComboBox<String> roomTypeCombo = new JComboBox<>(new String[]{"标准间", "豪华套房", "家庭房", "商务房"});
JLabel descriptionLabel = new JLabel("房间描述:");
JTextArea descriptionArea = new JTextArea(3, 20);
JScrollPane descriptionScroll = new JScrollPane(descriptionArea);
// 按钮
JButton saveButton = new JButton("保存");
JButton cancelButton = new JButton("取消");
// 添加组件到对话框
addRoomDialog.add(roomNumberLabel);
addRoomDialog.add(roomNumberField);
addRoomDialog.add(roomTypeLabel);
addRoomDialog.add(roomTypeCombo);
addRoomDialog.add(descriptionLabel);
addRoomDialog.add(descriptionScroll);
addRoomDialog.add(new JLabel()); // 占位
addRoomDialog.add(new JLabel());
addRoomDialog.add(saveButton);
addRoomDialog.add(cancelButton);
// 保存按钮事件
saveButton.addActionListener(e -> {
String roomNumber = roomNumberField.getText().trim();
String roomType = (String) roomTypeCombo.getSelectedItem();
String description = descriptionArea.getText().trim();
// 输入验证
if (roomNumber.isEmpty()) {
JOptionPane.showMessageDialog(addRoomDialog, "房间编号不能为空", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
if (roomNumber.length() > 5) {
JOptionPane.showMessageDialog(addRoomDialog, "房间编号长度不能超过5个字符", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
if (description.length() > 1000) {
JOptionPane.showMessageDialog(addRoomDialog, "房间描述长度不能超过1000个字符", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
if (existingRoomNumbers.contains(roomNumber)) {
JOptionPane.showMessageDialog(addRoomDialog, "房间编号已存在", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
// 保存数据
existingRoomNumbers.add(roomNumber);
String newRoomInfo = String.format("房间编号: %s | 类型: %s | 描述: %s\n",
roomNumber, roomType, description.isEmpty() ? "无" : description);
roomListArea.append(newRoomInfo);
JOptionPane.showMessageDialog(addRoomDialog, "房间添加成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
addRoomDialog.dispose();
});
// 取消按钮事件
cancelButton.addActionListener(e -> addRoomDialog.dispose());
addRoomDialog.setLocationRelativeTo(mainFrame);
addRoomDialog.setVisible(true);
}
}
① 功能测试
用例编号 |
测试场景 |
输入数据 |
预期结果 |
F-001 |
正常添加房间 |
房间编号:101 |
成功保存,返回“房间管理”对话框 |
F-002 |
必填项缺失(房间编号为空) |
房间编号:空 |
提示“房间编号不能为空” |
F-003 |
必填项缺失(房间类型为空) |
房间编号:102 |
提示“房间类型不能为空” |
F-004 |
房间编号超长(>5字符) |
房间编号:A10001 |
提示“房间编号长度不能超过5个字符” |
F-005 |
房间描述超长(>1000字符) |
房间编号:103 |
提示“房间描述长度不能超过1000个字符” |
F-006 |
重复房间编号 |
房间编号:101(已存在) |
提示“房间编号已存在” |
F-007 |
取消添加操作 |
填写任意有效数据后点击“取消” |
不保存数据,直接返回“房间管理”对话框 |
② 边界值测试
编号 |
测试场景 |
输入数据 |
预期结果 |
B-001 |
房间编号长度为5字符(最大值) |
房间编号:A1000 |
成功保存 |
B-002 |
房间描述长度为1000字符(最大值) |
房间编号:104 |
成功保存 |
③ 异常测试
用例编号 |
测试场景 |
输入数据 |
预期结果 |
E-001 |
输入特殊字符(房间编号) |
房间编号:@#! |
提示“房间编号仅支持字母或数字” |
E-002 |
SQL注入攻击测试 |
房间编号:' OR 1=1 -- |
系统拒绝保存并提示非法输入 |