版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、引言1.1開發(fā)背景成都理工大學(xué)金工實(shí)習(xí)基地實(shí)驗(yàn)室情況簡(jiǎn)介:本實(shí)驗(yàn)室主要是機(jī)械相關(guān)專業(yè)及部分非機(jī)械專業(yè)學(xué)生進(jìn)行機(jī)械加工實(shí)習(xí)的場(chǎng)所,學(xué)生按提前的報(bào)名順序分組同時(shí)進(jìn)行機(jī)械加工實(shí)習(xí),加工完成后指導(dǎo)老師要根據(jù)學(xué)生的實(shí)際實(shí)習(xí)表現(xiàn)及學(xué)生此次完成的機(jī)械產(chǎn)品給予相應(yīng)的成績(jī),并登記存儲(chǔ)以供以后處理。每位學(xué)生都各有一本本人機(jī)械實(shí)習(xí)成績(jī)的成績(jī)記錄手冊(cè)、該手冊(cè)由金工基地管理員統(tǒng)一管理,由相應(yīng)指導(dǎo)教師錄入分?jǐn)?shù)。這種方式只能應(yīng)用于同時(shí)實(shí)習(xí)學(xué)生人數(shù)不多時(shí),若實(shí)習(xí)學(xué)生人數(shù)較多這種方法比較雜亂,且學(xué)生成績(jī)數(shù)據(jù)不易于長(zhǎng)期保存和管理,也不易于后期的處理。本軟件開發(fā)的目的正是為改變這種現(xiàn)狀,從純?nèi)斯し绞睫D(zhuǎn)變?yōu)橛糜?jì)算機(jī)軟件來管理數(shù)據(jù),可
2、以方便指導(dǎo)老師將每天實(shí)習(xí)學(xué)生的實(shí)習(xí)成績(jī)輸入計(jì)算機(jī)進(jìn)行存儲(chǔ),不用查找每位學(xué)生的成績(jī)記錄手冊(cè),可以減輕指導(dǎo)老師的工作量,同時(shí)還可以應(yīng)用計(jì)算機(jī)在數(shù)據(jù)處理方面的優(yōu)勢(shì)方便快速的對(duì)數(shù)據(jù)進(jìn)行后期處理,例如:在每周或每學(xué)期結(jié)束時(shí),實(shí)習(xí)主管要按學(xué)校的要求對(duì)本學(xué)期的學(xué)生成績(jī)數(shù)據(jù)進(jìn)行相應(yīng)處理,比如:(1).查詢沒有按時(shí)完成本學(xué)期實(shí)習(xí)的學(xué)生名單,(2).計(jì)算學(xué)生實(shí)習(xí)平均成績(jī),(3).對(duì)本學(xué)期的實(shí)習(xí)情況進(jìn)行統(tǒng)計(jì)以對(duì)下學(xué)期教學(xué)進(jìn)行安排等。 每天實(shí)習(xí)的學(xué)生人數(shù)在100-200人次,即相應(yīng)每天有100-200人次的學(xué)生數(shù)據(jù)要輸入計(jì)算機(jī)儲(chǔ)存,每天會(huì)有不同的課程同時(shí)進(jìn)行,所以會(huì)有數(shù)位教師同時(shí)輸入學(xué)生實(shí)習(xí)成績(jī),每學(xué)期的數(shù)據(jù)總量不是
3、很大,用計(jì)算機(jī)管理這些數(shù)據(jù)量會(huì)方便的多。1.2開發(fā)目標(biāo)金工實(shí)習(xí)基地的學(xué)生數(shù)據(jù)用人工的方法進(jìn)行處理比較繁雜,耗費(fèi)了大量的人力和物力。為了改變這種現(xiàn)狀,我們必須開發(fā)一種既能夠滿足教師管理學(xué)生成績(jī)數(shù)據(jù),又能夠滿足學(xué)生在局域網(wǎng)上方便的選課的系統(tǒng)。 教師通過該系統(tǒng)安排金工實(shí)習(xí)的時(shí)間、地點(diǎn)和人數(shù),實(shí)習(xí)學(xué)生則通過局域網(wǎng)上教師公布的數(shù)據(jù)結(jié)合自己的時(shí)間選擇課程。實(shí)習(xí)完畢,教師通過學(xué)生實(shí)習(xí)的表現(xiàn)及完成的金工產(chǎn)品給予相應(yīng)的成績(jī),并且將成績(jī)上傳到本系統(tǒng)中,實(shí)習(xí)學(xué)生通過登陸局域網(wǎng)查看成績(jī)。而管理員的職責(zé)是對(duì)教師、學(xué)生以及課程的數(shù)據(jù)進(jìn)行宏觀的管理。1.3項(xiàng)目提出的意義現(xiàn)在我國(guó)的大中專院校的學(xué)生成績(jī)管理水平普遍不高,有的還
4、停留在紙介質(zhì)基礎(chǔ)上,這種管理手段已不能適應(yīng)時(shí)代的發(fā)展,因?yàn)樗速M(fèi)了了許多的人力和物力。在當(dāng)今信息時(shí)代這種傳統(tǒng)的管理方法必然被計(jì)算機(jī)為基礎(chǔ)的信息管理系統(tǒng)所代替。如果本系統(tǒng)能被學(xué)校所采用,將會(huì)改變以前靠手工管理學(xué)生成績(jī)的狀況,可以樹立良好的辦學(xué)形象,提高工作效率。1.4系統(tǒng)開發(fā)所需的技術(shù)準(zhǔn)備1.4.1硬件技術(shù)要求(1).處理器:Intel Pentium(R)4或更高(2).內(nèi)存:512MB(3).硬盤空間:80MB1.4.2軟件技術(shù)要求(1).操作系統(tǒng):Windows 2000/XP(2).數(shù)據(jù)庫(kù):Microsoft office2000 Access1.4.3軟件結(jié)構(gòu)設(shè)計(jì)依照使用環(huán)境調(diào)查,可以
5、有以下兩種方案:(1).用Excel儲(chǔ)存數(shù)據(jù),所有學(xué)生成績(jī)數(shù)據(jù)由一臺(tái)計(jì)算機(jī)統(tǒng)一存儲(chǔ),指導(dǎo)老師可以從不同計(jì)算機(jī)輸入學(xué)生實(shí)習(xí)成績(jī),實(shí)習(xí)主管每學(xué)期所要進(jìn)行的后期數(shù)據(jù)處理可以拷貝代任一計(jì)算機(jī)上進(jìn)行,但是只能Excel軟件本身所具有的一些功能去完成管理即數(shù)據(jù)處理任務(wù),不能應(yīng)用以下方案中數(shù)據(jù)庫(kù)的一些優(yōu)異的數(shù)據(jù)處理功能,處理費(fèi)事費(fèi)時(shí)。(2).考慮到可能有幾位教師同時(shí)進(jìn)行數(shù)據(jù)輸入,自然設(shè)計(jì)成網(wǎng)絡(luò)數(shù)據(jù)庫(kù),由統(tǒng)一的一臺(tái)計(jì)算機(jī)管理數(shù)據(jù),易于保證數(shù)據(jù)的一致性,每位指導(dǎo)教師可以在不同計(jì)算機(jī)上同時(shí)輸入成績(jī)數(shù)據(jù)而不會(huì)影響到其他指導(dǎo)教師,還可以為每位指導(dǎo)教師設(shè)置不同的帳戶并分配不同的用戶權(quán)限,這樣可以使不同的操作也有易于相應(yīng)
6、的管理防止出現(xiàn)混亂,實(shí)習(xí)主管學(xué)期末所要進(jìn)行的后期數(shù)據(jù)處理都可以依靠相應(yīng)處理軟件進(jìn)行,可以利用數(shù)據(jù)庫(kù)所提供的一些優(yōu)異的數(shù)據(jù)處理功能,方便數(shù)據(jù)處理降低后期數(shù)據(jù)處理工作難度。分析這兩種方案很容易知道各自的優(yōu)點(diǎn)與缺點(diǎn),第二種方案明顯優(yōu)于第一種方案,可以滿足本軟件所要具有的功能并且很適合學(xué)校等非商業(yè)組織使用,所以本軟件采用設(shè)計(jì)第二種方案。1.4.4實(shí)際方案選擇1數(shù)據(jù)庫(kù)選擇在上述方案分析中我們已經(jīng)選擇了采用第二種方案。在選擇數(shù)據(jù)庫(kù)軟件時(shí),我們應(yīng)該考慮到該數(shù)據(jù)庫(kù)應(yīng)該具有以下功能:存儲(chǔ)學(xué)生成績(jī)數(shù)據(jù),可以對(duì)已存儲(chǔ)在其中的數(shù)據(jù)進(jìn)行檢索查詢、更改、刪除等功能,而這些功能是所有數(shù)據(jù)庫(kù)都有的,例如:Oracle,Mic
7、rosoft SQL,MySQL,Microsoft Office2000 Access等,一些數(shù)據(jù)庫(kù)的高級(jí)功能在本系統(tǒng)中根本不需要,所以不用考慮一些企業(yè)級(jí)數(shù)據(jù)庫(kù),同時(shí)考慮本軟件實(shí)際的運(yùn)行條件以及成本,我認(rèn)為采用Microsoft Office2000 Access比較合理。選用此數(shù)據(jù)庫(kù)的原因有以下幾點(diǎn):(1).它是完全網(wǎng)絡(luò)化的跨平臺(tái)型的數(shù)據(jù)庫(kù)系統(tǒng);(2).它是具有客戶端/服務(wù)器結(jié)構(gòu)體系的分布式數(shù)據(jù)庫(kù)管理系統(tǒng);(3).它是Microsoft Office 軟件中的一部分,一般說來,只要計(jì)算機(jī)裝了Office就都有Access,因此使用方便;(4).使用簡(jiǎn)便、運(yùn)行速度快、管理方便、安全可靠性強(qiáng)。
8、2系統(tǒng)開發(fā)工具的選擇系統(tǒng)窗口以及界面方面選擇HTML語言、Java語言,采用Microsoft自帶的ASP服務(wù)器腳本開發(fā)環(huán)境進(jìn)行開發(fā),其具有以下功能:(1).訪問服務(wù)器端的文件系統(tǒng);(2).連接數(shù)據(jù)庫(kù)并開發(fā)基于數(shù)據(jù)庫(kù)的應(yīng)用;(3).在應(yīng)用中嵌入Active X、COM組件和Java Applet作為開發(fā)工具的ASP是微軟于1996年11月推出的Web應(yīng)用程序開發(fā)技術(shù)。在微軟的文件中把ASP描述為:“一個(gè)服務(wù)器的腳本環(huán)境,在這里可以運(yùn)行和生成動(dòng)態(tài)的、交互的、高性能的Web服務(wù)器應(yīng)用程序。”從這段描述可以看出,ASP既不是一種語言,也不是一種開發(fā)工具,而是一種技術(shù)框架。其主要功能是為生成動(dòng)態(tài)的的交
9、互式的Web服務(wù)器應(yīng)用程序提供一種功能強(qiáng)大的技術(shù)或方法。ASP的主要特性是能夠把HTML、腳本、組件等有機(jī)的結(jié)合在一起,形成一個(gè)能夠在服務(wù)器上運(yùn)行的應(yīng)用程序,并把按用戶要求專門制作的標(biāo)準(zhǔn)HTML頁面送給客戶端瀏覽器。ASP與我們通常在客戶端實(shí)現(xiàn)動(dòng)態(tài)主頁的技術(shù)如Java Applet,Active X,Javascript等,不同的是ASP的命令腳本語言都是在服務(wù)器上解釋運(yùn)行,執(zhí)行后的結(jié)果產(chǎn)生HTML頁面并送到瀏覽器。由于ASP是在服務(wù)器端解釋執(zhí)行的,開發(fā)者可以不必考慮瀏覽器是否支持ASP。同時(shí),由于只是標(biāo)準(zhǔn)的HTML頁面送到瀏覽器,在瀏覽器上看不到ASP程序,因此可以防止程序被盜取,保護(hù)了開發(fā)
10、者的利益。隨著Internet的發(fā)展,信息的不斷增加和變化,網(wǎng)站維護(hù)人員不得不經(jīng)常修改他們的網(wǎng)頁,靜態(tài)Web站點(diǎn)的開發(fā)和維護(hù)變的越來越困難,特別是基于數(shù)據(jù)庫(kù)驅(qū)動(dòng)的Web站點(diǎn)更是如此。由于靜態(tài)網(wǎng)頁不能與瀏覽者進(jìn)行有效的交互,使人們感到越來越乏味,所以開發(fā)動(dòng)態(tài)網(wǎng)頁或動(dòng)態(tài)內(nèi)容成了越來越多的站點(diǎn)所追求的目標(biāo)。而ASP技術(shù)無疑成為正確的選擇,它作為開發(fā)動(dòng)態(tài)網(wǎng)頁的工具有如下特點(diǎn):(1).它具有學(xué)習(xí)快、設(shè)計(jì)快的特點(diǎn),開發(fā)者在較短的時(shí)間內(nèi)即可快速學(xué)會(huì)和快速設(shè)計(jì)出Web應(yīng)用程序。(2).ASP的源代碼在服務(wù)器端執(zhí)行,代碼保密性好。(3).集成于HTML中,無需編譯鏈接可直接執(zhí)行,使用文本編輯器如記事本即可設(shè)計(jì)。
11、(4).與瀏覽器無關(guān),用戶端只要使用常規(guī)可執(zhí)行HTML代碼的瀏覽器。(5).ASP是面向?qū)ο蟮?。ASP的工作過程為:ASP技術(shù)直接建立于微軟的Web服務(wù)器中,所有的微軟Web服務(wù)器都支持ASP。Web服務(wù)器會(huì)自動(dòng)把ASP程序碼解釋為HTML格式的主頁內(nèi)容,再送到用戶端的瀏覽器顯示。作為開發(fā)語言之一的HTML是一種專為WWW 網(wǎng)頁顯示及瀏覽而設(shè)計(jì)的簡(jiǎn)易標(biāo)記語言,目前是WWW 上制作網(wǎng)頁的標(biāo)準(zhǔn)語言格式。Tim BernersLee對(duì)HTML所下的定義是:“HTML是一種用以創(chuàng)造超文件的簡(jiǎn)易資料格式,其所創(chuàng)造出來的文件可在不同的操作平臺(tái)間動(dòng)”。由此可知,可移植性與簡(jiǎn)易性是HTML的兩大特征。HTML
12、文件除了包含文字信息外,還可包括聲音、影像等多媒體信息,而HTML的超鏈接除了網(wǎng)頁內(nèi)的鏈接, 也包括網(wǎng)頁之間的鏈接。HTML的特點(diǎn):(1).HTML的DTD設(shè)計(jì)主要是滿足網(wǎng)上顯示的需求。許多標(biāo)簽純粹是用來指定網(wǎng)頁的顯示細(xì)節(jié),例如:br是換行;hr是畫一條平行線;b表示粗體字。(2).HTML有內(nèi)建的樣式(style)。HTML希望直接使用SGML標(biāo)記來控制網(wǎng)頁顯示的樣式,即HTML不需要有分離的樣式表,這使得HTML更為簡(jiǎn)單易用,但缺點(diǎn)是靈活性差, 同樣的文件內(nèi)容只能設(shè)定一種顯示樣式。(3).HTML引用SGML的標(biāo)記最簡(jiǎn)化特征。這是為了盡量減少HTML 文件標(biāo)記的數(shù)量, 使HTML的標(biāo)記更簡(jiǎn)
13、單,最明顯的例子是結(jié)束標(biāo)簽(endtag)的省略。結(jié)束標(biāo)簽的省略雖然使得HTML的標(biāo)記更為簡(jiǎn)單,但也成為描述文件結(jié)構(gòu)時(shí)的限制,HTML文件中所有的段落標(biāo)記在地位上都是平行的,省略了結(jié)束標(biāo)簽就無法描述“段落中又有段落”的結(jié)構(gòu)。(4).HTML沒有采用SGML的超鏈接機(jī)制。HTML的超鏈接是利用標(biāo)簽的“href”屬性來指向Web上的任意文件,例如: 是一個(gè)外部鏈接是內(nèi)部鏈接而內(nèi)部鏈接的目標(biāo)點(diǎn)是利用標(biāo) 的“name”屬性來指定,例如:作為開發(fā)語言的Java具有以下特點(diǎn):(1).簡(jiǎn)單:容易編寫程序,不需要長(zhǎng)時(shí)間的訓(xùn)練,而能滿足現(xiàn)代的需求。程序小型亦是簡(jiǎn)單的一種特性,使得軟件體能夠在小型機(jī)器上執(zhí)行,基本
14、的解釋器約為40K,若加上基本的程序庫(kù),約為215K。(2).面向?qū)ο蟮模好嫦驅(qū)ο蟮脑O(shè)計(jì)是一種重心在資料和接口的技巧,若以木頭為比喻,一個(gè)面向?qū)ο蟮哪绢^,它最主要的重點(diǎn)是即將要做的木椅子,其次才是所需要的工具;反之,一個(gè)以非面向?qū)ο蟮哪绢^,它所關(guān)心的只是工具,最近的既插既用亦是面向?qū)ο笤O(shè)計(jì)的重點(diǎn)。(3).分布式:Java有一個(gè)很周全的程序庫(kù),且很容易地與HTTP和FTP等TCP/IP通訊協(xié)定相配合,Java應(yīng)用程序能在網(wǎng)絡(luò)上開啟及連接使用物件,就如同透過URLS連接使用一個(gè)本地文件系統(tǒng)。(4).健壯的:由Java所編寫出的程序能在多種情況下執(zhí)行而具有其穩(wěn)定性,Java 與C/C+最大不同點(diǎn)是J
15、ava有一個(gè)指針模型來排除內(nèi)存被覆蓋或毀損數(shù)據(jù)的可能性。(5).安全的:Java是被設(shè)計(jì)用于網(wǎng)絡(luò)及分布式的環(huán)境中,安全性自必是一個(gè)重要的考慮,Java擁有數(shù)個(gè)階層的互鎖保護(hù)措施,能有效的防止病毒的侵入和破壞行為的發(fā)生。(6).高效能的:Java位元碼迅速的能被轉(zhuǎn)換成機(jī)器碼,從位元碼到機(jī)器碼的效能幾乎與C與C+沒有區(qū)別。(7).動(dòng)態(tài)的:Java比C或C+語言更具有動(dòng)態(tài)性,更能適應(yīng)時(shí)刻在變的環(huán)境,Java不會(huì)因程序庫(kù)的更新,而必須重新編譯程序。1.5系統(tǒng)與數(shù)據(jù)庫(kù)的鏈接ASP(Active Server Pages)是Microsoft推出的一種用以取代通用網(wǎng)關(guān)接口的技術(shù),利用它不僅能夠產(chǎn)生動(dòng)態(tài)的、
16、交互的、高性能的Web應(yīng)用程序,而且可以進(jìn)行復(fù)雜的數(shù)據(jù)庫(kù)操作Access數(shù)據(jù)庫(kù)隸屬于Microsoft Office家族,取得較為容易,且界面和Office家族相似,容易掌握和使用(1)OLEDB創(chuàng)建Access連接較好的創(chuàng)建對(duì)Access數(shù)據(jù)庫(kù)的連接的方法是使用原始OLEDB提供程序有2種面向Access的原始OLEDB提供程序它們是處理Access數(shù)據(jù)庫(kù)的不同版本下面例子說明怎樣用40版打開連接:注意:參數(shù)Data Source 提供通向Access數(shù)據(jù)庫(kù)的路徑(mdb文件)若不在連接字符串中提供所有連接信息,也可以將其保存在Data Link中(2)用ODBC 生成Access連接用OD
17、BC產(chǎn)生對(duì)Access數(shù)據(jù)庫(kù)的連接,有3種選擇可以把連接信息保存在Windows寄存器中、文件中或連接字符串中a.要把連接信息保存在Windows寄存器中,必須創(chuàng)建一個(gè)System DSN步驟如下: 啟動(dòng)ODBC 數(shù)據(jù)資源管理器此程序位于Windows控制面板中,標(biāo)有ODBC Data Source 在ODBC數(shù)據(jù)資源管理器中選擇標(biāo)有System DSN的一項(xiàng) 單擊Add,選擇Access Driver,F(xiàn)inish 輸入一個(gè)數(shù)據(jù)資源名稱(如Access DSN)及對(duì)此連接的描述你可以選擇創(chuàng)建一個(gè)新的Access數(shù)據(jù)庫(kù)或選擇標(biāo)有Select的按鈕,在現(xiàn)存Access數(shù)據(jù)庫(kù)中選擇(注意,單擊Ad
18、vance,則提供幾個(gè)高級(jí)選項(xiàng)例如,可以對(duì)Access數(shù)據(jù)庫(kù)提供一個(gè)缺省的目錄或缺省的注冊(cè)名和密碼)單擊OK結(jié)束創(chuàng)建System DSN后,可以在位于同一臺(tái)計(jì)算機(jī)的任何ASP中使用它例如,下面的腳本用名為Access DSN 的System DNS打開一個(gè)Access數(shù)據(jù)庫(kù)連接:b. 創(chuàng)建File DSN 的過程與創(chuàng)建System DSN 過程相似要?jiǎng)?chuàng)建一個(gè)File DSN,啟動(dòng)ODBC 數(shù)據(jù)資源管理器,選擇標(biāo)有File DSN的一項(xiàng),擊Add,規(guī)定用來保存連接信息的文件名稱和地址剩下的步驟與創(chuàng)建System DSN 相同創(chuàng)建File DSN后,可用下面腳本打開對(duì)一個(gè)Access數(shù)據(jù)庫(kù)的連接c
19、. 若不希望創(chuàng)建System DSN 和File DSN,可以創(chuàng)建無DSN 連接,這必須在連接字符串中另外加入2個(gè)參數(shù):DRIVER 和DBQ:上述程序主要功能是驗(yàn)證登陸數(shù)據(jù),如果未輸入登陸數(shù)據(jù),系統(tǒng)將報(bào)錯(cuò)。5.3 管理員管理首頁源程序如下:function StopScroll()if(Timer!=null)clearTimeout(Timer)function showsubmenu(sid)Which El = eval(submenu + sid);if (whichEl.style.display = none)eval(submenu + sid + .style.display
20、=;);elseeval(submenu + sid + .style.display=none;);5.4學(xué)生選課界面學(xué)生通過登陸界面進(jìn)入系統(tǒng)后,和管理員登陸系統(tǒng)的界面類似,首先也是顯示學(xué)生所能做的功能導(dǎo)航鏈接。當(dāng)學(xué)生進(jìn)行選課操作的時(shí)候,首先顯示所能夠選擇的課程列表。為此,我們?cè)O(shè)計(jì)了顯示課程列表的界面。在該界面中,需要包括如下信息:課程號(hào)、課程名、成績(jī)、預(yù)選課程、所在系。還應(yīng)該提供對(duì)課程操作的入口,包括選課框,即所說的選課。源程序如下:sql1=select * from Stu where SId=&Session(StuID)&set rs1= server.createobject(a
21、dodb.recordset) rs1.open sql1,conn,1,3sql=select * from StuMark where SId=&Session(StuID)&set rs = server.createobject(adodb.recordset) rs.open sql,conn,1,3rs.pagesize = 2if rs.eof thenrs_total = 0elsers_total = rs.recordcountend ifdim pagenogetpageno = trim(request(pageno)if(getpageno = )thenpageno
22、 = 1elsepageno = getpagenoEnd ifif(not rs.eof)thenrs.absolutepage = pagenoend if(rs.eof)then else repeat_rows = 0 while(repeat_rows rs.pagesize) and (not rs.eof)Sql_2 = Select LName from Lesson Where ID =&trim(rs(CId)& Set rs_2 = conn.Execute(Sql_2)If(rs_2.Eof)Thentemp = 無Elsetemp = rs_2(LName)End I
23、fResponse.Write(Server.Htmlencode(temp)rs_2.CloseSet rs_2 = Nothing if rs(Remarks) then response.Write rs(Remarks) else response.Write(無)5.5教師登陸界面 教師登錄后進(jìn)入教師界面后,取得了所教班級(jí)和課程列表、取得了預(yù)選某課程的所有學(xué)生以及接收學(xué)生操作。因此根據(jù)這些功能的需要,我們逐一實(shí)現(xiàn)了這些功能。 教師查看班級(jí)和課程列表之后,教師就要查看每個(gè)班級(jí)對(duì)應(yīng)課程的所有學(xué)生,然后和管理員協(xié)商然后決定接收那些學(xué)生上課。 教師授課完畢后,根據(jù)實(shí)習(xí)學(xué)生的實(shí)際表現(xiàn),在系統(tǒng)中
24、給予學(xué)生以相應(yīng)的實(shí)習(xí)成績(jī)。源代碼如下:function aa(Dir)tt.doScroll(Dir);Timer=setTimeout(aa(+Dir+),100)/這里100為滾動(dòng)速度function StopScroll()if(Timer!=null)clearTimeout(Timer)function showsubmenu(sid)whichEl = eval(submenu + sid);if (whichEl.style.display = none)eval(submenu + sid + .style.display=;);elseeval(submenu + sid +
25、 .style.display=none;);第六章、 結(jié)論通過對(duì)系統(tǒng)進(jìn)行反復(fù)的修改和測(cè)試,金工實(shí)習(xí)基地選課系統(tǒng)的主要功能得以成功實(shí)現(xiàn)。系統(tǒng)的成功實(shí)現(xiàn)說明:金工實(shí)習(xí)基地的教學(xué)工作完全可以通過計(jì)算機(jī)進(jìn)行處理,這必將推動(dòng)金工實(shí)習(xí)基地的教學(xué)管理信息化的進(jìn)一步發(fā)展,對(duì)整個(gè)學(xué)校的教學(xué)管理工作將起到積極的示范作用。在整個(gè)系統(tǒng)的設(shè)計(jì)過程中,自己遇到了很多困難。當(dāng)拿到這個(gè)論題時(shí),我決定用Visual C+作為系統(tǒng)程序的開發(fā)工具,用Microsoft SQL作為系統(tǒng)數(shù)據(jù)庫(kù)的開發(fā)工具,因?yàn)楫?dāng)時(shí)對(duì)這兩個(gè)軟件的開發(fā)語言比較熟悉。但是在系統(tǒng)的開發(fā)過程中,我發(fā)現(xiàn)雖然Visual C+語法層次清晰、開發(fā)程序比較方便,但是與
26、網(wǎng)絡(luò)兼容性以及數(shù)據(jù)庫(kù)的接口問題處理起來比較復(fù)雜。因此,我改變了系統(tǒng)程序的開發(fā)工具,決定用和數(shù)據(jù)庫(kù)連接比較方便的Microsoft 自帶的技術(shù)框架ASP作為開發(fā)工具,其主要使用HTML語言和Java語言作為開發(fā)語言,而這兩種語言在網(wǎng)絡(luò)上有很好的兼容性??紤]到安裝軟件的煩瑣,我決定用Office 自帶的數(shù)據(jù)庫(kù)Access作為數(shù)據(jù)庫(kù)開發(fā)軟件,但是事實(shí)證明這個(gè)決定是明智的,數(shù)據(jù)庫(kù)Access與ASP也很容易鏈接和交互。當(dāng)然,一下子改變開發(fā)工具對(duì)于自己是個(gè)艱難的決定,因?yàn)樽约阂呀?jīng)用前面的開發(fā)工具做了大量的工作。在這個(gè)過程中,指導(dǎo)教師朱江老師及時(shí)的糾正了我選用開發(fā)工具的錯(cuò)誤,使自己迷途知返,才能順利的完成
27、整個(gè)畢業(yè)設(shè)計(jì)。致謝自己的論文終于可以提交了,看著近15000 字的論文,不禁可以輕松一下了。很感謝我的畢業(yè)設(shè)計(jì)得到了指導(dǎo)教師朱江老師的大力支持,也同時(shí)給了我悉心的指導(dǎo),使我全心完成本次論文。還有在論文制作過程中的到了周仲禮老師,王新莊老師等的諸多建議和熱情支持和關(guān)懷,鼓舞。在這里表示特別感謝。工科論文寫作是一個(gè)需要技術(shù)和邏輯的創(chuàng)作,所以感謝我的室友和研究生朋友以及外教Mary等為我論文寫作提供幫助和關(guān)心鼓勵(lì),使我順利的寫完論文。也感謝每一個(gè)看到我的論文的老師和朋友,因?yàn)槟銈兊拈喿x使我的論文散發(fā)了生命力,由于時(shí)間關(guān)系和倉(cāng)促,還希望得到各位智者的懇切批評(píng)與指點(diǎn)。參考書目(1)徐彤.ASP實(shí)戰(zhàn)錦囊.
28、機(jī)械工業(yè)出版社.2001(2)楊威.ASP3.0網(wǎng)絡(luò)開發(fā)技術(shù).人民郵電出版社.2000(3)李世杰.ASP網(wǎng)頁設(shè)計(jì)手冊(cè).清華大學(xué)出版社.1999(4)趙莉.ASP3.0網(wǎng)站編程與實(shí)例演練.西安電子科技大學(xué)出版社.2000(5)董長(zhǎng)虹.ASP動(dòng)態(tài)網(wǎng)站建設(shè).國(guó)防工業(yè)出版社.2002(6)宣小剛.ASP數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)實(shí)例導(dǎo)航.人民郵電出版社.2003(7)李春葆.Access數(shù)據(jù)庫(kù)程序設(shè)計(jì).清華大學(xué)出版社.2005(8)范國(guó)平.Access 2000數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)實(shí)例.人民郵電出版社.2002(9)張興庭.ASP信息管理系統(tǒng)開發(fā)實(shí)例導(dǎo)航.電子工業(yè)出版社.2004(10)彭澎.管理信息系統(tǒng).機(jī)械工業(yè)出
29、版社.2003(11)Richard Anderson .ASP 3.0.機(jī)械工業(yè)出版社.2001(12)Helen Feddema .精通Microsoft Access.清華大學(xué)出版社.2002附錄資料:不需要的可以自行刪除C語言中如何獲取時(shí)間?精度如何?1 使用time_t time( time_t * timer ) 精確到秒2 使用clock_t clock() 得到的是CPU時(shí)間精確到1/CLOCKS_PER_SEC秒3 計(jì)算時(shí)間差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精確
30、到毫秒5 如果使用MFC的CTime類,可以用CTime:GetCurrentTime() 精確到秒6 要獲取高精度時(shí)間,可以使用BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)獲取系統(tǒng)的計(jì)數(shù)器的頻率BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)獲取計(jì)數(shù)器的值然后用兩次計(jì)數(shù)器的差除以Frequency就得到時(shí)間。7 Multimedia Timer FunctionsThe following functions are used with mul
31、timedia timers.timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime/*/用標(biāo)準(zhǔn)C實(shí)現(xiàn)獲取當(dāng)前系統(tǒng)時(shí)間的函數(shù)一.time()函數(shù)time(&rawtime)函數(shù)獲取當(dāng)前時(shí)間距1970年1月1日的秒數(shù),以秒計(jì)數(shù)單位,存于rawtime 中。#include time.hvoid main ()time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );printf ( 007The current
32、 date/time is: %s, asctime (timeinfo) );exit(0);=#include - 必須的時(shí)間函數(shù)頭文件time_t - 時(shí)間類型(time.h 定義是typedef long time_t; 追根溯源,time_t是long)struct tm - 時(shí)間結(jié)構(gòu),time.h 定義如下:int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm_yday;int tm_isdst;time ( &rawtime ); - 獲取時(shí)間,以秒計(jì),從19
33、70年1月一日起算,存于rawtimelocaltime ( &rawtime ); - 轉(zhuǎn)為當(dāng)?shù)貢r(shí)間,tm 時(shí)間結(jié)構(gòu)asctime ()- 轉(zhuǎn)為標(biāo)準(zhǔn)ASCII時(shí)間格式:星期 月 日 時(shí):分:秒 年二.clock()函數(shù),用clock()函數(shù),得到系統(tǒng)啟動(dòng)以后的毫秒級(jí)時(shí)間,然后除以CLOCKS_PER_SEC,就可以換成“秒”,標(biāo)準(zhǔn)c函數(shù)。clock_t clock ( void );#includeclock_t t = clock();long sec = t / CLOCKS_PER_SEC;他是記錄時(shí)鐘周期的,實(shí)現(xiàn)看來不會(huì)很精確,需要試驗(yàn)驗(yàn)證;三.gettime(&t); 據(jù)說tc2.
34、0的time結(jié)構(gòu)含有毫秒信息#include#includeint main(void)struct time t;gettime(&t);printf(The current time is: -:d:d.dn,t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);return 0;time 是一個(gè)結(jié)構(gòu)體, 其中成員函數(shù) ti_hund 是毫秒。四.GetTickCount(),這個(gè)是windows里面常用來計(jì)算程序運(yùn)行時(shí)間的函數(shù);DWORD dwStart = GetTickCount();/這里運(yùn)行你的程序代碼DWORD dwEnd = GetTickCou
35、nt();則(dwEnd-dwStart)就是你的程序運(yùn)行時(shí)間, 以毫秒為單位這個(gè)函數(shù)只精確到55ms,1個(gè)tick就是55ms。五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高DWORD dwStart = timeGetTime();/這里運(yùn)行你的程序代碼DWORD dwEnd = timeGetTime();則(dwEnd-dwStart)就是你的程序運(yùn)行時(shí)間, 以毫秒為單位雖然返回的值單位應(yīng)該是ms,但傳說精度只有10ms。=/*Unix#unix時(shí)間相關(guān),也是標(biāo)準(zhǔn)庫(kù)的/*1.timegm函數(shù)只是將struct tm結(jié)構(gòu)轉(zhuǎn)成t
36、ime_t結(jié)構(gòu),不使用時(shí)區(qū)信息;time_t timegm(struct tm *tm);2.mktime使用時(shí)區(qū)信息time_t mktime(struct tm *tm);timelocal 函數(shù)是GNU擴(kuò)展的與posix函數(shù)mktime相當(dāng)time_t timelocal (struct tm *tm);3.gmtime函數(shù)只是將time_t結(jié)構(gòu)轉(zhuǎn)成struct tm結(jié)構(gòu),不使用時(shí)區(qū)信息;struct tm * gmtime(const time_t *clock);4.localtime使用時(shí)區(qū)信息struct tm * localtime(const time_t *clock);1
37、.time獲取時(shí)間,stime設(shè)置時(shí)間time_t t;t = time(&t);2.stime其參數(shù)應(yīng)該是GMT時(shí)間,根據(jù)本地時(shí)區(qū)設(shè)置為本地時(shí)間;int stime(time_t *tp)3.UTC=true 表示采用夏時(shí)制;4.文件的修改時(shí)間等信息全部采用GMT時(shí)間存放,不同的系統(tǒng)在得到修改時(shí)間后通過localtime轉(zhuǎn)換成本地時(shí)間;5.設(shè)置時(shí)區(qū)推薦使用setup來設(shè)置;6.設(shè)置時(shí)區(qū)也可以先更變/etc/sysconfig/clock中的設(shè)置再將ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效time_t只能表示68年的范圍,即
38、mktime只能返回1970-2038這一段范圍的time_t看看你的系統(tǒng)是否有time_t64,它能表示更大的時(shí)間范圍/*windows#Window里面的一些不一樣的/*一.CTime () 類VC編程一般使用CTime類 獲得當(dāng)前日期和時(shí)間CTime t = GetCurrentTime();SYSTEMTIME 結(jié)構(gòu)包含毫秒信息typedef struct _SYSTEMTIME WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds
39、; SYSTEMTIME, *PSYSTEMTIME;SYSTEMTIME t1;GetSystemTime(&t1)CTime curTime(t1);WORD ms = t1.wMilliseconds;SYSTEMTIME sysTm;:GetLocalTime(&sysTm);在time.h中的_strtime() /只能在windows中用char t11;_strtime(t);puts(t);/*獲得當(dāng)前日期和時(shí)間CTime tm=CTime:GetCurrentTime();CString str=tm.Format(%Y-%m-%d);在VC中,我們可以借助CTime時(shí)間類,
40、獲取系統(tǒng)當(dāng)前日期,具體使用方法如下:CTime t = CTime:GetCurrentTime(); /獲取系統(tǒng)日期,存儲(chǔ)在t里面int d=t.GetDay(); /獲得當(dāng)前日期int y=t.GetYear(); /獲取當(dāng)前年份int m=t.GetMonth(); /獲取當(dāng)前月份int h=t.GetHour(); /獲取當(dāng)前為幾時(shí)int mm=t.GetMinute(); /獲取當(dāng)前分鐘int s=t.GetSecond(); /獲取當(dāng)前秒int w=t.GetDayOfWeek(); /獲取星期幾,注意1為星期天,7為星期六二.CTimeSpan類如果想計(jì)算兩段時(shí)間的差值,可以使用
41、CTimeSpan類,具體使用方法如下:CTime t1( 1999, 3, 19, 22, 15, 0 );CTime t = CTime:GetCurrentTime();CTimeSpan span=t-t1; /計(jì)算當(dāng)前系統(tǒng)時(shí)間與時(shí)間t1的間隔int iDay=span.GetDays(); /獲取這段時(shí)間間隔共有多少天int iHour=span.GetTotalHours(); /獲取總共有多少小時(shí)int iMin=span.GetTotalMinutes();/獲取總共有多少分鐘int iSec=span.GetTotalSeconds();/獲取總共有多少秒三._timeb()
42、函數(shù)_timeb定義在SYSTIMEB.H,有四個(gè)fieldsdstflagmillitmtimetimezonevoid _ftime( struct _timeb *timeptr );struct _timeb timebuffer;_ftime( &timebuffer );取當(dāng)前時(shí)間:文檔講可以到ms,有人測(cè)試,好象只能到16ms!四.設(shè)置計(jì)時(shí)器定義TIMER ID#define TIMERID_JISUANFANGSHI 2在適當(dāng)?shù)牡胤皆O(shè)置時(shí)鐘,需要開始其作用的地方;SetTimer(TIMERID_JISUANFANGSHI,200,NULL);在不需要定時(shí)器的時(shí)候的時(shí)候銷毀掉時(shí)
43、鐘KillTimer(TIMERID_JISUANFANGSHI);對(duì)應(yīng)VC程序的消息映射void CJisuan:OnTimer(UINT nIDEvent)switch(nIDEvent)#如何設(shè)定當(dāng)前系統(tǒng)時(shí)間windowsSYSTEMTIME m_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;m_myLocalTime.wHour=0;m_myLocalTime.wMinute=0;m_myLocalTime.wSec;m_myLocalTime.wMill
44、isec;lpSystemTime=&m_myLocalTime;if( SetLocalTime(lpSystemTime) ) /此處換成 SetSystemTime( )也不行MessageBox(OK !);elseMessageBox(Error !);SYSTEMTIME m_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;lpSystemTime=&m_myLocalTime;if( SetDate(lpSystemTime) ) /此處換成 SetS
45、ystemTime( )也不行MessageBox(OK !);elseMessageBox(Error !);本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:HYPERLINK /khuang2008/archive/2008/12/09/3483274.aspx/khuang2008/archive/2008/12/09/3483274.aspx一種制作微秒級(jí)精度定時(shí)器的方法當(dāng)使用定時(shí)器時(shí),在很多情況下只用到毫秒級(jí)的時(shí)間間隔,所以只需用到下面的兩種常用方式就滿足要求了。一是用SetTimer函數(shù)建立一個(gè)定時(shí)器后,在程序中通過處理由定時(shí)器發(fā)送到線程消息隊(duì)列中的WM_TIMER消息,而得到定時(shí)的效果(退
46、出程序時(shí)別忘了調(diào)用和SetTimer配對(duì)使用的KillTimer函數(shù))。二是利用GetTickCount函數(shù)可以返回自計(jì)算機(jī)啟動(dòng)后的時(shí)間,通過兩次調(diào)用GetTickCount函數(shù),然后控制它們的差值來取得定時(shí)效果,此方式跟第一種方式一樣,精度也是毫秒級(jí)的。用這兩種方式取得的定時(shí)效果雖然在許多場(chǎng)合已經(jīng)滿足實(shí)際的要求,但由于它們的精度只有毫秒級(jí)的,而且在要求定時(shí)時(shí)間間隔小時(shí),實(shí)際定時(shí)誤差大。下面介紹一種能取得高精度定時(shí)的方法。在一些計(jì)算機(jī)硬件系統(tǒng)中,包含有高精度運(yùn)行計(jì)數(shù)器(high-resolution performance counter),利用它可以獲得高精度定時(shí)間隔,其精度與CPU的時(shí)鐘頻
47、率有關(guān)。采用這種方法的步驟如下:1、首先調(diào)用QueryPerformanceFrequency函數(shù)取得高精度運(yùn)行計(jì)數(shù)器的頻率f。單位是每秒多少次(n/s),此數(shù)一般很大。2、在需要定時(shí)的代碼的兩端分別調(diào)用QueryPerformanceCounter以取得高精度運(yùn)行計(jì)數(shù)器的數(shù)值n1,n2。兩次數(shù)值的差值通過f換算成時(shí)間間隔,t=(n2-n1)/f。下面舉一個(gè)例子來演示這種方法的使用及它的精確度。在VC 6.0 下用MFC建立一個(gè)對(duì)話框工程,取名為HightTimer.在對(duì)話框面板中控件的布局如下圖:其中包含兩個(gè)靜態(tài)文本框,兩個(gè)編輯框和兩個(gè)按紐。上面和下面位置的編輯框的ID分別為IDC_E_TE
48、ST和IDC_E_ACTUAL,通過MFC ClassWizard添加的成員變量也分別對(duì)應(yīng)為DWORD m_dwTest和DWORD m_dwAct. “退出”按紐的ID為IDOK,“開始測(cè)試”按紐ID為IDC_B_TEST,用MFC ClassWizard添加此按紐的單擊消息處理函數(shù)如下:void CHightTimerDlg:OnBTest()/ TODO: Add your control notification handler code hereUpdateData(TRUE); /取輸入的測(cè)試時(shí)間值到與編輯框相關(guān)聯(lián)的成員變量m_dwTest中LARGE_INTEGER freque
49、nce;if(!QueryPerformanceFrequency( &frequence) /取高精度運(yùn)行計(jì)數(shù)器的頻率,若硬件不支持則返回FALSEMessageBox(Your computer hardware doesnt support the high-resolution performance counter,Not Support, MB_ICONEXCLAMATION | MB_OK);LARGE_INTEGER test, ret;test.QuadPart = frequence.QuadPart * m_dwTest / 1000000; /通過頻率換算微秒數(shù)到對(duì)應(yīng)的
50、數(shù)量(與CPU時(shí)鐘有關(guān)),1秒=1000000微秒ret = MySleep( test ); /調(diào)用此函數(shù)開始延時(shí),返回實(shí)際花銷的數(shù)量m_dwAct = (DWORD)(1000000 * ret.QuadPart / frequence.QuadPart ); /換算到微秒數(shù)UpdateData(FALSE); /顯示到對(duì)話框面板其中上面調(diào)用的MySleep函數(shù)如下:LARGE_INTEGER CHightTimerDlg:MySleep(LARGE_INTEGER Interval)/ 功能:執(zhí)行實(shí)際的延時(shí)功能 / 參數(shù):Interval 參數(shù)為需要執(zhí)行的延時(shí)與時(shí)間有關(guān)的數(shù)量 / 返回值
51、:返回此函數(shù)執(zhí)行后實(shí)際所用的時(shí)間有關(guān)的數(shù)量 / LARGE_INTEGER privious, current, Elapse;QueryPerformanceCounter( &privious );current = privious;while( current.QuadPart - privious.QuadPart Interval.QuadPart )QueryPerformanceCounter( t );Elapse.QuadPart = current.QuadPart - privious.QuadPart;return Elapse;注:別忘了在頭文件中為此函數(shù)添加函數(shù)聲
52、明。至此,可以編譯和執(zhí)行此工程了,結(jié)果如上圖所示。在本人所用的機(jī)上(奔騰366, 64M內(nèi)存)測(cè)試,當(dāng)測(cè)試時(shí)間超過3微秒時(shí),準(zhǔn)確度已經(jīng)非常高了,此時(shí)機(jī)器執(zhí)行本身延時(shí)函數(shù)代碼的時(shí)間對(duì)需要延時(shí)的時(shí)間影響很小了。上面的函數(shù)由于演示測(cè)試的需要,沒有在函數(shù)級(jí)封裝,下面給出的函數(shù)基本上可以以全局函數(shù)的形式照搬到別的程序中。BOOL MySleep(DWORD dwInterval)/ 功能:執(zhí)行微秒級(jí)的延時(shí)功能 / 參數(shù):Interval 參數(shù)為需要的延時(shí)數(shù)(單位:微秒) / 返回值:若計(jì)算機(jī)硬件不支持此功能,返回FALSE,若函數(shù)執(zhí)行成功,返回TRUE / BOOL bNormal = TRUE;LAR
53、GE_INTEGER frequence, privious, current, interval;if(!QueryPerformanceFrequency( &frequence):MessageBox(NULL, Your computer hardware doesnt support the high-resolution performance counter,Not Support, MB_ICONEXCLAMATION | MB_OK); /或其它的提示信息return FALSE;interval.QuadPart = frequence.QuadPart * dwInter
54、val / 1000000;bNormal = bNormal & QueryPerformanceCounter( &privious );current = privious;while( current.QuadPart - privious.QuadPart interval.QuadPart )bNormal = bNormal & QueryPerformanceCounter( t );return bNormal;需要指出的是,由于在此函數(shù)中的代碼很多,機(jī)器在執(zhí)行這些代碼所花費(fèi)的時(shí)間也很長(zhǎng),所以在需要幾個(gè)微秒的延時(shí)時(shí),會(huì)影響精度。實(shí)際上,讀者在熟悉這種方法后,只要使用Query
55、PerformanceFrequency和QueryPerformanceCounter這兩個(gè)函數(shù)就能按實(shí)際需要寫出自己的延時(shí)代碼了。使用CPU時(shí)間戳進(jìn)行高精度計(jì)時(shí)對(duì)關(guān)注性能的程序開發(fā)人員而言,一個(gè)好的計(jì)時(shí)部件既是益友,也是良師。計(jì)時(shí)器既可以作為程序組件幫助程序員精確的控制程序進(jìn)程,又是一件有力的調(diào)試武器,在有經(jīng)驗(yàn)的程序員手里可以盡快的確定程序的性能瓶頸,或者對(duì)不同的算法作出有說服力的性能比較。在Windows平臺(tái)下,常用的計(jì)時(shí)器有兩種,一種是timeGetTime多媒體計(jì)時(shí)器,它可以提供毫秒級(jí)的計(jì)時(shí)。但這個(gè)精度對(duì)很多應(yīng)用場(chǎng)合而言還是太粗糙了。另一種是QueryPerformanceCount
56、計(jì)數(shù)器,隨系統(tǒng)的不同可以提供微秒級(jí)的計(jì)數(shù)。對(duì)于實(shí)時(shí)圖形處理、多媒體數(shù)據(jù)流處理、或者實(shí)時(shí)系統(tǒng)構(gòu)造的程序員,善用QueryPerformanceCount/QueryPerformanceFrequency是一項(xiàng)基本功。本文要介紹的,是另一種直接利用Pentium CPU內(nèi)部時(shí)間戳進(jìn)行計(jì)時(shí)的高精度計(jì)時(shí)手段。以下討論主要得益于Windows圖形編程一書,第15頁17頁,有興趣的讀者可以直接參考該書。關(guān)于RDTSC指令的詳細(xì)討論,可以參考Intel產(chǎn)品手冊(cè)。本文僅僅作拋磚之用。在Intel Pentium以上級(jí)別的CPU中,有一個(gè)稱為“時(shí)間戳(Time Stamp)”的部件,它以64位無符號(hào)整型數(shù)的格
57、式,記錄了自CPU上電以來所經(jīng)過的時(shí)鐘周期數(shù)。由于目前的CPU主頻都非常高,因此這個(gè)部件可以達(dá)到納秒級(jí)的計(jì)時(shí)精度。這個(gè)精確性是上述兩種方法所無法比擬的。在Pentium以上的CPU中,提供了一條機(jī)器指令RDTSC(Read Time Stamp Counter)來讀取這個(gè)時(shí)間戳的數(shù)字,并將其保存在EDX:EAX寄存器對(duì)中。由于EDX:EAX寄存器對(duì)恰好是Win32平臺(tái)下C+語言保存函數(shù)返回值的寄存器,所以我們可以把這條指令看成是一個(gè)普通的函數(shù)調(diào)用。像這樣:inline unsigned _int64 GetCycleCount() _asm RDTSC 但是不行,因?yàn)镽DTSC不被C+的內(nèi)嵌匯
58、編器直接支持,所以我們要用_emit偽指令直接嵌入該指令的機(jī)器碼形式0X0F、0X31,如下:inline unsigned _int64 GetCycleCount() _asm _emit 0 x0F _asm _emit 0 x31 以后在需要計(jì)數(shù)器的場(chǎng)合,可以像使用普通的Win32 API一樣,調(diào)用兩次GetCycleCount函數(shù),比較兩個(gè)返回值的差,像這樣: unsigned long t; t = (unsigned long)GetCycleCount(); /Do Something time-intensive . t -= (unsigned long)GetCycleC
59、ount(); Windows圖形編程第15頁編寫了一個(gè)類,把這個(gè)計(jì)數(shù)器封裝起來。有興趣的讀者可以去參考那個(gè)類的代碼。作者為了更精確的定時(shí),做了一點(diǎn)小小的改進(jìn),把執(zhí)行RDTSC指令的時(shí)間,通過連續(xù)兩次調(diào)用GetCycleCount函數(shù)計(jì)算出來并保存了起來,以后每次計(jì)時(shí)結(jié)束后,都從實(shí)際得到的計(jì)數(shù)中減掉這一小段時(shí)間,以得到更準(zhǔn)確的計(jì)時(shí)數(shù)字。但我個(gè)人覺得這一點(diǎn)點(diǎn)改進(jìn)意義不大。在我的機(jī)器上實(shí)測(cè),這條指令大概花掉了幾十到100多個(gè)周期,在Celeron 800MHz的機(jī)器上,這不過是十分之一微秒的時(shí)間。對(duì)大多數(shù)應(yīng)用來說,這點(diǎn)時(shí)間完全可以忽略不計(jì);而對(duì)那些確實(shí)要精確到納秒數(shù)量級(jí)的應(yīng)用來說,這個(gè)補(bǔ)償也過于粗糙了。 這個(gè)方法的優(yōu)點(diǎn)是: 1.高精度。可以直接達(dá)到納秒級(jí)的計(jì)時(shí)精度(在1GHz的CPU上每個(gè)時(shí)鐘周期就是一納秒),這是其他計(jì)時(shí)方法所難以企及的。 2.成本低。timeGetTime 函數(shù)需要鏈接多媒體庫(kù)winmm.lib,QueryPerformance* 函數(shù)根據(jù)MSDN的說明,需要硬件的支持(雖然我還沒有見過不支持的機(jī)器)和KERNEL庫(kù)的支持,所以二者都只能在Windows平臺(tái)下使用(關(guān)于DOS平臺(tái)下的高精度計(jì)時(shí)問題,可以參考圖形程序開發(fā)人員指南,里面有關(guān)于控制定時(shí)器8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《創(chuàng)新作品推介技巧》課件
- 2022長(zhǎng)沙市岳麓區(qū)高考英語完形填空和閱讀理解一輪練習(xí)(10)及答案
- 【全程復(fù)習(xí)方略】2020年高考政治一輪單元評(píng)估檢測(cè)(十五)(江蘇專供)
- 北京市通州區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期末考試語文試卷(含答案)
- 2024-2025學(xué)年遼寧省沈陽市沈河區(qū)七年級(jí)(上)期末英語試卷(含答案)
- 【名師一號(hào)】2022屆高三歷史一輪復(fù)習(xí)調(diào)研試題:第十單元-中國(guó)特色社會(huì)主義建設(shè)的道路10-19a
- 三年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)及答案
- 【創(chuàng)新設(shè)計(jì)】2020-2021學(xué)年高中化學(xué)魯科版選修5-分層訓(xùn)練:第2章-第3節(jié)-第1課時(shí)-醛和酮
- 《疾病與健康課件》課件
- 杜絕不良行為-遠(yuǎn)離違法犯罪主題班會(huì)
- 消防水系統(tǒng)綜合調(diào)試方案
- 《秦統(tǒng)一中國(guó)》教學(xué)反思
- 國(guó)家開放大學(xué)《企業(yè)集團(tuán)財(cái)務(wù)管理》形考任務(wù)1-4參考答案
- 經(jīng)鼻腸梗阻導(dǎo)管護(hù)理課件
- 職業(yè)暴露處理方法與報(bào)告流程圖
- 目標(biāo)、計(jì)劃與行動(dòng)課件
- 動(dòng)態(tài)變形模量Evd試驗(yàn)記錄
- 年產(chǎn)90000噸聚丁二烯工廠聚合工段的物料衡算
- 五年級(jí)省情禮儀心理健康綜合知識(shí)教案
- 2020-2021學(xué)年浙江省溫州市八年級(jí)(上)期末數(shù)學(xué)試卷(附答案詳解)
- 蔬菜籽種采購(gòu)清單
評(píng)論
0/150
提交評(píng)論