【C#项目】酒店管理系统-WinForm+MySQL
作者:mmseoamin日期:2023-12-11

文章目录

  • 前言
      • 实现步骤
      • 一、系统分析
            • 1、需求分析
              • (1)用户管理
              • (2)客人信息管理
              • (3)客房信息管理
              • (4)客房预定信息管理
              • 2、系统设计
              • 3、数据库设计
              • 二、实体类设计
                    • 1、HotelUser实体类
                    • 2、Guest实体类
                    • 3、GuestType实体类
                    • 4、Room实体类
                    • 5、RoomType实体类
                    • 三、界面设计
                          • 1、用户登录界面
                          • 2、主界面
                          • 3、客人信息界面
                          • 4、客房信息界面
                          • 5、客房类型设置界面
                          • 6、用户管理界面
                          • 四、实现数据访问层
                                • 1、数据库通用操作类
                                • 2、用户管理数据访问
                                • 3、客房信息数据访问
                                • 4、客房类型数据访问
                                • 5、客人管理数据访问
                                • 6、客人类型数据访问
                                • 五、实现业务逻辑层
                                      • 1、用户管理业务逻辑类
                                      • 2、客房信息管理业务逻辑类
                                      • 3、客房类型业务逻辑类
                                      • 4、客房管理业务逻辑类
                                      • 5、客人类型业务逻辑类
                                      • 六、实现表示层业务逻辑
                                            • 1、用户登录
                                            • 2、主界面
                                            • 3、客房类型设置
                                            • 4、可房信息设置
                                            • 5、用户管理
                                            • 6、客人管理
                                            • 总结

                                              前言

                                              结合.NET三层机构的开发思想,完成一个C/S结构的、实际可以使用的酒店管理系统。涉及编程方面的重要技巧,如ADO.NET技术、数据验证技术、参数传递、数据显示控件及容器控件。

                                              实现步骤

                                              • 酒店管理系统的系统分析。
                                              • 用户管理模块的设计和实现。
                                              • 酒店基础信息设置模块的设计和实现。
                                              • 酒店业务管理模块的设计和实现。

                                                一、系统分析

                                                用途:帮助酒店管理的工具。

                                                功能1:添加、删除、修改住房信息。

                                                功能2:添加、删除、修改客人信息。

                                                1、需求分析

                                                需求分析是开发应用系统的第一步,通过需求分析可以了解客户需要什么样的程序,需要完成什么功能。通过需求说明书描述系统的总体要求,并且作为各方面沟通的依据,也为下一步工作提供基准。系统开发人员要按照需求说明文档完成相应的功能实现。可以找一下标准的需求说明书文档参考。

                                                酒店管理系统用于管理和维护酒店的基本信息,酒店管理人员登录系统后可以拥有该系统的所有功能,方便进行酒店内部管理。改系统使用数据库存放数据。

                                                以下为需求分析的结果——系统功能设计图。

                                                【C#项目】酒店管理系统-WinForm+MySQL,第1张

                                                (1)用户管理

                                                可登录本系统的人员管理。信息必须在用户数据中才可以登录。

                                                功能:

                                                用户信息的查询、增加、删除、修改。

                                                (2)客人信息管理

                                                功能:

                                                客人住房情况管理(客人姓名、入住房间、入住时间、离开时间)。

                                                根据客人名称对客房预定信息进行查询。

                                                (3)客房信息管理

                                                功能:

                                                客房类型管理(客房类型分中、高、低)。

                                                客房使用情况(空闲、入住、维修、自用)。

                                                根据客房类型对房间进行统一定价,并设置某类客房是否可以加床以及加床的价格。

                                                每一个房间的属性,如房号、类型、价格、床位数、对该客房的描述。

                                                根据客房信息名称、客房房间号对信息进行查找。

                                                (4)客房预定信息管理

                                                客房属性:房号、类型、床位数、价格、使用情况描述。

                                                客房使用状态:空闲、入住、维修、自用。

                                                根据客房的房号进行信息查找。

                                                2、系统设计

                                                本系统的总体架构采用三层架构模式,分为表示层、业务逻辑层、数据访问层。其中表示层负责界面的显示,提供用户交互操作界面。业务逻辑层是表示层和数据访问层之间的桥梁,主要负责数据的处理和传递。数据访问层主要实现对数据的读取和保存操作。

                                                该系统较为简单,没有使用接口和反射技术。三个模块之间使用对象或者数据集进行通信。

                                                每一层使用程序集实现,三层架构的程序不可跨层调用。

                                                三层系统架构图:

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第2张

                                                3、数据库设计

                                                实体关系概念模型设计(E-R图)

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第3张

                                                数据表设计

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第4张

                                                客人信息表(Guest):

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第5张

                                                客人类型表(GuestCategory):

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第6张

                                                客房信息表(Room)

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第7张

                                                客房类型表(RoomType)

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第8张

                                                数据表的E-R模型视图

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第9张

                                                二、实体类设计

                                                在之前做的图书馆管理系统中,表示层界面的数据是直接从数据库中读取的数据,这种方式容易把数据结构暴露在表示层和业务逻辑层,不利于数据安全。

                                                实体类具有面向兑现的基本特性,是业务对象的基础。在三层结构之间通过实体类传递数据有很大的灵活性,有助于项目的维护和扩展,更体现三层结构的优势。

                                                本项目根据系统功能和数据库的设计,将五个数据表分别转换为五个实体类。

                                                1、Guest实体类

                                                2、GuestCategory实体类

                                                3、Room实体类

                                                4、RoomType实体类

                                                5、HotelUser实体类

                                                1、HotelUser实体类

                                                HotelUser实体类对应于数据库中的HotelUser数据表,将其转化成面向对象的标识形式。

                                                一般实体类中都包含字段和属性。如果属性是可读可写,就可以采用重构的方式快速完成实体类的创建。但是如果属性只能可读或者可写,就需要手动创建类。

                                                HotelUser实体类的类图:

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第10张

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                namespace HotelManageLib
                                                {
                                                    [Serializable]
                                                    public class HotelUser
                                                    {
                                                        private static int userID;//用户ID
                                                        private static string userName = String.Empty;//用户名
                                                        private static string password = String.Empty;//用户密码
                                                        /// 
                                                        /// 用户ID
                                                        /// 
                                                        public int UserID
                                                        {
                                                            get { return userID; }
                                                            set { userID = value; }
                                                        }
                                                        /// 
                                                        /// 用户名
                                                        /// 
                                                        public string UserName
                                                        {
                                                            get { return userName; }
                                                            set { userName = value; }
                                                        }
                                                        /// 
                                                        /// 用户密码
                                                        /// 
                                                        public string Password
                                                        {
                                                            get { return password; }
                                                            set { password = value; }
                                                        }
                                                        public HotelUser() { }
                                                    }
                                                }
                                                
                                                2、Guest实体类

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第11张

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                namespace HotelManageLib
                                                {
                                                    [Serializable]
                                                    public class Guest
                                                    {
                                                        /// 
                                                        /// 客人ID
                                                        /// 
                                                        private static int guestId;//客人Id,int类型
                                                        public int GuestID
                                                        {
                                                            get { return guestId; }
                                                            set { guestId = value; }
                                                        }
                                                        /// 
                                                        /// 客人姓名
                                                        /// 
                                                        private static string guestName;//客人姓名
                                                        public string GuestName
                                                        {
                                                            get { return guestName; }
                                                            set { guestName = value; }
                                                        }
                                                        /// 
                                                        /// 客人类别
                                                        /// 
                                                        private static int guestTypeId;//客人类别
                                                        public int GuestTypeID
                                                        {
                                                            get { return guestTypeId; }
                                                            set { guestTypeId = value; }
                                                        }
                                                        /// 
                                                        /// 客人性别
                                                        /// 
                                                        private static string guestSex;//客人性别
                                                        public string GuestSex
                                                        {
                                                            get { return guestSex; }
                                                            set { guestSex = value; }
                                                        }
                                                        /// 
                                                        /// 电话
                                                        /// 
                                                        private static string guestMobile;//电话
                                                        public string GuestMobile
                                                        {
                                                            get { return guestMobile; }
                                                            set { guestMobile = value; }
                                                        }
                                                        /// 
                                                        /// 房间号
                                                        /// 
                                                        private static int guestRoomId;//房间号,int类型
                                                        public int GuestRoomID
                                                        {
                                                            get { return guestRoomId; }
                                                            set { guestRoomId = value; }
                                                        }
                                                        /// 
                                                        /// 入住时间
                                                        /// 
                                                        private static DateTime guestArriveTime;//入住时间,时间类型
                                                        public DateTime GuestArriveTime
                                                        {
                                                            get { return guestArriveTime; }
                                                            set { guestArriveTime = value; }
                                                        }
                                                        /// 
                                                        /// 离开时间
                                                        /// 
                                                        private static DateTime guestLeaveTime;//离开时间,时间类型
                                                        public DateTime GuestLeaveTime
                                                        {
                                                            get { return guestLeaveTime; }
                                                            set { guestLeaveTime = value; }
                                                        }
                                                    }
                                                }
                                                
                                                3、GuestType实体类

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第12张

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                namespace HotelManageLib
                                                {
                                                    [Serializable]
                                                    public class GuestType
                                                    {
                                                        /// 
                                                        /// 客人类型ID
                                                        /// 
                                                        private static int typeId;//客人类型ID
                                                        public int TypeID
                                                        {
                                                            get { return typeId; }
                                                            set { typeId = value; }
                                                        }
                                                        /// 
                                                        /// 类型名称
                                                        /// 
                                                        private static string typeName;//类型名称
                                                        public string TypeName
                                                        {
                                                            get { return typeName; }
                                                            set { typeName = value; }
                                                        }
                                                        public GuestType()
                                                        { }
                                                    }
                                                }
                                                
                                                4、Room实体类

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第13张

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                namespace HotelManageLib
                                                {
                                                    [Serializable]
                                                    public class Room
                                                    {
                                                        protected static int roomId;//房间号Id
                                                        protected static string number = String.Empty;//房间号
                                                        protected static int typeId;//房间类型ID
                                                        protected static int bedNumber;//床位数
                                                        protected static string description = String.Empty;//房间描述
                                                        protected static string state = String.Empty;//房间状态
                                                        protected static int guestNumber;//入住客人数
                                                        public Room()
                                                        { }
                                                        /// 
                                                        /// 房间号ID
                                                        /// 
                                                        public int RoomID
                                                        {
                                                            get { return roomId; }
                                                            set { roomId = value; }
                                                        }
                                                        /// 
                                                        /// 房间号
                                                        /// 
                                                        public string Number
                                                        {
                                                            get { return number; }
                                                            set { number = value; }
                                                        }
                                                        /// 
                                                        /// 房间类型ID
                                                        /// 
                                                        public int TypeID
                                                        {
                                                            get { return typeId; }
                                                            set { typeId = value; }
                                                        }
                                                        /// 
                                                        /// 床位数
                                                        /// 
                                                        public int BedNumber
                                                        {
                                                            get { return bedNumber; }
                                                            set { bedNumber = value; }
                                                        }
                                                        /// 
                                                        /// 房间描述
                                                        /// 
                                                        public string Description
                                                        {
                                                            get { return description; }
                                                            set { description = value; }
                                                        }
                                                        /// 
                                                        /// 房间状态
                                                        /// 
                                                        public string State
                                                        {
                                                            get { return state; }
                                                            set { state = value; }
                                                        }
                                                        /// 
                                                        /// 入住客人数
                                                        /// 
                                                        public int GuestNumber
                                                        {
                                                            get { return guestNumber; }
                                                            set { guestNumber = value; }
                                                        }
                                                    }
                                                }
                                                
                                                5、RoomType实体类

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第14张

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                namespace HotelManageLib
                                                {
                                                    [Serializable]
                                                    public class RoomType
                                                    {
                                                        protected static int typeId;//房间类型ID
                                                        protected static string typeName;//房间类型名
                                                        protected static string typePrice;//房间类型价格
                                                        protected static string addBedPrice;//添加床位的价格
                                                        protected static string isAddBed;//是否添加床位
                                                        protected static string remark;//备注
                                                        public RoomType()
                                                        { }
                                                        /// 
                                                        /// 房间类型ID
                                                        /// 
                                                        public int TypeID
                                                        {
                                                            get { return typeId; }
                                                            set { typeId = value; }
                                                        }
                                                        /// 
                                                        /// 房间类型名
                                                        /// 
                                                        public string TypeName
                                                        {
                                                            get { return typeName; }
                                                            set { typeName = value; }
                                                        }
                                                        /// 
                                                        /// 房间类型价格
                                                        /// 
                                                        public string TypePrice
                                                        {
                                                            get { return typePrice; }
                                                            set { typePrice = value; }
                                                        }
                                                        /// 
                                                        /// 添加床位价格
                                                        /// 
                                                        public string AddBedPrice
                                                        {
                                                            get { return addBedPrice; }
                                                            set { addBedPrice = value; }
                                                        }
                                                        /// 
                                                        /// 是否添加床位
                                                        /// 
                                                        public string IsAddBed
                                                        {
                                                            get { return isAddBed; }
                                                            set { isAddBed = value; }
                                                        }
                                                        /// 
                                                        /// 备注
                                                        /// 
                                                        public string Remark
                                                        {
                                                            get { return remark; }
                                                            set { remark = value; }
                                                        }
                                                    }
                                                }
                                                

                                                三、界面设计

                                                1、用户登录界面

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第15张

                                                2、主界面

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第16张

                                                3、客人信息界面

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第17张

                                                4、客房信息界面

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第18张

                                                5、客房类型设置界面

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第19张

                                                6、用户管理界面

                                                【C#项目】酒店管理系统-WinForm+MySQL,在这里插入图片描述,第20张

                                                四、实现数据访问层

                                                1、数据库通用操作类

                                                通信模块:

                                                public static class DBModule
                                                {
                                                    public static string ServerIP = "***.***.***.***";
                                                    public static string ServerPort = "33**";
                                                    public static string ServerUser = "#####";
                                                    public static string ServerPassword = "******";
                                                    public static string ServerDBName = "hotelmanage";
                                                }
                                                

                                                操作模块:

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using MySql.Data.MySqlClient;
                                                using System.Data;
                                                public class MySQLHelper
                                                {
                                                    private MySqlConnection myConnection;
                                                    private string mErrorString;
                                                    //构造函数
                                                    public MySQLHelper(string strServerIP, string strServerPort, string strServerUser, string strPassword, string strDBName)
                                                    {
                                                        string strConnectionString = String.Format("server={0}; port={1}; user id={2}; password={3}; database={4}", 
                                                            strServerIP, strServerPort, strServerUser, strPassword, strDBName);
                                                        myConnection = new MySqlConnection(strConnectionString);
                                                    }
                                                    //测试连接
                                                    public bool ConnectionTest()
                                                    {
                                                        bool result = false;
                                                        try
                                                        {
                                                            if (myConnection.State == System.Data.ConnectionState.Closed)
                                                            {
                                                                myConnection.Close();
                                                                result = true;
                                                            }
                                                        }
                                                        catch (MySqlException ex)
                                                        {
                                                            mErrorString = ex.ToString();
                                                        }
                                                        return result;
                                                    }
                                                    /// 
                                                    /// 执行查询语句,用DataTable返回结果,调用前要传入DataTable的实例化对象作为参数
                                                    /// 
                                                    /// 查询命令
                                                    /// 返回数据表
                                                    /// 
                                                    public bool ExcuteQuerySql(string strQuery, ref DataTable dt)
                                                    {
                                                        if (dt == null)
                                                        {
                                                            mErrorString = "传入的DataTable为null";
                                                            return false;
                                                        }
                                                        bool result = false;
                                                        try
                                                        {
                                                            MySqlCommand myCommand = new MySqlCommand(strQuery);
                                                            myCommand.Connection = myConnection;
                                                            if (myConnection.State == ConnectionState.Closed)
                                                            {
                                                                myConnection.Open();
                                                            }
                                                            dt.Load(myCommand.ExecuteReader());
                                                            result = true;
                                                        }
                                                        catch (MySqlException ex)
                                                        {
                                                            mErrorString = String.Format("ExcuteQuery {0} failed.", ex.ToString());
                                                            return false;
                                                        }
                                                        finally
                                                        {
                                                            myConnection.Close();
                                                        }
                                                        return result;
                                                    }
                                                    /// 
                                                    /// 执行带参数的查询语句,使用前传入参数、DataTable实例化对象
                                                    /// 
                                                    /// 查询语句
                                                    /// 
                                                    /// 
                                                    /// 
                                                    public bool ExcuteQuerySql(string strQuery, MySqlParameter[] param, ref DataTable dt)
                                                    {
                                                        if (dt == null)
                                                        {
                                                            mErrorString = "传入的DataTable为null.";
                                                            return false;
                                                        }
                                                        bool result = false;
                                                        try
                                                        {
                                                            MySqlCommand myCommand = new MySqlCommand(strQuery);
                                                            myCommand.Connection = myConnection;
                                                            if (myConnection.State == ConnectionState.Closed)
                                                            {
                                                                myConnection.Open();
                                                            }
                                                            for (int i = 0; i < param.Length; i++)
                                                            {
                                                                myCommand.Parameters.Add(param[i]);
                                                            }
                                                            dt.Load(myCommand.ExecuteReader());
                                                            result = true;
                                                        }
                                                        catch (MySqlException ex)
                                                        {
                                                            mErrorString = String.Format("ExcuteQuery {0} failed", strQuery) + ex.Message;
                                                            return false;
                                                        }
                                                        finally
                                                        {
                                                            myConnection.Close();
                                                        }
                                                        return result;
                                                    }
                                                    //执行非查询语句
                                                    public int ExcuteSql(string SqlCmdText)
                                                    {
                                                        int row = -1;
                                                        try
                                                        {
                                                            MySqlCommand myCommand = new MySqlCommand(SqlCmdText);
                                                            myCommand.CommandText = SqlCmdText;
                                                            myCommand.Connection = myConnection;
                                                            if (myConnection.State == ConnectionState.Closed)
                                                            {
                                                                myConnection.Open();
                                                            }
                                                            row = myCommand.ExecuteNonQuery();
                                                        }
                                                        catch (MySqlException ex)
                                                        {
                                                            mErrorString = String.Format("ExcuteNonQuery {0} failed", SqlCmdText);
                                                        }
                                                        return row;
                                                    }
                                                    //执行非查询语句
                                                    public int ExcuteSql(string[] SqlCmdText)
                                                    {
                                                        try
                                                        {
                                                            if (myConnection.State == ConnectionState.Closed)
                                                            {
                                                                myConnection.Open();
                                                            }
                                                            for (int i = 0; i < SqlCmdText.Length; i++)
                                                            {
                                                                MySqlCommand myCommand = new MySqlCommand(SqlCmdText[i]);
                                                                myCommand.CommandText = SqlCmdText[i];
                                                                myCommand.Connection = myConnection;
                                                                myCommand.ExecuteNonQuery();
                                                            }
                                                        }
                                                        catch (MySqlException ex)
                                                        {
                                                            mErrorString = String.Format("ExcuteNonQuery {0} failed", SqlCmdText) + ex.Message;
                                                            return -1;
                                                        }
                                                        return -1;
                                                    }
                                                    //执行带参数的非查询语句
                                                    public int ExcuteSql(string SqlCmdText, MySqlParameter[] param)
                                                    {
                                                        int row = -1;
                                                        try
                                                        {
                                                            MySqlCommand myCommand = new MySqlCommand(SqlCmdText);
                                                            myCommand.CommandText = SqlCmdText;
                                                            myCommand.Connection = myConnection;
                                                            if (myConnection.State == ConnectionState.Closed)
                                                            {
                                                                myConnection.Open();
                                                            }
                                                            for (int i = 0; i < param.Length; i++)
                                                            {
                                                                myCommand.Parameters.Add(param[i]);
                                                            }
                                                            row = myCommand.ExecuteNonQuery();
                                                        }
                                                        catch (MySqlException ex)
                                                        {
                                                            mErrorString = String.Format("ExecuteNonQuery {0} failed", SqlCmdText) + ex.Message;
                                                            return row = -1;
                                                        }
                                                        return row;
                                                    }
                                                    public string GetErrInfo()
                                                    {
                                                        return mErrorString;
                                                    }
                                                }
                                                
                                                2、用户管理数据访问

                                                用户管理的数据访问(HotelUserService.cs)需要实现对用户(用户表)的增、删、改、查操作,使用实体对象传递数据,使用IList传递实体对象集合。此类中包含的方法有如下几种:

                                                AddHotelUser(Hotel hotelUser):用户对象作为参数,实现添加新用户的功能。

                                                DeleteHotelUser(Hotel hotelUser):用户对象作为参数,实现删除用户的操作。

                                                DeleteHotelUserByUserID(int userID):根据用户ID删除用户的方法。

                                                ModifyHotelUser(Hotel hotelUser):用户对象作为参数,实现对用户信息的更新。

                                                GetAllHotelUsers():获取所有用户信息。

                                                GetHotelUserByUserID(int userID):根据用户ID查询用户信息。

                                                GetHotelUserByName(string userName):根据用户名查询用户信息。

                                                用户管理数据访问类HotelUserService.cs代码:

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using MySql.Data;
                                                using System.Data;
                                                using System.Windows.Forms;
                                                namespace HotelManageLib
                                                {
                                                    [Serializable]
                                                    public class HotelUserService
                                                    {
                                                        //建立MySQL连接
                                                        MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);
                                                        //公用数据表,用来进行操作后刷新数据
                                                        static DataTable dtAllUsers = new DataTable();//获取全部用户信息
                                                        public static int aaa = 1;
                                                        
                                                        /// 
                                                        /// 添加用户
                                                        /// 
                                                        /// 
                                                        /// 
                                                        public static  HotelUser AddHotelUser(HotelUser hotelUser)
                                                        {
                                                            string sql = "insert into user (UserName, Password) values ('" + hotelUser.UserName + "', '" + hotelUser.Password + "');";//定义插入sql语句
                                                            int newID = 0;
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                
                                                                //执行添加语句
                                                                int returnValue = MySQLHelper.ExcuteSql(sql);
                                                                if (returnValue == 0)
                                                                {
                                                                    //获取最新一条数据的ID
                                                                    string sqlNew = "select max(UserId) from user;";
                                                                    bool QueryFlag = MySQLHelper.ExcuteQuerySql(sqlNew, ref dt);
                                                                    if (QueryFlag == true)
                                                                    {
                                                                        newID = Convert.ToInt32(dt.Rows[0][0]);
                                                                    }
                                                                    else
                                                                    {
                                                                        Console.WriteLine("执行" + sqlNew + "查询最新用户ID失败");//异常写入日志
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    Console.WriteLine("执行" + sql + "添加用户信息失败");//异常写入日志
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                throw ex;
                                                            }
                                                            return GetHotelUserByUserId(newID);//返回查询对象
                                                        }
                                                        /// 
                                                        /// 删除用户
                                                        /// 
                                                        /// 
                                                        public static void DeleteHotelUser(HotelUser hotelUser)
                                                        {
                                                            HotelUser hotelUserTmp = new HotelUser();
                                                            //根据用户名查询对应的用户ID
                                                            string sql = "select UserID from user where UserName='" + hotelUser.UserName + "';";
                                                            //查询用户信息
                                                            if (hotelUser.UserName != string.Empty)
                                                            {
                                                                hotelUserTmp = GetHotelUserByUserName(hotelUser.UserName);//查询此用户
                                                                if (hotelUserTmp != null)
                                                                {
                                                                    DeleteHotelUserByUserId(hotelUserTmp.UserID);//根据此用户的用户ID删除信息
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("没有该用户信息,不能删除");
                                                                }
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("要删除的用户名为空,不能删除该用户信息");
                                                            }
                                                        }
                                                        /// 
                                                        /// 通过用户ID删除用户
                                                        /// 
                                                        /// 
                                                        public static void DeleteHotelUserByUserId(int userId)
                                                        {
                                                            //先查询是否有此ID的用户
                                                            HotelUser hotelUser = new HotelUser();
                                                            hotelUser = GetHotelUserByUserId(userId);
                                                            if (hotelUser != null)
                                                            {
                                                                string sql = "delete from user where UserID = " + userId + ";";
                                                                DataTable dt = new DataTable();
                                                                try
                                                                {
                                                                    //执行删除语句
                                                                    int returnValue = MySQLHelper.ExcuteSql(sql);
                                                                    if (returnValue == 1)
                                                                    {
                                                                        //添加后更新全部数据
                                                                        GetAllHotelUsers();
                                                                        MessageBox.Show("通过此用户ID" + userId.ToString() + "删除用户信息成功");
                                                                    }
                                                                    else
                                                                    {
                                                                        //异常写入日志
                                                                        Console.WriteLine("执行" + sql + "删除用户信息失败");
                                                                    }
                                                                }
                                                                catch (Exception ex)
                                                                {
                                                                    //异常写入日志
                                                                    Console.WriteLine(ex.ToString());
                                                                    MessageBox.Show(ex.ToString());
                                                                }
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("输入ID" + userId.ToString() + "的用户不存在,不能删除");
                                                            }
                                                        }
                                                        /// 
                                                        /// 修改用户信息
                                                        /// 
                                                        /// 
                                                        public static DataTable ModifyHotelUser(HotelUser hotelUser)
                                                        {
                                                            string sql = "update user set UserName='" + hotelUser.UserName + "', Password='" + hotelUser.Password + "' where UserId=" + Convert.ToInt32(hotelUser.UserID) + ";";
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                //执行添加语句
                                                                int returnValue = MySQLHelper.ExcuteSql(sql);
                                                                if (returnValue == 1)
                                                                {
                                                                    dt = GetAllHotelUsers();
                                                                    
                                                                }
                                                                else
                                                                {
                                                                    //异常写入日志
                                                                    Console.WriteLine("执行" + sql + "添加用户信息失败");
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                throw ex;
                                                            }
                                                            return dt;
                                                        }
                                                        /// 
                                                        /// 获取所有用户信息
                                                        /// 
                                                        /// 
                                                        public static DataTable GetAllHotelUsers()
                                                        {
                                                            string sql = "select * from user;";
                                                            try
                                                            {
                                                                //执行添加语句
                                                                bool returnValue = MySQLHelper.ExcuteQuerySql(sql, ref dtAllUsers);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                throw ex;
                                                            }
                                                            return dtAllUsers;
                                                        }
                                                        /// 
                                                        /// 通过用户ID获取用户信息
                                                        /// 
                                                        /// 
                                                        /// 
                                                        public static HotelUser GetHotelUserByUserId(int userId)
                                                        {
                                                            HotelUser hotelUser = new HotelUser();
                                                            string sql = "select * from user where UserID = " + userId + ";";
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                //执行查询语句
                                                                bool returnValue = MySQLHelper.ExcuteQuerySql(sql, ref dt);
                                                                if (returnValue == true)
                                                                {
                                                                    //添加后更新DataGridView
                                                                    if (dt.Rows.Count > 0)
                                                                    {
                                                                        hotelUser.UserID = Convert.ToInt32(dt.Rows[0][0]);//第0列为用户ID
                                                                        hotelUser.UserName = dt.Rows[0][1].ToString();//第1列为用户名
                                                                        hotelUser.Password = dt.Rows[0][2].ToString();//第2列为用户密码
                                                                    }
                                                                    else
                                                                    {
                                                                        hotelUser = null;
                                                                        //异常写入日志
                                                                        //Console.WriteLine("执行" + sql + "根据用户ID查询用户信息失败");
                                                                        MessageBox.Show("执行" + sql + "根据用户ID查询用户信息失败");
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    //异常写入日志
                                                                    //Console.WriteLine("执行" + sql + "根据用户ID查询用户信息失败");
                                                                    MessageBox.Show("执行" + sql + "根据用户ID查询用户信息失败");
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                MessageBox.Show(ex.ToString());
                                                            }
                                                            return hotelUser;
                                                        }
                                                        /// 
                                                        /// 通过用户名获取用户信息
                                                        /// 
                                                        /// 
                                                        /// 
                                                        public static HotelUser GetHotelUserByUserName(string userName)
                                                        {
                                                            HotelUser hotelUser = new HotelUser();
                                                            string sql = "select * from user where UserName='" + userName + "';";
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                //执行添加语句
                                                                bool returnValue = MySQLHelper.ExcuteQuerySql(sql, ref dt);
                                                                if (returnValue == true)
                                                                {
                                                                    if (dt.Rows.Count > 0)
                                                                    {
                                                                        hotelUser.UserID = Convert.ToInt32(dt.Rows[0][0]);//第0列为用户ID
                                                                        hotelUser.UserName = dt.Rows[0][1].ToString();//第1列为用户名
                                                                        hotelUser.Password = dt.Rows[0][2].ToString();//第2列为用户密码
                                                                    }
                                                                    else
                                                                    {
                                                                        hotelUser = null;
                                                                        //异常写入日志
                                                                        Console.WriteLine("执行" + sql + "根据用户ID查询用户信息失败");
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    //异常写入日志
                                                                    Console.WriteLine("执行" + sql + "添加用户信息失败");
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                throw ex;
                                                            }
                                                            return hotelUser;
                                                        }
                                                    }
                                                }
                                                
                                                3、客房信息数据访问

                                                客房信息数据访问类(RoomService.cs)与用户管理类相似,其中方法是对客房信息数据库进行增、删、改、查操作,操作方式、参数略有不同。

                                                此类中包含的方法如下几种:

                                                AddRoom(Room room):客房对象作为参数,实现增加客房信息。

                                                DeleteRoomById(int roomId):根据客房ID删除客房信息。

                                                ModifyRoom(Room room):客房对象作为参数,实现修改客房信息。

                                                GetAllRooms():查询所有客房信息。

                                                GetRoomById(int roomId):根据客房ID查询客房信息(客房实体对象)。

                                                GetRoomListByRoomNumber(string roomNumber):根据客房编号查询同编号的客房集合。

                                                GetRoomByRoomNumber(string roomNumber):根据客房编号查询客房信息。

                                                在这里插入代码片
                                                
                                                4、客房类型数据访问

                                                客房类型访问类(RoomTypeService.cs)实现客房类型的数据库操作,方法与客房信息的操作类似,实现对客房类型信息的增删改查。此类中实现方法如下:

                                                AddRoomType(RoomType roomType):客房类型对象作为参数,实现增加客房类型。

                                                DeleteRoomType(int roomTypeId):根据客房类型ID删除客房类型信息。

                                                ModifyRoomType(RoomType roomType):客房类型对象作为参数,实现客房类型信息修改。

                                                GetAllRoomTypes():得到所有房间类型。

                                                GetRoomTypeListByTypeName(string typeName):根据客房类型名称得到客房类型列表。

                                                GetTypeNameByTypeId(int typeID):根据客房类型ID得到客房类型名字。

                                                GetRoomTypeByTypeID(int typeId):根据客房类型ID得到客房实体对象。

                                                5、客人管理数据访问

                                                客人管理类(GuestService.cs)实现对客人信息的数据库操作,方法与客房信操作类似,实现对客人信息的增删改查。此类中实现方法如下:

                                                AddGuest(Guest guest):客人对象作为参数,实现增加客人信息。

                                                DeleteGuest(int guestId):根据客人ID删除客人信息。

                                                ModifyGuest(Guest guest):客人对象作为参数,实现修改客人信息。

                                                GetAllGuest():获取所有客人信息。

                                                GetGuestByGuestName(string guestName):根据客人名字获取客人信息。

                                                GetGuestListBySql(string safeSql):根据sql语句获取客人信息列表。

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using MySql.Data;
                                                using System.Data;
                                                using System.Windows.Forms;
                                                namespace HotelManageLib
                                                {
                                                    [Serializable]
                                                    public class GuestService
                                                    {
                                                        //建立MySQL连接
                                                        MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);
                                                        //公用数据表,用来进行操作后刷新数据
                                                        static DataTable dtAllGuests = new DataTable();//获取全部用户信息
                                                        /// 
                                                        /// 添加用户
                                                        /// 
                                                        /// 
                                                        /// 
                                                        public static Guest AddGuest(Guest guest)
                                                        {
                                                            string sql = "insert into guest (GuestName, GuestTypeID, GuestSex, GuestMobile, RoomID, GuestArriveTime, GuestLeaveTime) values ('" +
                                                                guest.GuestName + 
                                                                "', " + guest.GuestTypeID +   //int不需要引号
                                                                ", '" + guest.GuestSex +
                                                                "', '" + guest.GuestMobile +
                                                                "', " + guest.GuestRoomID +     //int不需要引号
                                                                ", '" + guest.GuestArriveTime + 
                                                                "', '" + guest.GuestLeaveTime + 
                                                                "');";//定义插入sql语句
                                                            int newID = 0;
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                //执行添加语句
                                                                int returnValue = MySQLHelper.ExcuteSql(sql);
                                                                if (returnValue == 0)
                                                                {
                                                                    //获取最新一条数据的ID
                                                                    string sqlNew = "select max(GuestID) from guest;";
                                                                    bool QueryFlag = MySQLHelper.ExcuteQuerySql(sqlNew, ref dt);
                                                                    if (QueryFlag == true)
                                                                    {
                                                                        newID = Convert.ToInt32(dt.Rows[0][0]);
                                                                    }
                                                                    else
                                                                    {
                                                                        Console.WriteLine("执行" + sqlNew + "查询最新客人ID失败");//异常写入日志
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    Console.WriteLine("执行" + sql + "添加客人信息失败");//异常写入日志
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                MessageBox.Show("插入客人信息失败" + ex.ToString());
                                                            }
                                                            return GetGuestByGuestId(newID);//返回查询对象
                                                        }
                                                        /// 
                                                        /// 删除客人
                                                        /// 
                                                        /// 
                                                        public static void DeleteGuest(Guest guest)
                                                        {
                                                            Guest guestTmp = new Guest();
                                                            //根据用户名查询对应的用户ID
                                                            string sql = "select GuestID from guest where GuestName='" + guest.GuestName + "';";
                                                            //查询用户信息
                                                            if (guest.GuestName != string.Empty)
                                                            {
                                                                guestTmp = GetGuestByGuestName(guest.GuestName);//查询此用户
                                                                if (guestTmp != null)
                                                                {
                                                                    DeleteGuestByGuestId(guestTmp.GuestID);//根据此用户的用户ID删除信息
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("没有该客人信息,不能删除");
                                                                }
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("要删除的客人名为空,不能删除该客人信息");
                                                            }
                                                        }
                                                        /// 
                                                        /// 通过客人ID删除客人
                                                        /// 
                                                        /// 
                                                        public static void DeleteGuestByGuestId(int guestId)
                                                        {
                                                            //先查询是否有此ID的用户
                                                            Guest guest = new Guest();
                                                            guest = GetGuestByGuestId(guestId);
                                                            if (guest != null)
                                                            {
                                                                string sql = "delete from guest where GuestID = " + guestId + ";";
                                                                DataTable dt = new DataTable();
                                                                try
                                                                {
                                                                    //执行删除语句
                                                                    int returnValue = MySQLHelper.ExcuteSql(sql);
                                                                    if (returnValue == 1)
                                                                    {
                                                                        //添加后更新全部数据
                                                                        GetAllGuests();
                                                                        MessageBox.Show("通过此客人ID" + guestId.ToString() + "删除客人信息成功");
                                                                    }
                                                                    else
                                                                    {
                                                                        //异常写入日志
                                                                        Console.WriteLine("执行" + sql + "删除客人信息失败");
                                                                        MessageBox.Show("执行" + sql + "删除客人信息失败");
                                                                    }
                                                                }
                                                                catch (Exception ex)
                                                                {
                                                                    //异常写入日志
                                                                    Console.WriteLine(ex.ToString());
                                                                    MessageBox.Show(ex.ToString());
                                                                }
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("输入ID" + guestId.ToString() + "的客人不存在,不能删除");
                                                            }
                                                        }
                                                        /// 
                                                        /// 修改客人信息
                                                        /// 
                                                        /// 
                                                        public static DataTable ModifyGuest(Guest guest)
                                                        {
                                                            string sql = "update guest set GuestName='" + guest.GuestName +
                                                                "', GuestTypeID=" + guest.GuestTypeID +    //int无需单引号
                                                                ", GuestSex='" + guest.GuestSex +
                                                                "', GuestMobile='" + guest.GuestMobile +
                                                                "', GuestRoomID=" + guest.GuestRoomID +     //int无需单引号
                                                                ", GuestArriveTime='" + guest.GuestArriveTime +
                                                                "', GuestLeaveTime='" + guest.GuestLeaveTime +
                                                                "' where GuestID=" + Convert.ToInt32(guest.GuestID) + ";";
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                //执行添加语句
                                                                int returnValue = MySQLHelper.ExcuteSql(sql);
                                                                if (returnValue == 1)
                                                                {
                                                                    dt = GetAllGuests();
                                                                }
                                                                else
                                                                {
                                                                    //异常写入日志
                                                                    Console.WriteLine("执行" + sql + "添加用户信息失败");
                                                                    MessageBox.Show("执行" + sql + "添加用户信息失败");
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                MessageBox.Show("修改客户信息失败" + ex.ToString());
                                                            }
                                                            return dt;
                                                        }
                                                        /// 
                                                        /// 获取所有客人信息
                                                        /// 
                                                        /// 
                                                        public static DataTable GetAllGuests()
                                                        {
                                                            string sql = "select * from guest;";
                                                            try
                                                            {
                                                                //执行添加语句
                                                                bool returnValue = MySQLHelper.ExcuteQuerySql(sql, ref dtAllGuests);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                MessageBox.Show("获取所有客人信息失败" + ex.ToString());
                                                            }
                                                            return dtAllGuests;
                                                        }
                                                        /// 
                                                        /// 通过客人ID获取客人信息
                                                        /// 
                                                        /// 
                                                        /// 
                                                        public static Guest GetGuestByGuestId(int guestId)
                                                        {
                                                            Guest guest = new Guest();
                                                            string sql = "select * from guest where GuestID = " + guestId + ";";
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                //执行查询语句
                                                                bool returnValue = MySQLHelper.ExcuteQuerySql(sql, ref dt);
                                                                if (returnValue == true)
                                                                {
                                                                    if (dt.Rows.Count > 0)
                                                                    {
                                                                        //获取客人属性
                                                                        guest.GuestID = Convert.ToInt32(dt.Rows[0][0]); ;
                                                                        guest.GuestName = dt.Rows[0][1].ToString();
                                                                        guest.GuestTypeID = Convert.ToInt32(dt.Rows[0][2]);
                                                                        guest.GuestSex = dt.Rows[0][3].ToString();
                                                                        guest.GuestMobile = dt.Rows[0][4].ToString();
                                                                        guest.GuestRoomID = Convert.ToInt32(dt.Rows[0][5]);
                                                                        guest.GuestArriveTime = Convert.ToDateTime(dt.Rows[0][6].ToString());
                                                                        guest.GuestLeaveTime = Convert.ToDateTime(dt.Rows[0][7].ToString());
                                                                    }
                                                                    else
                                                                    {
                                                                        guest = null;
                                                                        //异常写入日志
                                                                        //Console.WriteLine("执行" + sql + "根据用户ID查询用户信息失败");
                                                                        MessageBox.Show("执行" + sql + "根据用户ID查询用户信息失败");
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    //异常写入日志
                                                                    //Console.WriteLine("执行" + sql + "根据用户ID查询用户信息失败");
                                                                    MessageBox.Show("执行" + sql + "根据用户ID查询用户信息失败");
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                MessageBox.Show(ex.ToString());
                                                            }
                                                            return guest;
                                                        }
                                                        /// 
                                                        /// 通过客人名获取客人信息
                                                        /// 
                                                        /// 
                                                        /// 
                                                        public static Guest GetGuestByGuestName(string guestName)
                                                        {
                                                            Guest guest = new Guest();
                                                            string sql = "select * from guest where GuestName='" + guestName + "';";
                                                            DataTable dt = new DataTable();
                                                            try
                                                            {
                                                                //执行添加语句
                                                                bool returnValue = MySQLHelper.ExcuteQuerySql(sql, ref dt);
                                                                if (returnValue == true)
                                                                {
                                                                    if (dt.Rows.Count > 0)
                                                                    {
                                                                        //获取客人属性
                                                                        guest.GuestID = Convert.ToInt32(dt.Rows[0][0]); ;
                                                                        guest.GuestName = dt.Rows[0][1].ToString();
                                                                        guest.GuestTypeID = Convert.ToInt32(dt.Rows[0][2]);
                                                                        guest.GuestSex = dt.Rows[0][3].ToString();
                                                                        guest.GuestMobile = dt.Rows[0][4].ToString();
                                                                        guest.GuestRoomID = Convert.ToInt32(dt.Rows[0][5]);
                                                                        guest.GuestArriveTime = Convert.ToDateTime(dt.Rows[0][6].ToString());
                                                                        guest.GuestLeaveTime = Convert.ToDateTime(dt.Rows[0][7].ToString());
                                                                    }
                                                                    else
                                                                    {
                                                                        guest = null;
                                                                        //异常写入日志
                                                                        Console.WriteLine("执行" + sql + "根据用户ID查询用户信息失败");
                                                                        MessageBox.Show("执行" + sql + "根据用户ID查询用户信息失败");
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    //异常写入日志
                                                                    Console.WriteLine("执行" + sql + "添加用户信息失败");
                                                                    MessageBox.Show("执行" + sql + "根据用户ID查询用户信息失败");
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                //异常写入日志
                                                                Console.WriteLine(ex.ToString());
                                                                throw ex;
                                                            }
                                                            return guest;
                                                        }
                                                    }
                                                }
                                                
                                                6、客人类型数据访问

                                                客人类型数据访问(GuestTypeService.cs)实现对客人类型信息的数据库操作。

                                                此类中包含方法如下:

                                                GetAllGuestType():查询所有客人类型。

                                                GetGuestTypeByTypeId(int typeId):根据客人类型ID查询客人信息。

                                                GetGuestTypeListBySql(string safeSql):根据Sql语句查询客人类型集合。

                                                在这里插入代码片
                                                

                                                五、实现业务逻辑层

                                                业务逻辑层负责数据的传递,概括实现业务逻辑层的步骤为:

                                                (1)在业务逻辑类中引用数据访问层、实体层的命名空间。

                                                (2)实例化实体对象。

                                                (3)调用数据访问功能。

                                                (4)实现业务逻辑。

                                                1、用户管理业务逻辑类

                                                用户管理业务逻辑类(HotelUserManage.cs)用来处理用户管理的业务逻辑,在用户管理数据访问层(HotelUserService.cs)类和用户管理界面之间进行数据传递。

                                                用户管理业务逻辑类(HotelUserManage.cs)代码:

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using HotelManageLib;
                                                using System.Data;
                                                namespace HotelManage
                                                {
                                                    class HotelUserManage
                                                    {
                                                        //新增用户
                                                        public static void AddHotelUser(HotelUser hotelUser)
                                                        {
                                                            HotelUserService.AddHotelUser(hotelUser);
                                                        }
                                                        //删除用户
                                                        public static void DeleteHotelUser(HotelUser hotelUser)
                                                        {
                                                            HotelUserService.DeleteHotelUser(hotelUser);
                                                        }
                                                        //根据用户ID删除用户
                                                        public static void DeleteHotelUserById(int userId)
                                                        {
                                                            HotelUserService.DeleteHotelUserByUserId(userId);
                                                        }
                                                        //修改用户
                                                        public static DataTable ModifyHotelUser(HotelUser hotelUser)
                                                        {
                                                            DataTable dt = new DataTable();
                                                            dt = HotelUserService.ModifyHotelUser(hotelUser);
                                                            return dt;
                                                        }
                                                        //得到用户列表
                                                        public static DataTable GetAllHotelUsers()
                                                        {
                                                            return HotelUserService.GetAllHotelUsers();
                                                        }
                                                        //根据用户ID得到用户列表
                                                        public static HotelUser GetHotelUserByUserID(int userId)
                                                        {
                                                            return HotelUserService.GetHotelUserByUserId(userId);
                                                        }
                                                        //根据用户名得到用户列表
                                                        public static HotelUser GetHotelUser(string userName)
                                                        {
                                                            return HotelUserService.GetHotelUserByUserName(userName);
                                                        }
                                                    }
                                                }
                                                
                                                2、客房信息管理业务逻辑类

                                                客房信息管理业务逻辑类(RoomManage.cs)负责在客房信息管理数据访问和客房信息界面之间进行数据访问,通过调用RoomService.cs中的方法进行业务处理。同样具有增删改查功能。

                                                待写
                                                
                                                3、客房类型业务逻辑类

                                                客房类型业务逻辑类RoomTypeManage.cs负责在客房类型数据访问层和客房类型界面之间进行数据访问,通过调用RoomTypeService.cs中的方法进行业务处理。同样具有增删改查功能。

                                                在这里插入代码片
                                                
                                                4、客房管理业务逻辑类

                                                客人信息管理业务逻辑类GuestManage.cs负责在客人信息数据访问层和客人信息界面之间进行数据访问,通过调用GuestService.cs中的方法进行业务处理。同样具有增删改查功能。

                                                using System;
                                                using System.Collections.Generic;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using HotelManageLib;
                                                using System.Data;
                                                namespace HotelManage
                                                {
                                                    class GuestManage
                                                    {
                                                        //新增客人
                                                        public static void AddGuest(Guest guest)
                                                        {
                                                            GuestService.AddGuest(guest);
                                                        }
                                                        //删除客人
                                                        public static void DeleteGuest(Guest guest)
                                                        {
                                                            GuestService.DeleteGuest(guest);
                                                        }
                                                        //根据客人ID删除客人
                                                        public static void DeleteGuestById(int guestId)
                                                        {
                                                            GuestService.DeleteGuestByGuestId(guestId);
                                                        }
                                                        //修改客人
                                                        public static DataTable ModifyGuest(Guest guest)
                                                        {
                                                            DataTable dt = new DataTable();
                                                            dt = GuestService.ModifyGuest(guest);
                                                            return dt;
                                                        }
                                                        //得到客人列表
                                                        public static DataTable GetAllGuests()
                                                        {
                                                            return GuestService.GetAllGuests();
                                                        }
                                                        //根据客人ID得到客人列表
                                                        public static Guest GetGuestByGuestID(int guestId)
                                                        {
                                                            return GuestService.GetGuestByGuestId(guestId);
                                                        }
                                                        //根据客人名得到客人列表
                                                        public static Guest GetGuest(string guestName)
                                                        {
                                                            return GuestService.GetGuestByGuestName(guestName);
                                                        }
                                                    }
                                                }
                                                
                                                5、客人类型业务逻辑类

                                                客人类型管理业务逻辑类GuestTypeManage.cs负责在客人类型数据访问和客人类型界面之间进行数据访问,通过调用GuestTypeService.cs中的方法进行业务处理。功能有查询等。

                                                在这里插入代码片
                                                

                                                六、实现表示层业务逻辑

                                                1、用户登录
                                                using System;
                                                using System.Collections.Generic;
                                                using System.ComponentModel;
                                                using System.Data;
                                                using System.Drawing;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using System.Windows.Forms;
                                                using HotelManageLib;
                                                namespace HotelManage
                                                {
                                                    public partial class FrmLogin : Form
                                                    {
                                                        public FrmLogin()
                                                        {
                                                            InitializeComponent();
                                                        }
                                                        MainForm mainFrm = new MainForm();
                                                        private void btnLogin_Click(object sender, EventArgs e)
                                                        {
                                                            //输入合法性判断
                                                            if (Volidity())//合法性通过
                                                            {
                                                                //定义查询语句
                                                                string sql = String.Format("select * from user where UserName='{0}' and Password='{1}'",
                                                                this.txtUserName.Text.Trim(), this.txtPassword.Text.Trim());
                                                                MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);
                                                                DataTable dt = new DataTable();
                                                                bool queryFlag = MySQLHelper.ExcuteQuerySql(sql, ref dt);
                                                                if (queryFlag == false)
                                                                {
                                                                    MessageBox.Show("登录失败,没有找到该用户");
                                                                }
                                                                if (dt.Rows.Count > 0)
                                                                {
                                                                    mainFrm.Show();
                                                                    this.Hide();
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("用户名或密码错误,请重新输入");
                                                                }
                                                            }
                                                        }
                                                        private void btnCancel_Click(object sender, EventArgs e)
                                                        {
                                                            this.Close();
                                                        }
                                                        /// 
                                                        /// 验证合法性
                                                        /// 
                                                        private bool Volidity()
                                                        {
                                                            if (this.txtUserName.Text != string.Empty && this.txtPassword.Text != string.Empty)
                                                            {
                                                                return true;
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("用户名或密码不能为空");
                                                            }
                                                            return false;
                                                        }
                                                    }
                                                }
                                                
                                                2、主界面
                                                using System;
                                                using System.Collections.Generic;
                                                using System.ComponentModel;
                                                using System.Data;
                                                using System.Drawing;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using System.Windows.Forms;
                                                namespace HotelManage
                                                {
                                                    public partial class MainForm : Form
                                                    {
                                                        public  DialogResult result;//声明对话框返回对象
                                                        public MainForm()
                                                        {
                                                            InitializeComponent();
                                                        }
                                                        private void Form1_Load(object sender, EventArgs e)
                                                        {
                                                            //FrmLogin frmLogin = new FrmLogin();
                                                            //frmLogin.Show();
                                                        }
                                                        private void tsmExit_Click(object sender, EventArgs e)
                                                        {
                                                            if (MessageBox.Show("确认退出系统?", "提示信息", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)
                                                            {
                                                                System.Environment.Exit(0);
                                                            }
                                                        }
                                                        /// 
                                                        /// 查询子窗体是否存在
                                                        /// 
                                                        /// 
                                                        /// 
                                                        public bool CheckChildFrm(string childfrmname)
                                                        {
                                                            foreach (Form childFrm in this.MdiChildren)//遍历子窗体
                                                            {
                                                                if (childFrm.Name == childfrmname)//如果子窗体存在
                                                                {
                                                                    if (childFrm.WindowState == FormWindowState.Minimized)
                                                                    {
                                                                        childFrm.WindowState = FormWindowState.Normal;
                                                                    }
                                                                    childFrm.Activate();//激活该窗体
                                                                    return true;        //存在返回true
                                                                }
                                                            }
                                                            return false;//不存在返回false
                                                        }
                                                        private void tsbRoomInfo_Click(object sender, EventArgs e)
                                                        {
                                                            if (this.CheckChildFrm("FrmRoomInfo") == true)
                                                            {
                                                                return;
                                                            }
                                                            FrmRoomInfo frmRoomInfo = new FrmRoomInfo();
                                                            frmRoomInfo.MdiParent = this;//设置当前窗体的子窗体
                                                            frmRoomInfo.Show();
                                                        }
                                                        private void tsbRoomType_Click(object sender, EventArgs e)
                                                        {
                                                            if (this.CheckChildFrm("FrmRoomType") == true)
                                                            {
                                                                return;
                                                            }
                                                            FrmRoomType frmRoomType = new FrmRoomType();
                                                            frmRoomType.MdiParent = this;//设置当前窗体的子窗体
                                                            frmRoomType.Show();
                                                        }
                                                        private void tsbGuestInfo_Click(object sender, EventArgs e)
                                                        {
                                                            if (this.CheckChildFrm("FrmGuestInfo") == true)
                                                            {
                                                                return;
                                                            }
                                                            FrmGuestInfo frmGuestInfo = new FrmGuestInfo();
                                                            frmGuestInfo.MdiParent = this;//设置当前窗体的子窗体
                                                            frmGuestInfo.Show();
                                                        }
                                                        private void tsbUserManage_Click(object sender, EventArgs e)
                                                        {
                                                            if (this.CheckChildFrm("FrmUserManage") == true)
                                                            {
                                                                return;
                                                            }
                                                            FrmUserManage frmUserManage = new FrmUserManage();
                                                            frmUserManage.MdiParent = this;//设置当前窗体的子窗体
                                                            frmUserManage.Show();
                                                        }
                                                    }
                                                }
                                                
                                                3、客房类型设置
                                                4、可房信息设置
                                                5、用户管理
                                                using System;
                                                using System.Collections.Generic;
                                                using System.ComponentModel;
                                                using System.Data;
                                                using System.Drawing;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using System.Windows.Forms;
                                                using HotelManageLib;
                                                namespace HotelManage
                                                {
                                                    public partial class FrmUserManage : Form
                                                    {
                                                        public FrmUserManage()
                                                        {
                                                            InitializeComponent();
                                                        }
                                                        private HotelUser hotelUser;
                                                        private int userId;
                                                        private void tsbExit_Click(object sender, EventArgs e)
                                                        {
                                                            this.Close();
                                                        }
                                                        private void tsbCancel_Click(object sender, EventArgs e)
                                                        {
                                                            this.Close();
                                                        }
                                                        private void tsbAdd_Click(object sender, EventArgs e)
                                                        {
                                                            lbPassword.Visible = true;
                                                            lbUserName.Visible = true;
                                                            txtUserName.Visible = true;
                                                            txtPassword.Visible = true;
                                                            lbUserName.Text = "用户名";
                                                            if (txtUserName.Text != string.Empty && txtPassword.Text != string.Empty)
                                                            {
                                                                HotelUser hotelUser = new HotelUser();
                                                                hotelUser.UserName = txtUserName.Text;
                                                                hotelUser.Password = txtPassword.Text;
                                                                HotelUserManage.AddHotelUser(hotelUser);
                                                                lbPassword.Visible = false;
                                                                lbUserName.Visible = false;
                                                                txtUserName.Visible = false;
                                                                txtPassword.Visible = false;
                                                                MessageBox.Show("新增用户成功!");
                                                                DataTable dt = new DataTable();
                                                                dt = HotelUserManage.GetAllHotelUsers();//获取更新所有用户信息
                                                                dataGridView1.DataSource = dt;
                                                            }
                                                            else
                                                            {
                                                                return;
                                                            }
                                                            txtUserName.Text = string.Empty;
                                                            txtPassword.Text = string.Empty;
                                                        }
                                                        private void tsbDelete_Click(object sender, EventArgs e)
                                                        {
                                                            lbUserName.Text = "用户ID";
                                                            lbUserName.Visible = true;
                                                            txtUserName.Visible = true;
                                                            lbPassword.Visible = false;
                                                            txtPassword.Visible = false;
                                                            if (txtUserName.Text == string.Empty)
                                                            {
                                                                MessageBox.Show("请输入要删除的用户ID");
                                                            }
                                                            else
                                                            {
                                                                //删除用户信息  通过ID
                                                                HotelUserManage.DeleteHotelUserById(Convert.ToInt32(txtUserName.Text));
                                                                //更新数据显示
                                                                DataTable dt = new DataTable();
                                                                dt = HotelUserManage.GetAllHotelUsers();//获取更新所有用户信息
                                                                dataGridView1.DataSource = dt;
                                                            }
                                                        }
                                                        private void tsbUpdate_Click(object sender, EventArgs e)
                                                        {
                                                            //更新用户名和用户密码
                                                            lbPassword.Visible = true;
                                                            lbUserName.Visible = true;
                                                            txtUserName.Visible = true;
                                                            txtPassword.Visible = true;
                                                            lbUserName.Text = "用户名";
                                                            //查询所有用户信息,将用户ID绑定到combox中
                                                            DataTable dt = new DataTable();
                                                            dt = HotelUserManage.GetAllHotelUsers();
                                                            for (int i = 0; i < dt.Rows.Count; i++)
                                                            {
                                                                cmbUserId.Items.Add((dt.Rows[i][0].ToString()));
                                                            }
                                                            cmbUserId.Text = dt.Rows[0][0].ToString();
                                                            //选择用户ID
                                                            MessageBox.Show("请选择要修改的用户ID");
                                                        }
                                                        private void tsbSave_Click(object sender, EventArgs e)
                                                        {
                                                            //查询用户信息
                                                            DataTable dt = new DataTable();
                                                            dt = HotelUserManage.GetAllHotelUsers();
                                                            if (dt.Rows.Count > 0)
                                                            {
                                                                dataGridView1.DataSource = dt; 
                                                                //保存信息
                                                                MessageBox.Show("信息保存成功");
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("用户信息为空或者查询所有用户信息失败!");
                                                            }
                                                        }
                                                        private void cmbUserId_SelectedIndexChanged(object sender, EventArgs e)
                                                        {
                                                            //查询用户ID对应信息
                                                            if (cmbUserId.Text != string.Empty)
                                                            {
                                                                HotelUser hotelUserTmp = new HotelUser();
                                                                hotelUserTmp = HotelUserManage.GetHotelUserByUserID(Convert.ToInt32(cmbUserId.Text));
                                                                if (hotelUserTmp != null)
                                                                {
                                                                    txtUserName.Text = hotelUserTmp.UserName;
                                                                    txtPassword.Text = hotelUserTmp.Password;
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("根据当前ID查询的用户信息为空");
                                                                }
                                                            }
                                                        }
                                                        private void tsbUpdate_DoubleClick(object sender, EventArgs e)
                                                        {
                                                            
                                                        }
                                                        private void lbPassword_Click(object sender, EventArgs e)//密码label单击为保存修改信息
                                                        {
                                                            //根据用户ID查询用户信息
                                                            HotelUser hotelUser = new HotelUser();
                                                            hotelUser = HotelUserManage.GetHotelUserByUserID(Convert.ToInt32(cmbUserId.Text));
                                                            if (hotelUser != null)
                                                            {
                                                                hotelUser.UserName = txtUserName.Text;
                                                                hotelUser.Password = txtPassword.Text;
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("根据用户ID查询的用户信息为空");
                                                            }
                                                            DataTable dt = new DataTable();
                                                            dt = HotelUserManage.ModifyHotelUser(hotelUser);
                                                            if (dt.Rows.Count > 0)
                                                            {
                                                                MessageBox.Show("更新成功", "提示信息", MessageBoxButtons.OK);
                                                                dataGridView1.DataSource = dt;
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("更新失败", "提示信息", MessageBoxButtons.OK);
                                                            }
                                                        }
                                                    }
                                                }
                                                
                                                6、客人管理
                                                using System;
                                                using System.Collections.Generic;
                                                using System.ComponentModel;
                                                using System.Data;
                                                using System.Drawing;
                                                using System.Linq;
                                                using System.Text;
                                                using System.Threading.Tasks;
                                                using System.Windows.Forms;
                                                using HotelManageLib;
                                                using System.Text.RegularExpressions;
                                                namespace HotelManage
                                                {
                                                    public partial class FrmGuestInfo : Form
                                                    {
                                                        public FrmGuestInfo()
                                                        {
                                                            InitializeComponent();
                                                        }
                                                        private void tsbCancel_Click(object sender, EventArgs e)
                                                        {
                                                            this.Close();
                                                        }
                                                        private void tsbExit_Click(object sender, EventArgs e)
                                                        {
                                                            this.Close();
                                                        }
                                                        private void btnQuery_Click(object sender, EventArgs e)
                                                        {
                                                            //根据客人姓名查询客人信息
                                                            Guest guest = new Guest();
                                                            DataTable dt = new DataTable();
                                                            if (txtGuestName.Text != string.Empty)
                                                            {
                                                                guest = GuestManage.GetGuest(txtGuestName.Text);
                                                                if (guest != null)
                                                                {
                                                                    //把查询的客人信息装在DataGridView中
                                                                    dt.Columns.Add("客人姓名", typeof(string));
                                                                    dt.Columns.Add("客人类别", typeof(int));
                                                                    dt.Columns.Add("性别", typeof(string));
                                                                    dt.Columns.Add("电话", typeof(string));
                                                                    dt.Columns.Add("房间编号", typeof(int));
                                                                    dt.Columns.Add("到达时间", typeof(DateTime));
                                                                    dt.Columns.Add("离开时间", typeof(DateTime));
                                                                    DataRow dr = dt.NewRow();
                                                                    dr["客人姓名"] = guest.GuestName;
                                                                    dr["客人类别"] = guest.GuestTypeID;
                                                                    dr["性别"] = guest.GuestSex;
                                                                    dr["电话"] = guest.GuestMobile;
                                                                    dr["房间编号"] = guest.GuestRoomID;
                                                                    dr["到达时间"] = guest.GuestArriveTime;
                                                                    dr["离开时间"] = guest.GuestLeaveTime;
                                                                    dt.Rows.Add(dr);
                                                                    dataGridView1.DataSource = dt;
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("没有查询到姓名为:" + txtGuestName.Text + "的客人信息");
                                                                    dataGridView1.DataSource = null;//清空dataGridView1
                                                                }
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("输入的客人姓名为空");
                                                                dataGridView1.DataSource = null;//清空dataGridView1
                                                            }
                                                        }
                                                        private void tsbSave_Click(object sender, EventArgs e)
                                                        {
                                                            //查询所有客人信息
                                                            DataTable dt = new DataTable();
                                                            dt = GuestManage.GetAllGuests();
                                                            if (dt.Rows.Count > 0)
                                                            {
                                                                dataGridView1.DataSource = dt;
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("没有客人信息可以保存");
                                                            }
                                                        }
                                                        private void tsbAdd_Click(object sender, EventArgs e)
                                                        {
                                                            pnlGuestInfo.Visible = true;
                                                            Guest guest = new Guest();
                                                            if (Validity(txtName.Text) && Validity(cmbGuestType.Text) && Validity(txtGuestSex.Text) && Validity(txtGuestPhone.Text)
                                                                && Validity(txtGuestRoomId.Text) && Validity(txtArriveTime.Text) && Validity(txtLeaveTime.Text))
                                                            {
                                                                //将所有客人信息赋给对象,使用客人对象插入数据
                                                                guest.GuestName = txtName.Text;
                                                                if (IsNumeric(cmbGuestType.Text) == true)
                                                                {
                                                                    guest.GuestTypeID = Convert.ToInt32(cmbGuestType.Text);
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("客人类型不是数字,请重新输入");
                                                                    cmbGuestType.Text = string.Empty;
                                                                }
                                                                
                                                                guest.GuestSex = txtGuestSex.Text;
                                                                guest.GuestMobile = txtGuestPhone.Text;
                                                                if (IsNumeric(txtGuestRoomId.Text) == true)
                                                                {
                                                                    guest.GuestRoomID = Convert.ToInt32(txtGuestRoomId.Text);
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("房间类型不是数字,请重新输入");
                                                                    txtGuestRoomId.Text = string.Empty;
                                                                }
                                                                
                                                                guest.GuestArriveTime = Convert.ToDateTime(txtArriveTime.Text);
                                                                guest.GuestLeaveTime = Convert.ToDateTime(txtLeaveTime.Text);
                                                                GuestManage.AddGuest(guest);//插入客人信息
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("请输入全部客人信息");
                                                            }
                                                        }
                                                        //判断输入字符串为空的合法性验证
                                                        public bool Validity(string str)
                                                        {
                                                            if (str != string.Empty)
                                                            {
                                                                return true;
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("字符串" + str + "为空");
                                                                return false;
                                                            }
                                                        }
                                                        //判断字符串是否是数字
                                                        public bool IsNumeric(string str)
                                                        {
                                                            bool isMatch = Regex.IsMatch(str, @"^\d+$");//正则表达式匹配
                                                            return isMatch;
                                                        }
                                                        private void tsbDelete_Click(object sender, EventArgs e)
                                                        {
                                                            
                                                            //根据客人姓名
                                                            if (txtGuestName.Text != string.Empty)
                                                            {
                                                                //删除用户信息  通过ID
                                                                Guest guest = new Guest();
                                                                //根据用户名查询用户信息
                                                                guest = GuestManage.GetGuest(txtGuestName.Text);
                                                                if (guest != null)
                                                                {
                                                                    GuestManage.DeleteGuestById(guest.GuestID);
                                                                    DataTable dtTemp = new DataTable();
                                                                    dtTemp = GuestManage.GetAllGuests();//刷新表格
                                                                    dataGridView1.DataSource = dtTemp;
                                                                }
                                                                else
                                                                {
                                                                    MessageBox.Show("此客人名的客人信息不存在");
                                                                }
                                                                //更新数据显示
                                                                DataTable dt = new DataTable();
                                                                dt = GuestManage.GetAllGuests();//获取更新所有用户信息
                                                                dataGridView1.DataSource = dt;
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("请输入要删除的客人姓名");
                                                            }
                                                        }
                                                    }
                                                }
                                                

                                                总结

                                                本文实现一个酒店管理系统,也是简化版的系统。重点在于使用三层架构、面向对象的思想进行软件开发设计的全流程设计,实现起来具体难度不大,工作量也不小(2-3周)。

                                                除了设计过程有难度之外,数据库的增、删、改、查操作也是容易出问题的,在这个项目中由于使用了外键,所以增加了出错的概率。在这个项目中,我对于数据库的操作和外键的设置和使用有了更深的体会。另外对于UI的设计也是一门学问,这里虽然没有认真去美化,但实际上很有必要做到合理、美观的UI。

                                                由于时间关系,在完成本项目的整个设计后,发现总共有5条从表示层到业务逻辑层到数据访问层的对象操作流要实现,通过UI界面也可以看到,5个界面都是不同对象的增删改查。

                                                所以我主要实现了“用户管理”、“客人信息管理”这两条业务线,全部功能实现贯通。其余的三条业务线“客人类型管理”、“客房信息管理”、“客房类型管理”就没有去实现了,基本是前两条业务线的复制粘贴。有感兴趣的小伙伴也可以自行去实现。

                                                总的来说,我认为我完成了自主设计的酒店管理系统,希望以后设计软件系统把这种规范化的思想融入进去。设计有趣,实现枯燥,二者都需要脚踏实地去做。