《實(shí)驗(yàn)經(jīng)濟(jì)學(xué)》課件第7講 經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)方法_第1頁(yè)
《實(shí)驗(yàn)經(jīng)濟(jì)學(xué)》課件第7講 經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)方法_第2頁(yè)
《實(shí)驗(yàn)經(jīng)濟(jì)學(xué)》課件第7講 經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)方法_第3頁(yè)
《實(shí)驗(yàn)經(jīng)濟(jì)學(xué)》課件第7講 經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)方法_第4頁(yè)
《實(shí)驗(yàn)經(jīng)濟(jì)學(xué)》課件第7講 經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)方法_第5頁(yè)
已閱讀5頁(yè),還剩248頁(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)介

《實(shí)驗(yàn)經(jīng)濟(jì)學(xué)》第七講:

經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)方法財(cái)經(jīng)大學(xué)經(jīng)濟(jì)學(xué)院-經(jīng)濟(jì)學(xué)實(shí)驗(yàn)室1《實(shí)驗(yàn)經(jīng)濟(jì)學(xué)》第七講:

經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)方法1確保實(shí)驗(yàn)結(jié)果的有效性,實(shí)驗(yàn)室實(shí)驗(yàn)通常兩小時(shí)內(nèi)結(jié)束人力組織十幾個(gè)甚至二十幾個(gè)交易回合每個(gè)交易回合隨機(jī)配對(duì)怎么辦?開(kāi)發(fā)計(jì)算機(jī)程序2確保實(shí)驗(yàn)結(jié)果的有效性,實(shí)驗(yàn)室實(shí)驗(yàn)通常兩小時(shí)內(nèi)結(jié)束2起先,開(kāi)發(fā)實(shí)驗(yàn)程序只是為了更充分地掌握數(shù)據(jù)、減少實(shí)驗(yàn)運(yùn)行失誤近年的發(fā)展表明,實(shí)驗(yàn)運(yùn)行(交易)過(guò)程的電子化為實(shí)驗(yàn)方法開(kāi)辟了新的天地大大降低了交易成本拓展了市場(chǎng)參與者的市場(chǎng)語(yǔ)言新市場(chǎng)機(jī)制在互聯(lián)網(wǎng)和電子商務(wù)時(shí)代隨處可見(jiàn)網(wǎng)絡(luò)環(huán)境下設(shè)計(jì)新機(jī)制并運(yùn)用實(shí)驗(yàn)手段檢驗(yàn)新機(jī)制的特性,已經(jīng)成了實(shí)驗(yàn)經(jīng)濟(jì)學(xué)的重要發(fā)展方向3起先,開(kāi)發(fā)實(shí)驗(yàn)程序只是為了更充分地掌握數(shù)據(jù)、減少實(shí)驗(yàn)運(yùn)行失誤§1 VisualBasic快速入門4§1 VisualBasic快速入門4討論的要點(diǎn)對(duì)基本開(kāi)發(fā)環(huán)境的介紹面向?qū)ο蟮某绦蛟O(shè)計(jì)方法變量和變量組選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)對(duì)數(shù)據(jù)的存取運(yùn)用VB實(shí)現(xiàn)實(shí)驗(yàn)室內(nèi)的信息傳遞5討論的要點(diǎn)對(duì)基本開(kāi)發(fā)環(huán)境的介紹5一、VB的基本開(kāi)發(fā)環(huán)境6一、VB的基本開(kāi)發(fā)環(huán)境6運(yùn)行MicrosoftVisualBasic6.0中文版,彈出“新建工程”的對(duì)話窗口。選擇“標(biāo)準(zhǔn)EXE”并點(diǎn)擊按鍵“打開(kāi)”。7運(yùn)行MicrosoftVisualBasic6.0中文88屏幕的中央是對(duì)象窗口。對(duì)象窗口內(nèi)所展示的是一個(gè)空白的窗體窗體的標(biāo)題欄上顯示“Form1”。窗體(Form)是VB程序的用戶界面。程序員決定在窗體上放置哪些內(nèi)容(這些內(nèi)容的學(xué)名叫“控件”)、又要對(duì)這些內(nèi)容進(jìn)行哪些處理;運(yùn)行過(guò)程中,使用者將在窗體上看到這些內(nèi)容的部分或全部,并根據(jù)編程人員的設(shè)計(jì)通過(guò)窗體上的內(nèi)容實(shí)現(xiàn)特定功能。9屏幕的中央是對(duì)象窗口。9屏幕上方所顯示的是標(biāo)題欄、菜單條和工具欄。屏幕的左側(cè)是VB的工具箱,工具箱內(nèi)包含VB的多種控件。“控件”是能夠被放置在窗體上的內(nèi)容。窗體和控件在VB里都被稱作“對(duì)象”。屏幕的右上方所顯示的是工程資源管理器。定義應(yīng)用程序的層次結(jié)構(gòu)。屏幕右下方是屬性窗口。所展示的是當(dāng)前被選中的對(duì)象的各種屬性?!皩傩浴彼枋龅氖荲B中對(duì)象的特征。比如,窗體的屬性包括窗體的名稱、窗體的寬度和高度以及窗體在計(jì)算機(jī)屏幕上的位置等等。10屏幕上方所顯示的是標(biāo)題欄、菜單條和工具欄。10 編寫一個(gè)最簡(jiǎn)單的應(yīng)用程序熟悉一下VB開(kāi)發(fā)環(huán)境,在動(dòng)手的過(guò)程中很多問(wèn)題會(huì)自然而然地明朗……11 編寫一個(gè)最簡(jiǎn)單的應(yīng)用程序熟悉一下VB開(kāi)發(fā)環(huán)境,在動(dòng)手的過(guò)程給窗體和工程命名。選中空白窗體Form1。在屬性窗口的各個(gè)屬性中,點(diǎn)亮“(名稱)”一欄并將窗體的名稱改為“frmHello”。再選中工程資源管理器,點(diǎn)亮根目錄“工程1(工程1)”。選中屬性窗口中“(名稱)”一欄,將工程1的名稱改為“Hello”。通過(guò)菜單將窗體文件“frmHello”和工程“Hello”存儲(chǔ)在適當(dāng)?shù)牡胤健?2給窗體和工程命名。12要給VB程序中的對(duì)象起有意義的名字。便于你追蹤管理這些對(duì)象,也能幫助別的人理解你的程序。按照對(duì)象的類型給名稱加前綴,前綴由三個(gè)小寫字母構(gòu)成。窗體對(duì)象(Form)的前綴是frm圖標(biāo)對(duì)象(Label)的前綴是lbl文本框?qū)ο螅═extBox)的前綴是txt命令按鍵對(duì)象(CommandButton)的前綴是cmd在前綴的后面,加上以大寫字母開(kāi)頭的、有一定意義的單詞來(lái)描述對(duì)象的作用。txtInput是用于輸入的文本框。13要給VB程序中的對(duì)象起有意義的名字。13將對(duì)象窗口最大化并調(diào)整frmHello的邊框?qū)⑵淅?。在屬性窗口中點(diǎn)亮frmHello的“Caption”屬性,將其改為“Hello”??焖匐p擊屏幕左側(cè)工具箱中的圖形控件(Image),在窗體frmHello的中央就會(huì)出現(xiàn)一個(gè)圖形對(duì)象Image1。點(diǎn)擊Image1的“Picture”屬性右側(cè)的省略號(hào)“…”,將會(huì)彈出一個(gè)加載圖片的對(duì)話框。在你的計(jì)算機(jī)內(nèi)選擇你喜歡的圖片(注意,圖片不要太大)并點(diǎn)擊按鍵“打開(kāi)”。調(diào)整Image1的邊框大小并用鼠標(biāo)把Image1拖動(dòng)到窗體的恰當(dāng)位置。14將對(duì)象窗口最大化并調(diào)整frmHello的邊框?qū)⑵淅蟆?41515在Image1的屬性窗口中,將Image1的名稱改為“imgNinghua”,并將“Visible”屬性改為“False”。點(diǎn)擊VB開(kāi)發(fā)環(huán)境屏幕上方工具欄內(nèi)的啟動(dòng)鍵“”來(lái)運(yùn)行程序。我們發(fā)現(xiàn)運(yùn)行中的窗體上并不能見(jiàn)到所載入的圖片。再點(diǎn)擊屏幕上方工具欄內(nèi)的結(jié)束鍵“”以終止程序的運(yùn)行。16在Image1的屬性窗口中,將Image1的名稱改為“img快速雙擊屏幕左側(cè)工具箱中的圖標(biāo)控件(label),在窗體frmHello的中央就會(huì)出現(xiàn)一個(gè)圖標(biāo)Label1。采用類似的步驟,將Label1的名稱改為“l(fā)blHello”并將該圖標(biāo)移動(dòng)到圖片imgNinghua的右側(cè)。選中圖標(biāo)lblHello的“Caption”屬性,并將該屬性的內(nèi)容改為“Hello,everyone.”。隨后再選中圖標(biāo)lblHello的“Font”屬性。點(diǎn)擊該屬性右側(cè)的省略號(hào)“…”,你將會(huì)看到選擇字體的對(duì)話框。選擇小四號(hào)字并調(diào)整lblHello的邊框大小。17快速雙擊屏幕左側(cè)工具箱中的圖標(biāo)控件(label),在窗體fr1818快速雙擊圖標(biāo)lblHello,這時(shí)會(huì)彈出程序代碼窗口,在該窗口內(nèi)會(huì)顯示如下字樣:PrivateSublblHello_Click()EndSub19快速雙擊圖標(biāo)lblHello,這時(shí)會(huì)彈出程序代碼窗口,在該窗l(fā)blHello_Click是一個(gè)事件。VB的事件是指VB的對(duì)象對(duì)某個(gè)外部事件所作出的響應(yīng)。事件lblHello_Click是程序使用者點(diǎn)擊了圖標(biāo)lblHello之后程序所執(zhí)行的操作。在“PrivateSublblHello_Click()”和“EndSub”之間所加入的各行計(jì)算機(jī)語(yǔ)句,就是當(dāng)使用者點(diǎn)擊lblHello這一外部事件發(fā)生時(shí)VB程序才會(huì)執(zhí)行的操作。20lblHello_Click是一個(gè)事件。20PrivateSublblHello_Click()imgNinghua.Visible=TrueEndSub21PrivateSublblHello_Click()21現(xiàn)在保存工程,點(diǎn)擊啟動(dòng)鍵“”來(lái)運(yùn)行程序。試著點(diǎn)擊一下“Hello,everyone.”,圖片就會(huì)在窗體內(nèi)出現(xiàn)。 (其實(shí)編程就這么簡(jiǎn)單?。?2現(xiàn)在保存工程,點(diǎn)擊啟動(dòng)鍵“”來(lái)運(yùn)行程序。22點(diǎn)擊結(jié)束鍵“”終止程序的運(yùn)行。如果編程人員不希望每次都在VB的開(kāi)發(fā)環(huán)境內(nèi)運(yùn)行程序,編程人員可以生成可執(zhí)行文件。點(diǎn)擊菜單中的“文件”并選中“生成Hello.exe(K)…”,將Hello.exe存放在你希望存放的目錄中。23點(diǎn)擊結(jié)束鍵“”終止程序的運(yùn)行。23二、面向?qū)ο蟮某绦蛟O(shè)計(jì)方法24二、面向?qū)ο蟮某绦蛟O(shè)計(jì)方法241.VB的對(duì)象、屬性、方法和事件251.VB的對(duì)象、屬性、方法和事件25VB的窗體和控件是具有自己的屬性、方法和事件的對(duì)象。屬性是一個(gè)對(duì)象的性質(zhì)方法是對(duì)象的動(dòng)作事件是對(duì)對(duì)象的響應(yīng)26VB的窗體和控件是具有自己的屬性、方法和事件的對(duì)象。26小孩玩的氣球同樣具有屬性、方法和事件屬性直徑和顏色狀態(tài)屬性(充氣的或未充氣的)不可見(jiàn)的性質(zhì)(如壽命)方法:氣球本身所固有的方法和動(dòng)作充氣方法(用氦氣充滿氣球的動(dòng)作)放氣方法(排出氣球中的氣體)上升方法(放手讓氣球飛走)事件:預(yù)定義的對(duì)某些外部事件的響應(yīng)對(duì)刺破它的事件響應(yīng)是放氣對(duì)放手事件的響應(yīng)是升空27小孩玩的氣球同樣具有屬性、方法和事件27設(shè)置氣球的屬性:

Balloon.Color=Red

Balloon.Diameter=10

Balloon.Inflated=True注意代碼的語(yǔ)法,首先是對(duì)象(Balloon),接著是屬性(Color),然后是賦值(Red)。屬性也可以在程序設(shè)計(jì)階段在“屬性”窗口中設(shè)置。28設(shè)置氣球的屬性:28調(diào)用氣球的方法:

Balloon.Inflate

Balloon.Deflate

Balloon.Rise5它的語(yǔ)法與屬性的語(yǔ)法相似,對(duì)象(一個(gè)名詞)后面緊跟著方法(一個(gè)動(dòng)詞)。在第三個(gè)例子中有一個(gè)附加項(xiàng),稱為一個(gè)參數(shù),表示氣球上升的高度。一些方法有一個(gè)或多個(gè)參數(shù),它們對(duì)執(zhí)行的動(dòng)作做進(jìn)一步的描述。29調(diào)用氣球的方法:29 氣球?qū)σ粋€(gè)事件的響應(yīng)如下所示:

SubBalloon_Puncture()

Balloon.Deflate

Balloon.MakeNoise"Bang"

Balloon.Inflated=False

Balloon.Diameter=1EndSub本例中代碼描述了當(dāng)刺穿事件發(fā)生時(shí),氣球的行為。30 氣球?qū)σ粋€(gè)事件的響應(yīng)如下所示:302.面向?qū)ο蟮某绦蛟O(shè)計(jì)方法312.面向?qū)ο蟮某绦蛟O(shè)計(jì)方法31某個(gè)實(shí)驗(yàn)里,每個(gè)銷售者都要同時(shí)提交兩個(gè)決定:選擇產(chǎn)品的銷售價(jià)格同時(shí)還要決定是否對(duì)產(chǎn)品價(jià)格作廣告32某個(gè)實(shí)驗(yàn)里,每個(gè)銷售者都要同時(shí)提交兩個(gè)決定:32在這個(gè)實(shí)驗(yàn)中的銷售者有可能先定價(jià)、再考慮是否作廣告,隨后將已經(jīng)做好的決定同時(shí)提交;也有可能是相反的次序,先決定是否作廣告、然后再定價(jià),隨后提交決策;還有可能,在最后提交決策之前她會(huì)改主意,比如她更改了初始選擇的價(jià)格……實(shí)驗(yàn)程序中應(yīng)當(dāng)如何實(shí)現(xiàn)這樣的靈活性?面向?qū)ο蟮某绦蛟O(shè)計(jì)方法33在這個(gè)實(shí)驗(yàn)中的銷售者33傳統(tǒng)的程序設(shè)計(jì)方法如C語(yǔ)言,F(xiàn)ortran等,都是面向過(guò)程的、線性的程序設(shè)計(jì)方法。新發(fā)展起來(lái)的Java,VB等語(yǔ)言,是面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。34傳統(tǒng)的程序設(shè)計(jì)方法如C語(yǔ)言,F(xiàn)ortran等,都是面向過(guò)程的面向過(guò)程的程序設(shè)計(jì)方法所強(qiáng)調(diào)的是如何完成某一任務(wù)。面向過(guò)程的程序設(shè)計(jì)中,編程人員要從完成任務(wù)的第一步直到最后一步安排計(jì)算機(jī)所執(zhí)行的每一個(gè)細(xì)節(jié)。在面向過(guò)程的程序的應(yīng)用過(guò)程中使用者沒(méi)有任何自主權(quán)、處于完全被動(dòng)的角色使用者無(wú)權(quán)決定提交信息和處理信息的次序35面向過(guò)程的程序設(shè)計(jì)方法所強(qiáng)調(diào)的是如何完成某一任務(wù)。35而面向?qū)ο蟮模ɑ蚴录?qū)動(dòng)的)程序設(shè)計(jì)中編程人員圍繞著用戶界面中的對(duì)象進(jìn)行設(shè)計(jì)只有用戶對(duì)對(duì)象做出了某種動(dòng)作之后程序才會(huì)進(jìn)行特定的操作。程序的使用者自己控制提交信息和處理信息的次序。36而面向?qū)ο蟮模ɑ蚴录?qū)動(dòng)的)程序設(shè)計(jì)中編程人員圍繞著用戶界面 面向?qū)ο蟮某绦蛟O(shè)計(jì)大致要遵從下面五個(gè)步驟:對(duì)應(yīng)用程序進(jìn)行規(guī)劃;建立用戶界面;編寫程序代碼(即計(jì)算機(jī)語(yǔ)句);對(duì)程序進(jìn)行測(cè)試;書寫程序文檔。37 面向?qū)ο蟮某绦蛟O(shè)計(jì)大致要遵從下面五個(gè)步驟:37我們先著重介紹前兩個(gè)步驟,后三個(gè)步驟將在下一講《經(jīng)濟(jì)實(shí)驗(yàn)程序開(kāi)發(fā)實(shí)例》中穿插說(shuō)明。38我們先著重介紹前兩個(gè)步驟,后三個(gè)步驟將在下一講《經(jīng)濟(jì)實(shí)驗(yàn)程序?qū)?yīng)用程序進(jìn)行規(guī)劃首先要識(shí)別該程序要完成哪些任務(wù)。在識(shí)別任務(wù)時(shí),對(duì)下述問(wèn)題的回答會(huì)有幫助:實(shí)驗(yàn)參加者需要提交哪些信息?經(jīng)濟(jì)實(shí)驗(yàn)程序需要完成哪些計(jì)算和處理?在用戶界面上需要向?qū)嶒?yàn)參加者展示哪些信息?新的信息在用戶界面上出現(xiàn)時(shí),舊的信息是否會(huì)消失?實(shí)驗(yàn)程序在什么條件下會(huì)結(jié)束運(yùn)行?39對(duì)應(yīng)用程序進(jìn)行規(guī)劃首先要識(shí)別該程序要完成哪些任務(wù)。在識(shí)別任務(wù)對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定所要完成的任務(wù)究竟要通過(guò)哪些對(duì)象來(lái)實(shí)現(xiàn)。圖標(biāo)(Label)用于展示特定的標(biāo)識(shí)或運(yùn)算結(jié)果文本框(TextBox)用于采集信息。40對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定所要完成的任務(wù)究竟要通過(guò)哪些對(duì)象對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定哪些對(duì)象的哪些事件被觸發(fā)時(shí),程序所需要實(shí)現(xiàn)的任務(wù)會(huì)被完成。并不是所有的對(duì)象都需要事件觸發(fā)。你只需要針對(duì)部分對(duì)象的事件編寫程序,這些程序語(yǔ)句會(huì)在事件發(fā)生時(shí)執(zhí)行;而另外一些對(duì)象不需要你編程就能實(shí)現(xiàn)特定的任務(wù)。比如文本框(TextBox)不需要任何事件觸發(fā)就能實(shí)現(xiàn)采集信息的任務(wù)。41對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定哪些對(duì)象的哪些事件被觸發(fā)時(shí),程序?qū)?yīng)用程序進(jìn)行規(guī)劃(續(xù))程序規(guī)劃步驟可以用任務(wù)(Task)、對(duì)象(Object),事件(Event)的分解圖(TOE)來(lái)實(shí)現(xiàn)。42對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))程序規(guī)劃步驟可以用任務(wù)(Task)、任務(wù)(Task)對(duì)象(Object)事件(Event)銷售者輸入價(jià)格信息文本框txtPrice無(wú)銷售者選擇作廣告選擇按鍵optRevoptRev_Click點(diǎn)擊銷售者選擇不作廣告選擇按鍵optNRevoptRev_Click點(diǎn)擊同時(shí)提交價(jià)格與廣告決策命令按鍵cmdOKcmdOK_Click點(diǎn)擊對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))43任務(wù)(Task)對(duì)象(Object)事件(Event)銷售者用戶界面設(shè)計(jì)對(duì)VB來(lái)說(shuō)用戶界面設(shè)計(jì)就是對(duì)窗體上的各個(gè)對(duì)象的排列安排?;镜脑瓌t:按照一定的順序排列對(duì)象,要么從上至下,要么從左到右。相關(guān)的對(duì)象放在相鄰位置(如示例中的optRev和optNRev)。涉及實(shí)驗(yàn)參加者提交決策的對(duì)象需要在醒目位置顯示。完成對(duì)各個(gè)對(duì)象的初步排列后,可以根據(jù)需要在對(duì)象的旁邊添加一些圖標(biāo)以說(shuō)明各個(gè)對(duì)象的作用。44用戶界面設(shè)計(jì)對(duì)VB來(lái)說(shuō)用戶界面設(shè)計(jì)就是對(duì)窗體上的各個(gè)對(duì)象的排用戶界面設(shè)計(jì)(續(xù))45用戶界面設(shè)計(jì)(續(xù))45用戶界面設(shè)計(jì)(續(xù))46用戶界面設(shè)計(jì)(續(xù))46作業(yè): ProgrammingwithVisualBasic6.0EnhancedEdition,DianeZak,Tutorial247作業(yè):47三、變量、變量組和常量48三、變量、變量組和常量481.變量491.變量49變量的作用是在程序的運(yùn)行過(guò)程中臨時(shí)記錄數(shù)據(jù)。變量中所存儲(chǔ)的數(shù)據(jù)在程序運(yùn)行中可以被改變。由于變量只在程序運(yùn)行中發(fā)揮作用,變量的生命周期不會(huì)超過(guò)程序的運(yùn)行周期。一個(gè)變量里只能存放一段數(shù)據(jù),將新的數(shù)據(jù)存入變量中勢(shì)必會(huì)抹去變量中原有的數(shù)據(jù)。50變量的作用是在程序的運(yùn)行過(guò)程中臨時(shí)記錄數(shù)據(jù)。50創(chuàng)建新變量51創(chuàng)建新變量51類型所存儲(chǔ)數(shù)據(jù)值的范圍Byte(字節(jié)型)二進(jìn)位數(shù)值0至255Boolean(布爾型)邏輯值真或偽(TrueorFalse)Currency(貨幣型)小數(shù)點(diǎn)前最多15位,小數(shù)點(diǎn)后最多4位的實(shí)數(shù)+/-9E14Date(日期型)日期和時(shí)間信息公元100年1月1日至公元9999年12月31日Double(雙精度)實(shí)數(shù)+/-5E-324至1.8E308Integer(整型)整數(shù)-32768至32767Long(長(zhǎng)整型)整數(shù)+/-2000000000Object(對(duì)象型)VB中的對(duì)象Single(單精度)實(shí)數(shù)+/-1E-45至3E38String(字符串型)文本信息最長(zhǎng)65400個(gè)字符Variant(變體型)任意其它類型的數(shù)據(jù)其它類型數(shù)據(jù)的最大取值范圍52類型所存儲(chǔ)數(shù)據(jù)值的范圍Byte(字節(jié)型)二進(jìn)位數(shù)值0至25變量名的前綴:類型前綴BytebytBooleanblnCurrencycurDate(time)dtmDoubledblIntegerintLonglngObjectobjSinglesngStringstrVariantvnt53變量名的前綴:類型前綴BytebytBooleanblnCu變量名必須以字母開(kāi)頭。變量名中只能包含字母、數(shù)字和下劃線,其它任何字符都不允許在變量名中出現(xiàn)。變量名最長(zhǎng)不能超過(guò)255個(gè)字符。不能用VB中的保留字作變量名。保留字在VB中有特定含義和功能,不能作其它用途。比如在VB中“Print”是打印命令,屬于保留字,不能充當(dāng)變量名。54變量名必須以字母開(kāi)頭。54Dim

variablenameAs

datatype或Public

variablenameAs

datatype

比如,我們需要記錄實(shí)驗(yàn)當(dāng)前的交易輪次。為達(dá)目的,我們可以創(chuàng)建一個(gè)整型變量“intRound”,定義該變量的語(yǔ)句如下:

DimintRoundAsInteger55DimvariablenameAsdatatype或賦值56賦值56賦值是將數(shù)據(jù)存放到特定位置的過(guò)程。這個(gè)“特定位置”,既可以是某個(gè)對(duì)象的屬性,也可以是變量。賦值語(yǔ)句中的賦值符號(hào)為“=”,賦值號(hào)左側(cè)是數(shù)據(jù)存放的位置,而賦值號(hào)右側(cè)是數(shù)據(jù)。如:

Label1.Caption=“Hello!” intRound=10 curPrice=10.23原則上,數(shù)據(jù)要存放到與其類型一致的位置上去。57賦值是將數(shù)據(jù)存放到特定位置的過(guò)程。這個(gè)“特定位置”,既可以是賦值語(yǔ)句的一個(gè)應(yīng)用技巧是累加。比如,

intRound=10 intRound=intRound+5在創(chuàng)建新變量時(shí),VB自動(dòng)將空字符串賦予字符串型和變體型的變量,而那些數(shù)值類型的變量會(huì)被賦為“0”值。58賦值語(yǔ)句的一個(gè)應(yīng)用技巧是累加。比如,58變量的有效范圍59變量的有效范圍59局部變量由Dim語(yǔ)句在事件內(nèi)定義。局部變量的生命周期是事件的發(fā)生過(guò)程。一旦事件結(jié)束,局部變量的使命告終。

PrivateSublblHello_Click() DimiAsInteger EndSub 局部變量i只在lblHello_Click()內(nèi)有效。60局部變量由Dim語(yǔ)句在事件內(nèi)定義。局部變量的生命周期是事件的窗體變量窗體變量的生命周期即窗體從載入到終止的周期。窗體變量對(duì)窗體內(nèi)所有對(duì)象都有效,能在不同對(duì)象、事件和過(guò)程之間傳遞數(shù)據(jù)。也由Dim語(yǔ)句定義。窗體變量在代碼窗口的通用聲明(GeneralDeclaration)區(qū)域定義。61窗體變量窗體變量的生命周期即窗體從載入到終止的周期。61全程變量全程變量的生命周期等同于程序的運(yùn)行周期。全程變量能在程序的多個(gè)窗體之間傳遞數(shù)據(jù)。用Public語(yǔ)句在程序的代碼模塊中定義。代碼模塊是程序中的獨(dú)立文件,僅包含程序代碼。在菜單條中點(diǎn)擊“工程”并選擇“添加模塊”,在彈出的對(duì)話窗口中選擇新建模塊,一個(gè)新的代碼模塊Module1就會(huì)被添加到工程中。全程變量的定義位置是代碼模塊的通用聲明區(qū)域。62全程變量全程變量的生命周期等同于程序的運(yùn)行周期。62OptionExplicit語(yǔ)句63OptionExplicit語(yǔ)句63VB允許程序開(kāi)發(fā)者對(duì)變量隨用隨定義。OptionExplicit語(yǔ)句的作用是禁止在程序中運(yùn)用未經(jīng)正式定義的變量。具體做法:在工程下所有窗體和代碼模塊的通用聲明區(qū)域輸入OptionExplicit語(yǔ)句,并緊隨該語(yǔ)句對(duì)變量進(jìn)行定義。64VB允許程序開(kāi)發(fā)者對(duì)變量隨用隨定義。64 OptionExplicit

Dimi,j,kAsInteger DimstrNameAsString65 OptionExplicit652.變量組662.變量組66變量組是相互關(guān)聯(lián)的一組變量,這些變量有相同的名稱和相同的數(shù)據(jù)類型。程序開(kāi)發(fā)人員運(yùn)用變量組在內(nèi)存中暫時(shí)存取數(shù)據(jù);運(yùn)用變量組的優(yōu)勢(shì)是用它存取數(shù)據(jù)的速度遠(yuǎn)高于在外部存儲(chǔ)設(shè)備中存取數(shù)據(jù)的速度。67變量組是相互關(guān)聯(lián)的一組變量,這些變量有相同的名稱和相同的數(shù)據(jù) Dimarrayname(lowersubscriptTouppersubscript,…,lowersubscriptTouppersubscript)Asdatatype或

Publicarrayname(lowersubscriptTouppersubscript,…,lowersubscriptTouppersubscript)Asdatatype68 Dimarrayname(lowersubscript“arrayname”是變量組的名稱。對(duì)變量組的命名規(guī)定與對(duì)變量的命名規(guī)定類同?!發(fā)owersubscriptTouppersubscript”表示變量組的一個(gè)維。VB最高允許定義60維的變量組。在變量組中的各個(gè)變量通過(guò)變量組的名稱和下標(biāo)識(shí)別。變量組的有效范圍以及OptionExplicit語(yǔ)句的應(yīng)用完全類同于之前對(duì)變量的介紹。69“arrayname”是變量組的名稱。對(duì)變量組的命名規(guī)定與對(duì) 某實(shí)驗(yàn)的每個(gè)交易回合中市場(chǎng)上的三個(gè)銷售者同時(shí)選擇各自的出價(jià),而實(shí)驗(yàn)一共要進(jìn)行10個(gè)交易回合。用二維變量組curPrice來(lái)記錄出價(jià),定義該變量組的語(yǔ)句如下:

DimcurPrice(1To10,1To3)AsCurrency curPrice的第一組下標(biāo)指示交易的輪次,而第二組下標(biāo)指示的是銷售者。70 某實(shí)驗(yàn)的每個(gè)交易回合中市場(chǎng)上的三個(gè)銷售者同時(shí)選擇各自的出價(jià)3.常量713.常量71有些實(shí)驗(yàn)參數(shù)在更改實(shí)驗(yàn)條件時(shí)需要修正,而這些實(shí)驗(yàn)參數(shù)在同一實(shí)驗(yàn)中卻是固定不變的常量。這就需要實(shí)驗(yàn)程序在一開(kāi)始的地方對(duì)這些常量參數(shù)進(jìn)行定義,定義符號(hào)常量的語(yǔ)句格式如下:

Public

Const

constname

As

datatype=expression符號(hào)常量需要在VB的代碼模塊的通用聲明區(qū)域中定義,其有效范圍是程序運(yùn)行的全程。72有些實(shí)驗(yàn)參數(shù)在更改實(shí)驗(yàn)條件時(shí)需要修正,而這些實(shí)驗(yàn)參數(shù)在同一實(shí)作業(yè): ProgrammingwithVisualBasic6.0EnhancedEdition,DianeZak,Tutorial373作業(yè):73四、選擇結(jié)構(gòu)74四、選擇結(jié)構(gòu)74程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)中,程序的語(yǔ)句按照出現(xiàn)的先后次序,由前到后一個(gè)接一個(gè)地被執(zhí)行。選擇結(jié)構(gòu)中,程序根據(jù)某個(gè)比較結(jié)果選擇執(zhí)行語(yǔ)句的路徑。循環(huán)結(jié)構(gòu)中,某些語(yǔ)句會(huì)被執(zhí)行若干次、或直到某個(gè)特定的條件被滿足時(shí)才會(huì)停止執(zhí)行這些語(yǔ)句。75程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。75根據(jù)實(shí)驗(yàn)參與者的選擇做出判斷,來(lái)決定每個(gè)人的所得。

最后通牒對(duì)策,在10元的潛在收益中,提議者建議自己得到X元,而回應(yīng)者得到1–X元。在見(jiàn)到提案以后,如果回應(yīng)者接受這個(gè)提案,那么就按照提案來(lái)分配所得;如果回應(yīng)者拒絕這個(gè)提案,則提議者和回應(yīng)者的收益全部為零。在回應(yīng)者見(jiàn)到提案后,實(shí)驗(yàn)程序如何根據(jù)回應(yīng)者“接受”或“拒絕”的選擇來(lái)決定提議者和回應(yīng)者的所得?76根據(jù)實(shí)驗(yàn)參與者的選擇做出判斷,來(lái)決定每個(gè)人的所得。761.基本選擇結(jié)構(gòu):If…Then…Else語(yǔ)句771.基本選擇結(jié)構(gòu):If…Then…Else語(yǔ)句77 If…Then…Else語(yǔ)句是VB中最基本的選擇結(jié)構(gòu)。語(yǔ)句格式如下: If

conditionThen [instructionswhentheconditionistrue] [Else [instructionswhentheconditionisfalse]] EndIf78 If…Then…Else語(yǔ)句是VB中最基本的選擇結(jié)構(gòu)。語(yǔ)句“condition”是條件表達(dá)式,其值只可能是“真”或“偽”(TrueorFalse)。如果條件表達(dá)式的值為“真”,那么“Then”以后的語(yǔ)句將被執(zhí)行;如果條件表達(dá)式的值為“偽”,那么“Else”以后的語(yǔ)句將被執(zhí)行?!癊ndIf”表示選擇結(jié)構(gòu)的結(jié)束。需要注意的是,If…Then…Else語(yǔ)句中不一定包括“Else”和“Else”以后的語(yǔ)句。在這種情況下,當(dāng)條件表達(dá)式為“偽”時(shí)直接進(jìn)行“EndIf”之后的操作,而選擇結(jié)構(gòu)內(nèi)部不進(jìn)行任何操作。79“condition”是條件表達(dá)式,其值只可能是“真”或“偽注意:

我們?cè)诮榻BVB的語(yǔ)句格式的時(shí)候,方括號(hào)里的內(nèi)容為可選內(nèi)容,編程人員根據(jù)需要來(lái)決定是否選用這些內(nèi)容。 如果某語(yǔ)句格式的方括號(hào)里的內(nèi)容在編程中被省略掉,VB也不會(huì)將其視作語(yǔ)法錯(cuò)誤。80注意:80條件表達(dá)式中可包括變量、常量、對(duì)象的屬性、函數(shù)、數(shù)學(xué)運(yùn)算符,關(guān)系運(yùn)算符以及邏輯運(yùn)算符。81條件表達(dá)式中可包括變量、常量、對(duì)象的屬性、函數(shù)、數(shù)學(xué)運(yùn)算符,關(guān)系運(yùn)算符82關(guān)系運(yùn)算符82VB中有6種關(guān)系運(yùn)算符:=,>,>=,<,<=,<>。包含關(guān)系運(yùn)算符的表達(dá)式的返回值只可能是“真”或“偽”。各個(gè)關(guān)系運(yùn)算符之間并沒(méi)有優(yōu)先次序,在表達(dá)式中對(duì)它們按照從左到右的順序進(jìn)行處理。關(guān)系運(yùn)算符的處理優(yōu)先級(jí)要低于數(shù)學(xué)運(yùn)算符的優(yōu)先級(jí)數(shù)學(xué)運(yùn)算符的優(yōu)先順序是先處理乘方,再處理乘除,最后處理加減。83VB中有6種關(guān)系運(yùn)算符:=,>,>=,<,<=,<>。83表達(dá)式1:10+3<5*2 處理順序:首先計(jì)算5*2,得到10;隨后計(jì)算10+3,得到13;最后判斷不等式13<10的真?zhèn)?,返回值為“偽”(False)。表達(dá)式2:7>3*4/2 處理順序:首先計(jì)算3*4,得到12;隨后計(jì)算12/2,得到6;最后判斷不等式7>6的真?zhèn)危祷刂禐椤罢妗保═rue)。84表達(dá)式1:10+3<5*284UCase函數(shù)和LCase函數(shù)

85UCase函數(shù)和LCase函數(shù)85在VB中進(jìn)行字符串比較時(shí),如果兩個(gè)字符串所包含的字母相同、但字母的大小寫有所區(qū)別,那么VB會(huì)判定兩個(gè)字符串不同。如何在對(duì)比兩個(gè)字符串的時(shí)候忽略字母大小寫的區(qū)別?86在VB中進(jìn)行字符串比較時(shí),如果兩個(gè)字符串所包含的字母相同、但UCase函數(shù)的語(yǔ)句格式是UCase(String),其中“String”是一個(gè)任意的字符串。UCase(String)所返回的是一個(gè)新的字符串,新字符串將原字符串“String”中所有的小寫字母都轉(zhuǎn)換成大寫。UCase函數(shù)既可以出現(xiàn)在關(guān)系運(yùn)算符的左側(cè),也可以出現(xiàn)在關(guān)系運(yùn)算符的右側(cè)。但是在賦值語(yǔ)句中,UCase函數(shù)只能出現(xiàn)在賦值號(hào)的右側(cè)。87UCase函數(shù)的語(yǔ)句格式是UCase(String),其中“LCase函數(shù)的語(yǔ)句格式是LCase(String),它的作用是將原字符串中所有的大寫字母都轉(zhuǎn)換成小寫。88LCase函數(shù)的語(yǔ)句格式是LCase(String),它的作邏輯運(yùn)算符89邏輯運(yùn)算符89Not,And,Or,是VB中最常見(jiàn)的邏輯運(yùn)算符。各邏輯運(yùn)算符的優(yōu)先次序?yàn)镹ot,And,Or。邏輯運(yùn)算符在表達(dá)式中的優(yōu)先次序在數(shù)學(xué)運(yùn)算符和關(guān)系運(yùn)算符之后。Not的作用是將條件表達(dá)式的值反轉(zhuǎn);若干個(gè)由And運(yùn)算符連接起來(lái)的條件表達(dá)式,只有在每個(gè)條件表達(dá)式都為“真”的情況下,被連接起來(lái)的復(fù)合條件表達(dá)式才為“真”;若干個(gè)由Or運(yùn)算符連接起來(lái)的條件表達(dá)式,只要其中有一個(gè)條件表達(dá)式為“真”,被連接起來(lái)的復(fù)合條件表達(dá)式就會(huì)為“真”。90Not,And,Or,是VB中最常見(jiàn)的邏輯運(yùn)算符。90表達(dá)式1:3>2And6>5 處理順序:首先判斷不等式3>2的真?zhèn)?,返回值為“真”(True);隨后判斷不等式6>5的真?zhèn)?,返回值為“真”(True);最后判斷TrueAndTrue,得到返回值“真”。表達(dá)式2:10<25And6>5+1 處理順序:先計(jì)算5+1,得到6;隨后判斷不等式10<25的真?zhèn)?,返回值為“真”(True);第三步判斷不等式6>6的真?zhèn)?,返回值為“偽”(False);最后評(píng)價(jià)TrueAndFalse,得到返回值“偽”。91表達(dá)式1:3>2And6>591表達(dá)式3:8=4*2Or6>5+1 處理順序:先計(jì)算4*2,得到8;隨后判斷等式8=8的真?zhèn)?,返回值為“真”(True);由于Or運(yùn)算符左側(cè)的條件表達(dá)式為“真”,條件表達(dá)式3整體的返回值也為“真”。92表達(dá)式3:8=4*2Or6>5+192所有包含邏輯運(yùn)算符的表達(dá)式的返回值只可能是“真”或“偽”。如果你用And運(yùn)算符連接兩個(gè)條件表達(dá)式,而And運(yùn)算符左側(cè)的條件表達(dá)式的值為“偽”時(shí),VB將不再判斷And運(yùn)算符右側(cè)的條件表達(dá)式的真?zhèn)巍n愃频?,如果你用Or運(yùn)算符連接兩個(gè)條件表達(dá)式,而Or運(yùn)算符左側(cè)的條件表達(dá)式的值為“真”時(shí),VB將不再判斷Or運(yùn)算符右側(cè)的條件表達(dá)式的真?zhèn)巍?3所有包含邏輯運(yùn)算符的表達(dá)式的返回值只可能是“真”或“偽”。92.If…Then…Else語(yǔ)句基礎(chǔ)上的層次選擇結(jié)構(gòu)942.If…Then…Else語(yǔ)句基礎(chǔ)上的層次選擇結(jié)構(gòu)94層次選擇結(jié)構(gòu)是指在某個(gè)選擇結(jié)構(gòu)中,根據(jù)條件表達(dá)式的判定結(jié)果所選擇的某一條操作路徑上嵌入了另一個(gè)選擇結(jié)構(gòu)。95層次選擇結(jié)構(gòu)是指在某個(gè)選擇結(jié)構(gòu)中,根據(jù)條件表達(dá)式的判定結(jié)果所 示例1:在某個(gè)價(jià)格競(jìng)爭(zhēng)的實(shí)驗(yàn)中,我們用變量sngCost表示銷售者的成本,用變量intSellerID表示銷售者的識(shí)別號(hào)碼。1號(hào)銷售者和3號(hào)銷售者的成本是1.2元,2號(hào)銷售者的成本是1.5元,而其他所有銷售者的成本都是1.8元。我們需要用層次選擇結(jié)構(gòu)對(duì)變量sngCost賦值。96 示例1:在某個(gè)價(jià)格競(jìng)爭(zhēng)的實(shí)驗(yàn)中,我們用變量sngCost表 IfintSellerID=1OrintSellerID=3Then sngCost=1.2 Else

IfintSellerID=2Then sngCost=1.5

Else sngCost=1.8

EndIf EndIf97 IfintSellerID=1OrintSell示例2:在某個(gè)激勵(lì)機(jī)制的實(shí)驗(yàn)中,針對(duì)不同銷售者的激勵(lì)辦法各不相同。如果1號(hào)銷售者的銷售收入達(dá)到10000實(shí)驗(yàn)幣,那么她將在實(shí)驗(yàn)結(jié)束后得到500實(shí)驗(yàn)幣的獎(jiǎng)勵(lì);如果她的銷售收入達(dá)不到10000實(shí)驗(yàn)幣,她在實(shí)驗(yàn)后得到的獎(jiǎng)勵(lì)是200實(shí)驗(yàn)幣。如果2號(hào)銷售者的銷售收入達(dá)到20000實(shí)驗(yàn)幣,那么他將在實(shí)驗(yàn)結(jié)束后得到600實(shí)驗(yàn)幣的獎(jiǎng)勵(lì);如果他的銷售收入達(dá)不到20000實(shí)驗(yàn)幣,他在實(shí)驗(yàn)后得到的獎(jiǎng)勵(lì)是550實(shí)驗(yàn)幣。其他所有銷售者得到固定獎(jiǎng)勵(lì)150實(shí)驗(yàn)幣。變量intSellerID表示銷售者的識(shí)別號(hào)碼,sngSales表示實(shí)驗(yàn)中的銷售收入,sngBonus表示對(duì)銷售者的獎(jiǎng)勵(lì)。98示例2:98

IfintSellerID=1Then IfsngSales>=10000then sngBonus=500 Else sngBonus=200 EndIf Else IfintSellerID=2Then IfsngSales>=20000Then sngBonus=600 Else sngBonus=550 EndIf Else sngBonus=150 EndIf EndIf99 IfintSellerID=1Then99 IfintSellerID=1AndsngSales>=10000Then sngBonus=500 Else IfintSellerID=1AndsngSales<10000Then sngBonus=200 Else IfintSellerID=2AndsngSales>=20000Then sngBonus=600 Else IfintSellerID=2AndsngSales<20000Then sngBonus=550 Else sngBonus=150 EndIf EndIf EndIfEndIf100 IfintSellerID=1AndsngSal3.用Case語(yǔ)句表達(dá)的選擇結(jié)構(gòu)1013.用Case語(yǔ)句表達(dá)的選擇結(jié)構(gòu)101用Case語(yǔ)句表達(dá)的選擇結(jié)構(gòu)適用于對(duì)條件表達(dá)式的判定后產(chǎn)生多個(gè)可供選擇的操作路徑的情況。與If…Then…Else語(yǔ)句相比,Case語(yǔ)句更簡(jiǎn)單直觀。102用Case語(yǔ)句表達(dá)的選擇結(jié)構(gòu)適用于對(duì)條件表達(dá)式的判定后產(chǎn)生多 SelectCase

testexpression [Case

expressionlist1 [instructionsforthefirstcase]] [Case

expressionlist2 [instructionsforthesecondcase]] [Case

expressionlistn [instructionsforthenthcase]] [CaseElse

[instructionsforwhenthetestexpressiondoesnotmatchanyoftheexpressionlists]] EndSelect103 SelectCasetestexpression103“testexpression”為被測(cè)表達(dá)式,它可以是字符串,也可以是數(shù)值。被測(cè)表達(dá)式可以包含變量,常量,各種運(yùn)算符以及對(duì)象的屬性。“expressionlist”是一系列表達(dá)式的列表。在Case語(yǔ)句中,表達(dá)式列表中的每個(gè)表達(dá)式的數(shù)據(jù)類型必須與被測(cè)表達(dá)式的數(shù)據(jù)類型相一致。當(dāng)表達(dá)式列表中的某一個(gè)表達(dá)式與被測(cè)表達(dá)式相吻合時(shí),在該表達(dá)式后的操作將被執(zhí)行,而Case語(yǔ)句中的其它操作路徑將被忽略,直接進(jìn)行“EndSelect”之后的操作。如果沒(méi)有任何一個(gè)表達(dá)式列表中的表達(dá)式與被測(cè)表達(dá)式相吻合,“CaseElse”之后的操作將被執(zhí)行;在Case語(yǔ)句中沒(méi)有“CaseElse”部分的情況下,Case語(yǔ)句將結(jié)束,直接進(jìn)行“EndSelect”之后的操作。104“testexpression”為被測(cè)表達(dá)式,它可以是字符串 表達(dá)式所描述的是包括上界和下界的數(shù)值范圍:

a≤testexpression≤b在Case語(yǔ)句中可以被寫成 SelectCase

testexpression [CaseaTob [instructionsforthecaseof‘a(chǎn)tob’]] EndSelect105 表達(dá)式所描述的是包括上界和下界的數(shù)值范圍:105 表達(dá)式所描述的是只包括上界或下界的數(shù)值范圍: a≤testexpression在Case語(yǔ)句中可以被寫成 SelectCase

testexpression [Case

Is>=a [instructionsforthecaseof‘>=a’]] EndSelect106 表達(dá)式所描述的是只包括上界或下界的數(shù)值范圍:106 示例1:

SelectCaseintSellerID

Case1,3 sngCost=1.2

Case2 sngCost=1.5

Case

Else sngCost=1.8 EndSelect107 示例1:107示例2: SelectCaseintSellerID

Case1

SelectCasesngSales

CaseIs>=10000 sngBonus=500

CaseElse sngBonus=200

EndSelect

Case2

SelectCasesngSales

CaseIs>=20000 sngBonus=600

CaseElse sngBonus=550

EndSelect

CaseElse sngBonus=150 EndSelect108示例2:108示例2:

SelectCaseTrue

CaseintSellerID=1AndsngSales>=10000 sngBonus=500

CaseintSellerID=1AndsngSales<10000 sngBonus=200

CaseintSellerID=2AndsngSales>=20000 sngBonus=600

CaseintSellerID=2AndsngSales<20000 sngBonus=550

CaseElse sngBonus=150 EndSelect109示例2:109作業(yè): ProgrammingwithVisualBasic6.0EnhancedEdition,DianeZak,Tutorial4110作業(yè):110五、循環(huán)結(jié)構(gòu)111五、循環(huán)結(jié)構(gòu)111在實(shí)驗(yàn)中,所進(jìn)行的交易回合往往不止一輪。交易回合開(kāi)始,要將基本信息發(fā)送給實(shí)驗(yàn)參加者:輪次,銷售者的成本、購(gòu)買者的保有價(jià)格,等等。交易回合結(jié)束,要將交易結(jié)果發(fā)送給實(shí)驗(yàn)參加者:實(shí)驗(yàn)參加者本輪的決策、其他參加者的決策,實(shí)驗(yàn)參加者本人本輪的所得,到目前為止的累積所得,等等。用實(shí)驗(yàn)程序來(lái)實(shí)現(xiàn)這些任務(wù)需要進(jìn)行一些重復(fù)性操作,這就涉及到了循環(huán)結(jié)構(gòu)。112在實(shí)驗(yàn)中,所進(jìn)行的交易回合往往不止一輪。112循環(huán)結(jié)構(gòu)中,某些語(yǔ)句會(huì)被執(zhí)行若干次、或直到某個(gè)特定的條件被滿足時(shí)才會(huì)停止執(zhí)行這些語(yǔ)句。三種基本形式:ForNext循環(huán)DoWhile循環(huán)DoUntil循環(huán)113循環(huán)結(jié)構(gòu)中,某些語(yǔ)句會(huì)被執(zhí)行若干次、或直到某個(gè)特定的條件被滿1.ForNext循環(huán)1141.ForNext循環(huán)114ForNext循環(huán)的作用是將某些特定的操作重復(fù)執(zhí)行一定的次數(shù),其語(yǔ)法格式如下:

For

counter=startvalue

to

endvalue[Step

stepvalue] [instructions] Nextcounter115ForNext循環(huán)的作用是將某些特定的操作重復(fù)執(zhí)行一定的次“Counter”是一個(gè)數(shù)值類型的變量“startvalue”是循環(huán)的初始值,“endvalue”是循環(huán)的終值,而“stepvalue”是循環(huán)的步長(zhǎng)。循環(huán)的初始值,終值和步長(zhǎng)都必須是數(shù)值,這些數(shù)值既可以是正數(shù),也可以是負(fù)數(shù)。如果編程人員省略了對(duì)循環(huán)的步長(zhǎng)的定義,則VB自動(dòng)將循環(huán)的步長(zhǎng)規(guī)定為1。116“Counter”是一個(gè)數(shù)值類型的變量116ForNext循環(huán)按照如下步驟運(yùn)行:第一步,在循環(huán)開(kāi)始的時(shí)候,將循環(huán)的初始值“startvalue”賦予變量“Counter”。這一操作只進(jìn)行一次。117ForNext循環(huán)按照如下步驟運(yùn)行:117第二步,如果步長(zhǎng)“stepvalue”為正,則需要判定變量“Counter”的值是否大于循環(huán)的終值“endvalue”(如果步長(zhǎng)“stepvalue”為負(fù),則是相反的情況,需要判定變量“Counter”的值是否小于循環(huán)的終值“endvalue”)。 如果判定結(jié)果為“真”,則循環(huán)終止;如果判定結(jié)果為“偽”,則循環(huán)內(nèi)的操作“instructions”將被執(zhí)行。118第二步,如果步長(zhǎng)“stepvalue”為正,則需要判定變量“第三步,將步長(zhǎng)值“stepvalue”加入到變量“Counter”中,并返回到上述第二步。 直到變量“Counter”的值大于終值“endvalue”(若步長(zhǎng)為負(fù),則變量“Counter”的值小于終值“endvalue”)的時(shí)候,循環(huán)結(jié)束。119第三步,將步長(zhǎng)值“stepvalue”加入到變量“Count ForNext循環(huán)示例: 在某實(shí)驗(yàn)中有12名實(shí)驗(yàn)參加者參與,每個(gè)人在實(shí)驗(yàn)開(kāi)始時(shí)得到150實(shí)驗(yàn)幣的啟動(dòng)資金。我們用一維變量組sngTPayoff(1to12)來(lái)表示12個(gè)實(shí)驗(yàn)參加者的累積所得,其中的變量sngTPayoff(i)是第i個(gè)實(shí)驗(yàn)參加者的累積所得。現(xiàn)在將各個(gè)實(shí)驗(yàn)參加者的累積所得初始化為150個(gè)實(shí)驗(yàn)幣。120 ForNext循環(huán)示例:120 DimiAsInteger DimsngTPayoff(1To12)AsSingle

Fori=1to12 sngTPayoff(i)=150 Nexti121 DimiAsInteger1212.DoWhile循環(huán)和DoUntil循環(huán)1222.DoWhile循環(huán)和DoUntil循環(huán)122DoWhile語(yǔ)句中,當(dāng)循環(huán)的判定條件為真時(shí),重復(fù)執(zhí)行循環(huán)內(nèi)的操作;DoUntil語(yǔ)句重復(fù)執(zhí)行循環(huán)內(nèi)的操作,直到循環(huán)的判定條件為真時(shí)終止。DoWhile循環(huán)和DoUntil循環(huán)都能夠?qū)崿F(xiàn)ForNext循環(huán)中,將某些操作重復(fù)執(zhí)行特定次數(shù)的功能。123DoWhile語(yǔ)句中,當(dāng)循環(huán)的判定條件為真時(shí),重復(fù)執(zhí)行循環(huán) DoWhile循環(huán)的語(yǔ)句格式為: DoWhile

condition [loopinstructions] Loop DoUntil循環(huán)的語(yǔ)句格式為: Do [loopinstructions] LoopUntilcondition124 DoWhile循環(huán)的語(yǔ)句格式為:124循環(huán)的條件“condition”可包含變量、常量、函數(shù)、對(duì)象的屬性以及各種運(yùn)算符,“condition”的返回值必須是“真”或“偽”。在DoWhile循環(huán)中,當(dāng)且僅當(dāng)循環(huán)的條件“condition”的值為“真”時(shí),循環(huán)內(nèi)的操作“l(fā)oopinstructions”才會(huì)被執(zhí)行;DoUntil循環(huán)中,當(dāng)且僅當(dāng)循環(huán)的條件“condition”的值為“偽”時(shí),循環(huán)內(nèi)的操作“l(fā)oopinstructions”才會(huì)被執(zhí)行,一旦“condtion”為“真”則循環(huán)終止。125循環(huán)的條件“condition”可包含變量、常量、函數(shù)、對(duì)象DoWhile循環(huán)也被稱作前試循環(huán)。ForNext循環(huán)也是一種前試循環(huán)。DoUntil循環(huán)也被稱作后試循環(huán)。DoUntil循環(huán)內(nèi)的操作至少會(huì)被執(zhí)行一次。126DoWhile循環(huán)也被稱作前試循環(huán)。ForNext循環(huán)也 用DoWhile語(yǔ)句完成示例:

DimiAsInteger DimsngTPayoff(1To12)AsSingle i=1

DoWhilei<=12

sngTPayoff(i)=150 i=i+1 Loop127 用DoWhile語(yǔ)句完成示例:127 用DoUntil語(yǔ)句完成示例:

DimiasInteger DimsngTPayoff(1To12)AsSingle i=1

Do

sngTPayoff(i)=150 i=i+1 LoopUntili>12128 用DoUntil語(yǔ)句完成示例:1283.計(jì)數(shù)器和累加器1293.計(jì)數(shù)器和累加器129計(jì)數(shù)器和累加器是循環(huán)結(jié)構(gòu)最常見(jiàn)的兩種應(yīng)用。計(jì)數(shù)器用于統(tǒng)計(jì)數(shù)量,比如在某個(gè)實(shí)驗(yàn)的某個(gè)回合,究竟有多少實(shí)驗(yàn)參加者選擇了納什均衡策略?而累加器用于求和,比如實(shí)驗(yàn)進(jìn)行了5輪以后某個(gè)實(shí)驗(yàn)參加者的累積所得是多少?130計(jì)數(shù)器和累加器是循環(huán)結(jié)構(gòu)最常見(jiàn)的兩種應(yīng)用。130計(jì)數(shù)器和累加器都需要初始化和更新。初始化是指為計(jì)數(shù)器和累加器賦初始值。多數(shù)情況下,計(jì)數(shù)器和累加器會(huì)被初始化為0或1。更新是指將新的數(shù)值加入到計(jì)數(shù)器或累加器中。計(jì)數(shù)器每次的更新為常量,而累加器的更新為變量。更新在循環(huán)內(nèi)進(jìn)行,而初始化在更新所在的循環(huán)開(kāi)始之前進(jìn)行。131計(jì)數(shù)器和累加器都需要初始化和更新。131 計(jì)數(shù)器示例:

某實(shí)驗(yàn)有12名參加者,共進(jìn)行20個(gè)回合。在每個(gè)回合里,各實(shí)驗(yàn)參加者要在選項(xiàng)“A”與“B”之間選一個(gè)。現(xiàn)所有參加者在各個(gè)回合中的選擇都已被存入二維變量組strChoice(1to12,1to20)。其中變量strChoice(i,j)是指第i個(gè)實(shí)驗(yàn)參加者在第j個(gè)回合所作的選擇?,F(xiàn)在我們需要構(gòu)造一個(gè)新的計(jì)數(shù)器變量組intChoiceA(1to20),用于統(tǒng)計(jì)在各回合中選擇“A”的實(shí)驗(yàn)參加者的人數(shù)。132 計(jì)數(shù)器示例:132 Dimi,jAsInteger DimintChoiceA(1To20)AsInteger Fori=1to20 intChoiceA(i)=0

Forj=1to12

IfstrChoice(j,i)=“A”Then intChoiceA(i)=intChoiceA(i)+1

EndIf

Nextj Nexti133 Dimi,jAsInteger133 累加器示例: 某實(shí)驗(yàn)有12名參加者,共進(jìn)行20個(gè)回合?,F(xiàn)所有參加者在各個(gè)回合中的所得都已被存入二維變量組sngPayoff(1to12,1to20)。sngPayoff(i,j)是指第i個(gè)實(shí)驗(yàn)參加者在第j個(gè)回合的所得?,F(xiàn)在需要計(jì)算各個(gè)實(shí)驗(yàn)參加者在實(shí)驗(yàn)結(jié)束后的累積所得,由變量組sngTPayoff(1to12)表示。其中變量sngTPayoff(i)是第i個(gè)實(shí)驗(yàn)參加者的累積所得。每個(gè)實(shí)驗(yàn)參加者在第一回合開(kāi)始時(shí)的啟動(dòng)資金皆為150個(gè)實(shí)驗(yàn)幣。134 累加器示例:134 Dimi,jAsInteger DimsngTPayoff(1To12)AsSingle Fori=1to12 sngTPayoff(i)=150

Forj=1to20 sngTPayoff(i)=sngTPayoff(i)+sngPayoff(i,j)

Nextj Nexti135 Dimi,jAsInteger135六、對(duì)數(shù)據(jù)的存取136六、對(duì)數(shù)據(jù)的存取136研究人員需要記錄實(shí)驗(yàn)參加者在實(shí)驗(yàn)中的決策和所得。變量和變量組能起到在程序運(yùn)行過(guò)程中臨時(shí)存取數(shù)據(jù)的作用。程序一旦結(jié)束運(yùn)行,變量和變量組就會(huì)從計(jì)算機(jī)內(nèi)存中消失,所存放的數(shù)據(jù)也隨之消失。為避免數(shù)據(jù)丟失,研究人員需要把實(shí)驗(yàn)數(shù)據(jù)長(zhǎng)久保存在數(shù)據(jù)文件中。137研究人員需要記錄實(shí)驗(yàn)參加者在實(shí)驗(yàn)中的決策和所得。1371.?dāng)?shù)據(jù)文件1381.?dāng)?shù)據(jù)文件138程序文件所包含的是實(shí)現(xiàn)一系列操作的指令的集合。VB工程文件與工程文件關(guān)聯(lián)的窗體文件和代碼模塊數(shù)據(jù)文件專門用于承載信息,由數(shù)據(jù)領(lǐng)域和數(shù)據(jù)記錄構(gòu)成。139程序文件所包含的是實(shí)現(xiàn)一系列操作的指令的集合。139數(shù)據(jù)領(lǐng)域又被稱作數(shù)據(jù)元素,是一段無(wú)法繼續(xù)細(xì)分的信息。實(shí)驗(yàn)參加者的識(shí)別號(hào)碼交易的輪次實(shí)驗(yàn)參加者的角色數(shù)據(jù)記錄是一系列相關(guān)聯(lián)的數(shù)據(jù)領(lǐng)域的組合。在經(jīng)濟(jì)實(shí)驗(yàn)中,一條數(shù)據(jù)記錄就是某個(gè)實(shí)驗(yàn)參加者在某個(gè)輪次的全部實(shí)驗(yàn)結(jié)果。囚徒困境對(duì)策實(shí)驗(yàn):數(shù)據(jù)記錄中包括輪次,實(shí)驗(yàn)參加者的識(shí)別號(hào),與其配對(duì)的參加者的識(shí)別號(hào),實(shí)驗(yàn)參加者的決策,與其配對(duì)的參加者的決策,實(shí)驗(yàn)參加者本輪所得以及實(shí)驗(yàn)參加者的累積所得。數(shù)據(jù)文件是相關(guān)聯(lián)的數(shù)據(jù)記錄的集合。在經(jīng)濟(jì)實(shí)驗(yàn)中,數(shù)據(jù)文件包括所有實(shí)驗(yàn)參加者在所有輪次中的全部實(shí)驗(yàn)結(jié)果。140數(shù)據(jù)領(lǐng)域又被稱作數(shù)據(jù)元素,是一段無(wú)法繼續(xù)細(xì)分的信息。140經(jīng)濟(jì)實(shí)驗(yàn)中最常用到的數(shù)據(jù)文件是順序存取的數(shù)據(jù)文件。對(duì)順序存取的數(shù)據(jù)文件中的數(shù)據(jù)記錄只能依次按順序處理。音樂(lè)磁帶:只能按照順序播放樂(lè)曲,不能隨意跳轉(zhuǎn)到喜愛(ài)的樂(lè)曲。順序存取的文件易于創(chuàng)建,也易于操作。141經(jīng)濟(jì)實(shí)驗(yàn)中最常用到的數(shù)據(jù)文件是順序存取的數(shù)據(jù)文件。1412.對(duì)順序存取的數(shù)據(jù)文件的基本操作1422.對(duì)順序存取的數(shù)據(jù)文件的基本操作142順序存取的數(shù)據(jù)文件的文件類型143順序存取的數(shù)據(jù)文件的文件類型143VB中最常用的順序存取的數(shù)據(jù)文件是以“*.txt”的后綴為結(jié)尾的文本文件。文本文件的一行為一條數(shù)據(jù)記錄。數(shù)據(jù)記錄的各個(gè)數(shù)據(jù)領(lǐng)域之間用逗號(hào)分割開(kāi)。如果某數(shù)據(jù)領(lǐng)域?yàn)樽址?,在字符串外要加上雙引號(hào)。上述格式的文本文件可以直接用MicrosoftExcel打開(kāi)。144VB中最常用的順序存取的數(shù)據(jù)文件是以“*.txt”的后綴為結(jié)打開(kāi)文件

145打開(kāi)文件 145 打開(kāi)順序存取的數(shù)據(jù)文件要用到Open語(yǔ)句,其格式如下:

Open

pathnameFor

modeAs#filenumber146 打開(kāi)順序存取的數(shù)據(jù)文件要用到Open語(yǔ)句,其格式如下:14“pathname”是所打開(kāi)的數(shù)據(jù)文件的名稱文件名中要包括該文件在你的計(jì)算機(jī)上存儲(chǔ)位置的路徑。要用引號(hào)將包含硬盤符號(hào)、路徑以及文件名的pathname括起來(lái)。147“pathname”是所打開(kāi)的數(shù)據(jù)文件的名稱147“mode”是數(shù)據(jù)文件打開(kāi)的模式Input為輸入模式,把數(shù)據(jù)文件中的數(shù)據(jù)記錄讀入到程序中。如果數(shù)據(jù)文件不存在,VB會(huì)返回出錯(cuò)信息。Output即輸出模式,創(chuàng)建新的數(shù)據(jù)文件并將數(shù)據(jù)記錄存入新文件中。如果數(shù)據(jù)文件已經(jīng)存在,VB將抹去數(shù)據(jù)文件中原有的內(nèi)容。Append即附加模式,打開(kāi)已有的數(shù)據(jù)文件并在該文件的末尾附加新的數(shù)據(jù)記錄。如果數(shù)據(jù)文件不存在,VB會(huì)在相應(yīng)目錄下創(chuàng)建新的數(shù)據(jù)文件。148“mode”是數(shù)據(jù)文件打開(kāi)的模式148“filenumber”是你賦予數(shù)據(jù)文件的識(shí)別號(hào)碼?!癴ilenumber”必須是1到511之間的整數(shù)(包括1和511)。數(shù)據(jù)文件在被編程人員打開(kāi)期間,其識(shí)別號(hào)碼是唯一的。(VB最多能同時(shí)打開(kāi)511個(gè)數(shù)據(jù)文件)。149“filenumber”是你賦予數(shù)據(jù)文件的識(shí)別號(hào)碼。149VB運(yùn)用記錄指針來(lái)確定下一個(gè)要被處理的數(shù)據(jù)記錄的位置。用輸入模式打開(kāi)數(shù)據(jù)文件時(shí),記錄指針指向文件的起點(diǎn)、第一條數(shù)據(jù)記錄之前;用輸出模式打開(kāi)數(shù)據(jù)文件時(shí),記錄指針指向空文件的開(kāi)端;用附加模式打開(kāi)數(shù)據(jù)文件時(shí),記錄指針指向文件的末尾、最后一條數(shù)據(jù)記錄的后面。當(dāng)前的數(shù)據(jù)記錄處理完畢,記錄指針指向下一條數(shù)據(jù)記錄。150VB運(yùn)用記錄指針來(lái)確定下一個(gè)要被處理的數(shù)據(jù)記錄的位置。150 打開(kāi)文件示例:在某實(shí)驗(yàn)中,你需要在“D:\Experiment\”路徑下創(chuàng)建一個(gè)新的順序存取的數(shù)據(jù)文件Result.txt以記錄實(shí)驗(yàn)結(jié)果。程序如下, Open"D:\Experiment\Result.txt"ForOutputAs#1151 打開(kāi)文件示例:在某實(shí)驗(yàn)中,你需要在“D:\Experime關(guān)閉文件152關(guān)閉文件152文件中的所有數(shù)據(jù)記錄已被處理完成之后,需要用Close語(yǔ)句來(lái)關(guān)閉文件:

Close[#filenumber]“filenumber”是某個(gè)已經(jīng)被打開(kāi)的數(shù)據(jù)文件的識(shí)別號(hào)碼。如果Close語(yǔ)句中不包括任一個(gè)數(shù)據(jù)文件的識(shí)別號(hào)碼,那么所有在VB中已被打開(kāi)的數(shù)據(jù)文件都將關(guān)閉。153文件中的所有數(shù)據(jù)記錄已被處理完成之后,需要用Close語(yǔ)句來(lái) 關(guān)閉文件示例:如果需要關(guān)閉打開(kāi)文件示例中的Result.txt,你需要在程序中書寫如下語(yǔ)句:

Close#1154 關(guān)閉文件示例:如果需要關(guān)閉打開(kāi)文件示例中的Result.t從文件中讀取數(shù)據(jù)155從文件中讀取數(shù)據(jù)155用Input語(yǔ)句從數(shù)據(jù)文件中讀取數(shù)據(jù)記錄,其格式如下:

Input#filenumber,variablelist156用Input語(yǔ)句從數(shù)據(jù)文件中讀取數(shù)據(jù)記錄,其格式如下:156其中“filenumber”是某個(gè)已經(jīng)被打開(kāi)的數(shù)據(jù)文件的識(shí)別號(hào)碼?!皏ariablelist”是變量的列表。當(dāng)變量的列表中包括多個(gè)變量時(shí),各個(gè)變量之間用逗號(hào)分割開(kāi)。變量列表中的各變量分別對(duì)應(yīng)于數(shù)據(jù)記錄的各個(gè)數(shù)據(jù)領(lǐng)域。變量列表中變量的數(shù)量以及各變量的數(shù)據(jù)類型必須與數(shù)據(jù)記錄中數(shù)據(jù)領(lǐng)域的數(shù)量和數(shù)據(jù)類型相一致。各變量在變量列表中的順序也必須與數(shù)據(jù)記錄中各數(shù)據(jù)領(lǐng)域的順序相一致。157其中“filenumber”是某個(gè)已經(jīng)被打開(kāi)的數(shù)據(jù)文件的識(shí)別 從文件中讀取數(shù)據(jù)示例: 最后通牒博弈實(shí)驗(yàn)有10名實(shí)驗(yàn)參加者參與,5名提議者和5名回應(yīng)者。在數(shù)據(jù)文件“D:\Experiment\Matching.txt”中存放著10名實(shí)驗(yàn)參加者的配對(duì)方式。文件Matching.txt的內(nèi)容如下, 1,10 2,9 3,8 4,7 5,6158 從文件中讀取數(shù)據(jù)示例:158該文件中有5條數(shù)據(jù)記錄,每個(gè)數(shù)據(jù)記錄有兩個(gè)數(shù)據(jù)領(lǐng)域,前一個(gè)數(shù)據(jù)領(lǐng)域是提議者的識(shí)別號(hào)碼,而后一個(gè)數(shù)據(jù)領(lǐng)域是與之配對(duì)的回應(yīng)者的識(shí)別號(hào)碼。我們需要將提議者的識(shí)別號(hào)碼讀入變量組Proposer(1to5)中,相應(yīng)的回應(yīng)者識(shí)別號(hào)碼讀入變量組Responder(1to5)中。159該文件中有5條數(shù)據(jù)記錄,每個(gè)數(shù)據(jù)記錄有兩個(gè)數(shù)據(jù)領(lǐng)域,前一個(gè)數(shù) DimiAsInteger DimProposer(1To5)AsInteger,Responder(1To5)AsInteger

Open"D:\Experiment\Matching.txt"ForInputAs#1 Fori=1to5 Input#1,Proposer(i),Responder(i) Nexti Close#1160 DimiAsInteger160向文件存入數(shù)據(jù)161向文件存入數(shù)據(jù)161 用Write語(yǔ)句向數(shù)據(jù)文件存入數(shù)據(jù)記錄,其格式如下:

Write#filenumber,[outputlist]162 用Write語(yǔ)句向數(shù)據(jù)文件存入數(shù)據(jù)記錄,其格式如下:162“filenumber”是某個(gè)已經(jīng)被打開(kāi)的數(shù)據(jù)文件的識(shí)別號(hào)碼?!皁utputlist”是輸出列表,輸出列表中既可以包含數(shù)字、字符串,也可以包含變量。當(dāng)輸出列表中含有多個(gè)分量時(shí),各分量之間用逗號(hào)分割。對(duì)輸出列表的規(guī)定與Input語(yǔ)句中關(guān)于變量列表的規(guī)定類似。如果輸出列表中包括字符串,字符串外要加上雙引號(hào)。如果輸出列表中包括字符型的變量,在該變量外不要加引號(hào)。163“filenumber”是某個(gè)已經(jīng)被打開(kāi)的數(shù)據(jù)文件的識(shí)別號(hào)碼 向文件存入數(shù)據(jù)示例: 在10名參加者參與的最后通牒博弈實(shí)驗(yàn)完成配對(duì)后,提議者提出分配10元現(xiàn)金的提案,而回應(yīng)者選擇接受或拒絕。當(dāng)所有參加者都作出了選擇以后,研究人員要把實(shí)驗(yàn)結(jié)果記錄到文件“D:\Experiment\Result.txt”中去。 Role(i)是第i個(gè)實(shí)驗(yàn)參加者的角色,Group(i)是第i個(gè)實(shí)驗(yàn)參加者所在的組的序號(hào),F(xiàn)Choice(i)是第i個(gè)實(shí)驗(yàn)參加者所在的組內(nèi)的提議者所作出的選擇,SChoice(i)是第i個(gè)實(shí)驗(yàn)參加者所在的組內(nèi)的回應(yīng)者所作出的選擇,Payoff(i)是第i個(gè)實(shí)驗(yàn)參加者的所得。我們需要把這些變量組中的數(shù)據(jù)存入到數(shù)據(jù)文件中。164 向文件存入數(shù)據(jù)示例:164 Open"D:\Experiment\result.txt"ForOutputAs#1

Write#1,"ID","Role","Group","FirstMover’sChoice","SecondMover’sChoice","Payoff"

Fori=1to10 Write#1,i,Role(i),Group(i),FChoice(i),SChoice(i),Payoff(i) Nexti

Close#1165 Open"D:\Experiment\result.tx3.EOF函數(shù)1663.EOF函數(shù)166EOF函數(shù)用于判定VB的記錄指針是否已指向數(shù)據(jù)文件的最后一條數(shù)據(jù)記錄之后,即數(shù)據(jù)文件是否已被處理完畢。EOF是“EndofFile”的縮寫。EOF函數(shù)的格式如下:

EOF(filenumber)167EOF函數(shù)用于判定VB的記錄指針是否已指向數(shù)據(jù)文件的最后一條“filenumber”是某個(gè)已被打開(kāi)的數(shù)據(jù)文件的識(shí)別號(hào)。EOF函數(shù)返回布爾型值。若記錄指針已指向識(shí)別號(hào)為“filenumber”的數(shù)據(jù)文件的末尾(即最后一條數(shù)據(jù)記錄之后),則EOF函數(shù)的返回值為“真”,否則EOF函數(shù)的返回值為“偽”。168“filenumber”是某個(gè)已被打開(kāi)的數(shù)據(jù)文件的識(shí)別號(hào)。1 EOF函數(shù)常作為判定條件與循環(huán)語(yǔ)句相結(jié)合,如:

DoWhileNotEOF(1) [loopinstructions] Loop

Do [loopinstructions] LoopUntilEOF(1)169 EOF函數(shù)常作為判定條件與循環(huán)語(yǔ)句相結(jié)合,如:169七、運(yùn)用ESLNetworkQueue處理實(shí)驗(yàn)中的信息傳遞170七、運(yùn)用ESLNetworkQueue處理實(shí)驗(yàn)中的信息傳經(jīng)濟(jì)實(shí)驗(yàn)中最常遇見(jiàn)的問(wèn)題是信息傳遞。所有實(shí)驗(yàn)參加者在實(shí)驗(yàn)過(guò)程中通過(guò)實(shí)驗(yàn)程序所做出的決策,都要傳遞給研究人員并被記錄下來(lái)。許多實(shí)驗(yàn)設(shè)計(jì)中,部分或全部實(shí)驗(yàn)參加者的決策在特定條件下會(huì)被其他實(shí)驗(yàn)參加者觀察到。如何通過(guò)實(shí)驗(yàn)程序?qū)崿F(xiàn)?171經(jīng)濟(jì)實(shí)驗(yàn)中最常遇見(jiàn)的問(wèn)題是信息傳遞。171ESLNetworkQueue是專門處理實(shí)驗(yàn)中信息傳遞問(wèn)題的VB控件。該控件大幅度降低了信息傳遞的任務(wù)難度。通過(guò)該控件,只需要在程序中鍵入一些簡(jiǎn)單的命令就能夠經(jīng)網(wǎng)絡(luò)傳遞信息。172ESLNetworkQueue是專門處理實(shí)驗(yàn)中信息傳遞問(wèn)1.信息傳遞的基本架構(gòu)1731.信息傳遞的基本架構(gòu)173信息傳遞的物理結(jié)構(gòu)

在實(shí)驗(yàn)室中,研究人員所占用的計(jì)算機(jī)被稱作“服務(wù)器”。服務(wù)器要與實(shí)驗(yàn)參加者保持距離,以免實(shí)驗(yàn)參加者窺視到服務(wù)器上的信息。服務(wù)器所處的位置要便于研究人員觀察到實(shí)驗(yàn)參加者的活動(dòng)。為滿足這樣的要求,實(shí)驗(yàn)經(jīng)濟(jì)學(xué)實(shí)驗(yàn)室通常被分成實(shí)驗(yàn)區(qū)和控制區(qū)兩個(gè)區(qū)域。在實(shí)驗(yàn)區(qū)內(nèi),每個(gè)實(shí)驗(yàn)參加者占用一臺(tái)計(jì)算機(jī)。實(shí)驗(yàn)經(jīng)濟(jì)學(xué)實(shí)驗(yàn)室的計(jì)算機(jī)數(shù)量依情況而定。174信息傳遞的物理結(jié)構(gòu)在實(shí)驗(yàn)室中,研究人員所占用的計(jì)算機(jī)被稱作實(shí)驗(yàn)者(即研究人員)與實(shí)驗(yàn)參加者之間信息傳遞的關(guān)系

PC1實(shí)驗(yàn)參加者1服務(wù)器(實(shí)驗(yàn)者)……PCn實(shí)驗(yàn)參加者n175實(shí)驗(yàn)者(即研究人員)與實(shí)驗(yàn)參加者之間信息傳遞的關(guān)系PC1在網(wǎng)絡(luò)中,服務(wù)器是信息傳遞的中心,與n個(gè)實(shí)驗(yàn)參加者相連。實(shí)驗(yàn)參加者各自占用一臺(tái)計(jì)算機(jī),編號(hào)從PC1到PCn。每一個(gè)實(shí)驗(yàn)參加者只能向服務(wù)器提交信息,也只能從服務(wù)器獲得信息。服務(wù)器在網(wǎng)絡(luò)中是唯一的信息中轉(zhuǎn)節(jié)點(diǎn),實(shí)驗(yàn)參加者之間直接的信息傳遞被嚴(yán)格禁止。目的是保證研究人員能觀察到實(shí)驗(yàn)運(yùn)行的全部過(guò)程,并記錄所有需要的數(shù)據(jù)。176在網(wǎng)絡(luò)中,服務(wù)器是信息傳遞的中心,與n個(gè)實(shí)驗(yàn)參加者相連。172.ESLNetworkQueue簡(jiǎn)介1772.ESLNetworkQueue簡(jiǎn)介177用VB開(kāi)發(fā)的經(jīng)濟(jì)實(shí)驗(yàn)程序都是由服務(wù)器程序和實(shí)驗(yàn)參加者程序共同構(gòu)成的。服務(wù)器程序在實(shí)驗(yàn)者的計(jì)算機(jī)上運(yùn)行,而實(shí)驗(yàn)參加者程序在實(shí)驗(yàn)參加者所使用的各臺(tái)計(jì)算機(jī)上運(yùn)行。實(shí)驗(yàn)參加者程序?yàn)閷?shí)驗(yàn)參加者提供輸入決策和閱讀反饋信息的界面,而服務(wù)器程序?qū)?shí)驗(yàn)參加者的決策提供給研究人員、并把這些決策記錄下來(lái)。178用VB開(kāi)發(fā)的經(jīng)濟(jì)實(shí)驗(yàn)程序都是由服務(wù)器程序和實(shí)驗(yàn)參加者程序共同ESLNetworkQueue是實(shí)現(xiàn)服務(wù)器程序和實(shí)驗(yàn)參加者程序之間信息傳遞的工具。ESLNetworkQueue由兩個(gè)VB控件構(gòu)成:NQmonitor和NQsubject。NQmonitor被安裝在服務(wù)器程序上,而NQsubject則被裝在實(shí)驗(yàn)參加者程序上。179ESLNetworkQueue是實(shí)現(xiàn)服務(wù)器程序和實(shí)驗(yàn)參加ESLNetworkQueue的網(wǎng)絡(luò)結(jié)構(gòu)關(guān)系

NQsubject(1)NQmonitor……NQsubject(n)180ESLNetworkQueue的網(wǎng)絡(luò)結(jié)構(gòu)關(guān)系NQsub控件NQmonitor的特征181控件NQmonitor的特征181Mqserver屬性Mqserver屬性所描述的是服務(wù)器程序所在的計(jì)算機(jī)在互聯(lián)網(wǎng)中的IP地址。將恰當(dāng)?shù)腎P地址賦予NQmonitor.mqserver是進(jìn)行信息傳遞的第一步,語(yǔ)句如下:

NQmonitor.mqserver=ip&“:2955” 語(yǔ)句中的ip是計(jì)算機(jī)的IP地址。182Mqserver屬性Mqserver屬性所描述的是服務(wù)器程序OpenQueues方法

OpenQueues方法在NQmonitor.mqserver屬性被賦值后使用,其作用是打開(kāi)信息隊(duì)列,讓控件NQmonitor做好信息傳遞服務(wù)的準(zhǔn)備。語(yǔ)法格式如下: NQmonitor.OpenQueues183OpenQueues方法OpenQueues方法在NQmoSendMessage方法

NQmonitor的SendMessage方法的作用是由服務(wù)器向某個(gè)實(shí)驗(yàn)參加者發(fā)送信息,SendMessage方法要在信息隊(duì)列已打開(kāi)(即應(yīng)用OpenQueues方法后)且所有實(shí)驗(yàn)參加者程序都已連入信息隊(duì)列(即應(yīng)用ConnectQueues方法)之后才能夠應(yīng)用。其語(yǔ)法格式如下:

NQmonitor.SendMessageMessage,MessageType,SubjectMessage是服務(wù)器所發(fā)送的信息的內(nèi)容。MessageType是一個(gè)字符串,它所描述的是信息的類型。Subject是一個(gè)整數(shù),它所描述的是接受信息的實(shí)驗(yàn)參加者的識(shí)別號(hào)碼。184SendMessage方法NQmonitor的SendMeMessageArrived事件MessageArrived事件是某個(gè)實(shí)驗(yàn)參加者向服務(wù)器所發(fā)送的信息(即提交的決策)到達(dá)控件NQmonitor的信息隊(duì)列后服務(wù)器所做出的響應(yīng)。語(yǔ)法格式如下:

PrivateSubNQmonitor_MessageArrived(MessageAsVariant,MessageTypeAsString,SubjectAsInteger) [instructions] EndSubMessage是實(shí)驗(yàn)參加者所發(fā)送的信息的內(nèi)容。MessageType是實(shí)驗(yàn)參加者所發(fā)送的信息的類型。Subject是發(fā)送該信息的實(shí)驗(yàn)參加者的識(shí)別號(hào)碼。這三個(gè)固有常量?jī)H可在MessageArrived事件內(nèi)使用。185MessageArrived事件MessageArrived控件NQsubject的特征186

溫馨提示

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