基于JAVA技術(shù)BS結(jié)構(gòu)的視頻會(huì)議系統(tǒng)設(shè)計(jì)文檔_第1頁(yè)
基于JAVA技術(shù)BS結(jié)構(gòu)的視頻會(huì)議系統(tǒng)設(shè)計(jì)文檔_第2頁(yè)
基于JAVA技術(shù)BS結(jié)構(gòu)的視頻會(huì)議系統(tǒng)設(shè)計(jì)文檔_第3頁(yè)
基于JAVA技術(shù)BS結(jié)構(gòu)的視頻會(huì)議系統(tǒng)設(shè)計(jì)文檔_第4頁(yè)
基于JAVA技術(shù)BS結(jié)構(gòu)的視頻會(huì)議系統(tǒng)設(shè)計(jì)文檔_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于JAVA技術(shù)B/S結(jié)構(gòu)的視頻會(huì)議系統(tǒng)設(shè)計(jì)文檔序 言目前絕大多數(shù)的視頻會(huì)議系統(tǒng)是基于硬件或C/S結(jié)構(gòu)的,基于硬件的一般價(jià)格高昂,一般小型企業(yè)難以支付,C/S結(jié)構(gòu)的會(huì)議系統(tǒng)由于需要下載安裝客戶(hù)端,移動(dòng)性差。本著功能實(shí)用,價(jià)格適中,可以移動(dòng)性強(qiáng),可移植性強(qiáng),開(kāi)發(fā)了基于JAVA技術(shù),B/S結(jié)構(gòu)的視頻會(huì)議系統(tǒng)。使用本系統(tǒng),您可以利用普通的PC機(jī)、標(biāo)準(zhǔn)的視頻采集設(shè)備、耳機(jī)和麥克風(fēng)就能進(jìn)行基于Internet的虛擬會(huì)議。與傳統(tǒng)的基于硬件的解決方案相比,本視頻會(huì)議系統(tǒng)是純軟件的解決方案。您無(wú)需投入高昂的成本,就能夠?qū)崿F(xiàn)高質(zhì)量、高可靠性的音視頻通訊、文字交流、文檔共享、電子白板等多種會(huì)議功能,有效地節(jié)約時(shí)間

2、和經(jīng)費(fèi),提高企業(yè)的工作效率。在技術(shù)實(shí)現(xiàn)上,我們運(yùn)用了JAVA的JMF,采用壓縮技術(shù),用協(xié)議實(shí)現(xiàn)視頻,音頻的實(shí)時(shí)傳播,利用Socket編程實(shí)現(xiàn)文字,電子白板,協(xié)同瀏覽等數(shù)據(jù)交流。為做到瘦客戶(hù)端,采用JSP構(gòu)建整個(gè)系統(tǒng)。這樣只需一個(gè)瀏覽器就可以進(jìn)去視頻聊天系統(tǒng),簡(jiǎn)單,便捷。 本視頻會(huì)議系統(tǒng)是基于B/S結(jié)構(gòu)的,因此只需配置服務(wù)端程序,客戶(hù)端就只需使用瀏覽器,在有JAVA虛擬機(jī)環(huán)境下就可以通過(guò)網(wǎng)絡(luò)參與網(wǎng)絡(luò)會(huì)議。快捷,方便。目 錄1 引言-4 1.1 軟件名稱(chēng)-4 1.2 創(chuàng)意起源-4 1.3 技術(shù)可行性分析-4 1.4 所采用技術(shù)簡(jiǎn)介-4 1.5 實(shí)現(xiàn)的工具與語(yǔ)言-42 任務(wù)概述-5 2.1 目標(biāo)與方

3、向-5 2.2 軟件的運(yùn)行環(huán)境-5 2.3 軟件的實(shí)用價(jià)值-5 2.4 軟件的發(fā)展方向-53 需求分析-6 3.1 簡(jiǎn)單流程-6 3.2 功能模塊的劃分-6 4 總體設(shè)計(jì)-74.1 詳細(xì)功能模塊圖-74.2 具體實(shí)現(xiàn)模塊的設(shè)計(jì)-75 測(cè)試運(yùn)行-95.1 測(cè)試環(huán)境-95.1 所需相關(guān)支持軟件-9 6 使用說(shuō)明-96.1 安裝與初始化指南-96.2 音視頻圖文服務(wù)器使用指南-116.3 音頻視頻窗口使用指南-116.4 圖文聊天窗口使用指南-126.5 文件共享,協(xié)同瀏覽使用指南-127 設(shè)計(jì)心得-137.1 技術(shù)領(lǐng)悟-137.2 總結(jié)-148 參考文獻(xiàn)-141 作品簡(jiǎn)要介紹1.1 軟件名稱(chēng) 基于

4、JAVA技術(shù)BS結(jié)構(gòu)的視頻會(huì)議系統(tǒng) (VMeeting視頻會(huì)議系統(tǒng))創(chuàng)意起源 目前絕大多數(shù)的視頻會(huì)議系統(tǒng)是基于硬件或C/S結(jié)構(gòu)的,基于硬件的一般價(jià)格高昂,一般小型企業(yè)難以支付,C/S結(jié)構(gòu)的會(huì)議系統(tǒng)由于需要下載安裝客戶(hù)端,移動(dòng)性差。本著功能實(shí)用,價(jià)格適中,可以移動(dòng)性強(qiáng),可移植性強(qiáng),開(kāi)發(fā)了基于JAVA技術(shù),B/S結(jié)構(gòu)的視頻會(huì)議系統(tǒng)。1.3 技術(shù)可行性分析在技術(shù)實(shí)現(xiàn)上,我們運(yùn)用了JAVA的JMF,采用壓縮技術(shù),用協(xié)議實(shí)現(xiàn)視頻,音頻的實(shí)時(shí)傳播,利用Socket編程實(shí)現(xiàn)文字,電子白板,協(xié)同瀏覽等數(shù)據(jù)交流。為做到瘦客戶(hù)端,采用JSP構(gòu)建整個(gè)系統(tǒng)。這樣只需一個(gè)瀏覽器就可以進(jìn)去視頻聊天系統(tǒng),簡(jiǎn)單,便捷。 1.

5、4 所采用技術(shù)簡(jiǎn)介 JMF(Java Media Framework) Java媒體框架,包含了許多用于處理多媒體的API可以讓基于JAVA的應(yīng)用實(shí)現(xiàn)音頻、視頻的捕捉、處理、播放、傳輸?shù)裙δ?。利用它,可以?shí)現(xiàn)音、視頻播放,網(wǎng)絡(luò)視頻聊天、視頻會(huì)議等功能。 RTP協(xié)議實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol)是在Internet上處理多媒體數(shù)據(jù)流的一種網(wǎng)絡(luò)協(xié)議,利用它能夠在1對(duì)1(unicast,單播)或者1對(duì)多(multicast,多播)的網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)流媒體數(shù)據(jù)的實(shí)時(shí)傳輸。RTP通常使用UDP來(lái)進(jìn)行多媒體數(shù)據(jù)的傳輸,但如果需要的話(huà)可以使用TCP或者ATM等其它協(xié)議

6、。RTP協(xié)議的設(shè)計(jì)目的是提供實(shí)時(shí)數(shù)據(jù)傳輸中的時(shí)間戳信息以及各數(shù)據(jù)流的同步功能。 Socket通常也稱(chēng)作套接字,用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過(guò)套接字向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。 實(shí)現(xiàn)的工具與語(yǔ)言本系統(tǒng)采用eclipse作為開(kāi)發(fā)平臺(tái),用JAVA語(yǔ)言編寫(xiě)applet類(lèi),javaBeans,用Dreamweaver開(kāi)發(fā)網(wǎng)站的JSP頁(yè)面,用Photoshop,F(xiàn)ireworks對(duì)圖片進(jìn)行處理。2 任務(wù)概述 目標(biāo)與方向目標(biāo)是開(kāi)發(fā)一個(gè)功能實(shí)用,移動(dòng)性能強(qiáng),適合中小型企業(yè)的視頻會(huì)議系統(tǒng)。通過(guò)這個(gè)系統(tǒng),企業(yè)只需投入極小的資金就可以進(jìn)行實(shí)時(shí)的文字,音,視頻的交流。把給軟件做成純W

7、eb方式,不需要下載任何客戶(hù)端程序;除了基本的電腦設(shè)備外,不需要增加任何硬件設(shè)備,直接和傳統(tǒng)網(wǎng)絡(luò)互通;跨平臺(tái),可以運(yùn)行于window ,UNIX, Linux各種操作系統(tǒng)。 軟件的運(yùn)行環(huán)境服務(wù)器端硬件環(huán)境:CPU:主頻在800MHz以上 內(nèi)存:128M以上 顯示卡:顯存在 16M 以上服務(wù)器端軟件環(huán)境:服務(wù)器采用:Windows 2000 Professional WWW服務(wù)器采用: resin2.1 后臺(tái)數(shù)據(jù)庫(kù):MySqlJava虛擬機(jī)(加JMF包)瀏覽器: Internet explorer 5.0 或以上客戶(hù)端硬件環(huán)境:CPU:主頻在600MHz以上 內(nèi)存:128M以上 顯示卡:顯存在

8、16M 以上 客戶(hù)端軟件環(huán)境 Java虛擬機(jī)(加JMF包) 瀏覽器: Internet explorer 5.0 或以上 2.3 軟件的實(shí)用價(jià)值 適用于中小型企業(yè)的網(wǎng)絡(luò)視頻會(huì)議,不需額外的硬件設(shè)備投入,純web格式2.4 軟件的發(fā)展方向設(shè)想加入更多的實(shí)用功能例如論壇,企業(yè)公文發(fā)布,文件簽收等,使系統(tǒng)成為企業(yè)日常辦公電子化的工具3 需求分析3.1 簡(jiǎn)單流程用戶(hù)登錄身份識(shí)別進(jìn)入系統(tǒng)視頻圖文交流音頻,視頻,圖文服務(wù)器發(fā)送圖文音頻,視頻發(fā)送圖文音頻,視頻數(shù)據(jù)中心后臺(tái)信息管理會(huì)議主席人對(duì)用戶(hù)的音,視頻,圖文控制 功能模塊的劃分語(yǔ)音視頻實(shí)時(shí)視頻 最多可顯示12路會(huì)議視頻,畫(huà)面顯示所有與會(huì)者的即時(shí)視頻圖像語(yǔ)

9、音交流 允許與會(huì)者自由地進(jìn)行語(yǔ)音交流或主席人有控制式授予發(fā)言權(quán)數(shù)據(jù)交流文字交流 您隨時(shí)可以使用文字交流區(qū)和與會(huì)者進(jìn)行交流,支持群聊和私聊電子白板 在該頁(yè)面中,您可以畫(huà)多種圖形表達(dá)您的構(gòu)思協(xié)同瀏覽 在該頁(yè)面中,您可以輸入各種地址讓與會(huì)者共同去瀏覽Internet資源文檔共享 上傳共享文件:點(diǎn)擊瀏覽按鈕選擇要上傳的文件,點(diǎn)擊上傳即可 共享文件下載:在列表里選擇要下載的文件,點(diǎn)擊“下載”即可電子公告板 實(shí)時(shí)滾動(dòng)系統(tǒng)最新公告控制模塊 控制在線(xiàn)用戶(hù)語(yǔ)音,視頻,圖文交流。后臺(tái)管理 管理系統(tǒng)數(shù)據(jù)。如文件上傳信息,用戶(hù)信息,公告內(nèi)容。 概要設(shè)計(jì)4.1 詳細(xì)功能模塊圖用戶(hù)登錄模塊文檔共享模塊協(xié)同瀏覽模塊圖文交流

10、模塊語(yǔ)音視頻模塊進(jìn)入系統(tǒng)公告板模塊數(shù)據(jù)中心音頻,視頻,圖文服務(wù)器控制模塊后臺(tái)管理模塊具體實(shí)現(xiàn)模塊的設(shè)計(jì)語(yǔ)音視頻模塊客戶(hù)端Applet捕獲本地?cái)z像頭,本地麥克風(fēng),向音,視頻服務(wù)器發(fā)送連接請(qǐng)求服務(wù)器與客戶(hù)端用RTP協(xié)議建立數(shù)據(jù)連接,隨即分配端口服務(wù)器將獲取的客戶(hù)端數(shù)據(jù)向所有在線(xiàn)用戶(hù)廣播圖文交流模塊 圖文服務(wù)器Socket監(jiān)聽(tīng)客戶(hù)端的連接,客戶(hù)正常登錄后就分配ID 客戶(hù)端向服務(wù)器發(fā)送信息字符串(按自定的協(xié)議)服務(wù)器判斷接收到的信息的類(lèi)型(文字信息,電子白板信息)服務(wù)器將處理好后的信息向在線(xiàn)用戶(hù)發(fā)送。協(xié)同瀏覽模塊服務(wù)器Socket監(jiān)聽(tīng)客戶(hù)端的網(wǎng)頁(yè)地址請(qǐng)求服務(wù)器將某客戶(hù)端的頁(yè)面地址發(fā)送給所有用戶(hù)客戶(hù)端w

11、ebBrowser(Applet)獲取地址,打開(kāi)相應(yīng)的網(wǎng)頁(yè),實(shí)現(xiàn)在線(xiàn)用戶(hù)同時(shí)瀏覽同個(gè)網(wǎng)站文檔共享模塊允許登錄的客戶(hù)上傳文檔資料到web服務(wù)器顯示所有可供下載的文檔資料列表 公告板模塊 1)實(shí)時(shí)滾動(dòng)顯示后臺(tái)最新公告 用戶(hù)登錄模塊 1)根據(jù)用戶(hù)名和密碼查詢(xún)用戶(hù)權(quán)限,判斷用戶(hù)等級(jí)。后臺(tái)管理模塊用戶(hù)信息管理模塊文件上傳信息管理模塊公告發(fā)布管理模塊控制模塊 1)實(shí)時(shí)控制在線(xiàn)用戶(hù)視頻信息,音頻信息發(fā)送與否音頻,視頻,圖文服務(wù)器模塊socket監(jiān)聽(tīng)所有用戶(hù)的連接請(qǐng)求判斷用戶(hù)發(fā)送字符串的信息,進(jìn)行分類(lèi)處理。根據(jù)不同信息(視頻,音頻,文字圖形信息)通過(guò)不同的端口發(fā)送5 測(cè)試運(yùn)行5.1 測(cè)試環(huán)境 音視頻圖文服務(wù)器

12、程序在中文Linux和Windows XP 上測(cè)試通過(guò),并且運(yùn)行正常。 后臺(tái)管理程序,網(wǎng)站前臺(tái)頁(yè)面(JSP)在中文Linux和Windows XP 上的resin服務(wù)器上測(cè)試通過(guò),并且運(yùn)行正常。 客戶(hù)端訪(fǎng)問(wèn)測(cè)試:系統(tǒng)Windows XP InternetExport6.0測(cè)試通過(guò)。 所需相關(guān)支持軟件 服務(wù)器端和客戶(hù)端都需裝有JMF多媒體包。并且還需安裝JAVA虛擬機(jī)(JVM)用于運(yùn)行Applet 使用說(shuō)明軟件安裝與初始化1)服務(wù)器,客戶(hù)端安裝Java虛擬機(jī)。須將附帶的jmf.jar的包放入java虛擬機(jī)安裝目錄下的libext。例如:java虛擬機(jī)安裝在“D:Program FilesJava

13、jre1.5.0_02”,則jmf.jar放在“D:Program FilesJavajre1.5.0_02libext”下面。 2)安裝服務(wù)器端的安全數(shù)字簽名證書(shū)。之前已經(jīng)通過(guò)keytool命令產(chǎn)生了一個(gè)密匙庫(kù),文件名為Summit.store,和產(chǎn)生簽名時(shí)所要用的證書(shū)Summit.cert。服務(wù)器端安裝時(shí)只需在命令行中輸入jarsigner -keystore Summit.store Chat.jar Summit 將數(shù)據(jù)安全簽名證書(shū)和服務(wù)器包Chat.jar進(jìn)行綁定,要求輸入的密碼為:123456。 如圖: 3) 把視頻音頻服務(wù)器文件server.bat和server.jar 拷到某安

14、裝目錄下,點(diǎn)擊server.bat即可啟動(dòng)該后臺(tái)服務(wù)器。4) 將vmeeting壓縮包解壓縮,放入服務(wù)器的根目錄下(本次光盤(pán)附帶的為已經(jīng)解壓縮的文件)。例如用resin服務(wù)器,即可將該解壓縮出來(lái)的文件夾放在webapps目錄下。啟動(dòng)web服務(wù)器,通過(guò)瀏覽器地址欄輸入 HYPERLINK http:/服務(wù)器IP::端口號(hào)/vmeeting/ http:/服務(wù)器IP::端口號(hào)/vmeeting/ 既可以進(jìn)入視頻服務(wù)器的登陸頁(yè)面。如圖:(注:本次參賽的版本,為方便演示作品,暫時(shí)不加入用戶(hù)權(quán)限的判斷,輸入任意用戶(hù)名字即可)登陸后顯示的全屏幕截圖: 音視頻圖文服務(wù)器使用指南1)運(yùn)行Server.bat,

15、音視頻圖文服務(wù)器就會(huì)啟動(dòng),服務(wù)器socket開(kāi)始監(jiān)聽(tīng)。如圖:2)服務(wù)器消息欄即時(shí)顯示服務(wù)器收到的信息,即顯示哪位用戶(hù)發(fā)送哪些類(lèi)型的信息或請(qǐng)求。3)用戶(hù)列表:顯示所有在線(xiàn)用戶(hù)的ID號(hào)。4)文件菜單:包括重啟服務(wù)器,和退出服務(wù)器選項(xiàng)6.3 音頻視頻窗口使用指南 1)該窗口把本地視頻,音頻捕獲并發(fā)送給服務(wù)器。2)通過(guò)該窗口你可以看到所有在線(xiàn)用戶(hù)的視頻信息。如該圖的右上角可以看到有一個(gè)已經(jīng)正確初始化的視頻界面。 3)同時(shí)該窗口把從服務(wù)器或取到的音頻信息進(jìn)行播放6.4圖文聊天窗口使用指南 該窗口的左邊為文字交流區(qū),你可自由的在此處輸入你需要的文字發(fā)送。右邊為電子白板,你可以選擇不同顏色的畫(huà)筆通過(guò)鼠標(biāo)的移

16、動(dòng),勾畫(huà)你要表達(dá)的圖形和文字。在線(xiàn)用戶(hù)可以即時(shí)收到其他用戶(hù)發(fā)送的圖文信息。6.5文件共享,協(xié)同瀏覽使用指南6.5.1文件共享你通過(guò)該窗口你可以看到所有用戶(hù)上傳的文件,點(diǎn)擊“下載”就可以把文件下載到本地??梢酝ㄟ^(guò)點(diǎn)擊右上角的上傳文件,選擇你要共享的文件進(jìn)行上傳。6.5.2協(xié)同瀏覽通過(guò)該窗口你可以和所有與會(huì)者同步瀏覽同個(gè)網(wǎng)頁(yè)。你可以通過(guò)該窗口的瀏覽器地址欄輸入網(wǎng)絡(luò)地址,就可以把該信息發(fā)送給所有在線(xiàn)用戶(hù),此時(shí)所有用戶(hù)的瀏覽器同時(shí)打開(kāi)該頁(yè)面,達(dá)到協(xié)同瀏覽的功能。7 設(shè)計(jì)心得7.1 技術(shù)領(lǐng)悟 JavaApplet安全性限制問(wèn)題 Java在發(fā)布之前已經(jīng)基于安全原因的考慮對(duì)Applet作了很多的限制,Jav

17、a主要通過(guò)SecurityManage類(lèi)來(lái)監(jiān)視Applet的運(yùn)行,如果Applet的操作超出允許范圍,SecurityManage類(lèi)便拋出一個(gè)異常警告。Applet的安全限制如下: 1)Applet不能加載客戶(hù)端的類(lèi) 2)Applet不能訪(fǎng)問(wèn)客戶(hù)端的文件 3)Applet不能在客戶(hù)端創(chuàng)建網(wǎng)絡(luò)連接,防止客戶(hù)端資料被盜4)Applet不能在客戶(hù)端啟動(dòng)任何應(yīng)用程序5)Applet不能獲取限制系統(tǒng)屬性由于這些限制性,對(duì)客戶(hù)端的網(wǎng)絡(luò)數(shù)據(jù)傳播有較大的限制,對(duì)客戶(hù)端本地系統(tǒng)屬性的調(diào)用也同樣存在限制,這給程序的開(kāi)發(fā)帶來(lái)了較大的難題。解決方法:利用數(shù)字簽名超越Java Applet的安全限制。1將程序需要用到的

18、各種包文件全部打包到一個(gè)包中。為剛才創(chuàng)建的包文件創(chuàng)建keystore和keys。使用剛才生成的鑰匙來(lái)對(duì)jar文件進(jìn)行簽名4將公共鑰匙導(dǎo)入到一個(gè)cer文件中。這樣就解決了Applet網(wǎng)絡(luò)傳輸?shù)陌踩詥?wèn)題。通過(guò)加載數(shù)字認(rèn)證,在登陸網(wǎng)站的時(shí)候就會(huì)有該認(rèn)證提示框,點(diǎn)擊“是”或“總是有效”即可。 總結(jié)本次開(kāi)發(fā)的系統(tǒng)主要是基于JAVA的JMF多媒體框架,但網(wǎng)上系統(tǒng)介紹的中文網(wǎng)站很少,我們只好通過(guò)訪(fǎng)問(wèn)sun公司的技術(shù)論壇和仔細(xì)研讀其提供的技術(shù)文檔。這些資料都是英文文章,確實(shí)對(duì)我們的專(zhuān)業(yè)英語(yǔ)能力的一個(gè)考驗(yàn)。由于開(kāi)發(fā)時(shí)間比較匆忙,許多細(xì)節(jié)的東西未予考慮,如數(shù)據(jù)傳播的安全性問(wèn)題,希望可以通過(guò)數(shù)據(jù)加密的方法解決。存

19、在的不足望評(píng)委給與批評(píng)指正。 8 參考文獻(xiàn)Java安全通信、數(shù)字證書(shū)及應(yīng)用實(shí)踐 HYPERLINK /SoftChannel/72342371961929728/20040803/1838232.shtml /SoftChannel/72342371961929728/20040803/1838232.shtml2. Java Forums - Java Media Framework HYPERLINK /forum.jspa?forumID=28&start=45 /forum.jspa?forumID=28&start=453. JMF資源 HYPERLINK /woodwind/302

20、708.html /woodwind/302708.html 附錄資料:不需要的可以自行刪除Abstract: Based on the comprehensive analysis on the plastic parts structure service requirement, mounding quality and mould menu factoring cost. A corresponding injection mould of internal side core pulling was designed. By adopting the multi-direction

21、and multi-combination core-pulling. A corresponding injection mould of internal side core pulling was designed, the working process of the mould was introducedC語(yǔ)言詳解 - 枚舉類(lèi)型注:以下全部代碼的執(zhí)行環(huán)境為VC+ 6.0在程序中,可能需要為某些整數(shù)定義一個(gè)別名,我們可以利用預(yù)處理指令#define來(lái)完成這項(xiàng)工作,您的代碼可能是:#define MON 1#define TUE 2#define WED 3#define THU 4#

22、define FRI 5#define SAT 6#define SUN 7在此,我們定義一種新的數(shù)據(jù)類(lèi)型,希望它能完成同樣的工作。這種新的數(shù)據(jù)類(lèi)型叫枚舉型。1. 定義一種新的數(shù)據(jù)類(lèi)型 - 枚舉型 以下代碼定義了這種新的數(shù)據(jù)類(lèi)型 - 枚舉型enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN;(1) 枚舉型是一個(gè)集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號(hào),隔開(kāi)。(2) DAY是一個(gè)標(biāo)識(shí)符,可以看成這個(gè)集合的名字,是一個(gè)可選項(xiàng),即是可有可無(wú)的項(xiàng)。(3) 第一個(gè)枚舉成員的默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個(gè)成員上加1。(4) 可以人

23、為設(shè)定枚舉成員的值,從而自定義某個(gè)范圍內(nèi)的整數(shù)。(5) 枚舉型是預(yù)處理指令#define的替代。(6) 類(lèi)型定義以分號(hào);結(jié)束。2. 使用枚舉類(lèi)型對(duì)變量進(jìn)行聲明新的數(shù)據(jù)類(lèi)型定義完成后,它就可以使用了。我們已經(jīng)見(jiàn)過(guò)最基本的數(shù)據(jù)類(lèi)型,如:整型int, 單精度浮點(diǎn)型float, 雙精度浮點(diǎn)型double, 字符型char, 短整型short等等。用這些基本數(shù)據(jù)類(lèi)型聲明變量通常是這樣:char a; /變量a的類(lèi)型均為字符型charchar letter;int x, y, z; /變量x,y和z的類(lèi)型均為整型intint number;double m, n;double result; /變量res

24、ult的類(lèi)型為雙精度浮點(diǎn)型double既然枚舉也是一種數(shù)據(jù)類(lèi)型,那么它和基本數(shù)據(jù)類(lèi)型一樣也可以對(duì)變量進(jìn)行聲明。方法一:枚舉類(lèi)型的定義和變量的聲明分開(kāi)enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN;enum DAY yesterday;enum DAY today;enum DAY tomorrow; /變量tomorrow的類(lèi)型為枚舉型enum DAYenum DAY good_day, bad_day; /變量good_day和bad_day的類(lèi)型均為枚舉型enum DAY方法二:類(lèi)型定義與變量聲明同時(shí)進(jìn)行:enum /跟第一個(gè)定義不同的是,此處的標(biāo)

25、號(hào)DAY省略,這是允許的。 saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday workday; /變量workday的類(lèi)型為枚舉型enum DAYenum week Mon=1, Tue, Wed, Thu, Fri Sat, Sun days; /變量days的類(lèi)型為枚舉型enum weekenum BOOLEAN false, true end_flag, match_flag; /定義枚舉類(lèi)型并聲明了兩個(gè)枚舉型變量方法三:用typedef關(guān)鍵字將枚舉類(lèi)型定義成別名,并利用該別名進(jìn)行變量聲明:typedef

26、 enum workday saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday workday; /此處的workday為枚舉型enum workday的別名workday today, tomorrow; /變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workdayenum workday中的workday可以省略:typedef enum saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday wor

27、kday; /此處的workday為枚舉型enum workday的別名workday today, tomorrow; /變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workday也可以用這種方式:typedef enum workday saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday;workday today, tomorrow; /變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workday注意:同一個(gè)程序中不能定義同名的枚舉類(lèi)型,不同的枚

28、舉類(lèi)型中也不能存在同名的命名常量。錯(cuò)誤示例如下所示:錯(cuò)誤聲明一:存在同名的枚舉類(lèi)型typedef enum wednesday, thursday, friday workday;typedef enum WEEK saturday, sunday = 0, monday, workday; 錯(cuò)誤聲明二:存在同名的枚舉成員typedef enum wednesday, thursday, friday workday_1;typedef enum WEEK wednesday, sunday = 0, monday, workday_2;3. 使用枚舉類(lèi)型的變量3.1 對(duì)枚舉型的變量賦值。實(shí)例

29、將枚舉類(lèi)型的賦值與基本數(shù)據(jù)類(lèi)型的賦值進(jìn)行了對(duì)比:方法一:先聲明變量,再對(duì)變量賦值#include/* 定義枚舉類(lèi)型 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ;void main() /* 使用基本數(shù)據(jù)類(lèi)型聲明變量,然后對(duì)變量賦值 */ int x, y, z; x = 10; y = 20; z = 30; /* 使用枚舉類(lèi)型聲明變量,再對(duì)枚舉型變量賦值 */ enum DAY yesterday, today, tomorrow; yesterday = MON; today = TUE; tomorrow = WED; printf(%

30、d %d %d n, yesterday, today, tomorrow);方法二:聲明變量的同時(shí)賦初值#include /* 定義枚舉類(lèi)型 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ;void main() /* 使用基本數(shù)據(jù)類(lèi)型聲明變量同時(shí)對(duì)變量賦初值 */ int x=10, y=20, z=30; /* 使用枚舉類(lèi)型聲明變量同時(shí)對(duì)枚舉型變量賦初值 */ enum DAY yesterday = MON, today = TUE, tomorrow = WED; printf(%d %d %d n, yesterday, today,

31、 tomorrow);方法三:定義類(lèi)型的同時(shí)聲明變量,然后對(duì)變量賦值。#include /* 定義枚舉類(lèi)型,同時(shí)聲明該類(lèi)型的三個(gè)變量,它們都為全局變量 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN yesterday, today, tomorrow;/* 定義三個(gè)具有基本數(shù)據(jù)類(lèi)型的變量,它們都為全局變量 */int x, y, z;void main() /* 對(duì)基本數(shù)據(jù)類(lèi)型的變量賦值 */ x = 10; y = 20; z = 30; /* 對(duì)枚舉型的變量賦值 */ yesterday = MON; today = TUE; tomorro

32、w = WED; printf(%d %d %d n, x, y, z); /輸出:10 20 30 printf(%d %d %d n, yesterday, today, tomorrow); /輸出:1 2 3方法四:類(lèi)型定義,變量聲明,賦初值同時(shí)進(jìn)行。#include /* 定義枚舉類(lèi)型,同時(shí)聲明該類(lèi)型的三個(gè)變量,并賦初值。它們都為全局變量 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN yesterday = MON, today = TUE, tomorrow = WED;/* 定義三個(gè)具有基本數(shù)據(jù)類(lèi)型的變量,并賦初值。它們都為全局變量

33、 */int x = 10, y = 20, z = 30;void main() printf(%d %d %d n, x, y, z); /輸出:10 20 30 printf(%d %d %d n, yesterday, today, tomorrow); /輸出:1 2 33.2 對(duì)枚舉型的變量賦整數(shù)值時(shí),需要進(jìn)行類(lèi)型轉(zhuǎn)換。#include enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ;void main() enum DAY yesterday, today, tomorrow; yesterday = TUE; today = (enu

34、m DAY) (yesterday + 1); /類(lèi)型轉(zhuǎn)換 tomorrow = (enum DAY) 30; /類(lèi)型轉(zhuǎn)換 /tomorrow = 3; /錯(cuò)誤 printf(%d %d %d n, yesterday, today, tomorrow); /輸出:2 3 303.3 使用枚舉型變量#includeenum BELL = a, BACKSPACE = b, HTAB = t, RETURN = r, NEWLINE = n, VTAB = v, SPACE = ;enum BOOLEAN FALSE = 0, TRUE match_flag;void main() int in

35、dex = 0; int count_of_letter = 0; int count_of_space = 0; char str = Im Ely efod; match_flag = FALSE; for(; strindex != 0; index+) if( SPACE != strindex ) count_of_letter+; else match_flag = (enum BOOLEAN) 1; count_of_space+; printf(%s %d times %c, match_flag ? match : not match, count_of_space, NEWLINE); printf(count of letters: %d %c%c, count_of_letter, NEWLINE, RETURN);輸出:match 2 timescount of letters: 10Press any key to continue4. 枚舉類(lèi)型與sizeof運(yùn)算符#include enum escapes BELL = a, BACKSPACE = b, HTAB = t, RETURN = r, NEWLINE = n, VTAB = v, SPACE = ;enum BOOLEAN FALSE = 0, TRUE match_flag;voi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論