




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
會計學1第八章程序設計基礎(1)命令方式【命令】MODIFYCOMMAND<程序文件名>【功能】打開一個編輯器窗口,用于建立或修改程序文件。【例8-1】用命令方式建立能顯示教師表中職稱為講師的教師記錄的程序文件P1.PRG。操作步驟如下:①在命令窗口中輸入下列命令,進入“程序文件”編輯窗口。
MODIFYCOMMANDP1.PRG②在“程序文件”編輯窗口,輸入下列命令,如圖8-1所示。③輸入完成后,在“文件”菜單中選擇“保存”命令,在“對話框”的“保存文檔為”文本框中輸入P1.PRG,保存文件。圖8-1
建立程序文件P1.PRG窗口
第1頁/共64頁SettalkoffClearUse學生Appendblank@6,30say“學號”Get學號@6,50say“姓名”Get姓名@8,30say“性別”Get性別@8,40say“出生年月”Get出生年月@10,30say“入校總分”Get入校總分@10,50say“三好生”Get三好生Read第2頁/共64頁ClearBrowseSetTalkonreturn第3頁/共64頁
(2)菜單方式用菜單方式的操作步驟:①如果是新建文件,在“文件”菜單中選擇“新建”命令選項,在屏幕顯示的“新建”對話框中選擇“程序”項進入程序編輯窗口。如果是修改已有的程序文件,則選擇“文件”菜單中選擇“打開”命令選項,在屏幕顯示的“打開”對話框中輸入或選擇要修改的文件名,系統自動將按輸入或選擇的文件名將程序文件調入內存并顯示在文本編輯窗口以供修改。
②在程序編輯窗口逐條輸入或修改程序語句。③輸入或修改完成后,在“文件”菜單中選擇“保存”或“另存為”命令,保存文件【例8-2】用菜單方式修改程序文件P1.PRG,使之顯示教師表中職稱為教授或副教授的教師記錄,并另存文件為P2.PRG。操作步驟如下:①選擇“文件”菜單中的“打開”命令選項,在屏幕顯示的“打開”對話框中輸入程序文件名:P1.PRG。進入“程序文件”編輯窗口。②在“程序文件”編輯窗口,對第二條命令進行修改,如圖8-2所示。③輸入完成后,在“文件”菜單中選擇“另存為”命令,在“對話框”的“保存文檔為”文本框中輸入P2.PRG,保存文件。
圖8-2
修改程序文件P1.PRG窗口
第4頁/共64頁2.執行程序文件執行程序文件就是依次執行程序文件中的每條命令或語句。程序文件的執行有命令和菜單兩種方式。(1)命令方式【命令】DO<程序文件名>【功能】在命令窗口運行以.PRG為擴展名的程序文件。(2)菜單方式在VisualFoxPro系統環境下,選擇“程序”菜單中的“運行”命令選項,在顯示的對話框中確定或輸入要執行的程序文件名。【例8-3】用菜單方式運行程序文件P2.PRG。操作步驟如下:選擇“程序”菜單中的“運行”命令選項,在顯示的對話框中確定或輸入要執行的程序文件名:P2.PRG,然后單擊對話框中的運行按鈕,得到如圖8-3所示的運行結果。
圖8-3
運行程序文件P2.PRG窗口
第5頁/共64頁8.1.2程序中常用的命令在程序文件中常常要用到一些交互式輸入、輸出命令,注釋命令,程序結束專用命令及系統狀態的設置命令。1.交互式輸入命令輸入命令用于在程序的執行過程中給程序賦值。在程序文件中,交互式輸入命令有以下幾種形式:(1)賦值命令【命令】STORE<表達式>TO<內存變量名表>或<內存變量>=<表達式>【功能】給內存變量賦值。【說明】STORE命令可以同時給多個內存變量賦值,而<內存變量>=<表達式>命令只能給一個變量賦值。(2)字符串輸入命令【命令】ACCEPT[<提示信息>]TO<內存變量>【功能】暫停程序的運行,等待用戶從鍵盤上輸入一串字符,存入指定的內存變量中。【說明】<提示信息>用于提示用戶進行操作的信息。從鍵盤接受的字符串,可以加定界符也可以不加定界符,系統都將其作為字符型數據輸入到內存變量中。
第6頁/共64頁(3)單字符輸入命令【命令】WAIT[<提示信息>][TO<內存變量>]【功能】暫停程序的運行,等待用戶從鍵盤上輸入單個字符后恢復程序的運行。【說明】<提示信息>用于提示用戶進行操作的信息,TO<內存變量>是可選項,當選用時,鍵入的單個字符均作為字符型數據賦給<內存變量>。如果只有WAIT命令,沒有選項,則系統默認的提示信息是:PRESSANYKEYTOCONTINUE…
(4)表達式輸入命令【命令】INPUT[<提示信息>]TO<內存變量>【功能】暫停程序的運行,等待用戶輸入表達式并將其值賦給指定的內存變量。【說明】<提示信息>用于提示用戶進行操作的信息,命令中<內存變量>的類型決定于輸入數據的類型,但不能為M型。如果鍵入的是表達式,本命令先計算出表達式的值,再將結果賦給<內存變量>;如果鍵入的是字符常量、邏輯常量和日期常量時應帶定界符,既字符常量加引號,邏輯常量左右加圓點,日期常量要用CTOD()函數進行轉換。第7頁/共64頁(5)定位輸入命令【命令】@<行,列>SAY<提示信息>GET<變量>READ【功能】在屏幕指定的行列位置上輸入數據。【說明】命令中的各選項說明如下:l
<行,列>是指屏幕窗口的位置。l
SAY<提示信息>給出提示信息。l
GET<變量>取得變量的值。其中<變量>可以是字段變量或內存變量,如果是字段變量,應先打開表文件,如果是內存變量,應先賦值。GET子句必須使用命令READ激活。在帶有多個GET子句的命令后,必須遇到READ命令才能編輯GET中的變量。當光標移出這些GET變量組成的編輯區時,READ命令才執行結束
第8頁/共64頁2.輸出命令輸出命令用于顯示程序中的輸出內容和結果。下面介紹一些常用輸出命令。(1)非格式輸出命令
【命令】?<內存變量名表>或??<內存變量名表>【功能】顯示內存變量、常量或表達式的值。
【說明】?是在光標所在行的下一行開始顯示,而??則是在當前光標位置開始顯示。(2)格式輸出命令
【命令】@<行,列>SAY<表達式>【功能】按指定的坐標位置在屏幕上輸出表達式的值。
【說明】輸出<表達式>的位置由<行,列>指定,<表達式>的內容可以是數值、字符、內存變量和字段變量。(3)文本輸出命令
【命令】TEXT <文本信息> ENDTEXT【功能】將TEXT和ENDTEXT之間的文本信息照原樣輸出。
【說明】TEXT與ENDTEXT在程序中必須配對。第9頁/共64頁3.其他程序運行命令在程序中,有一些專門用于程序開始和結束時的命令以及對程序進行說明的命令,常用的有以下幾個:(1)清屏命令【命令】CLEAR【功能】清除屏幕上的內容。(2)返回命令【命令】RETURN【功能】結束當前程序的運行。【說明】如果當前程序無上級程序,該命令用于結束程序的運行,返回到命令窗口。如果當前程序是一個子程序,該命令用于結束程序的運行,返回到調用該程序的上級程序中。(3)終止程序執行命令【命令】CANCEL【功能】終止程序執行并關閉所有打開的文件,返回到系統的命令窗口。第10頁/共64頁(4)退出系統命令【命令】QUIT【功能】終止程序運行,關閉所有打開的文件,退出VisualFoxPro系統,返回到Windows環境。(5)注釋命令【命令】NOTE<注釋內容>或*<注釋內容>或&&<注釋內容>【功能】用于在程序中加入說明,以注明程序的名稱、功能或其他備忘標記。【說明】注釋命令為非執行語句。其中前兩個命令格式作為獨立的一行語句,第三條命令放在某一個語句的右邊。
第11頁/共64頁4.環境設置命令為了保證程序的正常運行,需要為其設置一定的運行環境。VisualFoxPro系統提供的SET命令組就是用來設置程序運行環境的。這些命令相當于一個狀態轉換開關,當命令置為“ON”時,開啟指定的某種狀態;而置為“OFF”時,則關閉該種狀態。常用的系統環境設置命令有以下幾個:(1)關閉對話命令【命令】SETTALKON|OFF【功能】控制非輸出性的執行結果是否在屏幕上顯示或打印出來。【說明】系統默認值為ON。(2)設置跟蹤命令【命令】SETECHOON|OFF【功能】控制程序文件執行過程中的每條命令是否顯示或打印出來。【說明】系統默認值為OFF。第12頁/共64頁(3)設置打印命令【命令】SETPRINTERON|OFF【功能】控制程序執行的結果到打印機或顯示在屏幕上。【說明】在命令格式中選擇ON表示將輸出結果送到打印機,選擇OFF則將輸出結果顯示在屏幕上,系統默認值為OFF。(4)設置定向輸出命令【命令】SETDEVICETOSCREEN|TOPRINTER|TOFILE<文件名>【功能】控制輸出結果到屏幕、打印機或指定的文件。【說明】在命令格式中選擇SCREEN表示將輸出結果顯示在屏幕上,選擇PRINTER表示將輸出結果送到打印機,選擇FILE<文件名>則將輸出結果送到指定文件。(5)設置精確比較命令【命令】SETEXACTTOON|OFF【功能】在進行字符比較時是否需要精確比較。【說明】在命令格式中選擇ON表示需要精確比較,選擇OFF表示不需要精確比較,系統默認值為OFF。第13頁/共64頁(6)設置保護狀態命令【命令】SETSAFETYON|OFF【功能】系統在用戶提出對文件重寫或刪除的要求時給出警告提示。【說明】需要提示選擇ON,否則選擇OFF。系統默認為ON。(7)設置刪除記錄標志命令【命令】SETDELETEDON|OFF【功能】屏蔽或處理有刪除標記的記錄。【說明】在命令格式中選擇ON時,命令將不對有刪除標記的記錄進行操作,但索引命令除外。系統默認值為OFF。
(8)設置屏幕狀態命令【命令】SETCONSOLEON|OFF【功能】發送或暫停輸出內容到屏幕上。【說明】系統默認值為ON。(9)設置缺省目錄命令【命令】SETDEFAULTTO<默認目錄>【功能】用于設置系統默認的磁盤文件目錄。
第14頁/共64頁5.程序中常用的命令綜合應用【例8-4】編寫程序P3.PRG,其程序功能是在學生表中追加一條記錄。編寫程序如圖8-4所示,運行程序P3.PRG,在如下輸入界面填寫數據,顯示結果如圖8-5所示。
圖8-4
程序P3.PRG的編寫窗口
圖8-5
程序P3.PRG的輸出結果
第15頁/共64頁【例8-5】編寫程序P4.PRG,其程序功能是在學生表中查詢某一天出生的學生記錄。編寫程序如圖8-6所示,運行程序P4.PRG,在輸入了要查詢學生的出生日期之后,系統輸出查詢的結果。圖8-6
程序P4.PRG編寫窗口
第16頁/共64頁*用日期查詢某一天出生的學生的記錄
settalkoffcloseallclearusexuesheng2?"出生日期的正確格式:'mm/dd/yy'"input"請輸入出生日期"tosd&&sd用于存放輸入學生的出生日期
locateallfor出生年月=CTOD(sd)?"以下為查詢的顯示結果"@5,10say學號
@5,30say姓名
@7,10say性別
@7,20say出生年月
wait@10,10say入校總分settalkonreturn第17頁/共64頁問題1:能不能輸入05/12/84
問題2:locateallfor出生年月=CTOD(sd)
能不能用SQL語句來代替?第18頁/共64頁【例8-6】編寫程序P5.PRG,其程序功能是在學生表中刪除學生記錄。編寫程序如圖8-7所示,運行程序P5.PRG,在輸入了要查詢學生的姓名之后,系統顯示要刪除學生的記錄,并確認刪除。程序運行結果的屏幕顯示如下:圖8-7
程序P5.PRG編寫窗口
第19頁/共64頁settalkoffcleartext##刪除學生記錄程序##endtextusexuesheng2accept"請輸入學生姓名"tosmlocateallfor姓名=smdisplaywait"輸入Y刪除記錄"delete??"",sn,"學生記錄已刪除!"settalkonreturn第20頁/共64頁8.1.3程序的基本結構在VisualFoxPro中,結構化程序設計主要依靠系統提供的結構化語句構成,程序的基本結構有三種:順序結構、分支結構和循環結構。每一種基本結構可以包含一個或多個語句。1.順序結構順序結構是指程序按照語句排列的先后順序逐條的執行。它是程序中最簡單、最常用的基本結構。VisualFoxPro中,大多數命令都可以作為順序結構中的語句來實現編程。在例8-4、例8-5和例8-6的程序中都是采用順序結構。2.分支結構分支結構是在執行程序時,按照一定的條件選擇不同的語句,用來解決選擇、轉移的問題。分支結構的基本形式有三種。(1)單向分支單向分支,即根據用戶設置的條件表達式的值,決定某一操作是否執行。【語句】IF<條件表達式><命令行序列>ENDIF【功能】當條件表達式的值為真時,執行<命令行序列>,否則執行ENDIF后面的命令。【說明】<條件表達式>是關系表達式或邏輯表達式,IF和ENDIF必須成對使用。<命令行序列>可以由一條語句或多條語句構成。第21頁/共64頁第22頁/共64頁【例8-7】編寫程序P6.PRG,其程序功能是在教師表中,將陳靜教師的職稱由講師改成副教授。編寫程序如圖8-8所示,運行程序P6.PRG,先顯示原數據表的內容,見圖8-9,再顯示修改后數據表的內容,見圖8-10,對比兩個數據表的內容,可看見,陳靜教師的職稱已由講師改成了副教授。圖8-8
程序P6.PRG編寫窗口圖8-10
修改后教師表的內容圖8-9
修改前教師表的內容第23頁/共64頁SettalkoffClearUseteachersBrowselastLocateallfor姓名="陳靜"If
職稱="講師"Replace職稱with"副教授"EndifBrowselastSettalkonreturn第24頁/共64頁(2)雙向分支雙向分支,即根據用戶設置的條件表達式的值,選擇兩個操作中的一個來執行。【語句】IF<條件表達式><命令行序列1>ELSE<命令行序列2>ENDIF【功能】執行該命令時,首先判斷<條件表達式>的值,若為真,則執行<命令行系列1>,然后執行ENDIF后的命令;若為假,則執行<命令行序列2>,然后執行ENDIF后的命令。【說明】IF…ELSE…ENDIF語句必須成對使用。<命令行序列1>和<命令行序列2>中可以嵌套IF命令。第25頁/共64頁【例8-8】編寫程序P7.PRG,其程序功能是在教師表中,查詢陳靜教師的記錄,如果找到記錄,就顯示該記錄,否則,顯示“查無此人”。編寫程序如圖8-11所示。運行程序P7.PRG,由于數據表中有陳靜教師的記錄,所以在程序運行后顯示了陳靜教師的記錄內容,如圖8-12所示。圖8-11
程序P7.PRG編寫窗口
圖8-12
程序P7.PRG執行的結果
第26頁/共64頁settalkoffclearuseteacherslocateallfor姓名="陳靜"if.not.eof()Browsefor姓名="陳靜"else@2,30say"查無此人"endifsettalkonreturn第27頁/共64頁
(3)多向分支多向分支,即根據多個條件表達式的值,選擇多個操作中的一個來執行。【語句】DOCASECASE<條件表達式1><命令行序列1>CASE<條件表達式2><命令行序列2>......CASE<條件表達式N><命令行序列N>OTHERWISE<命令行序列N+1>ENDCASE【功能】系統從多個條件中依次測試<條件表達式>的值,若為真,即執行相應<條件表達式>后的<命令行序列>;若所有的<條件表達式>的值均為假,則執行OTHERWISE后面的<命令行序列>。【說明】DOCASE和第一個CASE子句之間不能插入任何命令。DOCASE和ENDCASE必須配對使用。
第28頁/共64頁【例8-9】編寫程序P8.PRG,其程序功能是根據用戶的選擇,顯示不同數據表的內容。編寫程序如圖8-13所示,運行程序P8.PRG,屏幕顯示如下提示,當輸入2,將顯示教師表的內容。
圖8-13
程序P8.PRG編寫窗口
第29頁/共64頁SettalkoffClearText
數據表內容顯示
1.學生表2.教師表3.課程表EndtextWait“請輸入你的選擇(1~3)toanDocasecasean=“1”browselastcasean=“2”useteachersbrowselast第30頁/共64頁Otherwise?”選擇錯誤!“
endcase第31頁/共64頁3.循環結構循環結構是重復執行一段命令序列若干次或重復執行一段命令序列直到滿足某種條件為止。循環結構可以簡化程序,提高程序效率。常用的循環語句有以下幾種形式。(1)條件循環條件循環是根據條件表達式的值,決定循環體內語句的執行次數,也稱為當型循環。【語句】DOWHILE<條件表達式><命令行序列1>[LOOP]<命令行序列2>[EXIT]<命令行序列3>ENDDO【功能】語句執行時,先判斷<條件表達式>的值,若為真,則執行循環體內的命令,即DO與ENDDO之間的命令;若為假,則執行ENDDO后面的命令。第32頁/共64頁【說明】對循環語句進行以下說明:l
DOWHILE和ENDDO子句要配對使用。l
DOWHILE<條件表達式>是循環語句的入口;ENDDO是循環語句的出;中間<命令行序列>是重復執行的循環體。l
LOOP和EXIT只能在循環語句中使用,其中LOOP是轉到循環的入口語句;EXIT是強行退出循環的語句。
l
循環結構允許嵌套,這種嵌套不僅限于循環結構自身的嵌套,而且還可以是和選擇結構的相互嵌套。
第33頁/共64頁【例8-10】編寫程序P9.PRG,其程序功能是統計學生表中入校總分在580分以上的學生人數。編寫程序如圖8-14所示,運行程序P9.PRG,屏幕先顯示學生表中入校總分在580分以上的學生記錄內容,如圖8-15所示,再以如下格式顯示統計出的學生表中入校總分在580分以上的學生人數。
圖8-14
程序P9.PRG編寫窗口
圖8-15
入校總分在580分以上的學生記錄
第34頁/共64頁Settalkoffclearusexuesheng2nu=0browsefor入校總分>=580dowhile.not.eof()if入校總分>=580NU=nu+1endifSkipEnddo@2,30say“入校總分在580分以上的人數”@2,60sayNU第35頁/共64頁【例8-11】編寫程序P10.PRG,其程序功能是設計一個對學生表進行管理主控程序,用戶通過鍵盤選擇菜單,以實現不同的功能模塊的調用或退出程序運行。編寫程序如圖8-16所示,運行程序P10.PRG,屏幕顯示如下:當輸入5,輸入的代號不在提示的范圍內,系統提示重新選擇,再次顯示選擇提示信息。
圖8-16
程序P10.PRG編寫窗口
第36頁/共64頁settalkoffdowhile.t.cleartext
學生檔案管理****************
1.查詢2.修改
3.統計4.退出endtextwait"請輸入功能選擇代號(1~4)"toandocasecasean="1"do查詢
casean="2"do修改
casean="3"do統計
casean="4"exitotherwisewait"選擇錯誤,按任意鍵重新選擇!"endcaseenddoclearallsettalkon
第37頁/共64頁(2)計數循環計數循環是根據用戶設置的循環變量的初值、終值和步長,決定循環體內語句執行次數。【語句】FOR<循環變量>=<循環初值>TO<循環終值>[STEP<步長>]<命令行序列1>[LOOP]<命令行序列2>[EXIT]<命令行序列3>ENDFOR|NEXT【功能】系統執行該命令時,首先將循環初值賦給循環變量,然后判斷循環變量的值是否超過終值,若超過則跳出循環,執行ENDFOR后面的命令,否則執行循環體內的命令序列。當遇到ENDFOR子句時,返回FOR命令,并將循環變量的值加上步長值再一次與循環終值比較,如此重復執行,直到循環變量的值超過循環終值。【說明】對循環語句進行以下說明:l
步長值省略時,系統默認步長值為1。當初值小于終值時,步長值為正值。當初值大于終值時,步長值為負值。步長值不能為0,否則造成死循環。l
在循環體內不要隨便改變循環變量的值,否則會引起循環次數發生改變。l[LOOP]和[EXIT]命令的功能和用法與條件循環中該命令的用法相同
第38頁/共64頁【例8-12】編寫程序P11.PRG,其程序功能是用計數循環統計學生表中入校總分在580分以上的學生人數。編寫程序如圖8-17所示,運行程序P11.PRG,屏幕以如下格式顯示統計出的學生表中入校總分在580分以上的學生人數(與例8-10的結果相同)。
圖8-17
程序P11.PRG編寫窗口
第39頁/共64頁settalkoffclearusexuesheng2countalltornugotopnu=0fori=1tornustep1if入校總分>=580nu=nu+1endifskipendfor@2,30say"入校總分在580以上的人數:"@2,60saynuclearallsettalkonreturn第40頁/共64頁(3)指針循環指針循環是在數據表中建立的循環,它是根據用戶設置的當前記錄指針,對一組記錄進行循環操作。【語句】SCAN[<范圍>][FOR<條件表達式1>][WHILE<條件表達式2>]<命令行序列1>[LOOP]<命令行序列2>[EXIT]<命令行序列3>ENDSCAN【功能】該語句在指定的范圍內,用記錄指針來控制循環次數。執行語句時,首先判斷函數EOF()的值,若為“真”,則結束循環,執行ENDSCAN后面的語句;否則,結合<條件表達式1>或<條件表達式2>執行<命令行序列>,記錄指針移到指定的范圍和條件內的下一條記錄,重新判斷函數EOF()的值,直到EOF()的值為“真”時結束循環。【說明】對循環語句進行以下說明:l
SCAN…ENDSCAN循環語句中隱含函數EOF()和命令SKIP的處理。l
無<范圍>選項時,則表示對所有記錄進行處理。l
[LOOP]和[EXIT]命令的功能和用法與條件循環中該命令的用法相同。第41頁/共64頁【例8-13】編寫程序P12.PRG,其程序功能是用指針循環統計學生表中入校總分在580分以上的學生人數。編寫程序如圖8-18所示,運行程序P12.PRG,屏幕顯示格式與例8-10的結果相同。
圖8-18
程序P12.PRG編寫窗口
第42頁/共64頁settalkoffclearusexuesheng2nu=0scanallfor入校總分>=580nu=nu+1endscan@2,30say"入校總分在580分以上得人數:"@2,60saynuclearallsettalkonreturn第43頁/共64頁(4)多重循環多重循環是指在一個循環語句內又包含另一個循環語句,多重循環也稱為循環嵌套。下面以條件循環為例,進行說明。【語句】DOWHILE<條件表達式1><命令行序列11>DOWHILE<條件表達式2><命令行序列21>……ENDDO<命令行序列12>ENDDO【功能】在多重循環中,首先從外循環進入內循環,執行內循環的語句。當內循環的條件為假時,返回到外循環;當外循環的條件為真時,又進入內循環;否則,退出循環。【說明】對循環語句進行以下說明:①循環嵌套層次不限,但內循環的所有語句必須完全嵌套在外層循環之中。否則,就會出現循環的交叉,造成邏輯上的混亂。②循環結構和分支結構允許混合嵌套使用,但不允許交叉。其入口語句和相應的出口語句必須成對出現。第44頁/共64頁【例8-14】編寫程序P13.PRG,其程序功能是使用多重循環打印一個九九乘法口訣表。編寫程序P13.PRG,運行程序后屏幕顯示九九乘法口訣表。程序和結果如圖8-19所示。
圖8-19
程序P13.PRG編寫窗口和九九乘法口訣表屏幕顯示
第45頁/共64頁settalkoffclearfory=1to9forx=1toyz=x*y??""+Str(y,1)+"*"+Str(x,1)+"="+Str(z,2)+""endforx?endforysettalkonreturn
第46頁/共64頁8.1.4過程及過程調用1.過程概念在程序設計中,經常會遇到有些運算或程序段落在程序中多次調用的情況,為了有效地解決上述重復調用,可設計相對獨立并能完成特定功能的程序段,這種程序段稱為過程或子程序,用于調用程序段的程序稱為主程序。在應用系統的開發中,一般會根據實際的需要將整個系統劃分成若干個模塊,然后在主控模塊的控制下,調用各個功能模塊以實現系統的各種功能操作,通常將這些可調用的功能模塊也設計成過程或子程序。2.過程的建立與調用建立過程的方法與建立一般程序的方法相同,所不同的是在每個過程中至少要有一個返回語句。【返回語句】RETURN[<表達式>|TO<程序文件名>|TOMASTER]【調用命令】DO<過程名>【功能】執行DO調用命令時,將指定的過程調入內存并執行,當執行到RETURN命令時,返回到調用該子程序的主程序,并執行調用命令下的第一條可執行命令。【說明】在返回語句中,若選擇可選項<表達式>,將表達式的值返回給調用程序。選擇可選項[TO<程序文件名>],可直接返回指定的程序文件。選擇可選項[TOMASTER],則不論前面有多少級調用而直接返回到第一級主程序。
第47頁/共64頁【例8-15】編寫程序P14.PRG,其程序功能是計算S=X!+Y!+Z!。編寫程序如圖8-20所示,運行程序P14.PRG,屏幕顯示如下的輸入數據和輸出結果。圖8-20
程序P14.PRG主程序和過程編寫窗口
第48頁/共64頁3.過程文件過程是作為一個文件獨立地存儲在磁盤上,每次運行時,必須將程序調入內存,為減少磁盤文件的打開次數,提高系統的運行效率,可以把多個過程寫入到一個過程文件中。一個過程文件由多個過程組成,過程文件的擴展名仍然是.PRG。(1)建立過程文件【命令】MODIFYCOMMAND<過程文件名>【功能】建立過程文件。過程文件的基本書寫格式:PROCEDURE<過程名1><命令序列1>RETURNPROCEDURE<過程名2><命令序列2>RETURN……PROCEDURE<過程名N><命令序列N>RETURN
第49頁/共64頁(2)打開過程文件【命令】SETPROCEDURETO<過程文件名>【功能】打開指定的過程文件,將過程文件中所包含的子程序全部調入內存。【說明】系統在同一時刻只能打開一個過程文件,打開新過程文件的同時將關閉原來打開的過程文件。若要修改過程文件的內容,一定要先關閉該過程文件。(3)執行過程文件中的過程【命令】DO<過程名>【功能】調用過程文件中的指定過程。(4)關閉過程文件【命令】CLOSEPROCEDURE
或SETPROCEDURETO【功能】關閉已打開的過程文件。
第50頁/共64頁【例8-16】編寫程序P15.PRG,其程序功能是求3~100之間的所有素數。注意:對一個自然數M(取值在3~100之間的奇數)求素數的方法是:將M依次除以3到M的算數平方根之間的所有奇數,若均不能被整除,則M即為素數,否則,M不是素數。編寫程序如圖8-21所示,運行程序P15.PRG,屏幕顯示如下的輸出結果。3~100之間的所有素數:3 5 7 11 1317 19 23 29 3137 41 43 47 5359 61 67 71 7379 83 89 97
圖8-21
程序P15.PRG主程序和過程文件編寫窗口
第51頁/共64頁settalkoffclearj=0setproceduretop3_1dox1form=3to100step2i=3n=int(sqrt(m))dox2endforsetproceduretosettalkonreturnprocedurex2fori=3tonstep2ifint(m/i)=m/ireturnendifendforifint(j/5)=j/5?Melse??Mendifj=j+1return第52頁/共64頁過程程序procedurex1?"3~100之間的所有素數:"?Return第53頁/共64頁8.1.5變量的作用域和參數調用1.變量的作用域在程序設計中,特別是模塊程序中,往往會用到許多內存變量,這些內存變量有的在整個程序運行過程中起作用,而有的內存變量只在某些程序模塊中起作用,內存變量的這些作用范圍稱為內存變量的作用域。內存變量的作用域根據作用范圍可分為全局變量和局部變量。(1)全局變量全局變量是指在程序的任何嵌套中及在程序執行期間始終有效的變量。程序執行完畢,它們不會在內存自動釋放。全局變量的定義如下:【命令】PUBLIC<內存變量表>【功能】將內存變量名表中的變量說明為全局變量。【說明】<內存變量表>中的變量可以是簡單變量,也可以是下標變量。
第54頁/共64頁(2)局部變量局部變量是指未經PUBLIC命令定義的,只在建立它的過程及下級過程中有效的內存變量。建立局部變量的程序執行完畢,局部變量的值將被自動清除。凡是過程中未經特殊說明的內存變量,系統一律認為是局部變量,這種方式稱做隱含定義方式。也可以使用專門命令來定義局部變量,即顯式定義方式。【命令】PRIVATE<內存變量表>[ALL[LINK|EXCEPT<通配符>]]【功能】定義選定的內存變量為局部變量。【說明】在同一過程中,用隱式或顯式定義的局部變量的作用域完全相同。在主程序或上級過程中未經PRIVATE語句定義的局部變量,在下級過程中也未經顯式定義,那么它的新值可以帶回主程序或上級過程;若在下級過程中進行了顯式定義,其新值不能帶回主程序或上級過程中使用。
第55頁/共64頁有一個程序和兩個過程文件*主程序P.PRG*過程P1.PRGSETTALKOFFPRIVATEBA=0A=123B=0B=321DOP1?A,B?A,BRETURNRETURN(1)過程P1的輸出”?A,B”為()(A)123321(B)123XYZ(C)OPQXYZ(D)1230(2)主程序P的輸出”?A,B”為()(A)123321(B)123XYZ(C)OPQXYZ(D)1230第56頁/共64頁2.過程的帶參調用在調用過程時,有時需要將數據傳遞到調用過程,有時又需要從調用過程將數據返回。實現數據相互傳遞。VisualFoxPro為此提供了過程的帶參調用方法,這種方法是:在調用過程的命令和被調用過程的相關語句中,分別設置數量相同、數據類型一致且排列順序相互對應的參數表。調用過程的命令將一系列參數的值傳遞給被調用過程中的對應參數,被調用過程運行結束時,再將參數的值返回到調用它的上一級過程或主程序中。這種調用是通過帶參過程調用命令和接受參數命令實現的。(1)帶參調用【命令】DO<子程序名>WITH<參數表>【功能】調用一般過程或過程文件中的過程,并為被調用過程提供參數。【說明】該命令只用在調用過程的程序中。此處<參數表>又稱為實參表,其中的參數可以是常量、已賦值的變量或數值表達式,參數之間用逗號分開。(2)接受參數【命令】PARAMETERS<參數表>【功能】接受調用過程的命令傳遞過來的參數。【說明】該命令必須位于被調用過程的第一條可執行語句處。此處<參數表>又稱為形參表,其中的參數一般為內存變量。形參與實參的個數應相等、數據類型和個數要對應相同。第57頁/共64頁【例8-18】編寫程序P17.PRG,其程序功能是用帶參調用方法計算梯形的面積。編寫程序如圖8-24(a)、(b)所示,運行程序P17.PRG,屏幕顯示如下的輸入界面和輸出結果:(a)(b)圖8-24
程序P17.PRG主程序和調用過程編寫窗口第58頁/共64頁主程序SETTALKOFF*于程序SUB.PRGCLEARPARAMETERSI.JN=4M=1①K=1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025安全標準化安全培訓考試試題答案可打印
- 2025日常安全培訓考試試題及完整答案【名校卷】
- 2025屆湖南省益陽市桃江縣七下數學期末調研模擬試題含解析
- 2025年眼鏡行業現狀與投資分析報告
- 陜西省西安交通大附中2025年七年級數學第二學期期末學業水平測試模擬試題含解析
- 食堂地方特色餐飲合作合同
- 2025年化纖用漿粕市場分析報告
- 吉林省前郭爾羅斯蒙古族自治縣2025屆八下數學期末檢測模擬試題含解析
- 山東省濟寧市、曲阜市2025屆七下數學期末綜合測試試題含解析
- 購房者信用評估協議
- 湖北省宜昌市2023~2024學年高二數學下學期5月聯合測評試題含答案
- 2025-2030中國烘箱行業市場發展趨勢與前景展望戰略研究報告
- 企業會計準則實施典型案例
- 玉雕工藝上課課件
- 2025年安全生產考試題庫:新能源行業安全規范試題
- 浙江明體新材料科技有限公司年產10000噸聚醚多元醇彈性體建設項目環評報告
- 湖北省2025屆高三(4月)調研模擬考試物理試題及答案
- 機駕長習題+答案
- 學生宿舍衛生評比方案
- 小學生入隊的試題及答案
- 2025年中鐵特貨物流股份有限公司招聘(75人)筆試參考題庫附帶答案詳解
評論
0/150
提交評論