Visual FoxPro 數(shù)據(jù)庫全套課件_第1頁
Visual FoxPro 數(shù)據(jù)庫全套課件_第2頁
Visual FoxPro 數(shù)據(jù)庫全套課件_第3頁
Visual FoxPro 數(shù)據(jù)庫全套課件_第4頁
Visual FoxPro 數(shù)據(jù)庫全套課件_第5頁
已閱讀5頁,還剩428頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第11章

SQL視圖、VFP8.0的CursorAdapter和客戶/服務(wù)器編程11.1客戶/服務(wù)器結(jié)構(gòu)(Client/Server)安裝ODBC數(shù)據(jù)源:(1)轉(zhuǎn)到Windows控制面板(ControlPanel),并選ODBC圖標(biāo)。(2)在數(shù)據(jù)源(DataSources)對話框選添加(Add)。(3)在添加數(shù)據(jù)源(AddDataSource)對話框選擇SQLServerODBC程序,并選確定(OK)。(4)在ODBCSQLServer安裝對話框,鍵入數(shù)據(jù)源名稱(DataSourceName,例如:SQL2000)、說明(Description,例如:SQLserverVersion2000)和其它合適的信息,然后選確定。(5)在數(shù)據(jù)源對話框選關(guān)閉(Close)。11.2創(chuàng)建和使用視圖(SQLView)一、本地視圖和遠(yuǎn)程視圖遠(yuǎn)程視圖:使用遠(yuǎn)程SQL句法從遠(yuǎn)程ODBC數(shù)據(jù)源選擇信息。本地視圖:使用VFPSQL句法從表或視圖選擇信息。

數(shù)據(jù)庫中使用的視圖設(shè)計器與查詢設(shè)計器基本類似,不同點(diǎn):視圖不象查詢,它是可修改的,在SQLView中修改數(shù)據(jù)后,VFP會自動修改與視圖有關(guān)的基表(即視圖建立在之上的表)中的數(shù)據(jù);視圖只能作為數(shù)據(jù)庫的一部分保存下來而不是作為一個單獨(dú)的文件(選擇文件+保存菜單項(xiàng)去存貯視圖,視圖名不能含路徑),而查詢可以作為單獨(dú)的QPR文件存貯;視圖可以包含遠(yuǎn)程服務(wù)器中的表,用戶在自己的計算機(jī)上所作的修改可以送回到服務(wù)器。二、創(chuàng)建本地視圖(LocalView)

為創(chuàng)建本地視圖,可在菜單“文件”(File)→“打開”(open),打開一個項(xiàng)目后在項(xiàng)目管理器(ProjectManager)選擇一個數(shù)據(jù)庫(Database),然后選本地視圖(LocalView),再選“新建”(New)去打開視圖設(shè)計器(ViewDesigner);或者使用CREATESQLVIEW命令帶AS子句。例11.2:建立一個包括Products表中全部字段的視圖:CREATESQLVIEWProduct_ViewAs;SELECT*FROMtestdata!products三、創(chuàng)建多表視圖

用戶若想訪問存貯在兩個或更多的表中的相關(guān)信息時,可創(chuàng)建多表視圖。在用視圖設(shè)計器創(chuàng)建一個視圖時,添加多個表,或者用CREATESQLVIEW命令能建立多表視圖。通過修改已存在的視圖或通過創(chuàng)建新視圖,創(chuàng)建多表視圖。1.修改一個視圖例11.3:用程序碼在視圖設(shè)計器中顯示Product_view視圖:OPENDATABASEtestdataMODIFYVIEWProduct_view2.用語言創(chuàng)建一個多表視圖(1)在WHERE子句中使用聯(lián)接條件例11.4:如果想知道訂單的信息,包括接收訂單雇員和發(fā)出訂單顧客的信息,可建立一個使用Customer、Orders和Employee表的視圖,用WHERE子句指出連接條件(即視圖中只包含滿足此條件的記錄)。OPENDATABASEtestdataCREATESQLVIEWcust_order_emp_wiewAS;SELECT*;FROMtestdata!customer,testdata!orders,testdata!empoyee;WHEREcustomer.cust_id=orders.cust_id;.AND.employee.emp_id=orders.emp_id(2)用FROM子句指定視圖的聯(lián)接條件例11.5:OPENDATABASEtestdataCREATESQLVIEWcust_orders_viewAS;SELECT*FROMtestdata!customer;INNERJOINtestdata!orders;ONcustomer.cust_id=orders.cust_id例11.6:OPENDATABASEtestdataCREATESQLVIEWcust_orders_viewAS;SELECT*FROMtestdata!customer;LEFTOUTERJOINTESTDATA!Orders;ONcustomer.cust_id=order.cust_id11.2.3定義一個連接(Connection)1.定義一個連接(Connection)可采用如下方法之一:(1)在項(xiàng)目管理器數(shù)據(jù)庫(Database)列表中,選擇連接(Connection),然后選“新建”(New)去打開連接設(shè)計器(ConnectionDesigner)。(2)或,打開一個數(shù)據(jù)庫,并使用CREATECONNECTION命令去打開連接設(shè)計器。(3)或,使用帶有一個連接名字的CREATCONNECTION命令去打開連接設(shè)計器。2.顯示存在的連接用戶可在項(xiàng)目管理器選擇一個數(shù)據(jù)庫(database),然后選擇連接(Connections)。或者使用DISPLAYCONNECTIONS命令確定存在的連接。例11.8:顯示testdata數(shù)據(jù)庫的連接。OPENDATABASEtestdataDISPLAYCONNECTIONS11.2.4創(chuàng)建遠(yuǎn)程視圖(RemoteView)在項(xiàng)目管理器,選擇一個數(shù)據(jù)庫(Database),再選擇“遠(yuǎn)程視圖”(RemoteView),然后選“新建”(New)去打開視圖設(shè)計器?;颍褂脦в蠷EMOTE和(或)CONNECTION子句的CREATESQLVIEW命令去建立一個遠(yuǎn)程視圖。如果在CREATESQLVIEW命令中使用CONNECTION子句,不必再包括REMOTE關(guān)鍵字,VFP也會指定視圖為遠(yuǎn)程的。例11.9:從遠(yuǎn)程服務(wù)器上Testdata數(shù)據(jù)庫的products表建立一個遠(yuǎn)程視圖。OPENDATABASEtestdataCREATESQLVIEWproduct_remote_viewCONNECTOINremote_01;ASSELECT*FROMproducts11.2.5更名或刪除視圖11.2.6使用視圖1.在多工作區(qū)打開一個視圖2.顯示視圖結(jié)構(gòu)3.設(shè)置視圖和連接(Connection)屬性1.3更新視圖的數(shù)據(jù)視圖屬性 缺省設(shè)置Table 具有可更新字段和具有至少一個主關(guān)鍵字段的全部表KeyField 數(shù)據(jù)庫關(guān)鍵字段和表的遠(yuǎn)程主關(guān)鍵字UpdateName 所有字段形式為表名.列名Updatable 除了主關(guān)鍵字段的全部字段SendUpdates 它原始設(shè)為假(.F.),只在工作期內(nèi)有效。如果改變它為真(.T.),則成為該工作期中所建立的全部視圖的默認(rèn)值11.4集成視圖(CombiningView)1.集成本地和遠(yuǎn)程數(shù)據(jù)在視圖中用戶通過創(chuàng)建基于本地視圖和遠(yuǎn)程視圖的新本地視圖,可以集成本地和遠(yuǎn)程數(shù)據(jù)。要創(chuàng)建一個集成本地和遠(yuǎn)程數(shù)據(jù)的視圖,可以:(1)在項(xiàng)目管理器選擇一個數(shù)據(jù)庫(database),再選本地視圖(Localviews)和選“新建”(New)去打開視圖設(shè)計器。在視圖中添加表、本地視圖和遠(yuǎn)程視圖。(2)或使用CREATESQLVIEW命令。2.在一個視圖中更新本地和遠(yuǎn)程數(shù)據(jù)當(dāng)用戶在一個多級視圖中更新數(shù)據(jù)時,更新“走”到下一級(頂級視圖所基于的視圖)。如果想更新多級視圖的基表,必須為結(jié)構(gòu)中的各視圖發(fā)出TABLEUPDATE命令。為多級視圖更新基表最容易的方法是從頂級向下關(guān)閉(close)視圖結(jié)構(gòu),因?yàn)楫?dāng)關(guān)閉一個視圖時,VFP自動發(fā)出一個TABLEUPDATE命令。11.5使用視圖和SQL傳遞進(jìn)行C/S模式編程11.5.1使用視圖(SQLViews)進(jìn)行C/S模式編程可以使用視圖作為開發(fā)一個強(qiáng)有力的客戶/服務(wù)器應(yīng)用程序的核心方法。遠(yuǎn)程視圖是一個功能強(qiáng)大的技術(shù),它設(shè)計來使你能夠從遠(yuǎn)程服務(wù)器選擇恰好需要的數(shù)據(jù)下載到本地VFP臨時表(cursor)中,然后可以使用它去查看和更新遠(yuǎn)程數(shù)據(jù)。一個視圖是來自SQLSELECT語句的一個基本結(jié)果集??墒褂脜?shù)化的SELECT語句下載特定的小數(shù)據(jù)集合(參數(shù)化查詢詳見VFP的幫助)。11.5.2升遷及升遷向?qū)?UpsizingWizard)VFP提供兩個升遷向?qū)В骸癘racle升遷向?qū)А焙汀癝QLServer升遷向?qū)А?。這兩個向?qū)Э蓜?chuàng)建一個Oracle數(shù)據(jù)庫或SQLServer數(shù)據(jù)庫,實(shí)現(xiàn)VFP數(shù)據(jù)庫中各表的功能。還可以重定向VFP視圖,使其使用新建的遠(yuǎn)程數(shù)據(jù)而不是本地數(shù)據(jù)。以及實(shí)現(xiàn)將本地應(yīng)用程序移植為客戶/服務(wù)器應(yīng)用程序等升遷。11.5.3使用SQL傳遞(SQLPass-through)進(jìn)行C/S模式編程SQL傳遞(SPT)技術(shù)用VFP的SQL傳遞函數(shù)去直接訪問遠(yuǎn)程服務(wù)器。這些函數(shù)允許超過視圖的功能進(jìn)行附加的服務(wù)器訪問和控制。例如,使用SQL傳遞可以完成遠(yuǎn)程服務(wù)器上的數(shù)據(jù)定義,設(shè)置服務(wù)器屬性和訪問服務(wù)器存貯過程(Procedures)等。SQL傳遞是建立只讀結(jié)果集和使用任何其它當(dāng)?shù)豐QL語法最好的工具。與視圖(它只是來自SQLSELECT語句的一個結(jié)果集)不同,SQL傳遞可使用SQLEXEC()函數(shù)去發(fā)送任何希望的東西到服務(wù)器。

11.6VFP8.0的CursorAdapter與C/S模式編程11.6.1VFP8.0的CursorAdapter概述11.6.2CursorAdapter的屬性、事件和方法及工作本節(jié)先介紹CursorAdapter工作的例子,從而引導(dǎo)讀者了解CursorAdapter的PEMS,即它的屬性(Properties),事件(Events)和方法(Methods)。下面的例子可得到來自后端SQLServer的Northwind數(shù)據(jù)庫Customers表中Brazilian客戶的一定的字段。其Cursor是可更新的,所以如果在Cursor做任何改變后關(guān)閉它,再重新運(yùn)行此程序,便可以看到此變化已存貯到后端數(shù)據(jù)庫中。11.6.3使用naive的CursorAdapter11.6.4使用ODBC的CursorAdapter

ODBC實(shí)際上是DataSourceType4個設(shè)置中最直接的。可以設(shè)置DataSource為一個打開的ODBC連接柄(handle),設(shè)置有用的屬性和調(diào)用CursorFill去取回數(shù)據(jù)。如果“填充”好KeyFieldList、Table、UpdatableFieldList和UpdateNameList的內(nèi)容,VFP將自動產(chǎn)生合適的UPDATE、INSERT和DELETE語句,并用其帶來的任何變化去更新數(shù)據(jù)庫。如果想使用一個存貯過程(storedprocedure)代替之,則應(yīng)合適地設(shè)置*Cmd、*CmdDatasource和*CmdDatasourceType屬性。11.6.5使用ADO的CursorAdapter11.6.6使用XML的CursorAdapter例11.25:LocallowsasdataserverwebserviceLows=NEWOBJECT(〝Wsclient〞,HOME()+〝ffc\_webservices.vcx〞)Lows.cWSName=〝dataserverwebserviceLows=lows.setupClient(http://localhost/sQDataServer/dataServer.WSDL″,; 〝dataserver〞,〝dataserverSoapPort〞)lcXML=lows.GetCustomers()returnlcXML例11.26:LocalloXMLasMSXML2.XMLHTTPLoXML=createobject(′MSXML2.XMLHTTP′)LoXML.open(′POST′,′http://localhost/northwind/template/′+;′getallcustomers.xnl′,.F.)loXML.setRequestHeader(′Content-type′,′text/xml′)loXML.send()returnloXML.responseText第八章設(shè)計應(yīng)用程序?qū)嵗臋n管理信息系統(tǒng)程序設(shè)計8.1設(shè)計應(yīng)用程序的方法1.系統(tǒng)分析和總體設(shè)計階段

(1)系統(tǒng)要求;

(2)初步調(diào)查;

(3)系統(tǒng)分析;

(4)總體設(shè)計;

2.詳細(xì)設(shè)計階段(5)詳細(xì)調(diào)查;(6)詳細(xì)數(shù)據(jù)流圖和詳細(xì)模塊;(7)數(shù)據(jù)庫設(shè)計;(8)I/O(輸入/輸出)設(shè)計;(9)模塊功能設(shè)計;(10)處理過程設(shè)計;

3.系統(tǒng)實(shí)施階段(11)程序設(shè)計;(12)程序調(diào)試;(13)系統(tǒng)測試;(14)試運(yùn)行;

4.系統(tǒng)維護(hù)階段(15)評價;(16)寫系統(tǒng)說明書;(17)維護(hù)與改進(jìn);(18)其他(用戶有償委托新增事務(wù))。1.系統(tǒng)功能概述 本系統(tǒng)能在任何IBMPC微機(jī)及兼容機(jī)上運(yùn)行,用FoxPro關(guān)系數(shù)據(jù)庫語言編制,是實(shí)用的對文檔、單位自擬或上、下級所發(fā)文件、匯報、文獻(xiàn)、論文、文章、合同等管理應(yīng)用的軟件系統(tǒng)。 系統(tǒng)采用模塊化程序技術(shù)及用人機(jī)對話、漢字提示、菜單驅(qū)動,人機(jī)界面友好、操作方便、簡單易行。 要求該系統(tǒng)建立文檔數(shù)據(jù)表,具有輸入、修改、插入、刪除文檔目錄卡片的功能。能顯示、打印文檔登錄報表和文檔目錄卡片。具有多種檢索手段,能快速查找文檔卡片,以便文檔管理人員和用戶查閱或提取文檔。

8.2文檔管理信息系統(tǒng)要求:用面向?qū)ο蟮某绦蛟O(shè)計完成“文檔管理系統(tǒng)”軟件2.系統(tǒng)運(yùn)行的軟、硬件環(huán)境 (1)硬件環(huán)境:IBMPC微機(jī)及兼容機(jī)系統(tǒng)。 (2)軟件環(huán)境: 操作系統(tǒng):Windows及其漢字系統(tǒng)或相應(yīng)平臺的中文版操作系統(tǒng)。關(guān)系數(shù)據(jù)庫系統(tǒng):VFP。3.文檔數(shù)據(jù)表的設(shè)計 文檔數(shù)據(jù)表DF.DBF的結(jié)構(gòu)有如下: 字段 字段名類型 寬度 小數(shù)

1 登錄號(DEN) C 9 2 登錄時間(STIM) D 8 3 主題關(guān)鍵詞或分類號(NO) C 11 4 行文者號(WO) C 10 5 文檔名(BK) C 50 6 行文者名(WR) C 50 7 行文地(AD) C 50 8 登出刊物(UN) C 20 9 行文時間(TIM) D 8 10 頁數(shù)(P) N 3 11 涉及金額(S1) N 11 2 12 該文處理情況(Z) C 50 13 摘要(CO) M 44.系統(tǒng)模塊總框圖 略。其中檢索模塊和打印、顯示模塊都具有子模塊結(jié)構(gòu)。5.系統(tǒng)主要數(shù)據(jù)表和模塊程序文件名

(1)文檔數(shù)據(jù)表名:DF.DBF (2)主控模塊:DM.PRG (3)輸入模塊:DIP.PRG (4)修改摸塊:DRE.PRG (5)插入模塊:DIN.PRG (6)刪除模塊:DEL.PRG (7)檢索模塊:DFI.PRG (8)打印及顯示模塊:DDP.PRG第二章常量、變量和表達(dá)式2.1常量2.2變量2.3表達(dá)式(自學(xué))第二章常量、變量和表達(dá)式2.1常量類型:字符常數(shù)、日期常數(shù)、邏輯常數(shù)、數(shù)值常數(shù)、貨幣常數(shù)和日期時間常數(shù)。2.2變量 字段變量(field)

變量: 一般內(nèi)存變量 內(nèi)存變量(memvar): 系統(tǒng)內(nèi)存變量 數(shù)組變量。

一、字段變量字段變量:數(shù)據(jù)表中的每一個字段,字段名就是字段變量名。字段變量的當(dāng)前值等于表中當(dāng)前記錄該字段所對應(yīng)的內(nèi)容

。如:表STU1中:學(xué)號,姓名,數(shù)學(xué)成績等等字段都是字段變量名,其值是每一個學(xué)生相應(yīng)的數(shù)據(jù)。二、內(nèi)存變量

內(nèi)存變量:用內(nèi)存單元存貯的變量。內(nèi)存變量名:由漢字、26個英文字母、0-9數(shù)字字符或下劃線(_)組成。必須由字母字符或漢字開頭。內(nèi)存變量的類型則是“動態(tài)型”,即在程序執(zhí)行期間當(dāng)變量建立時才賦予。如:A1,BB,XT,注:內(nèi)存變量名一般不要與正打開的表的字段名同名,VFP內(nèi)存變量有如下的型:A Array (數(shù)組型)C character (字符型)D Data (日期型)L logical (邏輯型)N Number (數(shù)字型)Y Currency (貨幣符號型)T Datetime (日期時間型)系統(tǒng)內(nèi)存變量:(systemmemory)是一種特殊的內(nèi)存變量,它是用來保持含有信息(例如,文本報表應(yīng)打印的拷貝數(shù)等)的系統(tǒng)變量??赏ㄟ^一個前導(dǎo)下劃線(例如,_pcopies)來識別它。系統(tǒng)內(nèi)存變量由VFP預(yù)先定義好了的,所以屬性是固定的。例如:numcopy=2&&建立叫numcopy的內(nèi)存變量為N型。_pcopies=2&&賦值于已存在的系統(tǒng)內(nèi)存變量

numcopy="Hello" &&改變變量的型為C型_pcopies="Hello" &&錯誤,不能改變?yōu)镃型1、建立內(nèi)存變量賦值命令格式1:STORE<表達(dá)式>TO<內(nèi)存變量表>格式2:[<內(nèi)存變量>]=<表達(dá)式>例:AB=5 &&數(shù)值5賦給變量AB?AB5STOREAB+8TOAN&&將AB的值+2存入AN中AA=“成都”(或STORE“成都”TOaa)xy=12345X1=.t.2、釋放內(nèi)存變量格式:RELEASEALL[LIKE|EXCEPT<結(jié)構(gòu)>]|<內(nèi)存變量表>例如:releaseAAreleasealllikeA*(或:releaseallexceptX*)3.顯示內(nèi)存變量格式:DISPLAYMEMORY[TOPRINT] LISTMEMORY[TOPRINT]見書P274.內(nèi)存變量文件(.MEM)格式:SAVETO<文件名>[ALLLIKE/EXCEPT<結(jié)構(gòu)>]功能:保存當(dāng)前內(nèi)存中的內(nèi)存變量于指定的文件名中。格式:RESTOREFROM<文件名>[ADDITIVE]

功能:將存貯內(nèi)存文件中的內(nèi)存變量調(diào)入內(nèi)存。

作業(yè):1、自學(xué)2.2.3—2.3節(jié)。2、習(xí)題(2.4不做)。第九章表單(FORM)和面向?qū)ο蟮某绦蛟O(shè)計9.2 應(yīng)用程序的組裝“模塊”:VFP類與對象9.1 表單及表單設(shè)計9.3表單對象的應(yīng)用實(shí)例9.4設(shè)置表單或表單集模板(Template)9.1表單及表單設(shè)計

表單又叫“窗體”,提供給用戶一個對數(shù)據(jù)查看、輸入的屏幕“界面”;提供了一個能適應(yīng)用戶事件和系統(tǒng)事件的強(qiáng)有力的對象集,使用戶能方便地完成信息管理任務(wù)。

一、表單的類型1.從創(chuàng)建單文檔和多文檔界面來分表單類型在VFP中有兩種應(yīng)用程序界面:多文檔界面(MDI)單文檔界面(SDI)第十章表單(FORM)和面向?qū)ο蟮某绦蛟O(shè)計本章將介紹:表單、表單集的設(shè)計及應(yīng)用;面向?qū)ο蟮某绦蛟O(shè)計;VFP中的類和對象。

多文檔界面(MDI):由單一的主窗口組成,其它應(yīng)用程序窗口在主窗口中或浮動在主窗口之上。VFP本身就是一個MDI的窗口,包含了命令窗口,編輯窗口和設(shè)計窗口等。單文檔界面(SDI):由一個或多個相互獨(dú)立的窗口組成,這些窗口單獨(dú)顯示。但也有一些應(yīng)用程序綜合了SDI和MDI的特性,需要將SDI和MDI混合使用。例如,VFP將調(diào)試器顯示為一SDI應(yīng)用程序,而它本身又包含了自己的MDI窗口

為了支持這兩種類型的界面,VFP允許創(chuàng)建以下幾種類型的表單:子表單(ChildForm):用于創(chuàng)建MDI窗口中一個表單,子表單不可移至父表單(主表單)邊界之外,當(dāng)其最小化時將顯示在MDI窗口的底部。如主窗口最小化時,它也一同最小化。浮動表單(FloatingForm):屬于一主表單,但并不是包含在主表單中,它可以移至屏幕的任何位置,但不能在主窗口后臺移動。最小化時,它將顯示在桌面的底部。當(dāng)MDI最小化,一同最小化。頂層表單(Top-leveform):沒有父表單的獨(dú)立表單,用于創(chuàng)建一個SDI應(yīng)用程序,或用作MDI應(yīng)用程序中其它子表單的父表單。頂層表單與其他Windows應(yīng)用程序同級,可出現(xiàn)在其前臺或后臺,并且顯示在Windows任務(wù)欄中。表單類型ShowWindow屬性MDIForm Desktop主表單2-作為頂層表單 .F. .F.子表單0-在屏幕中 .T.最大化時子表單和父表單相連.F. 1-在頂層表單中.F.最大化時子窗口為分開窗口浮動表單0-在屏幕中.F. 2-作為頂層表單 .T.

設(shè)置表單的下同類型:表單在新建立時方法都是一樣的,只有通過更改表單的屬性可以將表單設(shè)置為所需的類型1、新建三個表單,其屬性設(shè)置如下:

表單文件名 captionshowwindowsnameMidFormDesktop1、MdiForm.scxMdi表單2-作為頂層表單frmMDI.F. .F.2、ChilsForm.scx子表單1-在頂層表單中frmchlid.T..F.3、FloatForm.scx浮動表單0-在屏幕中frmfloat.F..T.2、修改表單,在表單文件MdiForm.scx中添加二個命令按鈕:其一Caption分別為“顯示子菜單”,代碼為DOFormChildForm.scx,另一為“顯示浮動菜單”,代碼為DOFormFloatForm.scx三類表單演示操作讓我們進(jìn)行演示,建立三個表單,分別為:MDIform.scx、Childform.scx、loatForm.scx作為數(shù)據(jù)(庫)表數(shù)據(jù)信息的輸入、輸出顯示屏幕的界面2、從表單用途分類,主要有以下兩類:作為應(yīng)用程序主屏幕(主采單)的界面文檔管理信息系統(tǒng)輸入修改檢索刪除打印、顯示退出按分類號按分類號按文檔名按任意條件按分類號按任意條件打印全部卡片打印登記報表顯示全部卡片表單設(shè)計主菜單表單設(shè)計的各種界面三個表單

二、創(chuàng)建表單及表單集方法:

?文件菜單箋—新建—表單—新文件(或向?qū)В?/p>

?頂目管理器—文檔—表單—新建即可進(jìn)入表單設(shè)計器

常使用表單向?qū)В‵ormWizard)或表單設(shè)計器(FormDesigner)來新建表單。1、在表單設(shè)計器中用戶自已設(shè)計表單2、使用向?qū)Ы⑿卤韱卧诒韱蜗驅(qū)υ捒蛑?,按提示(與使用其它向?qū)б粯樱┮徊讲竭x擇完成。3、擴(kuò)展表單為表單集 表單集是由一個或多個表單組成,可以作為一個整體單元操作,可以同時顯示或隱蔽全部表單。建立了一個表單集便可以對它添加多個表單。(1)建立表單集方法:先建立一個表單,然后在“表單”菜單中選擇“創(chuàng)建表單集”(CreateFormset)即建立了一個表單集。(2)添加和移除表單:可從“表單”(Form)菜單選“添加新表單”(AddNewForm)。為從表單集去掉一個表單,可以在表單設(shè)計器底部的“表單”(Form)框選擇表單,然后從“表單”(Form)菜單選“移除表單”(RemoveForm)。(3)移除一個表單集:可從表單(Form)菜單選“移除表單集”(RemoveFormset)。四、創(chuàng)建表單集 表單集是一個或多個表單的“父親”容器??蓪Χ鄠€表單進(jìn)行統(tǒng)一管理和使用。一、創(chuàng)建表單集 新建或打開一個已存在的表單,在主菜單箋“表單”中選”創(chuàng)建表單集”二、添加、移除表單 在主菜單箋“表單”中選”添加表單”或“移除表單”4、設(shè)置數(shù)據(jù)環(huán)境 表單和表單集的數(shù)據(jù)源:表(Tables)和視圖(Views),以及表之間的關(guān)系,用數(shù)據(jù)環(huán)境設(shè)計器來添加。

在屬性窗口中一般的數(shù)據(jù)環(huán)境屬性設(shè)置如下:屬性 描述 缺省設(shè)置AutoCloseTables 當(dāng)表或表單集釋放時,控制是否表和 真(.T.)

視圖被關(guān)閉AutoOpenTables 當(dāng)表單運(yùn)行時,控制數(shù)據(jù)環(huán)境中的表 真(.T.)

和視圖是否打開

InitialSelectedAlias當(dāng)表單運(yùn)行時,所選擇的表或視圖 在設(shè)計時,如果沒有指 定,則選定在運(yùn)行時第 一個加到數(shù)據(jù)環(huán)境的臨 時表三、添加和操作表單對象

步驟 每個表單都有相應(yīng)的屬性、事件、方法。常用表單控制工具欄、調(diào)色板工具欄、布局工具欄、屬性窗口、數(shù)據(jù)環(huán)境等進(jìn)行設(shè)計。設(shè)計一個表單的步驟:

(1)創(chuàng)建表單并設(shè)置表單的屬性(2)給表單添加適當(dāng)?shù)娜萜?、控件?)設(shè)置容器、控件的屬性(4)編寫事件代碼選定對象查看類標(biāo)簽文本框編輯框命令按鈕命令按鈕組選項(xiàng)按鈕組復(fù)選框組合框列表框微調(diào)控件表格圖象計時器頁框Active控件綁定控件線條形狀容器分隔符超級鏈接生成器鎖定按鈕鎖定通過“表單控制工具欄”添加對象到一個表單,對象可是:(1)容器(Container)(2)控件(Controls)(3)用戶自定義類(4)OLE對象1、添加VFP容器到表單:命令按鈕組(Commandbuttongroup)

表格(Grid)

選項(xiàng)按鈕組(Optionbuttongroup)

頁框(Pageframe)2、添加VFP控件到表單:復(fù)選框(Checkbox)、組合框(Combobox)、命令按鈕(Commandbutton)、編輯框(Editbox)、圖像(Image)、標(biāo)簽(Label)、線條(Line)、列表框(Listbox)、OLE綁定型控件(OLEBoundControl)、OLE容器控件(OLEContainerControl)、形狀(Shape)、微調(diào)控件(Spinner)、文本框(Textbox)、記時器(Timer)。功能和所選控件對應(yīng)關(guān)系功能類型 應(yīng)該選擇的控件提供給用戶預(yù)先設(shè)定的選擇選擇按鈕組、列表框和下拉列表框、復(fù)選框接受不能預(yù)先設(shè)定的用戶輸入文本框、編輯框、組合框接受有一定值范圍的輸入 微調(diào)執(zhí)行具有一定時間間隔的特定任務(wù)計時器顯示信息 圖像、標(biāo)簽、文本框、編輯框 、形狀操作練習(xí):向表單添加控件1、圖像、標(biāo)簽、文本框、編輯框、形狀。2、用生成器鎖定控件、按鈕鎖定控件給表單添加控件。3、按鈕組、列表框和下拉列表框、復(fù)選框4、微調(diào)、計時器

9.2 面向應(yīng)用程序的組裝“模塊”:VFP類與對象 在學(xué)習(xí)表單設(shè)計中,通過上機(jī)實(shí)踐對面對象的程序設(shè)計已有了一定的認(rèn)識,下面以表所示來小結(jié):面向?qū)ο蠓椒ㄅc結(jié)構(gòu)程序設(shè)計方法之區(qū)別:設(shè)方式方法計方式數(shù)據(jù)顯示方式處理方式使用方式處理順序結(jié)構(gòu)程序面向?qū)ο蟪绦蜻^程性(Process)對向性(Object)顯示型隱藏型單一程序編碼對象模塊化一次使用可以重用定位方式非定位方式設(shè)計方式

指對問題處理的程序設(shè)計方式。1、過程性的設(shè)計思想中

?是針對問題采用順序性的程序處理決問題。

?采用邏輯概念設(shè)計程序文件。

?在解決問題的過程中,常發(fā)生調(diào)用子過程程序文件。2、面向?qū)ο蟪绦蛟O(shè)計方法,是采用“對象”為設(shè)計思想中心。

?不采用順序性處理方式,對問題采用了對象本身的屬性與方法來解決問題。

?在處理問題過程中,可以直接在對象中設(shè)計事件程序,直接觸發(fā)問題。一、VisualFoxPro中的對象1、什么是對象? 對象是VFP程序的基本構(gòu)造塊,對象具有屬性(Properties)、方法(Mathod)以及鍵盤、鼠標(biāo)或程序觸發(fā)等的事件程序,通過屬性、事件和方法等等所組合而成的具體抽象實(shí)體,就稱為對象。

而通過屬性、事件和方法,可以實(shí)現(xiàn)一個對象的功能。2、對象的屬性、事件和方法 “屬性”(Properties)封裝了數(shù)據(jù),每個對象都具有“屬性”?!皩傩浴敝悼梢栽谠O(shè)計時設(shè)置,也可以在運(yùn)行時更改,但有的“屬性”是只讀屬性,不可改變。 “事件”(Events)是預(yù)先定義的動作,由用戶或者系統(tǒng)激活。VFP中的事件通常包括了鍵盤“事件”和鼠標(biāo)“事件”,如單擊或雙擊鼠標(biāo),移動鼠標(biāo)、按鍵盤等(見P247)。 “方法”(methods)是指對象為實(shí)現(xiàn)一定功能而編寫的代碼,“方法”和對象相連。事件中的代碼可以認(rèn)為是基于事件的響應(yīng)方法。但“方法”是可以獨(dú)立于事件的單獨(dú)代碼,必要時可以由其它方法或程序代碼進(jìn)行顯示的調(diào)用。

事件通常已經(jīng)預(yù)先由系統(tǒng)定義好了,不能隨便的擴(kuò)充,而方法和屬性卻可以無限的擴(kuò)展,事件的發(fā)生具有一定的順序, 如:load和click,load在執(zhí)行表單時就激活了,而click在執(zhí)行表單后需單擊命令按鈕才激活。如:下例:

FORM(事件):load代碼:thisform.backcolor=rgb(255,0,0) Command(事件):click代碼:thisform.label2.caption="abcdefg"執(zhí)行表單文件,立即form的背景為紅色。當(dāng)單擊command1,label1的值才顯示出來。二、VisualFoxPro中的類

VisualFoxPro中的對象的概念和類的概念是密切相關(guān)的,但是有區(qū)別的,類作為一個對象的整體定義而存在,它是對象的輪廓和藍(lán)圖。

對象和類的關(guān)系就如同一臺機(jī)床和圖紙的關(guān)系,圖紙決定了某一種類型的機(jī)床的功能和外觀,而一臺具體的機(jī)床可以看作一個對象而存在。某種類型的,根據(jù)機(jī)床的初始設(shè)計圖可以設(shè)計出一個系列的機(jī)床產(chǎn)品圖,這就如同由一個父類派生出若干子類一樣,屬于某個系列的某一臺具體的機(jī)床可以看作是一個具體的對象。

所有對象的屬性、事件、方法在定義類時都將被指定。類的三大特性:封裝性、繼承性、再分類性(子類)。(1)封裝性

如一臺電話只需一根電話線連接就可以撥號使用,而不必去了解電話內(nèi)部的設(shè)置。你看到的是電話類的一個對象,其內(nèi)部的接收、轉(zhuǎn)換、電子信號的處理等復(fù)雜性(屬性、事件、方法)被隱藏了。

通過對事務(wù)的抽象,由類定義的對象可以將自己內(nèi)部的復(fù)雜性封裝起來。 封裝就是指將對象的方法、屬性代碼包裝在一起。圖1電話如下圖所示,“電話”種類可以有很多種,但都具有基類電話的基本屬性。即可從父電話類派生出一系列的子電話類,這些子類的形狀雖然有改變或新增加了一些屬性(功能),但仍繼承了父類的基本屬性、事件和方法。圖2(2)繼承性子類可以繼承父類的所有的屬性和方法,也可根據(jù)需要加入新的屬性和方法。(3)再分類(SubClass) 意義要于類(Class)本身可以不受層次的限制,往下擴(kuò)展更多的類,讓子類繼承上一層類的方法,并且有其本身的屬性與方法定義。這樣使程序編碼減至最低。甚至在修改時,只需要修改其中一層的類,其子類(SubClass)均自動調(diào)整。增加維護(hù)效率。如: IC產(chǎn)生掌上型掃描儀,又將掌上型掃描儀某一功能板裝至桌上型掃描儀,最后又將桌上型掃描儀某一元件裝至投影片掃描儀。Class:掌上型掃描儀SubClass:桌上型掃描儀、投影片掃描儀圖3

存貯該新建的命令子類,用于表單中實(shí)現(xiàn)“退出”功能。其代碼及caption的屬性“退出”都被封裝,看不到了。而且繼承了命令按鈕類(父類)的原已有的屬性等。2、類的創(chuàng)建、修改及使用創(chuàng)建類有二種方法:用類設(shè)計器創(chuàng)建、通過寫代碼創(chuàng)建。下面用類設(shè)計器來創(chuàng)建類(同時對類的三大特性進(jìn)一步了解)命令按鈕類,子類:代碼:thisform.release由它創(chuàng)建創(chuàng)建:新建文件類新文件類設(shè)計器保存:文件類型為類

修改:打開類類文件名進(jìn)入類設(shè)計器可修改。例1:例2:創(chuàng)建“電子查看”類方法:新建表單文件另存為類。ifthis.parent.label1.left+this.parent.label1.width>0 this.parent.label1.left=this.parent.label1.left-20elsethis.parent.label1.left=this.parent.shape1.widthendif自定義類演示將整個表單另成為“電子查看”類(自定義類),類文件名為JZ.vcx將生成的自定義類添加到類庫操作:1、新建表單集,拖放JZ到表單集(bdj.scx),雙擊“計時器”,看不到代碼,被封裝。

2、執(zhí)行結(jié)果,文本內(nèi)容顯示。3、打開JZ類進(jìn)行修改:刪除文本“文檔管理信息系統(tǒng)”,再打開表單集(bdj.scx),可見其類(JZ.vcx)自動被修改。4、以JZ.vcx為父類,創(chuàng)建子類jzz.vcx。(方法與例1同)(可用例1建的類,代碼:thisformset.release)5、拖放到表單集(BDJ.SCX)form2中,增加文本執(zhí)行三、類的層次如書P2481、VFP的基類和層次書P2492、容器(container)類和控件(Control)類VFP的類有兩種主要類型:容器類和控件類。(1)容器類 容器類包含其它對象,并且允許訪問這些對象。見表9-8列出了各容器類所能包含的對象。(2)控件類 控件類的封裝比容器類更為嚴(yán)密,但因此損失了一些靈活性。控件類沒有“Addobject”方法程序。(”沒有增加對象“)四、對象的處理1、在容器層次中引用對象為處理一個對象,需要知道它相對于容器層次的關(guān)系。例如,如果要在表單集中處理一個表單的控件,則需要引用表單集、表單和控件。在其容器層次中引用對象好比給VFP提供這個對象的地址。(1)絕對引用通過提供對象的完整容器層次來引用它:命令:frsFormSet.frmForm1.cmdButton1例:為了讓表格列(gridcolumn)中的控件不起作用,需要提供下面的地址:Formset.Form.PageFrame.Page.Grid.column.Control.Enabled=.F.對象的完整容器層次(2)相對引用在容器層次中引用對象時,例如在表單集合中表單命令按鈕的Click(單擊)事件,可以通過快捷鍵方式指明所要處理的對象。下表列出了一些屬性和關(guān)鍵字,這些屬性和關(guān)鍵字允許更方便地從對象層次中引用對象。

屬性或關(guān)鍵字 引用

Parent 該對象的直接容器。

THIS 該對象。

THISFORM 包含該對象的表單。

THISFORMSET 包含該對象的表單集。

應(yīng)用: 命令 何處包含此命令THISFORMSET.frm1.cmd1.Caption=ˊABCˊ 在此表單集合的任何表單上任 何控件的事件或 方法碼中。THISFORM.cmd1.Caption=ˊABCˊ 在cmd1所在同樣的表單上任何 控件的事件或方 法代碼中。THIS.Caption=ˊABCˊ 在需要改變標(biāo)題(caption)的控件 的事件或方法代碼中。THIS.Parent.BackColor=RGB(192,0,0) 在表單上一個控件的事件或方 法代碼中,此命 令改變表單的 背景顏色為暗紅色。2、設(shè)置屬性語法:Parent.Object.Property=Value(即:父.對象.屬性=值)設(shè)置多個屬性語法:WITH…ENDWITH例如,在表單集的一個表單中,要設(shè)置表格列的多個屬性,可以使用如下語法結(jié)構(gòu):WITHfrsFormSet1.frmForm1.grdGrid1.grcColumn1.width=5.Resizable=.F..ForeColor=RGB(0,0,0).BackColor=RGB(255,255,255,).SelectOnEntry=.T.ENDWITH3、調(diào)用方法一旦對象被建立,就可以在應(yīng)用程序的任何一個地方調(diào)用此對象的方法。調(diào)用方法的語法如下:Parent.Object.Method(即:父.對象.方法)例:調(diào)用顯示一個表單的方法:frsFormset.frmForm1.Show4、響應(yīng)事件當(dāng)事件發(fā)生時,該事件的過程代碼將被執(zhí)行。系統(tǒng)響應(yīng)用戶動作時,事件將被自動觸發(fā)。例如,當(dāng)用戶單擊一個控件時,系統(tǒng)自動執(zhí)行為Click事件編寫的代碼。事件代碼也能由系統(tǒng)事件觸發(fā),例如在計時器控件中的Timer事件。1.核心事件下表列舉了VFP的核心事件集,并適用于多數(shù)控件:事件 激發(fā)后動作Load 表單或表單集被加載進(jìn)內(nèi)存。Unload 表單或表單集從內(nèi)存中釋放。Init 對象被創(chuàng)建。Destroy 對象從內(nèi)存中釋放。Click 用戶用主鼠標(biāo)按鈕單擊對象。DblClick 用戶用主鼠標(biāo)按鈕雙擊對象。RightClick 用戶用輔(右)鼠標(biāo)按鈕單擊對象。GotFocus 對象接收焦點(diǎn),由用戶動作(如按Tab鍵和單擊),或者在代 碼中使用SetFocus方法引起。

LostFocus 對象失去焦點(diǎn),由用戶動作(如按Tab鍵和單擊),或者在代 碼中使用SetFocus方法引起。KeyPress 用戶按下或釋放一個鍵。MouseDown 當(dāng)鼠標(biāo)指針停在一個對象上時用戶按下鼠標(biāo)按鈕。MouseMove 用戶在對象上移動鼠標(biāo)。MouseUp 當(dāng)鼠標(biāo)指針停在一個對象上時用戶釋放鼠標(biāo)按鈕。InteractiveChange 交互式改變對象值。ProgrammaticChange 可編程地改變對象值。2.VFP事件順序見P2543、編寫事件代碼

每個對象(控件)都可進(jìn)行屬性、事件、方法的設(shè)置,現(xiàn)在學(xué)習(xí)如何定義事件、如何給控件寫入方法代碼。例題1:設(shè)置表單1(背景練習(xí)):其中有三個命令按鈕控件,作用分別為單擊COMMAND1時,表單1的背景圖改變,單擊COMMAND2時,表單1的背景圖又被改變,單擊COMMAND3時,釋放表單(關(guān)閉表單)。方法代碼

thisform.picture="c:\programfiles\microsoftvisualstudio\vfp98\fox.bmp"thisform.picture="c:\programfiles\microsoftvisualstudio\vfp98\wizards\wizstone.bmp"thisform.release事件:click背景練習(xí)例題2:登錄表單Ifthisform.text1.value="12345".and.thisform.text2.value="abc" do文檔管理信息系統(tǒng).scxelse messagebox("口令或用戶名有錯,請重輸入!",0,"提示") thisform.text1.setfocusendifthisform.text1.value=""thisform.text2.value=""thisform.text1.setfocusthisform.release登錄表單演示4、面向?qū)ο蟪绦蛘Z法(OOP)

<object>.<Properties/Methed>=<Define/Result>如:thisform.text1.value=“12345”.and.thisform.text2.value="abc"thisform.picture="c:\programfiles\microsoftvisual studio\vfp98\fox.bmp"對象對象的屬性或方式定義或結(jié)果5、信息窗口的送出使用了函數(shù)MessageBox(),其語法如下:MESSAGEBOX(cMessageText[,nDialogBoxTyoe[,cTitleBarText]])第一個參數(shù):為定義信息窗口提示內(nèi)容。第二個參數(shù):為定義信息窗口按鈕組合與圖標(biāo)(Icon)樣式的數(shù)據(jù),一般為兩個數(shù)字間以“+”串聯(lián)。第一個數(shù)字為信息窗口按鈕組合,第二個為圖標(biāo)Icon類別。如4+48,表示按鈕組合為“是”以及“否”,48為警嘆號。第三個參數(shù):為信息窗口標(biāo)題Caption內(nèi)容定義。例如:MESSAGEBOX("請輸入學(xué)號",4+48,"信息窗口")運(yùn)行例2登錄表單,按確定按鈕后(口令和登錄姓名錯)的顯示:

Messagebox("口令或用戶名有錯,請重輸入!",0,"提示")Messagebox("口令或用戶名有錯,請重輸入!",2,"提示")Messagebox("口令或用戶名有錯,請重輸入!",1,"提示")表單(Form)或表單集(Formset)對象常用語句:Thisform.release 表單釋放Thisform.refresh 表單刷新Thisform.hide 表單隱藏(對表單集中的一個表單)thisform.parent.form1.show 表單顯示(對表單集中的一 個表單) 9.3表單對象的應(yīng)用實(shí)例見P264大學(xué)生通用習(xí)題測試系統(tǒng) 9.4設(shè)置表單或表單集模板(Template)見P274第六章 VFP程序設(shè)計6.1程序的建立和執(zhí)行6.2程序的交互式命令6.3 結(jié)構(gòu)化程序設(shè)計6.4子程序與過程文件及用戶自定義函數(shù)6.5屏幕顯示格式程序設(shè)計6.6報表設(shè)計器(ReportDesigner)6.7菜單程序設(shè)計與菜單設(shè)計器(MenuDesigner)6.8程序的調(diào)試和調(diào)試器(上機(jī)實(shí)際操作)

二種工作方式:1、交互式——命令窗口

2、程序方式——程序編輯窗口,以文件形式保存,叫命令文件,其擴(kuò)展名為.prg一、程序的建立 格式:MODIFYCOMMAND<文件名>

功能:建立或修改<文件名>所指的命令文件。 說明:作為新建立程序,指該<文件名>為新文件名。作為修改程序,指該<文件名>已存在。修改程序時,將自動復(fù)制一個與命令文件同名但擴(kuò)展名為.BAK的備份文件。第六章 VFP程序設(shè)計6.1程序的建立和執(zhí)行二、程序的執(zhí)行 格式:DO<文件名>

功能:執(zhí)行<文件名>所指的程序。例如:建立程序AA.PRG命令窗口: Modifycommandaa進(jìn)入程序編輯窗口,輸入命令語句,以文件名AA.PRG保存。執(zhí)行程序:命令窗口:DOAA三、菜單方式1、建立程序:主菜單箋文件——新建——新文件——進(jìn)入程序編輯區(qū)(注:不能用向?qū)Х绞浇⒚钗募#?/p>

2、執(zhí)行程序:主菜單箋程序——程序——運(yùn)行——文件名運(yùn)行結(jié)果顯示在屏幕上,如程序有錯,則顯示錯誤信息并指出錯誤語句,修改后再運(yùn)行,直到運(yùn)行結(jié)果正確。3、修改程序:主菜單箋程序——打開——文件名,進(jìn)入程序編輯窗口,進(jìn)行修改。如:習(xí)題4.38

6.2 程序的交互式命令一、人機(jī)交互式輸入語句 程序在運(yùn)行過程中需要用戶從鍵盤上輸入任意數(shù)據(jù),此時程序運(yùn)行暫停,等待用戶輸入數(shù)據(jù)并回車,才繼續(xù)向下執(zhí)行程序。這種人機(jī)對話方式實(shí)現(xiàn)賦值語句有以下三種:1、ACCEPT格式:ACCEPT[<提示信息>]TO<內(nèi)存變量>功能:從鍵盤上輸入字符串并賦給內(nèi)存變量。2、WAIT格式:WAIT[<提示信息>][TO<內(nèi)存變量>]功能:從鍵盤上輸入單字符,可賦給內(nèi)存變量。注:如命令中無選項(xiàng)[<提示信息>]屏幕將顯示“按任意鍵繼續(xù)…”3、INPUT格式:INPUT[<提示信息>]TO<內(nèi)存變量>功能:從鍵盤上輸入數(shù)據(jù)并賦給內(nèi)存變量。注:數(shù)據(jù)可是字符型、數(shù)值型、邏輯型,內(nèi)存變量的類型由輸入的數(shù)據(jù)類型決定。SETTALKOFFCLEARUSEstu1ACCEPT“請輸入查詢學(xué)生的學(xué)號:”TONALOCATEALLFOR學(xué)號=NADISPOFF學(xué)號,姓名,計算機(jī)基礎(chǔ)SETTALKONUSE例題1:現(xiàn)有學(xué)生成績表STU1,編程查詢某學(xué)生的信息。在命令窗口輸入:MODIFYCOMMANDXM

(進(jìn)入程序編輯窗口,輸入命令語句如下:)1運(yùn)行程序:DOXM 請輸入查詢學(xué)生的姓名:962104

姓名學(xué)號計算機(jī)基礎(chǔ)王小菲96210494.00程序2:SETTALKOFFCLEARUSESTU1INDEXON學(xué)號TOXHSETINDEXTOXHACCEPT“請輸入查詢學(xué)生的姓名:”TONNSEEKNNDISPOFF學(xué)號,姓名,計算機(jī)基礎(chǔ)WAIT“需要打印嗎(Y/N)?:”TOABIFAB=“Y” SETPRINTON

?姓名,學(xué)號,計算機(jī)基礎(chǔ)

SETPRINTOFFENDIFSETTALKONUSE程序1:SETTALKOFFCLEARUSESTU1ACCEPT“請輸入查詢的課程名:”TOKZMINDEXON&KZMTOKKSetindextokkINPUT“請輸入查詢的分?jǐn)?shù):”TOFSSEEKFSDISPSETTALKONUSE

例題2:查詢某課程某分?jǐn)?shù)的學(xué)生信息。程序2:SETTALKOFFCLEARUSESTU1ACCEPT“請輸入查詢的課程名:”TOKZMINPUT“請輸入查詢的分?jǐn)?shù):”TOFSLOCATEFOR&KZM=FSDISPOFFSETTALKONUSE二、程序設(shè)計的輔助命令1、中止程序命令格式一:CANCEL功能:結(jié)束程序的運(yùn)行,返回命令窗口,同時關(guān)閉所有文件。格式二:SUSPEND功能:暫時中止程序的運(yùn)行,返回命令窗口。 當(dāng)選擇主菜單箋程序—繼續(xù)運(yùn)行或在命令窗口輸入RESUME命令。系統(tǒng)都將從中止程序的地方繼續(xù)執(zhí)行。2、注釋命令格式一:NOTE

*<注釋字符串>格式二:&&<注釋字符串>3、文本顯示命令格式:TEXT <文本字符>ENDTEXT功能:TEXT與ENDTEXT之間的<文本字符>原樣輸出。例:settalkoff text

調(diào)課通知

00511班今天上午1、2節(jié)的《計算機(jī)基礎(chǔ)》課程改在明天1、2節(jié)上課。請互相轉(zhuǎn)告

endtext settalkon 6.3 結(jié)構(gòu)化程序設(shè)計一、程序設(shè)計的概念和步驟(1)分析問題(2)確定算法(3)畫出流程框圖(4)編寫程序(5)調(diào)試程序(6)建立建全的文檔資料二、結(jié)構(gòu)化N-S流程圖1、順序結(jié)構(gòu) 2、選擇結(jié)構(gòu)3、循環(huán)結(jié)構(gòu)三、順序結(jié)構(gòu)程序設(shè)計 根據(jù)編寫程序所需命令語句的先后順序書寫每一條命令,該順序則是程序的執(zhí)行順序。如習(xí)題3.41程序。命令語句序列1命令語句序列2命令語句序列3……..四、分支結(jié)構(gòu)程序設(shè)計1、簡單選擇格式:IF<條件> <命令序列1> ENDIF功能:判斷條件如為.T.,執(zhí)行<命令序列1>中的語句,否則跳過<命令序列1>而執(zhí)行ENDIF后的語句。

T條件F命令序列1命令序列22、選擇判斷格式:IF<條件> <命令序列1> ELSE <命令序列2>ENDIF功能:判斷條件如為.T.,執(zhí)行<命令序列1>中的語句,執(zhí)行ENDIF后的語句;如<條件>為.F.,則執(zhí)行<命令序列2>,再執(zhí)行ENDIF后的語句。例題6.7:從鍵盤上任意輸入一個數(shù),請判斷是偶數(shù)還是奇數(shù)。程序如下:SettalkoffInput“請輸入任意數(shù)”tonoIfint(no/2)=no/2 ?“是偶數(shù)”Else ?“是奇數(shù)”EndifSettalkon3、多種選擇(IF的嵌套)格式:if<條件1><命令序列1>if<條件2><命令序列2>else<命令序列3>endifElse<命令序列4>EndifSettalkoffUsestu1Indexon學(xué)號toxjAcce“輸入學(xué)號”tonoSeeknoIf.not.Eof()&&測試文件結(jié)束函數(shù)

if計算機(jī)基礎(chǔ)<60?學(xué)號,計算機(jī)基礎(chǔ)不及格

elseIF計算機(jī)基礎(chǔ)>=80?學(xué)號,“計算機(jī)基礎(chǔ)為優(yōu)良”

ELSE ?學(xué)號,“計算機(jī)基礎(chǔ)為中”

ENDIFendifElse?”沒有該學(xué)號的學(xué)生?!癊ndif程序中如嵌套次數(shù)過多(大于三次),易發(fā)生邏輯錯誤。例如:用學(xué)生成績表STU1.DBF來查詢某學(xué)生計算機(jī)基礎(chǔ)課成績是優(yōu)良(>=80)或中(80>成績>=60)、不及格。4、選擇語句格式:DOCASE CASE<條件1> <命令序列1> CASE<條件2> <命令序列2> CASE<條件3> <命令序列3> … … CASE<條件n> <命令序列n> [OTHERWISE] [<命令序列N+1>] ENDCASE

功能:按順序判斷<條件>,當(dāng)其中某<條件>為真.T.時,程序執(zhí)行其<條件>下的<命令序列>,執(zhí)行完后轉(zhuǎn)到ENDCASE后繼續(xù)執(zhí)行。注:當(dāng)所有<條件>都為.F.時,如果有選項(xiàng)[OTHERWISE]則執(zhí)行[<命令序列N+1],如無則執(zhí)行ENDCASE后面的語句。T F條件1條件2…條件N其他命令序列1命令序列2…命令序列N命令序列n+1多項(xiàng)選擇流程圖例題6.9:根據(jù)獎學(xué)金評定的條件查詢STU1。DBF文件中某學(xué)生獎學(xué)金情況(甲等:平均成績大于等于90分,操行成績?yōu)閮?yōu);乙等:平均成績大于等于80分,操行成績?yōu)榱家陨希槐龋浩骄煽兇笥诘扔?5分,操行成績?yōu)榱家陨希3绦蛉缦拢篠ettalkoff’Usestu1Indexon學(xué)號toxh1Sele2Usestu2Indexon學(xué)號toxh2SeleaSetrelarionto學(xué)號intobAccept“請輸入學(xué)生學(xué)號”tonoSeeknoZx=“b.操行成績”If.not.eof()Docasecase平均分>=90.and.&zx=“優(yōu)”JXJ=“甲等“case平均分>=80.and.(&zx=“優(yōu)”.or.&zx=“良”)JXJ=“乙等”case平均分>=75.and.(&zx=“優(yōu)”.or.&zx=“良”)JXJ=“丙等”O(jiān)therwiseJXJ=““Endcase?“學(xué)號:”,學(xué)號,“姓名:”,姓名??“獎學(xué)金:”,JXJEndifCloseallSettalkon5、循環(huán)結(jié)構(gòu)程序設(shè)計(1)當(dāng)型循環(huán)當(dāng)條件循環(huán)體命令語句序列(2)直到循環(huán)循環(huán)體命令語句序列直到條件功能:判斷條件,如為.T.執(zhí)行循環(huán)體內(nèi)的命令序列,直到條件為.F.才終止執(zhí)行循環(huán)內(nèi)命令語句。而執(zhí)行ENDDO后的語句。注:對(2)種結(jié)構(gòu),則相反,是先執(zhí)行命令序列,再判斷條件,如為.T.則繼續(xù)執(zhí)行命令序列,直到條件為.F.才終止執(zhí)行循環(huán)內(nèi)命令語句。1、命令格式:DOWHILE<條件> <命令序列>ENDDO

循環(huán)結(jié)構(gòu)中其條件非常重要,由<條件>判斷的結(jié)果:.T.或.F.決定了循環(huán)的次數(shù),常用來控制循的<條件>有以下幾種:(1)、計數(shù)形式如…n=1 &&循環(huán)的初值

dowhilen<45&&循環(huán)的終值

… <命令序列>&&循環(huán)的內(nèi)

…n=n+1&&循環(huán)計數(shù)

enddo…(2)測試文件開始(BOF())或結(jié)束(EOF())函數(shù)說明:當(dāng)指針走過第一條記錄時,文件開始函數(shù)BOF()為.T.

當(dāng)指針走過最后一條記錄時,文件結(jié)束函數(shù)EOF()為.F.如:…useaa…go1dowhile.not.eof()… <命令序列> … skip+1 enddo …例6.10將所有學(xué)生有獎學(xué)金都評出來,并寫入STU2表文件中。Settalkoff’Usestu1Indexon學(xué)號toxh1Sele2Usestu2Indexon學(xué)號toxh2SeleaSetrelarionto學(xué)號intobZx=“b.操行成績”Dowhile.not.eof()Docasecase平均分>=90.and.&zx=“優(yōu)”

JXJ=“甲等“case平均分>=80.and.(&zx=“優(yōu)”.or.&zx=“良”)JXJ=“乙等”case平均分>=75.and.(&zx=“優(yōu)”.or.&zx=“良”)JXJ=“丙等”O(jiān)therwiseJXJ=““EndcaseSELE BReplace獎學(xué)金withJXJSELE ASKIPENDDOLISTCloseallSettalkON(3)在程序執(zhí)行中,從鍵盤上輸入數(shù)據(jù)如:…A=“Y”dowhileupper(A)=“Y”… <命令序列>…wait“Y/n?” to Aenddo…(4)直接用.T.作條件,用EXIT控制循環(huán)。

…dowhile.t.…<命令序列>…if<條件>exitendifenddo…2.SCAN和ENDSCAN命令與DOWHILE和ENDDO命令相似,循環(huán)可以用SCAN和ENDSCAN命令實(shí)現(xiàn)。格式:SCAN <命令序列> ENDSCAN功能:在一個表中建立一個執(zhí)行<命令序列>的循環(huán),并執(zhí)行對每一條記錄的操作,直到表文件記錄完為止。說明:該命令的使用相當(dāng)于

DOWHILE.NOT.EOF() <命令序列> SKIP+1 ENDDO1、補(bǔ)充作業(yè):用習(xí)題3.41的兩個表文件,編程(1)查詢?nèi)我庖粋€編號的商品名,銷售量。(2)分別按商品名統(tǒng)計一天銷售量的總和.2、書上作業(yè):6.1、6.3(1)要求:做在作業(yè)本上,實(shí)驗(yàn)上機(jī)調(diào)試通。1366.4子程序與過程文件及用戶自定義函數(shù)一、子程序概念:主程序——調(diào)用子程序的程序。 子程序——被調(diào)用的程序。其建立和修改與程序一 樣,但最后一個語句必是RETURN(返回語句)。1、子程序的調(diào)用格式:DO<子程序文件名>WITH<參數(shù)表>功能:程序調(diào)用(執(zhí)行)<子程序文件名>所指的程序, WITH用于主程序與子程序之間傳遞參數(shù)。2、參數(shù)的接受 主程序可用[WITH]選項(xiàng)向子程序傳遞參數(shù),在子程序中第一條語句用以下命令接受傳遞過來的參數(shù)。

格式:

PARAMETERS<變量名表>

說明:<變量名表>中變量的個數(shù)與WITH<參數(shù)表>中參數(shù)的個數(shù)相同。若WITH后用變量作參數(shù)傳遞,則PARAMETERS中與之對應(yīng)的變量的數(shù)據(jù)將被帶回主程序。例6.13:計算長方形面積CC.PRG,

(TYPECC.PRG)

(TYPECFX-1.PRG)*SUB1

溫馨提示

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

最新文檔

評論

0/150

提交評論