文章目录
前言
结合.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个界面都是不同对象的增删改查。
所以我主要实现了“用户管理”、“客人信息管理”这两条业务线,全部功能实现贯通。其余的三条业务线“客人类型管理”、“客房信息管理”、“客房类型管理”就没有去实现了,基本是前两条业务线的复制粘贴。有感兴趣的小伙伴也可以自行去实现。
总的来说,我认为我完成了自主设计的酒店管理系统,希望以后设计软件系统把这种规范化的思想融入进去。设计有趣,实现枯燥,二者都需要脚踏实地去做。
版权归原作者 JosieBook 所有, 如有侵权,请联系我们删除。