VisualFoxPro程序設計案例教程建立用戶使用界面_第1頁
VisualFoxPro程序設計案例教程建立用戶使用界面_第2頁
VisualFoxPro程序設計案例教程建立用戶使用界面_第3頁
VisualFoxPro程序設計案例教程建立用戶使用界面_第4頁
VisualFoxPro程序設計案例教程建立用戶使用界面_第5頁
已閱讀5頁,還剩112頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

會計學1VisualFoxPro程序設計案例教程建立用戶使用界面第一章本章目的簡單了解有關面向對象編程的特點和基礎知識掌握程序設計的基本概念和常用命令掌握窗體的運行和關閉熟悉窗體的常用事件掌握窗體中的控件屬性及代碼編寫本章任務任務一:錄入超市管理系統(tǒng)數(shù)據(jù)任務二:設計用戶主界面任務三:程序設計初步任務四:用戶登錄任務五:退出窗口任務六:商品信息瀏覽任務七:表單的綜合應用第1頁/共117頁5.1基礎知識面向對象的程序設計(OOP) (Object-OrientedProgramming,OOP)立意于創(chuàng)建軟件重用代碼,具備更好地模擬現(xiàn)實世界環(huán)境的能力,這使它被公認為是自上而下編程的優(yōu)勝者。面向對象的編程語言使復雜的工作條理清晰,編寫容易,它是一場編程技術方面的革命。VisualFoxPro是一種混合型語言,可以使用面向對象編程,也可以使用傳統(tǒng)的過程化編程。第2頁/共117頁5.1.1抽象在面向對象中的作用1.抽象的概念 一般來講,抽象是通過從特定的實例中抽取共同的性質以形成一般化的概念的過程。抽象是對某個系統(tǒng)的簡化的描述,即強調該系統(tǒng)中的某些特征,而忽略一部分細節(jié)。簡單地說,抽象是人們在理解復雜現(xiàn)象和求解復雜問題中處理復雜事物的主要工具。2.面向對象抽象的實現(xiàn) 面向對象的原理有4個,分別是數(shù)據(jù)抽象、行為共享、進化和確定性。(1)數(shù)據(jù)抽象:它為程序員提供了一種對數(shù)據(jù)和為操作這些數(shù)據(jù)所需要的算法的抽象。 數(shù)據(jù)抽象包含兩個概念:模塊化和信息隱藏。模塊化的優(yōu)點是便于修改或維護,系統(tǒng)發(fā)現(xiàn)問題后,可以確定問題出在哪個模塊上。在支持信息隱藏的系統(tǒng)中,錯誤的影響也通常被限制在一個模塊內,增強了系統(tǒng)的可靠性。(2)行為共享:行為是數(shù)據(jù)抽象引進的概念,行為是由實體的外部接口進行定義的。行為共享是指許多實體具有相同的接口,這將增加系統(tǒng)的靈活性。(3)進化:進化是考慮到實際中的需求會很快發(fā)生變化。面向對象的方法要支持進化過程就是要適應可能發(fā)生的不斷變化。(4)確定性:這里確定性是指用于描述一個系統(tǒng)確定的行為。一個確定的系統(tǒng)應該確保其中每個行為項都有一個確切的解釋,系統(tǒng)不會因不能響應某一行為而失敗。第3頁/共117頁5.1.2面向對象的基本特征面向對象的系統(tǒng)包含3個要素:對象、類和繼承。1.對象在不同領域中對對象有不同的理解。一般認為,對象就是一種事物,一個實體。從概念上講,對象是代表正在創(chuàng)建的系統(tǒng)中的一個實體。例如,一個商品銷售系統(tǒng),像顧客、商品、柜臺、廠家等都是對象。從實現(xiàn)形式上講,對象是一個狀態(tài)和操作(方法)的封裝體。狀態(tài)是由對象的數(shù)據(jù)結構的內容和值定義的,方法是一系列的實現(xiàn)步驟,它是由若干操作構成的。2.類類是創(chuàng)建對象的樣板,它包含著所創(chuàng)建對象的狀態(tài)描述和方法的定義。一個類的所有對象都有相同的數(shù)據(jù)結構,并且共享相同的實現(xiàn)操作的代碼,而各個對象有著各自不同的狀態(tài)。類是所有對象的共同行為和不同狀態(tài)的集合體。3.繼承繼承提供了創(chuàng)建新類的一種方法,這種方法就是一個新類可以通過對已有的類進行修改或擴充來滿足新類的需求。新類共享已有類的行為,而自己還具有修改或額外添加的行為。從一個類繼承定義的新類,將繼承已有類的所有方法和屬性,并且可以添加所需要的新的方法和屬性。新類被稱為已有類的子類,而已有類稱為父類,又叫基類。新類又叫派生類。第4頁/共117頁5.2任務一錄入超市管理系統(tǒng)數(shù)據(jù)5.2.1相關知識數(shù)據(jù)庫的對話框在VisualFoxPro中稱為“窗體”,一般還稱為表單。窗體也是VisualFoxPro中的一種對象,它使用計算機屏幕將數(shù)據(jù)庫中的表或查詢中的數(shù)據(jù)顯示出來。由于數(shù)據(jù)庫軟件是給用戶使用的,所以要為使用的用戶提供一個友好的使用界面。這是建立一個窗體的基本目標。一個設計優(yōu)秀的窗體是非常必要的。不管數(shù)據(jù)庫中表或查詢設計得有多好,如果窗體設計得十分雜亂,而且沒有任何提示,就會令使用者感覺到迷惑,甚至增加失誤的概率。這樣的窗體就不利于數(shù)據(jù)庫軟件的應用和推廣。本任務將介紹如何使用VisualFoxPro編寫一個簡單的程序。在此之前先介紹VisualFoxPro的各個部分的功能,包括工具箱、項目管理器、“屬性”窗體設計器等,下面分別介紹這幾部分的功能。第5頁/共117頁1.工具箱

當建立一個新的表單時,或者打開表單設計器時,一般會默認顯示工具箱,上面提供了VisualFoxPro表單中常用的各個控件。選中控件,然后在窗體設計器中拖動鼠標,即可在其中繪制控件。初始狀態(tài)的工具箱只有一個“常用”選項卡,在工具箱上右擊,在彈出的快捷菜單中選擇“添加選項卡”命令,可以為工具箱添加選項卡;右擊,選擇相關選項,可以打開其他選項卡。第6頁/共117頁常用表單控件名稱第7頁/共117頁2.項目管理器項目是VisualFoxPro的組織應用程序的方式,一般而言,一個工程包含開發(fā)一個應用程序所需要的所有文件,包括窗體文件、程序文件、數(shù)據(jù)庫文件、表文件、報表文件、菜單文件、索引文件等。第8頁/共117頁5.2.2任務實現(xiàn)本小節(jié)主要技能點如下:(1)創(chuàng)建最基本表單。(2)用表單向導創(chuàng)建表單。(3)一對多表單向導第9頁/共117頁1.創(chuàng)建最基本的表單在的“項目管理器”中,選擇“文檔”選項卡,選擇下面列表框中的“表單”選項,在右側操作區(qū)單擊“新建”按鈕。在“新建表單”對話框中單擊“新建表單”按鈕。第10頁/共117頁選擇“文件”菜單中的“保存”命令,選擇相關的文件夾并輸入正確的表單名即完成第一個表單的制作,如圖所示。第11頁/共117頁選擇要保存表單的位置第12頁/共117頁也可以重新命名該表單,然后單擊“保存”按鈕,該表單就會出現(xiàn)在當前項目中,如圖所示。關閉設計器,選擇第一個表單,在右側的功能區(qū)單擊“運行”按鈕。第13頁/共117頁表單運行結果如圖5-9所示。單擊Form1右上角的關閉按鈕,可以關閉Form1。再次選擇第一個表單,單擊“修改”按鈕,可以對Form1(第一個表單)進行修改。第14頁/共117頁選擇菜單中的“顯示”→“表單控件工具欄”命令,可以控制表單控件工具欄的顯示。單擊工具欄中的按鈕,并在第一個表單(Form1)上再次單擊,則會在Form1中創(chuàng)建一個新的按鈕。第15頁/共117頁雙擊Command1按鈕,會出現(xiàn)該按鈕的代碼編輯器在Command1的click事件中輸入thisform.release,即運行表單后,單擊此按鈕就會退出表單。關閉表單設計器,運行表單,測試按鈕Command1的效果。第16頁/共117頁2.用表單向導創(chuàng)建簡單表單(1)在“項目”菜單中,選擇“新建”→“表單向導”命令,出現(xiàn)如圖所示的界面。第17頁/共117頁(2)選擇“表單向導”選項,單擊“確定”按鈕。(3)選擇一個數(shù)據(jù)表,然后為該表建立一個表單,這里選擇的是“用戶”表,單擊按鈕可以把“用戶”表的所有字段全部選中,單擊按鈕可以選取單個字段。單擊“下一步”按鈕。第18頁/共117頁(4)如圖5-15所示,在該對話框中選擇一個自己喜歡的樣式,使表單更加美觀,單擊“下一步”按鈕繼續(xù)。第19頁/共117頁(5)該對話框主要是對“用戶”表的數(shù)據(jù)進行排序的設置,這里選擇“用戶編號”作為索引,單擊“添加”按鈕,再單擊“下一步”按鈕第20頁/共117頁(6)根據(jù)該對話框的提示,可以單擊“預覽”,觀看一下效果,也可以直接單擊“完成”按鈕,完成表單的制作第21頁/共117頁(7)單擊“預覽”按鈕,效果如圖5-18所示,返回向導,單擊“完成”按鈕,將表單命名為“用戶”,選擇一個存放表單的位置,如D:\superMarket第22頁/共117頁3.一對多表單向導選擇“項目”菜單中的“新建”命令,選擇“一對多表單向導”單擊“確定”按鈕,效果如圖5-20所示。選擇“供貨商”表,然后將字段導入到“選定字段”列表框中。單擊“下一步”按鈕圖5?19選擇“一對多表單向導”選項圖5?20父表選擇第23頁/共117頁從子表中選擇字段(這里選擇“商品信息”表,導出所有字段,單擊“下一步”按鈕。)第24頁/共117頁如圖5-22所示,是建立兩個表單的關系,以便聯(lián)動顯示。單擊“下一步”按鈕。圖5?22建立表間關系第25頁/共117頁如圖5-23所示,在“樣式”列表框中選擇自己喜歡的樣式,這里選擇“陰影式”,單擊“下一步”按鈕。圖5?23選擇表單樣式第26頁/共117頁圖5-24是選擇排序次序的字段,這里選擇“供貨商編號”,單擊“下一步”按鈕圖5?24數(shù)據(jù)排序方式第27頁/共117頁單擊“完成”按鈕,保存為“供貨渠道”圖5?25完成及相關選項第28頁/共117頁單擊“完成”按鈕,保存為“供貨渠道”,運行表單第29頁/共117頁課后練習1.利用向導制作一個“入庫記錄”的表單,并用表單設計器修改和美化產生的表單,利用此表單瀏覽庫存商品信息,并通過此表單輸入相關的記錄。第30頁/共117頁課后練習2.利用向導分別制作以下幾個數(shù)據(jù)表的表單,如“供貨商”表、“會員”表、“交易”表、“商品信息”表、“生產商”表、“銷售”表、“用戶”表,并通過表單為相關的數(shù)據(jù)表添加數(shù)據(jù)和修改數(shù)據(jù)。第31頁/共117頁5.3任務二設計用戶主界面

設計用戶主界面,并為主界面各項按鈕指定代碼,用以訪問相關表單。第32頁/共117頁5.3.1相關知識點1.容器和控件2.標簽控件3.“屬性”窗口4.和字體有關的屬性5.命令按鈕控件6.和鼠標操作相關的常用事件7.設置訪問鍵8.設置控件的Tab鍵次序9.設置工具提示文本10.啟用和廢止控件11.定義表單行為12.指定表單的圖標第33頁/共117頁1.容器和控件VisualFoxPro6.0的基類共分成兩個大類:容器類和非容器類。一般稱容器類基類為容器,而把非容器類基類稱為控件,有時也把所有基類都稱為控件。(1)容器類。容器類可以包含其他對象,并且允許訪問這些對象。

(2)控件類。控件類的封裝比容器類更為嚴密,但也因此喪失了一些靈活性。

(3)容器中各對象的調用。在進行容器類“子類”或“對象”的設計時,往往要調用容器中某一特定對象,這就要掌握OOP方法中對象的標識方法。

例如,在圖5-12所示的代碼編輯器中輸入。mand1.caption="點擊事件",并刪除thisform.release。運行表單,單擊按鈕,可以看到最后的效果。其中thisform是command1的父容器,command1是其中的一個控件,caption是command1的屬性。文字“點擊事件”是這個屬性的值。注:thisform在VisualFoxPro中用來代表當前的表單。第34頁/共117頁2.標簽控件在設計表單界面時,幾乎都要有一些提示某個控件的作用的文字,比如在注冊時,就有用戶名、密碼等文字在某些表單控件之前進行顯示,提示用戶某控件可以做什么,如果不知道,用戶就會不了解這個界面,注冊也就無從下手,這就是標簽的作用。標簽第35頁/共117頁3.“屬性”窗口“屬性”窗口用于修改窗體和控件的屬性,如圖5-30所示,其中上方的下拉列表框中列出當前的窗體及其控件的名稱,可以通過下拉列表來選擇窗體或某一個控件。在窗體設計器中選擇某一個對象之后,“屬性”窗口也會顯示該對象的屬性。圖5-30表單“屬性”窗口在屬性列表中,caption屬性最為常用,用于顯示文本。而為了編程方便些,還要修改name屬性,即在代碼中引用對象時所用的名稱。

第36頁/共117頁在設計表單時,為了讓界面更友好、更美觀,通常都要對界面進行一定的美化,其中很重要的一項就是對字體屬性的設置,常用的控件如標簽和按鈕等都會有字體屬性,可以在“屬性”窗口中進行設置,圖5-31所示為與字體有關的屬性。4.和字體有關的屬性圖5-31和字體有關的屬性FontBold、FontItalic、FontStrikethru、Fontunderline屬性:指定文本是否具有粗體、斜體、刪除線或下劃線等效果。FontExtend的作用是指定文本是否可擴展。FontName屬性:指定顯示文本的字體名,默認值為ArialFontSize屬性:默認的設置是9磅FontOutline屬性:作用是指定與控件相關聯(lián)的文字是否顯示為空心字FontShadow屬性:作用是指定與控件相關聯(lián)的文字是否帶有陰影FontSize屬性:指定對象文本的字體大小,以磅為單位,默認值為10磅ForeColor屬性:指定用于顯示對象中文本前景色第37頁/共117頁5.命令按鈕控件命令按鈕通常用來啟動一個事件,如關閉一個表單、移動到不同記錄、打印報表等動作。可使用Caption屬性指定在命令按鈕上顯示的文本。命令按鈕常用的事件是Click事件,當編輯代碼時,可以選擇執(zhí)行的事件,如圖5-33所示。圖5-33命令按鈕事件選擇第38頁/共117頁(1)Click:當在程序中包含觸發(fā)此事件的代碼,或者將鼠標指針放在一個控件上按下并釋放鼠標左鍵,或者更改特定控件的值,或在表單空白區(qū)單擊時,此事件發(fā)生。Click事件發(fā)生在用戶:①單擊復選框、命令按鈕、列表框或選項按鈕控件時。②使用箭頭鍵或按鼠標鍵在下拉列表框或列表框中選擇一項時。③在命令按鈕、選項按鈕或復選框有焦點時按SPACEBAR鍵時。④表單中有Default屬性設置為“真”(.T.)的命令按鈕并且按回車鍵時。⑤按一個控件的訪問鍵。例如,若一個命令按鈕的標題為“\<Go”,則按ALT+G組合鍵可觸發(fā)Click事件。⑥單擊表單空白區(qū)。當指針位于標題欄、控制菜單框或窗口邊界上時,不發(fā)生表單的Click事件。⑦單擊微調控件的文本輸入?yún)^(qū)。⑧單擊廢止的控件時,廢止控件所在的表單發(fā)生Click事件。6.和鼠標操作相關的常用事件第39頁/共117頁(2)DblClick:當連續(xù)兩次快速按下鼠標左鍵(主鍵)并釋放時,此事件發(fā)生。當從列表框或組合框中選擇一個選項并按回車鍵時,也發(fā)生DblClick事件。如果在系統(tǒng)指定的雙擊時間間隔內不發(fā)生DblClick事件,對象認為這種操作是一個Click事件。因此,當向這些相關事件中添加過程時,必須確認這些事件不沖突。另外,不響應DblClick事件的控件可能會將一個雙擊事件確認為兩個單擊事件。6.和鼠標操作相關的常用事件第40頁/共117頁7.設置訪問鍵代表訪問鍵的字符在菜單上或對話框中加有下劃線或突出顯示。同時按下Alt鍵和訪問鍵可以激活菜單或對話框。有時用來指代熱鍵。設置訪問鍵的方式是在設置Caption屬性時,在訪問鍵的相關字母前加/<Close則顯示的結果為Close,設置的訪問鍵為Alt+C。第41頁/共117頁8.設置控件的Tab鍵次序按鍵盤上的Tab鍵時,焦點從一個字段或對象移向另一個字段或對象的次序。對表單中的控件來說,按照控件添加的次序指定Tab鍵次序,每個新建控件都位于Tab鍵次序的末尾。一個良好的Tab鍵次序,對于用戶的使用以及提高用戶的工作效率是至關重要的??梢酝ㄟ^“屬性”窗口來調整個別控件的Tab鍵值也可以通過菜單“顯示”→“Tab鍵次序”命令來依次指定。第42頁/共117頁9.設置工具提示文本ToolTipText:指定控件工具的提示文本。當在運行狀態(tài)時,鼠標懸停在相關控件上方,系統(tǒng)會給出相關的提示。第43頁/共117頁10.啟用和廢止控件在某給定情況下,如果禁止使用某個控件,可以將該控件的Enabled屬性設置為“假”(.F.)。將每個按鈕的Enabled屬性設置為“真”(.T.)或“假”(.F.),可以啟用或廢止組中單個選項按鈕或命令按鈕;也可通過設置組的Enabled屬性來啟用或廢止組中的全部按鈕。如下面一行代碼所示: Tmand1.Enabled=.F.當控件的Enabled屬性設置為“假”(.F.)時,控件的所有事件都將廢止,但會顯示出禁用的前景色和背景色。第44頁/共117頁11.定義表單屬性表5-3表單行為屬性(一)屬性說明默認值AlwaysOnTop控制表單是否總是處在其他打開窗口之上“假”(.F.)AutoCenter控制表單初始化時是否讓表單自動在VisualFoxPro主窗口中居中“假”(.F.)BackColor決定表單窗口的顏色255、255、255BorderStyle決定表單是否沒有邊框,還是具有單線邊框、雙線邊框或系統(tǒng)邊框。如果BorderStyle為3—可調邊框,用戶能重新改變表單大小3Caption決定表單標題欄顯示的文本Form1Closable控制用戶是否能通過雙擊“關閉”框來關閉表單“真”(.T.)DataSession控制表單或表單集里的表是否能在可全局訪問的工作區(qū)中打開,或僅能在表單或表單集所屬的私有工作區(qū)內打開1MaxButton控制表單是否具有最大化按鈕真(.T.)第45頁/共117頁11.定義表單屬性表5-3表單行為屬性(二)屬性說明默認值MinButton控制表單是否具有最小化按鈕真(.T.)Movable控制表單是否能移動到屏幕的新位置真(.T.)ScaleMode控制對象的尺寸和位置屬性的度量單位是pixels還是像素。由“選項”對話框中的設置決定由“選項”對話框中的設置決定Scrollbars控制表單所具有的滾動條類型0-無TitleBar控制標題欄是否顯示在表單的頂部1-打開ShowWindow控制表單是否在屏幕中、懸浮在頂層表單中或作為頂層表單出現(xiàn)0-在屏幕中WindowState控制表單是最小化、最大化還是正常狀態(tài)0-普通WindowType控制表單是非模式表單(默認)還是模式表單。如果表單是模式表單,用戶在訪問應用程序用戶界面中任何其他單元前必須關閉這個表單0-無模式第46頁/共117頁12.指定表單的圖標在VisualFoxProforWindows中,可指定表單的圖標;當該表單在WindowsNT窗口中最小化或位于Windows95的標題欄上時顯示為這個圖標。如果要指定表單的圖標,將表單的Icon屬性設置為一個.ico文件的文件名。若要指定表單的圖標,打開表單,再打開“屬性”窗口,將Icon屬性設置為希望顯示的.ico文件。第47頁/共117頁5.3.2任務實現(xiàn)(1)效果如圖5-34所示,添加按鈕和圖片,設置按鈕的名稱。各按鈕的Click事件的代碼分別如下:“采購商品”按鈕Click事件:doform"商品信息"“生產商”按鈕Click事件:doform"生產商"“供貨商”按鈕Click事件:doform"供貨商"“會員注冊”按鈕Click事件:doform"會員注冊"“用戶注冊”按鈕Click事件:doform"用戶注冊"“采購商信息”按鈕Click事件:reportform采購商信息報表preview“生產商信息”按鈕Click事件:reportform生產商信息報表preview第48頁/共117頁5.4任務三利用程序瀏覽數(shù)據(jù)5.4.1相關知識1.程序設計的基本概念程序設計(Programming)是指設計、編制、調試程序的方法和過程(程序設計=數(shù)據(jù)結構+算法)。它是目標明確的智力活動。由于程序是軟件的本體,軟件的質量主要通過程序的質量來體現(xiàn),在軟件研究中,程序設計的工作非常重要,內容涉及有關的基本概念、工具、方法及方法學等。按照結構性質,有結構化程序設計與非結構化程序設計之分。前者是指具有結構性的程序設計方法與過程。它具有由基本結構構成復雜結構的層次性;后者反之。按照用戶的要求,有過程式程序設計與非過程式程序設計之分。

第49頁/共117頁2.程序設計的過程軟件設計思路和方法的一般過程,包括設計軟件的功能和實現(xiàn)的算法及方法、軟件的總體結構設計和模塊設計、編程和調試、程序聯(lián)調和測試以及編寫、提交程序。

(1)系統(tǒng)分析員通過和用戶的溝通初步了解需求,列出系統(tǒng)的主要功能模塊,每個主要功能模塊可能會有哪些小功能模塊,對于有些需求比較明確相關的界面時,在這一步里可以初步定義好少量的界面。(2)系統(tǒng)分析員深入地了解和分析需求,根據(jù)自己的經驗和需求做出一份系統(tǒng)的功能需求文檔。文檔會清楚列出系統(tǒng)大致的主要功能模塊,主要功能模塊有哪些小功能模塊,并且會列出相關的界面和界面功能。(3)系統(tǒng)分析員和用戶再次確認需求。(4)系統(tǒng)分析員根據(jù)確認的需求文檔所列出的界面和功能需求,用迭代的方式對每個界面或功能做系統(tǒng)的概要設計。(5)系統(tǒng)分析員把寫好的概要設計文檔提交給程序員,程序員根據(jù)所列出的功能進行設計和編寫代碼。(6)測試編寫好的系統(tǒng),交給用戶使用,用戶使用后逐一確認每個功能,然后驗收。第50頁/共117頁3.程序設計基礎(1)變量。變量是在程序設計中最重要的一個要素,幾乎任何一個程序設計語言中都要有變量存在。操作過程中可以改變其取值或數(shù)據(jù)類型的數(shù)據(jù)項。在VisualFoxPro系統(tǒng)中,變量分為字段變量、內存變量、數(shù)組變量和系統(tǒng)變量4類。此外,作為面向對象的程序語言,VisualFoxPro系統(tǒng)在進行面向對象的程序設計中引入了對象的概念,對象實質上也是一類變量。

確定一個變量,需要確定其3個要素:變量名、數(shù)據(jù)類型和變量值。命名約定:在VisualFoxPro系統(tǒng)中,將表示、存儲數(shù)據(jù)的常量、變量、數(shù)組、字段、記錄、對象、表、數(shù)據(jù)庫等,都稱為數(shù)據(jù)容器。所有數(shù)據(jù)容器均需命名以相互區(qū)別,為規(guī)范各類對象的命名,VisualFoxPro系統(tǒng)推薦若干“命名約定”供用戶參考,以提高操作命令與程序的可讀性和規(guī)范性。使用字母、下劃線和數(shù)字命名。一般建議不采用漢字命名。命名以字母或下劃線開頭;除自由表中字段名、索引的TAG標識名最多只能有10個字符外,其他的命名可使用1~128個字符。避免使用VisualFoxPro的保留字。第51頁/共117頁①字段變量。在VisualFoxPro系統(tǒng)中,表由若干記錄構成,每個記錄包含若干數(shù)量相同的字段,而同一字段在不同記錄中對應不同的值。所以字段是變量。字段變量與其他變量不同,是定義在表中的變量,隨表的存取而存取,是永久性變量。字段變量的變量名即字段名,數(shù)據(jù)類型為VisualFoxPro系統(tǒng)中的任意數(shù)據(jù)類型,變量值即字段值。②內存變量。內存變量是用戶在內存中定義的,用來存放程序運行的中間結果和最終結果,是進行數(shù)據(jù)的傳遞和運算的變量。有一種內存變量在全部程序、過程和自定義函數(shù),以及它調用的程序、過程和自定義函數(shù)中都有效,這就是全局型內存變量。全局型內存變量使用Public定義,在后面的實例中會有它的應用。③系統(tǒng)變量。系統(tǒng)變量是VisualFoxPro系統(tǒng)特有的內存變量,由VisualFoxPro系統(tǒng)定義、維護。系統(tǒng)變量的變量名均以下劃線“_”開始,如_WINDOWS、_CLIPTEXT等。因此在定義內存變量和數(shù)組變量名時,不要以下劃線開始,以免與系統(tǒng)變量名沖突。系統(tǒng)變量設置、保存了很多系統(tǒng)的狀態(tài)、特性,了解、熟悉并充分地運用系統(tǒng)變量,會給數(shù)據(jù)庫系統(tǒng)的操作和管理帶來很多方便,特別是開發(fā)應用程序時更為突出。

第52頁/共117頁a.變量的保存。VisualFoxPro提供相應命令,可用文件形式將某些變量保存起來,以便重復使用。格式:SAVETO<變量文件名>[ALLLIKE<通配符>|ALLEXCEPT<通配符>]功能:將指定變量的信息保存到指定的變量文件(*.MEM)中。

ALLLIKE<通配符>:只保存符合通配符條件的所有變量。

ALLEXCEPT<通配符>:只保存不符合通配符條件的所有變量。b.變量的恢復。需要保存在文件中的變量信息時,必須先恢復到內存后方可使用。格式:RESTOREFROM<變量文件名>[ADDITIVE]功能:將指定變量文件(*.MEM)中的變量信息恢復到內存中。ADDITIVE:省略此項,清除內存所有變量后再恢復文件中變量的信息;加選此項,將變量文件中的變量信息追加到內存現(xiàn)有變量信息中。c.變量的清除。VisualFoxPro系統(tǒng)對定義內存變量的數(shù)量是有限制的,應及時清理,盡量減少內存的占用,以定義其他變量。格式:RELEASE<變量表>RELEASEALL[LIKE<通配符>|EXCEPT<通配符>]第53頁/共117頁(2)分支結構。①簡單的條件語句。格式:IF<條件表達式><命令序列>ENDIF說明:條件表達式可以是各種表達式的組合,其值必須是邏輯“真”或“假”。當條件表達式的值為“真”時,先執(zhí)行IF與ENDIF間的語句,然后執(zhí)行ENDIF后面的語句;當條件表達式的值為“假”時,直接執(zhí)行ENDIF后面的語句。例1:從鍵盤輸入一個數(shù),若小于0,則顯示“輸入的是負數(shù)”。*liti1clearinput"輸入一個數(shù):"toxifx<0?"輸入的是負數(shù)"endif第54頁/共117頁②帶ELSE的條件語句。格式:IF<條件表達式><命令序列1>ELSE<命令序列2>ENDIF說明:當條件表達式的值為“真”時,先執(zhí)行命令序列1,然后轉去執(zhí)行ENDIF后面的語句;當條件表達式的值為“假”時,先執(zhí)行命令序列2,然后轉去執(zhí)行ENDIF后面的語句。例2:從鍵盤輸入一個數(shù),若小于0,顯示“輸入的是負數(shù)”;否則顯示“輸入的是非負數(shù)”。*liti2clearinput"輸入一個數(shù):"toxifx<0?"輸入的是負數(shù)"else?"輸入是的非負數(shù)"endif第55頁/共117頁③IF條件語句的嵌套。格式1:IF<條件1>IF<條件2><命令序列1>ELSE<命令序列2>ENDIFELSE<命令序列3>ENDIF當“條件1”為“真”,同時“條件2”為“真”時,執(zhí)行“命令序列1”。當“條件1”為“真”,同時“條件2”為“假”時,執(zhí)行“命令序列2”。當“條件1”為“假”,執(zhí)行“命令序列3”。第56頁/共117頁格式2:IF<條件1><命令序列1>ELSEIF<條件2><命令序列2>ELSE<命令序列3>ENDIFENDIF當“條件1”為“真”,執(zhí)行“命令序列1”。當“條件1”為“假”,同時“條件2”為“真”時,執(zhí)行“命令序列2”。當“條件1”為“假”,同時“條件2”為“假”時,執(zhí)行“命令序列3”。第57頁/共117頁例3:從鍵盤輸入一個數(shù),若小于0,顯示“輸入的是負數(shù)”;若等于0,顯示“輸入的是零”;若大于0,則顯示“輸入的是正數(shù)”。*liti3clearinput"輸入一個數(shù):"toxifx<0?"輸入的是負數(shù)"elseifx=0?"輸入的是零"else?"輸入的是正數(shù)"endifendif實現(xiàn)過程與例2一樣,都是在命令窗口中執(zhí)行,只是新建的文件名要另起一個,以免重復,這里使用liti4作為文件名,讀者也可以自己起一個名字。第58頁/共117頁④DOCASE條件語句的嵌套。DOCASECASE〈條件表達式1〉〈命令序列1〉CASE〈條件表達式2〉〈命令序列2〉...CASE〈條件表達式N〉〈命令序列N〉[OTHERWISE〈命令序列N+1〉]ENDCASE在執(zhí)行DOCASE命令時,依次判斷各條件,若<條件表達式>為.T.,就執(zhí)行對應的<命令序列>,然后轉去執(zhí)行ENDCASE后面的語句。若<條件表達式>為.F.,不執(zhí)行<命令序列>,繼續(xù)判斷下一個條件。若沒有一個條件為T,則執(zhí)行OTHERWISE后面的<命令序列>。若沒有OTHERWISE語句,則不作任何操作就轉去執(zhí)行ENDCASE之后的語句。第59頁/共117頁例4:利用docase判斷今天是星期幾。*liti4input"輸入一個1-7的數(shù):"toxdocasecasex=1?"星期一"casex=2?"星期二"casex=3?"星期三"casex=4?"星期四"casex=5?"星期五"casex=6?"星期六"casex=7?"星期日"otherwise?"請輸入要求輸入的數(shù)字?。?endcase第60頁/共117頁(3)循環(huán)結構.①條件循環(huán)(“當”型循環(huán)控制語句)。a.語句格式:DOWHILE<條件表達式><命令序列>ENDDOb.執(zhí)行過程:當執(zhí)行到DOWHILE語句時,首先判斷條件表達式的值是否為真,若為真則執(zhí)行下面的命令序列,遇到ENDDO即返回到循環(huán)頭,再檢查條件是否為真,如果條件仍為真,則再執(zhí)行<命令>序列;如此反復檢查和執(zhí)行,直到<條件表達式>的值為假,即退出循環(huán),轉去執(zhí)行ENDDO后面的語句。c.說明。循環(huán)體:被重復執(zhí)行的命令序列。DOWHILE與ENDDO必須配對使用。循環(huán)條件的改變、死循環(huán)、循環(huán)的退出。d.循環(huán)輔助語句格式:EXIT功能:用于終止本層循環(huán),無條件轉移到本層ENDDO后面的語句去執(zhí)行。格式:LOOP功能:終止本次循環(huán),返回到循環(huán)頭,進行本層次的下一次循環(huán)。第61頁/共117頁例5:循環(huán)輸出1+2+3+…+100的和。*liti5CLEAR &&清除屏幕顯示信息S=0 &&設置變量S初始值為0,用于保存和N=1 &&設置變量N初始值為1,用于計數(shù)DOWHILEN<=100 &&當N<100時,執(zhí)行DO和ENDDO之間的代碼

S=S+N &&將S+N的值賦給SN=N+1 &&N的值增加1ENDDO?"S=",S實現(xiàn)過程與例2一樣,都是在命令窗口中執(zhí)行,只是新建的文件名要另起一個,免得重復,這里使用liti6作為文件名,讀者也可以自己起一個名字。第62頁/共117頁②步長循環(huán)(“計數(shù)”型循環(huán)控制語句)。格式:FOR<內存變量>=<初值>TO<終值>[STEP<步長值>]<命令序列>ENDFOR功能:根據(jù)給定的次數(shù)重復執(zhí)行命令序列,實現(xiàn)程序循環(huán)。說明:[STEP〈步長值〉]:<步長值>是循環(huán)控制變量遞增或遞減的步長。如果步長值為正,循環(huán)控制變量遞增;如果步長值為負,則循環(huán)控制變量遞減。如果缺省STEP子句,循環(huán)控制變量每次的增量為1。第63頁/共117頁例6:求1+2+3+…+99+100的值。*liti6s=0forx=1to100&&循環(huán)遞增X的值,每次增長1s=s+xendfor?"s=",s實現(xiàn)過程與例2一樣,都是在命令窗口中執(zhí)行,只是新建的文件名要另起一個,免得重復,這里使用liti7作為文件名,讀者也可以自己起一個名字。第64頁/共117頁5.4.2任務實現(xiàn)(1)在“項目”選項卡中,建立一個自定義表單,命名為“程序結果”,用來輸出分支結構、循環(huán)結構和統(tǒng)計用戶數(shù)量的結果,如圖5-36所示。注:Label1為標簽。圖5-36程序運行及結果顯示第65頁/共117頁(2)編寫“分支結構”按鈕的代碼。a=5Ifa>3 &&如果a>3thisform.label1.caption="比3大" &&在標簽上顯示最終結果else &&如果a<=3thisform.label1.caption="比3小" &&在標簽上顯示最終結果endif &&判斷結構結束說明:上面的代碼首先為變量A賦值為5,然后通過與3進行比較,如果A>3,則在標簽中顯示比3小,否則顯示比3大。上面的標簽中,主要利用的就是caption屬性,而按鈕的事件就是Click事件,如圖5-37所示。圖5-37按鈕事件選擇第66頁/共117頁(3)編寫“循環(huán)結構”按鈕的代碼。S=0N=1DOWHILEN<=100S=S+NN=N+1ENDDOTHISFORM.LABEL1.CAPTION=STR(S)&&LABEL1為在此表單上建立的一個標簽的默認名稱上面的代碼還是利用命令按鈕的click屬性和標簽的caption屬性。這個命令按鈕的作用就是求1+2+3+…+100的和,最終將結果顯示到標簽中。在代碼中,str()需要注意一下,因為標簽顯示的是文本,而利用循環(huán)得出的值是數(shù)值型的,所以需要利用該函數(shù)將數(shù)值型數(shù)據(jù)轉換為字符型。第67頁/共117頁(4)編寫“統(tǒng)計用戶數(shù)量”按鈕的代碼。USE用戶 &&“用戶”表是超市系統(tǒng)里的一個數(shù)據(jù)表N=0 &&設置變量N的初始值為0DOWHILE.NOT.EOF() &&當數(shù)據(jù)表沒有到達文件尾時

Display &&顯示記錄

N=N+1 &&變量N+1SKIP &&轉到下一條記錄ENDDO &&跳回到dowhile語句THISFORM.LABEL1.CAPTION=STR(N)&&顯示最后統(tǒng)計的結果第68頁/共117頁課后練習1.制作一個表單,添加一個按鈕和標簽,利用循環(huán)輸出100以內的奇數(shù)和,代碼加入到按鈕的單擊事件中,單擊按鈕后在標簽上顯示結果。[提示]利用modifycommand命令設計程序,利用do命令運行程序,程序名稱自定義2.利用循環(huán)語句,輸出數(shù)據(jù)庫中交易表的某會員的交易信息。[提示]利用modifycommand命令設計程序,利用do命令運行程序,代碼如下:clearuse供貨商 &&“供貨商”表是超市系統(tǒng)里的一個數(shù)據(jù)表dowhile.not.eof() &&當數(shù)據(jù)表沒有到最后記錄時

disp &&顯示記錄

skip &&轉到下一條記錄enddo &&跳回到dowhile語句use &&關閉此表3.利用循環(huán)顯示“商品信息”表的最新10條數(shù)據(jù)。[提示]可以利用modifycommand命令設計程序和用do命令運行程序,也可以利用項目管理器設計程序并運行程序。第69頁/共117頁5.5任務四用戶登錄5.5.1相關知識1.數(shù)據(jù)環(huán)境的使用每一個使用表的表單都包括一個數(shù)據(jù)環(huán)境。數(shù)據(jù)環(huán)境是一個容器對象,它用來定義與表單相聯(lián)系的數(shù)據(jù)實體(表、視圖)的信息及其相互聯(lián)系。數(shù)據(jù)環(huán)境容器一般包含一到多個Cursor類對象,表單中所含Cursor類對象的個數(shù)與表單關聯(lián)的數(shù)據(jù)實體(表、視圖)的個數(shù)相同,一個Cursor類對象與一個數(shù)據(jù)實體(表、視圖)對應,如果一個表單關聯(lián)多個表,在數(shù)據(jù)環(huán)境容器中還有一個Relation類對象描述這些表之間的關系。下面對數(shù)據(jù)環(huán)境容器及其可能包含的對象分別進行說明。

(1)游標(cursor)類對象(2)關系(Relation)類對象(3)數(shù)據(jù)環(huán)境設計器第70頁/共117頁2.Init事件對于表單集和其他容器對象來說,容器中對象的init事件在容器的init事件之前觸發(fā),因此容器的init事件可以訪問容器中的對象。容器中對象的init事件的發(fā)生順序與它們添加到容器中的順序相同。如果不創(chuàng)建控制,可以在init事件中返回“假”(.F.),這時不觸發(fā)Destroy事件。例如,下面的代碼在Invoice表不存在時返回“假”(.F.)。第71頁/共117頁3.接受預先不能確定的輸入該功能是一個軟件必不可少的功能,舉個例子來講,用戶在登錄一個系統(tǒng)時,如果沒有填寫用戶名和密碼,直接單擊登錄,結果會怎么樣?有兩種結果:一種是進入到系統(tǒng),這就是沒有容錯的結果,這就使得用戶無須注冊,進而使得注冊功能失敗和降低了系統(tǒng)的安全性和權限控制;第二種結果是提示用戶輸入用戶名和密碼,如果容錯的好一些,還會限制用戶輸入次數(shù),如果超過預定的次數(shù),這個賬號將被鎖定。4.文本框創(chuàng)建一個文本框(Textbox),從中可以編輯變量、數(shù)組元素或字段的內容。所有標準的VisualFoxPro編輯功能,如剪切、復制和粘貼在文本框中都可用。使用輸入掩碼和Format屬性,可以指定在文本框中如何輸入和顯示數(shù)值。例如,PasswordChar屬性就可以設置成希望的任何掩碼,如“*”。第72頁/共117頁5.組合框創(chuàng)建一個組合框(Combobox)后,當被選中時,組合框打開,并顯示項的列表,從中可選擇一項。組合框控件結合了文本框控件和列表框控件的特性??稍谖谋究虿糠州斎胄畔⒒驈牧斜砜虿糠诌x擇一項。通過在組合框控件中的一項前面加一個反斜杠(\),可以讓該項失效。Style屬性確定組合框的類型。若Style屬性設為0,則創(chuàng)建一個下拉組合框;若Style屬性設為2,則創(chuàng)建一個下拉列表框。6.命令按鈕組前面已經提到過命令按鈕,這里再講解一下命令按鈕組。使用CommandGroup控件可創(chuàng)建一組命令按鈕,并且可以單個或作為一組操作其中的按鈕。使用CommandButton控件可創(chuàng)建單個命令按鈕??墒褂肂uttonCount屬性指定組中的命令按鈕數(shù)目,使用Caption屬性指定命令按鈕組的標簽。第73頁/共117頁5.5.2任務實現(xiàn)(1)打開超市管理系統(tǒng)工程,新建一個窗體Login。(2)在窗體設計器中添加如圖5-39所示的控件。圖5-39用戶登錄表單第74頁/共117頁(3)添加數(shù)據(jù)環(huán)境:右鍵單擊該表單,在彈出的快捷菜單中選擇“數(shù)據(jù)環(huán)境”命令,將用戶表添加到數(shù)據(jù)環(huán)境中,如圖5-40所示。圖5-40表單添加數(shù)據(jù)環(huán)境第75頁/共117頁(4)雙擊“確定”按鈕,將會自動切換到代碼編輯器,并添加以下代碼:*-----------確定按鈕代碼------------select用戶 &&選擇"用戶"表,當表單數(shù)據(jù)環(huán)境中只有一個表時可以省略locatfor用戶名稱=alltrim(thisform.text1.value) &&查找相關記錄

iffound() &&如果查找到相關用戶

iftrim(thisform.text2.value)=trim(用戶密碼) &&檢驗密碼

releasethisform &&退出窗口

doform主窗體 &&打開主窗體

else &&密碼錯誤

messagebox("密碼有誤,請確認以后重新輸入",16,"錯誤")thisform.text1.value="" &&設置text1的值為空

thisform.text2.value="" &&設置text2的值為空

endifelse &&如果沒有查找到該用戶

messagebox("用戶名有誤,請確認以后重新輸入",16,"錯誤")endif第76頁/共117頁(5)選擇菜單“文件”→“保存”命令。(6)單擊工具欄上的按鈕或按^+E組合鍵即可運行窗體。注:代碼說明:首先查找用戶表的用戶名稱,是否有文本框中輸入的值,如果找到則判斷密碼是否和輸入的密碼相符,相符合,則退出本表單,進入到主窗體,如果不相符則發(fā)出提示信息,將用戶名和密碼的文本框設置為空。如果沒有查到該用戶名,則發(fā)出提示信息。Alltrim():刪除指定字符表達式的前后空格符,并且返回刪除空格符后的字符串。Trim():返回刪除全部后綴空格后的指定字符表達式。Messagebox():顯示一個用戶自定義對話框,其中16代表“停止”圖標,依次是指定在對話框中顯示的文本,對話框的高度和寬度根據(jù)cMessageText適當增大,以包含全部信息;指定對話框中的按鈕和圖標、顯示對話框時的默認按鈕及對話框的行為;指定對話框標題欄中的文本。

第77頁/共117頁課后練習制作一個表單如圖5-41所示,當輸入一種商品的編號后,核實數(shù)據(jù)庫中是否存在該商品。利用文本框進行數(shù)據(jù)的輸入,利用“查找結果”標簽顯示結果。[提示]查找結果為label,如果查找到則顯示相關商品的名稱;如果查不到相關商品,則顯示“庫中無此商品”。

第78頁/共117頁5.6任務五退出窗口5.6.1相關知識1.給定時間間隔執(zhí)行指定操作計時器(Timer):提供計時功能,即每隔一段指定的時間就產生一次timer事件,用于控制某些進程。

圖標就是計時器控件。

表5-4定時器屬性設置屬性作用interval計時間隔(單位為ms,即毫秒)。此屬性值為0時,不產生timer事件enabled

控制計時器是否啟動時間間隔一般不能太小,否則頻繁產生timer事件會降低系統(tǒng)的效率。計時器不能自動直接實現(xiàn)定時中斷,比如希望8點產生定時事件,應將8點時間與當前時間datetime()相減,換算成秒數(shù)后作為interval屬性值。第79頁/共117頁2.計時器控件的初始化在使用了計時器以后,就要對它進行初始化設置,設置如圖5-42所示。這里主要設置interval和enabled兩個屬性,具體解釋如表5-4所示。3.對計時器事件的響應計時器常用的事件是timer事件,常用的方法是reset。在設計階段,設置interval>0,enabled為.T.,則當表單啟動時計時器便開始計時。若enabled為.F.,則計時器不啟動,調用reset方法可使計時器重新從0開始計時。圖5-42計時器屬性[注]計時器控件在運行時是不可見的,所以在設計時可把它放置在表單的任意位置。

第80頁/共117頁4.CHR函數(shù)CHR函數(shù),根據(jù)指定的ASCII數(shù)值代碼返回其對應的字符。5.Time函數(shù)該函數(shù)主要是對時間進行操作,該類操作主要應用有:①在注冊用戶時,希望用戶在一定時間范圍內讀取一些協(xié)議;②可以在某些頁面進行時間的顯示;③可以做一些退出的設置,如在退出某些系統(tǒng)時,為了避免某些錯誤操作,導致退出系統(tǒng)而尚未保存信息,可以用倒計時來提醒用戶,這種方式也用到了一些大型的網絡游戲,利用這種方式來存儲人物數(shù)據(jù)。與日期相關的函數(shù)如表5-5所列。表5-5日期相關的函數(shù)函數(shù)名操作例結果DATE()求當前日期DATE()2001/11/12DATETIME()求當前日期和時間DATETIME()2001/11/12/0:22:33amYEAR(D)求年份YEAR(DATE())2001MONTH(D)求月份(數(shù)值)MONTH(DATETIME())11CMONTH(D)求月份字符)CMONTH(DATETIME())NovemberDAY(D)求日期DAY(DATE())12DOW(D)求星期幾(數(shù)值)DOW(DATE())1CDOW(D)求星期幾(英文)CDOW(DATE())sundayTIME(D)求當前時間TIME(DATE())10:20:38am第81頁/共117頁5.6.2任務實現(xiàn):退出窗體在程序設計和軟件開發(fā)中,經常需要設計計時器,如秒表、正計時器、倒計時器等。這些計時器的設計方法大同小異,本文以倒計時器設計為例介紹兩種設計倒計時器的方法。VisualFoxPro中的計時器控件有一個Timer事件,每經過Interval(單位為毫秒)屬性指定的時間就執(zhí)行該事件一次。利用該控件的這一特點再配合一些程序,可設計各種計時器,包括倒計時器。本程序通過計時器控件和時間函數(shù)seconds()來設計倒計時器。seconds()函數(shù)可以以秒為單位返回自午夜以來經過的時間。在“開始”按鈕的Click事件中加入代碼:t0=seconds()。在計時器控件的Timer事件代碼中加入:t1=seconds()、t2=10+t0、t3=t2-t1。t0為單擊“開始”按鈕時離午夜的時間,t1為計時器每次觸發(fā)時距午夜的時間,t2為定時結束時距午夜的時間,t3為剩余時間。第82頁/共117頁(1)打開超市管理系統(tǒng)工程,新建立一個窗體退出系統(tǒng)。(2)在窗體設計器中添加如圖5-43所示的控件。圖5-43退出表單(3)程序清單如下。①表單Form1的Init事件代碼:publict0 &&聲明變量t0t0=seconds() &&設置t0為表單運行的當前時間thisform.timer1.enabled=.t.&&可以直接在屬性中設置②標簽Label1的屬性Caption:退出系統(tǒng)③標簽Label2的屬性Caption:10秒鐘第83頁/共117頁④計時器Timer1的屬性Interval:500 &&時間間隔計時器Timer1的timer事件代碼:t1=seconds() &&設置t1為表單運行后每次計時器響應的時間ift1-t0>=10 &&判斷當前時間與表單運行時的時間差messagebox(″定時時間到!″)elsethisform.label5.caption=int(10-(t1-t0))endif⑤命令按鈕Command1的屬性Caption:退出命令按鈕Command1的Click事件代碼:Quit⑥命令按鈕Command2的屬性Caption:取消命令按鈕Command2的Click事件代碼:releasethisform說明:在上面的程序中,只是對倒計時的代碼作一些修改,只要適當對上面的代碼進行修改,就可以改變出很多的實用功能。第84頁/共117頁課后練習利用計時器制作一個表單,要求用戶閱讀注冊協(xié)議,在30秒后才可以進行下一步操作。要求只有剩余時間為0時按鈕才可以使用,如圖5-44所示。圖5?44退出提示第85頁/共117頁5.7任務六商品信息瀏覽5.7.1相關知識

類是面向對象程序設計中非常重要的一個知識點,正是類的存在,使得面向對象程序設計變得豐富多彩。恰當?shù)厥褂妙惒粌H可以使程序更加美觀,更可以減輕大量的重復性工作。利用向導實現(xiàn)表單可以很快速地生成數(shù)據(jù)表單。但這并不是萬能的方法,對于一些有特殊功能的表單并不能完全利用這種方法來生成。在這種情況下必須手工生成表單,并對所生成的表單添加一些功能按鈕和一些導航按鈕。這些功能按鈕和導航按鈕可以用類的方式來生成。如果程序中并不涉及太多的代碼的重用問題,也可以不用類的方法。第86頁/共117頁1.創(chuàng)建類在創(chuàng)建過程中,選擇“類”,單擊“新建文件”命令,彈出窗體,如圖5-45所示。圖5-45“新建類”對話框為新建類添加“類名”myc,選擇“派生于”為CommandGroup,該選項是選擇新建的類將繼承于哪種類。在“存儲于”中選擇存儲的位置,設置好相關目錄,單擊“確定”按鈕。第87頁/共117頁2.將新屬性添加到類在新建的類中添加4個按鈕,做成導航菜單,如圖5-46所示。

圖5-46新建類3.在類中編輯方法編輯類中的命令按鈕和編輯表單中的命令按鈕是一樣的,雙擊即可添加程序代碼。4.將類添加到表單中建立完一個類后,可以重復使用,非常方便,就像使用自帶的控件一樣。使用時只要單擊添加圖標,選擇“添加”命令,找到剛才新建的類,就可以使用了。第88頁/共117頁5.注冊一個類庫.從“工具”菜單中選擇“選項”命令,在彈出的“選項”對話框中選擇“控件”選項卡,選擇“可視類庫”并單擊“添加”按鈕,在“打開”對話框中選擇要注冊的類庫并單擊“打開”按鈕,單擊“確定”按鈕。第89頁/共117頁5.7.2任務實現(xiàn):類的實現(xiàn)(1)新建類。名稱為myc,該類起數(shù)據(jù)導航的作用,4個命令按鈕的名稱分別是首記錄、上一條、下一條和末記錄。代碼如下:首記錄: GOTOP &&指針指到第一條記錄THISFORM.Refresh &&刷新上一條:SKIP-1 &&指針指向上一條記錄IFBOF() &&判斷是否到達首記錄

GOTOPENDIFTHISFORM.Refresh &&更新表單數(shù)據(jù)下一條:SKIP1 &指針指向下一條記錄IFEOF() &&判斷是否到達末記錄

GOBOTTOM &&指向最后一條記錄ENDIFTHISFORM.Refresh &&更新表單數(shù)據(jù)末記錄:GOBOTTOMTHISFORM.Refresh第90頁/共117頁(2)新建一個表單“商品信息2”,右擊表單,為表單添加數(shù)據(jù)環(huán)境,在數(shù)據(jù)環(huán)境中引入“商品信息”表,利用手工拖動的方式,把相關字段拖動到此表單中。并適當調整各控件的位置,在表單下留出空白,以便添加上面所生成的類。(3)添加上面所生成的類,通過生成器和類來實現(xiàn)瀏覽商品信息的功能,如圖5-47所示。圖5-47手工制作“商品信息”表單第91頁/共117頁4.添加組合框,調整表單界面的布局。最終效果如圖5-48所示。圖5-48為表單添加自定義類第92頁/共117頁(5)設置組合框,表單中的組合框主要起到瀏覽廠商和供貨商信息的作用。這里以廠商編號為例。右擊組合框combo1,在快捷菜單中選擇“生成器”命令,設置如圖5-49所示。圖5-49為組合框設定字段第93頁/共117頁首先選擇數(shù)據(jù)表,然后選擇要顯示的字段,單擊“確定”按鈕就可以實現(xiàn)要求的功能,還可以進行其他的設置:RowSourceType 設定為字段RowSource 設定為“供貨商.供貨商名稱,供貨商.供貨商編號”ControlSource 設定為“商品信息.供貨商編號”BoundTo 設定為.T.BoundColumn 設定為2組合框的最終效果如圖5-50所示。圖5-50組合框運行結果第94頁/共117頁課后練習利用前面制作的導航菜單,制作一個瀏覽會員基本信息的表單。效果如圖5-51所示。圖5-51會員信息瀏覽表單第95頁/共117頁5.8任務七表單的綜合應用5.8.1相關知識1.在表單中添加表格表格(grid)是按行和列顯示數(shù)據(jù)的容器對象,其外觀與瀏覽窗口相似。表格是包含列對象的容器對象。列可以包含標頭對象及控制。由于表格及其列、標頭和控件都有各自的屬性集,可以完全控制表格中的每一個元素??梢栽诒砀裆善髦薪换サ貏?chuàng)建“表格”。圖5-52表格的使用第96頁/共117頁2.設置表格列數(shù)在表格的屬性中,ColumnCount屬性,指定表格控件中列對象的數(shù)目。對于表格,該屬性設計時可用,運行時可讀寫。對于表格控制,默認的屬性設置為1。當ColumnCount屬性設置為1時,則自動創(chuàng)建足夠的列,以容納數(shù)據(jù)源中的所有字段。對于表格,可使用AddColumn方法增加列的數(shù)目。3.在設計時人工調整表格的顯示效果在設計表格時,開發(fā)人員可以利用AllowRowSizing屬性指定能否人工調整表格中行的大小。4.設置表格中顯示的數(shù)據(jù)源RecordSource指定與表格控件相綁定的數(shù)據(jù)源。設計時可用,運行時只讀寫。該屬性指定與表格控制相綁定的主臨時表。如果為一個網格指定了記錄源,就可以通過設置ControlSource屬性來指定網格中單獨列的內容。如果沒有為網格中的列設置ControlSource屬性,那么列顯示網格的記錄源中下一個可用的不能顯示的字段。第97頁/共117頁5.常用的表格屬性Top:對于表單對象,確定表單的頂端邊緣與VisualFoxPro主窗口的距離。Left:對于表單對象,確定表單的左邊界與VisualFoxPro主窗口左邊界之間的距離。Height:指定對象在屏幕上的高度。Width:指定對象的寬度。ColumnCount:指定表格控件中列對象的數(shù)目。LinkMaster:指定表格控件中子表所鏈接的父表。RecordSource:指定與表格控件相綁定的數(shù)據(jù)源。第98頁/共117頁6.編輯框在表單上用于接收輸入文本或查看文本的控件。編輯框可以包含多行文本。編輯框控件可用來編輯字符類型的內存變量、數(shù)組元素、字段或備注字段。所有標準的VisualFoxPro編輯功能,如剪切、復制和粘貼,在編輯框中都可以使用。編輯框中的文本在垂直方向上可以滾動,在水平方向上可以自動換行。7.微調控件允許通過輸入或單擊上、下箭頭按鈕增加或減少數(shù)值的控件。8.組合框被選中時,組合框打開,并顯示項的列表,從中可選擇一項。組合框控件結合了文本框控件和列表框控件的特性??稍谖谋究虿糠州斎胄畔⒒驈牧斜砜虿糠诌x擇一項。第99頁/共117頁5.8.2任務實現(xiàn)一手工建立一對多表單本節(jié)手工建立一對多表單——供貨商供貨信息。首先建立一個表單,用來顯示供貨商供貨情況,每顯示一個供貨商的編號,就自動顯示該供貨商所能提供的商品。該表單的制作需要在“供貨商”表和“商品信息”表之間以供貨商編號為關聯(lián)條件建立關系。第100頁/共117頁步驟如下:(1)建立一個表單,名稱為供貨商供貨信息。(2)在所建的表單上,右擊選擇“數(shù)據(jù)源”,添加供貨商和生產商兩個表,然后單擊“關閉”按鈕,接下來進行數(shù)據(jù)源的編輯,如圖5-53所示。圖5-53添加數(shù)據(jù)環(huán)境第101頁/共117頁(3)多個表建立關系:因為“商品信息”表中包含“供貨商”表的主關鍵字“供貨商編號”,因此這兩個表可以建立起關系,建立關系的方法是:首先選擇“供貨商”表的供貨商編號,然后拖拽到“商品信息”表的供貨商編號上,注意拖拽的字段是在“字段”和“索引”之間的字段。具體效果如圖5-54所示。圖5-54建立表間關系第102頁/共117頁(4)利用拖拽數(shù)據(jù)環(huán)境內數(shù)據(jù)表的方式建立表單。首先,選中圖5-54中“供貨商”表中的供貨商名稱,拖拽到剛剛建立的表單上,同樣,選擇圖5-54中“商品信息”中所需的多個字段,拖拽到表單中,自動形成表格,如圖5-55所示,然后可以對表單的布局適當調整,制作一個適當?shù)慕缑?。圖5-55界面美化第103頁/共117頁(5)添加導航的按鈕。添加兩個按鈕,分別作為導航按鈕的“上一條”和“下一條”,如圖5-56所示。上一條:SKIP-1 &&指針指向上一條記錄IFBOF() &&判斷是否到達首記錄

GOTOPENDIFTHISFORM.Refresh

下一條:SKIP1 &&指針指向下一條記錄IFEOF() &&判斷是否到達末記錄

GOBOTTOM &&指針指向最后一條記錄ENDIFTHISFORM.Refresh完成上面的表單之后,就可以通過導航按鈕來瀏覽商品信息,實現(xiàn)這個表單的原理是當單擊“下一條”按鈕以后,實現(xiàn)一個查詢,這個查詢的where條件是查詢供貨商編號。圖5-56添加導航按鈕第104頁/共117頁5.8.3任務實現(xiàn)二:復雜表單設計(1)制作表單的效果如圖5-57所示。goodnamegoodnumgoodpricegrid1text1text2第105頁/共117頁(2)編寫按鈕的程序代碼如下:①確定按鈕代碼:gname=thisform.goodname.value &&將文本框的值賦給變量gnamegnum=val(thisform.goodnum.value) &&字符類型轉為數(shù)字類型gprice=val(thisform.goodprice.value) saleDate=date()&&saleDate取得當前日期

insertinto銷售(銷售編號,商品編號,銷售日期,銷售數(shù)量,銷售單額);values(deald,gname,date(),gnum,gprice) &&向數(shù)據(jù)表插入數(shù)據(jù)select*from銷售intocursortempwhere銷售編號=deald thisform.grid1.recordsource=null &&數(shù)據(jù)源為空

thisform.grid1.recordsourceType=1 &&數(shù)據(jù)源類型是查詢

thisform.grid1.recordsource="temp" &&數(shù)據(jù)源為temp表的內容thisform.grid1.column1.header1.caption="發(fā)貨號" &&表格第一列顯示的標題

thisform.grid1.column2.header1.caption="商品編號" thisform.grid1.column3.header1.caption="銷售日期" thisform.grid1.column4.header1.caption="銷售數(shù)量" thisform.grid1.column5.header1.caption="價格"第106頁/共117頁 thisform.grid1.column2.header1.caption="商品編號" thisform.grid1.column3.header1.caption="銷售日期" thisform.grid1.column4.header1.caption="銷售數(shù)量" thisform.grid1.column5.header1.caption="價格" thisform.grid1.column1.width=85 &&設置表格第一列的寬度

thisform.grid1.column2.width=85 thisform.grid1.column3.width=85 thisform.grid1.column4.width=85 thisform.grid1.column5.width=85 thisform.grid1.refresh &&表格刷新

thisform.goodname.value="" &&設置goodname的值為空

thisform.goodnum.value="" thisform.goodprice.value="" thisform.goodname.setfocus②合計按鈕代碼:selectsum(銷售數(shù)量*銷售單額)astotalpfrom銷售intocursortemp2;where銷售編號=dealdthisform.label4.caption=str(totalp)&&標簽label4的顯示信息③找零按鈕代碼:thisform.text2.value=val(thisform.text1.value)-val(thisform.label4.caption)④結賬退出按鈕代碼:messagebox("成功")thisform.releasedoform主窗體

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論