数据库课程设计报告题目:客房管理系统时间:2008-6-27客房管理系统一、课程设计的目的和意义在当今经济和商务交往日益频繁的状况下,宾馆服务行业正面临客流量骤增的压力。越来越多的宾馆饭店都认识到传统的管理方法已经不能适合当今社会的需要,必须借助先进的计算机信息技术对宾馆服务进行管理。“客房管理系统”可以说是整个宾馆计算机信息系统的中心子系统,因为宾馆最主要的功能就是为旅客提供客房。设计客房管理这样一个系统,可以涉及到大多数SQLServer数据库的重要数据库对象、重要功能和特性,比如:视图、触发器和存储过程等。由此,通过这个课程设计可以加深对这些SQLServer数据库知识的学习、理解,积累在实际工程应用中运用各种数据库对象的经验,使学生掌握使用应用软件开发工具开发数据库管理系统的基本方法。在实用性方面,客房管理系统是很普遍的一种应用,选择该系统作为课程设计也可以为学生以后可能遇到的实际开发提供借鉴。本课程设计的主要目的是学习和练习SQLServer数据库的实际应用,所以选择SQLServer2000作为数据库服务器。二、需求分析系统主要实现对客房的管理功能。主要有管理员登陆、客户登记、房间管理、客户查询、房间查询、收入统计、管理员信息管理。系统总体设计图如下:三、概念结构设计(E-R图)四、逻辑结构设计将E-R图转换成关系模式:管理员(编号,账号,密码,权限)房间(编号,类型,价格,状态,入住客户编号)客户(编号,姓名,性别,年龄,身份证号,住址,入住时间,预计天数,房间编号,退房时间,押金,住宿费,登记人)关系规范化:均已达到第三范式五、数据实施与维护1、建立数据库打开SQLServer2000企业管理器,建立数据库HotelRoom。2、添加数据表在HotelRoom数据库中,添加表管理员信息表AdminInfo、房间信息表RoomInfo、客户信息表GuestInfo。3、建立关系图4、创建视图CREATEVIEWdbo.ViewAdminInfoASSELECTAid,Aname,AlimitFROMdbo.AdminInfo管理员信息视图CREATEVIEWdbo.ViewAllCostASSELECTSUM(Ccost)ASAllCostFROMdbo.GuestInfo总收入视图CREATEVIEWdbo.ViewBiaozhunCostASSELECTSUM(a.Ccost)ASBiaozhunCostFROMdbo.GuestInfoaINNERJOINdbo.RoomInfobONa.Rnum=b.RnumWHERE(b.Rtype='标准')标准房收入视图CREATEVIEWdbo.ViewCostASSELECTdbo.ViewAllCost.AllCost,dbo.ViewPutongCost.putongCost,dbo.ViewBiaozhunCost.BiaozhunCost,dbo.ViewHaohuaCost.HaohuaCostFROMdbo.ViewAllCostCROSSJOINdbo.ViewPutongCostCROSSJOINdbo.ViewBiaozhunCostCROSSJOINdbo.ViewHaohuaCost收入视图CREATEVIEWdbo.ViewEmptyRoomInfoASSELECTRnum,Rtype,Rprice,RstatesFROMdbo.RoomInfoWHERE(Rstates='空')空房信息视图CREATEVIEWdbo.ViewFullRoomInfoASSELECTdbo.RoomInfo.*FROMdbo.RoomInfoWHERE(Rstates='满')满房信息视图CREATEVIEWdbo.ViewGuestInfoASSELECTdbo.GuestInfo.*FROMdbo.GuestInfo客户信息视图CREATEVIEWdbo.ViewHaohuaCostASSELECTSUM(a.Ccost)ASHaohuaCostFROMdbo.GuestInfoaINNERJOINdbo.RoomInfobONa.Rnum=b.RnumWHERE(b.Rtype='豪华')豪华房收入视图CREATEVIEWdbo.ViewPutongCostASSELECTSUM(a.Ccost)ASPutongCostFROMdbo.GuestInfoaINNERJOINdbo.RoomInfobONa.Rnum=b.RnumWHERE(b.Rtype='普通')普通房收入视图CREATEVIEWdbo.ViewRoomInfoASSELECTdbo.RoomInfo.*FROMdbo.RoomInfo房间信息视图5、创建触发器在表GuestInfo中,创建一个触发器:CREATETRIGGERinsert_triONdbo.GuestInfoFORINSERTASupdateRoomInfosetRstates='满',Cid=(selectCidfrominserted)whereRnum=(selectRnumfrominserted)功能:当向表GuestInfo中插入一个客户信息时,触发表RoomInfo的某房间的状态变为“满”6、备份数据库给所建立的数据库进行备份六、界面设计与代码(用VB作为界面设计语言)1、登陆界面PublicSubCommand1_Click()‘确定IfTrim(DataCombo1.Text)AndTrim(Text1.Text)ThenAdodc1.RecordSource=select*fromAdminInfowhereAname='+Trim(DataCombo1.Text)+'andAmima='+Trim(Text1.Text)+'Adodc1.RefreshIfAdodc1.Recordset.RecordCount=1ThenAdodc1.Recordset.ClosefrmMain.ShowMe.HideElseMsgBox错误的账号或密码!,vbInformation+vbOKOnly,错误信息Text1.Text=DataCombo1.SetFocusEndIfElseIfDataCombo1.Text=ThenMsgBox账号不能为空!,vbInformation+vbOKOnly,错误信息DataCombo1.SetFocusElseMsgBox密码不能为空!,vbInformation+vbOKOnly,错误信息Text1.SetFocusEndIfEndSubPrivateSubCommand2_Click()‘取消EndEndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)‘在文本框按下输入的事件IfKeyAscii=13ThenCommand1_ClickEndIfEndSubPrivateSubdataCombo1_KeyPress(KeyAsciiAsInteger)‘在文本框按下输入的事件IfKeyAscii=13ThenCommand1_ClickEndIfEndSub2、客户登记界面PrivateSubCommand3_Click()‘客户登记PrivateSubCommand4_Click()‘退房结算frmGuestAdd.ShowfrmCheckOut.ShowEndSubEndSubPrivateSubCommand1_Click()‘当前时间txt6.Text=Trim(Now())EndSubPrivateSubCommand2_Click()‘确定Iftxt1.Text=Ortxt2.Text=Ortxt3.Text=Ortxt4.Text=Ortxt6.Text=Ortxt8.Text=OrDataCombo1.Text=ThenMsgBox请将蓝色部分填写完整!,vbInformation+vbOKOnly,提示信息Iftxt1.Text=Thentxt1.SetFocusElseIftxt2.Text=Thentxt2.SetFocusElseIftxt3.Text=Thentxt3.SetFocusElseIftxt4.Text=Thentxt4.SetFocusElseIftxt6.Text=Thentxt6.SetFocusElseIftxt8.Text=Thentxt8.SetFocusElseIfDataCombo1.Text=ThenDataCombo1.SetFocusEndIfElseAdodc3.RecordSource=selectAidfromViewAdminInfowhereAname='&frmLogin.DataCombo1.Text&'Adodc3.RefreshDimaidAsIntegeraid=Adodc3.Recordset.Fields(0)Adodc4.RecordSource=select*fromGuestInfoAdodc4.RefreshAdodc4.Recordset.AddNewAdodc4.Recordset.Fields(Cname)=txt1.TextAdodc4.Recordset.Fields(Csex)=txt2.TextAdodc4.Recordset.Fields(Cage)=txt3.TextAdodc4.Recordset.Fields(Cpnum)=txt4.TextIftxt6.TextThenAdodc4.Recordset.Fields(Cadd)=txt5.TextEndIfAdodc4.Recordset.Fields(Cintime)=txt6.TextIftxt7.TextThenAdodc4.Recordset.Fields(Cday)=txt7.TextEndIfAdodc4.Recordset.Fields(Cdeposit)=txt8.TextAdodc4.Recordset.Fields(Rnum)=DataCombo1.TextAdodc4.Recordset.Fields(Aid)=aidAdodc4.Recordset.UpdatefrmMain.Adodc1.RefreshfrmMain.DataGrid1.RefreshMsgBox登记成功!,vbOKOnly+vbInformation,提示信息UnloadMeEndIfEndSubPrivateSubCommand3_Click()‘取消UnloadMeEndSubPrivateSubDataCombo1_Change()‘选择房间Adodc2.RecordSource=select*fromViewEmptyRoomInfowhereRnum='+Trim(DataCombo1.Text)+'Adodc2.RefreshSetDataGrid1.DataSource=Adodc2DataGrid1.RefreshEndSubPrivateSubCommand1_Click()‘查看信息IfDataCombo1.TextThenIfCommand1.Caption=查看信息ThenAdodc1.RecordSource=select*fromViewGuestInfowhereRnum='&DataCombo1.Text&'andCouttimeisnullAdodc1.RefreshRichTextBox1.Text=vbCrLf++编号:+Trim(Adodc1.Recordset.Fields(0).Value)++姓名:+Trim(Adodc1.Recordset.Fields(1).Value)++性别:+Trim(Adodc1.Recordset.Fields(2).Value)++年龄:+Trim(Adodc1.Recordset.Fields(3).Value)+vbCrLf+vbCrL