3.27旅馆住宿系统

旅馆住宿系统中,旅馆业主可进行添加房间操作。

– 旅馆业主登录旅馆住宿系统后,可以请求添加房间;

– 待进入“房间管理”对话框,单击“添加”按钮可进行添加房间操作;

– 添加房间时,可以设定房间的房间编号、房间类型、房间描述信息;

– 添加房间信息不能缺失,若某一项未填写,要给出提示信息;

– 房间编号长度不超过5个字符;

– 房间描述长度不超过1000个字符;

– 房间信息不能重复,成功填写后,可进行保存或取消操作,之后返回“房间管理”对话框,结束添加房间流程。

实验步骤:

① 设计程序

package org.example;

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
房间类型:家庭房
房间描述:1001个字符的文本

提示“房间描述长度不能超过1000个字符”

​F-006​

重复房间编号

房间编号:101(已存在)
房间类型:标准间
房间描述:重复编号

提示“房间编号已存在”

​F-007​

取消添加操作

填写任意有效数据后点击“取消”

不保存数据,直接返回“房间管理”对话框

 

② 边界值测试

编号

测试场景

输入数据

预期结果

B-001​

房间编号长度为5字符(最大值)

房间编号:A1000
房间类型:商务房
房间描述:正常描述

成功保存

B-002​

房间描述长度为1000字符(最大值)

房间编号:104
房间类型:总统套房
房间描述:1000个字符的文本

成功保存

 

 

③ 异常测试

用例编号

测试场景

输入数据

预期结果

​E-001​

输入特殊字符(房间编号)

房间编号:@#!
房间类型:标准间
房间描述:测试

提示“房间编号仅支持字母或数字”

​E-002​

SQL注入攻击测试

房间编号:' OR 1=1 --
房间类型:黑客房
房间描述:测试注入

系统拒绝保存并提示非法输入

posted @ 2025-04-10 09:13    阅读(13)  评论(0)    收藏  举报