C# Winform酒店管理系统根据数据库动态加载房间生成房态图的制作效果(附图且详细)

本文详细介绍了一种基于自定义控件实现酒店管理系统中房态图动态加载的方法。通过创建自定义控件并结合数据库查询,实现了房间状态的实时更新与展示。自定义控件包括房间号、入住人、房间状态等元素,通过不同颜色和图标表示房间的不同状态。

酒店管理系统根据数据库动态加载房间生成房态图的制作

先放一张效果图:
感谢大佬指正
因为要动态加载房态图,需要遍历每一个小房间,所以我定义了一个自定义控件,大概是这个样子的,
在这里插入图片描述
首先创建一个自定义控件,然后我们来绘制一个panel容器作为我们的一个小房间,上面的label作为房间号的显示,下面的label作为房间状态的显示,中间的图片对应的是状态的图标喽。

附上自定义控件的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AegeanHotel_management_system
{
    public partial class Userstate : UserControl
    {
        private int _roomNum;
        private List<User> _inUsers;
        private string _status;
        private string _remark;

        public Userstate()
        {
            InitializeComponent();
        }

        private void pnl_Back_Paint(object sender, PaintEventArgs e)
        {
            //RoundPanel myPanel = new Panel();
            //边框线
            //ControlPaint.DrawBorder(e.Graphics,
            //                    pnl_Back.ClientRectangle,
            //                    Color.Blue,
            //                    3,
            //                    ButtonBorderStyle.Solid,
            //                    Color.Red,
            //                    3,
            //                    ButtonBorderStyle.Solid,
            //                    Color.Red,
            //                    3,
            //                    ButtonBorderStyle.Solid,
            //                    Color.Red,
            //                    3,
            //                    ButtonBorderStyle.Solid);
        }
        /// <summary>
        /// 房间号
        /// </summary>
        public int RoomNum
        {
            get { return _roomNum; }
            set
            {
                _roomNum = value;
                UpdateRoomNum();
            }
        }
        //房间号方法
        private void UpdateRoomNum()
        {
            if (_roomNum == 0)
                return;
            lbl_RoomNum.Text = _roomNum.ToString();
            var width = pnl_Back.Width - lbl_RoomNum.Width;
            if (width < 0)
                width = 0;
            lbl_RoomNum.Location = new Point(width / 2, lbl_RoomNum.Location.Y);
        }
        /// <summary>
        /// 入住人
        /// </summary>
        public List<User> InUsers
        {
            get { return _inUsers; }
            set
            {
                _inUsers = value;
                UpdateInUsers();
            }
        }
        //入住人方法
        private void UpdateInUsers()
        {
            if (_inUsers == null)
            {
                lbl_RoomUsers.Text = _status.ToString();
                return;
            }
            lbl_RoomUsers.Text = string.Join(",", _inUsers.Select(p => p.UserName).ToList());
            var width = pnl_Back.Width - lbl_RoomUsers.Width;
            if (width < 0)
                width = 0;
            lbl_RoomUsers.Location = new Point(width / 2, lbl_RoomUsers.Location.Y);
        }
        /// <summary>
        /// 房间状态
        /// </summary>
        public string Status
        {
            get { return _status; }
            set
            {
                _status = value;
                UpdateStatus();
            }
        }
        //房间状态方法
        private void UpdateStatus()
        {
            switch (_status)
            {
                case "空房已清洁":
                    pnl_Back.BackColor = Color.FromArgb(135, 206, 250);
                    pictureBox1.Image = Image.FromFile(@"F:\小图标\房子2.ico", true);
                    break;
                case "已入住":
                    pnl_Back.BackColor = Color.FromArgb(70, 130, 170);
                    pictureBox1.Image = Image.FromFile(@"F:\小图标\用户4.png", true);
                    break;
                case "维修房":
                    pnl_Back.BackColor = Color.FromArgb(205, 92, 92);
                    pictureBox1.Image = Image.FromFile(@"F:\小图标\维修1.png", true);
                    break;
                case "空房未清洁":
                    pnl_Back.BackColor = Color.FromArgb(205, 92, 92);
                    pictureBox1.Image = Image.FromFile(@"F:\小图标\打扫2.png", true);
                    break;
            }
        }
        /// <summary>
        /// 房间备注
        /// </summary>
        public string Remark { get; set; }

        #region 初始化
        #endregion
 
        public class User
        {
            public string UserName { get; set; }
        }
    }
}

到此为止我们的自定义控件就画好了,然后我们将他根据数据库展示出来就好了。

我们依然需要在显示的界面上绘制一个flowLayoutPanel容器,准备放入我们的自定义控件,也就是每一个小房间,

然后我们直接遍历显示就好啦

//房态图动态加载
string sql = "select RoomID from Room";
DataTable dt = DBHelper.GetDataTable(sql);
int RoomID = 0;
string RoomState = "";
string Sanname = "";
foreach (DataRow row in dt.Rows)
{
    RoomID = Convert.ToInt32(row["RoomID"]);
    string sql1 = string.Format("select RoomState from Room where RoomID={0}", RoomID);
    DataTable dt1 = DBHelper.GetDataTable(sql1);
    RoomState = dt1.Rows[0][0].ToString();
    string sql2 = "select Name from RoomState where Roomhao=" + RoomID;
    DataTable dt2 = DBHelper.GetDataTable(sql2);

    if (dt2.Rows.Count > 0)
    {
        Sanname = dt2.Rows[0][0].ToString();

    }
    else
    {
        Sanname = RoomState;
    }

    Userstate roomInfo = new Userstate()
    {
        RoomNum = RoomID,
        Status = RoomState,
        InUsers = RoomID % 7 == 0 ? null : new List<Userstate.User>()
            {
                new Userstate.User(){ UserName = Sanname }
            }
    };
    roomInfo.Name ="LBL"+RoomID;
    flowLayoutPanel1.Controls.Add(roomInfo);
}

到此为止我们房间的动态图就加载完成了。快去看看效果吧!
在这里插入图片描述
感谢大佬指正 小Monkey
如果你觉得有用的话,就留个赞吧!蟹蟹

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猴麦麦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值