




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)應(yīng)用項(xiàng)目化項(xiàng)目五酒店管理系統(tǒng)的開(kāi)發(fā)實(shí)訓(xùn)第1頁(yè)/共166頁(yè)任務(wù)5-1創(chuàng)建酒店管理數(shù)據(jù)庫(kù)
任務(wù)分析
酒店管理系統(tǒng)中,主要需要三張表來(lái)記錄信息,分別是房間表、客人信息表和入住信息表。另外,還需要一張記錄房間類(lèi)型的數(shù)據(jù)字典表—房間類(lèi)型表和一張記錄證件類(lèi)型的數(shù)據(jù)字典表—證件類(lèi)型表。
步驟
(1)創(chuàng)建項(xiàng)目文件夾。在E盤(pán)上新建一個(gè)文件夾,命名為“酒店管理”。
(2)新建數(shù)據(jù)庫(kù),命名為“酒店管理”。在新建數(shù)據(jù)庫(kù)對(duì)話框中,將“酒店管理”的數(shù)據(jù)文件和日志文件的路徑都定位到步驟(1)中創(chuàng)建的“酒店管理”文件夾。第2頁(yè)/共166頁(yè)圖5-1創(chuàng)建數(shù)據(jù)庫(kù)第3頁(yè)/共166頁(yè)圖5-2房間表定義
(3)創(chuàng)建房間表,房間表的字段名和數(shù)據(jù)類(lèi)型設(shè)置如圖5-2所示。設(shè)置房號(hào)為房間表的主鍵。第4頁(yè)/共166頁(yè)圖5-3客人信息表定義
(4)創(chuàng)建客人信息表,客人信息表的字段名和數(shù)據(jù)類(lèi)型設(shè)置如圖5-3所示,設(shè)置證件號(hào)碼為房間表的主鍵。第5頁(yè)/共166頁(yè)圖5-4入住信息表定義
(5)創(chuàng)建入住信息表,入住信息表的字段名和數(shù)據(jù)類(lèi)型設(shè)置如圖5-4所示。因?yàn)楸碇衅渌侄尉痪邆湮ㄒ恍?,因此建立一個(gè)編號(hào)字段作為該表的主鍵。第6頁(yè)/共166頁(yè)圖5-5標(biāo)識(shí)規(guī)范選中“編號(hào)”字段,在下方屬性窗口中展開(kāi)“標(biāo)識(shí)規(guī)范”屬性,如圖5-5所示。將“(是標(biāo)識(shí))”屬性選擇為“是”,“標(biāo)識(shí)增量”為“1”,“標(biāo)識(shí)種子”為“1”。第7頁(yè)/共166頁(yè)圖5-6房間類(lèi)型表定義
(6)房間類(lèi)型表的字段名和數(shù)據(jù)類(lèi)型設(shè)置如圖5-6所示。編號(hào)的“標(biāo)識(shí)規(guī)范”屬性設(shè)置同入住信息表。第8頁(yè)/共166頁(yè)
(7)證件類(lèi)型表的字段名和數(shù)據(jù)類(lèi)型設(shè)置如圖5-7所示。編號(hào)的“標(biāo)識(shí)規(guī)范”屬性設(shè)置同入住信息表。圖5-7證件類(lèi)型表第9頁(yè)/共166頁(yè)圖5-8房間表記錄
(8)給房間表添加一些記錄,如圖5-8所示。第10頁(yè)/共166頁(yè)
(9)給房間類(lèi)型表添加一些記錄,如圖5-9所示。圖5-9房間類(lèi)型表記錄第11頁(yè)/共166頁(yè)圖5-10證件類(lèi)型表記錄
(10)給證件類(lèi)型表添加一些記錄,如圖5-10所示。第12頁(yè)/共166頁(yè)
任務(wù)5-2創(chuàng)建其他數(shù)據(jù)對(duì)象
任務(wù)分析
房間表、客人信息表、入住信息表、房間類(lèi)型表和證件類(lèi)型表,這五張表之間相互有著制約和聯(lián)系,需要在數(shù)據(jù)庫(kù)中設(shè)置相應(yīng)的約束來(lái)保持?jǐn)?shù)據(jù)的一致性。酒店管理的一些功能可以通過(guò)建立觸發(fā)器和存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),前臺(tái)應(yīng)用程序可直接調(diào)用數(shù)據(jù)庫(kù)中的觸發(fā)器和存儲(chǔ)過(guò)程。第13頁(yè)/共166頁(yè)
任務(wù)1:創(chuàng)建外鍵
目前創(chuàng)建的五張數(shù)據(jù)表中,入住信息表分別對(duì)房間信息表和證件類(lèi)型表有依賴關(guān)系,入住信息表中的房號(hào)字段必須與房間信息表的主鍵房號(hào)字段保持一致,入住信息表中的證件類(lèi)型字段必須與證件類(lèi)型表中的證件類(lèi)型字段保持一致。房間信息表對(duì)房間類(lèi)型表也有依賴關(guān)系,房間信息表中的類(lèi)型字段必須與房間類(lèi)型表中的房間類(lèi)型字段保持一致。這種數(shù)據(jù)一致性的要求,可以通過(guò)建立外鍵的方法來(lái)滿足。
下面我們來(lái)講述如何創(chuàng)建入住信息表的外鍵。第14頁(yè)/共166頁(yè)步驟
(1)在對(duì)象資源管理器中展開(kāi)表文件夾,選中“入住信息表”并展開(kāi),選中“鍵”文件夾,右鍵單擊后在彈出的快捷菜單中選擇“新建外鍵”,此時(shí)入住信息表會(huì)自動(dòng)被打開(kāi),同時(shí)打開(kāi)“外鍵關(guān)系”對(duì)話框,如圖5-11所示。
(2)點(diǎn)擊“表和列規(guī)范”屬性右側(cè)的“”按鈕,在彈出的“表和列”對(duì)話框中編輯外鍵,如圖5-12所示。主鍵表選擇“房間表”,字段選擇“房號(hào)”。外鍵表為“入住信息表”,字段為“房號(hào)”。第15頁(yè)/共166頁(yè)圖5-11外鍵關(guān)系第16頁(yè)/共166頁(yè)圖5-12表和列第17頁(yè)/共166頁(yè)
(3)點(diǎn)擊“確定”按鈕并關(guān)閉“外鍵關(guān)系”對(duì)話框。保存對(duì)入住信息表的修改。第18頁(yè)/共166頁(yè)任務(wù)2:創(chuàng)建觸發(fā)器
任務(wù)分析
酒店管理中的一些業(yè)務(wù)功能可以通過(guò)建立觸發(fā)器的方式來(lái)實(shí)現(xiàn)。比如,當(dāng)有客人入住酒店后,除了要向入住信息表中添加一條記錄之外,還需要修改房間表,將客人所入住房間的狀態(tài)更改為“營(yíng)業(yè)中”。
步驟
(1)新建查詢。點(diǎn)擊工具欄中的按鈕,新建一個(gè)查詢。數(shù)據(jù)庫(kù)選擇為“酒店管理”。第19頁(yè)/共166頁(yè)
(2)在查詢文件中創(chuàng)建“入住”觸發(fā)器,命令如下:
CREATETRIGGER入住
ON入住信息表
AFTERINSERT
AS
UPDATE房間表
SET狀態(tài)=‘營(yíng)業(yè)中’WHERE房號(hào)=(SELECT房號(hào)fromINSERTED)
(3)執(zhí)行以上觸發(fā)器命令。會(huì)出現(xiàn)提示消息“命令已成功完成”,如圖5-13所示。第20頁(yè)/共166頁(yè)圖5-13創(chuàng)建“入住”觸發(fā)器第21頁(yè)/共166頁(yè)
(4)參照步驟(1)至(3)創(chuàng)建“退房”觸發(fā)器,命令如下:
CREATETRIGGER退房
ON入住信息表
AFTER
UPDATE
AS
UPDATE房間表
SET狀態(tài)=‘空閑’WHERE房號(hào)=(SELECT房號(hào)fromINSERTED)
(5)執(zhí)行結(jié)果如圖5-14所示。第22頁(yè)/共166頁(yè)圖5-14“退房”觸發(fā)器的執(zhí)行結(jié)果第23頁(yè)/共166頁(yè)圖5-15查看觸發(fā)器
(6)在對(duì)象資源管理器中刷新數(shù)據(jù)庫(kù)??稍凇叭胱⌒畔⒈怼惫?jié)點(diǎn)下的“觸發(fā)器”節(jié)點(diǎn)中看到新創(chuàng)建的兩個(gè)觸發(fā)器,如圖5-15所示。第24頁(yè)/共166頁(yè)任務(wù)3:創(chuàng)建存儲(chǔ)過(guò)程
入住登記業(yè)務(wù)需要向入住信息表中插入記錄,也可能需要向客人信息表中插入記錄。對(duì)兩表的操作如有一項(xiàng)不成功,則需要回滾所有事務(wù)??梢詣?chuàng)建一個(gè)存儲(chǔ)過(guò)程來(lái)完成以上功能。
創(chuàng)建存儲(chǔ)過(guò)程方式可參考項(xiàng)目四中的任務(wù)4-1步驟(1)、(2),先新建一個(gè)查詢,然后錄入以下命令:
CREATEPROCEDURE入住登記
@姓名NVARCHAR(8),
@性別NVARCHAR(4),
@證件類(lèi)型NVARCHAR(20),
@證件號(hào)碼NVARCHAR(20),
@房號(hào)NVARCHAR(16),
@人數(shù)INT,
@入住日期DATETIME第25頁(yè)/共166頁(yè)AS
DECLARE@countsNVARCHAR(20)
BEGINTRY
BEGINTRAN
SELECT@counts=COUNT(*)FROM客人信息表WHERE證件號(hào)碼=@證件號(hào)碼
IF@counts=0
BEGIN
INSERTINTO客人信息表VALUES(@姓名,@性別,@證件類(lèi)型,@證件號(hào)碼)
END
INSERTINTO入住信息表(房號(hào),證件號(hào)碼,人數(shù),入住日期)VALUES(@房號(hào),@證件號(hào)碼,人數(shù),@入住日期)第26頁(yè)/共166頁(yè)
COMMITTRAN
ENDTRY
BEGINCATCH
IF@@trancount>0
BEGIN
ROLLBACKTRAN
END
ENDCATCH
創(chuàng)建存儲(chǔ)過(guò)程的命令執(zhí)行成功后,用以下命令執(zhí)行存儲(chǔ)過(guò)程,試驗(yàn)存儲(chǔ)過(guò)程的功能。
exec入住登記@姓名=‘張揚(yáng)’,@性別=‘女’,@證件類(lèi)型=‘軍官證’,@證件號(hào)碼=‘12345678’,@房號(hào)=‘A103’,@人數(shù)=2,@入住日期=‘2012-12-1’
執(zhí)行結(jié)果如圖5-16所示。第27頁(yè)/共166頁(yè)圖5-16提示消息第28頁(yè)/共166頁(yè)任務(wù)5-3創(chuàng)建酒店管理應(yīng)用程序
任務(wù)分析
酒店管理應(yīng)用程序是為了方便用戶對(duì)酒店管理數(shù)據(jù)庫(kù)的操作而開(kāi)發(fā)的前臺(tái)應(yīng)用程序。通過(guò)前臺(tái)應(yīng)用程序,可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行便捷的增、刪、改和查詢操作,并且不要求用戶了解數(shù)據(jù)庫(kù)的知識(shí)和使用技能。這里我們選用微軟公司的VisualStudio2008(簡(jiǎn)寫(xiě)為VS2008)作為開(kāi)發(fā)工具,開(kāi)發(fā)語(yǔ)言使用VB.net。
步驟
(1)啟動(dòng)VisualStudio2008。選擇開(kāi)始→程序→MicrosoftVisualStudio2008,即可打開(kāi)VS2008開(kāi)發(fā)環(huán)境,如圖5-17所示。在D盤(pán)上創(chuàng)建一個(gè)文件夾,命名為“酒店管理系統(tǒng)”。第29頁(yè)/共166頁(yè)圖5-17VS2008開(kāi)發(fā)環(huán)境第30頁(yè)/共166頁(yè)
(2)新建項(xiàng)目。選擇“文件”菜單→新建項(xiàng)目,打開(kāi)如圖5-18所示對(duì)話框。設(shè)置項(xiàng)目名稱(chēng)為“酒店管理”,位置選擇步驟(1)中文件夾所建的位置,點(diǎn)擊“確定”按鈕。
(3)為項(xiàng)目添加數(shù)據(jù)源。選擇“數(shù)據(jù)”→“添加新數(shù)據(jù)源”,打開(kāi)如圖5-19所示頁(yè)面。選中“數(shù)據(jù)庫(kù)”,點(diǎn)擊“下一步(N)”按鈕,將彈出“數(shù)據(jù)源配置向?qū)А表?yè)面,然后點(diǎn)擊“新建連接(C)”按鈕,如圖5-20所示。第31頁(yè)/共166頁(yè)圖5-18新建項(xiàng)目第32頁(yè)/共166頁(yè)圖5-19數(shù)據(jù)源配置向?qū)У?3頁(yè)/共166頁(yè)圖5-20選擇數(shù)據(jù)連接第34頁(yè)/共166頁(yè)
(4)在彈出的“添加連接”對(duì)話框中進(jìn)行設(shè)置?!胺?wù)器名”可選擇下拉列表中的服務(wù)器名,或輸入本機(jī)IP,如圖5-21所示?!暗卿浀椒?wù)器”選擇“使用SQLServer身份認(rèn)證(Q)”。輸入相應(yīng)用戶名和密碼(SQLServer安裝時(shí)設(shè)定的)。選擇“酒店管理”數(shù)據(jù)庫(kù),點(diǎn)擊“測(cè)試連接(T)”選項(xiàng),連接成功后點(diǎn)擊“確定”按鈕。
(5)可能會(huì)出現(xiàn)如圖5-22所示的詢問(wèn)頁(yè)面,選擇“是,在連接字符串中包含敏感數(shù)據(jù)(I)?!睓?,再點(diǎn)擊“下一步(N)”按鈕。第35頁(yè)/共166頁(yè)圖5-21添加連接第36頁(yè)/共166頁(yè)圖5-22是否包含敏感數(shù)據(jù)第37頁(yè)/共166頁(yè)圖5-23是否保存連接到配置文件
(6)打開(kāi)數(shù)據(jù)源配置向?qū)Ы缑?,選擇“是,將連接保存為(Y):”欄,如圖5-23所示。再點(diǎn)擊“下一步”按鈕。第38頁(yè)/共166頁(yè)
(7)在列出的數(shù)據(jù)庫(kù)對(duì)象中選擇“房間類(lèi)型表”的“房間類(lèi)型”字段和“證件類(lèi)型表”的“證件類(lèi)型”字段,完成數(shù)據(jù)源的添加,如圖5-24所示。
(8)創(chuàng)建第一個(gè)表單。創(chuàng)建好項(xiàng)目后進(jìn)入開(kāi)發(fā)環(huán)境,在右側(cè)的解決方案資源管理器中,選中“酒店管理系統(tǒng)”,單擊右鍵后在出現(xiàn)的快捷菜單中選擇“添加”→“新建項(xiàng)”,將彈出“添加新項(xiàng)—酒店管理”對(duì)話框?!邦?lèi)別”選擇“WindowsForms”,模板選擇“‘關(guān)于’框”,名稱(chēng)設(shè)置為“歡迎.vb”,如圖5-25所示。第39頁(yè)/共166頁(yè)圖5-24選擇數(shù)據(jù)庫(kù)對(duì)象第40頁(yè)/共166頁(yè)圖5-25添加新項(xiàng)第41頁(yè)/共166頁(yè)
(9)點(diǎn)擊“添加”按鈕,VS2008會(huì)自動(dòng)創(chuàng)建一個(gè)“關(guān)于”的窗體。將窗體上Name屬性為“LabelProductName”的標(biāo)簽的Text屬性設(shè)置為“小型酒店管理系統(tǒng)”;將“LabelVersion”標(biāo)簽的Text屬性設(shè)置為“V1.0”;將“LabelCopyright”標(biāo)簽的Text屬性設(shè)置為“Copyright@”;將“LabelCompanyName”標(biāo)簽的Text屬性設(shè)置為“蘇州信息職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系”;將“TextBoxDescription”的文本框控件的Text屬性設(shè)置為“歡迎光臨XXX酒店”。展開(kāi)Font屬性,其中的Name屬性選擇“華文隸書(shū)”,Size屬性設(shè)置為20。完成后的效果如圖5-26所示。第42頁(yè)/共166頁(yè)圖5-26完成效果第43頁(yè)/共166頁(yè)
(10)雙擊窗體空白處,進(jìn)入命令窗口,刪除“歡迎_Load”事件下的所有命令。關(guān)閉命令窗口,保存并運(yùn)行歡迎窗體。第44頁(yè)/共166頁(yè)任務(wù)5-4創(chuàng)建主界面窗體
任務(wù)分析
主界面是進(jìn)入系統(tǒng)后的第二個(gè)界面,在這個(gè)界面上,可以看到本系統(tǒng)的所有菜單,選擇某一菜單即可進(jìn)入具體的功能。
步驟
(1)新建窗體。新建一個(gè)窗體,類(lèi)型選擇“WindowsForms”,模板選擇“Windows窗體”,如圖5-27所示。名稱(chēng)設(shè)置為“首頁(yè).vb”,點(diǎn)擊“添加(A)”按鈕。第45頁(yè)/共166頁(yè)圖5-27添加新項(xiàng)第46頁(yè)/共166頁(yè)
(2)進(jìn)入首頁(yè)窗體的設(shè)計(jì)視圖后,在上側(cè)解決方案資源管理器中,選中“酒店管理”項(xiàng)目,單擊右鍵,選擇“屬性”。在彈出的屬性對(duì)話頁(yè)中,“啟動(dòng)窗體”一項(xiàng)選擇“首頁(yè)”,如圖5-28所示。保存后關(guān)閉屬性頁(yè)。
(3)創(chuàng)建菜單。在VS2008主界面左側(cè)工具箱中展開(kāi)“菜單和工具欄”,拖曳MenuStrip至首頁(yè)窗體上,如圖5-29所示。第47頁(yè)/共166頁(yè)圖5-28屬性頁(yè)第48頁(yè)/共166頁(yè)圖5-29創(chuàng)建菜單第49頁(yè)/共166頁(yè)圖5-30客房服務(wù)菜單
(4)鍵入第一個(gè)主菜單名稱(chēng)“客房服務(wù)”,在其下分別鍵入兩個(gè)子菜單“入住登記”和“退房登記”,如圖5-30所示。第50頁(yè)/共166頁(yè)圖5-31客房管理菜單
(5)按同樣方法輸入“客房管理”及其子菜單,如圖5-31所示,以及“客人信息管理”及其子菜單,如圖5-32所示。第51頁(yè)/共166頁(yè)
圖5-32客人信息管理菜單第52頁(yè)/共166頁(yè)圖5-33退出菜單
(6)鍵入“退出”菜單,如圖5-33所示。第53頁(yè)/共166頁(yè)
(7)雙擊頁(yè)面空白處,進(jìn)入命令頁(yè)。在首頁(yè)_Load事件中添加如下命令:
PrivateSub首頁(yè)_Load(ByValsenderAsSystem.Object,ByVale
AsSystem.EventArgs)HandlesMyBase.Load
歡迎.ShowDialog()‘加載入住登記窗體
EndSub
(8)回到首頁(yè)的設(shè)計(jì)頁(yè),雙擊“入住登記”菜單,進(jìn)入入住登記菜單的命令框架,添加以下命令中所圈出的一行命令,其功能為單擊“入住登記”菜單,打開(kāi)入住登記的窗體
界面:第54頁(yè)/共166頁(yè)任務(wù)5-5創(chuàng)建入住登記窗體
任務(wù)分析
入住登記窗體具有完成填寫(xiě)客人信息、選擇房間入住的功能。客人如曾經(jīng)入住過(guò)該酒店,則可以通過(guò)姓名查找到信息,否則需填寫(xiě)性別、身份證等信息。選擇房間類(lèi)型后,相應(yīng)類(lèi)型的房間出現(xiàn)在房間號(hào)列表中供客人選擇,并顯示房間的價(jià)格。確定后,將入住信息添加到數(shù)據(jù)庫(kù)中。
步驟
(1)新建一個(gè)窗體,命名為“入住登記”,窗體界面布局如圖5-34所示。窗體中各控件的說(shuō)明見(jiàn)表5-1。第55頁(yè)/共166頁(yè)圖5-34入住登記窗體第56頁(yè)/共166頁(yè)第57頁(yè)/共166頁(yè)
(2)給cbType(證件類(lèi)型組合框)、cbRoomType(房間類(lèi)型組合框)綁定數(shù)據(jù)源。
在工具箱中展開(kāi)“數(shù)據(jù)”欄,拖曳一個(gè)BindSource控件至窗體上。查看屬性面板,BindingSource1的DataSource屬性選擇“其他數(shù)據(jù)源”→“項(xiàng)目數(shù)據(jù)源”→“酒店管理DataSet”。DataMember屬性選擇“證件類(lèi)型表”,如圖5-35所示。
(3)在窗體上,選中“cbType”,單擊右上方的按鈕,展開(kāi)菜單,“數(shù)據(jù)源”選擇“BindingSource1”,“顯示成員”選擇“證件類(lèi)型”,“值成員”選擇“證件類(lèi)型”,如圖5-36所示。第58頁(yè)/共166頁(yè)圖5-35BindingSource1綁定數(shù)據(jù)源第59頁(yè)/共166頁(yè)圖5-36cbType組合框綁定數(shù)據(jù)源第60頁(yè)/共166頁(yè)圖5-37cbRoomType綁定數(shù)據(jù)源
(4)?cbRoomType房間類(lèi)型組合框的數(shù)據(jù)綁定方法同上,參照?qǐng)D5-37進(jìn)行操作。第61頁(yè)/共166頁(yè)圖5-38BindingSource2綁定數(shù)據(jù)源
(5)添加BindingSource控件并設(shè)置其屬性,如圖5-38所示。第62頁(yè)/共166頁(yè)
(6)添加引用。在窗體空白處雙擊,進(jìn)入命令頁(yè),在命令最上方添加對(duì)SQL名稱(chēng)控件的引用:
ImportsSystem.Data.SqlClient
PublicClass入住登記
(7)定義公共變量。主要包括大部分事件都需要使用到的數(shù)據(jù)庫(kù)連接對(duì)象、數(shù)據(jù)適配器和數(shù)據(jù)集。
PublicClass入住登記
‘定義數(shù)據(jù)庫(kù)連接
DimconnAsNewSqlConnection(“DataSource=;InitialCatalog=酒店管理;userid=sa;password=123;”)
’定義數(shù)據(jù)適配器
DimdaAsSqlDataAdapter=NewSqlDataAdapter()
‘定義數(shù)據(jù)集
DimdsAsDataSet=NewDataSet()第63頁(yè)/共166頁(yè)
(8)添加按姓名查找客人信息的命令??紤]到可能有同名的客人存在,在輸入姓名后,先將查找的證件號(hào)碼添加到證件號(hào)碼組合框中(可能有多個(gè)),如在其中有當(dāng)前客人的信息,則可以選擇該證件號(hào)碼,同時(shí),自動(dòng)更正性別和證件類(lèi)型。
命令主要分兩部分。第一部分寫(xiě)在txtName(姓名文本框)的Leave事件中。在入住登記窗體的設(shè)計(jì)頁(yè)選中“txtName”,在屬性窗口中單擊按鈕查看txtName的所有事件。雙擊“Leave”事件,進(jìn)入txtName_Leave事件的命令框架,添加如下命令:第64頁(yè)/共166頁(yè)P(yáng)rivateSubtxtName_Leave(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlestxtName.Leave
'設(shè)置查詢命令屬性
da.SelectCommand=NewSqlCommand
da.SelectCommand.Connection=conn
da.SelectCommand.CommandText="select證件號(hào)碼from客人信息表where姓名='"+Trim(txtName.Text)+"'"
'打開(kāi)數(shù)據(jù)庫(kù)連接
conn.Open()
'填充DataSet對(duì)象
da.Fill(ds,0)
'清空證件號(hào)碼組合框下的列表項(xiàng)
cbNumber.Items.Clear()
DimiAsInteger=0第65頁(yè)/共166頁(yè)'將查詢到的證件號(hào)碼添加到組合框的列表中
DoWhilei<ds.Tables(0).Rows.Count
cbNumber.Items.Add(ds.Tables(0).Rows(i).Item("證件號(hào)碼"))
i=i+1
Loop
'清空數(shù)據(jù)集
ds.Clear()
'關(guān)閉數(shù)據(jù)庫(kù)連接
conn.Close()
EndSub第66頁(yè)/共166頁(yè)第二部分命令寫(xiě)在證件號(hào)碼組合框的SelectedIndexChanged事件中,在cbNumber控件的屬性中找到SelectedIndexChanged事件,雙擊進(jìn)入命令框架,編寫(xiě)如下命令:
PrivateSubcbNumber_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles
cbNumber.SelectedIndexChanged
‘設(shè)置查詢命令屬性
da.SelectCommand=NewSqlCommand
da.SelectCommand.Connection=conn
da.SelectCommand.CommandText=“select性別,證件類(lèi)型from客人信息表where證件號(hào)碼=’”+cbNumber.SelectedItem.ToString+“‘”
’打開(kāi)數(shù)據(jù)庫(kù)連接
conn.Open()
‘填充DataSet對(duì)象
da.Fill(ds,0)第67頁(yè)/共166頁(yè)'修正性別和證件類(lèi)型
Ifds.Tables(0).Rows.Count>0Then
Ifds.Tables(0).Rows(0).Item("性別")="男"Then
rbMale.Checked=True
rbFemale.Checked=False
Else
rbMale.Checked=False
rbFemale.Checked=True
EndIf
cbType.SelectedItem=ds.Tables(0).Rows(0).Item("證件類(lèi)型").ToString
EndIf
'清空數(shù)據(jù)集
ds.Clear()
'關(guān)閉數(shù)據(jù)庫(kù)連接
conn.Close()
EndSub第68頁(yè)/共166頁(yè)
(9)添加房間類(lèi)型和房間號(hào)級(jí)聯(lián)的命令。當(dāng)選擇了某一種房間類(lèi)型后,房間號(hào)組合框中僅出現(xiàn)該類(lèi)型的所有空閑房間。在cbRoomType(房間類(lèi)型組合框)的SelectedIndexChanged事件下編寫(xiě)如下命令:
PrivateSubcbRoomType_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlescbRoomType.SelectedIndexChanged
‘設(shè)置查詢命令屬性
da.SelectCommand=NewSqlCommand
da.SelectCommand.Connection=conn
da.SelectCommand.CommandText="select房號(hào)from房間表where類(lèi)型='"+cbRoomType.Text+"'and狀態(tài)='空閑'?"第69頁(yè)/共166頁(yè)
'打開(kāi)數(shù)據(jù)庫(kù)連接
conn.Open()
'填充DataSet對(duì)象
da.Fill(ds,0)
'清空房間號(hào)組合框下的列表項(xiàng)
cbRoom.Items.Clear()
'將查詢到的房間號(hào)添加到cbRoom的列表下
DimiAsInteger=0
DoWhilei<ds.Tables(0).Rows.Count
cbRoom.Items.Add(ds.Tables(0).Rows(i).Item("房號(hào)"))
i=i+1
Loop
'清空數(shù)據(jù)集
ds.Clear()
conn.Close()
EndSub第70頁(yè)/共166頁(yè)
(10)添加級(jí)聯(lián)顯示可選人數(shù)和房?jī)r(jià)的命令。當(dāng)選擇了房間后,會(huì)在lblPrice(房?jī)r(jià)標(biāo)簽)中顯示此房間的價(jià)格。如果選擇的是單人房,那么人數(shù)只能為1;其他房型,人數(shù)可為1或2。
PrivateSubcbRoom_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlescbRoom.SelectedIndexChanged
lblPrice.Text=“房?jī)r(jià):”
‘設(shè)置查詢命令屬性
da.SelectCommand=NewSqlCommand
da.SelectCommand.Connection=conn
da.SelectCommand.CommandText=“select房?jī)r(jià),類(lèi)型from房間表where房號(hào)=’”+cbRoom.Text+“‘”
'打開(kāi)數(shù)據(jù)庫(kù)連接第71頁(yè)/共166頁(yè)
conn.Open()
'填充DataSet對(duì)象
da.Fill(ds,0)
'定義變量price取選中房間的房?jī)r(jià),定義變量type取選中房間的類(lèi)型
DimpriceAsString=ds.Tables(0).Rows(0).Item("房?jī)r(jià)").ToString
DimtypeAsString=ds.Tables(0).Rows(0).Item("類(lèi)型").ToString
'清空人數(shù)組合框中的列表項(xiàng)
cbCount.Items.Clear()
'根據(jù)房間類(lèi)型給人數(shù)組合框添加列表項(xiàng)
Iftype="單人房"Then
cbCount.Items.Add("1")
Else
cbCount.Items.Add("1")
cbCount.Items.Add("2")
EndIf第72頁(yè)/共166頁(yè)
'顯示房?jī)r(jià)
lblPrice.Text+=price
'清空數(shù)據(jù)集
ds.Clear()
'關(guān)閉數(shù)據(jù)庫(kù)連接
conn.Close()
EndSub第73頁(yè)/共166頁(yè)
(11)添加“確定”按鈕命令?!按_定”按鈕的功能為向數(shù)據(jù)庫(kù)添加入住信息。因?yàn)橐言跀?shù)據(jù)庫(kù)中創(chuàng)建了名為“入住登記”的存儲(chǔ)過(guò)程,因此在這里,只要調(diào)用該存儲(chǔ)過(guò)程即可實(shí)現(xiàn)該功能。雙擊“確定”按鈕,進(jìn)入btnOK_Click事件框架,編寫(xiě)命令如下:
PrivateSubbtnOK_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnOK.Click
‘定義變量讀取入住登記信息(姓名,性別,證件類(lèi)型,證件號(hào)碼,房號(hào),人數(shù),入住日期)
DimnameAsString=txtName.Text
DimsexAsString
DimtypeAsString=cbType.Text
DimnumberAsString=cbNumber.Text第74頁(yè)/共166頁(yè)
DimroomAsString=cbRoom.Text
DimcountAsInteger=Val(cbCount.Text)
Dimin_dateAsDate=Now.Date
‘判斷性別
IfrbMale.Checked=TrueThen
sex=“男”
Else
sex="女"
EndIf
'設(shè)置查詢命令屬性
da.SelectCommand=NewSqlCommand
da.SelectCommand.Connection=conn
'指定命令類(lèi)型為存儲(chǔ)過(guò)程第75頁(yè)/共166頁(yè)
da.SelectCommand.CommandType=CommandType.StoredProcedure
'指定存儲(chǔ)過(guò)程名為“入住登記”
da.SelectCommand.CommandText="入住登記"
'指定存儲(chǔ)過(guò)程參數(shù)值
da.SelectCommand.Parameters.Add("@姓名",SqlDbType.VarChar,8).Value=name
da.SelectCommand.Parameters.Add("@性別",SqlDbType.VarChar,4).Value=sex
da.SelectCommand.Parameters.Add("@證件類(lèi)型",SqlDbType.VarChar,20).Value=type
da.SelectCommand.Parameters.Add("@證件號(hào)碼",SqlDbType.VarChar,20).Value=number
da.SelectCommand.Parameters.Add("@房號(hào)",SqlDbType.VarChar,16).Value=room
da.SelectCommand.Parameters.Add("@人數(shù)",SqlDbType.Int).Value=count第76頁(yè)/共166頁(yè)
da.SelectCommand.Parameters.Add(“@入住日期”,SqlDbType.DateTime).Value=in_date
‘填充數(shù)據(jù)集
Try
da.Fill(ds)
MsgBox(“入住登記完成,您的房間號(hào)為”+room)
CatchexAsException
MsgBox(ex)
EndTry
'清空數(shù)據(jù)集
ds.Clear()
'清空各輸入項(xiàng)
txtName.Text=""
cbNumber.Items.Clear()第77頁(yè)/共166頁(yè)
cbNumber.Text=“”
cbRoom.Items.Clear()
cbRoom.Text=“”
cbCount.Items.Clear()
cbCount.Text=“”
EndSub
(12)添加“關(guān)閉”按鈕事件命令:
PrivateSubbtnCancel_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnCancel.Click
Me.Close()
EndSub第78頁(yè)/共166頁(yè)
(13)將啟動(dòng)窗體設(shè)置為“入住登記”,運(yùn)行,測(cè)試入住登記的功能。這時(shí)需輸入姓名,選擇性別、證件類(lèi)型,輸入證件號(hào)碼,選擇房間類(lèi)型、房間號(hào)、人數(shù),房?jī)r(jià)將會(huì)自動(dòng)顯示,如圖5-39所示。第79頁(yè)/共166頁(yè)圖5-39入住登記窗體運(yùn)行第80頁(yè)/共166頁(yè)圖5-40提示信息
(14)點(diǎn)擊“確定”按鈕,提示入住登記完成,并提示房間號(hào),如圖5-40所示。第81頁(yè)/共166頁(yè)圖5-41老用戶登記
(15)點(diǎn)擊“確定”按鈕,會(huì)自動(dòng)清空輸入項(xiàng),方便填寫(xiě)下一個(gè)入住信息。此時(shí)若輸入一個(gè)入住過(guò)的客人姓名,則會(huì)在證件號(hào)碼列表中出現(xiàn)該客人的身份證號(hào)碼,方便用戶輸入,如圖5-41所示。第82頁(yè)/共166頁(yè)任務(wù)5-6創(chuàng)建退房登記窗體
任務(wù)分析
退房登記窗體主要完成退房功能。選擇要退房的房間號(hào),可顯示當(dāng)前房間的類(lèi)型、已住的天數(shù)和房費(fèi)。點(diǎn)擊“確定”按鈕退房后,修改入住信息表,補(bǔ)充該房間的退房日期和房費(fèi)信息,并修改房間表中該房間的狀態(tài)為“空閑”。
步驟
(1)新建一個(gè)窗體,命名為“退房登記”。窗體界面布局如圖5-42所示。窗體中各控件的說(shuō)明見(jiàn)表5-2。第83頁(yè)/共166頁(yè)圖5-42退房登記窗體第84頁(yè)/共166頁(yè)第85頁(yè)/共166頁(yè)
(2)添加引用。
ImportsSystem.Data.SqlClient
PublicClass退房登記
(3)定義公共變量。
PublicClass退房登記
‘定義數(shù)據(jù)庫(kù)連接
DimconnAsNewSqlConnection(“DataSource=;InitialCatalog=酒店管理;userid=sa;password=123;”)
’定義數(shù)據(jù)適配器
DimcommAsSqlCommand=NewSqlCommand
‘定義數(shù)據(jù)集
DimdrAsSqlDataReader第86頁(yè)/共166頁(yè)‘定義入住日期變量
Dimin_dateAsDate
’定義房?jī)r(jià)變量
DimpriceAsDouble
(4)編寫(xiě)窗體加載時(shí)綁定數(shù)據(jù)到cbRoom(房間號(hào)組合框)的命令。cbRoom中需要綁定所有營(yíng)業(yè)中的房間號(hào)供選擇,在窗體的Load事件下編寫(xiě)如下命令:
PrivateSub退房登記_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
‘設(shè)置查詢命令屬性
comm.Connection=conn
comm.CommandText=“select房號(hào)from房間表where狀態(tài)=’營(yíng)業(yè)中‘”
conn.Open()第87頁(yè)/共166頁(yè)
'執(zhí)行查詢
dr=comm.ExecuteReader
DimiAsInteger=0
'循環(huán)讀取查詢結(jié)果并賦值給cbRoom(房間號(hào)組合框)
Whiledr.Read
cbRoom.Items.Add(dr(i))
EndWhile
'關(guān)閉數(shù)據(jù)讀取
dr.Close()
'關(guān)閉數(shù)據(jù)庫(kù)連接
conn.Close()
EndSub第88頁(yè)/共166頁(yè)
(5)編寫(xiě)根據(jù)房號(hào)顯示入住信息的命令。選擇房號(hào)后,根據(jù)房號(hào)查詢當(dāng)前房間的類(lèi)型、入住天數(shù)、房?jī)r(jià)。
PrivateSubcbRoom_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlescbRoom.SelectedIndexChanged
‘設(shè)置提示標(biāo)簽的文本
lblRoomType.Text=“房間類(lèi)型:”
lblDay.Text=“入住天數(shù):”
lblPrice.Text=“房?jī)r(jià):”
’設(shè)置查詢命令屬性
comm.Connection=conn
comm.CommandText=“select類(lèi)型,入住日期,房?jī)r(jià)”&_
“from房間表,入住信息表”&_
“where房間表.房號(hào)=入住信息表.房號(hào)and
房間表.房號(hào)="+cbRoom.Text+"'"第89頁(yè)/共166頁(yè)
'打開(kāi)數(shù)據(jù)庫(kù)連接
conn.Open()
'執(zhí)行查詢
dr=comm.ExecuteReader
'讀取查詢結(jié)果
Ifdr.ReadThen
in_date=dr(1).ToString'入住日期
price=dr(2).ToString
lblRoomType.Text+=dr(0).ToString'房間類(lèi)型
lblDay.Text+=Str(DateDiff("d",in_date,Now.Date))'入住天數(shù)=當(dāng)天日期-入住日期
lblPrice.Text+=price.ToString+"元/天*"+Str(DateDiff("d",in_date,Now.Date))'房費(fèi)=房?jī)r(jià)*天數(shù)
EndIf
dr.Close()
conn.Close()
EndSub第90頁(yè)/共166頁(yè)
(6)添加“確定”按鈕命令。點(diǎn)擊“確定”按鈕即完成退房,之后需要修改入住信息表,補(bǔ)充退房日期和房費(fèi)。命令如下:
PrivateSubbtnOK_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnOK.Click
price=price*DateDiff(“d”,in_date,Now.Date)
‘設(shè)置查詢命令屬性
comm.Connection=conn
comm.CommandText=“update入住信息表set退房日期=”“+Now.Date&_
”“,房費(fèi)=”+price.ToString&_
"where房號(hào)=""+cbRoom.Text+""第91頁(yè)/共166頁(yè)
‘打開(kāi)數(shù)據(jù)庫(kù)連接
conn.Open()
’執(zhí)行查詢
Try
comm.ExecuteNonQuery()
MsgBox(“已退房,請(qǐng)交費(fèi)”+price.ToString+“元”)
CatchexAsException
MsgBox(ex)
EndTry
EndSub
(7)添加“關(guān)閉”按鈕命令:
PrivateSubbtnCancel_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnCancel.Click
Me.Close()
EndSub第92頁(yè)/共166頁(yè)圖5-43選擇房間
(8)將項(xiàng)目的啟動(dòng)窗體設(shè)置為“退房登記”并運(yùn)行,測(cè)試退房登記的功能。房間號(hào)列表下為所有營(yíng)業(yè)中的房間號(hào),如圖5-43所示。第93頁(yè)/共166頁(yè)圖5-44顯示入住信息
(9)選擇要退房的房間號(hào)后,在下方顯示房間的入住信息,如圖5-44所示。第94頁(yè)/共166頁(yè)圖5-45退房提示信息
(10)點(diǎn)擊“確定”按鈕退房后,提示退房成功,并提示所要支付的費(fèi)用,如圖5-45所示。第95頁(yè)/共166頁(yè)任務(wù)5-7創(chuàng)建客房信息修改窗體
任務(wù)分析
客房信息修改窗體的功能包括新增客房、修改已有客房和刪除已有客房,但狀態(tài)為“營(yíng)業(yè)中”的客房信息不能被修改和刪除。
步驟
(1)新建一個(gè)窗體,命名為“客房信息修改”。窗體界面布局如圖5-46所示,窗體中各控件的說(shuō)明見(jiàn)表5-3。第96頁(yè)/共166頁(yè)圖5-46客房信息修改窗體第97頁(yè)/共166頁(yè)第98頁(yè)/共166頁(yè)圖5-47BindingNavigator任務(wù)
(2)刪除導(dǎo)航的添加功能。導(dǎo)航本身具備添加、刪除的功能。添加功能通過(guò)編寫(xiě)命令來(lái)實(shí)現(xiàn),因此需要把導(dǎo)航上的“添加”按鈕刪除。
點(diǎn)擊導(dǎo)航右上方的“任務(wù)”按鈕,展開(kāi)任務(wù)菜單,單擊“編輯項(xiàng)”,如圖5-47所示。第99頁(yè)/共166頁(yè)圖5-48項(xiàng)集合編輯器在彈出的“項(xiàng)集合編輯器”中選中BindingNavigatorAddNewItem,單擊“刪除”按鈕,即可將其刪除,如圖5-48所示。第100頁(yè)/共166頁(yè)圖5-49cbRoomType綁定數(shù)據(jù)源
(3)為cbRoomType(房間類(lèi)型組合框)添加數(shù)據(jù)綁定。添加一個(gè)BindingSource控件,其“數(shù)據(jù)源”屬性選擇“BindingSource1”,“顯示成員”屬性選擇“房間類(lèi)型”,如圖5-49所示。第101頁(yè)/共166頁(yè)
(4)在命令中引用名稱(chēng)控件和定義公共變量。在窗體空白處雙擊進(jìn)入命令框架,編寫(xiě)如下命令:
ImportsSystem.Data.SqlClient
PublicClass客房信息修改
‘定義數(shù)據(jù)庫(kù)連接
DimconnAsNewSqlConnection(“DataSource=;InitialCatalog=酒店管理;userid=sa;password=123;”)
’定義查詢字符串
DimsqlstrAsString=“select房號(hào),類(lèi)型,房?jī)r(jià)from房間表where狀態(tài)=‘空閑’”
‘定義數(shù)據(jù)適配器
DimdaAsNewSqlDataAdapter(sqlstr,conn)
’定義數(shù)據(jù)集
DimdsAsNewDataSet
‘使用sqlcommandBuilder構(gòu)造數(shù)據(jù)適配器
DimbuildAsSqlCommandBuilder=NewSqlCommandBuilder(da)第102頁(yè)/共166頁(yè)
(5)編寫(xiě)窗體加載事件的命令。窗體加載時(shí),綁定導(dǎo)航控件、數(shù)據(jù)表格控件和房間號(hào)文本框等控件,顯示房間表中的記錄。
PrivateSub客房信息修改_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
‘TODO:這行命令將數(shù)據(jù)加載到表“酒店管理DataSet.房間類(lèi)型表”中??梢愿鶕?jù)需要移動(dòng)或移除它。
Me.房間類(lèi)型表TableAdapter.Fill(Me.酒店管理DataSet.房間類(lèi)型表)
’打開(kāi)數(shù)據(jù)庫(kù)連接
conn.Open()
‘?dāng)?shù)據(jù)適配器da執(zhí)行查詢填充數(shù)據(jù)集ds
da.Fill(ds,“room”)
'定義ds的主鍵第103頁(yè)/共166頁(yè)
Dimkeys(1)AsDataColumn
keys(0)=ds.Tables(“room”).Columns(“房號(hào)”)
ds.Tables(“room").PrimaryKey=keys
'數(shù)據(jù)綁定dgvRoom和導(dǎo)航
bsRoom.DataSource=ds
bsRoom.DataMember=ds.Tables("room").TableName
dgvRoom.DataSource=bsRoom
bnRoom.BindingSource=bsRoom
'數(shù)據(jù)綁定房間號(hào)等控件
txtRoom.DataBindings.Add("Text",bsRoom,"房號(hào)")
cbRoomType.DataBindings.Add("Text",bsRoom,"類(lèi)型")
txtPrice.DataBindings.Add("Text",bsRoom,"房?jī)r(jià)")
'設(shè)置導(dǎo)航控件中的刪除按鈕不可用
bnRoom.Items("BindingNavigatorDeleteItem").Visible=False
'給導(dǎo)航控件添加自定義的刪除按鈕
bnRoom.Items.Add("刪除",Nothing,AddressOfabc)
EndSub第104頁(yè)/共166頁(yè)
(6)編寫(xiě)“自定義刪除”按鈕的過(guò)程命令:
‘自定義刪除按鈕
PrivateSubabc(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)
IfMessageBox.Show(“是否要?jiǎng)h除這條記錄?”,“”,MessageBoxButtons.YesNo)=Windows.Forms.DialogResult.YesThen
bnRoom.BindingSource.RemoveCurrent()
EndIf
EndSub第105頁(yè)/共166頁(yè)
(7)編寫(xiě)“添加”按鈕的單擊事件命令。單擊“添加”按鈕后,清空txtRoom、cbRoomType、txtPrice控件中的內(nèi)容,按鈕的顯示文本變成“保存”。在txtRoom、cbRoomType、txtPrice中填入內(nèi)容后,單擊“保存”按鈕,將完成添加一條新記錄的功能。
PrivateSubbtnAdd_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnAdd.Click
IfbtnAdd.Text=“添加”Then‘判斷是“添加”還是“保存”
txtRoom.Enabled=True
txtRoom.Text=“”
cbRoomType.Text=“”
txtPrice.Text=“”
btnAdd.Text=“保存”
ElseIfbtnAdd.Text="保存"Then第106頁(yè)/共166頁(yè)
‘定義數(shù)據(jù)行存放要添加的數(shù)據(jù)
DimrowAsDataRow=ds.Tables(“room”).NewRow
row(“房號(hào)”)=txtRoom.Text
row(“類(lèi)型”)=cbRoomType.Text
row(“房?jī)r(jià)”)=txtPrice.Text
ds.Tables(“room”).Rows.Add(row)
’更新數(shù)據(jù)適配器,將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)
Try
da.Update(ds,“room”)
btnAdd.Text=“添加”
MsgBox(“添加成功!”)
da.Fill(ds,"room")
txtRoom.Enabled=False第107頁(yè)/共166頁(yè)
CatchexAsException
MsgBox(ex)
EndTry
EndIf
EndSub第108頁(yè)/共166頁(yè)
(8)編寫(xiě)“修改”按鈕單擊事件命令。修改了某一條記錄后,單擊“修改”按鈕,將把對(duì)該條數(shù)據(jù)的更新內(nèi)容寫(xiě)入數(shù)據(jù)庫(kù),同時(shí)刷新數(shù)據(jù)表格,即可顯示更新后的數(shù)據(jù)。
PrivateSubtxtUpdate_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlestxtUpdate.Click
‘取當(dāng)前數(shù)據(jù)的行號(hào)
DimIAsInteger=dgvRoom.CurrentRow.Index
’定義數(shù)據(jù)行指向當(dāng)前記錄
DimrowAsDataRow
row=ds.Tables(“room”).Rows(i)
‘更新當(dāng)前記錄
row.BeginEdit()
row(“類(lèi)型”)=cbRoomType.Text
row(“房?jī)r(jià)”)=txtPrice.Text
row.EndEdit()
’更新數(shù)據(jù)適配器,將數(shù)據(jù)更新至數(shù)據(jù)庫(kù)
Try第109頁(yè)/共166頁(yè)
da.Update(ds,“room”)
MsgBox(“修改成功!”)
dgvRoom.Refresh()
CatchexAsException
MsgBox(ex)
EndTry
EndSub
(9)添加“關(guān)閉”按鈕的單擊事件命令。在關(guān)閉窗體的同時(shí),也要把在窗體加載事件中打開(kāi)的數(shù)據(jù)庫(kù)連接關(guān)閉。
PrivateSubbtnCancel_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnCancel.Click
conn.Close()
Me.Close()
EndSub第110頁(yè)/共166頁(yè)
(10)將項(xiàng)目的啟動(dòng)窗體設(shè)置為“客房信息修改”并運(yùn)行,測(cè)試客房信息修改的功能,如圖5-50所示。數(shù)據(jù)表格中顯示空閑的房間信息,通過(guò)導(dǎo)航可查看每一條記錄,此時(shí)房號(hào)文本框、房間類(lèi)型組合框、房?jī)r(jià)文本框也跟隨導(dǎo)航顯示每一條記錄的信息,同時(shí)房間號(hào)作為房間表的主鍵是不可編輯狀態(tài),以防止誤操作。
(11)點(diǎn)擊“添加”按鈕,房間號(hào)文本框即可編輯,輸入要添加的房間信息,點(diǎn)擊“保存”按鈕,提示新房間添加成功,如圖5-51所示。而且可以在數(shù)據(jù)表格中查看到新添加的記錄,如圖5-52所示。第111頁(yè)/共166頁(yè)圖5-50客房信息修改窗體運(yùn)行第112頁(yè)/共166頁(yè)圖5-51提示第113頁(yè)/共166頁(yè)圖5-52添加新記錄第114頁(yè)/共166頁(yè)圖5-53修改客房信息
(12)選中一條要修改的記錄,更改其房間類(lèi)型或房?jī)r(jià)后,點(diǎn)擊“修改”按鈕,提示修改成功,并可以在數(shù)據(jù)表格中顯示更新后的數(shù)據(jù),如圖5-53所示。第115頁(yè)/共166頁(yè)任務(wù)5-8創(chuàng)建客房查詢窗體
任務(wù)分析
客房查詢窗體的功能主要是讓用戶可以依據(jù)房間類(lèi)型、房間號(hào)、房間狀態(tài)來(lái)查詢房間的信息。例如:查詢營(yíng)業(yè)中的房號(hào)以A開(kāi)頭的單人房。本窗體對(duì)數(shù)據(jù)庫(kù)的操作基本是查詢操作。第116頁(yè)/共166頁(yè)步驟
(1)新建一個(gè)窗體,命名為“客房查詢”。窗體界面布局如圖5-54所示,窗體中各控件的說(shuō)明見(jiàn)表5-4。
(2)給cbRoomType(房間類(lèi)型組合框)綁定數(shù)據(jù)源,過(guò)程略(參考任務(wù)5-5步驟(2))。
(3)給cbStatus(狀態(tài)組合框)添加靜態(tài)項(xiàng)。選中“cbStatus”,查看屬性。點(diǎn)擊items屬性旁按鈕,在字符串集合編輯器中輸入“空閑”、“營(yíng)業(yè)中”兩項(xiàng)。如圖5-55所示。第117頁(yè)/共166頁(yè)圖5-54客房查詢窗體第118頁(yè)/共166頁(yè)第119頁(yè)/共166頁(yè)圖5-55字符串集合編輯器第120頁(yè)/共166頁(yè)
(4)在命令中引用名稱(chēng)控件和定義公共變量。在窗體空白處雙擊進(jìn)入命令窗口。
ImportsSystem.Data.SqlClient
PublicClass客房查詢
‘定義數(shù)據(jù)庫(kù)連接
DimconnAsNewSqlConnection(“DataSource=;InitialCatalog=酒店管理;userid=sa;password=123;”)
’定義數(shù)據(jù)適配器
DimdaAsSqlDataAdapter=NewSqlDataAdapter()
‘定義數(shù)據(jù)集
DimdsAsDataSet=NewDataSet()第121頁(yè)/共166頁(yè)
(5)添加窗體加載的事件命令。窗體加載時(shí),在數(shù)據(jù)表格控件中顯示所有的房間信息。命令如下:
PrivateSub客房查詢_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
‘TODO:這行命令將數(shù)據(jù)加載到表“酒店管理DataSet.房間類(lèi)型表”中。您可以根據(jù)需要移動(dòng)或刪除它。
Me.房間類(lèi)型表TableAdapter.Fill(Me.酒店管理DataSet.房間類(lèi)型表)
’設(shè)置查詢命令屬性
da.SelectCommand=NewSqlCommand
da.SelectCommand.Connection=conn
da.SelectCommand.CommandText=“select*from房間表”
‘打開(kāi)數(shù)據(jù)庫(kù)連接
conn.Open()第122頁(yè)/共166頁(yè)
'填充DataSet對(duì)象
da.Fill(ds,"room")
'綁定數(shù)據(jù)表格顯示用戶表信息
dgvRoom.DataSource=ds
dgvRoom.DataMember=ds.Tables("room").TableName
conn.Close()
EndSub第123頁(yè)/共166頁(yè)
(6)添加“查詢”按鈕單擊事件的命令。單擊“查詢”按鈕,能夠根據(jù)輸入的房間號(hào),選擇的房間類(lèi)型、狀態(tài)來(lái)查詢房間表,并將查詢結(jié)果顯示在數(shù)據(jù)表格中。
PrivateSubbtnQuery_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnQuery.Click
‘設(shè)置查詢命令屬性
da.SelectCommand=NewSqlCommand
da.SelectCommand.Connection=conn
’多條聯(lián)合查詢語(yǔ)句,where條件匹配采用模糊查詢的方法
da.SelectCommand.CommandText=“select*from房間表where類(lèi)型like‘%”+cbRommType.Text&_
"%'and房號(hào)like'%"+txtRoom.Text&_
"%'and狀態(tài)like'%"+cbStatus.Text+"%'"第124頁(yè)/共166頁(yè)
Label1.Text=da.SelectCommand.CommandText
conn.Open()
'清空數(shù)據(jù)集
ds.Clear()
'填充數(shù)據(jù)集
da.Fill(ds,"room")
'重新綁定數(shù)據(jù)表格顯示查詢結(jié)果
dgvRoom.DataSource=ds
dgvRoom.DataMember=ds.Tables("room").TableName
conn.Close()
EndSub第125頁(yè)/共166頁(yè)圖5-56客房查詢窗體運(yùn)行
(7)將項(xiàng)目的啟動(dòng)窗體設(shè)為“客房查詢”,運(yùn)行窗體,測(cè)試查詢功能。數(shù)據(jù)表格中顯示所有的客房信息,如圖5-56所示。第126頁(yè)/共166頁(yè)圖5-57查詢結(jié)果1
(8)輸入查詢條件后,點(diǎn)擊查詢按鈕,可查看到查詢結(jié)果。查詢條件可以只有一個(gè),也可以多個(gè)條件聯(lián)合查詢,如圖5-57、圖5-58所示。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書(shū)館管理計(jì)劃
- 胸痹針灸治療
- 看的技巧之預(yù)測(cè)顧客的需求
- 統(tǒng)編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)第24課《當(dāng)世界年紀(jì)還小的時(shí)候》精美課件
- 第14課 海峽兩岸的交往 教學(xué)設(shè)計(jì)-2023-2024學(xué)年浙江省部編版歷史與社會(huì)八年級(jí)下冊(cè)
- 財(cái)務(wù)報(bào)表知識(shí)培訓(xùn)課件
- 第六單元 中華民族的抗日戰(zhàn)爭(zhēng) 大單元教學(xué)設(shè)計(jì) 2023-2024學(xué)年部編版八年級(jí)歷史上學(xué)期
- 第四單元小數(shù)的意義和性質(zhì)(教學(xué)設(shè)計(jì))-2023-2024學(xué)年四年級(jí)下冊(cè)數(shù)學(xué)人教版
- 2025年迪慶道路運(yùn)輸從業(yè)資格考試系統(tǒng)
- 2025年周口貨運(yùn)從業(yè)資格證考試題及答案
- 精神科病人安全與治療管理制度
- 2024年外貿(mào)業(yè)務(wù)員個(gè)人年度工作總結(jié)
- 關(guān)愛(ài)留守兒童培訓(xùn)
- 品牌服飾行業(yè)快速消費(fèi)品庫(kù)存管理優(yōu)化方案
- 金融數(shù)學(xué)布朗運(yùn)動(dòng)
- 第三單元名著閱讀《經(jīng)典常談》課件 2023-2024學(xué)年統(tǒng)編版語(yǔ)文八年級(jí)下冊(cè)11.22
- 江西省上饒市余干縣沙港中學(xué)2024-2025學(xué)年八年級(jí)上學(xué)期競(jìng)賽生物學(xué)試卷(無(wú)答案)
- 淤地壩應(yīng)急處置
- 神經(jīng)外科主要治病
- 農(nóng)資打假監(jiān)管培訓(xùn)
- 2024年河南省公務(wù)員考試《行測(cè)》真題及答案解析
評(píng)論
0/150
提交評(píng)論