《程序設(shè)計(jì)基》PPT課件.ppt_第1頁(yè)
《程序設(shè)計(jì)基》PPT課件.ppt_第2頁(yè)
《程序設(shè)計(jì)基》PPT課件.ppt_第3頁(yè)
《程序設(shè)計(jì)基》PPT課件.ppt_第4頁(yè)
《程序設(shè)計(jì)基》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩51頁(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)介

第6章 程序設(shè)計(jì)基礎(chǔ),6.1 程序與程序文件,交互工作方式,要求用戶必須比較熟悉數(shù)據(jù)庫(kù)知識(shí),了解數(shù)據(jù)組織結(jié)構(gòu),如果要同時(shí)對(duì)數(shù)據(jù)表格多次進(jìn)行某些操作,就必須反復(fù)擬行相關(guān)命令,這些命令不被保存,當(dāng)退出Visual FoxPro系統(tǒng)環(huán)鏡或計(jì)算機(jī)斷電后,就蕩然無(wú)存了,對(duì)于使用大量數(shù)據(jù)的最終用戶來(lái)說(shuō),直接使用交互方式管理數(shù)據(jù)是不現(xiàn)實(shí)的。因此,要建立真正的管理信息系統(tǒng)必須編制程序。,6.1.1 程序的建立與編輯,創(chuàng)建程序: (1)在“文件”菜單中選擇“新建”命令(或工具欄中“新建”按鈕),然后在“新建”對(duì)話框中選擇“程序”單選按鈕,再單擊“新建文件”按鈕。 (2)命令窗口中,鍵入命令:MODIFY COMMAND 文件名擴(kuò)展名 保存程序 (1)從“文件”菜單中選取“保存”命令 (2)按“CTRL+W”組合鍵 。 編輯程序 (1)在“文件”菜單中選擇“打開”命令 (2)命令窗口中:MODIFY COMMAND,程序的書寫規(guī)則,注釋語(yǔ)句 格式: NOTE *& 對(duì)話開關(guān)語(yǔ)句 格式:SET TALK OFF|ON 輸出語(yǔ)句 格式:? 格式:? 命令的分行 每個(gè)命令都以回車鍵結(jié)束,一行只能寫一條命令;若一條命令太長(zhǎng),并在分行處加上續(xù)行符“;” 。,6.1.2 程序文件的運(yùn)行,單擊“程序”菜單中的“運(yùn)行”命令,在打開的運(yùn)行對(duì)話框中找到要執(zhí)行的程序文件,單擊“運(yùn)行”按鈕。 單擊常用工具欄上的“運(yùn)行”按鈕。 在命令窗口中鍵入命令:DO 程序文件名前可以使用路徑,否則指系統(tǒng)默認(rèn)目錄。若運(yùn)行的是.PRG程序則擴(kuò)展名可以省略。若運(yùn)行其他的程序則擴(kuò)展名不能?。?6.1.2 程序文件的運(yùn)行,執(zhí)行程序文件時(shí),將依次執(zhí)行文件中的命令,直到所有 命令執(zhí)行完畢,或者執(zhí)行到以下命令: CANCAL:終止程序運(yùn)行,清除所有的私有變量,返回命令窗口; retry:返回到調(diào)用行本身,可以實(shí)現(xiàn)程序的重復(fù)調(diào)用。 RETURN:結(jié)束程序執(zhí)行,返回調(diào)用它的上級(jí)程序,若無(wú)上級(jí)程序則返回命令窗口; QUIT:結(jié)束程序執(zhí)行并退出Visual FoxPro系統(tǒng),返回操作系統(tǒng),6.1.3 簡(jiǎn)單的輸入輸出命令,6.1.3 簡(jiǎn)單的輸入輸出命令 1ACCEPT命令 【格式】ACCEPT TO 【功能】在程序執(zhí)行過(guò)程中,將用戶交互式輸入的內(nèi)容作為字符串賦值給指定內(nèi)存變量。 該命令只接受字符型數(shù)據(jù),輸入的字符串不需要加定界符,【例6-2】編程從鍵盤輸入某數(shù)據(jù)庫(kù)的文件名,要求打開該數(shù)據(jù)庫(kù)并顯示其內(nèi)容。程序文件名為PROG2.PRG。 MODI COMMAND PROG2 SET TALK OFF CLEAR ACCEPT “請(qǐng)輸入數(shù)據(jù)庫(kù)名:” TO AAA OPEN DATABASE &AAA ACCEPT “請(qǐng)輸入表名“ TO BBB USE &BBB LIST USE SET TALK ON RETURN,2INPUT命令 【格式】INPUT TO 【功能】在程序執(zhí)行過(guò)程中,將用戶交互式輸入的內(nèi)容賦值給指定內(nèi)存變量 可以輸入字符型、數(shù)值型、邏輯型、日期型和日期時(shí)間型等類型數(shù)據(jù),而且可以是常量、變量、函數(shù)或表達(dá)式等形式,按回車鍵結(jié)束輸入,系統(tǒng)將輸入的數(shù)據(jù)賦值給。,【例6-4】從鍵盤輸入兩個(gè)任意正數(shù),編程求以兩數(shù)為邊長(zhǎng)的長(zhǎng)方形面積。程序文件名為PROG4.PRG SET TALK OFF CLEAR INPUT “長(zhǎng)方形一邊的長(zhǎng)為:” TO A INPUT “長(zhǎng)方形另一邊的長(zhǎng)為:” TO B S=A*B ? “長(zhǎng)方形的面積為:” , S SET TALK ON RETURN,3WAIT命令 【格式】WAIT TO WINDOW AT, NOWAIT CLEAR|NOCLEAR TIMEOUT 【功能】顯示提示信息,暫停程序執(zhí)行,直到用戶按任意鍵或單擊鼠標(biāo)時(shí)繼續(xù)執(zhí)行程序。 若選擇可選項(xiàng)TO ,將輸入的單個(gè)字符作為字符型數(shù)據(jù)賦給指定的;若用戶是按Enter鍵或單擊鼠標(biāo),的值為空串。 若省略所有可選項(xiàng),屏幕顯示“鍵入任意鍵繼續(xù)”默認(rèn)提示信息,【例6-6】在STUDENT數(shù)據(jù)庫(kù)的STUD表中顯示任意一個(gè)系學(xué)生的情況。程序文件名為PROG6.PRG SET TALK OFF CLEAR OPEN DATABASE STUDENT USE STUD WAIT “請(qǐng)輸入待查學(xué)生的系號(hào)(13):” TO N IF VAL(N)3 WAIT “輸入無(wú)效,結(jié)束程序運(yùn)行!” WINDOW TIMEOUT 5 RETURN ELSE STORE “0”+N TO AAA LIST FOR 系別號(hào)=AAA ENDIF CLOSE DATABASE SET TALK ON RETURN,4三條輸入命令的異同 ACCEPT命令只能接受字符型數(shù)據(jù),不需定界符,輸入完畢按回車鍵結(jié)束; WAIT命令只能輸入單個(gè)字符,且不需定界符,輸入完畢不需按回車鍵; INPUT命令可接受數(shù)值型、字符型、邏輯型、日期型和日期時(shí)間型數(shù)據(jù),數(shù)據(jù)形式可以是常量、變量、函數(shù)和表達(dá)式,如果是字符串,需用定界符,輸入完畢按回車鍵結(jié)束。,程序的基本結(jié)構(gòu),Visual FoxPro系統(tǒng)提供的命令豐富,且功能強(qiáng)大,把這些命令和程序設(shè)計(jì)語(yǔ)句有效地組織在一起,就形成了實(shí)現(xiàn)某一特定功能的程序。 Visual FoxPro系統(tǒng)的程序有兩個(gè)特點(diǎn):一是程序控制流模式,由順序、分支、循環(huán)三種基本結(jié)構(gòu)構(gòu)成。二是面向?qū)ο罂梢暬慕Y(jié)構(gòu)程序模塊,在每個(gè)模塊的內(nèi)部也是由程序控制流組成。常見的控制結(jié)構(gòu)如下: 1順序結(jié)構(gòu) 順序結(jié)構(gòu)是在程序執(zhí)行時(shí),根據(jù)程序中語(yǔ)句的書寫順序依次執(zhí)行的命令序列。Visual FoxPro系統(tǒng)中的大多數(shù)命令都可以作為順序結(jié)構(gòu)中的語(yǔ)句。 2分支結(jié)構(gòu) 分支結(jié)構(gòu)是在程序執(zhí)行時(shí),根據(jù)不同的條件,選擇執(zhí)行不同的程序語(yǔ)句,用來(lái)解決有選擇、有轉(zhuǎn)移的諸多問(wèn)題。,3循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)則能夠使某些語(yǔ)句或程序段重復(fù)執(zhí)行若干次。如果某些語(yǔ)句或程序段需要在一個(gè)固定的位置上重復(fù)操作,使用循環(huán)是最好的選擇。 4過(guò)程結(jié)構(gòu) 在許多應(yīng)用程序中,有一些程序段需要反復(fù)執(zhí)行多次,這些程序段不在一個(gè)固定的位置上,而是分散在程序的許多位置上重復(fù)執(zhí)行,可將其與嵌入它的程序分開,形成獨(dú)立的程序序列,待使用時(shí)再調(diào)入程序中,以實(shí)現(xiàn)不同位置上的重復(fù)操作。這樣做增強(qiáng)了程序的可讀性和模塊化。我們稱這種具有獨(dú)立功能而且可以被其它程序調(diào)用的程序序列為過(guò)程。,6.2 程序的基本結(jié)構(gòu),求解的基本邏輯: VFP程序多數(shù)用于數(shù)據(jù)處理,解決問(wèn)題的基本邏輯是:輸入數(shù)據(jù)處理數(shù)據(jù)輸出數(shù)據(jù)。 程序的通用性: 程序的通用性指程序?qū)Χ喾N場(chǎng)合的適應(yīng)性,通用性好的程序的應(yīng)用范圍較廣。,6.2.1 順序結(jié)構(gòu),順序結(jié)構(gòu)是在程序執(zhí)行時(shí),根據(jù)程序中語(yǔ)句的書寫順序依次執(zhí)行的命令序列。 例題:將學(xué)生表中學(xué)號(hào)為20050008,其姓名一欄由萬(wàn)華改為萬(wàn)強(qiáng)。 CLEAR SET TALK OFF OPEN DATABASE 學(xué)生 USE 學(xué)生 ACCEPT “請(qǐng)輸入要修改記錄的學(xué)號(hào):” to xh LOCATE FOR 學(xué)號(hào)=xh REPLACE 姓名 WITH “萬(wàn)強(qiáng)” USE CLOSE DATABASE SET TALK ON RETURN,6.2.2 選擇結(jié)構(gòu),單分支選擇 單向選擇語(yǔ)句,即根據(jù)用戶設(shè)置的條件表達(dá)式的值,決定某一操作是否執(zhí)行。 (1)語(yǔ)句格式: IF條件表達(dá)式 語(yǔ)句序列 ENDIF (2)單向條件轉(zhuǎn)向語(yǔ)句的流程圖,雙分支選擇 雙向選擇語(yǔ)句,即根據(jù)用戶設(shè)置的條件表達(dá)式的值,選擇兩個(gè)操作中的一個(gè)來(lái)執(zhí)行。 (1)語(yǔ)句格式: IF條件表達(dá)式 語(yǔ)句序列1 ELSE 語(yǔ)句序列2 ENDIF,(2)雙分支條件轉(zhuǎn)向語(yǔ)句的流程圖如下圖所示,例:輸入兩個(gè)實(shí)數(shù),求它們的最大值。 set talk off clear input “實(shí)數(shù)a=” to a input “實(shí)數(shù)b=” to b if a=b max=a else max=b endif ? a,”與”,b,”中的最大值為:”,max return,也可以用單分支的選擇語(yǔ)句來(lái)實(shí)現(xiàn) set talk off clear input “實(shí)數(shù)a=” to a input “實(shí)數(shù)b=” to b max=a if ba max=b endif ? a,”與”,b,”中的最大值為:”,max return,例:輸入一個(gè)大于0的年份值,判斷該一年份是否是閏年,如果是閏年,就輸出“xxxx年是閏年”,否則輸出“xxxx年不是閏年”。 .閏年的條件是:能被4整除但不能被100整除,或能被100整除且能被400整除。,多向選擇語(yǔ)句,即根據(jù)多個(gè)條件表達(dá)式的值,選擇執(zhí)行多個(gè)操作中的一個(gè)對(duì)應(yīng)執(zhí)行。 (1)語(yǔ)句格式: DO CASE CASE條件表達(dá)式1 CASE條件表達(dá)式2 CASE條件表達(dá)式N OTHERWISE ENDCASE,多分支選擇,SET TALK OFF CLEAR INPUT “請(qǐng)輸入收入:” TO P DO CASE CASE P800 R=0 CASE P2000 R=0.05 CASE P5000 R=0.08 OTHERWISE R=0.1 ENDCASE TAX=P*R ? ”稅金為:”,TAX SET TALK ON RETURN,【例】用IFENDIF實(shí)現(xiàn)上例計(jì)算稅金,程序文件名為TAX_2.PRG。,IIF( ) 函數(shù) VFP中有一個(gè)函數(shù),它能夠先進(jìn)行條件判斷,然后決定返回其值。它的使用效果與選擇語(yǔ)句IFENDIF相同,但比選擇語(yǔ)句更快捷。 格式:IIF(條件表達(dá)式,表達(dá)式1,表達(dá)式2) 例:輸入兩個(gè)實(shí)數(shù),求這兩者的最大值。文件名:exam_if_1.prg,set talk off clear input “實(shí)數(shù)a=” to a input “實(shí)數(shù)b=” to b max=iif(a=b,a,b) ? a,”與”,b,”中的最大值為:”,max return,例:用IIF( )來(lái)實(shí)現(xiàn)P.163 例6-7。文件名exam_if_1.prg set talk off clear input “實(shí)數(shù)x=” to x y=iif(x0,iif(x10,x*x+1,3*x*x-2*x+1),x*x+4*x-1) ? “分段函數(shù)值為:”+str(y,10,2) set talk on return,使用分支語(yǔ)句應(yīng)注意的幾點(diǎn) IF ENDIF和DO CASE ENDCASE必須配對(duì)使用,DO CASE與第一個(gè)CASE條件表達(dá)式之間不應(yīng)有任何命令。 可以是各種表達(dá)式或函數(shù)的組合,其值必須是邏輯值。 可以由一個(gè)或多個(gè)命令組成,可以是條件控制語(yǔ)句組成的嵌套結(jié)構(gòu)。,6.2.3 循環(huán)結(jié)構(gòu),1. DO WHILE循環(huán)語(yǔ)句 格式:DO WHILE ENDDO,【例6-9】編程求246100之和。 SET TALK OFF CLEAR S=0 I=2 DO WHILE I=100 S=S+I I=I+2 ENDDO ?“246100”,S SET TALK ON RETURN,【例6-11】顯示學(xué)生表中在1985年以后出生的學(xué)生記錄。 SET TALK OFF CLEAR OPEN DATABASE 學(xué)生 USE 學(xué)生 DO WHILE .NOT. EOF() IF 出生日期=CTOD(“1985-01-01”) DISPLAY ENDIF SKIP ENDDO USE CLOSE DATABASE RETURN,【例6-12】 將自然數(shù)中的前N個(gè)完全平方數(shù)進(jìn)行累加,當(dāng)累加之和超過(guò)100時(shí)停止累加,即求M=02+12+22+(N-1)2。要求程序顯示每次的累加和。 說(shuō)明:1. 什么是完全平方數(shù)? 一個(gè)數(shù)如果是另一個(gè)整數(shù)的完全平方,那么我們就稱這個(gè)數(shù)為完全平方數(shù),也叫做平方數(shù)。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400 2. 什么是完全立方數(shù)? 一個(gè)數(shù)如果是另一個(gè)整數(shù)的完全立方,那么我們就稱這個(gè)數(shù)為完全立方數(shù),也叫做立方數(shù)。例如:1,8等,SET TALK OFF CLEAR STORE 0 TO I,M DO WHILE .T. IF M100 EXIT ELSE M=M+I2 ENDIF ?”完全平方數(shù)累加和:”+STR(M,6) I=I+1 ENDDO SET TALK ON return,語(yǔ)句格式: FOR = TO STEP ENDFOR|NEXT,2. FOR循環(huán)語(yǔ)句,使用FOR循環(huán)語(yǔ)句的有關(guān)說(shuō)明: (1)省略STEP ,則步長(zhǎng)為默認(rèn)值1; (2)初值、終值和步長(zhǎng)都可以是數(shù)值表達(dá)式,但這些表達(dá)式僅在循環(huán)語(yǔ)句開始執(zhí)行時(shí)計(jì)算一次。循環(huán)語(yǔ)句執(zhí)行過(guò)程中,初值、終值和步長(zhǎng)是不會(huì)改變的,并由此確定循環(huán)的次數(shù); (3)可以在循環(huán)體內(nèi)改變循環(huán)變量的值,但會(huì)改變循環(huán)執(zhí)行次數(shù); (4)EXIT和LOOP命令可以出現(xiàn)在循環(huán)體內(nèi),【例6-13】求1000之內(nèi)所有偶數(shù)之和。 SET TALK OFF CLEAR S=0 FOR I=0 TO 1000 STEP 2 S=S+I NEXT ?“1000之內(nèi)所有偶數(shù)之和為”,S SET TALK ON RETURN,【例6-14】從鍵盤輸入10個(gè)數(shù),編程找出其中的最大值和最小值。 SET TALK OFF CLEAR INPUT “請(qǐng)從鍵盤輸入一個(gè)數(shù):” TO A STORE A TO MAX_VAL,MIN_VAL FOR I=2 TO 10 INPUT “請(qǐng)從鍵盤輸入一個(gè)數(shù):” TO A IF MAX_VALA MIN_VAL=A ENDIF ENDFOR ?“最大值為:” , MAX_VAL ?“最小值為:” , MIN_VAL SET TALK ON RETURN,3. “指針”型循環(huán)控制語(yǔ)句,(1)語(yǔ)句格式: SCANFOR WHILE ENDSCAN (2)語(yǔ)句功能: 該語(yǔ)句在指定的范圍內(nèi),用數(shù)據(jù)記錄指針來(lái)控制循環(huán)次數(shù)。執(zhí)行語(yǔ)句時(shí),首先判斷函數(shù)EOF( )的值,若其值為“真”,則結(jié)束循環(huán),否則,結(jié)合條件表達(dá)式1或條件表達(dá)式2,執(zhí)行命令行序列,記錄指針移到指定的范圍和條件內(nèi)的下一條記錄,重新判斷函數(shù)EOF( )的值,直到函數(shù)EOF( )的值為真時(shí)結(jié)束循環(huán)。,【例6-16】分別統(tǒng)計(jì)“學(xué)生”表中男生和女生的人數(shù)。,SET TALK OFF CLEAR OPEN DATABASE 學(xué)生 USE 學(xué)生 sotre 0 to x,y SCAN IF 性別=“男” x=x+1 ELSE y=y+1 ENDIF,ENDSCAN ? “男生人數(shù):”,x,”女生人數(shù):”,y USE CLOSE DATABASE SET TALK ON RETURN,【例6-17】顯示“學(xué)生”表中入學(xué)成績(jī)?cè)?00分以上的學(xué)生名單。 SET TALK OFF CLEAR OPEN DATABASE 學(xué)生 USE 學(xué)生 SCAN FOR 入學(xué)成績(jī)600 DISPLAY 學(xué)號(hào),姓名,入學(xué)成績(jī) ENDSCAN USE CLOSE DATABASE SET TALK ON RETURN,4. 多重循環(huán),多重循環(huán)即循環(huán)的嵌套,是指在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體中又包含另一個(gè)循環(huán)。 外循環(huán)我們稱外層循環(huán)為外循環(huán) 內(nèi)循環(huán)被包含的循環(huán)為內(nèi)循環(huán)。 嵌套層數(shù)一般沒有限制,但內(nèi)循環(huán)的循環(huán)體必須完全包含在外循環(huán)的循環(huán)體中,不能相互交叉。,下面是一個(gè)DO WHILEENDDO循環(huán)嵌套的一般形式: DO WHILE DO WHILE ENDDO ENDDO,下面是一個(gè)DO WHILEENDDO循環(huán)嵌套一個(gè)FOR 循環(huán)的一般形式: DO WHILE FOR = TO STEP ENDFOR|NEXT ENDDO,下面是一個(gè)FOR循環(huán)嵌套另一個(gè)FOR循環(huán)的一般形式: FOR = TO STEP FOR = TO STEP ENDFOR|NEXT ENDFOR|NEXT,下面是一個(gè)FOR循環(huán)嵌套一個(gè)DO WHILEENDDO循環(huán)的一般形式: FOR = TO STEP DO WHILE ENDDO ENDFOR|NEXT,【例】從鍵盤輸入n個(gè)實(shí)數(shù),對(duì)它們按從小到大的順序排序,并將排序后的這n個(gè)數(shù)依次輸出。,【例】從鍵盤輸入n個(gè)實(shí)數(shù),對(duì)它們按從小到大的順序排序,并將排序后的這n個(gè)數(shù)依次輸出。,* * 本程序使用冒泡排序法對(duì)給定的n個(gè)實(shí)數(shù)進(jìn)行排序 * * SET TALK OFF CLEAR dimension a(100) input “自然數(shù) n=” to n for i=1 to n ? “實(shí)數(shù) a(“+str(i,3)+”)=“ input “” to a(i) endf

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論