第7章程序設(shè)計(jì)基本概述_第1頁(yè)
第7章程序設(shè)計(jì)基本概述_第2頁(yè)
第7章程序設(shè)計(jì)基本概述_第3頁(yè)
第7章程序設(shè)計(jì)基本概述_第4頁(yè)
第7章程序設(shè)計(jì)基本概述_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

7.1面向?qū)ο蟪绦蛟O(shè)計(jì)7.2表單設(shè)計(jì)7.3基本控件設(shè)計(jì)7.4結(jié)構(gòu)化程序設(shè)計(jì)7.5小型案例實(shí)訓(xùn)

第7章程序設(shè)計(jì)基本概述學(xué)習(xí)目的與要求理解結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)的概念掌握表單、標(biāo)簽、文本框和命令按鈕的屬性、事件與方法的用法。掌握結(jié)構(gòu)化程序設(shè)計(jì)中的順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。7.1面向?qū)ο蟪绦蛟O(shè)計(jì)1.對(duì)象在面向?qū)ο蟪绦蛟O(shè)計(jì)中,“對(duì)象”是系統(tǒng)中的基本運(yùn)行實(shí)體。現(xiàn)實(shí)世界中的任何客觀事物都可以看作是對(duì)象(Object)。對(duì)象可以是具體的物件,也可以是抽象的事件。7.1.2面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念:在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象是用于構(gòu)造應(yīng)用程序的基本元素。如圖7-1所示,在表單上建立兩個(gè)對(duì)象,一個(gè)名為Text1的文本框和一個(gè)名為Command1的命令按鈕。圖7-1對(duì)象事例2.類

類(Class)是具有相同屬性特征和行為規(guī)則的多個(gè)對(duì)象的一種統(tǒng)一描述。類好比一類對(duì)象的模板,類定義對(duì)象所具有的屬性、事件和方法,從而決定了對(duì)象的外表和它的行為。而對(duì)象則是類的一個(gè)實(shí)例?;陬惪梢陨蛇@類對(duì)象中的任何一個(gè)具體對(duì)象,這些對(duì)象具有相同的屬性,但它們的屬性值可以不同。即狀態(tài)可以不同,各自保持獨(dú)立。例如,汽車是一個(gè)類,而一輛具體的汽車則是一個(gè)對(duì)象。

在VisualFoxPro中,類就像一個(gè)模板,程序設(shè)計(jì)中所需要的各類對(duì)象(如表單、按鈕、文本框等)都是由相應(yīng)的模板產(chǎn)生的,都可以看成是相應(yīng)類的實(shí)例類

名含

義類

名含

義CheckBox復(fù)選框

Line線條

TextBox文本框

ListBox列表框

ComboBox組合框

OleControlOLE容器控件

CommandButton命令按鈕

OleBoundControlOLE綁定控件

CommandGroup命令按鈕組OptionButton選項(xiàng)按鈕Container容器

OptionGroup選項(xiàng)按鈕組Label標(biāo)簽PageFrame頁(yè)框

EditBox編輯框

Page頁(yè)

Form表單Separator分隔符

FormSet表單集Shape形狀

Grid表格Spinner微調(diào)控件

HyperLink超級(jí)鏈接

Timer定時(shí)器

Image圖像

ToolBar工具欄表7-1常用類3.屬性

屬性(Property)是對(duì)象所具有的某種特性和狀態(tài)。屬性有屬性名和屬性值之分,屬性名表示對(duì)象某一方面的特性,屬性值則表示該屬性的目前取值例如,一個(gè)人的身高信息,“身高”即屬性名,“175cm”即屬性值4.事件

事件是由系統(tǒng)預(yù)先定義的由用戶或系統(tǒng)觸發(fā)的動(dòng)作,或者說(shuō)是對(duì)象能夠識(shí)別和響應(yīng)的某種操作。事件作用于對(duì)象,能被對(duì)象識(shí)別并作出相應(yīng)的反應(yīng)。事件的觸發(fā)(產(chǎn)生)有以下三種情況:(1)由用戶觸發(fā),例如鼠標(biāo)單擊會(huì)產(chǎn)生Click事件。(2)由系統(tǒng)觸發(fā),例如計(jì)時(shí)器對(duì)象會(huì)產(chǎn)生一個(gè)Timer事件。(3)由程序代碼觸發(fā),例如代碼調(diào)用事件過(guò)程。5.方法

對(duì)象的方法是指對(duì)象可執(zhí)行的動(dòng)作,或者說(shuō)方法是對(duì)象本身能夠完成的一些操作。VisualFoxPro中的每個(gè)對(duì)象都有其相應(yīng)的方法,而每個(gè)方法都有一段特定的或默認(rèn)的代碼相對(duì)應(yīng),這些代碼是在創(chuàng)建類時(shí)定義并編寫好的。我們對(duì)類、對(duì)象、屬性、事件與方法的概念做一個(gè)比方?!叭恕笔且粋€(gè)類,具體的“王五”這個(gè)人是一個(gè)實(shí)例化的對(duì)象,王五的“身高”是175cm,“體重”是70公斤,身高、體重就是他的屬性,王五這個(gè)人被“打了一下”、“推了一把”就是事件,而王五可以“吃飯”、“走路”就是他本身具有的方法。7.1.3VisualFoxPro的對(duì)象操作1.對(duì)象的引用例如,有一個(gè)表單Form1,在表單中有一個(gè)文本框Text1,如果將文本框的內(nèi)容改為“你好”,則可在程序中使用絕對(duì)引用:

Form1.Text1.Value="你好"絕對(duì)引用:由包含該對(duì)象的最外層容器對(duì)象名開(kāi)始,按照對(duì)象的包含關(guān)系依次表示。相對(duì)引用:從當(dāng)前位置指定對(duì)象。與絕對(duì)引用相比,采用相對(duì)引用方式標(biāo)記要操作的對(duì)象往往比較簡(jiǎn)捷。例如,單擊文本框Text1,使文本框的內(nèi)容變?yōu)椤澳愫谩?,在Text1的Click事件中,如果使用相對(duì)引用語(yǔ)句則為:

ThisForm.Text1.Value="你好"

This.value="你好"屬性或關(guān)鍵字引

用Parent當(dāng)前對(duì)象的上一層容器對(duì)象This當(dāng)前對(duì)象ThisForm包含當(dāng)前對(duì)象的表單ThisFormSet包含當(dāng)前對(duì)象的表單集相對(duì)引用常用的關(guān)鍵字如表7-2所示。表7-2相對(duì)引用常用關(guān)鍵字2.對(duì)象屬性的設(shè)置格式1:對(duì)象名.屬性名=屬性值功能:執(zhí)行該語(yǔ)句時(shí),會(huì)將“=”右側(cè)的屬性值賦給左側(cè)指定對(duì)象的指定屬性。說(shuō)明:對(duì)象名與屬性名之間用“.”符號(hào)分隔,且右側(cè)的屬性值與屬性名的數(shù)據(jù)類型必須一致。例如,設(shè)置對(duì)象的屬性。

Form1.Caption="學(xué)生管理" &&設(shè)置表單的Caption屬性值ThisForm.Text1.Height=800 &&給文本框的Height屬性賦值格式2:

WITH對(duì)象引用.屬性名1=屬性值1.屬性名2=屬性值2……..屬性名n=屬性值nENDWITH

功能:對(duì)同一對(duì)象同時(shí)設(shè)置多個(gè)屬性值。例如,對(duì)表單中的Command1命令按鈕對(duì)象的多個(gè)屬性同時(shí)賦值。

WITHThisForm.Command1.Width=300 &&設(shè)置命令按鈕的寬度.Height=60 &&設(shè)置命令按鈕的高度.Caption="確定!" &&設(shè)置命令按鈕上顯示的文字.Fontsize=24 &&設(shè)置命令按鈕上文字的字號(hào)ENDWITH3.對(duì)象方法的調(diào)用

創(chuàng)建了需要的對(duì)象后,就可以根據(jù)需要隨時(shí)在程序代碼中調(diào)用其方法,執(zhí)行相應(yīng)的操作。對(duì)方法的調(diào)用常在事件過(guò)程中出現(xiàn),調(diào)用對(duì)象方法的格式如下:格式:對(duì)象名.方法名功能:調(diào)用“對(duì)象名”指定對(duì)象所支持的方法,實(shí)現(xiàn)“方法名”指定的相應(yīng)操作。

例如:

ThisForm.Release&&調(diào)用表單的Release方法將表單從內(nèi)存中釋放ThisForm.Text1.SetFocus&&調(diào)用Text1對(duì)象的SetFocus方法使其獲得焦點(diǎn)4.事件過(guò)程代碼的編寫例如,當(dāng)表單上的“退出”按鈕對(duì)象發(fā)生了Click事件時(shí),若需要結(jié)束表單的執(zhí)行,則其對(duì)應(yīng)的Click事件過(guò)程代碼如下:

ThisForm.Release7.2表單設(shè)計(jì)1.利用向?qū)?chuàng)建表單7.2.1創(chuàng)建表單表單向?qū)в袃煞N:?jiǎn)伪肀韱蜗驅(qū)Ш鸵粚?duì)多表單向?qū)??!緦?shí)例7-1】使用單表表單向?qū)Ы⒈韱危@示讀者的編號(hào)、姓名、性別、班級(jí)等信息。圖7-2“表單向?qū)А睂?duì)話框(1)打開(kāi)“新建”對(duì)話框,選擇“表單”,再單擊“向?qū)А卑粹o。(2)單擊“下一步”按鈕,根據(jù)需要選擇相應(yīng)選項(xiàng),如圖7-3所示。(3)單擊“下一步”按鈕:選擇Cardid字段,將其添加到“選定字段”列表中,如圖7-4所示。圖7-4排序次序圖7-3選擇表單樣式(4)單擊“下一步”按鈕,在“請(qǐng)鍵入表單標(biāo)題”文本框中輸入“讀者信息”,然后選擇“保存并運(yùn)行表單”選項(xiàng),單擊“完成”按鈕。表單運(yùn)行后的結(jié)果如圖7-5所示。圖7-5實(shí)例7-1的運(yùn)行結(jié)果。提示:●選定字段為將來(lái)在表單上顯示的字段信息。

●多表表單向?qū)c單表表單向?qū)ь愃啤?.利用表單設(shè)計(jì)器創(chuàng)建表單【實(shí)例7-2】創(chuàng)建表單“示例.scx”,在表單上添加一個(gè)標(biāo)簽和一個(gè)命令按鈕,標(biāo)簽的內(nèi)容為“好好學(xué)習(xí)”,命令按鈕的標(biāo)題為“隱藏”。當(dāng)單擊該命令按鈕時(shí),隱藏標(biāo)簽。操作步驟如下。(1)打開(kāi)表單設(shè)計(jì)器,在菜單欄中選擇“文件”|“新建”命令,指定文件類型為“表單”,單擊“新建文件”按鈕,打開(kāi)表單設(shè)計(jì)器。(2)在表單上添加一個(gè)標(biāo)簽和一個(gè)命令按鈕,并在“屬性”窗口中修改表單的Caption屬性為“示例”,標(biāo)簽和命令按鈕的Caption屬性分別設(shè)置為“好好學(xué)習(xí)”和“隱藏”,如圖7-8所示。圖7-8添加控件及修改屬性(3)在表單設(shè)計(jì)器窗口中雙擊命令按鈕“隱藏”,在其Click事件代碼窗口中輸入以下事件代碼:

Thisform.Label1.Visible=.F.

(4)保存、運(yùn)行文件。7.2.2設(shè)置數(shù)據(jù)環(huán)境打開(kāi)數(shù)據(jù)環(huán)境的方法如下。(1)選擇“顯示”|“數(shù)據(jù)環(huán)境”命令,打開(kāi)數(shù)據(jù)環(huán)境設(shè)計(jì)器,如圖7-9所示。圖7-9數(shù)據(jù)環(huán)境設(shè)計(jì)器(2)從表單設(shè)計(jì)器工具欄中選擇數(shù)據(jù)環(huán)境,如圖7-10所示。圖7-10表單設(shè)計(jì)器工具欄(3)在表單空白處單擊鼠標(biāo)右鍵,從彈出的快捷菜單中選擇“數(shù)據(jù)環(huán)境”命令。7.2.3表單的屬性表7-3表單常用的屬性屬性名稱說(shuō)

明Caption指定表單標(biāo)題欄文字Name表單對(duì)象名,用于在程序代碼中引用表單對(duì)象Height指定表單的高度Width指定表單的寬度AutoCenter表單初次運(yùn)行是否自動(dòng)居中WindowState指定表單運(yùn)行時(shí)是普通、最大化還是最小化ControlBox標(biāo)題欄上是否有控制圖標(biāo)ForeColor表單的前景色BackColor表單的背景色MaxButton確定表單是否有最大化按鈕MinButton確定表單是否有最小化按鈕7.2.4表單的事件表7-4表單常用事件事件名稱說(shuō)

明Init對(duì)象創(chuàng)建時(shí)引發(fā)Destroy對(duì)象從內(nèi)存中釋放時(shí)引發(fā)Load建立表單對(duì)象之前引發(fā),先于Init事件Unload表單對(duì)象釋放時(shí)引發(fā),在Destroy事件之后引發(fā)Error對(duì)象方法或事件代碼運(yùn)行出錯(cuò)時(shí)引發(fā)Click單擊鼠標(biāo)左鍵時(shí)引發(fā)DblClick雙擊鼠標(biāo)左鍵時(shí)引發(fā)MouseDown按下鼠標(biāo)按鍵時(shí)引發(fā)MouseUp松開(kāi)鼠標(biāo)按鍵時(shí)引發(fā)MouseMove鼠標(biāo)移動(dòng)時(shí)引發(fā)RightClick單擊鼠標(biāo)右鍵時(shí)引發(fā)7.2.5表單常用方法表7-5表單常用方法方法名稱說(shuō)

明Show顯示表單Hide隱藏表單Release釋放表單Refresh刷新表單7.3基本控件設(shè)計(jì)7.3.1標(biāo)簽(Label)標(biāo)簽控件用于顯示文本信息,一般常用于表單中的提示信息,如用標(biāo)簽給文本框控件附加描述等。1.屬性標(biāo)簽控件常用屬性如表7-6所示。表7-6標(biāo)簽的常用屬性屬性名屬性值說(shuō)

明Caption字符型數(shù)據(jù)顯示在標(biāo)簽上的正文(標(biāo)題)Alignment0顯示的標(biāo)題靠左1顯示的標(biāo)題靠右2顯示的標(biāo)題居中AutoSize.T.根據(jù)顯示的標(biāo)題自動(dòng)調(diào)整大小.F.保持設(shè)計(jì)時(shí)的大小BorderStyle0標(biāo)簽無(wú)邊框1標(biāo)簽有邊框BackStyle0標(biāo)簽透明1標(biāo)簽覆蓋背景表7-7文本框常用的屬性屬性名稱屬性值說(shuō)

明Value字符型數(shù)據(jù)文本框當(dāng)前的內(nèi)容ControlSource指定文本框的數(shù)據(jù)源PasswordChar字符型數(shù)據(jù)設(shè)置輸入密碼時(shí)顯示的字符ReadOnly.T.設(shè)置文本框?yàn)橹蛔x,內(nèi)容不可修改.F.文本框的內(nèi)容可以修改InputMaskX允許輸入任何字符9允許輸入數(shù)字和正負(fù)號(hào)#允許輸入數(shù)字、空格和正負(fù)號(hào)$在固定位置上顯示當(dāng)前貨幣符號(hào)$$在數(shù)值前面相鄰位置上顯示當(dāng)前貨幣符號(hào)*在數(shù)值左邊顯示星號(hào).指定小數(shù)點(diǎn)的位置,分隔小數(shù)點(diǎn)左邊的字符串SelStart數(shù)值型文本框中被選擇的文本的起始位置SelLength數(shù)值型文本框中被選擇的文本的字符數(shù)SelText字符型文本框中被選擇的文本內(nèi)容文本框的屬性較復(fù)雜,因此VisualFoxPro為用戶提供了文本框生成器來(lái)對(duì)文本框進(jìn)行設(shè)置。文本框生成器的打開(kāi)方式如圖7-12,7-13所示。圖7-12文本框控件圖7-13文本框生成器2.事件文本框不僅能觸發(fā)Click事件,另外還支持的,如表7-8所示常用事件。表7-8文本框常用事件事件名稱事件觸發(fā)時(shí)刻GotFocus當(dāng)文本框獲得焦點(diǎn)時(shí)觸發(fā)LostFocus當(dāng)文本框失去焦點(diǎn)時(shí)觸發(fā)InteractiveChange當(dāng)文本框中的值發(fā)生改變時(shí)觸發(fā)3.方法文本框常用的方法是SetFocus。調(diào)用該方法,可以使文本框獲得焦點(diǎn)?!緦?shí)例7-4】設(shè)計(jì)一個(gè)輸入用戶基本信息的表單。姓名最長(zhǎng)為10個(gè)漢字;密碼用*代表;基本工資、績(jī)效工資的整數(shù)最多5位,小數(shù)1位;當(dāng)基本工資或績(jī)效工資發(fā)生變化時(shí),自動(dòng)算出合計(jì),填入“實(shí)發(fā)工資”處,如圖7-14所示。1.屬性命令按鈕的常用屬性如表7-10所示7.3.3按鈕(Command)屬性名稱屬性值說(shuō)

明Caption字符型數(shù)據(jù)在按鈕上顯示的標(biāo)題信息Cancel邏輯值該屬性設(shè)置為.T.,表示按下鍵盤上的Esc鍵與單擊命令按鈕的作用相同。在一個(gè)表單中,只允許一個(gè)命令按鈕的Cancel值設(shè)置為.T.Default邏輯值該屬性設(shè)置為.T.,表示按下鍵盤上的Esc鍵與單擊命令按鈕的作用相同。在一個(gè)表單中,只允許一個(gè)命令按鈕的Default值設(shè)置為.T.Enabled邏輯值設(shè)置按鈕是否有效Visible邏輯值設(shè)置按鈕是否可見(jiàn)Picture顯示在按鈕上的圖形文件2.事件通常命令按鈕響應(yīng)Click事件?!緦?shí)例7-5】創(chuàng)建一個(gè)如圖7-15所示的登錄窗口。圖7-15實(shí)例7-5運(yùn)行效果7.4結(jié)構(gòu)化程序設(shè)計(jì)1.算法的概念算法是在有限步驟內(nèi)求解某一問(wèn)題所使用的一組定義明確的規(guī)則。一般地,一個(gè)適用于計(jì)算機(jī)處理的算法應(yīng)具有5種特性。有窮性:必須在執(zhí)行有窮個(gè)計(jì)算步驟后結(jié)束。確定性:每一個(gè)算法給出的計(jì)算步驟都必須準(zhǔn)確、無(wú)二義性??尚行裕好恳粋€(gè)步驟的執(zhí)行必須是可行的,并且能得到確定的結(jié)果。輸入:有0個(gè)或多個(gè)輸入。輸出:有1個(gè)或多個(gè)輸出。2.算法的描述算法的表示方法有很多,常用的有自然語(yǔ)言、流程圖、偽代碼等。用流程圖來(lái)表示算法具有形象、直觀、準(zhǔn)確、易于理解等特點(diǎn)。流程圖是用一些幾何圖形符號(hào)、線條和文字說(shuō)明來(lái)表示一個(gè)問(wèn)題的處理過(guò)程,如表7-12所示。\7.4.1算法及其描述圖形符號(hào)符號(hào)名稱說(shuō)明起始、終止框表示算法的開(kāi)始和結(jié)束輸入、輸出框框中表明輸入、輸出的內(nèi)容處理框框中表明進(jìn)行什么處理判定框框中標(biāo)明判定條件并在框外標(biāo)明判定后的兩種結(jié)果的流向流線表示從某一框到另一框的流向連接圈表示算法流向出口或入口連接點(diǎn)表7-12流程圖常用符號(hào)程序的組成結(jié)構(gòu)分為三種:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。1)順序結(jié)構(gòu)順序結(jié)構(gòu)嚴(yán)格按照先后順序執(zhí)行算法的各個(gè)步驟,即按自頂而下的順序執(zhí)行每個(gè)步驟,如圖7-17所示。程序運(yùn)行后,執(zhí)行完A模塊,然后順序執(zhí)行B模塊、C模塊。2)選擇結(jié)構(gòu)選擇結(jié)構(gòu)是根據(jù)條件成立與否來(lái)決定程序的走向,如圖7-18所示。若條件成立,則執(zhí)行A模塊,否則執(zhí)行B模塊。A、B模塊只有一個(gè)模塊可被執(zhí)行。3)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是根據(jù)條件是否成立來(lái)決定程序的走向,如圖7-19所示。若條件成立,則反復(fù)執(zhí)行循環(huán)體,一直到條件不成立為止。圖7-19循環(huán)結(jié)構(gòu)7.4.2程序文件的建立與運(yùn)行1.程序文件的建立1)利用菜單方式創(chuàng)建程序文件選擇“文件”|“新建”菜單命令,打開(kāi)“新建”對(duì)話框,選中“程序”選項(xiàng),單擊“新建文件”按鈕即可進(jìn)入程序編輯窗口,在其中輸入程序代碼即可。2)利用命令創(chuàng)建程序文件格式:MODIFYCOMMAND[<程序文件名>]功能:新建或修改一個(gè)程序文件。2.運(yùn)行程序文件1)利用菜單方式運(yùn)行程序選擇“程序”|“運(yùn)行”命令,在彈出的對(duì)話框中選擇要執(zhí)行的程序文件,單擊“運(yùn)行”按鈕。如果需要執(zhí)行的文件已打開(kāi),可單擊工具欄上的運(yùn)行按鈕

來(lái)執(zhí)行程序。2)命令方式運(yùn)行程序格式:DO<程序文件名>功能:將<程序文件名>中指定的程序文件調(diào)入內(nèi)存并運(yùn)行。1.輸入一個(gè)字符命令(WAIT)格式:WAIT[<字符表達(dá)式>][TO<內(nèi)存變量名>]功能:暫停程序執(zhí)行,在屏幕上給出提示信息,并等待用戶輸入一個(gè)字符給<內(nèi)存變量名>中指定的變量。7.4.3程序常用語(yǔ)句【實(shí)例7-7】執(zhí)行下列代碼并輸入Y后,將在VisualFoxPro系統(tǒng)窗口中顯示如圖7-20所示的提示信息和結(jié)果。圖7-20實(shí)例7-7的提示信息和運(yùn)行結(jié)果2.輸入字符串命令(ACCEPT)格式:ACCEPT[<字符表達(dá)式>]TO<內(nèi)存變量名>功能:暫停程序執(zhí)行,在屏幕上給出提示信息,并等待用戶從鍵盤上輸入一個(gè)字符串常量給TO短語(yǔ)后指定的內(nèi)存變量。【實(shí)例7-8】執(zhí)行下列命令序列,在提示信息后輸入“張三”并按Enter鍵,則屏幕的提示信息與顯示結(jié)果如圖7-21所示。圖7-21實(shí)例7-8的提示信息和運(yùn)行結(jié)果3.輸入其他數(shù)據(jù)的類型命令(INPUT)格式:INPUT[<字符表達(dá)式>]TO<內(nèi)存變量名>功能:暫停程序的執(zhí)行,在屏幕上顯示提示信息,并等待用戶輸入數(shù)據(jù)給指定的內(nèi)存變量,并按Enter鍵確認(rèn),繼續(xù)下一條命令的執(zhí)行?!緦?shí)例7-9】執(zhí)行下列命令序列,在提示信息后輸入“李國(guó)安”與88并按Enter,則屏幕的提示信息與顯示結(jié)果如圖7-22所示。圖7-22實(shí)例7-9的提示信息和運(yùn)行結(jié)果順序結(jié)構(gòu)程序設(shè)計(jì)是按處理問(wèn)題的實(shí)際步驟,把相關(guān)的命令按執(zhí)行的先后順序排列在一起,執(zhí)行該程序時(shí),系統(tǒng)自動(dòng)按自上而下的順序執(zhí)行?!緦?shí)例7-10】輸入一個(gè)三位整數(shù),然后將其個(gè)、十、百位上的數(shù)字求平方和輸出。例如,程序運(yùn)行時(shí)從鍵盤上輸入321,則在屏幕上輸出147.4.4順序結(jié)構(gòu)CLEARINPUT"請(qǐng)輸入任意一個(gè)3位的整數(shù):"ToXA=INT(X/100) &&求百位上的數(shù)字B=INT((X-A*100)/10) &&取十位上的數(shù)字C=X-A*100-B*10 &&求個(gè)位上的數(shù)字Y=A^2+B^2+C^2?"所輸入的3位整數(shù)是:",X?"個(gè)、十、百位的平方和是:",YReturn1.簡(jiǎn)單分支結(jié)構(gòu)——if語(yǔ)句IF…ELSE…ENDIF語(yǔ)句特別適合于有兩個(gè)分支的選擇結(jié)構(gòu),根據(jù)指定的條件是否成立,從兩個(gè)語(yǔ)句序列中選擇執(zhí)行其中之一。7.4.5選擇結(jié)構(gòu)格式:IF<條件表達(dá)式>

語(yǔ)句序列1[Else

語(yǔ)句序列2]ENDIF

(1)IF、ELSE、ENDIF必須各占一行。每一個(gè)IF都必須有一個(gè)ENDIF與其對(duì)應(yīng),即IF和ENDIF必須成對(duì)出現(xiàn)。(2)<條件表達(dá)式>一般是關(guān)系或邏輯表達(dá)式,其結(jié)果只能是邏輯值.T.或.F.。(3若<條件表達(dá)式>的值為.T.,則執(zhí)行<語(yǔ)句序列1>,然后執(zhí)行ENDIF之后的語(yǔ)句;若<條件表達(dá)式>的值為.F.,且ELSE子句存在時(shí),則不執(zhí)行<語(yǔ)句序列1>,而是直接執(zhí)行<語(yǔ)句序列2>,然后執(zhí)行ENDIF之后的命令。(4)若ELSE子句不存在并且<條件表達(dá)式>的值為.F.,則不執(zhí)行IF和ENDIF之間的所有命令,而直接執(zhí)行ENDIF之后的語(yǔ)句,從而形成了單分支結(jié)構(gòu)。(5)<語(yǔ)句序列>往往是由一個(gè)或多個(gè)語(yǔ)句組成的,其中也可以再包含若干個(gè)IF語(yǔ)句,但每一個(gè)IF語(yǔ)句都必須有一個(gè)ENDIF與其對(duì)應(yīng)?!緦?shí)例7-11】通過(guò)鍵盤輸入一個(gè)整數(shù),判斷該數(shù)是奇數(shù)還是偶數(shù)。新建程序文件,在程序文件中輸入如下代碼:

ClearInput"輸入一個(gè)整數(shù):"ToAIfA%2=0?"這個(gè)數(shù)是偶數(shù)"ELSE?"這個(gè)數(shù)是奇數(shù)"ENDIF【實(shí)例7-12】編程判斷某一年是否為閏年(本實(shí)例利用表單實(shí)現(xiàn))。在command1的click事件中編寫如下代碼:

Y=val(thisform.text1.value)IF(Y%4=0.And.Y%100<>0).Or.Y%400=0Messagebox(str(Y)+"是閏年",64)ELSEMessagebox(str(Y)+"是閏年",64)ENDIF【實(shí)例7-13】打開(kāi)Reader表查找讀者信息,輸入讀者的卡號(hào),就可以查詢到該讀者的個(gè)人信息,運(yùn)行結(jié)果如圖7-25與圖7-26所示(本實(shí)例利用表單實(shí)現(xiàn))。在Command1的click事件中編寫如下代碼:

ID=Alltrim(Thisform.Text1.Value)UseReaderLocateForCardid=IDIF.Not.Eof()Thisform.Text2.Value=NameThisform.Text3.Value=SexThisform.Text4.Value=DeptELSE Thisform.Text2.Value=""Thisform.Text3.Value=""Thisform.Text4.Value=""Messagebox("查無(wú)此人!")ENDIF

圖7-26查詢失敗示意圖圖7-25查詢成功示意圖2.IF的嵌套

在解決比較復(fù)雜的問(wèn)題時(shí),往往需要進(jìn)行多次條件判斷才能得到正確的結(jié)果,這就需要使用IF語(yǔ)句的嵌套形式。IF語(yǔ)句的嵌套是指在一個(gè)if格式中有一個(gè)或多個(gè)if格式出現(xiàn)。說(shuō)明:(1) IF和ENDIF必須配對(duì)。(2) 系統(tǒng)在執(zhí)行嵌套If語(yǔ)句時(shí),由If語(yǔ)句的最內(nèi)層開(kāi)始逐層將If和Endif配對(duì),依次從內(nèi)到外執(zhí)行。【實(shí)例7-12】編程判斷某一年是否為閏年(本實(shí)例利用表單實(shí)現(xiàn))。在command1的click事件中編寫如下代碼:

Y=val(thisform.text1.value)IF(Y%4=0.And.Y%100<>0).Or.Y%400=0Messagebox(str(Y)+"是閏年",64)ELSEMessagebox(str(Y)+"是閏年",64)ENDIF

【實(shí)例7-14】判斷三個(gè)數(shù)中的最大值。新建程序文件,在程序文件中輸入如下代碼:

ClearInput"第一個(gè)數(shù):"ToAInput"第二個(gè)數(shù):"ToBInput"第三個(gè)數(shù):"ToCIFA>BAndA>CMax=AELSEIfB>CMax=BELSEMax=CENDIFENDIF?"最大值為:",MAX3.多分支——case語(yǔ)句

格式:

DOCASECASE<條件1>[<語(yǔ)句組1>][CASE<條件2>][<語(yǔ)句組2>]

[CASE<條件n>] [<語(yǔ)句組n>][OTHERWISE[<語(yǔ)句組N+1>]ENDCASE

功能:根據(jù)CASE后的條件,選擇執(zhí)行其中的一個(gè)語(yǔ)句組。說(shuō)明:DOCASE、CASE<條件>、OTHERWISE和ENDCASE必須各占一行。每個(gè)DOCASE必須有一個(gè)ENDCASE與之對(duì)應(yīng),即DOCASE和ENDCASE必須成對(duì)出現(xiàn)。執(zhí)行該語(yǔ)句時(shí),系統(tǒng)自上而下依次對(duì)各個(gè)CASE語(yǔ)句中的<條件>進(jìn)行判斷,若遇到某個(gè)CASE語(yǔ)句的<條件>成立,則執(zhí)行該CASE語(yǔ)句下屬的<語(yǔ)句組>,然后不管其他的CASE語(yǔ)句的<條件>是否成立,都轉(zhuǎn)去執(zhí)行ENDCASE后面的語(yǔ)句。如果CASE語(yǔ)句后的<條件>都不成立,則在有OTHERWISE語(yǔ)句的情況下,而執(zhí)行OTHERWISE下面的語(yǔ)句組,否則不執(zhí)行任何語(yǔ)句組,轉(zhuǎn)去執(zhí)行ENDCASE后面的語(yǔ)句。(3) 在一個(gè)DOCASE結(jié)構(gòu)中,最多只能執(zhí)行一個(gè)CASE下的語(yǔ)句組。【實(shí)例7-15】編程實(shí)現(xiàn):輸入學(xué)生姓名和某一課程成績(jī),若分?jǐn)?shù)大于等于90,則輸出“優(yōu)秀!”,分?jǐn)?shù)大于等于80,則輸出“良好!”,分?jǐn)?shù)大于等于60,則輸出“及格!”,小于60,則輸出“不及格!”。新建程序文件,在程序文件中輸入如下代碼:

ClearAccept"請(qǐng)輸入姓名:"ToNameInput"請(qǐng)輸入成績(jī):"ToScoreDoCASECASEScore>=90Messagebox(Name+"優(yōu)秀!",0,"成績(jī)等級(jí)")CASEScore>=8Messagebox(Name+"良好!",0,"成績(jī)等級(jí)")CASEScore>=60Messagebox(Name+"及格!",0,"成績(jī)等級(jí)")OTHERWISEMessagebox(Name+"不及格!",0,"成績(jī)等級(jí)")ENDCASE7.4.6循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)的特點(diǎn)是:當(dāng)給定的循環(huán)條件為真時(shí),就反復(fù)執(zhí)行其循環(huán)體中的語(yǔ)句;當(dāng)給定的條件為假時(shí),則終止執(zhí)行其循環(huán)體,而去執(zhí)行循環(huán)結(jié)構(gòu)后面的語(yǔ)句。格式:

DOWHILE<條件>[<語(yǔ)句序列1>][EXIT][<語(yǔ)句序列2>][LOOP][<語(yǔ)句序列3>]ENDDO

功能:當(dāng)給定的條件為真時(shí),就執(zhí)行DOWHILE…ENDDO之間的循環(huán)體。說(shuō)明:<條件>可以是關(guān)系表達(dá)式或邏輯表達(dá)式。選項(xiàng)EXIT表示從DOWHILE…ENDDO之間的循環(huán)中跳出,EXIT語(yǔ)句稱為無(wú)條件結(jié)束循環(huán)命令。選項(xiàng)LOOP表示將結(jié)束本次循環(huán),提前進(jìn)行下一次循環(huán)。

DOWHILE、ENDDO必須各占一行,每一個(gè)DOWHILE都必須有一個(gè)ENDDO與其對(duì)應(yīng)。(5) 使用DO…WHILE語(yǔ)句構(gòu)造循環(huán)時(shí),應(yīng)該仔細(xì)考慮循環(huán)結(jié)束的條件?!緦?shí)例7-16】求1+2+3+…+100的累加和。新建程序文件,在程序文件中輸入如下代碼:

ClearSum=0I=1DoWHILEI<=100 Sum=Sum+II=I+1ENDDO?"1+2+3+…+100=",Sum【實(shí)例7-17】在文本框中輸入性別,輸出讀者表(Reader)中該性別的所有記錄。(本示例用表單實(shí)現(xiàn))在command1的click的事件中編寫如下代碼:

Clears=Alltrim(thisform.text1.value)UseReaderLocateForSex=sDOWHILE.Not.Eof()?Cardid,Name,Sex,DeptContinueENDDOCloseAll【實(shí)例7-18】輸出1到100之間的所有偶數(shù)之和。新建程序文件,在程序文件中輸入如下代碼:

ClearX=1S=0DoWhileX<=100X=X+1IfMod(X,2)=0 S=S+XEndifEnddo?"0~100之間偶數(shù)之和為:",SReturn2.步長(zhǎng)型循環(huán)結(jié)構(gòu)與當(dāng)型循環(huán)相比,步長(zhǎng)型循環(huán)特別適合于構(gòu)造已知循環(huán)次數(shù)的循環(huán)。構(gòu)造步長(zhǎng)型循環(huán)結(jié)構(gòu)的語(yǔ)句如下:FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長(zhǎng)值>] [<語(yǔ)句序列1>] [EXIT][<語(yǔ)句序列2>] [LOOP][<語(yǔ)句序列3>] ENDFOR

功能:首次執(zhí)行時(shí)把<初值>賦給<循環(huán)變量>,然后將<循環(huán)變量>的值與<終值>比較,如果<循環(huán)變量>的值在<初值>與<終值>之間的范圍內(nèi),則執(zhí)行FOR與ENDFOR之間的語(yǔ)句組一次;然后<循環(huán)變量>自動(dòng)加上<步長(zhǎng)值>并重新與<終值>比較,直到<循環(huán)變量>的值不在<初值>與<終值>之間的范圍內(nèi)時(shí),結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行ENDFOR后面的語(yǔ)句。說(shuō)明:FOR、ENDFOR必須各占一行。每一個(gè)FOR都必須有一個(gè)ENDFOR與其對(duì)應(yīng),且只能在程序中使用。<循環(huán)變量>是一個(gè)作為計(jì)數(shù)器的內(nèi)存變量,<初值>是循環(huán)變量的初值,<終值>是循環(huán)變量的終值,<步長(zhǎng)值>是循環(huán)變量每次增長(zhǎng)或減少的量。若<步長(zhǎng)值>為正數(shù),則每執(zhí)行一次循環(huán)體,循環(huán)變量的值會(huì)按<步長(zhǎng)值>增加;若<步長(zhǎng)值>是負(fù)數(shù),則循環(huán)變量按<步長(zhǎng)>值減少。若省略STEP子句,則默認(rèn)<步長(zhǎng)值>是“1”,<步長(zhǎng)值>不能為0,否則會(huì)出現(xiàn)死循環(huán)。若循環(huán)體內(nèi)的EXIT語(yǔ)句被執(zhí)行,將無(wú)條件地結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行ENDFOR之后的第一條語(yǔ)句;若LOOP語(yǔ)句被執(zhí)行,則結(jié)束本次循環(huán)體的執(zhí)行,不執(zhí)行LOOP和ENDFOR之間的語(yǔ)句,而執(zhí)行下一次循環(huán)。(4) 語(yǔ)句序列中可以嵌套任何控制結(jié)構(gòu)的命令語(yǔ)句,如IF、DOCASE、DOWHILE、FOR、SCAN等。使用循環(huán)嵌套時(shí)要注意:內(nèi)外循環(huán)不能交叉,內(nèi)外循環(huán)的循環(huán)變量不能同名【實(shí)例7-19】利用FOR循環(huán)計(jì)算階乘:1×2×3×…×n。新建程序文件,在程序文件中輸入如下代碼:

ClearInput"輸入一個(gè)整數(shù):"ToNS=1FORI=1ToNS=S*I

ENDFOR

?"1*2*3*…*N=",S

RETURN【實(shí)例7-20】請(qǐng)輸出如圖7-29所示的任意行數(shù)的三角形。新建程序文件,在程序文件中輸入如下代碼:

ClearInput"請(qǐng)輸入三角形的行數(shù):"ToNFORI=1ToN?Replicate("*",2*I-1)At41-IENDFORRETURN圖7-29實(shí)例7-20的運(yùn)行結(jié)果【實(shí)例7-21】求出100~999之間的所有水仙花數(shù)。所謂的水仙花數(shù)是指一個(gè)三位整數(shù),其各位數(shù)字的立方和等于該數(shù)本身,例如153=13+53+33。新建程序文件,在程序文件中輸入如下代碼:

CLEARFORI=100To999A=Int(I/100)B=Int((I-A*100)/10)C=MOD(I,10)IFI=A^3+B^3+C^3?IENDIFENDFORRETURN3.掃描型循環(huán)結(jié)構(gòu)

掃描型循環(huán)是依據(jù)數(shù)據(jù)表而建立的循環(huán),專門用來(lái)對(duì)數(shù)據(jù)表中的若干條記錄執(zhí)行相同的操作處理。語(yǔ)句格式如下:

SCAN[<范圍>][FOR<條件>] [語(yǔ)句序列] ENDSCAN

功能:對(duì)當(dāng)前數(shù)據(jù)表中指定范圍內(nèi)符合條件的記錄,逐個(gè)執(zhí)行語(yǔ)句序列中所規(guī)定的操作。說(shuō)明:SCAN語(yǔ)句執(zhí)行時(shí),首先利用EOF()函數(shù)判斷記錄指針是否位于表尾,若其值為真(.T.),則結(jié)束循環(huán),執(zhí)行ENDCASE后面的語(yǔ)句;否則根據(jù)指定的<范圍>和<條件>將記錄指針移動(dòng)到第一個(gè)滿足條件的記錄上并執(zhí)行語(yǔ)句序列,然后記錄指針移到指定的范圍內(nèi)滿足條件的下一條記錄,重新判斷EOF()函數(shù)的值,直到函數(shù)EOF()的值為真結(jié)束循環(huán)。<范圍>選項(xiàng)用于指定記錄的查找范圍,默認(rèn)為ALL。若<范圍>和<條件>都缺省,則對(duì)所有記錄逐個(gè)進(jìn)行語(yǔ)句序列中所規(guī)定的操作。(3) SCAN…ENDSCAN必須成對(duì)使用,語(yǔ)句序列中可以嵌套任何控制結(jié)構(gòu)的命令語(yǔ)句。【實(shí)例7-22】輸出reader表中“Sex”為“男”的所有記錄。新建程序文件,在程序文件中輸入如下代碼:

ClearUseReaderSCANFORSex="男"?Cardid,Name,Sex,DeptENDSCANCloseAllRETURN4.循環(huán)的嵌套

如果在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體中又包含有另一些循環(huán)結(jié)構(gòu),就形成了多重循環(huán),也稱為循環(huán)嵌套。

循環(huán)嵌套的層次不受限制,但一個(gè)內(nèi)循環(huán)必須完全包含在外循環(huán)中,不允許出現(xiàn)交叉現(xiàn)象。【實(shí)例7-23】輸出100~300之間的所有素?cái)?shù)。新建程序文件,在程序文件中輸入如下代碼:

Clear?"100~300之間的素?cái)?shù)有:"I=0FORM=100To300K=Int(Sqrt(M))FORJ=2ToKIFM%J=0EXITENDIFENDFORIFJ>KI=I+1??MIFI%8=0?ENDIFENDIFENDFOR過(guò)程是指完成某一功能的一段程序,可供主程序調(diào)用。這樣,我們可以將一個(gè)復(fù)雜的任務(wù)分解成若干個(gè)小問(wèn)題,分別寫成過(guò)程。7.4.7過(guò)程的定義與調(diào)用1.過(guò)程的定義在VisualFoxPro中,過(guò)程實(shí)際上是組織程序代碼的一種形式,定義后才能調(diào)用。過(guò)程的定義格式如下:格式1:

PROCEDURE<過(guò)程名>[(形式參數(shù)列表)]<過(guò)程體>[RETURN]ENDPROC

格式2:

PROCEDURE<過(guò)程名>PARAMETERS<形式參數(shù)列表><過(guò)程體>[RETURN]ENDPROC2.過(guò)程的調(diào)用

過(guò)程只是一個(gè)程序片段,必須通過(guò)調(diào)用過(guò)程的方式來(lái)執(zhí)行。在調(diào)用時(shí),可能需要通過(guò)參數(shù)向過(guò)程傳遞一些數(shù)據(jù),這些可以傳遞數(shù)據(jù)的參數(shù)就是實(shí)際參數(shù),簡(jiǎn)稱實(shí)參。使用DO命令調(diào)用過(guò)程。格式:DO<過(guò)程名>[WITH<實(shí)參列表>]功能:調(diào)用指定的過(guò)程。【實(shí)例7-24】用過(guò)程實(shí)現(xiàn):輸入年份,判斷是否為閏年。

****************主程序*****************Input"

請(qǐng)輸入年份:"ToYYear=""DOSub1WITHY,Year?Str(Y)+YearRETURN******************過(guò)程放到主程序后面*****************PROCsub1PARAMETERSa,bK=a%4=0anda%100<>0ora%400=0B=IIF(k,"年是閏年","年不是閏年")RETURNENDPROC1.自定義函數(shù)的定義

自定義函數(shù)實(shí)際上也是子程序,需要像過(guò)程一樣定義與調(diào)用。函數(shù)與過(guò)程的區(qū)別在于:函數(shù)在調(diào)用結(jié)束后有一個(gè)返回值,而過(guò)程通常用來(lái)執(zhí)行某個(gè)動(dòng)作,沒(méi)有返回值。7.4.8自定義函數(shù)與調(diào)用在VisualFoxPro中,編寫自定義函數(shù)的格式如下。格式1:

溫馨提示

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

評(píng)論

0/150

提交評(píng)論