【文章內(nèi)容簡介】
的背后,應(yīng)用程序的框架正在等待用戶的輸入。由于您并未告訴它接收到用戶輸入后作何反應(yīng),窗口除了響應(yīng)Windows的基本操作外,它只是接受用戶的輸入,然后再忽略。Delphi把Windows編程的回調(diào)、句柄處理等繁復(fù)過程都放在一個(gè)不可見的覆蓋物下面,這樣您可以不為它們所困擾,輕松從容地對可視部件進(jìn)行編程。面向?qū)ο蟮某绦蛟O(shè)計(jì)是Delphi誕生的基礎(chǔ)。OOP立意于創(chuàng)建軟件重用代碼,具備更好地模擬現(xiàn)實(shí)世界環(huán)境的能力,這使它被公認(rèn)為是自上而下編程的優(yōu)勝者。它通過給程序中加入擴(kuò)展語句,把函數(shù)“封裝”進(jìn)Windows編程所必需的“對象”中。面向?qū)ο蟮木幊陶Z言使得復(fù)雜的工作條理清晰、編寫容易。說它是一場革命,不是對對象本身而言,而是對它們處理工作的能力而言。對象并不與傳統(tǒng)程序設(shè)計(jì)和編程方法兼容,只是部分面向?qū)ο蠓炊鴷骨樾胃?。除非整個(gè)開發(fā)環(huán)境都是面向?qū)ο蟮模駝t對象產(chǎn)生的好處還沒有帶來的麻煩多。而Delphi是完全面向?qū)ο蟮?,這就使得Delphi成為一種觸手可及的促進(jìn)軟件重用的開發(fā)工具,從而具有強(qiáng)大的吸引力。 本次系統(tǒng)開發(fā)使用ADO編程模型,Delphi 。Delphi ADO面板一共有7個(gè)組件:ADOConnection、ADODataSet、ADOTable、ADOQuery、ADOStoredProc、ADOCommand、RDSConnection。在本次的系統(tǒng)開發(fā)過程中,我最多使用到的ADO組件是:1. ADOConnection:對應(yīng)著ADO數(shù)據(jù)對象中的Connection對象,主要用于建立數(shù)據(jù)庫的連接。2. ADOQuery:通過SQL語言提取數(shù)據(jù),可以直接連接到數(shù)據(jù)庫,也可以通過ADOConnection連接到數(shù)據(jù)庫。在ADO頂層三個(gè)對象中Connection處在最頂層,用以指定數(shù)據(jù)源、建立和數(shù)據(jù)源的連接。ADOConnection封裝了ADO連接對象。ADOConnection必須和其他的數(shù)據(jù)控件連接才有效。由一個(gè)ADOConnection建立的連接可以被多個(gè)ADO數(shù)據(jù)集組件和操作組件通過設(shè)置他們的Connection屬性實(shí)現(xiàn)共享。所以作者在本次設(shè)計(jì)中就是通過使用一個(gè)ADOConnection,多個(gè)ADOQuery共享ADOConnection數(shù)據(jù)庫連接的方式。連接部件ADOConnection數(shù)據(jù)集組件ADOQuery數(shù)據(jù)源用戶界面數(shù)據(jù)庫(SQL)圖42數(shù)據(jù)庫訪問體系結(jié)構(gòu)圖建立一個(gè)ADOConnection連接Data,其連接字符串如下::=39。Provider=。Password=123。Persist Security Info=True。User ID=sa。Initial Catalog=jdgl。Data Source=.39。 //,Password=123為數(shù)據(jù)庫登陸密碼;User ID=sa是數(shù)據(jù)庫登陸名,Initial Catalog=jdgl 是所連接數(shù)據(jù)庫的名稱;“Data Source=.” 表示本機(jī) := true。 用戶進(jìn)入本系統(tǒng)前,首先要經(jīng)過登錄頁面進(jìn)行登錄,用戶輸入用戶名和對應(yīng)的密碼,系統(tǒng)進(jìn)行身份驗(yàn)證,驗(yàn)證不通過時(shí),給出錯(cuò)誤信息,并禁止用戶進(jìn)入系統(tǒng)。當(dāng)驗(yàn)證通過進(jìn)入系統(tǒng),顯示系統(tǒng)主框架頁面,讀取本系統(tǒng)包括的模塊信息,提供模塊接口。系統(tǒng)登陸功能流程圖如圖43所示:圖43系統(tǒng)登陸流程圖系統(tǒng)登陸界面窗體如圖44放置相應(yīng)組件,并對各組件進(jìn)行設(shè)置。這里會使用到的ADO組件為ADOQuery:即通過SQL語言提取數(shù)據(jù),可以直接連接到數(shù)據(jù)庫,也可以通過ADOConnection連接到數(shù)據(jù)庫。圖44系統(tǒng)登陸界面窗體系統(tǒng)顯示登陸窗口之后,如果數(shù)據(jù)庫連接驗(yàn)證正確則會顯示登陸界面。登陸模塊提供了用戶身份認(rèn)證的功能,本次系統(tǒng)得用戶身份認(rèn)證是通過在輸入的用戶名和密碼,同數(shù)據(jù)庫的權(quán)限表中的用戶名和密碼進(jìn)行比對,比對正確則登陸進(jìn)入系統(tǒng),否則提示錯(cuò)誤,需要重新輸入。系統(tǒng)設(shè)置了3次重新輸入的機(jī)會,如果3次都輸入錯(cuò)誤,則自動退出系統(tǒng)。它的部分實(shí)現(xiàn)代碼如下:if recordcount1 then//如果得到的記錄數(shù)1 那么進(jìn)行如下操作begin if i=3 then //設(shè)置一個(gè)循環(huán),使有3次輸入密碼的機(jī)會 。 messagedlg(39。密碼錯(cuò)誤!還有39。+inttostr(3i)+39。次機(jī)會39。,mtconfirmation,[mbok],0)。 i:=i+1。 //每循環(huán)一次i的值加1exit。endelsebegin [3].Text:=fieldbyname(39。UserName39。).AsString。end。1. “確定”按鈕事件代碼處理主要是兩個(gè)ADOQuery,一個(gè)表示密碼和用戶名的認(rèn)證,一個(gè)表示操作員所對應(yīng)的權(quán)限。分別如下:Adoquery1 :(39。select * from glyxx where UserName=:A and Userpassword=:B39。)。(39。A39。).Value:=trim()。 //把表glyxx中的值賦予變量username, UserpasswordADOQuery2:(39。select * from glyxx where 權(quán)限代碼=39。+QuotedStr(39。A39。)+39。 and userName=39。+QuotedStr()+39。39。)。 //把glyxx中的值賦予變量username2. “取消”按鈕事件代碼處理procedure (Sender: TObject)。begin if messagedlg(39。確定退出嗎?39。,mtconfirmation,[mbyes,mbno],0)=mryes then 。end。 系統(tǒng)主界面窗體如圖45放置相應(yīng)的組件,并對各組件進(jìn)行設(shè)置。這里主要會使用到MainMenu組件,用來創(chuàng)建主界面上的目錄。圖45系統(tǒng)主界面窗體部分代碼演示如下:“散客入住”按扭事件處理代碼,動態(tài)創(chuàng)建該事件,具體實(shí)現(xiàn)如下:begin(TRegisterUser_Single,RegisterUser_Single)。//創(chuàng)建該入住窗體。//顯示該窗體。//釋放該窗體end。begin(TRegisterUser_Single,RegisterUser_Single)。//創(chuàng)建該入住窗體。//顯示該窗體。//釋放該窗體其它按扭事件處理代碼與上“散客入住”按扭事件代碼類似,這里就不做過多的介紹。 用戶管理窗口,主要系統(tǒng)管理員對用戶權(quán)限和登陸的管理。涉及的數(shù)據(jù)庫中的表為操作員信息表。在此窗口下,管理員可以實(shí)現(xiàn)用戶登陸信息添加、刪除。此功能也主要是對數(shù)據(jù)庫進(jìn)行操作。在這個(gè)窗體里主要使用了lable等控件。按圖46放置相應(yīng)的組件,并對各組件的屬性進(jìn)行設(shè)置。圖46用戶管理界面窗體其中“申請用戶”,“刪除用戶”按扭事件處理代碼與系統(tǒng)主界面上的“散客入住”按扭事件代碼類似,這里就不做過多的介紹。申請用戶窗口如圖47放置響應(yīng)的組件,并對各組件的屬性進(jìn)行設(shè)置。主要使用的組件有ADOQuery。該窗體作用為:用于申請系統(tǒng)用戶。圖47申請用戶界面窗體部分代碼演示如下:“確定”按扭事件處理代碼中會使用ADOQuery控件,表示密碼和用戶名極其權(quán)限的認(rèn)證。相關(guān)代碼如下:…………//對確定按鈕單擊事件編程begin if (39。39。)and(39。39。)and(39。39。)then begin with ADOQuery1 do //對ADOQuery1操作 begin close。 。//清空SQL內(nèi)容 (39。select * from glyxx where username=39。+QuotedStr()+39。39。)。 //把glyxx中的值賦予變量username open。 end。 if 0 then begin………… (39。Insert glyxx values(:a,:b,:c)39。)。 ………… //abc所對應(yīng)的數(shù)據(jù)更新進(jìn)數(shù)據(jù)庫 //輸出用戶提示信息………… if (39。39。)and(39。39。)and(39。39。)then begin with ADOQuery1 do //對ADOQuery1操作 begin close。 。//清空SQL內(nèi)容 (39。select * from glyxx where username=39。+QuotedStr()+39。39。)。 //把glyxx中的值賦予變量username open。 end。 if 0 then begin刪除用戶窗口如圖48放置響應(yīng)的組件,并對各組件的屬性進(jìn)行設(shè)置。主要使用的組件有ADOQuery和DataSource。圖48刪除用戶界面窗體部分代碼演示如下:“刪除”按扭事件處理代碼:procedure (Sender: TObject)。//對刪除按鈕編程begin if (39。確定要刪除這個(gè)用戶嗎?39。,39。提示39。,mb_yesno)=id_yes then 。end。密碼修改窗口如圖49放置響應(yīng)的組件,并對各組件的屬性進(jìn)行設(shè)置。主要使用的組件有ADOQuery。密碼修改界面窗體中“確定”,“取消”按扭事件處理代碼與申請用戶界面上的按扭事件代碼類似,這里就不做過多的介紹。圖49密碼修改界面窗體用戶權(quán)限設(shè)置如圖410放置響應(yīng)的組件,并對各組件的屬性進(jìn)行設(shè)置。主要使用的組件有ADOQuery和DataSource。其按鈕事件代碼也和前邊類似,這里不做過多介紹。圖410用戶權(quán)限設(shè)置界面窗體