Java基础:宾馆管理系统(二)

上回说到房间信息的添加和维护我们都已经写好了,接着就是入住和退房的操作了!!
在这里插入图片描述

入住程序

之前我们已经将房间信息写好了,添加入住和退房两个按钮并绑定点击操作
在这里插入图片描述

//在hotelInfoForm的方法中添加如下代码
		JButton insert = new JButton("入住");
        insert.setBounds(50,320,100,50);
        panel.add(insert);

        JButton del = new JButton("退房");
        del.setBounds(180,320,100,50);
        panel.add(del);
        //将房间信息布局到中部
        frame.add(g,BorderLayout.CENTER);
        //将按钮布局到底部
        frame.add(panel,BorderLayout.SOUTH);

        // 设置界面可见
        frame.setVisible(true);

        //入住按钮添加点击事件
        insert.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            	//将填写的用户信息带过去
                userInfo.setName(userNameText.getText());
                userInfo.setIdNum(userIdCardText.getText());
                userInfo.setAddress(userAddressText.getText());
                userInfo.setPhone(userPhoneText.getText());
                info.setUser(userInfo);
                info.setDeposit(contentText.getText());
                checkIn(info,frame);
            }
        });

        //退房按钮添加点击事件
        del.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                checkOut(info,frame);
            }
        });

具体入住程序代码如下

//入住
    private void checkIn(HotelInfo info,JFrame frame){
        UserInfo user = info.getUser();
        if ("已入住".equals(info.getEmpty())){
            //选择提示 showConfirmDialog 有两个选项,确定(0)或者取消(1)
            int choose = JOptionPane.showConfirmDialog(null, "该房间已录有用户信息,继续将修改已有信息",
                    "提示",JOptionPane.YES_NO_OPTION);
            if(choose == 1){
                return;
            }
        }
        //对用户信息校验、身份证、客户名称、联系方式是必要的
        if ("".equals(user.getIdNum()) || "".equals(user.getName()) || "".equals(user.getPhone())){
            new Tip("缺少客户信息,请先填写");
            return;
        }

        String startTime = JOptionPane.showInputDialog(null, "请输入入住时间(2021-1-1):\n", "入住时间(不填默认为单前日期)", JOptionPane.PLAIN_MESSAGE);
        String endTime = JOptionPane.showInputDialog(null, "请输入退房时间(2021-1-1):\n", "退房时间(不填默认为第二天)", JOptionPane.PLAIN_MESSAGE);
        if ("".equals(startTime)){
            //时间转换
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String today = sdf.format(new Date());
            startTime = today;
        }
        if ("".equals(endTime)){
            //时间转换  一般宾馆退房都是2点左右
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 14:00:00");
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(new Date());
            //1表示明天,-1表示昨天
            calendar.add(Calendar.DATE,1);
            //这个时间就是明天
            Date time = calendar.getTime();
            endTime = sdf.format(time);
        }
        info.setStartTime(startTime);
        info.setEndTime(endTime);
        int day = daysBetween(startTime,endTime);
        //计算价格 房价x天数+押金
        int price = Integer.valueOf(info.getPrice());
        int total = price * day + 100;
        info.setPayment(total + "");
        info.setDeposit("100");

        //选择提示 showConfirmDialog 有两个选项,确定(0)或者取消(1)
        int choose = JOptionPane.showConfirmDialog(null, "居住" + day + "天,加上100元押金一共需要收取" + total + "元" ,
                "明细",JOptionPane.YES_NO_OPTION);
        if (choose == 0){
            info.setEmpty("已入住");
            //确认入住 修改房间信息
            HotelInfo removeInfo = new HotelInfo();
            for (HotelInfo item : baseInfo){
                if (item.getRoomNum() == info.getRoomNum()){
                    //找到房间后填入信息
                    removeInfo = item;
                    //结束循环 如果后续还有房间就不进行对比了(没有意义)
                    break;
                }
            }
            //这里就可以简单粗暴一点 先删除在添加
            baseInfo.remove(removeInfo);
            baseInfo.add(info);
            frame.dispose();
            listFrame.dispose();
            hotelFrame();
        }else{
            //取消入住
            return;
        }
    }

在这里插入图片描述
填写完信息点击入住后在弹框中输入住时间(不填默认为单前日期)和退房时间(不填默认为单前日期的第二天)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入完成后会回显入住天数和需要收取的金额,点击是即入住成功刷新主界面,否则入住失败!
在这里插入图片描述

退房程序

//退房
    private void checkOut(HotelInfo info,JFrame frame){
        //先对比时间
        int day = daysBetween(info.getStartTime(), info.getEndTime());
        //计算价格  提前退房就计算差价退款
        int price =  Integer.parseInt(info.getPrice());
        int total = price * day;
        //预存金额
        int payment = Integer.parseInt(info.getPayment());
        if(total > payment){
            new Tip("一共入住了"+ day +"天,价格为:"+ total +"元!除去押金还收你:"+(total - payment)+"元");
        }else{
            new Tip("一共入住了"+ day +"天,价格为:"+ total +"元!除去押金退还你:"+(payment - total)+"元");
        }
        //房间信息从房间信息中删除
        baseInfo.remove(info);
        info.setUser(null);
        info.setEmpty("空房");
        baseInfo.add(info);
        //关闭结算界面
        frame.dispose();
        listFrame.dispose();
        hotelFrame();
    }

在这里插入图片描述
房间又变空房了
在这里插入图片描述

续住

续住和入住其实是一个程序,只是在填写信息时不用重复填写,会提示已有信息,是否继续!修改的只是入住和退房时间和付款
在这里插入图片描述

关闭程序

这个程序的数据源是在程序一开始就读取txt文件信息到缓存中使用,期间的操作是没有写入和读取的操作的,这也是简化程序的手段之一,所以在关闭程序之前得先将基础数据回写到txt中,以保持数据

//首先得天啊及界面关闭的监听事件,然后在关闭前保存数据
listFrame.addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {

            }

            @Override
            public void windowClosing(WindowEvent e) {
                //关闭程序是,要将房间信息重新入txt
                saveHotel(baseInfo);
            }

            @Override
            public void windowClosed(WindowEvent e) {

            }

            @Override
            public void windowIconified(WindowEvent e) {

            }

            @Override
            public void windowDeiconified(WindowEvent e) {

            }

            @Override
            public void windowActivated(WindowEvent e) {

            }

            @Override
            public void windowDeactivated(WindowEvent e) {

            }
        });

至此,宾馆入住程序就算是完成了;要是各位看客姥爷要是有啥新的想法也可以继续完善其功能!
仔细想想还是还有许多可以优化的:比如:房间的显示界面、房间押金可以根据房间类型社会不同的金额,设置程序背景等等。
照着写的远不及自己动手写的!我想各位肯定能耐写出比这更好的入住程序的!!!
在这里插入图片描述

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值