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