宾馆客房管理系统(Java+SQL Server)

发布时间 2023-04-17 18:12:48作者: 时人不识凌云木

源代码下载链接:

一、宾馆客房管理系统开发初衷

  随着互联网技术的迅速发展,计算机技术的普及以及信息化时代的推波助澜,宾馆客房需求的逐渐增大,这也是挑战了宾馆客房管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的宾馆客房管理系统,提高了宾馆的工作效率,为想要入住宾馆的人提供更好的服务。宾馆客房管理工作面对大量顾客的私人信息,引入信息化的管理方式可以事半功倍,极大的提高管理效率。我们开发宾馆客房管理系统就是采用现代化的信息管理方式代替手工管理方式,提高宾馆管理工作效率,做到信息的规范管理,科学统计和快速查询,让宾馆体验达到最佳,方便广大人民群众出行住宿。

二、系统应该具备的功能

①顾客基本信息的输入,包括顾客编号、顾客姓名、房号和联系方式等。

②顾客基本信息的查询、修改,包括顾客编号、顾客姓名、房号和联系方式等。

③客房类别标准的制定、类别信息的输入,包括房号、是否空置、房型和价格等。

④顾客类别信息的查询、修改,包括顾客编号、顾客姓名等。

⑤房源信息信息的更改,包括房号、是否空置、房型、房子归还日期和房价。

⑥房源库存信息的查询,修改,包括房号、是否空置、房型、房子归还日期和房价等。

⑦顾客入住信息的输入,包括顾客编号、房号、退房日期。

⑧顾客入住信息的查询、修改,包括顾客编号、顾客姓名、房号和联系方式等。

⑨退房信息的输入,包括顾客编号、顾客姓名、房号和退房日期。   

⑩退房信息的查询和修改,包括顾客编号、顾客姓名、房号和退房日期等。

三、系统具体实现

首先映入眼帘的是程序登录系统,这里内部设置了两个账户,一个是管理员账户,权限是管理员权限(增删查改)。还有一个是来宾用户,只可以查看。采用Java Swing 的模板创建,用户界面还是十分友好的。登录界面如图6-1 所示。该部分伪代码如下:

public static void main(String[] args) {

        Login log = new Login();

log.setIconImage(Toolkit.getDefaultToolkit().createImage("img1.jpg"));// 登录界面标题logo图片

        log.setTitle("宾馆客房管理系统");

        log.setLocation(600, 300); // 方框出现在屏幕的位置

        log.setSize(750, 548); // 调整登录框大小

        log.setResizable(false);// 设置为不可调整窗口大小

        log.setVisible(true); // 是否可视化

    }

    class Enter implements ActionListener {

        @SuppressWarnings("deprecation")

        public void actionPerformed(ActionEvent e)// 重写事件反映

        {

             Login log = new Login();// 持有对象引用

             if ((f1.getText()).equals("nuist") && (f2.getText()).equals("123")) {

//               JOptionPane.showMessageDialog(null, "登录成功!用户权限是adimistrator");// 弹出要求用户提供值或向其发出通知的标准对话

                 power = "adminstrator";// 赋予管理员权限

                 Qframe frame = new Qframe();// 验证成功后就建对象调用构造方法连接数据库

    frame.setIconImage(Toolkit.getDefaultToolkit().createImage(

                         "img1.jpg"));// 进入管理系统的logo图片

                 frame.setLocation(400, 200);

                 frame.setSize(500, 285);

                 frame.setResizable(false);

                 frame.setVisible(true);

                 dispose();// 释放此图形的上文以及它使用的所有系统资源,即实现关闭弹出新窗口后关闭上个窗口

             } else if ((f1.getText()).equals("admin")

                     && (f2.getText()).equals("123")) {

                 JOptionPane.showMessageDialog(null, "登录成功!用户权限是user");// 弹出要求用户提供值或向其发出通知的标准对话框

                 power = "adminstrator";

                 Qframe frame = new Qframe();

                 frame.setIconImage(Toolkit.getDefaultToolkit().createImage(

                         "img1.jpg"));

                 frame.setLocation(400, 200);

                 frame.setSize(750, 543);// 500/285

                 frame.setResizable(false);

                 frame.setVisible(true);

                 dispose();

             } else

                 JOptionPane.showMessageDialog(null, "登录失败,请重新登录!");

        }

    }   }

然后,就是登录后的主界面,有五大板块,分别是:增加、删除、修改、查询和显示订房表。最后还有一个退出程序的按钮。如图6-2所示主界面。该部分伪代码如下:

JPanel contentPane;

    BorderLayout borderLayout1 = new BorderLayout(5, 10);// 构造边框布局,水平间距5,垂直间距10

 

    public static final TextArea result = new TextArea();//注意此result不是结果集,是展示表的文本区

 

    public Qframe() {

        contentPane = (JPanel) this.getContentPane();// 返回此窗体的 contentPane 对象

        contentPane.setLayout(borderLayout1);

        this.setTitle("宾馆客房管理系统");// 设置窗口标题

 

        addWindowListener(new WindowAdapter() {// 监听窗口处理事件 按X就结束程序

             public void windowClosing(WindowEvent e) {

                 System.exit(0);

             }

        });

 

        result.setEditable(false);// 设置信息显示文本框区域为不可编辑

        result.setBackground(Color.WHITE);// 设置文本背景为白色

        JPanel option = new JPanel();// 选择功能按钮容器

 

        final Button zenjia = new Button("增加");// 增加按钮

        option.add(zenjia, BorderLayout.NORTH);// 将组件置于其显示区域的顶部,并在水平方向上居中。

        zenjia.addActionListener(new ActionListener() {// 监听增加按钮事件

             @Override

             public void actionPerformed(ActionEvent e) {

 

                 if (e.getSource() == zenjia) {

                     Adddialog add1 = new Adddialog();// 调用增加窗口类

                     add1.setVisible(true);// 显示窗口

                 }

 

             }

        });

 

下方的空白是文本区,可以显示订单表中的信息,只需要点击一下显示订单表按钮即可显示。如图6-3所示。该部分伪代码如下:

    try {

                     stmt = sin.prepareStatement("select * from 订房表 where 客户编号=?");

                     stmt.setObject(1, sno);

                     rs = stmt.executeQuery();

                     int count = 0;//查询不到记为0,查询得到记为1

                     while (rs.next()) {

                         String msg = rs.getString("客户编号") + "\t"

                                  + rs.getString("房号") + "\t"

                                  + rs.getString("退房日期") + "\n";

                         JOptionPane.showMessageDialog(null, msg, "查询结果:",

                                  JOptionPane.NO_OPTION);

                         dispose();

                         count = 1;//查询得到就记count为1,

                     }

                     if (count == 0)//查询不到就显示无该商品号

                         JOptionPane.showMessageDialog(null, "无该客户", "查询结果:",

                                  JOptionPane.NO_OPTION);

                     // stmt.close();

                     // con.close();

                 } catch (SQLException h) {

                     // TODO Auto-generated catch block

                     h.printStackTrace();

             }

 
最后,演示一下添加顾客功能,对应的顾客表、房源表和订单表在后端数据库都会发生相应改变。如图6-4和6-5所示。该部分伪代码如下:

public final static void insert(Connection con, Object obj[]) {

        PreparedStatement stmt = null;

        PreparedStatement stmt2 = null;

        PreparedStatement stmt3 = null;

        try {

             stmt = con.prepareStatement("insert into 订房表(客户编号,房号,退房日期) values(?,?,?)"

                     + "insert into 客户表(客户编号,房号,退房日期,购房日期,客户姓名,性别,所购房型,联系方式) values(?,?,?,?,?,?,?,?)"

                     + "update 房源表 set 是否空置 ='否',退房日期 =? where 房号 =?");

             // SQL 语句被预编译并存储在 PreparedStatement 对象中,包含多个 '?' IN 参数占位符的 SQL 语句

             stmt.setString(1, obj[0].toString());// 将指定参数设置为传入的字符串

             stmt.setString(2, obj[1].toString());

             stmt.setString(3, obj[2].toString());

             ........

             stmt.execute(); // 执行sql语句

 

        } catch (SQLException e) {

             JOptionPane.showMessageDialog(null, "失败", "操作提示!",

                     JOptionPane.NO_OPTION);          

        }

      }

源代码下载链接: