?? 畢業論文.htm
字號:
<!--STATUS OK--><form action=http://www.baidu.com/s><table bgcolor=ffffff border=0 width=100% cellpadding=0><tr><td width=254><a href=http://www.baidu.com><img src=http://img.baidu.com/images/logo_kz.gif border=0></a><td><font size=-1 color=black><input name=wd size=30 style="font-size:16px;font-family:Verdana,Arial,Helvetica,sans-serif;"> <input type=submit value=百度搜索></font></td></tr><tr><td colspan=2><font size=-1 color=black>您的查詢字詞都已標明如下:<B style='color:black;background-color:#ffff66'><a href=#0>賓館管理系統</a> </B><B style='color:black;background-color:#ff9999'><a href=#3>需求分析</a> </B> (點擊查詢詞,可以跳到它在文中首次出現的位置)<br><font color=gray>(百度和網頁<a href="http://211.80.184.8/zhoufm/jsj014班黃清茂_11號畢業設計/畢業論文.doc"><font color=blue>http://211.80.184.8/zhoufm/jsj014班黃清茂_11號畢業設計/畢業論文.doc</font></a>的作者無關,不對其內容負責。)</font></font></td></tr></table></form><hr><base href="http://211.80.184.8/zhoufm/jsj014班黃清茂_11號畢業設計/畢業論文.doc"><meta http-equiv="Content-Type" Content="text/html; charset=gb2312"><html><head><meta filetype="doc" doccountry="Simplified Chinese" author="lin" keyword="" subject="" comment="" manager="" company="lin" category="" createdate="" lastrevisor="" revisioncount="" edittime="" creator="" producer="" encryptionflag="" slides="" paragraphs="" bytes="" notes="" presentation="" lastsavetime=""><title>畢業論文</title><meta http-equiv="content-type" content="text/html;charset=gb2312"></head><body><BR>福建工程學院<BR>FUJIAN UNIVERSITY OF TECHNOLOGY<BR>畢業論文<BR>題 目: <a name=0></a><B style='color:black;background-color:#ffff66'>賓館管理系統</B> <BR>學 生: 黃清茂 <BR>指導老師: 鄒復民 <BR>專 業: 計算機及應用 <BR>班 級: 計算機014班 <BR>學 號: 2001310211 <BR>摘 要<BR><B style='color:black;background-color:#ffff66'>賓館管理系統</B>是典型的信息管理系統(MIS),其開發主要包括后臺數據庫的建立和維護以及前端應用程序的開發兩個方面.對于前者要求建立起數據一致性和完整性強,數據安全性好的庫.而對于后者則要求應用程序功能完備,易使用等特點.<BR> 因此本人結合開入式賓館的要求,對MS SQL Server2000數據庫管理系統,SQL語言原理,Delphi應用程序設計,Delphi數據庫技術進行了較深入的學習和應用,主要完成對<B style='color:black;background-color:#ffff66'>賓館管理系統</B>的<a name=3></a><B style='color:black;background-color:#ff9999'>需求分析</B>,功能模塊劃分,數據庫模式分析,并由此設計了數據庫結構和應用程序.系統運行結果證明,本文所設計的<B style='color:black;background-color:#ffff66'>賓館管理系統</B>可以滿足客戶,賓館工作人員和高級管理員三方面的需要.<BR> 第一章對數據庫應用系統開發和<B style='color:black;background-color:#ffff66'>賓館管理系統</B>進行了簡明的介紹,并分析了開發<B style='color:black;background-color:#ffff66'>賓館管理系統</B>所應進行的工作.<BR> 第二章對數據庫的設計和SQL語言的使用進行了系統分析,為深入理解數據庫應用打下了基礎.<BR>第三章學習了具體的開發工具Delphi 6.0,對其數據庫組件,SQL語言在Delphi中的應用等數據庫編程關鍵技術進行了系統的介紹.<BR> 第四章分析了賓館管理信息系統的應用需求,按照數據庫設計理論一步一步地給出了系統需求說明書,局部ER圖,全局ER圖,系統關系模式,子模式,利用MS SQL Server2000建立了數據庫.<BR> 第五章進行了具體的程序設計,具體劃分了二類用戶的操作權限,設計了了二個操作界面.實現了數據庫表的瀏覽,記錄的添加,刪除和修改,報表的生成,實現了多數據庫表的連接操作,實現了多條件查詢等,并靈活實現了對不可更新查詢結果集的更新操作,實現了主從表操作,實現了密碼維護功能,最后,系統還可以導出數據庫以Excel文件格式保存進行操作.<BR>設計充分利用Delphi 6,MS SQL Server2000數據庫技術的強大力量,提高了編程效率和可靠性.<BR> <BR>關鍵詞:數據庫,SQL語言,MS SQL Server,Delphi6,數據庫組件,賓館管理,窗體,組件. <BR>目 錄<BR> 前言<BR>隨著我國經濟的不斷增長和旅游業的飛速發展,酒店行業的市場越來越廣闊,競爭也越來越激烈.各種賓館,酒店只有不斷完善自身的管理手段和方法,提高自身的服務水平,才能得到充足和健康的發展.因此,賓館業務的計算機管理就已經成為當務之急.<BR> 計算機的普及,信息技術的運用,越來越多的商家開始對自己的業務采用電腦管理,在應用之余,總希望有好的業務管理軟件來幫助他們提高工作效益和管理水平.此類業務管理系統的開發過程中可積累豐富的經驗,無論在業務管理,結帳收銀,預訂管理,營業項目管理,營業分析,統計報表,財務審核等經營運作的每一環節上,都將靈活地滿足不同用戶的要求.本以其超強的適用性,靈活性和通用性,已在各具有不同需要的服務行業中得到廣泛的應用.系統數據的管理更是采用了操作系統的最新樹節點管理方式,用戶操作將會更簡單,更直觀,更方便.使用本系統,既可以大幅提高各業務部門本身的工作效率,也可自動完成各業務部門之間的各種營業信息,帳務,報表的自動化傳輸與匯總,全面杜絕'跑單'和收銀舞弊,使各項業務工作制度化,科學化.本系統從客戶預訂,登記,消費到結帳出單均實現由"面"到"點"的一條龍帳務管理.<BR>第一章 緒 論<BR>§1.1 數據庫應用系統開發簡介<BR> 在數據庫應用系統開發之前,對開發數據庫的基本概念應當了解,對數據庫的結構,開發數據庫應用程序的步驟,開發體系及方法都應當有相當清晰的了解和認識.數據庫應用系統開發的目標是建立一個滿足用戶長期需求的產品.開發的主要過程為:理解用戶的需求,然后,把它們轉變為有效的數據庫設計.把設計轉變為實際的數據庫,并且這些數據庫帶有功能完備,高效能的應用.<BR>數據庫技術在計算機軟件領域研究中一直是非常重要的主題,產生于60年代,30多年來數據庫技術得到了迅速發展,并已形成較為完整的理論體系和一大批實用系統.并且,近年來,隨著World Wide Web(WWW)的猛增及Internet技術的迅速發展,使得數據庫技術之時成為最熱門技術之一.<BR>1.1.1 數據庫<BR>顯示了數據庫系統的主要組件.數據庫由DBMS(數據庫管理系統)處理,DBMS則由開發人員和用戶通過應用程序直接或間接地使用.它主要包括四個要素:用戶數據,元數據,索引和應用元數據.<BR>1.1.1.1 用戶數據 <BR>目前,大多數主流數據庫管理系統把用戶數據表示為關系.現在把關系看作數據表.表的列包含域或屬性,表的行包含對應業務環境中的實體的記錄.并非所有的關系都同樣符合要求,有些關系比其它關系更結構化一些.第二章描述了一個用以產生良好結構關系的過程,稱作規范化.<BR> 為了對比結構差的關系和結構好的關系之間的差別,以本文所設計的<B style='color:black;background-color:#ffff66'>賓館管理系統</B>中的客房和客戶關系為例來說明,假若設計關系R1(客戶編號,姓名,性別,身份編號,聯系電話,客房編號,客房名稱,客房類別,價格,定金,狀態,層數);這個關系的問題出在它有關于兩個不同主題的數據,就是客戶和客房.用這種方式構成的關系在進行修改時,會出現問題.因為一個客戶可能訂了許多客房,如果某個客房入住者的某個字段(如聯系電話)出現變更,它所入住的客房記錄(可能多個)也就必須變化,這是不好的.因此數據用兩個關系表示更好.現在如果某客房的客戶改變了它的聯系電話,只有關系(表)guest的對應行需要改變.當然,要想產生一個,顯示客房名稱及其客戶的聯系電話的報表,就需要將這兩個表的行結合起來.結果表明,將關系分別存儲,在生成報表的時候將它們結合起來,比把它們存儲在一個合成的表中更好.<BR>guest(客戶編號,客房姓名,年齡,性別,工作單位,來源,身份證,聯系電話)<BR>roomno(客房編號,客房名稱,客房類別,價格,定金,狀態,層數)<BR>1.1.1.2 元數據<BR>數據庫是自描述的,這就意味著它自身包含了它的結構的描述,這種結構的描述稱作元數據.因為DBMS產品是用來存儲和操縱表的,所以大多數產品把元數據以表的形式存儲,有時稱作系統表.這些系統表存儲了數據庫中表的情況,指出每一個表中有多少列,那一列是主關鍵字,每一列的數據類型的描述,它也存儲索引,關鍵字,規則和數據庫結構的其他部分.<BR> 在表中存儲元數據不僅對DBMS是有效的,對用戶也是方便的,因為他們可以使用與查詢用戶數據同樣的查詢工具來查詢元數據.本文第二章所介紹的SQL語言可以同時用于元數據和用戶數據.<BR>1.1.1.3 索引 <BR>第三種類型的數據改進了數據庫的性能和可訪問性,這種數據經常稱作開銷數據,盡管有時也采用其他類型的數據結構,如鏈表,但它主要還是索引.索引可以用來排序和快速訪問數據.下面以本人的賓館管理信息系統中的roomno表為例來說明.<BR>假定數據在磁盤上是按'客房編號的遞增順序排列的,用戶想打印一個按'客房名稱'排序的客房數據報表.為此,所有的數據都需要從源表中提取出來并排序,除非表很小,否則這是一個很費時的過程.或者,可以在'客房名稱'字段上創建一個索引,該索引的條目按照'客房名稱'排序,這樣,該索引的條目可以讀出來,并用來按順序訪問roomno數據.<BR> 索引用于快速訪問數據.例如,一個客戶只想訪問roomno表中'客房類別'豪華客房'的那些客戶.如果沒有索引,則必須搜索整個源表;但有了索引之后,可以找到索引條目,并使用它來挑選所有合適的行.<BR> 索引對排序和查找是有幫助的,但要付出代價.roomno表中的行每次改變時,索引也必須改變,這意味著索引并非隨意的,應該在真正需要時保存.<BR>1.1.1.4 應用元數據 <BR>存儲在數據庫中的第四種數據是應用元數據,它用來存儲用戶窗體,報表,查詢和其他形式的查詢組件.并非所有的DBMS都支持應用組件,支持組件的DBMS也不一定把全部組件的結構作為應用元數據存儲在數據庫中.然而,大多數現代的DBMS產品存儲這種數據作為數據庫的一部分.一般來說,數據庫開發人員和用戶都不直接訪問應用元數據,相反,他們通過DBMS中的工具來處理這些數據.MS SQL Server2000中就支持窗體,存儲過程等應用元數據.<BR>1.1.2 數據庫管理系統<BR>數據庫管理系統(DBMS)是指數據庫系統中管理數據的軟件系統.DBMS是數據庫系統的核心組成部分.對數據庫的一切操作,包括定義,更新及各種控制,都是通過DBMS進行的.DBMS總是基于某種數據模型,可以把DBMS看成是某種數據模型在計算機系統上的具體實現.根據數據模型的不同,DBMS可以分成層次型,網狀型,關系型,面向對象型等.MS SQL Server2000就是一種關系型數據庫管理系統.<BR> 關系模型.關系模型主要是用二維表格結構表達實體集,用外鍵表示實體間聯系.關系模型是由若干個關系模式組成的集合.關系模式相當于前面提到的記錄類型,它的實例稱為關系,每個關系實際上是一張二維表格.<BR> 關系模型和層次,網狀模型的最大判別是用關鍵碼而不是用指針導航數據,表格簡單用戶易懂,編程時并不涉及存儲結構,訪問技術等細節.關系模型是數學化模型.SQL語言是關系數據庫的標準化語言,已得到了廣泛的應用.DBMS的特點和功能可以分為三個子系統:設計工具子系統,運行子系統和DBMS引擎.<BR> 設計子系統有一個方便數據庫及其應用創建的工具集.它典型地包含產生表,窗體,查詢和報表的工具.DBMS產品還提供編程語言和對編程語言的接口.運行子系統處理用設計子系統開發的應用組件.它所包含的運行處理器用來處理窗體和數據庫的數據交互,以及回答查詢和打印報表等.<BR> DBMS引擎從其他兩個組件接受請求,并把它們翻譯成對操作系統的命令,以便讀寫物理介質上的數據.DBMS引擎還涉及事務管理,鎖,備份和恢復.<BR>1.1.3 創建數據庫,創建視圖及存儲過程<BR>創建視圖是為了方便查詢語句的編寫,存儲過程是為了實現數據的增,刪,改等操作.游標與存儲過程結合,主要是獲取單個記錄的值.<BR>1.1.3.1 數據庫模式 <BR>數據庫模式定義了數據庫的結構,表,關系,域和業務規則.數據庫模式是一種設計,數據庫和應用正是建立在此基礎上的.<BR> 域是一列可能擁有的值的集合.必須為每一個表的每一列確定域.除了數據的物理格式外,還需要確定是否有些域對表來說是唯一的.<BR> 數據庫模式的最后一個要素是業務規則,它是對需要反映在數據庫和數據庫應用程序中的業務活動的約束.業務規則是模式的一個重要部分,因為他們指定了無論什么數據變化到達DBMS引擎,允許的數據值必須滿足的約束.不管無效的數據變化請求是來自窗體的用戶,查詢/修改請求還是應用程序,DBMS都應該拒絕.遺憾的是,不同的DBMS產品用不同的方法實施業務規則.在某些情況下,DBMS產品不具備實施必要業務規則的能力,必須以代碼形式把它們編入應用程序.<BR>1.1.3.2 創建表<BR>可使用SQL語言中的CRAETE TABLE 語句創建或者用企業管理器來實現.<BR>1.1.3.3 定義聯系<BR>創建表的同時,定義各表間關鍵字段的聯系.<BR>1.1.4 應用組件<BR>數據庫應用包括窗體,查詢,報表,菜單和應用程序.<BR>§1.2 <B style='color:black;background-color:#ffff66'>賓館管理系統</B> <BR>當今時代是飛速發展的信息時代.在各行各業中離不開信息處理,這正是計算機被廣泛應用于信息管理系統的環境.計算機的最大好處在于利用它能夠進行信息管理.使用計算機進行信息控制,不僅提高了工作效率,而且大大的提高了其安全性.尤其對于復雜的信息管理,計算機能夠充分發揮它的優越性.計算機進行信息管理與信息管理系統的開發密切相關,系統的開發是系統管理的前提.本系統就是為了管理好賓館信息而設計的. <BR>賓館作為一種信息資源的集散地,客房和客戶資料繁多,包含很多的信息數據的管理,現今,有很多的賓館都是初步開始使用,甚至尚未使用計算機進行信息管理.根據調查得知,他們以前對信息管理的主要方式是基于文本,表格等紙介質的手工來處理,對于客房的入住情況(如入住天數,超過限定入住時間的天數)的統計和核實等往往采用對入住卡的人工檢查進行,對客戶的服務權限,以及入住天數等是用人工計算,手抄進行.數據信息處理工作量大,容易出錯;由于數據繁多,容易丟失,且不易查找.總的來說,缺乏系統,規范的信息管理手段.盡管有的賓館有計算機,但是尚未用于信息管理,沒有發揮它的效力,資源閑置比較突出,這就是管理信息系統的開發的基本環境.<BR>數據處理手工操作,工作量大,出錯率高,出錯后不易更改.賓館采取手工方式對賓館服務情況進行人工管理,由于信息比較多,賓館服務信息的管理工作混亂而又復雜;一般入住情況是記錄在入住登記卡上,客房的數目和內容記錄在文件中,賓館的工作人員和管理員也只是當時對它比較清楚,時間長了,如再要進行查詢,就得在眾多的資料中翻閱,查找了,造成查詢費時,費力.如要對很長時間以前的客房進行更改就更加困難了.基于這此問題,我認為有必要建立一個<B style='color:black;background-color:#ffff66'>賓館管理系統</B>,使賓館管理工作規范化,系統化,程序化,避免賓館管理的隨意性,提高我們服務質量的同時又能夠及時,準確,有效的查詢和修改賓館信息.<BR>1.2 系統所做工作 <BR>1) 了解應用開發工具的現狀<BR> 2) Delphi6.0編程基礎<BR> 3) MS SQL Server基礎<BR> 4) 設計數據庫;設計界面<BR> 5) 開發數據庫.數據庫實現的一些功能有<BR> l, 數據和數據說明的醒目顯示;<BR> 2, 多條件的查詢,多條記錄的檢索,模糊查詢;<BR> 3 ,數據文件某種存儲格式導入數據窗體,經過數據完整性校驗存入數據庫;<BR> 4 ,數據庫安全性的設計;<BR> 5 ,數據庫的設計,數據接口,界面的設計.<BR>§1.3 本文所作工作<BR> 緒論部分對數據庫應用系統的結構,開發進行了簡要介紹,分析了賓館管理信息系統設計的特點和任務. <BR>第二章介紹了數據庫的設計和范式分析,并系統介紹了SQL語言,為設計和理解應用程序做了鋪墊.<BR> 第三章對系統介紹了Delphi 6.0的數據庫編程技術,SQL語言在Delphi 6.0中的應用,MS SQL Server基礎.<BR> 第四章分析了<B style='color:black;background-color:#ffff66'>賓館管理系統</B>的應用需求,設計了系統的數據庫結構,并根據需求對系統功能進行了劃分和細化.<BR> 第五章根據第四章的設計結果利用MSSQL Server2000和Delphi 6.0進行了具體的應用程序設計.<BR> 總結部分介紹了設計體會和編程體會,并指出了系統設計中的不足和改進的方向.<BR>第二章數據庫理論基礎<BR>一個成功的信息管理系統,是建立在許多條件之上的,而數據庫是其中一個非常重要的條件和關鍵技術.信息管理系統所涉及的數據庫設計分五個步驟:數據庫<B style='color:black;background-color:#ff9999'>需求分析</B>,概念設計,邏輯設計,物理設計與加載測試.<BR> (1) 數據庫<B style='color:black;background-color:#ff9999'>需求分析</B>的任務是將業務管理單證流化為數據流,劃分主題之間的邊界,繪制出DFD圖,并完成相應的數據字典.<BR> (2) 概念設計的任務是從DFD出發,繪制出本主題的實體-關系圖,并列出各個實體與關系的綱要表.<BR> (3) 邏輯設計的任務是從E-R圖與對應的綱要表出發,確定各個實體及關系的表名屬性.<BR> (4) 物理設計的任務是確定所有屬性的類型,寬度與取值范圍,設計出基本表的主鍵,將所有的表名與字段名英文化(現在很多軟件能支持中文字段,如MS SQL Server,我就是用的中文字段名),實現物理建庫,完成數據庫物理設計字典.<BR> (5) 加載測試工作貫穿于程序測試工作的全過程,整個錄入,修改,查詢,處理工作均可視為對數據庫的加載測試工作.<BR>要設計出一個好的信息管理系統數據庫,除滿足系統所要求的功能外,還必須遵守下列原則:<BR> 1 基本表的個數越少越好.<BR> 2 主鍵的個數越少越好.鍵是表間連接的工具,主鍵越少,表間的連接就越簡單.<BR> 3 字段的個數越少越好.<BR> 4 所有基本表的設計均應盡量符合第三范式.<BR> 數據庫的設計中,如何處理多對多的關系和如何設計主鍵,是兩個有著較大難度,需要重點考慮的問題.下面我們著重從SQL應用,數據庫設計范式和查詢優化等方面來分析本課題的系統關鍵技術和實現難點并加以解決.<BR>§2.1 數據庫系統設計及范式分析 <BR>信息系統的主要任務是通過大量的數據獲得管理所需要的信息,這就必須存儲和管理大量的數據.因此建立一個良好的數據組織結構和數據庫,使整個系統都可以迅速,方便,準確地調用和管理所需的數據,是衡量信息系統開發工作好壞的主要指標之一<BR>2.1.1 數據庫系統設計<BR>數據庫設計主要是進行數據庫的邏輯設計,即將數據按一定的分類,分組系統和邏輯層次組織起來,是面向用戶的.數據庫設計時需要綜合企業各個部門的存檔數據和數據需求,分析各個數據之間的關系,按照DBMS提供的功能和描述工具,設計出規模適當,正確反映數據關系,數據冗余少,存取效率高,能滿足多種查詢要求的數據模型.數據庫設計的步驟是: <BR>(1) 數據庫結構定義:目前的數據庫管理系統(DBMS)有的是支持聯機事務處理CLTP(負責對事務數據進行采集,處理,存儲)的操作型DBMS,有的可支持數據倉庫,有聯機分析處理CLAP(指為支持決策的制定對數據的一種加工操作)功能的大型DBMS,有的數據庫是關系型的,有的可支持面向對象數據庫.針對選擇的DBMS,進行數據庫結構定義.<BR> (2) 數據表定義:數據表定義指定義數據庫中數據表的結構,數據表的邏輯結構包括:屬性名稱,類型,表示形式,缺省值,校驗規則,是否關鍵字,可否為空等.關系型數據庫要盡量按關系規范化要求進行數據庫設計,但為使效率高,規范化程度應根據應用環境和條件來決定.數據表設計不僅要滿足數據存儲的要求,還要增加一些如反映有關信息,操作責任,中間數據的字段或臨時數據表.<BR> (3) 存儲設備和存儲空間組織:確定數據的存放地點,存儲路徑,存儲設備等,備份方案,對多版本如何保證一致性和數據的完整性.<BR> (4) 數據使用權限設置:針對用戶的不同使用要求,確定數據的用戶使用權限,確保數據安全.<BR> (5) 數據字典設計:用數據字典描述數據庫的設計,便于維護和修改.<BR>為了更好地組織數據和設計出實際應用數據庫,應該注意如下問題:<BR>規范化地重組數據結構:對數據進行規范化表達,這在后面將會具體討論.<BR>關系數據結構的建立:在進行了數據基本結構的規范化重組后,還必須建立整體數據的關系結構.這一步設計完成后數據庫和數據結構設計工作基本完成,只待系統實現時將數據分析和數據字典的內容代入到所設計的數據整體關系結構中,一個規范化數據庫系統結構就建立起來了. <BR>建立關系數據結構涉及三方面內容:確定關聯的關鍵指標項并建立關聯表;確定單一的父系記錄結構;建立整個數據庫的關系結構. <BR> (1)鏈接關系的確定 <BR>在進行了上述數據規范化重組后,已經可以確保每一個基本數據表(我們簡稱為表)是規范的,但是這些單獨的表并不能完整地反映事物,通常需要通過指標體系整體指標數據才能完整全面地反映問題.也就是說在這些基本表的各宇段中,所存儲的是同一事物不同側面的屬性.那么計算機系統如何能知道哪些表中的哪些記錄應與其它表中的哪些記錄相對應,它們表示的是同一個事物呢 這就需要在設計數據結構時將這種各表之間的數據記錄關系確定下來.這種表與表之間的數據關系一般都是通過主或輔關鍵詞之間的連接來實現的.因為在每個表中只有主關鍵詞才能唯一地標識表中的這一個記錄值(因為根據第三范式的要求,表中其它數據字段函數都依賴于主關鍵詞),所以將表通過關鍵詞連接就能夠唯一地標識出某一事物不同屬性在不同表中的存放位置. <BR> (2)確定單一的父子關系結構 <BR>所謂確定單一的父系關系結構就是要在所建立的各種表中消除多對多(以下用M:N來表示)的現象,即設法使得所有表中記錄之間的關系呈樹狀結構(只能由一個主干發出若干條分支,而不能有若干條主干交錯發出若干條分支狀況).所謂的"父系"就是指表的上一級關系表.消除多對多關系可以借助于E-R圖的方法來解決,也可以在系統分析時予以注意,避免這種情況的發生. <BR>消除這種M:N情況的辦法也很簡單,只需在二表之間增加一個表,則原來M:N的關系就改成了M:1,1:N的關系了.<BR> 確定數據資源的安全保密屬性:<BR> 一般DBMS都提供給我們自己定義數據安全保密性的功能.系統所提供的安全保密功能一般有8個等級(0-7級),4種不同方式(只讀,只寫,刪除,修改),而且允許用戶利用這8個等級的4種方式對每一個表自由地進行定義. <BR>定義安全保密性的方法一般有如下幾種: <BR> a.原則上所有文件都定義為4級,個別優先級特別高的辦公室(終端或微機的入網賬號)可定義高于4級的級別,反之則定義為低于4的級別. <BR> b.統計文件(表)和數據錄入文件一般只對本工作站定義為只寫方式,對其它工作站則定義為只讀方式. <BR> c.財務等保密文件一般只對中工作站(如財務科等)定義為可寫,可改,可刪除方式,對其它工作站則定義為只讀方式,而且不是每個人都能讀,只有級別相同和高級別者才能讀.<BR>2.1.2 數據庫設計范式分析 <BR>建立起一個良好的數據指標體系,是建立數據結構和數據庫的最重要的一環.一個良好的數據指標體系是建立DB的必要條件,但不是充分條件.我們完全可以認為所建指標體系中的一個指標類就是關系數據庫中的一個基本表,而這個指標類下面的一個個具體指標就是這個基本表中的一個字段.但如果直接按照這種方式建庫顯然還不能算最佳.對于指標體系中數據的結構在建庫前還必須進行規范化的重新組織. <BR> a. 數據組織的規范化形式 <BR>在數據的規范化表達中,一般將一組相互關聯的數據稱為一個關系(relation),而在這個關系下的每個數據指標項則被稱為數據元素(data element),這種關系落實到具體數據庫上就是基本表,而數據元素就是基本表中的一個字段(field).規范化表達還規定在每一個基本表中必須定義一個數據元素為關鍵字(key),它可以唯一地標識出該表中其它相關的數據元素.在規范化理論中表是二維的,它有如下四個性質:<BR> l ,在表中的任意一列上,數據項應屬于同一個屬性(如圖中每一列都存放著不同合同記錄的同一屬性數據). <BR> 2, 表中所有行都是不相同的,不允許有重復組項出現(如圖中每一行都是一個不同的合同記錄).<BR> 3, 在表中,行的順序無關緊要(如圖中每行存的都是合同記錄,至于先放哪一個合同都沒關系). <BR> 4, 在表中,列的順序無關緊要,但不能重復(如圖中合同號和合同名誰先誰后都沒關系,但二者不可重復或同名). <BR> 在對表的形式進行了規范化定義后,數據結構還有五種規范化定義,定名為規范化模式,稱為范式.在這五種范式中,一般只用前三種,對于常用系統就足夠了.而且這五種范式是"向上兼容"的,即滿足第五范式的數據結構自動滿足一,二,三,四范式,滿足第四范式的數據結構自動滿足第一,二,三范式,……,依此類推.<BR> 第一范式(first normal form,簡稱1st NF)就是指在同一表中沒有重復項出現,如果有則應將重復項去掉.這個去掉重復項的過程就稱之為規范化處理.在本文所討論的開發方法里,1st NF實際上是沒有什么意義的.因為我們按規范化建立的指標體系和表的過程都自動保證了所有表都滿足1st NF. <BR> 第二范式(second normal form,簡稱 2nd NF)是指每個表必須有一個(而且僅一個)數據元素為主關鍵字(primary key),其它數據元素與主關鍵字一一對應.例如,在圖l9.7中如果我們將合同號定義為主關鍵字(其它數據元素中的記錄數據都有可能重名,故不能作為主關鍵字),故只要知道了一個合同記錄的合同號,就可以唯一地在同一行中找到該合同的任何一項具體信息.通常我們稱這種關系為函數依賴(functional depEndence)關系.即表中其它數據元素都依賴于主關鍵字,或稱該數據元素唯一地被主關鍵字所標識.<BR> 第三范式(third normal form,簡稱 3rd NF)就是指表中的所有數據元素不但要能夠唯一地被主關鍵字所標識,而且它們之間還必須相互獨立,不存在其它的函數關系.也就是說對于一個滿足了 2nd NF的數據結構來說,表中有可能存在某些數據元素依賴于其它非關鍵宇數據元素的現象,必須加以消除.<BR>為防止數據庫出現更新異常,插入異常,刪除異常,數據冗余太大等現象,關系型數據庫要盡量按關系規范化要求進行數據庫設計.<BR>§2.2 SQL語言介紹<BR>2.2.1 SQL基礎<BR>SQL(Structured Query Language,結構查詢語言)是一個功能強大的數據庫語言.SQL通常使用于數據庫的通訊.ANSI(美國國家標準學會)聲稱,SQL是關系數據庫管理系統的標準語言.SQL語句通常用于完成一些數據庫的操作任務,比如在數據庫中更新數據,或者從數據庫中檢索數據.使用SQL的常見關系數據庫管理系統有:Oracle, Sybase, Microsoft SQL Server, Access, Ingres等等.雖然絕大多數的數據庫系統使用SQL,但是它們同樣有它們自立另外的專有擴展功能用于它們的系統.但是,標準的SQL命令,比如"Select", "Insert", "Update", "Delete", "Create"和 "Drop"常常被用于完成絕大多數數據庫的操作.MS SQL Server 就是用的Transact- SQL.<BR>SQL語言有著非常突出的優點,主要是:<BR> 1, 非過程化語言<BR> 2,統一的語言<BR> 3,是所有關系數據庫的公共語言<BR> 非過程化語言:SQL是一個非過程化的語言,因為它一次處理一個記錄,對數據提供自動導航.SQL允許用戶在高層的數據結構上工作,而不對單個記錄進行操作,可操作記錄集,所有SQL 語句接受集合作為輸入,返回集合作為輸出.SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入.<BR> SQL不要求用戶指定對數據的存放方法, 這種特性使用戶更易集中精力于要得到的結果;所有SQL語句使用查詢優化器,它是RDBMS的一部分,由它決定對指定數據存取的最快速度的手段,查詢優化器知道存在什么索引,在哪兒使用索引合適,而用戶則從不需要知道表是否有索引,有什么類型的索引.<BR>統一的語言:SQL可用于所有用戶的DB活動模型,包括系統管理員,數據庫管理員, 應用程序員,決策支持系統人員及許多其它類型的終端用戶.<BR>SQL為許多任務提供了命令,其中包括:<BR> 1, 查詢數據<BR> 2, 在表中插入,修改和刪除記錄<BR> 3, 建立,修改和刪除數據對象<BR> 4, 控制對數據和數據對象的存取<BR> 5, 保證數據庫一致性和完整性<BR> 以前的數據庫管理系統為上述各類操作提供單獨的語言,而SQL 將全部任務統一在一種語言中.所有關系數據庫的公共語言:由于所有主要的關系數據庫管理系統都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS(關系數據庫管理系統)轉到另一個,所有用SQL編寫的程序都是可以移植的.<BR>2.2.2 SQL語句 <BR>SQL功能強大,是一種完備的數據處理語言,不僅用于數據庫查詢,而且用于數據庫中的數據修改和更新,概括起來,它可以分成以下幾組:<BR>DML(Data Manipulation Language,數據操作語言):用于檢索或者修改數據; DDL(Data Definition Language,數據定義語言): 用于定義數據的結構,比如 創建,修改或者刪除數據庫對象; <BR> DCL(Data Control Language,數據控制語言):用于定義數據庫用戶的權限.<BR> DML組可以細分為以下的幾個語句:<BR> SELECT:用于檢索數據;<BR> INSERT:用于增加數據到數據庫;<BR> UPDATE:用于從數據庫中修改現存的數據;<BR> DELETE:用于從數據庫中刪除數據.<BR> DDL語句可以用于創建用戶和重建數據庫對象.下面是DDL命令:<BR> CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX,DROP INDEX<BR> 下面是一個簡單SQL語句的例子:<BR> 我們使用SQL語句來從roomno中檢索'客戶編號'為'0001'的客戶姓名:<BR> SELECT 姓名 FROM roomno WHERE '客戶編號 = '0001'<BR>2.2.2.1 DDL與DML <BR>數據定義語言DDL:它是用來創建和修改數據庫結構的一種語句,包括 Create,Alter和Drop 語句. <BR> 數據操作語言DML:包括數據查詢與數據更新.數據查詢主要是由Select語句完成,這一點不再贅述.而數據更新所造成的風險大大超過數據查詢.數據庫管理系統必須在更改期內保護所存儲的數據的一致性,確保有效的數據進入數據庫,數據庫必須保持一致性,DBMS還必須協調多用戶的并行更新,以確保用戶和它們的更改不至于影響其它用戶的作業.<BR>用于修改數據庫內容的 SQL 語句主要有以下三個: <BR> (1) Insert,向一個表中加入新的數據行 <BR> (2) Delete,從一個表中刪除數據行 <BR> (3) Update,更改數據庫中已經存在的數據 <BR>Insert標準語法: <BR>INSERT INTO table_name (col1, col2...) VALUES(value1, value2...)<BR>下例要將客戶編號為'0001'作為一個新的入住情況添加到客房信息表roomtable中<BR> Insert Into<BR> roomtable (客戶編號,客房編號,啟始時間,截止時間,入住時間) <BR> values ('0001','01402','2002-9-12', 2002-9-13', 2002-9-12')<BR>Insert 語句還可以將多行數據添加到目標表中去,在這種形式的 Insert 語句中,新行的數據值不是在語句正文中明確地指定的,而是語句中指定的一個數據庫查詢.添加的值來自數據庫自身的行,在某些特定的狀態下,這是非常有用的.多行 Insert 語句為拷貝數據提供了一種緊湊而高效的方法,但我在自已做的<B style='color:black;background-color:#ffff66'>賓館管理系統</B>中沒有使用這種方法,我在系統中是使用循環依照上面的用法來完成多個記錄的插入. <BR>Update語句用于更新單表中選定行的一列或多列的值.要更新的目標表在語句中定義,Set子句則指定要更新哪些列并計算它們的值.Update語句總是包含Where語句,而且Update語句比較危險,所以您必須明確地認識到Where語句的重要性,Where語句被用來指定需要更新的行.<BR>標準語法:<BR>UPDATE table_name<BR>SET columnname1 = value1<BR>[, columname2 = value2]...<BR>WHERE search_condition<BR>Delete 語句標準語法:<BR>DELETE FROM tablename WHERE condition<BR>2.2.2.2 復雜操作實現<BR>在信息管理系統中,我們往往會遇到歸類,匯總,映射,索引,子查詢等復雜操作,相應的支持與實現如下:<BR>u GROUP BY方法<BR>GROUP BY子句語法為: <BR>SELECT column1, SUM(column2)<BR>FROM "list-of-tables"<BR>GROUP BY "column-list"; <BR>這個GROUP BY子句將集中所有的行在一起,它包含了指定列的數據以及允許合計函數來計算一個或者多個列.<BR>在本人的系統中在顯示數據時用到了此語句來對查詢所得的內容排序然后再顯示.<BR>u 組合條件和布爾運算符<BR>以下的SQL語句中就含有組合條件:<BR>SELECT column1, SUM(column2)<BR>FROM "list-of-tables"<BR>WHERE "condition1" AND "condition2"; <BR>下面是一個示例:<BR>SELECT 身份描述<BR>FROM guest,roomno <BR>WHERE ID.身份證號=guest.身份編號 and user.客戶編號=' 0001'; <BR>這條SQL語句是從guest,roomno表中查找客戶編號為0001的入住者的身份描述,第三條語句中如果其中有一個條件為假,那么就什么都沒有顯示.<BR> UNION子句有些時候,需要一起瀏覽多個查詢的結果,組合它們的輸出,我們可以使用UNION關鍵字.<BR>第三章應用系統開發工具<BR>§3.1 Delphi6.0 VCL組件的體系結構<BR>Delphi類可以粗略地分成兩部分:一部分是組件類,這些組件類通常以某種方式出現在組件面板上,當用戶從組件面板上點取一個類的圖標后,在程序中就自動生成了該類的對象(非可視組件除外);另一部分是功能類,這此功能類的對象通常出現在程序代碼中,起著不可代替的作用,但是這些功能類在組件面板上是找不到的.在Delphi中,每一個類的祖先都是Tobject類,整個類的層次結構就像一棵倒掛的樹,在最頂層的樹根即為Tobject類.這樣,按照面向對象編程的基本思想,就使得用戶可用Tobject類這個類型代替任何其它類的數據類型.實際上在Delphi的類庫中,Tobject類派生出了為數相當眾多的子類,它們形成了一個龐大的體系,通常情況下,如果不自行開發組件,就不必了解整個類的體系結構,只用到類層次樹的葉結點就足夠了. <BR>這一小節簡略介紹一下Delphi 6.0中VCL(可視化組件庫)組件的體系結構.凡是做過程序開發的人都知道從來沒有單純的數據應用程序,也就是說,數據庫應用程序必須和用戶界面(可以是圖形界面,也可以是命令接口)元素相結合,只講界面或只講數據庫本身都構不成數據庫應用程序,因而用Delphi 6.0開發數據庫應用程序就隱含著界面開發.Delphi6中的VCL組件像TMediaPlayer(如圖3-1所示)一樣具有專業外觀,富于吸引力的控件需要動態創建組件,并在創建組件時將圖形資源裝載到組件中.您已經學會如何使用Image Editor來創建Delphi組件資源(dcr)文件.如果把24×24像素的位圖命名為與類相同的名字,并將DCR文件存儲為與組件單元文件相同的名字——當然,擴展名是不同的;這樣,在把單元添加到包的時候,Delphi將自動地裝載相應的DCR文件.這時,這些位圖將顯示在VCL面板代表對應組件的按鈕上(細節可以參考文獻中"用Image Editor 創建組件資源文件").<BR>圖3-1 TMediaPlayer組件的外觀非常專業,它使用了位圖,<BR> 在運行時從資源文件中動態裝載(圖中所示的speedis.avi <BR> 與Delphi一同發布,位于demos\coolstuf文件夾下)<BR>組件在Delphi程序的開發中是最顯眼的角色.大家知道,在編寫程序時一般都開始于在組件面板上選擇組件并定義組件間的相互作用.但也有一些組件不在組件面板上,例如Tform和Tapplication(典型的非可視組件).組件是Tcomponents派生出來的子類,可以流的形式存放在DFM文件中,具有事件和Publish屬性.<BR>窗口組件類是窗口化的可視化組件類,在Delphi的類庫中占有最大的份額.在實際編程中,窗口組件類的對象都有句柄,可以接受輸入焦點和包含其它組件.<BR>圖形組件與窗口組件并列,是另一大類組件.圖形組件不是基于窗口的,因而不能有窗口句柄,不能接受輸入焦點和包含其它組件.圖形組件的基類是TgraphicControl,在實際編程中,它們必須寄生于它們的宿主——窗口組件類的對象,由它們的擁有者負責其顯示,而且它們還能觸發一些和鼠標活動相關的事件.圖形控件最典型的例子是Tlabel和TspeedButton.由此可以看出圖形組件的功能很弱,圖形組件的用處何在呢 其實使用圖形組件的最大好處在于節省資源,正是因為它們的功能較弱,所以使用的系統資源就要少.在一個應用程序中,如果能在不影響其功能的前提下合理大量地使用圖形組件,將會大減少程序對系統資源的消耗.<BR>非可視組件是與可視組件相并列的另一類組件,非可視組件在程序運行中是不可見的(除各種對話框組件之外,事實上有人認為對話框組件不能歸入非可視組件,應該是另一種介于可視與非可視之間的組件). <BR>最后要說明一下,常說的控件實際上是一種組件.也就是說組件這個概念要大于控件,控件在內涵上包含于組件中.控件由Windows系列操作系統提出并使用,而組件是Borland和其它廠商在對Windows控件做了必要的擴展之后提出來的概念,它們是在不同時期由不同的廠商提出的概念.<BR>§3.2 數據庫組件介紹<BR>用Delphi6開發數據庫應用,重點是和各種數據庫組件打交道,能和數據庫掛鉤的組件對象有5種,它們是:Session(數據庫會話),Database(數據庫),Dataset(數據集),DataSource(數據源),Data control(數據控制組件,也叫data-controls即數據感知組件).其中前面4種統稱為數據訪問(Data Access)組件.<BR> ADO組件 Delphi6.0包含了可以用來訪問Microsoft公司的ActiveX Data Objects(ADO)格式數據庫的組件.ADO是Micrsoft公司關于各種類型數據的高等界面,后來逐漸演變成滿足所有數據訪問需要的完整解決辦法.ADO的對象模型是所有數據訪問接口對象模型中最簡單的一種.Microsoft公司用來訪問ADO數據的應用程序界面技術是OLE DB.OLE DB是一種底層編程接口,用來訪問許多不同類型的數據源,其中包括消息,文件系統以及其他一些非傳統的數據源.OLE DB是一個由Component Object Model(COM)接口組成的集合,用來隱藏創建數據訪問服務過程中的細節.OLEDB提供了訪問任何數據資源的方法,包括相互關聯的數據庫和相互不關聯的數據庫,Email和文件系統,文本和圖形以及用戶定義的數據對象.<BR>Delphi的ADO組件無需依靠BDE而是使用ADO技術,提供了可以通過數據控制組件訪問數據的新方法.唯一的要求是在使用ADO組件時必須運行ADO/OLE-DB.ADO組件的使用使得DELPHI在訪問數據的類型和采用的技術方面都有了很大的突破.<BR>數據模塊設計窗口 數據模塊設計窗口是用來設計和維護數據模塊的.數據模塊設計窗口中包含了所有以.DTI作為文件擴展名的Data Diagram文件的信息.DTI文件在編譯時不起任何作用.<BR>§3.3 SQL語言在Delphi中的應用 <BR>在Delphi中使用SQL語言非常方便,一般來說,都是通過Tquery或TADOquery組件來使用SQL語言的.可以在Tquery或TADOquery組件的SQL屬性中設置SQL語句.設計程序時,在該組件的屬性對話框中選擇SQL屬性,單擊帶省略號的按鈕,就可以打開String List Editor對話框,然后我們就可以在對話框中添加SQL語句.還可以使用Delphi的SQL Builder來自動生成SQL語句,這樣可以避免手工編寫SQL而可能造成的語法錯誤.<BR> 靜態SQL語句在程序設計時便已固定下來,它不包含任何參數和變量.動態SQL語句,也被稱作參數化的語句,在其中間包含著表示字段名或表名的參數,例如下面的語句是一條動態SQL語句: <BR> Select * From roomno Where 客房編號 =:roomnumber; <BR>其中的變量roomnumber便是一個參數變量,它由一個冒號引導,在程序運行過程中,必須要為該參數賦值,該條SQL語句才能正確執行,每次運行應用程序時可以為該參數變量賦予不同的值.為參數賦值有三種方法:<BR> ①根據參數在SQL語句中出現的順序,設置TADOQuery組件的parameters屬性值為參數賦值.<BR> ②直接根據SQL語句中各參數的名字,調用ParamByName方法來為各參數賦值.<BR> ③將TADOQuery組件的DataSource屬性設置為另一個數據源,這樣將另一個數據源中與當前TADOQuery組件的SQL語句中的參數名相匹配的字段值賦給其對應的參數.利用這種方法也能實現所謂的連接查詢,創建主要—明細型數據庫應用.<BR>在使用動態SQL語句編程時,常常用到一個很重要的方法Prepare,調用Prepare 方法之后,Delphi會將帶參數的SQL語句傳送給與其對應的數據庫引擎,對動態SQL語句進行語法分析和優化.雖然在用動態SQL語句編程時,調用Prepare方法并不是必須的,但是調用Prepare方法后,會極大地提高動態SQL 語句的執行性能,特別是當要反復多次執行同一條動態SQL語句時,其優越性會更加明顯. 如果在應用程序中執行一條SQL語句之前并沒有顯式地調用Prepare方法,每次在執行SQL 語句時,Delphi會隱含地調用Prepare方法以準備這個查詢.<BR> TadoQuery部件還有一個Prepare屬性,這是一個布爾型屬性,當其屬性值為True時, 表明該查詢已被準備好了( SQL 語句已被傳送到數據庫引擎中 ) , 當我們使用參數編輯器Parameters Editor來為動態SQL語句中的參數賦值時,當設置完相應的參數值并退出參數編輯器時,Delphi會隱含地調用Prepare方法以準備好查詢.<BR>當SQL語句執行完之后,要想準備下一個查詢,首先必須調用Close方法,然后才能調用Prepare方法準備下一個查詢.一般來說,在一個應用程序中應該調用一次Prepare方法,常常在窗體的OnCreate事件處理過程中調用Prepare方法, 然后用上述介紹的方法為參數賦值,最后調用Open方法或ExecSQL方法執行SQL語句,以完成查詢.<BR>當然在調用Prepare方法準備好一個查詢時,會消耗一些數據庫資源, 因而每當一個查詢執行完畢之后,要養成調用UnPrepare方法以撤消查詢的好習慣.在運行程序過程中,通過程序改變TQuery或TADOquery部件的SQL屬性值時,Delphi會自動地調用Close方法和UnPrepare 方法,以撤消查詢.<BR> 在程序運行過程中,要想設置Tquery或TADOquery部件的SQL屬性,必須首先調用Close方法,關閉TQuery或TADOquery部件,然后再調用Clear方法清除SQL屬性中現存的SQL命令語句, 最后再調用Add方法為SQL屬性設置新的SQL命令語句.例如: <BR>with query1 do<BR> begin<BR> close;<BR> sql.Clear;<BR> sql.Add('select guestno 客戶編號,name 姓名,sex 性別,age 年齡,workunit 工作單位,source 來源, idcardno 身份證號碼, telphone 電話號碼');<BR> sql.Add('from guest');<BR> sql.Add('where guestno='''+edit1.text+'''');<BR>open; <BR>在為TQuery或TADOquery部件設置SQL屬性時調用Close方法總是很安全的,如果TQuery或TADOquery部件已經被關閉了,調用Close方法時不會產生任何影響.在應用程序中為SQL屬性設置新的SQL 命令語句時,必須要調用Clear方法以清除SQL屬性中現存的SQL命令語句,如果不調用Clear方法,便調用Add方法向SQL屬性中設置SQL命令語句,那么新設置的SQL命令語句會追加在現存SQL命令語句后面, 在程序運行時常常會出現出乎意料的查詢結果甚至程序無法運行下去.<BR> 在這里要特別注意的,一般情況下TQuery或TADOquery部件的SQL屬性只能包含一條完整的SQL語句,它不允許被設置成多條SQL語句.當然有些數據庫服務器也支持在TQuery或TADOquery部件的SQL屬性中設置多條SQL語句,只要數據庫服務器允許這樣,我們在編程時可以為 SQL 屬性設置多條SQL語句.<BR>在為TQuery或TADOquery部件設置完SQL屬性的屬性值之后,也即編寫好適當的SQL程序之后,可以有多種方式來執行SQL程序.<BR> 在設計過程中,設置完TQuery或TADOquery部件的SQL屬性之后將其Active屬性的值置為True, 這樣便可以執行SQL屬性中的SQL程序,如果應用中有與TQuery或TADOquery部件相連的數據瀏覽部件( 如TDDGrid TDBEdit等)那么在這些數據瀏覽部件中會顯示SQL程序的執行結果.<BR> 在應用程序運行過程中,通過程序調用TQuery或TADOquery組件的Open方法或ExecSQL 方法可以執行其SQL屬性中的SQL程序.Open方法和ExecSQL方法是不一樣的.Open方法只能用來執行SQL語言的查詢語句(Select命令), 并返回一個查詢結果集,而ExecSQL方法還可以用來執行其它常用的SQL語句(如INSERT, UPDATE, DELETE等命令),例如:<BR> Query1.Open (這樣會返回一個查詢結果集)<BR>如果調用Open方法,而沒有查詢結果時,會出錯.此時應該調用ExecSQL 方法來代替Open方法.如:<BR>Query1.ExecSQL (沒有返回結果)<BR>當然在設計應用程序時,程序設計人員是無法確定TQuery或TADOquery組件中的SQL 語句是否會返回一個查詢結果的.對于這種情況應當用Try…Except模塊來設計程序.在 Try 部分調用Open方法,而在Except部分調用ExceSQL方法,這樣才能保證程序的正確運行.<BR>例如: <BR>Try<BR>Query1.Open<BR>Except<BR>Query1.ExecSQL<BR>End<BR>通過Tquery或TADOquery組件可以獲得兩種類型的數據:<BR>1,"活動"的數據<BR>這種數據就跟通過TTable部件獲得的數據一樣,用戶可以通過數據瀏覽部件來編輯修改這些數據,并且當調用Post方法或當焦點離開當前的數據瀏覽部件時,用戶對數據的修改自動地被寫回到數據庫中.<BR>2,非活動的數據(只讀數據)<BR> 用戶通過數據瀏覽部件是不能修改其中的數據.在缺省情況下,通過TQuery部件獲得的查詢結果數據是只讀數據,要想獲得"活動"的數據,在應用程序中必須要設置Tquery或TADOquery組件的RequestLive屬性值為True,然而并不是在任何情況下(通過設置RequestLive的屬值True)都可以獲得"活動"的數據的,要想獲得"活動"的數據,除了將TQuery部件的RequestLive屬性設置為True外,相應的SQL命令還要滿足以下條件.<BR>本地SQL語句查詢情況下,要得到可更新的數據集,SQL語句的限制為:<BR>a>查詢只能涉及到一個單獨的表<BR>b> SQL語句中不能包含ORDER BY命令<BR>c> SQL語句中不能含聚集運算符SUM或AVG<BR>d> 在Select后的字段列表中不能有計算字段<BR>e> 在Select語句WHERE部分只能包含字段值與常量的比較運算,這些比較運算符是:Like, >, =, 查詢只能涉及到一個單獨的表<BR>g> SQL語句中不能包含ORDER BY命令<BR>h> SQL語句中不能含聚集運算符SUM或AVG運算 <BR>另外,如果是查詢Sybase數據庫中的表,那么被查詢的表中只能有一個索引.<BR>如果在應用程序中要求TQuery或TADOquery組件返回一個"活動"的查詢結果數據集,但是SQL 命令語句不滿足上述約束條件時,對于本地數據庫的SQL查詢,BDE只能返回只讀的數據集.對于數據庫服務器中的SQL查詢,只能返回錯誤的代碼.當Tquery或TADOquery組件返回一個"活動"的查詢結果數據集時,它的CanModIfy屬性的值會被設置成True.<BR>§3.4 MS SQL Server簡述 <BR>SQL Server 是一個后臺數據庫管理系統,它功能強大操作簡便,日益為廣大數據庫用戶所喜愛.越來越多的開發工具提供了與SQL Server的接口.SQL Server 是一個關系數據庫管理系統,它最初是由Microsoft,Sybase 和Ashton-Tate三家公司共同開發的.于1988 年推出了第一個OS/2 版本,在Windows NT 推出后,Microsoft與Sybase 在SQL Server 的開發上就分道揚鑣了,Microsoft 將SQL Server 移植到Windows NT系統上,專注于開發推廣SQL Server 的Windows NT 版本.<BR>SQL Server 2000 是Microsoft 公司推出的SQL Server 數據庫管理系統的最新版本,該版本繼承了SQL Server 7.0 版本的優點,同時又比它增加了許多更先進的功能,具有使用方便,可伸縮性好與相關軟件集成程度高等優點.可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2000 的大型多處理器的服務器等多種平臺使用.MSSQL Server不但可以應用于大中型數據庫管理中,建立分布式關系數據庫,并且也可以開發桌面數據庫.事實上,SQL Server數據庫處理的基本結構,采取關系型數據庫模式,盡管如此,相信大家都可以輕易的發現,在SQL Server的數據庫處理方式,則是使用面向對象的操作方式與精神,也就是說,SQL Server的所有功能,都可以基于系統已經建立好的一些對象來達成,是相當OO(面向對象)的一個系統結構.<BR>SQL Server 企業管理器是 SQL Server 的主要管理工具,它提供了一個遵從 MMC 標準的用戶界面,使用戶得以: <BR>· 定義 SQL Server 實例組.<BR>· 將個別服務器注冊到組中.<BR>· 為每個已注冊的服務器配置所有 SQL Server 選項.<BR>· 在每個已注冊的服務器中創建并管理所有 SQL Server 數據庫,對象,登錄,用戶和權限.<BR>· 在每個已注冊的服務器上定義并執行所有 SQL Server 管理任務.<BR>· 通過喚醒調用 SQL 查詢分析器,交互地設計并測試 SQL 語句,批處理和腳本.<BR>· 喚醒調用為 SQL Server 定義的各種向導.<BR>第四章 <B style='color:black;background-color:#ffff66'>賓館管理系統</B>設計分析<BR>§4.1 應用<B style='color:black;background-color:#ff9999'>需求分析</B><BR><B style='color:black;background-color:#ffff66'>賓館管理系統</B>需要滿足來自三方面的需求,這三個方面分別是客戶,賓館工作人員和賓館管理人員.客戶的需求是查詢賓館所存的客戶,個人預定,入住(消費)情況及個人信息的修改;賓館工作人員對客戶的預定,入住服務及退房等要求進行操作,同時形成入住退房報表給客戶查看確認;賓館管理人員的功能最為復雜,包括對工作人員,客戶,客房進行管理和維護,及系統狀態的查看,維護并生成客房信息查看報表.<BR><B style='color:black;background-color:#ffff66'>賓館管理系統</B>用例流程分析<BR>1,預定:<BR>前提條件:房間空閑<BR>輸入:輸入客戶基本信息:姓名,聯系方式,房間號碼,入住時間(也是自動過期時間),預定時間.<BR>流程:客戶要求預定(與系統無關)-->用戶查詢符合用戶要求的房間-->符合條件的房間空閑(推薦其他房間)-->執行預定工作-->結束.<BR> -->符合條件的房間不空閑-->后備預定<BR> --->不存在符合條件的房間(推薦的也不滿意)-->結束<BR>結果:房間占用<BR>2,入住:<BR>前提條件:房屋空閑<BR>輸入:用戶詳細信息:姓名,性別,證件號碼,證件種類,房間號碼(如果沒有通過預定或住在非預訂房間),聯系方式,入住時間(如果沒有預定),預計結算日期.<BR>流程:<BR>客戶要求租用<BR> |-->如果已經預訂-->執行租用房屋-->結束<BR> |-->如果沒有預定-->查詢符合條件的房屋<BR> |-->存在符合條件的房屋(不存在但推薦的房屋也可)-->執行租用-->結束<BR> |-->不存在符合條件的房屋-->結束<BR>結果:房間占用<BR>3,延期:<BR>前提條件:已經租用房間,房間沒有被預訂<BR>輸入:更改新的預計結算日期<BR>流程:客戶要求延期<BR>|-->滿足上述前提條件-->更改預計結算日期-->結束<BR> |-->房屋已經被預訂<BR> |-->更換房間不滿意-->結束<BR> |-->更換房間滿意-->租用流程.<BR>結果:房間占用 <BR>4,結算:<BR>前提條件:已租用房間<BR>輸入:房屋入住的費用<BR>流程:計算房間入住的費用.<BR>結果:房間空閑<BR>5,解除預定:<BR>前提條件:已預訂房間<BR>輸入:<BR>流程:取消預定<BR>結果:房間空閑<BR>6,候補預定:<BR>前提條件:房間已經全部被預訂或使用<BR>輸入:同預定<BR>流程:候補預定<BR>結果:房屋出現候補預定狀態.<BR>7,查詢房間出租情況:<BR>前提條件:<BR>輸入:用戶組合的查詢條件<BR>流程:根據查詢條件進行查詢<BR>結果:得到查詢結果<BR>餐廳管理模塊也類似我們不給予列出.<BR>其中賓館服務人員和管理人員應該屬于客戶端的類,而其他則屬于服務器端的類.(其中預定信息,入住信息以及查詢信息應該以接口的形式存在.<BR>4.11系統數據庫應用需求的總結:<BR>單機結構:對客房預定和入住,包廂預定,結賬等<B style='color:black;background-color:#ffff66'>賓館管理系統</B>的業務均由一臺機子完成,這樣工作效率低下,計算機之間數據不共享,不能節約賓館的成本.該方案不予以考慮.<BR>二層(C/S)結構:由前端應用程序完成對客房預定和入住,包廂預定,結賬等<B style='color:black;background-color:#ffff66'>賓館管理系統</B>的業務的操作,由服務器完成對數據存取,存儲,查詢計算和優化,并發控制以及故障等,并控制前端應用程序的訪問.因些其優點可歸納為以下幾點:<BR>數據處理及通信功能封裝在一個共享的后端數據庫中存儲過程中.不同的客戶端程序都能訪問這個后端數據庫.<BR>縮小了客戶端程序的規模,使得客戶端程序更容易進行開發也就是說前端應用程序可以做得比較瘦.<BR>可以同時處理多種任務或同時多種類型相同的任務大提高工作效率,所有信息都存儲在后端數據庫中.<BR>三層分布式結構:多層結構其實是對傳統C / S結構的擴展.由于采用多層體系結構就是把一個數據庫應用程序分解成幾個邏輯部分,客戶端程序集中處理數據顯示部分和用戶與數據之間的交互作用,而不涉及數據的存儲過程,數據的維護等等.應用服務器(即中間層)協調各個用戶之間的請求,并且掌握數據集定義的全部細節以及和遠程數據庫服務器進行數據通信.后端數據庫實現數據的存儲等操作.因此,其優點可歸納如下:<BR>1,將數據處理及通信功能封裝在一個共享的中間層里.不同的客戶端程序都能訪問這個中間層,這樣就避免了為每個客戶程序復制數據處理部分而產生的冗余.<BR>縮小了客戶端程序的規模,使得客戶端程序更容易進行開發.這都是因為不需要安裝,配置和維護數據庫連接軟件,比如B D E (即B o r l a n d數據庫引擎).<BR>用分布式數據處理過程.將一個應用程序要處理的任務分在幾臺機器上進行處理,從而提高了程序執行的性能.<BR>高了數據的安全性.將不同的數據功能封裝成一定的中間層,并且授予不同的訪問權限,這樣就能保證對數據的訪問限制.使用D e l p h i中的M T S或者C O R B A技術支持這項功能. <BR>§4.2數據流圖:<BR>我們采用SA(結構化分析)自頂向下的分析方法:<BR>頂層圖:<BR>系統流程圖:<BR>§4.3 系統功能模塊劃分<BR>系統功能框圖如圖4-2所示<BR> 如圖4-2系統功能框圖<BR>系統設置<BR>方便系統安全運作可以進行用戶修改密碼,權根設置,及添加的功能;<BR>根據用戶的視覺要求不同可以選擇合適的系統界面皮膚;<BR>如果程序或進程運行過多導致系統運行較慢可選擇注銷系統進行系統初始化;<BR>前臺系統<BR>預定信息:管理顧客姓名,房間種類,入住時間等信息.提供給旅店服務人員使用,實現預定房間;<BR>客戶入住:管理顧客姓名(需要更信息的內容),房間種類,租用時間等信息.提供給旅店服務人員使用;<BR>客戶點菜:客戶可以按食品類別進行選擇自己喜歡的菜;<BR>客戶結帳,前臺查詢:根據顧客要求(預定信息,入住信息,點菜信息)進行查詢,預訂,候補預定,入住房間,解除預定,結賬.<BR>數據編輯<BR>對客房,包廂,菜譜按類別進入信息管理可添加,刪除,修改等功能的操作.<BR>人事管理<BR>部門編輯:按賓館(企業)的人事部門結構按部門進行人事信息編輯;<BR>職工管理:主要解決了人事檔案的計算機存儲,檢索,重點解決了復雜查詢的問題和系統紀錄更新過程復雜的問題.包括對員工人事檔案的登記,檢索,查看,修改,刪除等操作;<BR>職工查詢:登記檔案時可分別添加用戶的基本信息和其他信息,并可存儲用戶照片;檢索用戶可自定義查詢條件,使得查詢結果更加精確;結合工作引擎提供請假申請,出差申請功能;<BR>業績分析<BR>客戶查詢:提供給管理人員查詢當前入住客戶及歷史客戶記錄等操作.<BR>客房查詢:提供給管理人員查詢當前客房入住的客戶名單及入住情況做出相應的策略.<BR>包箱查詢:提供給管理人員查詢當前包箱消費的客戶名單等操作.<BR>訂單查詢:提供管理人員查詢客房,包箱預定及點菜的信息操作.<BR>營業情況:提供管理人員查詢當天及歷史的營業情況等做出相應的策略.<BR>呼叫系統<BR>提供客房呼叫前臺工作人員進行服務及內員操作員工之間通知,留言等通信功能.<BR>系統幫助<BR>使用說明:方便用戶使用本系統;<BR>輔助工具:提供操作人員工作方便有記事本,計算機器,萬年歷;<BR>關于系統:提供系統作者等相關信息;<BR>硬件信息:提供PC硬件信息包括:CPU,內存,硬盤容量等信息.<BR>§4.4 系統數據庫設計<BR>在概念設計階段中,設計人員從用戶的角度看待數據及處理要求和約束,產生一個反映用戶觀點的概念模式.然后再把概念模式轉換成邏輯模式.將概念設計從設計過程中獨立開來,使各階段的任務相對單一化,設計復雜程度大大降低,不受特定DBMS的限制.<BR>利用ER方法進行數據庫的概念設計,可分成三步進行:首先設計局部ER模式,然后把各局部ER模式綜合成一個全局模式,最后對全局ER模式進行優化,得到最終的模式,即概念模式<BR>(1) 設計局部ER模式<BR>4.41實體和屬性的定義:<BR>客戶表(客戶編號(日期+順序號+識別碼),客房姓名,年齡,性別,工作單位,來源,身份證,聯系電話)<BR>收費表(客戶編號,應收費用,已收定金,實際收費用)<BR>菜譜表(編號,菜名,原料,價格)<BR>點菜表(編號,客戶編號,菜名號,價格,時間)<BR>餐桌表(餐桌編號,客戶編號,定金編號,狀態,起始時間,截止時間)<BR>定金設置表(定金編號,類別名稱,金額)<BR>包廂表(包廂編號,客戶編號,狀態,類別,定金編號,桌數,價格,起始時間,截止時間)<BR>客房表(客房編號,狀態,類別,定金編號,價格,起始時間,截止時間,客戶編號)<BR>部門表(部門編號,名稱)<BR>人事表(員工編號,姓名,性別,部門號,職位,學歷,藉貫,錄用時間)<BR>日收入支出表(編號,日收入總額,日支出總額)<BR>ER模型的"聯系"用于刻畫實體之間的關聯.一種完整的方式是對局部結構中任意兩個實體類型,依據<B style='color:black;background-color:#ff9999'>需求分析</B>的結果,考察局部結構中任意兩個實體類型之間是否存在聯系.若有聯系,進一步確定是1:N,M:N,還是1:1等.還要考察一個實體類型內部是否存在聯系,兩個實體類型之間是否存在聯系,多個實體類型之間是否存在聯系,等等.聯系定義如圖4-5所示.解釋如下:<BR> 一個消費者(客戶)只能具有一種身份,而一種身份可被多個消費者所具有;<BR> 一本客房或包廂只能屬于一種客房類別(包廂類別),而一種客房類別(包廂類別)可以包含多間客房或包廂;<BR> 一個客戶可以預定或入住多間不同的客房或包廂,在某種情況下客房也可以被多個不同的客戶預定或入住.<BR>(2)設計全局ER模式<BR>所有局部ER模式都設計好了后,接下來就是把它們綜合成單一的全局概念結構.全局概念結構不僅要支持所有局部ER模式,而且必須合理地表示一個完整,一致的數據庫概念結構.<BR>1)確定公共實體類型<BR>為了給多個局部ER模式的合并提供開始合并的基礎,首先要確定各局部結構中的公共實體類型.在這一步中我們僅根據實體類型名和鍵來認定公共實體類型.一般把同名實體類型作為公共實體類型的一類候選,把具有相同鍵的實體類型作為公共實體類型的另一類候選.<BR>2)局部ER模式的合并<BR>合并的原則是:首先進行兩兩合并;先和合并那些現實世界中有聯系的局部結構;合并從公共實體類型開始,最后再加入獨立的局部結構.<BR>3)消除沖突<BR>沖突分為三類:屬性沖突,結構沖突,命名沖突.<BR>設計全局ER模式的目的不在于把若干局部ER模式形式上合并為一個ER模式,而在于消除沖突,使之成為能夠被所有用戶共同理解和接受的同一的概念模型.<BR>4)全局ER模式的優化<BR>在得到全局ER模式后,為了提高數據庫系統的效率,還應進一步依據處理需求對ER模式進行優化.一個好的全局ER模式,除能準確,全面地反映用戶功能需求外,還應滿足下列條件:實體類型的個數要盡可能的少;實體類型所含屬性個數盡可能少;實體類型間聯系無冗余.<BR>綜上所述,"<B style='color:black;background-color:#ffff66'>賓館管理系統</B>"的全局ER模式如圖4-3所示.<BR>4.4.2 關系數據庫的邏輯設計<BR>由于概念設計的結果是ER圖,DBMS一般采用關系型(本人所使用的MS SQL Server就是關系型的DBMS),因此數據庫的邏輯設計過程就是把ER圖轉化為關系模式的過程.由于關系模型所具有的優點,邏輯設計可以充分運用關系數據庫規范化理論,使設計過程形式化地進行.設計結果是一組關系模式的定義.<BR>(1) 導出初始關系模式<BR>guest(客戶編號,客房姓名,年齡,性別,工作單位,來源,身份證,聯系電話)<BR>room(客房編號,狀態,類別,定金編號,價格,起始時間,截止時間,客戶編號)<BR>……….<BR>(2) 產生子模式<BR>子模式是用戶所用到的那部分數據的描述.除了指出用戶用到的數據外,還應指出數據與概念模式中相應數據的聯系,即指出概念模式與子模式之間的對應性.<BR>4.4.3 數據庫的實現<BR>我選用Microsoft SQL Server2000(企業版)數據庫來進行數據庫的邏輯設計.首先創建十七個基本數據庫表如表一至十七所示,然后根據全局ER圖,建立各個表之間的聯系. <BR><B style='color:black;b
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -