摘 要: 介紹了基于B/S模式開發(fā)會(huì)員管理系統(tǒng)" title="會(huì)員管理系統(tǒng)">會(huì)員管理系統(tǒng)" title="會(huì)員管理系統(tǒng)">會(huì)員管理系統(tǒng)Web應(yīng)用軟件的實(shí)現(xiàn)原理和關(guān)鍵技術(shù),提出了會(huì)員管理系統(tǒng)Web應(yīng)用軟件的設(shè)計(jì)方案,闡述了開發(fā)軟件所采用的ASP.NET技術(shù)及數(shù)據(jù)庫(kù)觸發(fā)器技術(shù)在Web應(yīng)用程序中的應(yīng)用,重點(diǎn)論述了根據(jù)實(shí)際問題設(shè)計(jì)數(shù)據(jù)庫(kù)觸發(fā)器的實(shí)現(xiàn)方法以及在軟件功能中設(shè)計(jì)實(shí)現(xiàn)相關(guān)數(shù)據(jù)庫(kù)觸發(fā)器的點(diǎn)火條件,實(shí)現(xiàn)觸發(fā)器的預(yù)定功能。使用ASP.NET + MS SQL技術(shù)開發(fā)完成該系統(tǒng)的全部功能。
關(guān)鍵詞: B/S結(jié)構(gòu);ASP.NET技術(shù);觸發(fā)器技術(shù);管理系統(tǒng);數(shù)據(jù)庫(kù)
健身房會(huì)員管理系統(tǒng)Web應(yīng)用軟件采用B/S體系結(jié)構(gòu),使用ASP.NET服務(wù)器腳本技術(shù)和數(shù)據(jù)庫(kù)觸發(fā)器技術(shù),以MS SQL Server 2000為后臺(tái)數(shù)據(jù)庫(kù),結(jié)合HTML語言和JavaScript 腳本語言設(shè)計(jì)開發(fā)會(huì)員管理功能模塊,實(shí)現(xiàn)會(huì)員卡管理、前臺(tái)刷卡等功能。
1 系統(tǒng)的設(shè)計(jì)思想
1.1 會(huì)員管理系統(tǒng)的基本結(jié)構(gòu)
采用B/S體系結(jié)構(gòu)。B/S結(jié)構(gòu)是一種由瀏覽器、Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器組成的3層模式,如圖1所示,基于TCP/IP協(xié)議,只需開發(fā)和維護(hù)服務(wù)器端應(yīng)用程序,無需開發(fā)客戶端程序。在這種模式下,由于數(shù)據(jù)存放在數(shù)據(jù)庫(kù)服務(wù)器上,用戶只需通過瀏覽器進(jìn)行交互操作提交表單,用Form表單的形式POST或GET的方法實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作請(qǐng)求。其工作過程為:當(dāng)用戶在瀏覽器上填好表單并提交HTTP請(qǐng)求時(shí),Web服務(wù)器根據(jù)表單內(nèi)容分析解釋瀏覽器請(qǐng)求,如果請(qǐng)求的內(nèi)容需要訪問數(shù)據(jù)庫(kù)服務(wù)器,則調(diào)用ADO.NET由它來完成這個(gè)操作,然后將結(jié)果返回Web服務(wù)器,Web服務(wù)器進(jìn)行格式處理后返回瀏覽器并顯示結(jié)果。
會(huì)員管理系統(tǒng)的運(yùn)行環(huán)境選擇Windows 2000 Server 為網(wǎng)絡(luò)服務(wù)器操作系統(tǒng)平臺(tái),Web服務(wù)器采用Windows 2000 Server 組件IIS(Internet Information Server).NET框架開發(fā)工具包(.NET Framework SDK)、Microsoft 數(shù)據(jù)庫(kù)訪問組件2.7 (MDAC2.7)。
數(shù)據(jù)庫(kù)服務(wù)器采用MS SQL Server 2000數(shù)據(jù)庫(kù)服務(wù)器軟件,有非常靈活和安全的權(quán)限系統(tǒng),數(shù)據(jù)類型豐富,可以設(shè)計(jì)最理想的數(shù)據(jù)結(jié)構(gòu)。
客戶瀏覽器操作系統(tǒng)平臺(tái)采用Windows XP,瀏覽器為IE 5.0或以上版本。
1.2 采用的關(guān)鍵技術(shù)
1.2.1 ASP.NET技術(shù)
ASP.NET是一種編程框架,它在Web服務(wù)器上運(yùn)行,動(dòng)態(tài)地生成和管理Web窗體頁(yè)。ASP.NET服務(wù)器端動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)是.NET框架的一部分,是一種以.NET框架為基礎(chǔ)開發(fā)網(wǎng)上應(yīng)用程序的全新模式,在這個(gè)新模式下采用VB.NET、C#等程序設(shè)計(jì)語言開發(fā)應(yīng)用程序。ASP.NET文件一般由2部分組成,第一部分是構(gòu)成頁(yè)面的HTML代碼,在代碼的第一行添加引用Code-behind(隱藏代碼)的語句,該語句指明調(diào)用的服務(wù)器程序的文件名,以文件擴(kuò)展名.aspx保存在IIS的發(fā)布目錄下;第二部分由VB.NET或C#語言構(gòu)成的服務(wù)器程序代碼,它本身不能運(yùn)行,由相應(yīng)的.aspx文件調(diào)用。若使用VB.NET編程,Code-behind文件擴(kuò)展名為.vb;使用C#編程,Code-behind文件擴(kuò)展名為.cs。使用Code-behind技術(shù)實(shí)現(xiàn)了服務(wù)器端程序和HTML代碼的徹底分離,使得程序結(jié)構(gòu)清晰。ASP.NET文件采用編譯后運(yùn)行的方式,經(jīng)過編譯后的頁(yè)面再次訪問時(shí)就直接運(yùn)行,運(yùn)行速度提高。本軟件使用C#作為編程語言。
ASP.NET的數(shù)據(jù)訪問機(jī)制是采用ADO(Activex Data Object).NET訪問數(shù)據(jù)庫(kù),它既能在與數(shù)據(jù)源連接的環(huán)境下工作,又能在斷開與數(shù)據(jù)庫(kù)連接的條件下工作。ADO.NET對(duì)象模型中有5個(gè)主要的組件,分別是Connection、Command、DataSet、 DataAdapter以及DataReader。其中DataSet數(shù)據(jù)集相當(dāng)于內(nèi)存中暫存的數(shù)據(jù)庫(kù),從數(shù)據(jù)源中獲取數(shù)據(jù)后就斷開了與數(shù)據(jù)源之間的連接。允許在DataSet中添加、刪除、修改、查詢、統(tǒng)計(jì)數(shù)據(jù)。DataAdapter作為DataSet 和數(shù)據(jù)源之間的橋接器,用于填充 DataSet和更新數(shù)據(jù)源。DataAdapter經(jīng)常和DataSet一起配合使用。
1.2.2 數(shù)據(jù)庫(kù)觸發(fā)器技術(shù)
觸發(fā)器是一種實(shí)施復(fù)雜的完整性約束的特殊存儲(chǔ)過程,當(dāng)對(duì)它所保護(hù)的數(shù)據(jù)進(jìn)行操作(包括插入、刪除、更新)時(shí)自動(dòng)激活,防止對(duì)數(shù)據(jù)進(jìn)行不正確、未授權(quán)或不一致的修改。SQL Server為每個(gè)觸發(fā)器創(chuàng)建2個(gè)專用表:inserted表和deleted表,這是2張邏輯表,由系統(tǒng)維護(hù),用戶不能直接對(duì)其進(jìn)行操作,存放在內(nèi)存中,邏輯表的數(shù)據(jù)結(jié)構(gòu)與被該觸發(fā)器作用的表的數(shù)據(jù)結(jié)構(gòu)相同。當(dāng)用戶對(duì)指定的表進(jìn)行操作(插入、刪除、更新)時(shí),SQL Server將自動(dòng)執(zhí)行在相應(yīng)觸發(fā)器中的SQL語句。觸發(fā)器工作完成后,這2張邏輯表即被刪除。本軟件創(chuàng)建3個(gè)觸發(fā)器。
1.3 會(huì)員管理系統(tǒng)的功能設(shè)計(jì)
會(huì)員的管理通過會(huì)員卡的方式進(jìn)行,系統(tǒng)功能設(shè)計(jì)如圖2所示。
1.4 數(shù)據(jù)庫(kù)的設(shè)計(jì)
1.4.1 數(shù)據(jù)表
根據(jù)系統(tǒng)管理的信息,建立用戶表,包括用戶名、權(quán)限、口令等字段;建立會(huì)員信息表,包含會(huì)員的基本信息及會(huì)員卡號(hào)、會(huì)員卡類型等信息;建立會(huì)員卡表,包含會(huì)員卡的基本信息且通過會(huì)員卡號(hào)與會(huì)員信息表建立一對(duì)一的關(guān)系;建立新會(huì)員卡表,包含卡種類、發(fā)行方式、發(fā)行量、開始號(hào)碼、價(jià)值等數(shù)據(jù)項(xiàng);建立新會(huì)員卡號(hào)表,定義各種類型會(huì)員卡的詳細(xì)卡號(hào);建立會(huì)員消費(fèi)明細(xì)表,定義消費(fèi)卡號(hào)、消費(fèi)開始及結(jié)束時(shí)間等字段;建立卡名稱、卡類型、國(guó)籍等字典數(shù)據(jù)表。
1.4.2 視圖
定義會(huì)員刷卡信息列表數(shù)據(jù)視圖。在會(huì)員信息表和會(huì)員卡表中以會(huì)員卡號(hào)且卡類型相同為條件,選擇導(dǎo)出必要的數(shù)據(jù)。
1.4.3 觸發(fā)器
(1)新卡號(hào)生成觸發(fā)器(Addno_trg):在新會(huì)員卡表(Me_NewCard_table)中建立新卡號(hào)生成觸發(fā)器,根據(jù)頁(yè)面表單中提供的卡初始卡號(hào)和數(shù)量點(diǎn)火觸發(fā)動(dòng)態(tài)生成結(jié)束卡號(hào),并將設(shè)置好的新會(huì)員卡的相關(guān)信息和該卡的所有已生成的連續(xù)卡號(hào)插入到新會(huì)員卡號(hào)表(Me_ NewCard_No_table)中。
(2)卡有效期生成觸發(fā)器(Getvalue_trg): 在會(huì)員卡表(MemberCard_Table)建立卡有效期生成觸發(fā)器,根據(jù)銷售的會(huì)員卡類型和銷售日期動(dòng)態(tài)生成卡有效期,并添入到會(huì)員卡表(MemberCard_Table)有效期字段(Me_Card _ValidDate)中。在觸發(fā)器定義的SQL語句中,使用DATEADD函數(shù),根據(jù)所銷售的會(huì)員卡類型生成卡有效期:若是年卡,則在銷售時(shí)間上加一年;若是半年卡,則在銷售時(shí)間上加六個(gè)月;季卡、月卡同理。同時(shí),從新會(huì)員卡設(shè)置表(Me_NewCard_table)刪除所銷售的相關(guān)會(huì)員卡卡號(hào),以保證卡號(hào)的一致性。
(3)會(huì)員卡有效期驗(yàn)證觸發(fā)器(CheckCard_trg):在會(huì)員刷卡明細(xì)表(Me_ConsumDetail_table)上建立會(huì)員卡有效期驗(yàn)證觸發(fā)器。該觸發(fā)器是一個(gè)插入操作觸發(fā)器,根據(jù)會(huì)員卡號(hào)查詢會(huì)員卡表,讀取該會(huì)員卡的卡類型、卡有效期、消費(fèi)次數(shù)等信息。將會(huì)員卡有效期驗(yàn)證觸發(fā)器插入到會(huì)員刷卡明細(xì)表時(shí),執(zhí)行檢查會(huì)員卡有效期的SQL語句??ㄓ行隍?yàn)證是利用SQL Server提供的事務(wù)管理功能實(shí)現(xiàn),通過事務(wù)控制語句rollback transaction保證當(dāng)會(huì)員卡的有效期過期時(shí),調(diào)用raiserror函數(shù)給出過期提示。如果卡類型是次卡或是其他類型的卡,累計(jì)消費(fèi)次數(shù)大于卡的額定次數(shù)時(shí),將根據(jù)消費(fèi)刷卡時(shí)獲取的時(shí)間與卡有效時(shí)間比較,大于有效期時(shí)將執(zhí)行卡有效期的SQL語句,拋出已過期異常信息。
2 系統(tǒng)主要功能的實(shí)現(xiàn)方法
2.1 用戶登錄認(rèn)證功能
根據(jù)用戶的工作性質(zhì),權(quán)限分為5級(jí),用戶名與相應(yīng)權(quán)限綁定。當(dāng)用戶使用用戶名和口令登錄系統(tǒng)時(shí),根據(jù)用戶輸入的登錄信息,在數(shù)據(jù)庫(kù)的用戶表(PW_Table)中搜尋與此信息相匹配的記錄,驗(yàn)證其合法性。如果用戶合法,則將其相應(yīng)權(quán)限存入Session變量;否則,返回登錄頁(yè)面,輸出“用戶名或密碼錯(cuò)誤!”。
2.2 會(huì)員卡管理功能
2.2.1 會(huì)員卡設(shè)置(Base_New_CT_In.aspx)
新會(huì)員卡設(shè)置功能用于設(shè)置各種預(yù)備銷售的會(huì)員卡,表單提交信息包含會(huì)員卡個(gè)數(shù)、開始卡號(hào)、卡名稱和卡類型等信息。系統(tǒng)從卡名稱和卡類型數(shù)據(jù)字典庫(kù)中查詢數(shù)據(jù)并將結(jié)果綁定在Web服務(wù)器DropList控件上供用戶選擇,當(dāng)頁(yè)面進(jìn)行提交后,將表單數(shù)據(jù)插入數(shù)據(jù)庫(kù)新會(huì)員卡設(shè)置表(Me_NewCard_table)中,形成新的會(huì)員卡,同時(shí)新卡號(hào)生成觸發(fā)器(Addno_trg)點(diǎn)火,將生成的連續(xù)卡號(hào)添加到新會(huì)員卡號(hào)表(Me_NewCard_ No_table)中,供會(huì)員卡銷售選號(hào)使用。使用觸發(fā)器技術(shù),根據(jù)用戶提供的開始卡號(hào)和預(yù)制卡的數(shù)量動(dòng)態(tài)生成連續(xù)的卡號(hào),便于管理,當(dāng)卡的數(shù)量較大時(shí),可有效地減少錯(cuò)誤。
2.2.2 會(huì)員卡銷售(Sell_Me_Input.aspx)
會(huì)員卡銷售功能可根據(jù)已設(shè)置好的各種新會(huì)員卡銷售給所需會(huì)員,同時(shí)將會(huì)員卡信息和會(huì)員的個(gè)人信息添加到數(shù)據(jù)庫(kù)。軟件設(shè)計(jì)中采用級(jí)聯(lián)查詢調(diào)用的方法將查詢數(shù)據(jù)綁定在Web服務(wù)器DropList控件上,根據(jù)銷售方式、會(huì)員卡名稱和會(huì)員卡類型逐步確定會(huì)員需購(gòu)置的會(huì)員卡當(dāng)前存在的卡號(hào),當(dāng)頁(yè)面提交后,將表單數(shù)據(jù)插入數(shù)據(jù)庫(kù)會(huì)員卡表(MemberCard_Table表)時(shí),卡有效期生成觸發(fā)器(Getvalue_trg)點(diǎn)火,完成相應(yīng)的功能。使用級(jí)聯(lián)查詢控件綁定和觸發(fā)器技術(shù),保證了會(huì)員卡信息的一致性和完整性。
2.3 前臺(tái)刷卡
前臺(tái)刷卡功能提供會(huì)員通過使用已購(gòu)置的會(huì)員卡進(jìn)行消費(fèi)。會(huì)員使用會(huì)員卡在前臺(tái)辦理進(jìn)入手續(xù),通過刷卡操作,軟件將檢查會(huì)員卡的合法性(一卡一人)和使用有效期,檢查通過,會(huì)員領(lǐng)取手牌和更衣柜號(hào)進(jìn)入健身房活動(dòng),消費(fèi)結(jié)束時(shí),會(huì)員要辦理離開手續(xù),否則,卡不能再次使用。通過查詢數(shù)據(jù)視圖,使用GridView控件在網(wǎng)頁(yè)上分頁(yè)并按照刷卡時(shí)間排序顯示已刷卡的會(huì)員卡號(hào)、會(huì)員姓名、卡類型、售卡日期、卡有效期以及刷卡時(shí)間等信息。會(huì)員卡的合法性是查詢刷卡的會(huì)員卡號(hào)和會(huì)員卡類型在會(huì)員卡表中是否存在滿足條件的記錄,如果沒有,則使用JavaScript給出信息提示框,說明會(huì)員卡非法。當(dāng)檢驗(yàn)會(huì)員卡合法后,軟件將該會(huì)員卡的卡號(hào)、刷卡時(shí)間等信息插入到會(huì)員刷卡明細(xì)表時(shí),會(huì)員卡有效期驗(yàn)證觸發(fā)器點(diǎn)火,完成有效期的驗(yàn)證;如果會(huì)員卡過期,觸發(fā)器會(huì)拋出異常信息。為了能夠捕獲并處理這個(gè)異常信息,在global.asax文件中的Application_Error 事件中編寫出錯(cuò)時(shí)處理事件程序如下:
protected void Application_Error(Object sender, EventArgs e)
{ Exception LastError;
LastError = Server.GetLastError();
Response.Write(“