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






