0


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

文章目录


前言

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

实现步骤

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

一、系统分析

用途:帮助酒店管理的工具。
功能1:添加、删除、修改住房信息。
功能2:添加、删除、修改客人信息。

1、需求分析

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

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

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

(1)用户管理

可登录本系统的人员管理。信息必须在用户数据中才可以登录。
功能:
用户信息的查询、增加、删除、修改。

(2)客人信息管理

功能:
客人住房情况管理(客人姓名、入住房间、入住时间、离开时间)。
根据客人名称对客房预定信息进行查询。

(3)客房信息管理

功能:
客房类型管理(客房类型分中、高、低)。
客房使用情况(空闲、入住、维修、自用)。
根据客房类型对房间进行统一定价,并设置某类客房是否可以加床以及加床的价格。
每一个房间的属性,如房号、类型、价格、床位数、对该客房的描述。
根据客房信息名称、客房房间号对信息进行查找。

(4)客房预定信息管理

客房属性:房号、类型、床位数、价格、使用情况描述。
客房使用状态:空闲、入住、维修、自用。
根据客房的房号进行信息查找。

2、系统设计

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

该系统较为简单,没有使用接口和反射技术。三个模块之间使用对象或者数据集进行通信。
每一层使用程序集实现,三层架构的程序不可跨层调用。

三层系统架构图:
在这里插入图片描述

3、数据库设计

实体关系概念模型设计(E-R图)
在这里插入图片描述
数据表设计
在这里插入图片描述

客人信息表(Guest):

在这里插入图片描述

客人类型表(GuestCategory):

在这里插入图片描述

客房信息表(Room)

在这里插入图片描述

客房类型表(RoomType)

在这里插入图片描述

数据表的E-R模型视图

在这里插入图片描述

二、实体类设计

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

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

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

1、Guest实体类
2、GuestCategory实体类
3、Room实体类
4、RoomType实体类
5、HotelUser实体类

1、HotelUser实体类

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

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

HotelUser实体类的类图:

在这里插入图片描述

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace HotelManageLib
{[Serializable]publicclassHotelUser{privatestaticint userID;//用户IDprivatestatic string userName = String.Empty;//用户名privatestatic string password = String.Empty;//用户密码/// <summary>/// 用户ID/// </summary>publicint UserID
        {
            get {return userID;}
            set { userID = value;}}/// <summary>/// 用户名/// </summary>public string UserName
        {
            get {return userName;}
            set { userName = value;}}/// <summary>/// 用户密码/// </summary>public string Password
        {
            get {return password;}
            set { password = value;}}publicHotelUser(){}}}

2、Guest实体类

在这里插入图片描述

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

3、GuestType实体类

在这里插入图片描述

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace HotelManageLib
{[Serializable]publicclassGuestType{/// <summary>/// 客人类型ID/// </summary>privatestaticint typeId;//客人类型IDpublicint TypeID
        {
            get {return typeId;}
            set { typeId = value;}}/// <summary>/// 类型名称/// </summary>privatestatic string typeName;//类型名称public string TypeName
        {
            get {return typeName;}
            set { typeName = value;}}publicGuestType(){}}}

4、Room实体类

在这里插入图片描述

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace HotelManageLib
{[Serializable]publicclassRoom{protectedstaticint roomId;//房间号Idprotectedstatic string number = String.Empty;//房间号protectedstaticint typeId;//房间类型IDprotectedstaticint bedNumber;//床位数protectedstatic string description = String.Empty;//房间描述protectedstatic string state = String.Empty;//房间状态protectedstaticint guestNumber;//入住客人数publicRoom(){}/// <summary>/// 房间号ID/// </summary>publicint RoomID
        {
            get {return roomId;}
            set { roomId = value;}}/// <summary>/// 房间号/// </summary>public string Number
        {
            get {return number;}
            set { number = value;}}/// <summary>/// 房间类型ID/// </summary>publicint TypeID
        {
            get {return typeId;}
            set { typeId = value;}}/// <summary>/// 床位数/// </summary>publicint BedNumber
        {
            get {return bedNumber;}
            set { bedNumber = value;}}/// <summary>/// 房间描述/// </summary>public string Description
        {
            get {return description;}
            set { description = value;}}/// <summary>/// 房间状态/// </summary>public string State
        {
            get {return state;}
            set { state = value;}}/// <summary>/// 入住客人数/// </summary>publicint GuestNumber
        {
            get {return guestNumber;}
            set { guestNumber = value;}}}}

5、RoomType实体类

在这里插入图片描述

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

三、界面设计

1、用户登录界面

在这里插入图片描述

2、主界面

在这里插入图片描述

3、客人信息界面

在这里插入图片描述

4、客房信息界面

在这里插入图片描述

5、客房类型设置界面

在这里插入图片描述

6、用户管理界面

在这里插入图片描述

四、实现数据访问层

1、数据库通用操作类

通信模块:

publicstaticclassDBModule{publicstatic string ServerIP ="***.***.***.***";publicstatic string ServerPort ="33**";publicstatic string ServerUser ="#####";publicstatic string ServerPassword ="******";publicstatic 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;publicclassMySQLHelper{private MySqlConnection myConnection;private string mErrorString;//构造函数publicMySQLHelper(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 =newMySqlConnection(strConnectionString);}//测试连接publicboolConnectionTest(){bool result =false;try{if(myConnection.State == System.Data.ConnectionState.Closed){
                myConnection.Close();
                result =true;}}catch(MySqlException ex){
            mErrorString = ex.ToString();}return result;}/// <summary>/// 执行查询语句,用DataTable返回结果,调用前要传入DataTable的实例化对象作为参数/// </summary>/// <param name="strQuery">查询命令</param>/// <param name="dt">返回数据表</param>/// <returns></returns>publicboolExcuteQuerySql(string strQuery, ref DataTable dt){if(dt == null){
            mErrorString ="传入的DataTable为null";returnfalse;}bool result =false;try{
            MySqlCommand myCommand =newMySqlCommand(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());returnfalse;}
        finally
        {
            myConnection.Close();}return result;}/// <summary>/// 执行带参数的查询语句,使用前传入参数、DataTable实例化对象/// </summary>/// <param name="strQuery">查询语句</param>/// <param name="param"></param>/// <param name="dt"></param>/// <returns></returns>publicboolExcuteQuerySql(string strQuery, MySqlParameter[] param, ref DataTable dt){if(dt == null){
            mErrorString ="传入的DataTable为null.";returnfalse;}bool result =false;try{
            MySqlCommand myCommand =newMySqlCommand(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;returnfalse;}
        finally
        {
            myConnection.Close();}return result;}//执行非查询语句publicintExcuteSql(string SqlCmdText){int row =-1;try{
            MySqlCommand myCommand =newMySqlCommand(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;}//执行非查询语句publicintExcuteSql(string[] SqlCmdText){try{if(myConnection.State == ConnectionState.Closed){
                myConnection.Open();}for(int i =0; i < SqlCmdText.Length; i++){
                MySqlCommand myCommand =newMySqlCommand(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;}//执行带参数的非查询语句publicintExcuteSql(string SqlCmdText, MySqlParameter[] param){int row =-1;try{
            MySqlCommand myCommand =newMySqlCommand(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]publicclassHotelUserService{//建立MySQL连接
        MySQLHelper sqlHelper =newMySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);//公用数据表,用来进行操作后刷新数据static DataTable dtAllUsers =newDataTable();//获取全部用户信息publicstaticint aaa =1;/// <summary>/// 添加用户/// </summary>/// <param name="hotelUser"></param>/// <returns></returns>publicstatic  HotelUser AddHotelUser(HotelUser hotelUser){
            string sql ="insert into user (UserName, Password) values ('"+ hotelUser.UserName +"', '"+ hotelUser.Password +"');";//定义插入sql语句int newID =0;

            DataTable dt =newDataTable();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;}returnGetHotelUserByUserId(newID);//返回查询对象}/// <summary>/// 删除用户/// </summary>/// <param name="hotelUser"></param>publicstaticvoidDeleteHotelUser(HotelUser hotelUser){
            HotelUser hotelUserTmp =newHotelUser();//根据用户名查询对应的用户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("要删除的用户名为空,不能删除该用户信息");}}/// <summary>/// 通过用户ID删除用户/// </summary>/// <param name="userId"></param>publicstaticvoidDeleteHotelUserByUserId(int userId){//先查询是否有此ID的用户
            HotelUser hotelUser =newHotelUser();

            hotelUser =GetHotelUserByUserId(userId);if(hotelUser != null){
                string sql ="delete from user where UserID = "+ userId +";";
                DataTable dt =newDataTable();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()+"的用户不存在,不能删除");}}/// <summary>/// 修改用户信息/// </summary>/// <param name="hotelUser"></param>publicstatic DataTable ModifyHotelUser(HotelUser hotelUser){
            string sql ="update user set UserName='"+ hotelUser.UserName +"', Password='"+ hotelUser.Password +"' where UserId="+ Convert.ToInt32(hotelUser.UserID)+";";
            DataTable dt =newDataTable();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;}/// <summary>/// 获取所有用户信息/// </summary>/// <returns></returns>publicstatic 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;}/// <summary>/// 通过用户ID获取用户信息/// </summary>/// <param name="userId"></param>/// <returns></returns>publicstatic HotelUser GetHotelUserByUserId(int userId){
            HotelUser hotelUser =newHotelUser();
            string sql ="select * from user where UserID = "+ userId +";";
            DataTable dt =newDataTable();try{//执行查询语句bool returnValue = MySQLHelper.ExcuteQuerySql(sql, ref dt);if(returnValue ==true){//添加后更新DataGridViewif(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;}/// <summary>/// 通过用户名获取用户信息/// </summary>/// <param name="userName"></param>/// <returns></returns>publicstatic HotelUser GetHotelUserByUserName(string userName){
            HotelUser hotelUser =newHotelUser();
            string sql ="select * from user where UserName='"+ userName +"';";
            DataTable dt =newDataTable();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]publicclassGuestService{//建立MySQL连接
        MySQLHelper sqlHelper =newMySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);//公用数据表,用来进行操作后刷新数据static DataTable dtAllGuests =newDataTable();//获取全部用户信息/// <summary>/// 添加用户/// </summary>/// <param name="guest"></param>/// <returns></returns>publicstatic 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 =newDataTable();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());}returnGetGuestByGuestId(newID);//返回查询对象}/// <summary>/// 删除客人/// </summary>/// <param name="guest"></param>publicstaticvoidDeleteGuest(Guest guest){
            Guest guestTmp =newGuest();//根据用户名查询对应的用户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("要删除的客人名为空,不能删除该客人信息");}}/// <summary>/// 通过客人ID删除客人/// </summary>/// <param name="userId"></param>publicstaticvoidDeleteGuestByGuestId(int guestId){//先查询是否有此ID的用户
            Guest guest =newGuest();

            guest =GetGuestByGuestId(guestId);if(guest != null){
                string sql ="delete from guest where GuestID = "+ guestId +";";
                DataTable dt =newDataTable();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()+"的客人不存在,不能删除");}}/// <summary>/// 修改客人信息/// </summary>/// <param name="guest"></param>publicstatic 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 =newDataTable();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;}/// <summary>/// 获取所有客人信息/// </summary>/// <returns></returns>publicstatic 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;}/// <summary>/// 通过客人ID获取客人信息/// </summary>/// <param name="guestId"></param>/// <returns></returns>publicstatic Guest GetGuestByGuestId(int guestId){
            Guest guest =newGuest();
            string sql ="select * from guest where GuestID = "+ guestId +";";
            DataTable dt =newDataTable();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;}/// <summary>/// 通过客人名获取客人信息/// </summary>/// <param name="guestName"></param>/// <returns></returns>publicstatic Guest GetGuestByGuestName(string guestName){
            Guest guest =newGuest();
            string sql ="select * from guest where GuestName='"+ guestName +"';";
            DataTable dt =newDataTable();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
{classHotelUserManage{//新增用户publicstaticvoidAddHotelUser(HotelUser hotelUser){
            HotelUserService.AddHotelUser(hotelUser);}//删除用户publicstaticvoidDeleteHotelUser(HotelUser hotelUser){
            HotelUserService.DeleteHotelUser(hotelUser);}//根据用户ID删除用户publicstaticvoidDeleteHotelUserById(int userId){
            HotelUserService.DeleteHotelUserByUserId(userId);}//修改用户publicstatic DataTable ModifyHotelUser(HotelUser hotelUser){
            DataTable dt =newDataTable();
            dt = HotelUserService.ModifyHotelUser(hotelUser);return dt;}//得到用户列表publicstatic DataTable GetAllHotelUsers(){return HotelUserService.GetAllHotelUsers();}//根据用户ID得到用户列表publicstatic HotelUser GetHotelUserByUserID(int userId){return HotelUserService.GetHotelUserByUserId(userId);}//根据用户名得到用户列表publicstatic 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
{classGuestManage{//新增客人publicstaticvoidAddGuest(Guest guest){
            GuestService.AddGuest(guest);}//删除客人publicstaticvoidDeleteGuest(Guest guest){
            GuestService.DeleteGuest(guest);}//根据客人ID删除客人publicstaticvoidDeleteGuestById(int guestId){
            GuestService.DeleteGuestByGuestId(guestId);}//修改客人publicstatic DataTable ModifyGuest(Guest guest){
            DataTable dt =newDataTable();
            dt = GuestService.ModifyGuest(guest);return dt;}//得到客人列表publicstatic DataTable GetAllGuests(){return GuestService.GetAllGuests();}//根据客人ID得到客人列表publicstatic Guest GetGuestByGuestID(int guestId){return GuestService.GetGuestByGuestId(guestId);}//根据客人名得到客人列表publicstatic Guest GetGuest(string guestName){return GuestService.GetGuestByGuestName(guestName);}}}

5、客人类型业务逻辑类

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

在这里插入代码片

六、实现表示层业务逻辑

1、用户登录

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingHotelManageLib;namespaceHotelManage{publicpartialclassFrmLogin:Form{publicFrmLogin(){InitializeComponent();}MainForm mainFrm =newMainForm();privatevoidbtnLogin_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 =newMySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);DataTable dt =newDataTable();bool queryFlag = MySQLHelper.ExcuteQuerySql(sql,ref dt);if(queryFlag ==false){
                    MessageBox.Show("登录失败,没有找到该用户");}if(dt.Rows.Count >0){
                    mainFrm.Show();this.Hide();}else{
                    MessageBox.Show("用户名或密码错误,请重新输入");}}}privatevoidbtnCancel_Click(object sender,EventArgs e){this.Close();}/// <summary>/// 验证合法性/// </summary>privateboolVolidity(){if(this.txtUserName.Text !=string.Empty &&this.txtPassword.Text !=string.Empty){returntrue;}else{
                MessageBox.Show("用户名或密码不能为空");}returnfalse;}}}

2、主界面

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceHotelManage{publicpartialclassMainForm:Form{publicDialogResult result;//声明对话框返回对象publicMainForm(){InitializeComponent();}privatevoidForm1_Load(object sender,EventArgs e){//FrmLogin frmLogin = new FrmLogin();//frmLogin.Show();}privatevoidtsmExit_Click(object sender,EventArgs e){if(MessageBox.Show("确认退出系统?","提示信息", MessageBoxButtons.OKCancel)== System.Windows.Forms.DialogResult.OK){
                System.Environment.Exit(0);}}/// <summary>/// 查询子窗体是否存在/// </summary>/// <param name="childfrmname"></param>/// <returns></returns>publicboolCheckChildFrm(string childfrmname){foreach(Form childFrm inthis.MdiChildren)//遍历子窗体{if(childFrm.Name == childfrmname)//如果子窗体存在{if(childFrm.WindowState == FormWindowState.Minimized){
                        childFrm.WindowState = FormWindowState.Normal;}
                    childFrm.Activate();//激活该窗体returntrue;//存在返回true}}returnfalse;//不存在返回false}privatevoidtsbRoomInfo_Click(object sender,EventArgs e){if(this.CheckChildFrm("FrmRoomInfo")==true){return;}FrmRoomInfo frmRoomInfo =newFrmRoomInfo();
            frmRoomInfo.MdiParent =this;//设置当前窗体的子窗体
            frmRoomInfo.Show();}privatevoidtsbRoomType_Click(object sender,EventArgs e){if(this.CheckChildFrm("FrmRoomType")==true){return;}FrmRoomType frmRoomType =newFrmRoomType();
            frmRoomType.MdiParent =this;//设置当前窗体的子窗体
            frmRoomType.Show();}privatevoidtsbGuestInfo_Click(object sender,EventArgs e){if(this.CheckChildFrm("FrmGuestInfo")==true){return;}FrmGuestInfo frmGuestInfo =newFrmGuestInfo();
            frmGuestInfo.MdiParent =this;//设置当前窗体的子窗体
            frmGuestInfo.Show();}privatevoidtsbUserManage_Click(object sender,EventArgs e){if(this.CheckChildFrm("FrmUserManage")==true){return;}FrmUserManage frmUserManage =newFrmUserManage();
            frmUserManage.MdiParent =this;//设置当前窗体的子窗体
            frmUserManage.Show();}}}

3、客房类型设置

4、可房信息设置

5、用户管理

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingHotelManageLib;namespaceHotelManage{publicpartialclassFrmUserManage:Form{publicFrmUserManage(){InitializeComponent();}privateHotelUser hotelUser;privateint userId;privatevoidtsbExit_Click(object sender,EventArgs e){this.Close();}privatevoidtsbCancel_Click(object sender,EventArgs e){this.Close();}privatevoidtsbAdd_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 =newHotelUser();
                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 =newDataTable();
                dt = HotelUserManage.GetAllHotelUsers();//获取更新所有用户信息

                dataGridView1.DataSource = dt;}else{return;}

            txtUserName.Text =string.Empty;
            txtPassword.Text =string.Empty;}privatevoidtsbDelete_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 =newDataTable();
                dt = HotelUserManage.GetAllHotelUsers();//获取更新所有用户信息

                dataGridView1.DataSource = dt;}}privatevoidtsbUpdate_Click(object sender,EventArgs e){//更新用户名和用户密码
            lbPassword.Visible =true;
            lbUserName.Visible =true;
            txtUserName.Visible =true;
            txtPassword.Visible =true;

            lbUserName.Text ="用户名";//查询所有用户信息,将用户ID绑定到combox中DataTable dt =newDataTable();
            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");}privatevoidtsbSave_Click(object sender,EventArgs e){//查询用户信息DataTable dt =newDataTable();

            dt = HotelUserManage.GetAllHotelUsers();if(dt.Rows.Count >0){
                dataGridView1.DataSource = dt;//保存信息
                MessageBox.Show("信息保存成功");}else{
                MessageBox.Show("用户信息为空或者查询所有用户信息失败!");}}privatevoidcmbUserId_SelectedIndexChanged(object sender,EventArgs e){//查询用户ID对应信息if(cmbUserId.Text !=string.Empty){HotelUser hotelUserTmp =newHotelUser();

                hotelUserTmp = HotelUserManage.GetHotelUserByUserID(Convert.ToInt32(cmbUserId.Text));if(hotelUserTmp !=null){
                    txtUserName.Text = hotelUserTmp.UserName;
                    txtPassword.Text = hotelUserTmp.Password;}else{
                    MessageBox.Show("根据当前ID查询的用户信息为空");}}}privatevoidtsbUpdate_DoubleClick(object sender,EventArgs e){}privatevoidlbPassword_Click(object sender,EventArgs e)//密码label单击为保存修改信息{//根据用户ID查询用户信息HotelUser hotelUser =newHotelUser();
            hotelUser = HotelUserManage.GetHotelUserByUserID(Convert.ToInt32(cmbUserId.Text));if(hotelUser !=null){
                hotelUser.UserName = txtUserName.Text;
                hotelUser.Password = txtPassword.Text;}else{
                MessageBox.Show("根据用户ID查询的用户信息为空");}DataTable dt =newDataTable();
            dt = HotelUserManage.ModifyHotelUser(hotelUser);if(dt.Rows.Count >0){
                MessageBox.Show("更新成功","提示信息", MessageBoxButtons.OK);

                dataGridView1.DataSource = dt;}else{
                MessageBox.Show("更新失败","提示信息", MessageBoxButtons.OK);}}}}

6、客人管理

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingHotelManageLib;usingSystem.Text.RegularExpressions;namespaceHotelManage{publicpartialclassFrmGuestInfo:Form{publicFrmGuestInfo(){InitializeComponent();}privatevoidtsbCancel_Click(object sender,EventArgs e){this.Close();}privatevoidtsbExit_Click(object sender,EventArgs e){this.Close();}privatevoidbtnQuery_Click(object sender,EventArgs e){//根据客人姓名查询客人信息Guest guest =newGuest();DataTable dt =newDataTable();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}}privatevoidtsbSave_Click(object sender,EventArgs e){//查询所有客人信息DataTable dt =newDataTable();

            dt = GuestManage.GetAllGuests();if(dt.Rows.Count >0){
                dataGridView1.DataSource = dt;}else{
                MessageBox.Show("没有客人信息可以保存");}}privatevoidtsbAdd_Click(object sender,EventArgs e){
            pnlGuestInfo.Visible =true;Guest guest =newGuest();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("请输入全部客人信息");}}//判断输入字符串为空的合法性验证publicboolValidity(string str){if(str !=string.Empty){returntrue;}else{
                MessageBox.Show("字符串"+ str +"为空");returnfalse;}}//判断字符串是否是数字publicboolIsNumeric(string str){bool isMatch = Regex.IsMatch(str,@"^\d+$");//正则表达式匹配return isMatch;}privatevoidtsbDelete_Click(object sender,EventArgs e){//根据客人姓名if(txtGuestName.Text !=string.Empty){//删除用户信息  通过IDGuest guest =newGuest();//根据用户名查询用户信息
                guest = GuestManage.GetGuest(txtGuestName.Text);if(guest !=null){
                    GuestManage.DeleteGuestById(guest.GuestID);DataTable dtTemp =newDataTable();
                    dtTemp = GuestManage.GetAllGuests();//刷新表格
                    dataGridView1.DataSource = dtTemp;}else{
                    MessageBox.Show("此客人名的客人信息不存在");}//更新数据显示DataTable dt =newDataTable();
                dt = GuestManage.GetAllGuests();//获取更新所有用户信息

                dataGridView1.DataSource = dt;}else{
                MessageBox.Show("请输入要删除的客人姓名");}}}}

总结

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

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

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

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

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

标签: c# mysql 数据库

本文转载自: https://blog.csdn.net/qq_38628970/article/details/129156225
版权归原作者 JosieBook 所有, 如有侵权,请联系我们删除。

“【C#项目】酒店管理系统-WinForm+MySQL”的评论:

还没有评论