摘要:結(jié)合自身教學(xué)實(shí)踐,對VFP學(xué)習(xí)過程的所遇到的幾個學(xué)習(xí)難點(diǎn)進(jìn)行分析。以便能更好地提高學(xué)生學(xué)習(xí)語言程序設(shè)計(jì)課程的能力;也可為從事計(jì)算機(jī)技術(shù)基礎(chǔ)教學(xué)與研究的教師提供參考。
關(guān)鍵詞:Visual FoxPro;教學(xué);難點(diǎn)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2009)33-9479-03
On the Analysis of Learning Difficulties of Visual FoxPro
ZHENG Zong-liang1, CHENG Xin-wen2
(1.Computer and Information Technology Institute of Liaoning Normal University, Dalian 116029, China; 2.Liaoning College of Foreign Trade Economic Relations, Dalian 116052, China)
Abstract: On the basis of teaching practice of the author, this paper focuses upon the detailed analysis of some learning difficulties of Visual FoxPro so as to improve the students' capacity for learning program design and provide a reference for the teachers who are engaged in the teaching practice and studying of computer science.
Key words: visual foxPro; teaching practice; learning difficulties
對于新時代的大學(xué)生來說,掌握一門計(jì)算機(jī)程序設(shè)計(jì)語言是必備的一項(xiàng)基本技能。目前在各高校的非計(jì)算機(jī)專業(yè)都普遍開設(shè)了計(jì)算程序設(shè)計(jì)語言作為一門必修的公共課程。我院文科”高級語言程序設(shè)計(jì)”課程是以VFP語言作為指定語言的。但在VFP課程教學(xué)中,許多學(xué)生都認(rèn)為它涉及的概念多較復(fù)雜、規(guī)則繁多、使用靈活、容易出錯,且程序設(shè)計(jì)語言課程邏輯性又很強(qiáng),學(xué)生不能很好地理解算法,編寫程序也很困難,教師教學(xué)和學(xué)生學(xué)習(xí)都感到困難,并在不同程度上產(chǎn)生畏難心理。因此如何解決VFP課程在學(xué)習(xí)過程中所設(shè)及到的知識難點(diǎn),進(jìn)一步提高學(xué)習(xí)效果是非常必要的。
1 VFP知識幾個難點(diǎn)
1.1 字符串比較
1.1.1 VFP中字符型數(shù)據(jù)進(jìn)行比較
系統(tǒng)對字符串中的字符按從左到右的序?qū)?yīng)進(jìn)行比較,一旦發(fā)現(xiàn)兩個對應(yīng)字不同,則按它們的排序序列比較出兩個符串的大小。在VFP中字符的排序序列有三種:1) machine(機(jī)器):西文字符按ASC值排序,中文的一級漢字按拼音次序排。2) PinYin(拼音):中文按拼音次序序,西文字符大寫字母大于小寫字母。3) Stroke(筆畫):中、西文都按筆畫多少排序。在中文VFP中,字符默認(rèn)的排序序列為PinYin(拼音)。而其它許多高級語言按ASCII碼來比較的。故在VF中默認(rèn)情況下大寫字母大于小小字母。“A”是大于“a”字符,要改變字符排序序列,可選用工具菜單/選項(xiàng)命令進(jìn)行設(shè)置。
1.1.2 字符串精確比較
字符比較結(jié)果還受精確比較開關(guān)影響,可用SET EXCACT ON/OFF命令來打開或關(guān)閉。在默認(rèn)情況下,比較兩個字符串是否相等,VFP采用的不精確比較。當(dāng)在不精確比較狀態(tài)時,只要兩個字符串滿足下面兩個條件結(jié)果就相等:一是兩個字符串最左邊的字符相同;二是第一個字符串長度大于或等于第二個的長度。根據(jù)規(guī)則可知:?\"鄭老師\"=\"鄭老\",結(jié)果為.T.;而?\"鄭老\"=\"鄭老師\",結(jié)果為.F.。同時要注意特別情況:空串“ ”包含于任何字符串中,且長度為0,所以?\"ab\"=\" \"結(jié)果為.T.;?\" \"=\"ab\"結(jié)果為.F.。
1.1.3 字符串的模糊比較問題
字符串的模糊比較可用like()函數(shù)、$運(yùn)算符、AT()函數(shù)等方法來解決。如姓名中含有“小”可以寫成:“小”$姓名或AT(“小”,姓名)>0來實(shí)現(xiàn)。而LIKE函的格式LIKE(cExpression1, cExpression2),其中 cExpression1 中可以包含通配符*和?。問號 (?) 可與任何單個字符相匹配,星號(*) 可與任意數(shù)目的字符相匹配。只有在 cExpression1 與 cExpression2 中的字符逐個匹配的情況下,LIKE() 函數(shù)才返回“真”(.T.)。如?like(“鄭*”,姓名)是判斷是否姓鄭。但在SQL語句中的like運(yùn)算符不能用在一般命令的for條件中,而通配符變?yōu)開和%,判斷是否姓鄭可寫成:姓名 like “鄭%”。
1.2 變量的作用域問題
在VFP程序設(shè)計(jì)中,同一個變量名由于作用域不同變量有不同的作用域和生存期,因涉及的知識點(diǎn)比較多,使用的環(huán)境和場合也比較復(fù)雜,這對于初學(xué)者往往是一個不容易理解。的作用歸納起來,大致有三個方面:
1.2.1 變量的作用域
變量的作用域可用變LOCAL、PRIVATE、PUBUC命令強(qiáng)制規(guī)定作用域。LOCAL用于定義局部變量,局部變量只在本模塊中有效;當(dāng)建立它的模塊程序運(yùn)行結(jié)束時,局部變量自動釋放。全局變量和局部變量初值為邏輯假。局部變量要先建立后使用。PRIVATE用于定義私有變量,變量的作用域?yàn)楸灸K中以及下級模塊中有效; PUBUC用于定義全局變量,在本次程序運(yùn)行期間,變量在所有模塊中都有效。當(dāng)大范圍變量和小范圍變量同名時,在小范圍內(nèi),小范圍變量優(yōu)先。沒經(jīng)過申明的變量,約定為私有變量。下面的例子是來說明它們之間的關(guān)系。
Main.PRG
K1=10
K2=20
DO SuB
?K1,K2
RETURN
PRECEDUER SUB 過程sub
PRIV K1
K1=K2+10
K2=K1+10
?K1,K2
RETURN
在主程序中,k1,k2沒經(jīng)過說明,那么它是私有類型變量,在本模塊及下級模塊中有效,所以在子過程SUB中有效,但在SUB過程中重新顯示定義K1,那么相當(dāng)于定義了一個作用范圍更小的小范圍變量,它將屏蔽主程序中的K1的值,所以在SUB過程中輸出為:30,40;而回到主程序輸出為:10,40。
1.2.2 參數(shù)傳遞
考試中要求學(xué)生掌握的過程主要有Sub過程和Function過程。Sub過程不返回值,F(xiàn)unction過程必須由函數(shù)名返回一個值。在調(diào)用過程時,主調(diào)過程的實(shí)參以一定的形式傳遞給被調(diào)過程的形參,完成實(shí)參與形參的結(jié)合,然后執(zhí)行被調(diào)過程體。經(jīng)過被調(diào)過程的處理,又將所得結(jié)果返回給主調(diào)過程。在VFP中,參數(shù)的傳遞有傳值和傳址兩種形式。
1) 傳值方式
當(dāng)調(diào)用一個過程時,將實(shí)參的值復(fù)制給形參,實(shí)參與形參斷開聯(lián)系。過程調(diào)用結(jié)束時,形參占用的存儲單元被釋放,因此對形參的任何操作都不會影響到實(shí)參。傳值方式是“單向”的,形參的值不能返回給實(shí)參。
2) 傳地址方式
如果實(shí)參是常量或一般形式的表達(dá)式,系統(tǒng)會計(jì)算出實(shí)參的值,并把它們賦值給相應(yīng)的形參變量。這種情形稱為按值傳遞。如果實(shí)參是變量,那么傳遞的將不是變量的值,而是變量的地址。在模塊程序中對形參變量值的改變,同樣是對實(shí)參變量值的改變。這叫按引用傳遞。下面的例子是來說明它們之間的關(guān)系。
A=3
B=5
DO PP WITH(A), B
?A,B
RETURN
* PP.PRG
PARAMETER X,Y
Y=X*Y
X=X+5
RETURN
這個例子在主過程調(diào)用過程中的兩個實(shí)參(A)和B,由于B是簡單變量時,VFP在分配形參Y時和實(shí)參B共用內(nèi)存單元(傳地址),所以在子過程PP的變化將影響實(shí)參變量B,而形參X,由于實(shí)參不是簡單變量,在分配形參時另外分配內(nèi)存單元,所以A和X只是單向傳值,沒有關(guān)聯(lián),因此在主程序中輸出為3,15。
1.2.3 內(nèi)存變量和字段變量同名時
字段變量的類型是在建立表文件的結(jié)構(gòu)時確定的,一旦定義了字段變量的類型,那么賦值的數(shù)據(jù)類與變量類型一致,由于改變時不能用運(yùn)算\"=\"和store 語句直接賦值。內(nèi)存變量是用內(nèi)存單元存儲的變量,它的類型與之比較就有一定的隨意性,它只能保存最后一次更新的值。當(dāng)內(nèi)存變量和字段變量同名是,字段變量優(yōu)先。但用\"=\"和store 語句改變的變量例外,如下例子:
設(shè)職員表已在當(dāng)前工作區(qū)打開,當(dāng)前記錄的“姓名”字段值為“張三”;字段寬度為4,執(zhí)行如下命令:
姓名=姓名+\"你好\"
?姓名
結(jié)果:“張三”,并不是“張三你好”因?yàn)楫?dāng)存在字段變量“姓名”時,字段變量優(yōu)選,所以輸出的是字段變量“姓名”的值,而字段變量不能使用“=”來改變其值,所以,姓名=姓名+“你好”語句改變的是內(nèi)存變量“姓名”為字段變量姓名的值“張三\"+\"你好”,結(jié)果是“張三你好”,可用?m.姓名來輸出內(nèi)存變量的值。
2 結(jié)束語
VFP在學(xué)習(xí)過程中所遇到的難點(diǎn)不僅僅涉及到這些。本文的目的是通過對上述知識點(diǎn)難點(diǎn)的介紹,起到舉一反三的效果,從而提高同學(xué)們學(xué)習(xí)這門語言的信心,增強(qiáng)在學(xué)習(xí)過程中解決問題的方法。
參考文獻(xiàn):
[1] 匡松,劉容.余平.Visual FoxPro面向?qū)ο蟪绦蛟O(shè)計(jì)[M].成都:西南交通大學(xué)出版社,2006.
[2] 王瑛.數(shù)據(jù)庫管理系統(tǒng)VFP的教學(xué)探索[J].天水師范學(xué)院學(xué)報(bào),2005,(5).
[3] 魯俊生.VFP程序設(shè)計(jì)簡明教程[M].北京:電子科技大學(xué)出版社,2006.