07739-Visual Foxpro數(shù)據(jù)庫(kù)程序設(shè)計(jì)教程_第1頁(yè)
07739-Visual Foxpro數(shù)據(jù)庫(kù)程序設(shè)計(jì)教程_第2頁(yè)
07739-Visual Foxpro數(shù)據(jù)庫(kù)程序設(shè)計(jì)教程_第3頁(yè)
07739-Visual Foxpro數(shù)據(jù)庫(kù)程序設(shè)計(jì)教程_第4頁(yè)
07739-Visual Foxpro數(shù)據(jù)庫(kù)程序設(shè)計(jì)教程_第5頁(yè)
已閱讀5頁(yè),還剩359頁(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)介

第1章數(shù)據(jù)庫(kù)基礎(chǔ)概述1.1.1數(shù)據(jù)處理的基本概念1.數(shù)據(jù)

數(shù)據(jù)是指存儲(chǔ)在某種介質(zhì)上用來(lái)記錄客觀事物的性質(zhì)、形態(tài)和持征的符號(hào),是對(duì)客觀存在的實(shí)體的一種描述和記載。2.信息

信息是經(jīng)過(guò)加工處理后獲得的有用的數(shù)據(jù),是對(duì)數(shù)據(jù)按一定的目的,采用一定的方法加工處理后的結(jié)果。3.數(shù)據(jù)處理

數(shù)據(jù)處理就是將原始數(shù)據(jù)轉(zhuǎn)化為信息的過(guò)程。1.1.2數(shù)據(jù)處理的發(fā)展過(guò)程

1.人工管理階段

計(jì)算機(jī)數(shù)據(jù)處理的人工管理階段有以下缺點(diǎn):(1)數(shù)據(jù)與程序不具有獨(dú)立性。(2)數(shù)據(jù)存在大量的冗余。2.文件系統(tǒng)階段

操作系統(tǒng)中的文件系統(tǒng)是專(zhuān)門(mén)管理外存數(shù)據(jù)的管理軟件。計(jì)算機(jī)開(kāi)始大量地用于數(shù)據(jù)處理工作。這時(shí)的數(shù)據(jù)處理,程序和數(shù)據(jù)可以分別存儲(chǔ)為程序文件和數(shù)據(jù)文件,因而程序與數(shù)據(jù)不再是一體。計(jì)算機(jī)數(shù)據(jù)處理的文件系統(tǒng)階段雖然比人工管理階段有了很大的進(jìn)步,但仍有以下缺點(diǎn):(1)程序與數(shù)據(jù)相互依賴性。(2)數(shù)據(jù)的冗余大。(3)數(shù)據(jù)獨(dú)立性差。3.數(shù)據(jù)庫(kù)系統(tǒng)階段

數(shù)據(jù)庫(kù)系統(tǒng)管理數(shù)據(jù)的特點(diǎn)如下:(1)實(shí)現(xiàn)了數(shù)據(jù)共享、減少了數(shù)據(jù)冗余。(2)數(shù)據(jù)結(jié)構(gòu)化。(3)提高了數(shù)據(jù)的獨(dú)立性。(4)數(shù)據(jù)統(tǒng)一管理與控制。數(shù)據(jù)庫(kù)技術(shù)1.2.1數(shù)據(jù)庫(kù)所謂數(shù)據(jù)庫(kù)是按照一定的組織方式,相互有關(guān)的數(shù)據(jù)的集合稱為數(shù)據(jù)庫(kù)(DataBase,簡(jiǎn)稱DB)。1.2.2數(shù)據(jù)庫(kù)管理系統(tǒng)

數(shù)據(jù)庫(kù)管理系統(tǒng)(DataBaseManagementSystem,簡(jiǎn)稱DBMS)是為數(shù)據(jù)庫(kù)的建立、使用和維護(hù)而配置的軟件。1.21.?dāng)?shù)據(jù)庫(kù)管理系統(tǒng)的功能

(1)數(shù)據(jù)定義功能。(2)數(shù)據(jù)操作功能。(3)控制和管理功能。(4)數(shù)據(jù)字典。2.常用的數(shù)據(jù)庫(kù)管理系統(tǒng)Oracle的功能比較強(qiáng)大,一般用于超大型管理系統(tǒng)軟件的建立,現(xiàn)在的應(yīng)用范圍也已經(jīng)比較廣泛。1.2.3數(shù)據(jù)庫(kù)系統(tǒng)1.計(jì)算機(jī)硬件系統(tǒng)

計(jì)算機(jī)硬件系統(tǒng)是指存儲(chǔ)數(shù)據(jù)庫(kù)和運(yùn)行數(shù)據(jù)庫(kù)系統(tǒng)的硬件資源,包括計(jì)算機(jī)運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備等。2.數(shù)據(jù)庫(kù)存儲(chǔ)在計(jì)算機(jī)外存儲(chǔ)器上的若干設(shè)計(jì)合理、滿足實(shí)際應(yīng)用需要的數(shù)據(jù)庫(kù)。3.數(shù)據(jù)庫(kù)管理系統(tǒng)

數(shù)據(jù)庫(kù)管理系統(tǒng)軟件是計(jì)算機(jī)系統(tǒng)軟件中的一種,幫助用戶創(chuàng)建、維護(hù)和使用數(shù)據(jù)庫(kù),是數(shù)據(jù)庫(kù)系統(tǒng)的核心。4.相關(guān)軟件

相關(guān)軟件包括操作系統(tǒng)、編譯系統(tǒng)、應(yīng)用開(kāi)發(fā)工具軟件和計(jì)算機(jī)網(wǎng)絡(luò)軟件等。5.人員人員包括數(shù)據(jù)庫(kù)管理員和用戶。數(shù)據(jù)描述與數(shù)據(jù)模型1.31.3.1數(shù)據(jù)描述

1.現(xiàn)實(shí)世界現(xiàn)實(shí)世界即客觀存在的世界?,F(xiàn)實(shí)世界中存在著各種各樣的事物及事物之間的聯(lián)系。2.信息世界

現(xiàn)實(shí)世界中的事物及事物之間的聯(lián)系由人們的感官感知,經(jīng)過(guò)人們的頭腦分析、歸納、抽象,形成信息。1.3.2概念模型1.概念模型涉及的術(shù)語(yǔ)3.機(jī)器世界

信息世界中的信息經(jīng)過(guò)抽象和組織,以數(shù)據(jù)形式存儲(chǔ)在計(jì)算機(jī)中,形成了所謂的機(jī)器世界,機(jī)器世界又稱數(shù)據(jù)世界。(1)實(shí)體和實(shí)體集(Entity,EntitySet)。(2)屬性(Attribute)。(3)域(Domain)。

(4)實(shí)體型(EntityType)。

2.實(shí)體聯(lián)系

實(shí)體內(nèi)部的聯(lián)系通常是指組成實(shí)體的各屬性之間的聯(lián)系,實(shí)體之間的聯(lián)系通常是指不同實(shí)體集之間的聯(lián)系。兩個(gè)實(shí)體型之間的聯(lián)系可以分為三類(lèi):(1)一對(duì)一聯(lián)系(1:1):

實(shí)體集A中的一個(gè)實(shí)體至多與實(shí)體集B中的一個(gè)實(shí)體相對(duì)應(yīng),反之,實(shí)體集B中的一個(gè)實(shí)體至多與實(shí)體A中的一個(gè)實(shí)體相對(duì)應(yīng)。(2)一對(duì)多聯(lián)系(1:n):實(shí)體集A中的一個(gè)實(shí)體與實(shí)體集B中的多個(gè)實(shí)體相對(duì)應(yīng),而實(shí)體集B中的一個(gè)實(shí)體至多與實(shí)體A中的一個(gè)實(shí)體相對(duì)應(yīng)。(3)多對(duì)多聯(lián)系(m:n):實(shí)體集A中的每一個(gè)實(shí)體與實(shí)體集B中的多個(gè)實(shí)體相對(duì)應(yīng),并且實(shí)體集B中的每一個(gè)實(shí)體也與實(shí)體A中的多個(gè)實(shí)體相對(duì)應(yīng)。3.建立實(shí)體聯(lián)系模型教學(xué)管理系統(tǒng)的實(shí)體模型如圖1-4所示。

1.3.3數(shù)據(jù)模型

1.層次模型利用樹(shù)型結(jié)構(gòu)表示實(shí)體及其之間聯(lián)系的模型稱為層次模型,該模型體現(xiàn)實(shí)體間的一對(duì)多聯(lián)系。2.網(wǎng)狀模型利用網(wǎng)狀結(jié)構(gòu)表示實(shí)體及其之間聯(lián)系的模型稱為網(wǎng)狀模型,該模型體現(xiàn)實(shí)體間的多對(duì)多聯(lián)系,具有很大的靈活性。3.關(guān)系模型利用二維表格表示實(shí)體及其之間聯(lián)系的模型稱為關(guān)系模型,該模型把實(shí)體的屬性和聯(lián)系都統(tǒng)一用二維表格描述,這樣的一個(gè)二維表格稱為一個(gè)關(guān)系。表1-1就是一個(gè)關(guān)系

關(guān)系模型結(jié)構(gòu)簡(jiǎn)單,但描述能力強(qiáng),還有嚴(yán)格的數(shù)學(xué)理論基礎(chǔ),因此基于關(guān)系模型的數(shù)據(jù)庫(kù)是當(dāng)今使用最為廣泛的數(shù)據(jù)庫(kù)。1.4關(guān)系數(shù)據(jù)庫(kù)1.4.1關(guān)系的概念

1.字段(Field)關(guān)系中的一列稱為一個(gè)字段,或稱為一個(gè)屬性。2.記錄(Record)

關(guān)系中的一行稱為一個(gè)記錄,或稱為一個(gè)元組。3.表(Table)

若干條記錄的集合構(gòu)成了表。表往往由兩部分組成,一是表的結(jié)構(gòu)(包含哪些字段),二是表中包含的一行行數(shù)據(jù)記錄。4.關(guān)系數(shù)據(jù)庫(kù)(RelationalDataBase)

關(guān)系數(shù)據(jù)庫(kù)是由若干表組成的集合,即關(guān)系數(shù)據(jù)庫(kù)中至少應(yīng)有一個(gè)表。5.關(guān)鍵字(Key)

關(guān)系中為了確定一條記錄,通常使用一種稱之為關(guān)鍵字的術(shù)語(yǔ)來(lái)描述,即一個(gè)關(guān)系中的某一字段或字段的組合,若它的值能唯一地標(biāo)識(shí)了一條記錄,則稱該字段或字段的組合為關(guān)鍵字。6.主關(guān)鍵字(PrimaryKey)

若一個(gè)關(guān)系有多個(gè)關(guān)鍵字,若選定其中的一個(gè)作為當(dāng)前標(biāo)識(shí)記錄的依據(jù),則該關(guān)鍵字為主關(guān)鍵字。7.外部關(guān)鍵字(ForeignKey)若某個(gè)字段不是本表的主關(guān)鍵字,但它卻是另外一個(gè)表的主關(guān)鍵字,則稱這樣的字段為表的外部關(guān)鍵字。1.4.2關(guān)系的性質(zhì)

在關(guān)系模型中,以二維表表示的關(guān)系有如下的性質(zhì):(1)每一個(gè)列不能再分,即表中不能包含表。見(jiàn)表1-6所示的工資表不是關(guān)系。(2)列是同質(zhì)的,即每一列是同一類(lèi)型的數(shù)據(jù),來(lái)自同一個(gè)域。(3)同一個(gè)關(guān)系中,不能有相同的字段名。(4)同一個(gè)關(guān)系中,不能有內(nèi)容完全相同的行。(5)行或列的次序可以任意交換,不影響關(guān)系的實(shí)際含義。1.4.3關(guān)系的運(yùn)算

1.選擇(Select)

選擇是指從一個(gè)關(guān)系中選出滿足給定條件記錄的操作,選擇是從記錄的角度進(jìn)行的運(yùn)算,選出滿足條件的那些記錄構(gòu)成原關(guān)系中的一個(gè)子集。2.投影(Project)

投影是指從一個(gè)關(guān)系中選擇若干字段(屬性)組成新的關(guān)系,投影是從字段的角度進(jìn)行的運(yùn)算,所得到的字段個(gè)數(shù)通常比原關(guān)系中的字段少。3.連接(Join)

連接是指把兩個(gè)關(guān)系中的記錄按一定條件橫向結(jié)合,生成一個(gè)新的關(guān)系。最常用的連接運(yùn)算是自然連接,它是利用兩個(gè)關(guān)系中的公共字段,把該字段相等的記錄連接起來(lái)。1.4.4關(guān)系的完整性

1.域完整性

域完整性是指字段的取值應(yīng)滿足相應(yīng)的條件。2.實(shí)體完整性

實(shí)體完整性是指表的主關(guān)鍵字的值必須是唯一的,且不允許取空值。3.參照完整性

現(xiàn)實(shí)世界中實(shí)體之間往往存在某種聯(lián)系。4.用戶自定義完整性用戶定義的完整性是針對(duì)某一具體數(shù)據(jù)庫(kù)的約束條件,由應(yīng)用環(huán)境決定。通常用戶定義的完整性主要包括以下幾個(gè)方法:(1)字段有效性約束。(2)記錄有效性約束。(3)表約束。4.用戶自定義完整性

練習(xí)一見(jiàn)書(shū)第2章

VisualFoxPro6.0開(kāi)發(fā)環(huán)境VisualFoxPro6.0簡(jiǎn)介2.12.1.1FoxPro發(fā)展過(guò)程1986年,F(xiàn)ox公司推出了與dBASEIIIplus全兼容的FoxBASE1.0,特別是隨后推出的FoxBASE+2.1版本,其功能和性能都大大提高,給微機(jī)關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品帶來(lái)了巨大影響;1989年Fox公司又推出FoxPro1.0。2.1.2VisualFoxPro6.0的功能

1.數(shù)據(jù)定義功能

2.數(shù)據(jù)操縱功能

通過(guò)VisualFoxPro6.0中數(shù)據(jù)庫(kù)設(shè)計(jì)器,用戶可以方便地定義自己的數(shù)據(jù)庫(kù),可以在數(shù)據(jù)庫(kù)中添加、移去、修改數(shù)據(jù)表,建立數(shù)據(jù)表之間的聯(lián)系。利用VisualFoxPro6.0提供的命令和菜單等,用戶可以方便地操縱數(shù)據(jù)表中的數(shù)據(jù),如添加、刪除、修改、查詢、統(tǒng)計(jì)等。3.數(shù)據(jù)控制功能

4.程序編輯、運(yùn)行與調(diào)試功能5.界面設(shè)計(jì)功能

VisualFoxPro6.0能夠自動(dòng)檢查數(shù)據(jù)表的完整性,以保證數(shù)據(jù)的正確性、有效性和相容性,同時(shí)還能控制多用戶的并發(fā)操作。通過(guò)VisualFoxPro6.0提供的命令,用戶可以方便地建立和運(yùn)行自己的程序,如果程序中有錯(cuò)誤,系統(tǒng)還提供了調(diào)試功能,幫助用戶排除程序中的錯(cuò)誤。利用VisualFoxPro6.0的表單設(shè)計(jì)器,用戶可以快速、方便地建立漂亮實(shí)用的用戶界面,大大提高開(kāi)發(fā)速度。2.1.3VisualFoxPro6.0的特點(diǎn)

1.強(qiáng)大的查詢與管理功能

VisualFoxPro6.0除了把數(shù)據(jù)庫(kù)和表的概念嚴(yán)格區(qū)分之外,還引入了視圖等概念。3.擴(kuò)大了對(duì)SQL語(yǔ)言的支持SQL語(yǔ)言是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,其查詢語(yǔ)句不僅功能強(qiáng)大,而且使用靈活。2.全新的數(shù)據(jù)庫(kù)表概念VisualFoxPro6.0除了把數(shù)據(jù)庫(kù)和表的概念嚴(yán)格區(qū)分之外,還引入了視圖等概念。4.豐富的可視化輔助工具VisualFoxPro6.0提供了向?qū)В╳izard)、設(shè)計(jì)器(designer)、生成器(builder)等可視化輔助工具,大大方便了用戶的使用。

5.支持面向?qū)ο蟮某绦蛟O(shè)計(jì)VisualFoxPro6.0除了繼續(xù)支持傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)外,還支持面向?qū)ο蟪绦蛟O(shè)計(jì),加快軟件開(kāi)發(fā)的過(guò)程,提高軟件開(kāi)發(fā)的質(zhì)量。6.支持網(wǎng)絡(luò)應(yīng)用VisualFoxPro6.0既可以開(kāi)發(fā)單機(jī)環(huán)境的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),又可以開(kāi)發(fā)網(wǎng)絡(luò)環(huán)境的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。

VisualFoxPro6.0的使用2.22.2.1VisualFoxPro6.0的啟動(dòng)

正確安裝了VisualFoxPro6.0后,在Windows桌面“開(kāi)始”菜單的“程序”選項(xiàng)中自動(dòng)建立一個(gè)“MicrosoftVisualFoxPro6.0”程序組,在該組中有一個(gè)“MicrosoftVisualFoxPro6.0”命令,執(zhí)行該命令就可啟動(dòng)VisualFoxPro6.0。

圖2-1VisualFoxPro6.0用戶界面2.2.2VisualFoxPro6.0的界面

圖2-1所示的VisualFoxPro6.0用戶界面是一個(gè)標(biāo)準(zhǔn)的Windows應(yīng)用程序窗口,包括標(biāo)題欄、菜單欄、工具欄、窗口工作區(qū)、命令窗口和狀態(tài)欄。1.標(biāo)題欄

標(biāo)題欄位于窗口的頂部,有一個(gè)標(biāo)題“MicrosoftVisualFoxPro”,標(biāo)題欄的右邊是最小化、最大化和關(guān)閉按鈕。2.菜單欄

菜單欄位于標(biāo)題欄的下面,有“文件”、“編輯”、“顯示”、“格式”、“工具”、“程序”、“窗口”和“幫助”等菜單項(xiàng)。3.工具欄工具欄位于菜單欄的下面,以命令按鈕的形式給出了常用的命令。當(dāng)用戶將鼠標(biāo)指針停留在工具欄中的某個(gè)命令按鈕上時(shí),屏幕上將彈出一個(gè)文本框,顯示該命令按鈕的名字。圖2-2“工具欄”對(duì)話框圖2-3快捷菜單4.窗口工作區(qū)窗口工作區(qū)位于“常用”工具欄的下面,又稱主窗口,用于顯示命令或程序的執(zhí)行結(jié)果。5.命令窗口命令窗口位于主窗口內(nèi),其主要作用是輸入和顯示命令。6.狀態(tài)欄狀態(tài)欄位于主窗口的底部,用來(lái)顯示系統(tǒng)的當(dāng)前狀態(tài)(如打開(kāi)的數(shù)據(jù)表名、記錄數(shù)等),用戶選擇菜單命令,或鼠標(biāo)移動(dòng)到工具按鈕上時(shí),在狀態(tài)欄內(nèi)給出相應(yīng)的命令提示。2.2.3VisualFoxPro6.0的操作方式

VisualFoxPro6.0支持兩種工作方式:交互操作方式和程序執(zhí)行方式。1.交互操作方式

(1)命令方式。命令方式是指用戶在命令窗口中輸入或選擇一條命令,并按回車(chē)鍵,系統(tǒng)立即執(zhí)行該命令,若有顯示結(jié)果則在窗口工作區(qū)中顯示,如圖2-4所示。圖2-4命令執(zhí)行方式(2)可視化操作方式。可視化操作主要包括菜單操作、設(shè)計(jì)器、向?qū)А⑸善鞯裙ぞ哳?lèi)操作。可視化操作方式實(shí)際上是執(zhí)行了相應(yīng)的菜單命令或打開(kāi)了系統(tǒng)提供的輔助工具后(如向?qū)?、設(shè)計(jì)器等),系統(tǒng)會(huì)彈出一個(gè)可視化的界面,通過(guò)對(duì)界面的操作完成某些要求。2.程序執(zhí)行方式

程序執(zhí)行方式是用戶先建立程序,然后再運(yùn)行該程序,步驟如下:(1)通過(guò)“MODIFYCOMMANDMAIN.PRG”命令,建立一個(gè)程序文件MAIN.PRG。(2)通過(guò)“DOMAIN.PRG”命令,運(yùn)行MAIN.PRG程序。2.2.4VisualFoxPro6.0的退出

一般地,退出VisualFoxPro6.0的常用方法有以下三種:(1)單擊窗口右上角的關(guān)閉按鈕;(2)在命令窗口中鍵入命令“QUIT”,按回車(chē)鍵;(3)執(zhí)行“文件”菜單中的“退出”命令。VisualFoxPro6.0的輔助工具2.32.3.1向?qū)?/p>

向?qū)且环N快捷設(shè)計(jì)工具,它通過(guò)一系列對(duì)話框向用戶提示每一步操作,引導(dǎo)用戶選擇所需要的選項(xiàng),回答系統(tǒng)提出的詢問(wèn),一步步地完成某項(xiàng)任務(wù)。VisualFoxPro6.0提供了20多個(gè)向?qū)?,若干工作都可使用相?yīng)的向?qū)?lái)完成。表2-1列出了VisualFoxPro6.0常用向?qū)У拿Q以及功能。2.3.2設(shè)計(jì)器

每種設(shè)計(jì)器有一個(gè)或多個(gè)工具欄,使用這些工具欄可以很方便地完成設(shè)計(jì)任務(wù)。例如“數(shù)據(jù)庫(kù)設(shè)計(jì)器”就有“數(shù)據(jù)庫(kù)設(shè)計(jì)器”工具欄,如圖2-6所示。設(shè)計(jì)器在VisualFoxPro6.0中的應(yīng)用非常廣泛,許多工作需要靠設(shè)計(jì)器來(lái)完成。表2-2列出了VisualFoxPro6.0常用設(shè)計(jì)器的名稱以及功能。圖2-6數(shù)據(jù)庫(kù)設(shè)計(jì)器2.3.3生成器圖2-7是編輯框生成器。圖2-7數(shù)據(jù)庫(kù)設(shè)計(jì)器VisualFoxPro6.0提供了若干生成器,表2-3列出了VisualFoxPro6.0常用生成器的名稱以及功能。

VisualFoxPro6.0的系統(tǒng)設(shè)置2.42.4.1設(shè)置工作目錄

(1)執(zhí)行“工具”菜單中的“選項(xiàng)”命令,彈出“選項(xiàng)”對(duì)話框,在對(duì)話框中選擇“文件位置”選項(xiàng)卡,結(jié)果如圖2-8所示。(2)在“文件位置”選項(xiàng)卡中,選中“默認(rèn)目錄”項(xiàng),然后單擊“修改”按鈕,系統(tǒng)彈出“更改文件位置”對(duì)話框,在其中輸入自己的工作目錄“d:\\人事檔案管理系統(tǒng)”,或者單擊對(duì)話框按鈕,從彈出的“選定目錄”對(duì)話框中選擇需要的工作目錄,并選中“使用默認(rèn)目錄”復(fù)選框,如圖2-9所示。(3)在“更改文件位置”對(duì)話框中,設(shè)定完默認(rèn)的目錄后,單擊“確定”按鈕,系統(tǒng)返回“文件位置”選項(xiàng)卡。(4)在“文件位置”選項(xiàng)卡中依次單擊“設(shè)置為默認(rèn)值”按鈕和“確定”按鈕,默認(rèn)工作目錄設(shè)置完成。

在最后一步中,如果不單擊“設(shè)置為默認(rèn)值”按鈕,這種設(shè)置為臨時(shí)設(shè)置,即再次啟動(dòng)VisualFoxPro6.0后,這些設(shè)置不起作用。圖2-8數(shù)據(jù)庫(kù)設(shè)計(jì)器圖2-9數(shù)據(jù)庫(kù)設(shè)計(jì)器2.4.2設(shè)置日期格式(1)單擊“選項(xiàng)”對(duì)話框中的“區(qū)域”選項(xiàng)卡,打開(kāi)“日期格式”下拉列表框,如圖2-10所示。(2)單擊“日期格式”下拉列表中的“ANSI”選項(xiàng),“日期格式”下拉列表框右側(cè)的文字框中效果為“98.11.2305:45:35PM”。(3)選中“年份”復(fù)選框,年份顯示4位。(4)在“區(qū)域”選項(xiàng)卡中依次單擊“設(shè)置為默認(rèn)值”按鈕和“確定”按鈕,日期格式設(shè)置完成。圖2-10數(shù)據(jù)庫(kù)設(shè)計(jì)器2.4.3設(shè)置字符比較方式

(1)單擊“選項(xiàng)”對(duì)話框中的“數(shù)據(jù)”選項(xiàng)卡,如圖2-11所示。

圖2-11數(shù)據(jù)庫(kù)設(shè)計(jì)器(2)從“排序序列“下拉列表框中選擇所需要的字符比較方式。如果選擇“PinYin”,進(jìn)行比較時(shí),漢字按照拼音順序比較大小,字符的大小順序?yàn)椋骸?lt;’0’<’9’<’a’<’z’<’A’<’Z’;如果選擇“Machine”,進(jìn)行比較時(shí),漢字和字符按照其存儲(chǔ)的機(jī)器碼的大小進(jìn)行比較,其中字符的大小順序?yàn)椋骸?lt;’0’<’9’<’A’<’Z’<’a’<’z’。(3)如果選擇了“SETNEARon”復(fù)選框(對(duì)應(yīng)于“SETNEARON”命令),當(dāng)FIND或SEEK命令查找不到記錄時(shí),系統(tǒng)將記錄指針定位在匹配程度最大的記錄上。如果清除了“SETNEARon”復(fù)選框(對(duì)應(yīng)于“SETNEAROFF”命令),當(dāng)FIND或SEEK命令查找不到記錄時(shí),記錄指針定位在文件尾,即查找失敗。(4)如果選擇了“SETEXACTon”復(fù)選框(對(duì)應(yīng)于“SETEXACTON”命令),兩個(gè)字符串用等號(hào)(=)進(jìn)行比較時(shí),只有它們完全相同結(jié)果才為真,即相當(dāng)于(==)比較,如“123”=“12”為假。如果清除了“SETEXACTon”復(fù)選框(對(duì)應(yīng)于“SETEXACTOFF”命令),兩個(gè)字符串用等號(hào)(=)進(jìn)行比較時(shí),只要等號(hào)右側(cè)的字符串是等號(hào)左側(cè)字符串的頭部(或全部),比較結(jié)果就為真,如“123”=“12”為真。(5)如果選擇了“SETANSIon”復(fù)選框(對(duì)應(yīng)于“SETANSION”命令),用SQL的=操作符比較字符串時(shí),用空格填充短的字符串,使兩個(gè)字符串長(zhǎng)度相等,然后比較,如“123”=“12”結(jié)果為假。如果清除了“SETANSIon”復(fù)選框(對(duì)應(yīng)于“SETANSIOFF”命令),用SQL的=操作符比較字符串時(shí),比較到短字符串結(jié)束為止,如“123”=“12”結(jié)果為真,“12”=“123”的結(jié)果也為真。(6)在“數(shù)據(jù)”選項(xiàng)卡中依次單擊“設(shè)置為默認(rèn)值”按鈕和“確定”按鈕,字符串比較方式設(shè)置完成。項(xiàng)目管理器2.52.5.1創(chuàng)建和打開(kāi)項(xiàng)目

1.創(chuàng)建項(xiàng)目

(1)執(zhí)行VisualFoxPro系統(tǒng)“文件”菜單下的“新建”命令,則會(huì)出現(xiàn)選擇新建文件類(lèi)型的“新建”窗口。(2)在“新建”窗口中,單擊“項(xiàng)目”選項(xiàng),然后單擊“新建文件”按鈕,則彈出“創(chuàng)建”對(duì)話框窗口,如圖2-12所示。

(3)在“創(chuàng)建”對(duì)話框窗口的“項(xiàng)目文件”文本框中輸入項(xiàng)目文件名,例如“學(xué)生信息管理”,然后單擊“保存”按鈕,則打開(kāi)“項(xiàng)目管理器”窗口,如圖2-13所示。圖2-12“創(chuàng)建”對(duì)話框圖2-13“項(xiàng)目管理器”窗口2.打開(kāi)項(xiàng)目

(1)執(zhí)行系統(tǒng)“文件”菜單下的“打開(kāi)”命令,則會(huì)出現(xiàn)選擇打開(kāi)文件類(lèi)型和指定打開(kāi)文件的“打開(kāi)”窗口,如圖2-14所示。(2)在“打開(kāi)”窗口中的“文件類(lèi)型”列表中單擊其右側(cè)的按鈕,選擇“項(xiàng)目”,從“搜尋”列表中選擇項(xiàng)目文件的保存位置,最后在文件列表中單擊選定項(xiàng)目文件。(3)最后,單擊“確定”按鈕,即可打開(kāi)“項(xiàng)目管理器”窗口,打開(kāi)選定的項(xiàng)目文件。

圖2-14“打開(kāi)”對(duì)話框窗口2.5.2項(xiàng)目管理器窗口

“項(xiàng)目管理器”是VisualFoxPro系統(tǒng)提供的數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)的平臺(tái),如圖2-15所示,提供了6個(gè)選項(xiàng)卡。圖2-15“數(shù)據(jù)”選項(xiàng)卡(1)“數(shù)據(jù)”選項(xiàng)卡?!皵?shù)據(jù)”選項(xiàng)卡主要用于組織和管理項(xiàng)目中包含的所有數(shù)據(jù),如數(shù)據(jù)庫(kù)、數(shù)據(jù)表和查詢等。(2)“文檔”選項(xiàng)卡。“文檔”選項(xiàng)卡中包含了用于數(shù)據(jù)處理所涉及的3種類(lèi)型的文件:表單、報(bào)表和標(biāo)簽,如圖2-16所示。(3)“類(lèi)”選項(xiàng)卡。一般情況下,通過(guò)VisualFoxPro的基類(lèi)就可以創(chuàng)建一個(gè)可靠的面向?qū)ο蟮氖录?qū)動(dòng)程序。若為了實(shí)現(xiàn)特殊功能而創(chuàng)建了新類(lèi),則可在項(xiàng)目管理器中修改。方法是在“類(lèi)”圖2-16“文檔”選項(xiàng)卡(4)“代碼”選項(xiàng)卡?!按a”選項(xiàng)卡中包含了用于管理數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的程序文件(.PRG)、API庫(kù)和應(yīng)用程序文件,如圖2-17所示。選項(xiàng)卡中選擇要修改的類(lèi),然后單擊“修改”按鈕即可打開(kāi)系統(tǒng)提供的“類(lèi)設(shè)計(jì)器”。圖2-17“代碼”選項(xiàng)卡(5)“其他”選項(xiàng)卡?!捌渌边x項(xiàng)卡主要用于應(yīng)用程序中其他文件的管理,包括文本文件、菜單文件、位圖文件和圖標(biāo)文件等。(6)“全部”選項(xiàng)卡?!叭俊边x項(xiàng)卡集中了上述所有類(lèi)型的文件,用于對(duì)應(yīng)用系統(tǒng)所涉及的全部文件進(jìn)行管理。

2.5.3項(xiàng)目管理1.新建文件

(1)打開(kāi)“教務(wù)管理.PJX”項(xiàng)目文件,在“項(xiàng)目管理器”窗口中選擇“數(shù)據(jù)”選項(xiàng)卡,單擊列表框中“數(shù)據(jù)庫(kù)”選項(xiàng)前的“+”號(hào)展開(kāi)數(shù)據(jù)庫(kù)列表,如圖2-18所示。圖2-18數(shù)據(jù)庫(kù)列表(2)單擊“表”,選擇新建的文件類(lèi)型,然后單擊“新建”按鈕,將會(huì)出現(xiàn)“新建表”對(duì)話框,單擊“新建文件”按鈕,即可啟動(dòng)系統(tǒng)提供的“表設(shè)計(jì)器”,進(jìn)入新表的設(shè)計(jì)過(guò)程。2.添加文件

(1)首先在項(xiàng)目管理器中選定需要添加的文件類(lèi)型。例如,若要添加一個(gè)數(shù)據(jù)庫(kù)至項(xiàng)目文件中,則應(yīng)在項(xiàng)目管理器的“數(shù)據(jù)”選項(xiàng)卡中選擇數(shù)據(jù)庫(kù)。(2)單擊“添加”按鈕,則系統(tǒng)會(huì)彈出“打開(kāi)”對(duì)話框,然后在“打開(kāi)”對(duì)話框中選擇要添加的文件。(3)最后,單擊“確定”按鈕,系統(tǒng)便將選擇的文件添加到項(xiàng)目中。3.修改文件

利用項(xiàng)目管理器可以隨時(shí)修改項(xiàng)目文件中的指定文件,具體的操作步驟如下:(1)在項(xiàng)目管理器中打開(kāi)項(xiàng)目,選擇需要修改的文件。例如,“教學(xué)管理.DBC”數(shù)據(jù)庫(kù)中的表Student.dbf。(2)單擊“修改”按鈕,系統(tǒng)將根據(jù)要修改的文件類(lèi)型打開(kāi)相應(yīng)的設(shè)計(jì)器。圖2-19是為修改表而打開(kāi)的是“表設(shè)計(jì)器”窗口。圖2-19“表設(shè)計(jì)器”窗口4.移去文件

項(xiàng)目中所包含的文件往往是項(xiàng)目中需要的,若不需要項(xiàng)目中的某一個(gè)文件,可及時(shí)將其從項(xiàng)目中移去,以保證項(xiàng)目的整潔。具體的操作過(guò)程如下:(1)首先在項(xiàng)目管理器中選擇項(xiàng)目中需要移去的文件。(2)單擊“移取”按鈕,則系統(tǒng)將出現(xiàn)如圖2-20所示的提示框。圖2-20“移去”提示框(3)若單擊“移去”按鈕,則系統(tǒng)僅僅從項(xiàng)目中移去所選擇的文件,但移去的文件仍存在于原目錄中。若單擊“刪除”按鈕,系統(tǒng)不僅從項(xiàng)目中移去所選文件,還將其從磁盤(pán)中刪除。5.連編應(yīng)用程序

連編是將數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的全部程序和文件連接并編譯在一起,這是大多數(shù)程序設(shè)計(jì)者都要進(jìn)行的工作。若需要在項(xiàng)目管理器中連編窗口中的項(xiàng)目,生成相應(yīng)的“.EXE”文件,其操作步驟如下:(1)打開(kāi)項(xiàng)目,在項(xiàng)目管理器中選擇主程序,單擊“連編”按鈕,打開(kāi)如圖2-21所示的“連編選項(xiàng)”對(duì)話框。圖2-21“連編選項(xiàng)”對(duì)話框(2)在“連編選項(xiàng)”對(duì)話框中選擇“連編可執(zhí)行文件”選項(xiàng),最后單擊“確定”按鈕即可。6.其他操作在“項(xiàng)目管理器”的右側(cè),除了上面介紹的“新建”、“添加”、“修改”、“移去”及“連編”按鈕之外,隨著所選文件類(lèi)型的不同,按鈕所顯示的名稱將隨之發(fā)生改變練習(xí)二見(jiàn)書(shū)第3章數(shù)據(jù)及數(shù)據(jù)運(yùn)算3.1

數(shù)據(jù)類(lèi)型、常量、變量與數(shù)組3.1.1數(shù)據(jù)類(lèi)型

1.字符型(C型)

字符型由字母、數(shù)字、字符、空格、符號(hào)和漢字構(gòu)成,通常表示用于顯示或打印的信息,如學(xué)生的姓名,家庭地址等。2.數(shù)值型(N型)

數(shù)值型由數(shù)字0~9以及小數(shù)點(diǎn)、正負(fù)號(hào)和E組成。長(zhǎng)度不超過(guò)20個(gè)字節(jié),其中負(fù)號(hào)和小數(shù)點(diǎn)各占一位。3.邏輯型(L型)邏輯型只有兩個(gè)數(shù)據(jù)值:邏輯真(.T.)和邏輯假(.F.),多用于表示邏輯判斷結(jié)果。4.日期型(D型)存儲(chǔ)日期型數(shù)據(jù),其存儲(chǔ)格式為“YYYYMMDD”,占8個(gè)字節(jié)。5.日期時(shí)間型(T型)日期時(shí)間型既包含日期又包含時(shí)間的數(shù)據(jù),由年、月、日、時(shí)、分、秒組成,存儲(chǔ)時(shí)占用8個(gè)字節(jié)。6.貨幣型(Y型)貨幣型數(shù)據(jù)表示貨幣金額,小數(shù)位固定為4位,若超過(guò)4位,系統(tǒng)會(huì)自動(dòng)對(duì)其進(jìn)行舍入處理。7.備注型(M型)備注型數(shù)據(jù)用來(lái)存放簡(jiǎn)歷、注釋等不定長(zhǎng)的內(nèi)容。8.通用型(G型)通用型數(shù)據(jù)用于存儲(chǔ)OLE對(duì)象,固定寬度為4個(gè)字節(jié)。9.整數(shù)型(I型)整型用于對(duì)整數(shù)的表示,僅適用于字段的定義。10.雙精度型(B型)

與一般的數(shù)值類(lèi)型相比,雙精度型提供了更高的數(shù)值精度,用于對(duì)數(shù)值精度要求較高的場(chǎng)合,存儲(chǔ)位數(shù)固定(16位有效數(shù)字),但只用于字段的定義,雙精度型數(shù)據(jù)存儲(chǔ)時(shí)占用8個(gè)字節(jié)。11.浮點(diǎn)型(F型)浮點(diǎn)型與數(shù)值型是完全等價(jià)的,主要是為了和不同版本的FoxPro兼容所設(shè)。3.1.2常量

1.數(shù)值型常量

由整數(shù)、小數(shù)或科學(xué)記數(shù)法表示的數(shù)都是數(shù)值型常量,例如100、-88、3.14159、1.23E6、2.34E-4等。2.字符型常量

字符型常量是用定界符括起來(lái)的字符串。3.邏輯型常量邏輯型常量只有兩個(gè)值:真和假。4.日期型常量日期型常量表示日期,默認(rèn)格式是:{^yyyy-mm-dd}或{^yyyy/mm/dd},其中{}、^、-(或/)為西文半角字符。5.日期時(shí)間型常量表示既有日期又有時(shí)間的日期時(shí)間類(lèi)型數(shù)據(jù),默認(rèn)格式是為{^yyyy-mm-dd\[,\]\[hh\[:mm\[:ss\]\]\[a|p|am|pm\]\]}或{^yyyy/mm/dd\[,\]\[hh\[:mm\[:ss\]\]\[a|p|am|pm\]\]}。6.貨幣型常量

貨幣型常量以$開(kāi)頭,后面是整數(shù)或小數(shù),但不能是用科學(xué)計(jì)數(shù)法表示的數(shù),小數(shù)部分如果超過(guò)4位,則四舍五入取4位小數(shù)。3.1.3變量1.字段變量字段變量是指數(shù)據(jù)表中已定義的任意一個(gè)字段。2.內(nèi)存變量?jī)?nèi)存變量用于保存程序執(zhí)行過(guò)程中的中間結(jié)果與最終結(jié)果,或用于保存對(duì)數(shù)據(jù)庫(kù)進(jìn)行某種分析處理后的結(jié)果。3.系統(tǒng)變量系統(tǒng)變量是VisualFoxPro自動(dòng)定義生成和維護(hù)的變量。3.1.4數(shù)組

1.數(shù)組的定義數(shù)組必須先定義后使用,定義數(shù)組的命令格式是:【格式1】DECLARE<數(shù)組名1>(下標(biāo)1\[,下標(biāo)2\])\[,<數(shù)組名2>(下標(biāo)1\[,下標(biāo)2\])……\]【格式2】DIMENSION<數(shù)組名1>(下標(biāo)1\[,下標(biāo)2\])\[,<數(shù)組名2>(下標(biāo)1\[,下標(biāo)2\])……\]【功能】定義一個(gè)或多個(gè)一維或二維數(shù)組?!菊f(shuō)明】①數(shù)組名的命名規(guī)則與簡(jiǎn)單內(nèi)存變量一樣,但應(yīng)注意不要與已經(jīng)存在的簡(jiǎn)單內(nèi)存變量重名。②下標(biāo)為數(shù)值表達(dá)式,用來(lái)確定數(shù)組中元素的數(shù)目。引用數(shù)組元素時(shí),數(shù)組的下標(biāo)從1開(kāi)始。③數(shù)組名后面的括號(hào)既可以用圓括號(hào)“()”,也可以用方括號(hào)“\[\]”2.數(shù)組的賦值數(shù)組被定義了以后,系統(tǒng)為每一個(gè)數(shù)組元素賦了一個(gè)初值.F.。若要改變數(shù)組元素的值,可以使用賦值命令。給數(shù)組賦值的賦值命令與簡(jiǎn)單變量類(lèi)似?!靖袷?】STORE<表達(dá)式>TO數(shù)組名【功能】給整個(gè)數(shù)組賦同一個(gè)表達(dá)式的值。

【例】DECLAREA(5)STORE5TOA&&將5賦給數(shù)組A中的每個(gè)元素【格式2】數(shù)組名(下標(biāo)1\[,下標(biāo)2\])=表達(dá)式【功能】給指定數(shù)組元素賦值?!菊f(shuō)明】在VisualFoxPro6.0中,一個(gè)數(shù)組中的數(shù)據(jù)不必是同一種數(shù)據(jù)類(lèi)型【例】DECLAREB(2)B(1)=201&&B(1)的類(lèi)型為數(shù)值型B(2)=張三”&&B(2)的類(lèi)型為字符型

運(yùn)算符與表達(dá)式3.23.2.1運(yùn)算符1.算術(shù)運(yùn)算符

算術(shù)運(yùn)算符用于處理數(shù)值型數(shù)據(jù),運(yùn)算結(jié)果仍為數(shù)值型。表3-1給出了算術(shù)運(yùn)算符及其優(yōu)先級(jí)。

若計(jì)算中包含有多個(gè)算術(shù)運(yùn)算符時(shí),運(yùn)算規(guī)則是:先乘方,后乘除,再加減;同一級(jí)別從左到右依次運(yùn)算;如果有括號(hào)“()”,先計(jì)算括號(hào)內(nèi),后計(jì)算括號(hào)外。

2.字符運(yùn)算符字符運(yùn)算符用于對(duì)字符型數(shù)據(jù)進(jìn)行處理,運(yùn)算結(jié)果為字符型或邏輯型。字符運(yùn)算符只有3個(gè):“+”、“-”和“$”,如表3-2所示。3.日期時(shí)間運(yùn)算符日期時(shí)間運(yùn)算符對(duì)日期和日期時(shí)間型數(shù)據(jù)進(jìn)行處理,日期(或日期時(shí)間)型數(shù)據(jù)加減一個(gè)整數(shù),結(jié)果仍為日期(或日期時(shí)間)型,兩個(gè)日期(或日期時(shí)間)型數(shù)據(jù)相減,結(jié)果為整數(shù),如表3-3所示。4.關(guān)系運(yùn)算符關(guān)系運(yùn)算符主要用來(lái)對(duì)兩個(gè)同類(lèi)型數(shù)據(jù)進(jìn)行比較運(yùn)算,運(yùn)算結(jié)果為邏輯型,如表3-4所示。關(guān)系運(yùn)算符的有關(guān)注意事項(xiàng)如下:①關(guān)系運(yùn)算符左右兩端的數(shù)據(jù)必須是相同類(lèi)型的數(shù)據(jù),否則將導(dǎo)致語(yǔ)法錯(cuò)誤。②數(shù)值型數(shù)據(jù)按其數(shù)值大小進(jìn)行比較。③字符型數(shù)據(jù)的大小由字符比較方式(詳見(jiàn)第2.4.3節(jié))決定。④日期、日期時(shí)間型數(shù)據(jù)的大小是:日期早的其值小,日期晚的其值大。

5.邏輯運(yùn)算符邏輯運(yùn)算符用于進(jìn)行邏輯型數(shù)據(jù)的處理,運(yùn)算結(jié)果仍為邏輯型,表3-5給出了邏輯運(yùn)算符及優(yōu)先級(jí)。表3-6給出了各種邏輯運(yùn)算的規(guī)則。3.2.2表達(dá)式

所謂的表達(dá)式是指用VisualFoxPro運(yùn)算符將若干運(yùn)算量(常量、變量、數(shù)組元素、函數(shù)、字段名等)連接起來(lái)的“合法”的式子。3.3常用內(nèi)部函數(shù)3.3.1數(shù)值處理函數(shù)

1.平方根函數(shù)SQRT()【格式】SQRT(<數(shù)值表達(dá)式>)【功能】首先計(jì)算數(shù)值表達(dá)式的值,然后求平方根并將其作為函數(shù)的返回值?!菊f(shuō)明】表達(dá)式的值必須為正數(shù)?!纠??SQRT(24-8)&&顯示結(jié)果為:4.002.取對(duì)值函數(shù)ABS()

【格式】ABS(<數(shù)值表達(dá)式>)【功能】計(jì)算數(shù)值表達(dá)式的值并返回?cái)?shù)值表達(dá)式的絕對(duì)值?!纠緼=10B=30?ABS(2*A-B)&&顯示結(jié)果為:103.取整函數(shù)INT【格式】INT(<數(shù)值表達(dá)式>)【功能】計(jì)算數(shù)值表達(dá)式并返回?cái)?shù)值表達(dá)式值的整數(shù)部分?!纠?INT(28.48*2)&&顯示結(jié)果為:56?INT(-56.98)&&顯示結(jié)果為:-564.四舍五入函數(shù)ROUND()【格式】ROUND(<數(shù)值表達(dá)式>,<小數(shù)位數(shù)>)【功能】按指定的小數(shù)位數(shù)對(duì)<數(shù)值表達(dá)式>的值進(jìn)行四舍五入處理?!菊f(shuō)明】返回指定的<數(shù)值表達(dá)式>在指定位置四舍五入后的結(jié)果。<小數(shù)位數(shù)>指定四舍五入的位置。若<小數(shù)位數(shù)>大于等于0,那么它表示的是要保留的小數(shù)位數(shù);若<小數(shù)位數(shù)>小于0,那么它表示的是整數(shù)部分的舍入位數(shù)?!纠?ROUND(1234.8654,2)&&顯示結(jié)果為:1234.87?ROUND(1234.8654,0)&&顯示結(jié)果為:1235?ROUND(1234.8654,-2)&&顯示結(jié)果為:12005.取余函數(shù)MOD()【格式】MOD(<數(shù)值表達(dá)式1>,<數(shù)值表達(dá)式2>)【功能】返回兩個(gè)數(shù)相除后的余數(shù)。【說(shuō)明】<數(shù)值表達(dá)式1>是被除數(shù),<數(shù)值表達(dá)式2>是除數(shù)。余數(shù)的正負(fù)號(hào)與除數(shù)相同。若被除數(shù)與除數(shù)同號(hào),則函數(shù)值即為兩個(gè)數(shù)相除的余數(shù);若被除數(shù)與除數(shù)異號(hào),則函數(shù)值即為兩個(gè)數(shù)相除的余數(shù)再加上除數(shù)的值?!纠??MOD(3*4,7)&&顯示結(jié)果為:5?MOD(7,-2)&&顯示結(jié)果為:-1

6.圓周率函數(shù)PI()【格式】PI()【功能】返回圓周率π的值(數(shù)值型)?!纠坑?jì)算半徑為2的圓面積:?2**2*PI()&&顯示結(jié)果為:12.5664?2^2*3.14&&顯示結(jié)果為:12.567.最大值函數(shù)MAX()【格式】MAX(表達(dá)式1,表達(dá)式2,…,表達(dá)式n)【功能】計(jì)算各表達(dá)式的值,并返回其中的最大值?!菊f(shuō)明】表達(dá)式1、表達(dá)式2、…類(lèi)型可以是數(shù)值型(N)、日期型(D)或字符型(C),但所有表達(dá)式的類(lèi)型必須相同。

【例】?MAX(12,45,76,3)&&顯示結(jié)果為:76?MAX({^1999/12/01},{^1998/12/01}&&顯示結(jié)果為:12/01/99?MAX(,,a,z)&&顯示結(jié)果為:z8.最小值函數(shù)MIN()【格式】MIN(表達(dá)式1,表達(dá)式2,…,表達(dá)式N)【功能】計(jì)算各表達(dá)式的值,并且返回表達(dá)式中的最小值?!菊f(shuō)明】表達(dá)式1、表達(dá)式2、…類(lèi)型可以是數(shù)值型(N)、日期型(D)或字符型(C),但所有表達(dá)式的類(lèi)型必須相同?!纠??MIN(12,45,76,3)&&顯示結(jié)果為:3?MIN({^1999/12/01},{^1998/12/01})&&顯示結(jié)果為:12/01/98?MIN(,,a,z)&&顯示結(jié)果為:13.3.2字符處理函數(shù)

1.子字符串查找函數(shù)AT|ATC()【格式】AT|ATC(<字符表達(dá)式1>,<字符表達(dá)式2>\[,<數(shù)值表達(dá)式>\])【功能】返回<字符表達(dá)式1>在<字符表達(dá)式2>中第<數(shù)值表達(dá)式>次出現(xiàn)的位置。【說(shuō)明】①若<字符表達(dá)式1>是<字符表達(dá)式2>的子串,則返回<字符表達(dá)式1>中的首字符在<字符表達(dá)式2>中的位置。②ATC與AT的功能類(lèi)似,區(qū)別在于ATC函數(shù)不區(qū)分字母的大小寫(xiě),返回值亦為數(shù)值型。③<數(shù)值表達(dá)式>指定<字符表達(dá)式1>在<字符表達(dá)式2>中第幾次出現(xiàn)。缺省<數(shù)值表達(dá)式>時(shí),系統(tǒng)默認(rèn)為1。④若在<字符表達(dá)式2>中未找到<字符表達(dá)式1>,則函數(shù)返回0?!纠?AT(“as”,“Assoonaspossible”)&&顯示結(jié)果為:9?AT(“青大”,“青島大學(xué)商學(xué)院”)&&顯示結(jié)果為:0?AT(“s”,“Assoonaspossible”,2)&&顯示結(jié)果為:4?AT(“學(xué)”,“青島大學(xué)商學(xué)院”,2)&&顯示結(jié)果為:11?ATC(“as”,“Assoonaspossible”,2)&&顯示結(jié)果為:12.字符串長(zhǎng)度測(cè)試函數(shù)LEN()

【格式】LEN(<字符表達(dá)式>)【功能】返回字符表達(dá)式的長(zhǎng)度值,即所包含的字符個(gè)數(shù)(字節(jié)數(shù)),函數(shù)的返回值為數(shù)值型?!纠?LEN(“VisualFoxPro6.0”)&&顯示結(jié)果為:17?LEN(“青島大學(xué)”)&&顯示結(jié)果為:8注意:一個(gè)漢字占兩個(gè)字節(jié),字符串中的一個(gè)空格亦占一個(gè)字節(jié)3.截取子字符串函數(shù)SUBSTR()【格式】SUBSTR(<字符表達(dá)式>,<數(shù)值表達(dá)式1>\[,<數(shù)值表達(dá)式2>\])【功能】從<字符表達(dá)式>中的<數(shù)值表達(dá)式1>位置開(kāi)始取出<數(shù)值表達(dá)式2>個(gè)字符,函數(shù)的返回值為字符型數(shù)據(jù),即子字符串。【說(shuō)明】如果缺省<數(shù)值表達(dá)式2>,則返回從<數(shù)值表達(dá)式1>位置開(kāi)始到<字符表達(dá)式>最后的所有字符?!纠?SUBSTR(“青島大學(xué)”,3,2)&&顯示結(jié)果為:島?SUBSTR(“Qingdao”,3,2)&&顯示結(jié)果為:ng?SUBSTR(“青島大學(xué)”,5)&&顯示結(jié)果為:大學(xué)4.左取或右取子字符串函數(shù)LEFT()|RIGHT()【格式】LEFT|RIGHT(<字符表達(dá)式>,<數(shù)值表達(dá)式>)【功能】從<字符表達(dá)式>最左邊或最右邊開(kāi)始取出含有<數(shù)值表達(dá)式>指定字符個(gè)數(shù)的子字符串。【說(shuō)明】①參數(shù)<數(shù)值表達(dá)式>以字節(jié)為單位,函數(shù)返回值為字符型數(shù)據(jù)。②若<數(shù)值表達(dá)式>的值大于<字符表達(dá)式>的長(zhǎng)度,返回<字符表達(dá)式>;若<數(shù)值表達(dá)式>的值≤0,則返回空字符串?!纠?LEFT(“青島大學(xué)”,2)&&顯示結(jié)果為:青?LEFT(“Qingdao”,2)&&顯示結(jié)果為:Qi?RIGHT(“青島大學(xué)”,2)&&顯示結(jié)果為:學(xué)?RIGHT(“Qingdao”,2)&&顯示結(jié)果為:ao5.刪除前導(dǎo)和尾隨空格函數(shù)【格式】LTRIM|RTRIM|TRIM(<字符表達(dá)式>)【功能】LTRIM刪除<字符表達(dá)式>的前導(dǎo)空格,返回值仍為字符型;RTRIM|TRIM刪除<字符表達(dá)式>的尾部空格,返回值仍為字符型。【例】?“1”+LTRIM(“2”)+“3”&&顯示結(jié)果為:123?“1”+RTRIM(“2”)+“3”&&顯示結(jié)果為:1236.刪除前導(dǎo)和尾隨空格ALLTRIM()【格式】ALLTRIM(<字符表達(dá)式>)【功能】刪除<字符表達(dá)式>的前導(dǎo)和尾部空格。【例】?“1”+ALLTRIM(“2”)+“3”&&顯示結(jié)果為:1237.產(chǎn)生空格字符串函數(shù)SPACE()【格式】SPACE(<數(shù)值表達(dá)式>)【功能】返回包含<數(shù)值表達(dá)式>個(gè)空格的字符串?!纠?“1”+SPACE(2)+“3”&&顯示結(jié)果為:138.大小寫(xiě)轉(zhuǎn)換函數(shù)UPPER|LOWER()【格式】UPPER|LOWER(<字符表達(dá)式>)【功能】UPPER將<字符表達(dá)式>中的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母,LOWER將<字符表達(dá)式>中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母?!纠浚縐PPER(“Visual”)&&顯示結(jié)果為:VISUAL?LOWER(FoxPro)&&顯示結(jié)果為:foxpro3.3.3日期及日期時(shí)間函數(shù)

1.獲取系統(tǒng)當(dāng)前日期函數(shù)【格式】DATE()【功能】返回系統(tǒng)當(dāng)前日期,函數(shù)值為日期型。2.獲取系統(tǒng)當(dāng)前時(shí)間函數(shù)【格式】TIME()【功能】返回當(dāng)前系統(tǒng)時(shí)間(24小時(shí)制),函數(shù)值為字符型。3.獲取系統(tǒng)當(dāng)前日期時(shí)間函數(shù)【格式】DATETIME()【功能】返回系統(tǒng)當(dāng)前日期和時(shí)間,函數(shù)值為日期時(shí)間型?4.獲取年號(hào)函數(shù)【格式】YEAR(<日期表達(dá)式>|<日期時(shí)間表達(dá)式>)【功能】返回<日期表達(dá)式>或<日期時(shí)間表達(dá)式>中的年份值,函數(shù)值為數(shù)值型?!纠?MONTH({^1999-02-12})&&顯示結(jié)果為:26.獲取日號(hào)函數(shù)【格式】DAY(<日期表達(dá)式>|<日期時(shí)間表達(dá)式>)【功能】返回<日期表達(dá)式>或<日期時(shí)間表達(dá)式>中的日號(hào),函數(shù)值為數(shù)值型?!纠浚緿AY({^1999-02-12})&&顯示結(jié)果為:123.3.4數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)

1.字符轉(zhuǎn)換為數(shù)值函數(shù)VAL()【格式】VAL(<字符表達(dá)式>)【功能】將<字符表達(dá)式>轉(zhuǎn)換為數(shù)值型數(shù)據(jù)?!菊f(shuō)明】①VAL函數(shù)按從左到右的順序處理字符表達(dá)式,直到遇到一個(gè)非數(shù)值字符(不包括科學(xué)計(jì)數(shù)法指示符E)。②如果<字符表達(dá)式>中的第一個(gè)字符不是數(shù)字,VAL函數(shù)將返回?cái)?shù)值0?!纠??VAL(“3.1415926PI36”)&&顯示結(jié)果為:3.14?VAL(“3.1415926e36”)&&顯示結(jié)果為:3.14159260E+36?VAL(“a36”)&&顯示結(jié)果為:0.002.?dāng)?shù)值轉(zhuǎn)換為字符

【格式】STR(<數(shù)值表達(dá)式1>\[,<數(shù)值表達(dá)式2>\]\[,<數(shù)值表達(dá)式3>\]))【功能】把<數(shù)值表達(dá)式1>的值轉(zhuǎn)換為字符型數(shù)據(jù),即字符串?!菊f(shuō)明】①<數(shù)值表達(dá)式2>的值決定轉(zhuǎn)換后的字符串總長(zhǎng)度(包括小數(shù)點(diǎn)),<數(shù)值表達(dá)式3>決定轉(zhuǎn)換時(shí)要保留的小數(shù)位數(shù)。②如果<數(shù)值表達(dá)式2>的值大于<數(shù)值表達(dá)式1>的實(shí)際長(zhǎng)度,則在數(shù)字串左邊補(bǔ)充空格。③如果<數(shù)值表達(dá)式2>小于<數(shù)值表達(dá)式1>的實(shí)際長(zhǎng)度,但大于等于<數(shù)值表達(dá)式1>的整數(shù)部分(包括負(fù)號(hào))

的長(zhǎng)度,則優(yōu)先滿足整數(shù)部分而自動(dòng)調(diào)整小數(shù)部分(四舍五入)④若<數(shù)值表達(dá)式2>值小于<數(shù)值表達(dá)式1>的整數(shù)部分長(zhǎng)度,則函數(shù)將輸出星號(hào)“*”。⑤若缺省<數(shù)值表達(dá)式3>或同時(shí)缺省<數(shù)值表達(dá)式2>和<數(shù)值表達(dá)式3>,則函數(shù)只轉(zhuǎn)換整數(shù)部分(包括負(fù)號(hào))?!纠?STR(356.14159,8,4)&&顯示結(jié)果為:356.1416?STR(356.14159,14,4)&&顯示結(jié)果為:356.1416?STR(356.14159,5,4)&&顯示結(jié)果為:356.1?STR(356.14159,2,4)&&顯示結(jié)果為:**?STR(-356.14159,8)&&顯示結(jié)果為:-356?STR(-356.14159)&&顯示結(jié)果為:-3563.字符型轉(zhuǎn)換為日期型函數(shù)

【格式】CTOD(<字符表達(dá)式>)【功能】把<字符表達(dá)式>轉(zhuǎn)換為日期型數(shù)據(jù)?!菊f(shuō)明】①<字符表達(dá)式>的格式可以是:“^YY/MM/DD”、“^YY-MM-DD”、“^YY.MM.DD”,年份可以帶有世紀(jì),也可不帶有世紀(jì)。②如果年份不帶世紀(jì),默認(rèn)為當(dāng)前世紀(jì)。【例】?YEAR(CTOD(“^1999/10/13”)&&顯示結(jié)果為:19994.日期型轉(zhuǎn)換為字符型函數(shù)【格式】DTOC(<日期表達(dá)式>|<日期時(shí)間表達(dá)式>\[,1\])【功能】把<日期表達(dá)式>或<日期時(shí)間表達(dá)式>中的日期轉(zhuǎn)換為字符串?!菊f(shuō)明】①缺省可選項(xiàng)1時(shí),函數(shù)返回的字符格式為“MM/DD/YY”;選擇可選項(xiàng)1時(shí),返回的字符格式為“YYYYMMDD”。②若設(shè)置了顯示世紀(jì)(使用SETCENTURYON命令),則年份用4位表示。【例】?DTOC({^2002/12/27})&&顯示結(jié)果為:12/27/02?DTOC({^2002/12/2715:20:38})&&顯示結(jié)果為:12/27/02?DTOC({^2002/12/27},1)&&顯示結(jié)果為:20021227?DTOC({^2002/12/2715:20:38},1)&&顯示結(jié)果為:20021227

3.3.5其他函數(shù)

1.邏輯函數(shù)IIF()【格式】IIF(<邏輯表達(dá)式>,<表達(dá)式1>,<表達(dá)式2>)【功能】根據(jù)<邏輯表達(dá)式>的值,返回<表達(dá)式1>和<表達(dá)式2>值中的某一個(gè)?!菊f(shuō)明】①<邏輯表達(dá)式>指定了要計(jì)算的邏輯表達(dá)式。若其值為.T.(真),則返回<表達(dá)式1>的值,否則返回<表達(dá)式2>的值。②函數(shù)的返回值類(lèi)型可以是字符型、數(shù)值型、貨幣型、日期型或日期時(shí)間型等,取決于<表達(dá)式1>或<表達(dá)式2>的類(lèi)型?!纠縳=5y=7z=IIF(x>y,x-y,y-x)?z&&顯示結(jié)果為22.宏替換函數(shù)【格式】&<字符型存變量>\[.\]【功能】替換出字符型變量的內(nèi)容,即&的值是變量中的字符串。【說(shuō)明】①&的作用是將字符型內(nèi)存變量(包括數(shù)組元素)的內(nèi)容替換出來(lái),它的返回值的類(lèi)型與字符型內(nèi)存變量的值去掉字符定界符后的值的類(lèi)型一致,可以是各種數(shù)據(jù)類(lèi)型。②若宏替換函數(shù)與其后的字符無(wú)明確分界,則要用“.”作函數(shù)結(jié)束標(biāo)記,并且宏替換可以嵌套使用。③宏替換函數(shù)對(duì)實(shí)現(xiàn)程序的自動(dòng)生成和自動(dòng)變換非常有用。【例】cName=李小明XM=cName?&XM+你好!&&相當(dāng)于cName+你好!c_nVar=254?&c_nVar+6&&相當(dāng)于254+6cVar=Fox?Visual&cVar.Pro&&結(jié)果顯示為字符串“VisualFoxPro”3.返回當(dāng)前默認(rèn)目錄函數(shù)CURDIR()【格式】CURDIR()【功能】返回當(dāng)前系統(tǒng)默認(rèn)目錄,返回值類(lèi)型為字符型?!纠縋ath=CURDIR()?Path4.搜索指定文件函數(shù)LOCFILE()【格式】LOCFILE(<文件名>\[,<擴(kuò)展名>\])【功能】查找指定的文件,返回文件所在的目錄?!纠縞FileName=LOCFILE(Fox,bmp)?cFileName5.信息顯示函數(shù)MESSAGEBOX()若希望程序運(yùn)行過(guò)程中,按Windows對(duì)話框的形式顯示一些相關(guān)信息,如提示信息、錯(cuò)誤信息等,則可使用系統(tǒng)提供的MESSAGEBOX函數(shù)?!靖袷健縈ESSAGEBOX(<對(duì)話框提示文本>\[,<對(duì)話框類(lèi)型>\]\[,<對(duì)話框標(biāo)題>\])【功能】暫停程序的執(zhí)行,彈出Windows提示窗口,等待用戶做出選擇,返回值為數(shù)字。【說(shuō)明】①<對(duì)話框提示文本>指定對(duì)話框中輸出的文本信息,而<對(duì)話框標(biāo)題>指定了對(duì)話框窗口標(biāo)題欄的標(biāo)題文字。②<對(duì)話框類(lèi)型>有多種選擇,常用類(lèi)型值來(lái)指定,表3-7給出了不同對(duì)話類(lèi)型值的含義。【例】下列兩個(gè)MESSAGEBOX函數(shù)執(zhí)行結(jié)果如圖3-1和圖3-2所示。圖3-1圖3-2nMessage=MESSAGEBOX(“單擊“確定”繼續(xù)!”,0,“提示信息”)?nMessage&&打開(kāi)對(duì)話框時(shí),默認(rèn)按鈕為第1個(gè)nMessage=MESSAGEBOX(“文檔已被更改,是否保存!”,3+16+256,“警告!”)?nMessage&&打開(kāi)對(duì)話框時(shí),默認(rèn)按鈕為第2個(gè)注意:執(zhí)行第2個(gè)MESSAGEBOX函數(shù)所出現(xiàn)的對(duì)話框中有3個(gè)按鈕,單擊“是”按鈕返回6,單擊“否”按鈕返回7,單擊“取消”按鈕返回2。6.空值測(cè)試函數(shù)EMPTY()【格式】EMPTY(<表達(dá)式>)【功能】測(cè)試<表達(dá)式>的值是否為空,返回值為邏輯型值真.T.或假.F.。【說(shuō)明】表達(dá)式的數(shù)據(jù)類(lèi)型可以是字符、數(shù)值、日期或者邏輯型數(shù)據(jù);各種類(lèi)型數(shù)據(jù)當(dāng)出現(xiàn)表3-8的情況時(shí),該函數(shù)返回.T.,否則都為假.F.?!纠?EMPTY(0)&&顯示結(jié)果為:.T.?EMPTY(1)&&顯示結(jié)果為:.F.?EMPTY(“”)&&顯示結(jié)果為:.T.?EMPTY({/})&&顯示結(jié)果為:.T.Visual0FoxPro6.0系統(tǒng)提供了幾百個(gè)函數(shù),前面只介紹了進(jìn)行數(shù)據(jù)處理時(shí)最常用的幾個(gè),另外一些與數(shù)據(jù)庫(kù)操作有關(guān)的常用函數(shù)放在后面相應(yīng)的章節(jié)中介紹。練習(xí)三見(jiàn)書(shū)第4章結(jié)構(gòu)化程序設(shè)計(jì)4.1VisualFoxPro程序的建立與運(yùn)行4.1.1VisualFoxPro程序

利用VisualFoxPro對(duì)數(shù)據(jù)進(jìn)行處理時(shí),許多任務(wù)單靠執(zhí)行一兩條命令難以完成,往往需要執(zhí)行一組命令才能完成。4.1.2建立程序文件1.命令方式創(chuàng)建程序文件

【格式】MODIFYCOMMAND\[<程序文件名>\]【功能】打開(kāi)VisualFoxPro文本編輯器窗口,輸入程序代碼。【說(shuō)明】①運(yùn)行該命令時(shí),系統(tǒng)先在磁盤(pán)上搜索是否已有該文件,若文件尚未建立,則由該命令自動(dòng)創(chuàng)建一個(gè)新文件,若該文件已經(jīng)存在,則打開(kāi)該文件供用戶編輯修改。②如果命令中沒(méi)有給出<程序文件名>,系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)新程序文件。系統(tǒng)默認(rèn)的程序文件名為程序1.prg、程序2.prg……,用戶可以在關(guān)閉編輯窗口或執(zhí)行保存程序文件操作時(shí)指定文件的存放位置和文件名。③<程序文件名>中可以只輸入文件主名。2.菜單方式創(chuàng)建程序文件利用VisualFoxPro系統(tǒng)窗口的菜單同樣可以創(chuàng)建新的程序文件。方法是:執(zhí)行“文件”菜單下的“新建”命令,在“新建”對(duì)話框中選擇文件類(lèi)型為“程序”,然后單擊“新建文件”按鈕。無(wú)論采用哪種方式創(chuàng)建新的程序文件,均會(huì)打開(kāi)程序編輯窗口,如圖4-1所示,直接在窗口中輸入、修改程序代碼。

圖4-1程序編輯窗口在程序編輯器窗口中,無(wú)論是修改或新建程序文件都應(yīng)注意:一行只能寫(xiě)一條命令,并用回車(chē)鍵結(jié)束。一條命令可分幾行書(shū)寫(xiě),但在前一行的結(jié)尾必須用“;”續(xù)行標(biāo)記,表示一條命令未完,轉(zhuǎn)入下一行。4.1.3保存程序文件

程序編輯窗口中保存文件有兩種方法:(1)執(zhí)行菜單“文件”/“保存”命令。(2)按下組合健“Ctrl+W”。如果創(chuàng)建的新程序還沒(méi)有專(zhuān)門(mén)指定程序文件名,系統(tǒng)會(huì)彈出“另存為”對(duì)話框,如圖4-2所示。圖4-2“另存為”對(duì)話框4.1.4運(yùn)行程序文件

1.邊編譯邊執(zhí)行指定VisualFoxPro源程序按邊編譯邊執(zhí)行有多種方法:(1)執(zhí)行系統(tǒng)菜單“程序”中的“運(yùn)行”命令,在隨后彈出的對(duì)話框中選取要運(yùn)行的程序文件,單擊“運(yùn)行”按鈕。(2)若程序文件正處于打開(kāi)狀態(tài),即在程序編輯窗口中,可以直接單擊常用工具欄上的“運(yùn)行”按鈕。(3)若在命令窗口或程序中,按DO<程序文件名>的格式調(diào)用程序文件并執(zhí)行。程序執(zhí)行過(guò)程中如果出現(xiàn)錯(cuò)誤,系統(tǒng)會(huì)給出程序錯(cuò)誤提示窗口,并提示錯(cuò)誤信息,如圖4-3所示。圖4-3程序錯(cuò)誤提示窗口2.先編譯后執(zhí)行

源程序文件編譯的方法是:執(zhí)行“程序”/“編譯”菜單命令。如果程序編輯窗口中打開(kāi)了一個(gè)程序,系統(tǒng)自動(dòng)編譯該程序,否則系統(tǒng)彈出“編譯”對(duì)話框,如圖4-4所示,選擇需要編譯的程序文件,單擊“編譯”按鈕進(jìn)行編譯。圖4-4“編譯”對(duì)話框在編譯過(guò)程中,如果出現(xiàn)錯(cuò)誤,同樣系統(tǒng)會(huì)給出錯(cuò)誤提示窗口,并提示錯(cuò)誤信息。單擊“取消”按鈕,返回到程序編輯窗口,修改出現(xiàn)錯(cuò)誤的地方,存盤(pán)后再編譯修改過(guò)的程序,直到?jīng)]有錯(cuò)誤為止,這時(shí)系統(tǒng)會(huì)自動(dòng)生成擴(kuò)展名為.FXP的文件。

程序設(shè)計(jì)的一些常用命令4.24.2.1常用的基本語(yǔ)句

1.注釋語(yǔ)句編寫(xiě)程序的過(guò)程中,在程序的適當(dāng)位置上添加上相應(yīng)的注釋語(yǔ)句是一種良好的習(xí)慣,不僅有利于自己,而且也有利于程序的交流。注釋語(yǔ)句只起注釋作用,程序運(yùn)行的時(shí)候,被忽略。變量只是存放數(shù)據(jù)的容器,必須往其中存放數(shù)據(jù)才有意義,這稱之為賦值。2.賦值語(yǔ)句3.清屏命令

【格式】CLEAR【功能】清除當(dāng)前系統(tǒng)主窗口中的所有信息,但不清除內(nèi)存變量。4.SETTALKON|OFF命令

【格式】SETTALKON|OFF【功能】打開(kāi)/關(guān)閉返回相關(guān)命令執(zhí)行狀態(tài)信息的提示?!菊f(shuō)明】①許多數(shù)據(jù)處理命令(如AVERAGE、SUM、SELECT等)在執(zhí)行時(shí)都會(huì)返回一些有關(guān)執(zhí)行狀態(tài)的信息并顯示在系統(tǒng)窗口、狀態(tài)欄等處。SETTALK命令用于設(shè)置是(ON)、否(OFF)顯示這些信息,默認(rèn)為ON。②通常在程序頭部用SETTALKOFF關(guān)閉狀態(tài)信息的顯示,以保持系統(tǒng)窗口的整潔,而在程序尾部用SETTALKON設(shè)置狀態(tài)信息的顯示。5.RETURN語(yǔ)句【格式】RETURN【功能】結(jié)束當(dāng)前程序的執(zhí)行,返回到命令窗口。通常作為程序中的最后一條語(yǔ)句。4.2.2輸入和輸出命令

1.輸入一個(gè)字符命令(WAIT)【格式】WAIT\[<字符表達(dá)式>\]\[TO<內(nèi)存變量名>\]\[WINDOW\[AT<行>,<列>\]\]\[NOWAIT\]\[TIMEOUT<數(shù)值表達(dá)式>\]【功能】暫停程序執(zhí)行,在屏幕上給出提示信息,并等待用戶輸入一個(gè)字符給<內(nèi)存變量名>中指定的變量?!菊f(shuō)明】①<字符表達(dá)式>是程序暫停時(shí)在屏幕上顯示的提示信息,缺省為“按任意鍵繼續(xù)……”。②若選TO短語(yǔ),內(nèi)存變量只能接收由鍵盤(pán)輸入的單個(gè)字符,即使用戶按了回車(chē)鍵,命令也認(rèn)為接收到一個(gè)空字符(長(zhǎng)度為0,ASCII碼值為0)。③提示信息一般顯示在VisualFoxPro主窗口或當(dāng)前用戶自定義的窗口中。如指定了WINDOW短語(yǔ),則將會(huì)出現(xiàn)一個(gè)提示窗口,用以顯示提示信息;而AT短語(yǔ)選項(xiàng)指定提示窗口在屏幕上的位置,若無(wú)則系統(tǒng)默認(rèn)窗口在系統(tǒng)主窗口的右上角。④選NOWAIT后,系統(tǒng)將不等待用戶按鍵,直接往下執(zhí)行。選TIMEOUT短語(yǔ)后,<數(shù)值表達(dá)式>給出以秒為單位的時(shí)間,若在此時(shí)間內(nèi)用戶不鍵入任何數(shù)據(jù),WAIT語(yǔ)句將自動(dòng)終止,繼續(xù)往下執(zhí)行。圖4-5“WAIT”使用示例【例】下述代碼將顯示如圖4-5所示的提示信息:WAIT“注意:現(xiàn)在暫停”+CHR(13)+CHR(10)+“程序的執(zhí)行10秒鐘”;WINDOWSAT10,10TIMEOUT102.輸入字符串命令(ACCEPT)

【格式】ACCEPT\[<字符表達(dá)式>\]TO<內(nèi)存變量名>【功能】暫停程序執(zhí)行,在屏幕上給出提示信息,并等待用戶從鍵盤(pán)上輸入一個(gè)字符串常量給內(nèi)存變量?!菊f(shuō)明】①<字符表達(dá)式>是用戶指定的在屏幕上顯示的提示信息。②從鍵盤(pán)上輸入的字符串不得用定界符括起來(lái),否則定界符本身也被當(dāng)作字符串的一部分而輸入到內(nèi)存變量中?!纠緼CCEPT“請(qǐng)輸入字符數(shù)據(jù):”TOCH1?CH13.輸入其他類(lèi)型數(shù)據(jù)命令(INPUT)

【格式】INPUT\[<字符表達(dá)式>\]TO<內(nèi)存變量名>【功能】暫停程序的執(zhí)行,在屏幕上顯示提示信息,并等待用戶輸入數(shù)據(jù)?!菊f(shuō)明】①<字符表達(dá)式>是屏幕顯示的提示信息。②可以通過(guò)鍵盤(pán)輸入數(shù)值型、字符型、日期型、邏輯型、貨幣型等數(shù)據(jù)給內(nèi)存變量。③若輸入字符型數(shù)據(jù),一定要加定界符。4.屏幕格式化輸入輸出命令【格式】@<行,列>\[SAY<表達(dá)式1>\]\[GET<變量名>\]\[DEFAULT<表達(dá)式2>\]\[VALID<關(guān)系/邏輯表達(dá)式>\]\[RANGE<下限>,<上限>\]【功能】用于在屏幕的指定位置上輸出、輸入和編輯數(shù)據(jù)?!菊f(shuō)明】①若選SAY而不GET短語(yǔ),則在規(guī)定的坐標(biāo)處輸出<表達(dá)式1>的值;若選GET短語(yǔ),則<表達(dá)式1>一般是字符串,作為提示信息。當(dāng)執(zhí)行其后的READ命令后,可以激活GET后的變量,并進(jìn)行編輯或重新輸入。②<變量名>通常是已存在的內(nèi)存變量或字段變量。對(duì)于字段變量,必須打開(kāi)相應(yīng)的數(shù)據(jù)表。若變量事先不存在,需要有<表達(dá)式2>定義變量的初值,初值的大小和類(lèi)型直接影響以后的編輯與輸入。③VALID<關(guān)系/邏輯表達(dá)式>用來(lái)控制有效數(shù)據(jù)的輸入。除非用戶按Esc鍵退出字段的編輯狀態(tài),否則當(dāng)退出編輯區(qū)時(shí),系統(tǒng)判斷<關(guān)系/邏輯表達(dá)式>的值,若值為.T.時(shí),系統(tǒng)才認(rèn)為輸入數(shù)據(jù)正確,否則系統(tǒng)提示“無(wú)效輸入”,直到輸入正確數(shù)據(jù)為止。④RANGE短語(yǔ)用來(lái)指定對(duì)輸入數(shù)據(jù)上、下限的限制。若輸入數(shù)據(jù)不在范圍之內(nèi),系統(tǒng)將給出警告框并提示應(yīng)輸入的數(shù)【格式一】?\[<表達(dá)式1>\[,<表達(dá)式2>\]…\]【格式二】??<表達(dá)式1>\[,<表達(dá)式2>\]…【功能】計(jì)算各表達(dá)式的值,并顯示結(jié)果?!菊f(shuō)明】①表達(dá)式可以是常量、變量、函數(shù)或一般表達(dá)式。N型值的整數(shù)部分占10位,超出10位時(shí)按需分配,小數(shù)部分按需分配。C型值占用位數(shù)與串長(zhǎng)相同,其他各類(lèi)數(shù)據(jù)按定義的位數(shù)輸出。②“?”和“??”的區(qū)別是:“?”后可以沒(méi)有表達(dá)式,表示換行,當(dāng)有<表達(dá)式>時(shí),則換行后輸出表達(dá)式的值?!??”將不換行顯示表達(dá)式的值。4.2.3程序的基本控制結(jié)構(gòu)

1.順序結(jié)構(gòu)

順序結(jié)構(gòu)是最簡(jiǎn)單的一種基本結(jié)構(gòu),按照語(yǔ)句在源程序中書(shū)寫(xiě)的前后順序依次執(zhí)行,如圖4-6所示。圖4-6順序結(jié)構(gòu)2.分支結(jié)構(gòu)分支結(jié)構(gòu)是根據(jù)指定的條件表達(dá)式的取值來(lái)選擇執(zhí)行方向的。由圖4-7可以看出,如果條件成立就執(zhí)行語(yǔ)句序列A,否則,執(zhí)行語(yǔ)句序列B。圖4-7分支結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)

如圖4-8所示,當(dāng)條件成立時(shí),循環(huán)結(jié)構(gòu)會(huì)重復(fù)執(zhí)行語(yǔ)句序列A直到條件不成立為止。圖4-8循環(huán)結(jié)構(gòu)

分支結(jié)構(gòu)4.34.3.1IFELSEENDIF結(jié)構(gòu)IF語(yǔ)句比較適合于組織兩分支的選擇結(jié)構(gòu),即根據(jù)條件從兩個(gè)語(yǔ)句序列中選擇執(zhí)行其中的一個(gè)語(yǔ)句序列。語(yǔ)句格式:【格式】IF<條件><語(yǔ)句序列1>\[ELSE<語(yǔ)句序列2>\]ENDIF【功能】根據(jù)<條件>的不同值,使程序有條件地執(zhí)行相應(yīng)的語(yǔ)句序列?!菊f(shuō)明】①I(mǎi)F、ELSE、ENDIF必須各占一行。每一個(gè)IF都必須有一個(gè)ENDIF與其對(duì)應(yīng),即IF和ENDIF必須成對(duì)出現(xiàn)。②<條件>必須是關(guān)系或邏輯表達(dá)式,根據(jù)<條件>的邏輯值,進(jìn)行判斷。如果<條件>的邏輯值為.T.,就執(zhí)行<語(yǔ)句序列1>,完成后轉(zhuǎn)到ENDIF之后的語(yǔ)句。如果<條件>的邏輯值為.F.,當(dāng)ELSE子句存在時(shí),執(zhí)行<語(yǔ)句序列2>,完成后轉(zhuǎn)去執(zhí)行ENDIF之后的命令;當(dāng)ELSE子句不存在時(shí),則不執(zhí)行IF和ENDIF之間的所有命令,而直接轉(zhuǎn)到ENDIF之后的語(yǔ)句,形成了單分支結(jié)構(gòu)。③<語(yǔ)句序列>是由一個(gè)或多個(gè)語(yǔ)句組成,其中也可以再包含若干個(gè)IF語(yǔ)句,但每一個(gè)IF語(yǔ)句都必須有一個(gè)ENDIF與其對(duì)應(yīng)。4.3.2IF語(yǔ)句的嵌套

IF語(yǔ)句的嵌套要注意IF、ELSE和ENDIF的匹配。為了提高程序的可閱讀性,輸入源程序代碼時(shí),最好采用縮進(jìn)的書(shū)寫(xiě)格式。4.3.3DOCASEENDCASE結(jié)構(gòu)

在一個(gè)DOCASE結(jié)構(gòu)中,最多只能執(zhí)行一個(gè)CASE下的語(yǔ)句組。如果所有條件都不滿足,在沒(méi)有OTHERWISE的情況下,不執(zhí)行任何語(yǔ)句組,轉(zhuǎn)去執(zhí)行ENDCASE后面的語(yǔ)句;如果有OTHERWISE選項(xiàng),則執(zhí)行OTHERWISE下面的語(yǔ)句組,然后再執(zhí)行ENDCASE后面的語(yǔ)句。多分支的控制流程如圖4-9所示。圖4-9多分支的控制流程循環(huán)結(jié)構(gòu)4.44.4.1DOWHILE…ENDDO(當(dāng)型)循環(huán)

當(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ǔ)句。4.4.2FOR…ENDFOR(步長(zhǎng)型)循環(huán)

與當(dāng)型循環(huán)相比,步長(zhǎng)型循環(huán)特別適于構(gòu)造已知循環(huán)次數(shù)的循環(huán)。4.4.3SCAN…ENDSCAN(指針型)循環(huán)指針型循環(huán)是指根據(jù)當(dāng)前表中記錄指針的位置,決定是否執(zhí)行循環(huán)體,語(yǔ)句格式如下:【格式】SCAN\[<范圍>\]\[FOR|WHILE<條件>\]\[語(yǔ)句序列\(zhòng)]ENDSCAN【功能】在當(dāng)前表中移動(dòng)記錄指針,如果遇到符合條件的記錄就執(zhí)行語(yǔ)句序列?!菊f(shuō)明】①<范圍>選項(xiàng)用于指定記錄的查找范圍,即只查找指定<范圍>內(nèi)的記錄。<范圍>子句有:ALL、NEXTn、RECORDn和REST。若省略<范圍>,則默認(rèn)為ALL。②FOR|WHILE<條件>指定只有符合條件的記錄執(zhí)行語(yǔ)句序列,利用該子句可以過(guò)濾掉用戶不需要的記錄。③SCANENDSCAN必須成對(duì)使用,語(yǔ)句序列中可以嵌套任何控制結(jié)構(gòu)的命令語(yǔ)句。過(guò)程和自定義函數(shù)4.54.5.1過(guò)程

過(guò)程是完成某一功能的一段程序,可供主程序調(diào)用。這樣,我們可以將一個(gè)復(fù)雜的任務(wù)分解成若干個(gè)小問(wèn)題,分別寫(xiě)成過(guò)程。過(guò)程既可以放在主程序的后面,也可以單獨(dú)存放在一個(gè)文件中。1.過(guò)程的編寫(xiě)2.過(guò)程的調(diào)用過(guò)程只是一個(gè)程序片段,必須通過(guò)過(guò)程調(diào)用的方式來(lái)執(zhí)行它。在調(diào)用時(shí),可能需要通過(guò)參數(shù)向過(guò)程傳遞一些數(shù)據(jù),這些可以傳遞數(shù)據(jù)的參數(shù)就是實(shí)際參數(shù),簡(jiǎn)稱實(shí)參。4.5.2用戶自定義函數(shù)

1.自定義函數(shù)的編寫(xiě)VisualFoxPro中編寫(xiě)自定義函數(shù)的格式如下所示:【格式一】FUNCTION<函數(shù)名>\[(<形式參數(shù)列表>)\]<函數(shù)體>\[RETURN<表達(dá)式>\]ENDFUNC【格式二】FUNCTION<函數(shù)名>PARAMETERS<形式參數(shù)列表><函數(shù)體>\[RETURN<表達(dá)式>\]ENDFUNC【功能】創(chuàng)建一個(gè)用戶自定義函數(shù)?!菊f(shuō)明】①<形式參數(shù)列表>用來(lái)接收調(diào)用它的實(shí)際參數(shù)。當(dāng)有多個(gè)參數(shù)時(shí),要用逗號(hào)將各個(gè)參數(shù)隔開(kāi)。②格式一使用函數(shù)名后面的形參列表來(lái)接收實(shí)際參數(shù)的值,而格式二使用PARAMETERS后面的形參列表來(lái)接收實(shí)參的值。如果使用格式二,PARAMETERS語(yǔ)句必須是自定義函數(shù)內(nèi)部的第一條語(yǔ)句。③函數(shù)往往需要返回一個(gè)值,其返回值由RETURN命令后的<表達(dá)式>指定。在缺省情況下,函數(shù)的返回值是.T.。2.自定義函數(shù)的調(diào)用和系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)的調(diào)用方法一樣,用戶自定義函數(shù)的調(diào)用格式為:【格式】函數(shù)名\[(<實(shí)參列表>)\]【說(shuō)明】<實(shí)參列表>為調(diào)用的參數(shù)。當(dāng)有多個(gè)參數(shù)時(shí),各參數(shù)之間要用“,”隔開(kāi);當(dāng)沒(méi)有參數(shù)時(shí),也必須加上小括號(hào)。4.5.3過(guò)程文件

1.建立過(guò)程文件

與程序文件一樣,過(guò)程文件也是VisualFoxPro源程序文件,其建立方法和一般的程序文件一樣,可以用MODIFYCOMMAND命令建立,擴(kuò)展名是“.PRG”。2.打開(kāi)過(guò)程文件

若將過(guò)程或函數(shù)放在一個(gè)單獨(dú)的過(guò)程文件中,使用它們之前,必須先打開(kāi)這個(gè)過(guò)程文件,可以在調(diào)用程序中使用SETPROCEDURETO命令將其打開(kāi)。3.調(diào)用過(guò)程文件中的過(guò)程打開(kāi)過(guò)程文件后,可以用DO<過(guò)程名>來(lái)調(diào)用其中的過(guò)程。4.關(guān)閉過(guò)程文件

【格式1】SETPROCEDURETO【格式2】RELEASEPROCEDURE<文件名列表>【說(shuō)明】①格式1用于關(guān)閉所有打開(kāi)的過(guò)程文件。②格式2中的參數(shù)<文件名列表>指定要關(guān)閉的過(guò)程文件名。

變量的作用域4.64.6.1局部變量

IsualFoxPro系統(tǒng)默認(rèn)凡在程序中未用PUBLIC、PRIVATE、LOCAL等說(shuō)明的變量都是局部變量。4.6.2局域變量

用LOCAL定義說(shuō)明的變量稱為局域變量,只能在創(chuàng)建它們的程序模塊中引用和修改,不能被其它程序模塊所使用。4.6.3私有變量

程序模塊中用PRIVATE說(shuō)明的變量稱為私有變量。4.6.4全局變量

全局變量在整個(gè)程序中(包括調(diào)用的子程序)都有效。任何程序都可以改變它的值,在子程序中定義的全局變量在主程序中也有效。練習(xí)四見(jiàn)書(shū)第5章數(shù)據(jù)庫(kù)的設(shè)計(jì)與操作基本概念5.1從VisualFoxPro6.0開(kāi)始,引入了數(shù)據(jù)庫(kù)的概念,數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的核心,它把相互關(guān)聯(lián)的數(shù)據(jù)庫(kù)表和相關(guān)的數(shù)據(jù)庫(kù)對(duì)象組織到一起進(jìn)行管理,包括表、視圖、連接、存儲(chǔ)過(guò)程的容器和用于組織包含數(shù)據(jù)信息的多個(gè)表,并允許在這些相關(guān)聯(lián)的表之間建立永久關(guān)系。設(shè)計(jì)數(shù)據(jù)庫(kù)的一般步驟5.2數(shù)據(jù)庫(kù)設(shè)計(jì)的一般步驟是:(1)確定數(shù)據(jù)庫(kù)要實(shí)現(xiàn)的任務(wù),確定數(shù)據(jù)庫(kù)中需要存儲(chǔ)哪些信息。(2)創(chuàng)建需要的表,將信息分解為不同的相關(guān)主題。(3)設(shè)計(jì)表中需要的字段,即確定表的結(jié)構(gòu)。(4)建立表之間的關(guān)系,確定各表之間的數(shù)據(jù)應(yīng)該如何進(jìn)行連接。(5)修改和優(yōu)化數(shù)據(jù)庫(kù),發(fā)現(xiàn)問(wèn)題然后進(jìn)行修改。

數(shù)據(jù)庫(kù)的建立及操作5.35.3.1數(shù)據(jù)庫(kù)設(shè)計(jì)器

VisualFoxPro為了實(shí)現(xiàn)數(shù)據(jù)庫(kù)的操作專(zhuān)門(mén)提供了一個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)器。在數(shù)據(jù)庫(kù)設(shè)計(jì)器中,可以非常方便地創(chuàng)建、添加和刪除表,顯示數(shù)據(jù)庫(kù)中包含的全部表、視圖,建立表間的關(guān)聯(lián)關(guān)系?!皵?shù)據(jù)庫(kù)設(shè)計(jì)器”窗口如圖5-1所示。圖5-1“數(shù)據(jù)庫(kù)設(shè)計(jì)器”窗口在“數(shù)據(jù)庫(kù)設(shè)計(jì)器”窗口中,若用鼠標(biāo)右擊窗口的空白,將會(huì)出現(xiàn)一個(gè)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的快捷菜單,如圖5-2所示。圖5-2數(shù)據(jù)庫(kù)快捷菜單若在數(shù)據(jù)表對(duì)象上單擊鼠標(biāo)右鍵,則彈出如圖5-3所示的對(duì)選定表進(jìn)行操作的快捷菜單。圖5-3數(shù)據(jù)庫(kù)操作快捷菜單5.3.2建立數(shù)據(jù)庫(kù)文件

1.菜單方式

執(zhí)行系統(tǒng)“文件”菜單中的“新建”命令,從彈出的“新建”對(duì)話框中選擇“數(shù)據(jù)庫(kù)”選項(xiàng),然后單擊新建文件按鈕,進(jìn)入“創(chuàng)建”對(duì)話框窗口,在“創(chuàng)建”對(duì)話框中指定新建的數(shù)據(jù)庫(kù)文件名以及保存位置,最后單擊“保存”按鈕,即可出現(xiàn)“數(shù)據(jù)庫(kù)設(shè)計(jì)器”窗口,如圖5-4所示。圖5-4“數(shù)據(jù)庫(kù)設(shè)計(jì)器”窗口2.命令方式在VisualFoxPro6.0中,我們可以在命令窗口中,很容易地用VisualFoxPro6.0中的創(chuàng)建新數(shù)據(jù)庫(kù)命令CREATEDATABASE進(jìn)行操作:【格式】CREATEDATABASE\[<數(shù)據(jù)庫(kù)文件名>|?\]【功能】創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)文件?!菊f(shuō)明】①命令中若未指定數(shù)據(jù)庫(kù)文件名,或使用了可選項(xiàng)“?”,將打開(kāi)“創(chuàng)建”對(duì)話框,要求輸入一個(gè)數(shù)據(jù)庫(kù)文件名并確定保存位置。②利用命令建立數(shù)據(jù)庫(kù)文件并不會(huì)自動(dòng)打開(kāi)數(shù)據(jù)庫(kù)設(shè)計(jì)器,還需要使用MODIFYDATABASE命令或執(zhí)行系統(tǒng)“顯示”菜單中的“數(shù)據(jù)庫(kù)設(shè)計(jì)器”命令打開(kāi)數(shù)據(jù)庫(kù)設(shè)計(jì)器。5.3.3打開(kāi)與關(guān)閉數(shù)據(jù)庫(kù)1.打開(kāi)數(shù)據(jù)庫(kù)

(1)菜單操作。(2)命令方式。2.關(guān)閉數(shù)據(jù)庫(kù)

若針對(duì)數(shù)據(jù)庫(kù)的所有操作結(jié)束后,應(yīng)關(guān)閉數(shù)據(jù)庫(kù)文件。關(guān)閉數(shù)據(jù)庫(kù)的方法如下:【格式1】CLOSEDATABASE【功能】關(guān)閉當(dāng)前的數(shù)據(jù)庫(kù)文件及其表?!靖袷?】CLOSEALL【功能】關(guān)閉所有打開(kāi)的數(shù)據(jù)庫(kù)文件及其表、自由表以及各種類(lèi)型的文件。5.3.4添加和移去數(shù)據(jù)表

1.添加表首先在“數(shù)據(jù)庫(kù)設(shè)計(jì)器”窗口的空白地方單擊鼠標(biāo)右鍵,從彈出的快捷菜單中選擇“添加表”命令,然后從彈出的“打開(kāi)”對(duì)話框中選擇要添加到當(dāng)前數(shù)據(jù)庫(kù)的自由表,最后單擊“確定”按鈕。2.移去表

首先在“數(shù)據(jù)庫(kù)設(shè)計(jì)器”窗口中單擊選擇需要移去的數(shù)據(jù)庫(kù)表,執(zhí)行系統(tǒng)菜單“數(shù)據(jù)庫(kù)”中的“移去”命令,然后在彈出的提示

溫馨提示

  • 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)論