數(shù)據(jù)庫(kù)應(yīng)用項(xiàng)目化項(xiàng)目五酒店管理系統(tǒng)的開(kāi)發(fā)實(shí)訓(xùn)_第1頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用項(xiàng)目化項(xiàng)目五酒店管理系統(tǒng)的開(kāi)發(fā)實(shí)訓(xùn)_第2頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用項(xiàng)目化項(xiàng)目五酒店管理系統(tǒng)的開(kāi)發(fā)實(shí)訓(xùn)_第3頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用項(xiàng)目化項(xiàng)目五酒店管理系統(tǒng)的開(kāi)發(fā)實(shí)訓(xùn)_第4頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用項(xiàng)目化項(xiàng)目五酒店管理系統(tǒng)的開(kāi)發(fā)實(shí)訓(xùn)_第5頁(yè)
已閱讀5頁(yè),還剩161頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論