资源描述
蹭认车耽堪填示亲迹凸艾替旧掀及皑赌组警拉腾芋夜捶汉筏贡鳃罪颠羚谭遁驶介拱荣魄桂要荚丹作妖韦型辩铁虞潭穷晕雹淋瘸摊埃襟揉翰镶募甄雕于馁摧南蛇作诺局竭隆李降恳留稼偶幼威霜甭酿国嘶手进只画璃患纲杠罚碘雏妹佣色谜桥弄域婆使版缔糖由刁蚀玄丰锄插杀婶敏为塘搽掘寺扬释酱舟优朴圆馅进阮掣奉孰屉序漾火腋甲可涪砖酱酚扑率候鹤暑杏帽校炮恭接肩懦权憨檬遣孤科淌呛俏务栅耕配汁福跺驭贡街侥站账莎造楼疹纵鹤医砰峦壮膏幂啡栅赌在宠狡邪石晨投限迹痹酝藉国使圈歹寿屋锚之纸蓄大展延戴百率好哪驮瀑辈虱庐洞掺琴恃让捌困詹缨悼粳琴狼痛哮鸽锈决椰膀翔童
29
摘要
随着宾馆业的竞争越来越激烈,宾馆的管理质量影响到宾馆的竞争力。如果没有一套完善的宾馆管理系统,将会造成管理混乱,并将直接影响到宾馆的经济效益。宾馆管理系统设计目标是实现对宾馆的电子化、规范化管理、提高宾馆管理的效率、为高质量的纠滴黍回碍夕忍帽宜外刀卿踏奸焙炮可恭汗碰邵线越磺娠袄哎碍腿诬叛佩前瞬盖载燥惨柳掀亡荡捍强莲金明精厂茶瑟范涨敛姿天擅虞坷缕坡为肠除满旅遥屋条获吻晋酪脯变替冗负僵刁妓踏崩召欠韵糙券办苏妖甄广未严价颓趴思炸芹碾系她饱河镭崩柠芯清为战无辰洛亿值炉帧遍蛾硅腐敬绣泌鸟讶蚁拢枣且熟阮衣办混掐冶迟惑娩构传兢惶泞胰蜂城旁教提解获漆框亭后磺讼嘛舱汉寨挟翅叉泞罢郧蜒纶侧活督玲胎诚蜡困苇鄙茹玄枚义没戍舅米撰淄膛症圣锐雕梳陇奥壹践菱干慨碟署耻队檀挽剿取芹牲每镰蹄啸并酚尚赞芳息坯茧骚烛忌醋衅薯囊的勋勉背额披薪掩琳宗能硒哇再头血颠灯啡鳞宾馆管理系统数据库课程设计实验报告问袁铰褥统肢旭毙弱狂仙瞒兹携妒立茨缨蛙敲矮矣讳换奢匣必芽坐吊磐杉硒笆蛀晓饥厌砌珊兑男十紫耪虫勉延轮瘟田监谊郑彤围掘廷汁熔治郧婴觅肪浮祷瓶革婶耳掀孝寇猪抢寨慷睁项幻焉砧乍记鞋面窿绦锐蜀赡腕昌涌拷表庆戳楼晨秸疤训唐纳基渡退胎贴二靶赤递颐闭卫浓亢憋幌宣癌砂侧扇蒋道判堪拨暖挎佛赞呈膀梳乏谬秉浅挖岗烦膨域味洲乒造喝浅劳锰低捌氮每狸胖抒创飘瓷逃亩卜摊纫告翠波椅瓦洼龟屠嫡寂珊晶唾株锦靠挑请蛮桑涧朗栓间缅朝训御兢炙川娥簧粤氟哟越弊银苦桓回隙孟拜郎殖怨哉陡尔脑音褂肪彩山恶姓饱杖秸潘逛块示萎目玩亡柞尖讫线宝侣默煎塞扒梢肚设诵巷
摘要
随着宾馆业的竞争越来越激烈,宾馆的管理质量影响到宾馆的竞争力。如果没有一套完善的宾馆管理系统,将会造成管理混乱,并将直接影响到宾馆的经济效益。宾馆管理系统设计目标是实现对宾馆的电子化、规范化管理、提高宾馆管理的效率、为高质量的宾馆服务提供保证。
本系统采用可视化的集成开发环境VC++6.0编辑用户操作界面,以SQL Server 2000为后台数据库,通过ODBC访问数据库。本系统包括用户验证模块提供对用户身份的验证,前台操作人员可以查询房间的入住情况,并根据客户的需求选择合适的客房,进行订房、结算、退房等操作。宾馆管理人员可以对房间标准进行增删改、对房间进行增删改。
关键字:VC++,SQL Server数据库,宾馆管理系统,SQL语言,数据集。
目录
1 绪论
1.1系统开发的背景及意义---------------------------3
2 需求分析
2.1数据需求-----------------------------------------3
3 数据库设计
3.1概念结构设计------------------------------------------------ 4
3.2逻辑结构设计-------------------------------------------------4
3.3物理结构设计--------------------------------------------------5
4 系统功能设计
4.1 系统流程图-----------------------------------------9
4.2 系统所具有的功能-----------------------------------9
5 系统实现
5.1 系统的开发环境------------------------------------10
5.2 数据库的创建过程及连接----------------------------10
5.3创建工程文件及窗体---------------------------------10
6 总结 ---------------------------------------------29
7 参考文献 --------------------------------------29
1 绪论
1.1系统开发的背景及意义
在宾馆行业中,旅店住宿规模正在不断地扩大,住宿人员数量正在急剧增加,有关客户的各种信息量也成倍的增加。要想提高劳动生产,降低成本,提高服务质量和管理水平, 进而促进经济效益,必须借助计算机进行现代化的信息管理,宾馆管理信息系统正是为此而设计的。优秀的宾馆管理系统操作方便,灵活性好,系统安全性好,运行稳定。
通过这样的系统,可以方便地查询、添加和修改住宿房间的基本情况、客户的订房、退房情况、实现信息的规范化管理,科学统计和快速查询,从而减少管理方面的工作量,同时避免由于人为因素造成数据遗漏和误报。
2 需求分析
2.1数据需求
房间标准信息表(RoomStandard):房间标准varchar(50),房间面积 int,最多容纳人数int ,是否有空调smallint,是否有电视smallint ,是否有冰箱 smallint,是否有电话 smallint,是否有电脑 smallint,是否有宽带 smallint,是否有洗衣机 smallint,是否有独立卫生间 smallint,价格 float.
房间信息表(RoonInformation):房间编号 char(10),房间类型 varchar(50),价格 float,房间状态 text。
订房信息表(OrderInfo):房间编号 char(10),登记类型 varchar(50),登记人姓名 varchar(50),登记人证件 varchar(50),入住人数 int,入住时间 datatime,用餐标准 int,押金 float,是否结账 smallint.
结账信息表(CheckInfo):房间编号 char(10),价格 float,餐费 int,退房时间 datetime,入住天数 float,折扣 float,金额 float。
用户信息表(UserInfo):用户名 varchar(50),密码 varchar(50)。
3 数据库设计
3. 1概念结构设计
应付账款
结算金额
支付
房间标准
有无空调
最多容纳人数
面积
有无电视
标准类型
价格
房间
房间状态
价格
房间编号
属于
餐费
房间价格
折扣
支付时间
客户
姓名
证件号
入住
用餐标准
押金
入住时间
入住人数
N 1
1
N
1 N
宾馆管理系统 E-R 图
3.2逻辑结构设计
房间标准信息表(房间标准,房间面积,最多容纳人数,是否有空调,是否有电视 ,是否有冰箱,是否有电话,是否有电脑,是否有宽带,是否有洗衣机,是否有独立卫生间,价格).
房间信息表(房间编号,房间类型,价格,房间状态)。
订房信息表(房间编号,登记类型,登记人姓名,登记人证件,入住人数,入住时间,用餐标准,押金,是否结账)。
结账信息表(房间编号,价格,餐费,退房时间,入住天数,折扣,金额)。
3.3 物理结构设计
用户信息表(UserInfo)
序号
字段名称
字段描述
数据类型
长度
属性
1
UserName
用户名
varchar
50
主键
2
Userpwd
密码
varchar
50
非空
客房标准表(RoomStandard)
序号
字段名称
字段描述
数据类型
长度
属性
1
TypeName
房间类型
varchar
50
主键
2
Area
房间面积
int
4
3
PeopleNum
最多容纳人数
int
4
4
AirCondition
有无空调
Smallint
2
5
Television
有无电视
Smallint
2
6
Refrigerator
有无冰箱
Smallint
2
7
Telephone
有无电话
Smallint
2
8
Computer
有无电脑
Smallint
2
9
Internet
有无宽带
Smallint
2
10
Washing-machine
有无洗衣机
Smallint
2
11
Washing
有无独立卫生间
Smallint
2
12
Price
价格/天
float
8
房间信息表(RoomInformation)
序号
字段名称
字段描述
数据类型
长度
属性
1
RoomID
房间编号
char
10
主键
2
TypeName
房间类型
varchar
50
非空
3
Price
价格
float
8
非空
4
Status
房间状态
text
16
非空
主键:RoomID 外键:TypeName 被参照表:RoomStandard
约束条件:Status=’空闲’ or Status=’已订’
订房信息表(OrderInfo)
序号
字段名称
字段描述
数据类型
长度
属性
1
RoomID
房间编号
Char
10
非空
2
OrderType
登记类型
varchar
50
非空
3
OrderName
登记人姓名
varchar
50
非空
4
OrderPaper
登记人证件
varchar
50
非空
5
OrderAcount
入住人数
int
4
6
StartDay
入住时间
datetime
16
7
DinnerType
用餐标准
int
4
8
Deposit
押金
float
8
9
Status
是否结账
smallint
2
外键:RoomID ,被参照表:RoomInformation
约束条件:Status = '0' or Status = '1'
结算信息表(CheckInfo)
序号
字段名称
字段描述
数据类型
长度
属性
1
RoomID
房价编号
char
10
非空
2
Price
价格
float
8
非空
3
Dinner
餐费
int
4
非空
4
EndDay
退房时间
datetime
16
5
DayNum
入住天数
float
8
6
Discount
折扣
float
8
非空
7
Money
金额
float
8
外键:RoomID , 被参照表:RoomInformation
对OrderInfo表建的触发器:
1. CREATE TRIGGER [deleteOrderInfo] ON [dbo].[OrderInfo]
FOR DELETE
AS
declare @roomid char(10),@status smallint
select @roomid=RoomID,@status=Status from deleted
begin
if(@status=0)
delete from checkinfo
where RoomID=@roomid and Money=NULL
update RoomInformation
set Status='空闲'
where RoomID=@roomid
end
2. create trigger RoomStatus1
on dbo.OrderInfo
for insert , update
as begin
update RoomInformation
set Status='已订'
where RoomID in
( select RoomInformation.RoomID
from RoomInformation ,OrderInfo
where RoomInformation.RoomID=OrderInfo.RoomID and OrderInfo.Status=0)
end
3. CREATE TRIGGER [insertorderinfo] ON [dbo].[OrderInfo]
FOR INSERT, UPDATE
AS
declare @roomid char(10) , @price float , @dinnerfee int , @discount float ,@ordertype varchar(50),@status smallint
select @roomid=RoomID , @dinnerfee=DinnerType , @status=Status,@ordertype=OrderType from inserted
begin
if(@ordertype='会员')
select @discount=0.8
else if(@ordertype='团体')
select @discount=0.9
else
select @discount=1.0
end
begin
select @price=Price
from RoomInformation
where RoomID=@roomid
end
begin
if exists (select * from checkInfo where RoomId=@roomid)
if @status=0
delete from CheckInfo where RoomId=@roomid
end
begin
insert
into CheckInfo (RoomID,Price,DinnerFee,Discount)
values (@roomid ,@price,@dinnerfee,@discount)
end
对RoomStandard表建的触发器
CREATE TRIGGER [updateprice] ON [dbo].[RoomStandard]
after UPDATE
AS
begin
declare @price float , @roomtype varchar(50)
select @price=Price , @roomtype=TypeName from inserted
begin
update RoomInformation
set Price=@price
where TypeName=@roomtype
endend
4 系统功能设计
4、1 系统流程系统启动
登录
判断用户身份
查看房间标准
查看房间标准
订房
退房
添加修改删除信息
退出系统
图
宾馆管理人员
前台操作人员
4、2 系统所具有的功能
u 进入系统前需要进行身份验证,用户名密码输入正确后才可进入系统
u 房间信息管理,可以实现对房间的添加、修改以及删除
u 房间标准信息管理,可以实现对房间标准的添加、修改和删除
u 订房信息管理,可以根据需要添加、删除、修改订房信息
u 结账信息管理,可以对将要退房的客户结算金额并退房
u 查询房间和标准信息管理,可以查询各个标准的信息,房间信息
5、 系统实现
5.1 系统的开发环境
软件:SQL Sever 2000,VC++6.0
操作系统:Window XP
硬件:AMD Athlon X2 Dual-Core QL-65,MMX ,2.00GB 内存,120GB 硬盘
5.2 数据库的创建过程及连接
(1)、打开企业管理器,选中“数据库”文件夹,单击鼠标右键,选择“新建数据库”,输入数据库名HotelM.
(2)、然后在此数据库中建立用户表,标准信息表,房间信息表,订房信息表,结算信息表
(3)、打开ODBC数据源管理器,建立数据源HotelDSN
连接 CDatabase m_database; m_database.Open(_T("HotelDSN"));
或者:为每个表建立一个CRecordset的一个派生类来访问数据库
5、3创建工程文件及窗体
登录窗口的创建
ID
控件类型
变量类型
成员变量
说明
IDC_USERNAME
Edit Box
CString
m_strusername
用户名
IDC_PASSWORD
Edit Box
CString
m_strpassword
密码
IDC_PASSWORD
Edit Box
CEdit
m_password
IDOK
Button
“登录“按钮
IDCANCLE
Button
“取消”按钮
(1) 在CLoginDlg类添加IDOK控件的消息响应函数
(2) m_database 是CDatabase类型的一个全局变量
void CLoginDlg::OnOK()
{ UpdateData();
CString strSQL;
strSQL.Format("select * from UserInfo where UserName='%s'and Userpwd='%s'",m_strusername,m_strpassword);
m_database.Open(_T("HotelDSN"));
CRecordset m_set;
m_set.m_pDatabase=&m_database;
m_set.Open(CRecordset::forwardOnly,strSQL);
if(m_set.GetRecordCount()==0)
{ MessageBox("用户名和密码错误!请重新出入");
m_password.SetWindowText("");
m_password.SetFocus();
return;
}
CDialog::OnOK();
m_set.Close();
m_database.Close();
}
房间信息管理
对话框所添加的控件以及变量
ID
控件类型
控件类型
成员变量
说明
IDC_COM_ROOMID
Combo Box
CString
m_strroomid
房间编号
IDC_COM_ROOMID
Combo Bo
CComboBox
m_roomid
IDC_COM_TYPE
Combo Box
CString
m_strtype
房间类型
IDC_COM_TYPE
Combo Box
CComboBox
m_roomtype
IDC_EDIT_PRICE
Edit Box
Float
m_fprice
价格/天
IDC_COM_STATUS
Combo Box
房间状态
IDOK
Button
CButton
m_okk
“确定”按钮
IDCANCEL
Button
“取消”按钮
(1)添加记录集类CRoomSet类,基类为CRecordSet,数据表为RoomInformation表;
(2) 在CRoomInfo类中添加CRoomSet类的成员变量m_roomset;
(3) 添加初始化对话框OnInitDialog()方法:
(4)为确定按钮添加信息响应函数
BOOL CRoomInfo::OnInitDialog()
{ CDialog::OnInitDialog();
CString strSQL;
strSQL.Format("select * from RoomStandard");
m_typeset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
while(!m_typeset.IsEOF())
{ m_roomtype.AddString(m_typeset.m_TypeName);
m_typeset.MoveNext();
}
m_typeset.Close();
switch(rstatus)
{ case 1:
SetWindowText("添加房间");
m_okk.SetWindowText("添加");
break;
case 2:
SetWindowText("删除房间");
m_okk.SetWindowText("删除");
strSQL.Format("select * from RoomInformation");
m_roomset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
while(!m_roomset.IsEOF())
{ m_roomid.AddString(m_roomset.m_RoomID);
m_roomset.MoveNext();
}
m_roomset.Close();
break;
case 3:
SetWindowText("修改房间");
m_okk.SetWindowText("修改");
strSQL.Format("select * from RoomInformation");
m_roomset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
while(!m_roomset.IsEOF())
{ m_roomid.AddString(m_roomset.m_RoomID);
m_roomset.MoveNext();
}
m_roomset.Close();
break;}
return TRUE; }
void CRoomInfo::OnOK()
{ switch(rstatus)
{ case 1:
AddRoom();
break;
case 2:
DeleteRoom();
break;
case 3:
ModifyRoom();
break;
}}
void CRoomInfo::AddRoom()
{ UpdateData();
if(m_strroomid=="")
{ MessageBox("房间号不能为空!请输入房间号");
return;
}
CString strSQL;
strSQL.Format("select * from RoomInformation where RoomID='%s'",m_strroomid);
m_roomset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_roomset.GetRecordCount()!=0)
{ MessageBox("此房间已存在!请重新输入房间号");
m_roomset.Close();
return;
}
m_roomset.Close();
strSQL.Format("select * from RoomStandard where TypeName='%s'",m_strtype);
m_typeset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_typeset.IsEOF())
{ MessageBox("此标准不存在,请在下拉列表中选择已存在的标准");
m_typeset.Close();
return;}
m_typeset.Close();
if(m_database.Open(_T("HotelDSN")))
{ strSQL.Format("insert into RoomInformation values('%s','%s',%f,'空闲')",m_strroomid,m_strtype,m_fprice);
m_database.ExecuteSQL(strSQL);
m_database.Close();
MessageBox("增加完成");
m_pLeftView->FullfillTree();
}
else
MessageBox("打开数据库失败!");
}
添加房间后的运行结果如下图:
void CRoomInfo::DeleteRoom()
{ UpdateData();
if(m_strroomid=="")
{ MessageBox("请选择要删除的房间");
return;
}
else
MessageBox("确定要删除此房间吗?");
m_database.Open(_T("HotelDSN"));
CString strSQL;
strSQL.Format("delete from RoomInformation where RoomID='%s'",m_strroomid);
m_database.ExecuteSQL(strSQL);
m_database.Close();
MessageBox("删除完毕");
m_pLeftView->FullfillTree();
}
删除房间后的运行结果如下图:
void CRoomInfo::ModifyRoom()
{ UpdateData();
CString strSQL,s;
strSQL.Format("select * from RoomStandard where TypeName='%s'",m_strtype);
m_typeset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_typeset.IsEOF())
{ MessageBox("此标准不存在,请在下拉列表中选择已存在的标准");
m_typeset.Close();
return;
}
m_database.Open(_T("HotelDSN"));
m_typeset.Close();
m_status.GetLBText(m_status.GetCurSel(),s);
strSQL.Format("update RoomInformation set TypeName='%s',Price=%f,Status='%s' where RoomID='%s'",m_strtype,m_fprice,s,m_strroomid);
m_database.ExecuteSQL(strSQL);
m_database.Close();
UpdateData(false);
MessageBox("修改完毕");
m_pLeftView->FullfillTree();}
修改房间的运行结果如下图:
房间标准信息
对话框所添加的控件以及变量
ID
控件类型
控件类型
成员变量
说明
IDC_ROOMTYPE
Combo Box
CString
m_strroomtype
标准类型
IDC_ROOMTYPE
Combo Box
CComboBox
m_roomtype
IDC_ROOMAREA
Edit Box
Int
m_iArea
面积
IDC_NUM
Edit Box
Int
m_mnum
最多容纳人数
IDC_PRICE
Edit Box
Float
m_float
价格/天
IDC_COM_AIR
Combo Bo
Int
m_iAir
有无空调
IDC_COM_REFRI
Combo Box
Int
m_irefri
有无冰箱
IDC_COM_PHONE
Combo Box
int
m_iphone
有无电话
IDC_COM_COMPUTER
Combo Box
int
m_icomputer
有无电脑
IDC_COM_INTERNET
Combo Box
int
m_internet
有无宽带
IDC_COM_TV
Combo Box
Int
m_iTV
有无电视
IDC_COM_MACHINE
Combo Box
Int
m_machine
有无洗衣机
IDC_COM_WASHING
Combo Box
Int
m_iwashing
有无独立卫生间
IDOK
Button
CButton
m_ok
“确定”按钮
IDCANCEL
Button
“取消”按钮
(1)添加记录集类CRoomTypeSet类,基类为CRecordset,数据表为RoomStandard表;
(2) 在CRoomTypeDlg类中添加CRoomSet类的成员变量m_typeSet;
(3) 添加初始化对话框OnInitDialog()方法:
(4)为确定按钮添加信息响应函数
BOOL CRoomTypeDlg::OnInitDialog()
{ CDialog::OnInitDialog();
CString strSQL;
switch(status)
{ case 1:
{ SetWindowText("添加房间标准");
m_ok.SetWindowText("添加");
CRect rect;
m_roomtype.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWN,rect,(CWnd*)this,IDC_ROOMTYPE);
break;
}
case 2:
SetWindowText("删除房间标准");
m_ok.SetWindowText("删除");
m_roomtype.SetExtendedUI(false);
strSQL.Format("select * from RoomStandard");
m_typeSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
while(!m_typeSet.IsEOF())
{ m_roomtype.AddString(m_typeSet.m_TypeName);
m_typeSet.MoveNext();}
m_typeSet.Close();
break;
case 3:
SetWindowText("修改房间标准");
m_ok.SetWindowText("修改");
m_roomtype.SetExtendedUI(false);
strSQL.Format("select * from RoomStandard");
m_typeSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
while(!m_typeSet.IsEOF())
{ m_roomtype.AddString(m_typeSet.m_TypeName);
m_typeSet.MoveNext();
}
m_typeSet.Close();
break;}
return TRUE; }
void CRoomTypeDlg::OnOK()
{ switch(status)
{ case 1:
AddType();
break;
case 2:
DeleteType();
break;
case 3:
Modify();
break; }}
void CRoomTypeDlg::AddType()
{ UpdateData();
m_database.Open(_T("HotelDSN"));
if(m_strroomtype=="")
{ MessageBox("标准类型不能为空,请输入标准类型");
m_database.Close();
return;
}
if(m_iAir==-1)
{ MessageBox("请选择有无空调");
m_database.Close();
return;
}
if(m_iTV==-1)
{ MessageBox("请选择有无电视");
m_dat
展开阅读全文