前言
结合.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]
public class HotelUser
{
private static int userID;//用户ID
private static string userName = String.Empty;//用户名
private static string password = String.Empty;//用户密码
/// <summary>
/// 用户ID
/// </summary>
public int 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; }
}
public HotelUser() { }
}
}
2、Guest实体类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HotelManageLib
{
[Serializable]
public class Guest
{
/// <summary>
/// 客人ID
/// </summary>
private static int guestId;//客人Id,int类型
public int GuestID
{
get { return guestId; }
set { guestId = value; }
}
/// <summary>
/// 客人姓名
/// </summary>
private static string guestName;//客人姓名
public string GuestName
{
get { return guestName; }
set { guestName = value; }
}
/// <summary>
/// 客人类别
/// </summary>
private static int guestTypeId;//客人类别
public int GuestTypeID
{
get { return guestTypeId; }
set { guestTypeId = value; }
}
/// <summary>
/// 客人性别
/// </summary>
private static string guestSex;//客人性别
public string GuestSex
{
get { return guestSex; }
set { guestSex = value; }
}
/// <summary>
/// 电话
/// </summary>
private static string guestMobile;//电话
public string GuestMobile
{
get { return guestMobile; }
set { guestMobile = value; }
}
/// <summary>
/// 房间号
/// </summary>
private static int guestRoomId;//房间号,int类型
public int GuestRoomID
{
get { return guestRoomId; }
set { guestRoomId = value; }
}
/// <summary>
/// 入住时间
/// </summary>
private static DateTime guestArriveTime;//入住时间,时间类型
public DateTime GuestArriveTime
{
get { return guestArriveTime; }
set { guestArriveTime = value; }
}
/// <summary>
/// 离开时间
/// </summary>
private static 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]
public class GuestType
{
/// <summary>
/// 客人类型ID
/// </summary>
private static int typeId;//客人类型ID
public int TypeID
{
get { return typeId; }
set { typeId = value; }
}
/// <summary>
/// 类型名称
/// </summary>
private static string typeName;//类型名称
public string TypeName
{
get { return typeName; }
set { typeName = value; }
}
public GuestType()
{ }
}
}
4、Room实体类
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()
{ }
/// <summary>
/// 房间号ID
/// </summary>
public int RoomID
{
get { return roomId; }
set { roomId = value; }
}
/// <summary>
/// 房间号
/// </summary>
public string Number
{
get { return number; }
set { number = value; }
}
/// <summary>
/// 房间类型ID
/// </summary>
public int TypeID
{
get { return typeId; }
set { typeId = value; }
}
/// <summary>
/// 床位数
/// </summary>
public int 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>
public int 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]
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()
{ }
/// <summary>
/// 房间类型ID
/// </summary>
public int 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、数据库通用操作类
通信模块:
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;
}
/// <summary>
/// 执行查询语句,用DataTable返回结果,调用前要传入DataTable的实例化对象作为参数
/// </summary>
/// <param name="strQuery">查询命令</param>
/// <param name="dt">返回数据表</param>
/// <returns></returns>
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;
}
/// <summary>
/// 执行带参数的查询语句,使用前传入参数、DataTable实例化对象
/// </summary>
/// <param name="strQuery">查询语句</param>
/// <param name="param"></param>
/// <param name="dt"></param>
/// <returns></returns>
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;
/// <summary>
/// 添加用户
/// </summary>
/// <param name="hotelUser"></param>
/// <returns></returns>
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);//返回查询对象
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="hotelUser"></param>
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("要删除的用户名为空,不能删除该用户信息");
}
}
/// <summary>
/// 通过用户ID删除用户
/// </summary>
/// <param name="userId"></param>
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() + "的用户不存在,不能删除");
}
}
/// <summary>
/// 修改用户信息
/// </summary>
/// <param name="hotelUser"></param>
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;
}
/// <summary>
/// 获取所有用户信息
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 通过用户ID获取用户信息
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 通过用户名获取用户信息
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
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();//获取全部用户信息
/// <summary>
/// 添加用户
/// </summary>
/// <param name="guest"></param>
/// <returns></returns>
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);//返回查询对象
}
/// <summary>
/// 删除客人
/// </summary>
/// <param name="guest"></param>
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("要删除的客人名为空,不能删除该客人信息");
}
}
/// <summary>
/// 通过客人ID删除客人
/// </summary>
/// <param name="userId"></param>
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() + "的客人不存在,不能删除");
}
}
/// <summary>
/// 修改客人信息
/// </summary>
/// <param name="guest"></param>
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;
}
/// <summary>
/// 获取所有客人信息
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 通过客人ID获取客人信息
/// </summary>
/// <param name="guestId"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 通过客人名获取客人信息
/// </summary>
/// <param name="guestName"></param>
/// <returns></returns>
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();
}
/// <summary>
/// 验证合法性
/// </summary>
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);
}
}
/// <summary>
/// 查询子窗体是否存在
/// </summary>
/// <param name="childfrmname"></param>
/// <returns></returns>
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个界面都是不同对象的增删改查。
所以我主要实现了“用户管理”、“客人信息管理”这两条业务线,全部功能实现贯通。其余的三条业务线“客人类型管理”、“客房信息管理”、“客房类型管理”就没有去实现了,基本是前两条业务线的复制粘贴。有感兴趣的小伙伴也可以自行去实现。文章来源:https://www.toymoban.com/news/detail-470817.html
总的来说,我认为我完成了自主设计的酒店管理系统,希望以后设计软件系统把这种规范化的思想融入进去。设计有趣,实现枯燥,二者都需要脚踏实地去做。文章来源地址https://www.toymoban.com/news/detail-470817.html
到了这里,关于【C#项目】酒店管理系统-WinForm+MySQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!