版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第 1 章 數(shù)據(jù)與數(shù)據(jù)運算 一、數(shù)據(jù)類型 1.數(shù)值型(n):由數(shù)字、小數(shù)點和正負號組成。 (包括整數(shù)和實數(shù)) ,占 8 字節(jié)內(nèi)存,精度 16 位。例如數(shù)值型 常量:12、3.45、-6.78、5.878e12、1.6e-12 等。 2.字符型(c):每個字符占一個字節(jié),最長 255 個字符。 3.邏輯型(l):只有真、假兩個值(.t. 、.t.、y.、y 、.f.、.f.、.n.、.n.)占 1 字節(jié)。 4.日期型(d):占 8 個字節(jié),取值范圍:0001 年 1 月 1 日9999 年 12 月 31 日。日期的表示格式很多,可用 有關(guān)命令設置: a)set date to mdy/dmy/
2、ymd 該命令設置日期表示形式。 b)set century to on/off 表示日期時是否指明“世紀” 。 c)set strictdate to 0/1/2 是否采用嚴格日期格式對待輸入日期值。此設置命令取“1/2”值時,日 期需按照嚴格日期表示法yyyy-mm-dd的表示格式輸入,否則會彈出“出錯”對話框;取“2”值時 ctod() 、ctot()函數(shù)也采用嚴格日期格式轉(zhuǎn)換字符;若設為 0,則日期的輸入可按其它形式,但可能 被系統(tǒng)按不同日期解釋。 d)set mark to /; 該命令用于設置日期分隔符,若缺省設置值,則用默認“/”為分隔符。 5.日期時間型(t):占 8 個字節(jié),
3、如常量2001-03-22,11:30 p。日期的表示范圍同上, 時間從 00:00 :00am11:59:59pm,缺省日期為 1899 年 12 月 30 日,缺省時間為午夜零點。 6.貨幣型(y):占 8 個字節(jié),貨幣型常量以前置符號$打頭,保留小數(shù) 4 位。 7.對象型(o):windows 中的對象,如 vfp 主窗口對象為“_screen” 。 (以上 7 種數(shù)據(jù)類型可用于內(nèi)存變量和數(shù)組,前 6 種還可用于字段變量,但下列數(shù)據(jù)類型只能用于字段變量) 8.雙精度型(n):占 8 個字節(jié) 9.浮點型(n):占 8 個字節(jié) 10. 整數(shù)型(n):占 4 個字節(jié) 11. 通用型(g):占
4、4 個字節(jié),專門用來存儲 ole 對象,如電子表格、字處理文檔或圖片等由其它程序產(chǎn)生的 對象。 12. 備注型(m):占 4 個字節(jié),用于存放較多的文本信息,會產(chǎn)生與表同名的備注文件“*fpt” 。 13. 二進制字符型(c):使用方法與字符型同,只是直接以二進制形式存儲。 14. 二進制備注型(m):使用方法與備注型同,只是直接以二進制形式存儲。 二、常量與變量 1.常量(部分數(shù)據(jù)類型的常量說明): a)字符型常量必須用單引號、雙引號、或方括號括起來。如某種括符本身也是字符串內(nèi)容,則用另一種括符 括起該字串。 b)日期型常量必須用一對花括號包括。對于空值的日期,可用、/、-表示。 c)日期時
5、間型常量的空值表示成-,:,貨幣常量用$開頭。 d)符號常量的定義及取消:例:#define pi 3.1415926535 #undef pi 2.變量:在程序執(zhí)行過程中其值可變的數(shù)據(jù)項。實際上是用標識符命名的存放數(shù)據(jù)項的計算機內(nèi)存單元。變量有 變量名、變量值、變量類型、長度、變量作用域等屬性。變量名可由字母、漢字、數(shù)字或下劃線組成,但須以 字母或漢字開頭,長度不超過 10 個字符。vfp 的變量可分為字段變量和內(nèi)存變量,表中的字段名就是字段變 量。內(nèi)存變量不必先聲明,如與字段變量同名,由于字段變量優(yōu)先級較高,需在訪問時加前綴 m(或 m) , 內(nèi)存變量的類型隨所賦值的類型變化而變化??勺鳛?/p>
6、內(nèi)存變量的類型包括前述 7 種基本類型。 a)簡單內(nèi)存變量的賦值: 3.數(shù)組:要先用 dimension 或 declare 聲明,下標最小為 1,默認各元素值為。f 。 ;一個數(shù)組中各元素的 數(shù)據(jù)類型可以不同;可用一維數(shù)組方式訪問二維數(shù)組;僅在賦值號左邊或作為輸入對象時可直接用數(shù)組名給該 數(shù)組的全部數(shù)組元素賦同一值。 例如:dimension x(5),y(2,3) 4.內(nèi)存變量常用命令: a)賦值:內(nèi)存變量=表達式 store 表達式 to 內(nèi)存變量列表 b)顯示:(包括變量名、作用域、類型、取值) list memory like noconsoleto printerprompt /
7、to file display memory like noconsoleto printerprompt / to file 說明:like 短語表示只顯示與通配符相匹配的內(nèi)存變量; 子句 to printer/to file 表示將顯示的內(nèi)容同時送往打印機或文本文件中; list 命令連續(xù)流動顯示,而 display 是分屏顯示; 子句 noconsole 表示不輸出到顯示器; 子句 prompt 表示要求彈出打印設置框。 ? 顯示輸出各表達式值時自動換行 ?? 在同一行上顯示各表達式值 c)清除: clear memory release release all extended lik
8、e/except 子句 extended 表示在程序中還可刪除公共內(nèi)存變量; 短語 except 表示刪除之外的其余內(nèi)存變量。 d)保存和恢復: save to all like/except restore from additive 內(nèi)存變量文件的擴展名為。mem; 子句 additive 表示以追加方式添加內(nèi)存變量,否則恢復前會先清空原有內(nèi)存變量。 save screen to restore screen from 以上為保存和恢復當前屏幕內(nèi)容的命令;無可選項屏幕內(nèi)容存入緩沖區(qū)。 5.記錄字段與數(shù)組元素的數(shù)據(jù)交換: 記錄字段復制為數(shù)組元素: scatter fields memo to
9、 blank scatter fields like/except memo to blank 選用 memo 短語可同時復制備注型字段;blank 表示產(chǎn)生一空數(shù)組。 數(shù)組元素復制成記錄: gather from fields memo gather form fields like/except memo 1.3 表達式 1. 數(shù)值運算符及表達式 () *或 *,/ % +, 2. 字符運算符及表達式 +、 3. 日期(或日期時間)運算符及表達式 +、 該表達式只有三種形式: 兩日期(或日期時間)型數(shù)據(jù)相減,結(jié)果為相差的天數(shù)(或秒數(shù)) ; 日期(或日期時間)型數(shù)據(jù)加上一個整數(shù),結(jié)果是一個新
10、的日期(或日期時間) ; 日期(或日期時間)型數(shù)據(jù)減去一個整數(shù),結(jié)果是一個新的日期(或日期時間) 。 4. 關(guān)系運算符及表達式 、=、=、= =、(或# 或!=)、$ (優(yōu)先級相同) 運算符兩邊的數(shù)據(jù)類型要相同,比較結(jié)果都為邏輯型: 數(shù)值型和貨幣型數(shù)據(jù)按值的大小比較; 日期和日期時間型數(shù)據(jù)比較時,越晚的越大; 邏輯型數(shù)據(jù) tf; = = 只用于字串的精確比較; $ 包含于,也只能用于字符型數(shù)據(jù); = 也可用于字串的非精確比較,但其結(jié)果與 set exact on/off 有關(guān)。 5. 邏輯運算符及表達式 not或!andor 作業(yè)作業(yè): 實驗內(nèi)容:學習內(nèi)存變量、數(shù)組變量的定義,賦值,顯示,學習
11、各種表達式和運算符。復習函數(shù)的使用。 一、內(nèi)存變量的賦值和使用 1、等號賦值 2、store 命令 3?和?的使用方法(顯示值) 4list memo like (顯示名稱,類型,值) 練習:觀察下列命令的作用和顯示結(jié)果 x1=8*4 ?x1 x2=pqr xy=.t. xyz=1996/12/30 list memory like x* store 計算機 to xy,x3 save to f1 all like x? release x1,x2 list memory like x? restore from f1 list memory like x? 二、數(shù)組的定義和使用(參考教材)
12、練習一 dimension array1(2) display memory like array1 store a to array1(1) store 2 to array1(2) display memory like array1 array1=100 display memory like a* 練習二、 dimension mm(2,3) display memory like m* 練習三、 dimension sample(2,3) store goodbye to sample(1,2) store hello to sample(2,2) store 99 to sampl
13、e(6) store .t. to sample(1) clear display memory like sample 三.運算符: 1 數(shù)值運算符: ? (4-3) * (12/nvar2) ? 3 * 2 ? 3 2 ? 2 * 7 ? 14 / 7 ? 15 % 4 ? iif(year(date( ) % 4 = 0, summer olympics this year; , no summer olympics this year) 2、關(guān)系運算符: ? 23 54 status=“close” ? status = = “open” 注意: =表示等于.=表精確等于. 在 set
14、 exact off 狀態(tài)下,用“=”比較兩個字符串時,只要“=”右邊的字符串與左邊的字符串的左端部分相同, 即認為是相等;在 set exact on 狀態(tài)下,則要完全相同才是相同。 例如:判斷下列表達式的值 ab=abc ax=axax axax = ax ax=ax 你好=你好 你好=你好 3、日期運算符: ?1999-01-02+3 ? 1999-01-02-1999-01-21 ? 1999-01-21-1999-01-02 ? 1999-01-02+1999-01-02 4、字符串運算符: ? “我是”+”某某”+”!” ? “我是”-”某某”-”!” ? “我是 “+”某某 “+
15、”!” ? “我是 “-“某某 “+”!” $ :包含運算符,如果該運算符左邊的字符串包含在右邊的字符串里,那么表達式的值為真,否則為假. 例如: 判斷下列表達式的值 李$李小強 李小強$李 五、判斷下列表達式的正確與錯誤: 1 2002-05-25 2 2002-05-25 3 2002/05/25 4 2003-05-01 10:10:10 am-10 5 2003-05-01-date() 6 2003-05-01+date() 7 2003-05-01+1000 _ 練習題 一、選擇題 1.在 visual foxpro 中,有下面幾個內(nèi)存變量賦值語句: x=2001-07-28 10
16、:15:20pm y=.t. m=$123.45 n=123.45 z=123.45 執(zhí)行上述賦值語句之后,內(nèi)存變量 x、y、m、n 和 z 的數(shù)據(jù)類型分別是( ) a)d、l、y、n、c b)d、l、n、n、c c)t、l、m、n、c d)t、l、y、n、c 2.以下日期值正確的是( ) a)2002-05-25 b)2002-05-25 c)2002-05-25 d)2002-0525 3.在下面的 visual foxpro 表達式中,不正確的是( ) a)2003-05-01 10:10:10 am-10 b)2003-05-01-date() c)2003-05-01+date()
17、d)2003-05-01+1000 4.在下列函數(shù)中,函數(shù)值為數(shù)值的是( ) a)bof() b)ctod(01/01/03) c)at(”人民”,”中華人民共和國”) d)substr(dtoc(date(),7) 二、填空題 1.命令 ?round(337.2007,3)的執(zhí)行結(jié)果是_。 2.命令 ?len(thisismybook)的結(jié)果是_。 3.time()返回值的數(shù)據(jù)類型是_。 c 4.順序執(zhí)行下列操作后,屏幕最后顯示的結(jié)果是_和_。 y=date() h=dtoc(y) ? type(y),type(h) d c 三、上機執(zhí)行下述命令,熟悉函數(shù)的功能。(請同學們在運行之前先思考。
18、) 1.b=dtoc(date(),1) ?今天是:+left(b,4)+年+iif(subs(b,5,1)=0,; subs(b,6,2),subs(b,5,2)+月+right(b,2)+日 2.x=str(12.4,4,1) y=right(x,3) z= ,出生年月,性別, 入??偡?說明:(1)$符號是判斷前面一個字符串是否屬于后面那個字符串。 (2)在 list 后需使用字段名表時,fields 可以不寫,也可以寫,最好是寫。 (3)使用字段名表,備注字段可以顯示其內(nèi)容,通用型字段無法顯示內(nèi)容。 2).to printer: 到打印機 5).to file : 這里的文件類型是 t
19、xt 6).off:不顯示記錄號 7)list 和 display 區(qū)別: a.list 默認參數(shù)是全部記錄,display 默認參數(shù)是當前記錄 b.list 顯示時,如果有很多條記錄,就會一次顯示完,而 display 會分屏顯示 c.list=display all(分屏顯示), list next 1=display 例如:list for 性別=男 display for 性別=男 go 2 list next 3 go 2 disp next 3 結(jié)論:當 list 和 disp 不單獨使用,要加范圍和條件參數(shù)時,是完全一樣的(除了分屏顯示外) 。 單獨使用時:list 顯示全部,d
20、isp 顯示當前記錄。 3.表的瀏覽 菜單方式: 窗口分割器 命令方式: browse fields for rest 2.3 表的修改與編輯表的修改與編輯 2.3.1 修改表結(jié)構(gòu)修改表結(jié)構(gòu) modify structure 2.3.2 表記錄的修改和編輯表記錄的修改和編輯 1.指針記錄的定位指針記錄的定位 記錄指針, 當前記錄, 當前記錄號 記錄號反映了記錄存放的物理順序 (1).命令方式:絕對移動絕對移動 : go/ goto 命令 基本使用方法:go 數(shù)字、go top(第一條記錄) 、go bottom(最后一條記錄) 相對移動相對移動 skip 數(shù)字 說明:skip = skip 1
21、 skip 3 skip -2 使用函數(shù):recno()、bof()、eof() 重點掌握:重點掌握:eof()() 、bof()的含義。()的含義。 bof():begin of file:文件開始,第一條記錄的前面,記錄號為 1 eof():end of file:文件結(jié)束,最后一條記錄的后面,記錄號為最后一條記錄的記錄號+1 請分別描述下列值為多少: use 學生 go 1 disp ?recno(),bof() skip 1 ?recno(),bof() go bottom ?recno(),eof() skip ?recno(),eof() 思考思考: use 學生 list dis
22、p disp 將會顯示什么結(jié)果將會顯示什么結(jié)果,為什么為什么? 2. 修改記錄修改記錄 (1)browse fields for p51 (2)成批修改記錄 (重點) 【格式】replace with additive , with additive . for while 【功能】用指定的值替換當前表中指定范圍內(nèi)滿足條件的記錄中指定的值. additive 用于備注 型字段,表將表達式值添加到字段原有內(nèi)容后,否則取代原有內(nèi)容. !若命令中和選項均缺省,則只對當前記錄進行替換操作 數(shù)據(jù)庫 數(shù)據(jù)庫是一個數(shù)據(jù)容器,包含多個表和表之間的關(guān)系(視圖,索引關(guān)系,存儲過程等) 。 表(自由表):獨立存在的
23、二維表 數(shù)據(jù)庫表(數(shù)據(jù)表):數(shù)據(jù)庫中的二維表,可以單獨使用 6.1 數(shù)據(jù)庫的創(chuàng)建與管理 611 創(chuàng)建 菜單方式 命令方式: create database 數(shù)據(jù)庫名 擴展名:dbc 612 管理 項目管理器 613 數(shù)據(jù)庫的打開,修改,關(guān)閉 1打開:open database 數(shù)據(jù)庫名 exclusive/sharednoupdatevalidate 獨占 /共享 只讀 檢查有效性(校驗) *打開一個數(shù)據(jù)庫的同時不會關(guān)閉另外一個數(shù)據(jù)庫 *打開很多個以后想指定某個為當前數(shù)據(jù)庫,使用 set database to 庫名 2修改:modify database 數(shù)據(jù)庫名 例如: close all
24、 create database abc create database abc1 close all open database abc1 open database abc modi database set database to abc1 modi database 3關(guān)閉 close database 關(guān)閉當前數(shù)據(jù)庫 close database all 關(guān)閉所有已經(jīng)打開的數(shù)據(jù)庫 close all 關(guān)閉所有打開的數(shù)據(jù)庫和表 clear all 關(guān)閉所有打開的數(shù)據(jù)庫和表,清除內(nèi)存變量 614 數(shù)據(jù)庫對表和管理 1)庫中新建表 2) 自由表添加到庫中 3) 數(shù)據(jù)表從數(shù)據(jù)庫中刪除(移去或
25、者刪除) 4) 表的操作:修改表結(jié)構(gòu),瀏覽表中數(shù)據(jù) 5) 連接、視圖等 615 數(shù)據(jù)庫文件的查看(了解) use 數(shù)據(jù)庫名.dbc /*打開數(shù)據(jù)庫庫文件 modi stru /*修改數(shù)據(jù)庫庫文件的結(jié)構(gòu) browse /*瀏覽數(shù)據(jù)庫庫文件內(nèi)容 由此可以看見:數(shù)據(jù)庫的實質(zhì)其實也是二維表(容器表) 。6.2 數(shù)據(jù)字典 62 數(shù)據(jù)字典數(shù)據(jù)字典 數(shù)據(jù)字典:數(shù)據(jù)字典:一張?zhí)厥獾谋?,存放表中各種數(shù)據(jù)的定義或者設置信息(包括表的屬性、字段屬性、記錄規(guī)則、表間關(guān) 系、以及參照完整性等信息) 說明:對于自由表無效,只能在數(shù)據(jù)庫中使用(針對數(shù)據(jù)表) vfp 中的完整性控制: 1、 實體完整性:主關(guān)鍵字不為空(學號、
26、工號等主關(guān)鍵字段) 2、 域完整性:對于字段的類型和字段取值加以限制。 如:性別字段規(guī)定為 c 型,取值只能輸入男或者女 (valid) 3、 參照完整性:控制數(shù)據(jù)的一致性,設置數(shù)據(jù)庫關(guān)聯(lián)記錄的規(guī)則尤其是不同表之間的規(guī)則(如:更新是否一致等) 一、字段屬性:數(shù)據(jù)庫中對表修改屬性,可以設置字段約束(域完整性) 表設計器=字段選項卡 二、記錄規(guī)則:多個字段相互約束( 記錄有效性:例如:學生表中,學號必須滿 8 位,且性別只能是男或女兩個值:len(alltrim(學號)=8 and 性別$”男女” ) 表設計器=表選項卡 觸發(fā)器:對表的插入、刪除、修改記錄的約束 三、永久關(guān)系:表與表之間的關(guān)聯(lián) 一
27、對一、一對多、多對多 建立方法:1:n 父表建主索引,子表建普通索引,再拖放 1:1 父表建主索引,子表建主索引或候選索引,再拖放 四、參照完整性:建立關(guān)聯(lián)后設置的更新規(guī)則、插入規(guī)則和刪除規(guī)則。 更新規(guī)則(級聯(lián)/限制/忽略) 插入規(guī)則(限制/忽略) 刪除規(guī)則(級聯(lián)/限制/忽略) 操作步驟: 打開數(shù)據(jù)庫=modi database=數(shù)據(jù)庫菜單=編輯參照完整性 63 視圖 視圖是依賴于數(shù)據(jù)庫表而導出的虛表,不以獨立的文件形式存在??赏ㄟ^修改視圖而修改原表數(shù)據(jù)。 分類:本地視圖(當前數(shù)據(jù)庫) 、遠程視圖(當前數(shù)據(jù)庫外的數(shù)據(jù)源) 631 創(chuàng)建本地視圖 創(chuàng)建方法: 1、打開數(shù)據(jù)庫 2、create vi
28、ew(或者選新建=視圖) 3、選取篩選、排序、連接等選項 4、 modify database 查看 遠程視圖:當前數(shù)據(jù)庫外的數(shù)據(jù)源導入到數(shù)據(jù)庫中操作。 例如:excel 表、其它數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)等 使用方法: open database 數(shù)據(jù)庫 use 視圖名 /*類似打開一張表*/ . /*打開后的操作就和表的操作完全類似*/ 課后思考課后思考: : 有表 xx(學號 c(2),姓名 c(8),語文 n(3,0),數(shù)學 n(3,0),政治 n(3,0) 完成:1、將全班同學的數(shù)學都改為 60 分 2、全班男同學的語文都加十分,女同學的語文加 10% 3、增加一總分字段 2、計算出所有同學的總
29、分,其中語文占 30%.數(shù)學占 20%.政治占 30% 5、將第五位同學的語文加 10 分,總分改為 600 參考答案: 1、 repl all 數(shù)學 with 60 2、 repl all 語文 with 語文+10 for 性別=男 repl all 語文 with 語文*1.1 for 性別=女 3、 modi stru 增加總分字段,n(3,0) 4、 repl all 總分 with 語文*0.3+數(shù)學*0.2+政治*0.3 5、 repl reco 5 總分 with 600,語文 with 語文+10 或是: go 5 repl 總分 with 600,語文 with 語文+10
30、 3 3 插入記錄插入記錄 insert before blank 向已有表中增加新記錄可分為:在表文件的尾部追加新記錄(append)和在表文件任意記錄的前后插入新記錄(insert)兩 種方法 補充:insert into 表名(字段列表) values(表達式列表) 向表尾追加一個新記錄,并將指定的數(shù)據(jù)存入該記錄中 如:insert into 學生(學號,姓名,性別) values(12325,阿貴,”男”) 2.為記錄做刪除標記為記錄做刪除標記(菜單方式,命令方式) 兩步:邏輯刪除邏輯刪除和物理刪除物理刪除 (1)邏輯刪除即做一個刪除標記. delete for while !若命令中
31、和選項均缺省,則只對當前記錄進行刪除操作 邏輯刪除記錄的恢復 recall for while !若命令中和選項均缺省,則只對當前記錄進行恢復刪除操作 (2)物理刪除 pack 物理刪除( 真正刪除)當前表中所有已打上刪除標記的記錄,并重新調(diào)整記錄號 刪除全部記錄 ,并保留表結(jié)構(gòu). zap dele all pack 2.3.32.3.3 數(shù)據(jù)表與數(shù)組之間的數(shù)據(jù)交換數(shù)據(jù)表與數(shù)組之間的數(shù)據(jù)交換(重點)(重點) scatter 和 gather form (書 p55) 1、 scatter :將表中的單個記錄傳送到數(shù)組或內(nèi)存變量中 單記錄-數(shù)組(內(nèi)存變量) 【格式】scatterscatter
32、fieldsfields memomemo toto blankblank | | memvarmemvar blankblank scatter 用法一:將當前記錄的值賦給內(nèi)存變量 格式: scatter fields 字段名表 memver 例如:use 學生 go 3 disp scatter memvar scatter fields 學號,姓名,入??偡?memvar ?m.學號,m.姓名,m. 入??偡?scatter 用法二:將當前記錄的值賦給數(shù)組變量 格式:重點掌握 scatter fields 字段名表 to 數(shù)組變量名 例如:dime arr1(3) list memo l
33、ike a* use 學生 go 5 scatter to arr1 list memo like arr1 scatter to arr1 memo 掌握表的打開和關(guān)閉; 表結(jié)構(gòu)的顯示,表記錄的顯示方法. 實驗內(nèi)容: 一.創(chuàng)建自由表(采用命令法、菜單法、表向?qū)?, 建議:set default to f:lq(各人建自已的默認目錄),下面的東西都放在自已的文件夾下.(注意:每打開 visual foxpro 就必須重新設置默認目錄先執(zhí)行 set defa to 路徑); 1. 創(chuàng)建表結(jié)構(gòu)(教材 p44 圖 4.1) 菜單法: 使用 create 路徑表名.dbf,進入表設計器建結(jié)構(gòu) 使用 c
34、reat table 表名(字段名 類型(寬度),) (注意該有空格和不該有空格的地方) eg: create table 學生(學號 c(8),姓名 c(8),出生日期 d,入校總分 n(3,0),個人信息 m,照片 g) 2. 修改表結(jié)構(gòu)命令修改表結(jié)構(gòu)命令 modifymodify structurestructure 二.輸入數(shù)據(jù)。輸入教材 p42 表 4.1 學生.dbf,特長字段隨便輸入幾個,照片也隨便選幾個人粘貼點圖片就行了(圖 片自選)如果數(shù)據(jù)輸入不正確的話,請用 browse 命令修改,添加記錄(輸入數(shù)據(jù))可以用 append 命令(只輸兩條即 可) 輸入完:關(guān)閉就存盤(注意:
35、memo 如果輸入了的話就會變成 memo, gen=gen) 4) 請觀察狀態(tài)欄,是否有文件被打開,它的名字是什么?路徑是什么?當前記錄號是什么? 共有多少條記錄? 執(zhí)行 use 命令,數(shù)據(jù)表被關(guān)閉了,請再看看狀態(tài)欄的情況 請再打開表學生: use 學生 三、表的打開、關(guān)閉:(建議先檢查一下默認目錄) 打開:方法一:文件菜單-打開表或者常用工具欄-打開表 方法二:use 表名 或者是 use 盤符:路徑文件名 關(guān)閉:use close table/close all/clear all 四表文件的顯示 1 顯示表結(jié)構(gòu):list/display stucture (以下操作用“學生.dbf”表
36、,為節(jié)省時間,表可從我的主頁上下載) 2顯示記錄命令 disp/list 范圍子句條件子句fields 子句 練習: list all list next 2 list record 5 list rest 顯示所有女同學,不顯示記錄號 顯示姓張的男同學 顯示入學成績大于 580 以上的人的姓名和成績。 顯示第 5 號記錄的姓名,性別和入學成績 顯示 84 年出生的男生的入成績學 不顯示記錄號 答案: 顯示所有女同學 list for 性別=”女”off 顯示姓張的男同學 disp for substr(姓名,1,2)=“張”and 性別=”男” list for 姓名=”張”and 性別=”
37、男” 顯示入學成績大于 580 以上的人的姓名和成績。 list for 入學成績580 fields 姓名,入學成績 顯示 5 號記錄的姓名,性別和入學成績 list record 5 fields 姓名,性別,入學成績 顯示 82 年出生的男生的入成績學 list for year(出生年月)=1982 and 性別=”男” fields 入學成績子 off 排序查詢和多表操作排序查詢和多表操作 5.15.1 排序排序 基本格式: sort to on. sort to on /a/d/c,/a/d/c. ascending/descendingfields 范圍for/while 條件
38、說明: 默認為/a/a 升序升序 . . /d/d 降序降序 /c 排序時不區(qū)分大小寫. 排序會產(chǎn)生一個已經(jīng)排好序的新的 dbf 文件, 而以前的表沒有改變 . 如: 對學生表按入學成績排序.( (單重排序單重排序) ) 對學生表先按性別,再按入學成績排序. ( (多重排序多重排序) ) sort to 學生 2 on 性別,入校總分 注意:排序改變了記錄號,即記錄存放的物理順序。 5.25.2 索引索引 5.2.1 概念 物理順序物理順序:記錄在內(nèi)存中存放的實際順序(記錄號反映了記錄存放的先后順序) 邏輯順序邏輯順序:主控索引生效時的順序(排列順序) 索引類型索引類型 單索引文件,擴展名 i
39、dx(只包含一個索引項) 復合索引文件,擴展名 cdx 分: 結(jié)構(gòu)復合索引 主文件名與表同名,隨表的打開而打開 非結(jié)構(gòu)復合索引 主文件名不與表同名 (包含多個索引項) 復合索引文件還可以分為:主索引、唯一索引(unique) 、候選索引(candidate) 、普通索引 主索引:只能在數(shù)據(jù)庫表中建,索引字段無重復值,一張表只能建一個主索引 候選索引:必須是復合索引。索引字段無重復。一張表可以有多個候選索引.candidate 普通索引: 索引字段允許有重復值, 一張表可以有多個普通索引. 默認 惟一索引:索引字段允許有重復值,但相同的字段值只取第一個。unique 索引關(guān)鍵字: 建立索引所用的
40、字段或表達式 5.2.2 索引文件的建立 【格式】index on to | tag of for ascending | descending unique/candidate additive additive:表建立索引文件時不關(guān)閉先前的索引. 單索引的建立(.idx) index on 索引表達式索引表達式 to 單索引文件名單索引文件名 index on 姓名 to xm 說明: 建立單索引文件 xm.idx 建立時 xm.idx 就打開并生效了 默認是按照升序進行的,要降序只有 n 型字段才可以,其它類型要降序的話就只能用復合索引的方法了 例: index on 入??偡?to r
41、xzf 單索引不能使用 ascending 和 descending 參數(shù),復合索引才能使用 ascending 和 descending 參數(shù) 復合索引(.cdx)(.cdx) 結(jié)構(gòu)復合索引(與表主文件名同名,且隨表自動打開) indexindex onon 索引表達式索引表達式 tagtag 索引標識索引標識 asce/descasce/desc use 學生 index on 姓名 tag xm descending 課程-選課(1:n) 一方:學生,課程 建索引 多方:選課. 建關(guān)聯(lián) sele 1 use 學生 index on 學號 tag xh sele 2 use 課程 inde
42、x on 課程號 tag kch sele 3 use 選課 set rela to 學號 into a set rela to 課程號 into b additive list 學號,a.姓名,b.課程名,成績, 4.取消關(guān)聯(lián) 在父表工作區(qū)內(nèi)使用 set rela to 5.數(shù)據(jù)工作期 p73 set view on/off 在數(shù)據(jù)工作期中建關(guān)聯(lián) 5.5.3表與表的連接 是一種物理連接,將兩個工作區(qū)中打開的表文件連接生成一個新的表文件. 格式: join with 別名 to 新表文件 for fields 字段名表 例 5-24 用”學生”,”選課”,”課程”生成新表”學生課程”,其中包含
43、學號,姓名,性別,課程名,課時數(shù),成績 sele 1 use 學生 sele 2 use 選課 join with a to 學生選課 for 學號=a.學號 fields a.學號,a.姓名,課程號,成績 use 學生選課 select 3 use 課程. join with b to 學生課程 for 課程號=b.課程號,fields b.學號,b.姓名,課程名,課時,b.成績 use 學生課程 brow 注意:join with 命令不需要使用事先排序和索引,它會連接產(chǎn)生一個新的表,是一種物理的連接。如果缺少 fiel 字句,則代表全部字段。 四、表與表的更新 1、update 的作用:
44、用一個表的內(nèi)容替換另一個表的內(nèi)容。 格式:update on from replace with , with , random 3、功能 :利用表的表達式值來更新當前表文件中記錄的字段值。 說明: *兩個表都需要先對連接關(guān)鍵字段建立索引 *如果有 random 字段,那么只需當前表建立索引,另外一張可以不建 例:有兩張表: 總分表:總分表:zf.dbf 學號 姓名 語文 數(shù)學 總分 110 張三 114 李四 119王二 成績表:成績表: cj.dbf 學號 語文 數(shù)學 110 67 65 114 89 67 119 78 95 按照成績表的成績修改總分表的成績,并計算出總分表的總分字段 參
45、考答案: close all sele 2 use cj index on 學號 tag xhcj sele 1 use zf index on 學號 tag xhzf update on 學號 from b replace 語文 with b.語文,數(shù)學 with b.數(shù)學 replace all 總分 with 語文+數(shù)學 list (在被替換的表中用 update) 總結(jié): join with:不需要建立索引,物理連接生成一張新表 set relation to :子表需要建索引。父表不建 update:兩個表都要建立索引,并且索引關(guān)鍵字類型和寬度要相同。 多工作區(qū)操作 實驗名稱:多工作
46、區(qū)操作 實驗性質(zhì):設計性實驗 實驗目的和要求:必修實驗,掌握多工作區(qū)的基本操作,建立關(guān)聯(lián),使用連接和表的更新 實驗內(nèi)容: 1. 為表“學生” “選課” “課程”建立表間關(guān)系,顯示學號,姓名,課程號,成績,課程名字段。set relation to 2.將“學生” 、 “選課.dbf”及“課程.dbf”表連接生成一張新表 new1 ,其中包含學號,姓名,課程號,成績,課程名。 join with 3. 用“update”文件夾下的 cj.dbf 中的語文和數(shù)學分數(shù)填入 zf.dbf 表,統(tǒng)計總分填入總分字段,其中語文占 60%,數(shù) 學占 40%. update sql 部份 1、查詢教師號及其所
47、任課程的門數(shù)(授課.dbf) 2、查詢選修了課程 c140 的學生學號和成績,并按成績降序排列(選課.dbf) 3、查詢教師的編號,姓名極其所授課程的編號(教師.dbf,授課.dbf) 參考答案 1. selesele 1 1 useuse 學生學生 indexindex onon 學號學號 tagtag xhxh selesele 2 2 useuse 課程課程 indexindex onon 課程號課程號 tagtag kchkch selesele 3 3 useuse 選課選課 setset relarela toto 學號學號 intointo a a setset relarela
48、 toto 課程號課程號 intointo b b additiveadditive (以上兩條命令可合為一條命令:以上兩條命令可合為一條命令:setset relarela toto 學號學號 intointo a a,課程號,課程號 intointo b b addiaddi) listlist 學號,學號, a.a.姓名,課程號姓名,課程號,b.,b.課程名,成績,課程名,成績, 2.select 1 useuse 學生學生 selectselect 2 2 useuse 選課選課 joinjoin withwith a a toto newnew forfor 學號學號=a.=a.學號
49、學號 selesele 3 3 useuse newnew selesele 4 4 useuse 課程課程 joinjoin withwith c c toto new1new1 forfor 課程號課程號=c.=c.課程號課程號 useuse new1new1 listlist 3 3 使用使用 update:update: closeclose allall selesele 2 2 useuse cjcj indexindex onon 學號學號 tagtag xhcjxhcj selesele 1 1 useuse zfzf indexindex onon 學號學號 tagtag x
50、hzfxhzf updaupda onon 學號學號 fromfrom b b replrepl 語文語文 withwith b.b.語文語文, ,數(shù)學數(shù)學 withwith b.b.數(shù)學數(shù)學 replrepl allall 總分總分 withwith 語文語文*0.6+*0.6+數(shù)學數(shù)學*0.4*0.4 listlist 使用關(guān)聯(lián)使用關(guān)聯(lián)+replace+replace 完成完成: : closeclose allall clearclear selesele 1 1 useuse cjcj indexindex onon 學號學號 toto xnxn selesele 2 2 useuse
51、 zfzf setset relarela toto 學號學號 intointo a a from 授課; group by 教師號 2、select 學號,成績; from 選課; where 課程號=c140; order by 成績 desc 3、select 教師.教師號,姓名,課程號; from 教師,授課; where 教師.教師號=授課.教師號 作業(yè)作業(yè): : 第一題:有表第一題:有表: : stu(stu(學號學號, ,姓名姓名, ,性別性別, ,班級班級) ) 一方一方 cj(cj(學號學號, ,課程名課程名, ,分數(shù)分數(shù)) ) 多方多方 請顯示出請顯示出 0303 級級 3
52、 3 班班 每位同學的姓名每位同學的姓名, ,分數(shù)分數(shù)( (請使用關(guān)聯(lián)請使用關(guān)聯(lián)) ) 注意:每個同學可以選多門課注意:每個同學可以選多門課 第二題:有表第二題:有表: : kc(kc(課程號課程號, ,課程名課程名) ) sk(sk(教師號教師號, ,教師姓名教師姓名, ,課程號課程號) ) 請顯示出每位教師的教師姓名請顯示出每位教師的教師姓名, , 課程號課程號, ,課程名課程名( (請使用連接請使用連接) ) 第三題:有表第三題:有表: : zg(zg(工號工號, ,姓名姓名, ,水電費水電費, ,煤氣費煤氣費, ,網(wǎng)費網(wǎng)費, ,總費總費) ) 其中只有工號和姓名有數(shù)據(jù)其中只有工號和姓名
53、有數(shù)據(jù), ,其它數(shù)據(jù)沒有填寫其它數(shù)據(jù)沒有填寫 fei(fei(工號工號, ,水電費水電費, ,煤氣費煤氣費) ) 表表 feifei 中所有數(shù)據(jù)已經(jīng)填寫中所有數(shù)據(jù)已經(jīng)填寫 請編寫命令完成下列功能請編寫命令完成下列功能: : 利用表利用表 feifei 中的數(shù)據(jù)填寫表中的數(shù)據(jù)填寫表 zgzg 中的數(shù)據(jù)。中的數(shù)據(jù)。 設網(wǎng)費統(tǒng)一收取設網(wǎng)費統(tǒng)一收取 6565 元元, ,請計算出總費。請計算出總費。( (更新更新) ) 實驗六 實驗名稱:表操作(四) 目的:1.練習排序 2.索引創(chuàng)建,打開,使用,更新 3.練習使用順序查詢和索引查詢. 內(nèi)容(以下內(nèi)容對”學生”表進行操作) 1 按性別降序排列,生成排序文
54、件 xb1 2 按出生日期建立升序的單索引文件 csrq1. 3、按入校總分建立降序的單索引文件 zf1. 4 建立非結(jié)構(gòu)復合索引文件 stu.cdx,要求先排女生記錄再排男生記錄。(選做) 5 建立一個結(jié)構(gòu)復合索引要求創(chuàng)建一個索引標志 xm1,實現(xiàn)按姓名升序排列. 6.按性別和入學成績創(chuàng)建一個結(jié)構(gòu)復合索引,索引標識為 xbcj, 實現(xiàn)先按性別,再按入學成績升序排列. 7.建結(jié)構(gòu)復合索引,按”三好生”字段升序排,索引標識 shs. 8.關(guān)閉表后重新打開表.打開單索引文件 zf1 并顯示記錄. use use 學生 set index to zf1 list 或:use 學生 index zf1
55、 list 9 分別設置 xm1,xbcj,shs 為主控索引標識,并顯示. use 學生 set order to xm1 list set order to xbcj list set order to shs list 10. 打開學生表,按入??偡稚蚪▎嗡饕募?。關(guān)閉表。打開學生表,將吳紅梅的入??偡指臑?650 分。打開單索 引文件,顯示記錄。觀察吳紅梅在表中的位置,用 reindex 更新單索引文件,并顯示,觀察吳紅梅在表中的位置. 11.用 locate 命令使指針指向第一條入??偡中∮?580 分的記錄,再把指針指向第二條入校總分小于 580 分的記錄 (locate-con
56、tinue) 12、用 seek 和 find 命令分別查找”江冰”.(要先對姓名字段建索引) 索引參考答案: 1.sort on 性別/d to xb1 2.index on 出生日期 to csrq1 3.index on 入學成績 to zf1 4.index on 性別 tag xb of stu desc 5.index on 姓名 tag xm1 6.index on 性別+str(入學成績) tag xbcj 7.index on 三好生 tag shs 10. use 學生 index on 入校總分 to cj list use use 學生 replace 入??偡?wit
57、h 650 for 姓名= 吳紅梅 set index to cj list (吳紅梅沒有排到正確的位置) reindex list (吳紅梅排到了正確的位置) 11. locate for 入??偡?80 disp continue disp 12.index on 姓名 to xm find 江冰 seek “江冰” 第第 3 章章 程序設計(一)程序設計(一) 本章重點: 程序的編寫,基本程序基本結(jié)構(gòu),子程序和過程 常見的程序設計方法 1、 結(jié)構(gòu)化程序設計(模塊化、面向過程的程序設計) 2、 面向?qū)ο蟮某绦蛟O計 8.1 面向過程程序設計面向過程程序設計 8.1.1 程序文件的建立和執(zhí)行
58、程序的擴展名:prg 一、程序的建立: 1、 modi comm 程序名.prg (.prg 可?。?實質(zhì):文本文件(ascii 編碼) ,執(zhí)行時,會產(chǎn)生編譯文件 fxp 后讓計算機執(zhí)行。 2、 菜單方式 二、程序的運行 do 三、vfp 中程序的分類:數(shù)學類程序、涉及到表操作的程序 如果本程序是涉及到表操作的程序,那么: 1、 使用程序之間可以先加語句 clear 和 close all 2、 程序最后可以使用命令 close all 然后使用 return 或 cancel 或 quit 最后注意書寫程序的格式(縮進) 四、程序舉例 例:顯示出所有入??偡衷?580 分及以上的同學信息 c
59、lear close all use 學生 locate for 入??偡?580 do while .not. eof() disp continu wait 按任意鍵繼續(xù) enddo ?結(jié)束 close all cancel 8.1.2 程序中常用的命令 1.交互式輸入命令 (1) 賦值命令 = store (2) 輸入數(shù)據(jù)的命令:(注意:輸入數(shù)據(jù)是在程序執(zhí)行的時候) accept 提示信息 to input 提示信息 to wait 提示信息 to timeout 注意:wait 輸入的是一個字符(c 型) input 和 accept 的區(qū)別: input 適用于全部類型內(nèi)存變量,輸入
60、時需要加定界符 accept 只適用于 c 型,并且 c 型不加定界符 說明: 提示信息是提示信息是 c 型型, 它會在屏幕上原樣輸出它會在屏幕上原樣輸出 . input 和和 accept 在編寫程序時語句都一樣,只是執(zhí)行程序(在編寫程序時語句都一樣,只是執(zhí)行程序(do)時,輸入的東西不同)時,輸入的東西不同 下面請看程序?qū)嵗?例:輸入 a、b、c 的值,對 2ax+b=c 求 x 的值。 clear input “現(xiàn)在計算 2ax+b=c,請輸入 a 的值:” to a input “請輸入 b 的值:” to b input “請輸入 c 的值:” to c x=(c-b)/(2*a)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年智能制造成套裝備項目投資申請報告代可行性研究報告
- 2023年體外診斷試劑資金申請報告
- 銀行內(nèi)部控制審計程序制度
- 銀行檔案管理制度
- 采購檔案管理與保密制度
- 市級講課比賽課件新時代的勞動者
- 梁良良教授課件:創(chuàng)新思維與創(chuàng)新方法
- 大學物資設備采購合同(進口設備)
- 房屋轉(zhuǎn)讓居間合同(30篇)
- 了解法律制度自覺遵守憲法
- 2024年資格考試-WSET二級認證考試近5年真題附答案
- 12J201平屋面建筑構(gòu)造圖集(完整版)
- 22-深化設計方案
- 2024山東高速路橋集團股份限公司校園招聘430人高頻難、易錯點500題模擬試題附帶答案詳解
- 人教版歷史2024年第二學期期末考試七年級歷史試卷(含答案)
- 寵物店轉(zhuǎn)讓接手協(xié)議書模板
- 蘇教版數(shù)學小學四年級上學期試卷與參考答案(2024-2025學年)
- 20以內(nèi)的加法口算練習題4000題 284
- 2021-2022學年北京市東城區(qū)部編版六年級上冊期末考試語文試卷(含答案解析)
- 河口水閘工程項目施工組織設計及進度計劃
- 食品安全與質(zhì)量檢測技能大賽考試題庫400題(含答案)
評論
0/150
提交評論