楊 皓 許 倩
(北京科技大學(xué)機(jī)械工程學(xué)院 北京 100083)
《機(jī)械設(shè)計(jì)基礎(chǔ)》是材料、采礦、冶金等非機(jī)械類專業(yè)的專業(yè)必修課,它原本是從《機(jī)械設(shè)計(jì)》課程簡(jiǎn)化而來(lái)。機(jī)械類的學(xué)生在學(xué)完《機(jī)械設(shè)計(jì)》后,一般會(huì)安排《課程設(shè)計(jì)》,這是機(jī)械設(shè)計(jì)課程的重要實(shí)踐教學(xué)環(huán)節(jié)。
課程設(shè)計(jì)的題目一般是一套簡(jiǎn)單的整體設(shè)備設(shè)計(jì),包括電動(dòng)機(jī)、傳動(dòng)裝置及執(zhí)行機(jī)構(gòu)。工科類專業(yè)的學(xué)生應(yīng)在本次課程設(shè)計(jì)中學(xué)習(xí)運(yùn)用標(biāo)準(zhǔn)、規(guī)范、手冊(cè)、圖冊(cè),查閱科技文獻(xiàn),掌握基本的機(jī)械設(shè)計(jì)技能和獲取相關(guān)信息的能力。
在課程設(shè)計(jì)結(jié)束時(shí),要求每個(gè)學(xué)生完成設(shè)備總裝配圖1張、部件裝配圖1張、零件工作圖若干張,設(shè)計(jì)計(jì)算說(shuō)明書1份,學(xué)生完成了這些工作后,最后需要參加一個(gè)小小的答辯,幫助教師了解學(xué)生的機(jī)械設(shè)計(jì)水平。
一位教師通常帶2-3個(gè)班,大約60-90名同學(xué),完成一次課程設(shè)計(jì)。因此教師需要準(zhǔn)備若干題目,讓同學(xué)們參加答辯。答辯時(shí)題目應(yīng)從答辯題庫(kù)中隨機(jī)抽取3-5道,從學(xué)生的回答中往往能看出學(xué)生對(duì)《機(jī)械設(shè)計(jì)基礎(chǔ)》的掌握情況,堪比期末考試的準(zhǔn)確度。
由于答辯往往集中在《課程設(shè)計(jì)》的最后兩天,每位同學(xué)的答辯時(shí)間都不可能很長(zhǎng),題目也不會(huì)太多,所以題目的隨機(jī)性非常重要。必須避免某位同學(xué)剛剛答辯完,下一位或幾位同學(xué)答辯時(shí),所采用的題目與前一位同學(xué)相同的情形,所以題目的數(shù)量應(yīng)比較多,至少在100道以上。
為了達(dá)到這個(gè)目標(biāo),我專門用ppt中附帶的開發(fā)工具,開發(fā)了一個(gè)小程序。這個(gè)開發(fā)工具就是office自帶的VB程序設(shè)計(jì)功能,只要啟用宏即可使用。一般的office在安裝時(shí)都附帶了此功能,所以程序編寫調(diào)試成功后,在任意安裝了Office的電腦上像往常一樣打開ppt文件,就可以運(yùn)行,唯一需要注意的是運(yùn)行時(shí),Offiice會(huì)給出提示:“是否啟用宏?”單擊“啟用”即可。

圖1:界面的布置
編寫這個(gè)程序時(shí),首先要準(zhǔn)備好答辯題庫(kù),題庫(kù)中的題目可以隨時(shí)添加,這里采用了.txt文件類型,因?yàn)閂B可以直接讀取它,該文件也可以用普通的文本文件編輯器編輯 (當(dāng)然word也沒問題),非常方便(見圖1)。
接著就是ppt界面的布置。因?yàn)檫@個(gè)ppt的內(nèi)容是要展示給學(xué)生看的,所以pprt界面上只有三個(gè)對(duì)象:一個(gè)文本框,用于顯示學(xué)生要回答的題目,一個(gè)按鈕,用于單擊顯示下一題,另一個(gè)按鈕,用于啟動(dòng)小程序。
界面布置好后,就需要先打開答辯題庫(kù),將庫(kù)中的題目讀取到一個(gè)數(shù)組中。在此之前,需要先聲明一些變量,如下所示:

其中i是用于讀取文件中題目的計(jì)數(shù)整型變量,setTemp是用于讀取題目的字符串變量,irnd和n是用于循環(huán)的整型變量。
之后,打開題庫(kù)文件,用Do While語(yǔ)句把每一行(即每個(gè)問題)讀入setTemp,再將setTemp的內(nèi)容寫入一個(gè)全局?jǐn)?shù)組strWord(i)中,最后給i加1,記錄目前讀入了多少道題。
Do While循環(huán)結(jié)束后,把i的值賦予一個(gè)全局變量lLen,表示題庫(kù)中一共有多少道題。代碼如下所示:

下面是這個(gè)小程序中最重要的部分,即打亂題目順序,讓每位同學(xué)看到的都是不同的題目。首先建立一個(gè)全局?jǐn)?shù)組(因?yàn)椤跋乱活}”按鈕需要使用它),用For循環(huán)給每個(gè)數(shù)組元素賦值,該值與數(shù)組的下標(biāo)相同,該數(shù)組稱為下標(biāo)數(shù)組a(i),如下所示:

再次建立一個(gè)循環(huán),在循環(huán)中先把當(dāng)前數(shù)組元素的值賦予一個(gè)中間整型變量t,再利用隨機(jī)函數(shù)給整型變量n生成一個(gè)隨機(jī)數(shù)并取整Fix(Rnd*lLen),隨機(jī)數(shù)的范圍是0-小于等于題目數(shù),所以需要加1,因?yàn)榈谝活}的下標(biāo)是1,而數(shù)組一般從0開始。把隨機(jī)數(shù)賦予題目下標(biāo)數(shù)組a(i)的當(dāng)前元素,(注意:因?yàn)榍耙粋€(gè)循環(huán)把下標(biāo)賦予數(shù)組元素本身,所以第i個(gè)數(shù)組元素的值就是i),最后把中間整型變量t賦予隨機(jī)數(shù)組元素。整個(gè)過程相當(dāng)于把當(dāng)前數(shù)組元素與隨機(jī)數(shù)組元素的值對(duì)調(diào),如下所示:

執(zhí)行完這一步后,下標(biāo)數(shù)組的值就是隨機(jī)的,且不會(huì)重復(fù)。也就是說(shuō),假定題庫(kù)中有100道題,程序執(zhí)行到這里,下標(biāo)數(shù)組a(100)中各元素的值就是1、2、3......100,只是其順序是打亂的,且任何兩個(gè)數(shù)組元素的值都不相同。

接著要在單擊“下一題”時(shí),顯示下一題,這比較簡(jiǎn)單,先把下標(biāo)數(shù)組中的最后一個(gè)元素賦予中間變量irnd,再?gòu)念}目數(shù)組中讀取一道題,注意這不一定是最后一題,因?yàn)橄聵?biāo)數(shù)組的值已經(jīng)被打亂,它可能是(1-題目總數(shù))之間的任何一道題。接著把題目總數(shù)減去1,讀取題目數(shù)組中的下一道題,其下標(biāo)是下標(biāo)數(shù)組中的倒數(shù)第二個(gè)元素,以此類推,就可以遍歷所有答辯題目。
為了避免題目數(shù)組中的所有題都已讀取出來(lái),但使用者不知道,這里特意加了一個(gè)判斷語(yǔ)句,當(dāng)題目總數(shù)小于等于0,就表示題目都已讀取完畢,此時(shí)顯示一個(gè)消息框,告知用戶,如圖2所示。
這時(shí),若答辯未完成,可以點(diǎn)擊“確定”,再點(diǎn)擊“啟動(dòng)”,就可以重新啟動(dòng)程序,再點(diǎn)擊“下一題”,繼續(xù)答辯,只不過題目會(huì)與前面的重復(fù),但考慮到題庫(kù)中的題目個(gè)數(shù)超過100道,所以即使題目重復(fù)了,學(xué)生也看不太出來(lái),因?yàn)榇蠖鄶?shù)同學(xué)都沒有耐心從頭看到尾,最多看三五個(gè)人的答辯,所以不會(huì)影響答辯。

圖2:消息框
由上面的編程過程可知,在這個(gè)小程序中,有三個(gè)變量需要設(shè)置為全局的,如下所示:

其中strWord(200),是存儲(chǔ)題目的字符串?dāng)?shù)組,a(200)是存儲(chǔ)題目下標(biāo)的數(shù)組,lLen是存儲(chǔ)題目個(gè)數(shù)的整型變量。這三個(gè)變量搜用于“啟動(dòng)”和“下一題”按鈕。
今年和去年的《課程設(shè)計(jì)》答辯中,我都使用這個(gè)小程序給學(xué)生答辯,目前來(lái)看,程序運(yùn)轉(zhuǎn)正常,學(xué)生回答的問題基本上沒有重復(fù)的。每位同學(xué)答辯時(shí),我都允許其他同學(xué)在旁邊觀看,而不是把當(dāng)前不答辯的同學(xué)趕出去。甚至今年在答辯時(shí),直接在教室的講臺(tái)上進(jìn)行,參加答辯的同學(xué)站在講臺(tái)上,在筆記本電腦上查看題目,回答問題;其他同學(xué)則坐在自己的座位上忙乎自己的事情,兩不干擾。
從今年的答辯情況來(lái)看,我正在考慮進(jìn)行全班同學(xué)的集體答辯。因?yàn)轭}庫(kù)中的題目已經(jīng)積累了百多道,某同學(xué)可能碰巧知道某道題的答案,但其他題目就不一定知道了,若采用集體答辯的方式,則每位同學(xué)都可以聽到所有題目的答案。這對(duì)同學(xué)們掌握課程設(shè)計(jì)的內(nèi)容頗有好處。當(dāng)然還需要考慮集體答辯的細(xì)節(jié),比如如何保證所有同學(xué)都有回答問題的機(jī)會(huì),而不僅僅是幾個(gè)學(xué)霸回答問題;如何調(diào)動(dòng)同學(xué)們回答問題的積極主動(dòng)性等等。