




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、xxxx學(xué)院java課程設(shè)計(jì) 設(shè)計(jì)(論文)題目: 校內(nèi)通信 所 在 院: 專 業(yè) 班 級(jí): 學(xué) 生 姓 名: 學(xué) 號(hào): 指 導(dǎo) 教 師: 年 月 日 xxxx學(xué)院課程設(shè)計(jì)(論文)任務(wù)書設(shè)計(jì)題目: 校內(nèi)通信 專業(yè)班級(jí): 學(xué)號(hào) 姓名 主要內(nèi)容 校園企業(yè)內(nèi)部通信工具可以很好的解決企業(yè)通信問題,使每個(gè)用戶都能及時(shí)地了解自己的工作內(nèi)容和獲取需要的資料。為解決這一問題,開發(fā)一個(gè)界面友好、易于操作的內(nèi)部通信軟件。本系統(tǒng)應(yīng)用了jdk 6.0新增的系統(tǒng)托盤技術(shù)和javadb數(shù)據(jù)庫(kù)。系統(tǒng)托盤可以在程序主窗體最小化使用托盤控制窗體的相應(yīng)操作,例如打開主窗體;javadb使用靈活,可以應(yīng)用到不同的系統(tǒng)平臺(tái)中,只要該平
2、臺(tái)有支持java的環(huán)境。基本要求:整個(gè)系統(tǒng)從操作簡(jiǎn)便、界面友好、靈活、實(shí)用、安全的要求出發(fā),實(shí)現(xiàn)信息通信、系統(tǒng)設(shè)置、搜索用戶、訪問公共資源、互訪對(duì)方主機(jī)等功能。完成期限: 年月日 指導(dǎo)教師簽名: 評(píng)審小組負(fù)責(zé)人簽名: 目 錄1前言12概述12.1 開發(fā)背景12.2 課題現(xiàn)狀22.3 軟硬件需求23系統(tǒng)分析33.1 需求功能分析33.2 可行性分析33.2.1可行性要求、目標(biāo)33.2.2技術(shù)可行性分析43.2.3經(jīng)濟(jì)可行性分析44系統(tǒng)設(shè)計(jì)54.1系統(tǒng)目標(biāo)54.2 系統(tǒng)功能54.3數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)64.3.1數(shù)據(jù)庫(kù)分析64.3.2校園企業(yè)內(nèi)部通信系統(tǒng)的e-r圖64.3.3數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)75詳細(xì)設(shè)計(jì)和
3、代碼實(shí)現(xiàn)85.1主窗體模塊的設(shè)計(jì)與實(shí)現(xiàn)代碼85.1.1界面設(shè)計(jì)115.1.2實(shí)現(xiàn)過程125.2公共模塊的設(shè)計(jì)與實(shí)現(xiàn)145.2.1界面設(shè)計(jì)145.2.2實(shí)現(xiàn)過程145.3系統(tǒng)托盤模塊的設(shè)計(jì)與實(shí)現(xiàn)175.3.1界面設(shè)計(jì)175.3.2實(shí)現(xiàn)過程185.4系統(tǒng)工具模塊的設(shè)計(jì)與實(shí)現(xiàn)195.4.1界面設(shè)計(jì)195.4.2實(shí)現(xiàn)過程205.5 用戶管理模塊的設(shè)計(jì)與實(shí)現(xiàn)235.5.1界面設(shè)計(jì)235.5.2實(shí)現(xiàn)過程246通信模塊的設(shè)計(jì)與實(shí)現(xiàn)296.1界面設(shè)計(jì)296.2實(shí)現(xiàn)過程337總結(jié)378致謝37參考文獻(xiàn)381前言要問到網(wǎng)絡(luò)時(shí)代發(fā)展最快的領(lǐng)域,無(wú)疑的,答案是即時(shí)通訊。即時(shí)通訊工具的實(shí)時(shí)交互、資費(fèi)低廉等優(yōu)點(diǎn)深受用戶的
4、喜愛,已經(jīng)成為網(wǎng)絡(luò)生活中不可或缺的一部分,比如大家都很熟悉的騰訊qq,msn等。網(wǎng)民們通過即時(shí)通信進(jìn)行溝通交流、結(jié)識(shí)新朋友、娛樂消遣時(shí)間、實(shí)現(xiàn)異地文字、語(yǔ)音、視頻的實(shí)時(shí)互通交流。同時(shí),人們也認(rèn)識(shí)到即時(shí)信息工具能夠帶來極高的生產(chǎn)力,諸多企事業(yè)單位借助它的使用,來提高業(yè)務(wù)協(xié)同性及反饋的敏感度和快捷度。作為使用頻率最高的網(wǎng)絡(luò)軟件,即時(shí)通訊已經(jīng)突破了作為技術(shù)工具的極限,被認(rèn)為是現(xiàn)代交流方式的象征。 即時(shí)通訊軟件是通過即時(shí)通訊技術(shù)來實(shí)現(xiàn)在線聊天、交流的軟件。目前有2種架構(gòu)形式,1、一種是c/s架構(gòu),采用客戶端/服務(wù)器形式,用戶使用過程中需要下載安裝客戶端軟件,典型的代表有:qq、百度hi 、skype、
5、gtalk、新浪uc、msn等;2、采用b/s架構(gòu),即瀏覽器/服務(wù)端形式,這種形式的即時(shí)通訊軟件,直接借助互聯(lián)網(wǎng)為媒介、客戶端無(wú)需安裝任何軟件,既可以體驗(yàn)服務(wù)器端進(jìn)行溝通對(duì)話,一般運(yùn)用在電子商務(wù)網(wǎng)站的服務(wù)商,典型的代表、53kf、live800等校園企業(yè)內(nèi)部通信工具可以很好的解決企業(yè)通信問題,面對(duì)工作目標(biāo)和團(tuán)隊(duì)工作中可能出現(xiàn)的問題,必須加強(qiáng)團(tuán)隊(duì)的溝通,使每個(gè)用戶都能及時(shí)地了解自己的工作內(nèi)容和獲取需要的資料。本系統(tǒng)應(yīng)用了jdk 6.0新增的系統(tǒng)托盤技術(shù)和javadb數(shù)據(jù)庫(kù)。系統(tǒng)托盤可以在程序主窗體最小化之后,使用托盤控制窗體的相應(yīng)操作,例如打開主窗體;javadb使用靈活,可以應(yīng)用到不同的系統(tǒng)平
6、臺(tái)中,只要該平臺(tái)有支持java的環(huán)境2概述2.1 開發(fā)背景近幾年,隨著網(wǎng)絡(luò)的迅速發(fā)展和全球信息化速度的加快,網(wǎng)絡(luò)通信已經(jīng)不算是新鮮事物了,但大多數(shù)網(wǎng)絡(luò)通信需要借助internet上的服務(wù)器,這就給那些具有大規(guī)模內(nèi)部網(wǎng)絡(luò)的用戶造成了許多問題,如遭遇到網(wǎng)絡(luò)攻擊、病毒入侵等等。由于互聯(lián)網(wǎng)上的網(wǎng)絡(luò)通信工具有時(shí)會(huì)給企業(yè)內(nèi)部信息交流帶來不便,所以為了方便校園和內(nèi)部用戶之間的溝通、保證校園內(nèi)部局域網(wǎng)的安全,需要開發(fā)一個(gè)基于局域網(wǎng)的信息收發(fā)系統(tǒng)的即時(shí)通信工具。2.2 課題現(xiàn)狀校園內(nèi)部通信系統(tǒng)是基于局域網(wǎng)的即時(shí)通信工具,可以說是一個(gè)internet通信工具的小規(guī)模版本,一般采用udp或者tcp協(xié)議體系等來實(shí)現(xiàn),
7、開發(fā)技術(shù)已經(jīng)比較成熟,國(guó)外的通信工具較有名的有icq、msn messenger、國(guó)產(chǎn)的qq、新浪uc都實(shí)現(xiàn)了廣域網(wǎng)的即時(shí)通信。在最近幾年,國(guó)內(nèi)的局域網(wǎng)通信工具較有代表性有飛鴿傳書、飛秋,這兩款軟件的快速、實(shí)效、迷你、簡(jiǎn)單的特點(diǎn)受到了廣大用戶的好評(píng)。這些工具的實(shí)現(xiàn)方式具體細(xì)節(jié)不易得之,但它無(wú)非是利用各種平臺(tái)上的網(wǎng)絡(luò)通信接口,基于tcp/ip或者udp/ip協(xié)議架構(gòu)下的軟件產(chǎn)品。對(duì)于一個(gè)企業(yè)內(nèi)網(wǎng),這些功能的實(shí)現(xiàn)相比于廣域網(wǎng)更加簡(jiǎn)單。所以還是有很大研究?jī)r(jià)值的1。2.3 軟硬件需求本系統(tǒng)運(yùn)行時(shí)需要以下條件。硬件平臺(tái):cpu:pentium4 1.8ghz內(nèi)存:128mb以上硬盤空間:100mb軟件平
8、臺(tái):操作系統(tǒng):windows 2000、windows xp、windows 2003等開發(fā)工具:eclipse、jdk6.0數(shù)據(jù)庫(kù):javadb3系統(tǒng)分析3.1 需求功能分析本系統(tǒng)的設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)一個(gè)校園局域網(wǎng)通信系統(tǒng),可以方便的進(jìn)行交流,可以大大的提高校園企業(yè)內(nèi)部的工作效率。根據(jù)內(nèi)部局域網(wǎng)通信的需求,本系統(tǒng)主要包括信息通信、系統(tǒng)設(shè)置、搜索用戶、訪問公共資源、訪問對(duì)方主機(jī)五大功能。各功能概述:信息通信:信息通信是內(nèi)部通信系統(tǒng)的核心功能,它用于不同職工之間的通信,這種通信方式能夠?qū)崿F(xiàn)多個(gè)職工之間的通信,而不存在類似電話占線的問題,增加了任務(wù)分配的新方式,從而提高企業(yè)的工作效率。系統(tǒng)設(shè)置:系統(tǒng)設(shè)
9、置用于設(shè)置用戶界面、公共路徑、公告欄等的功能。用戶搜索:用戶搜索用于搜索局域網(wǎng)內(nèi)的其他用戶,系統(tǒng)會(huì)根據(jù)用戶所設(shè)置的ip搜索范圍搜索所有計(jì)算機(jī)上的用戶。訪問公共資源:訪問公共資源用于實(shí)現(xiàn)內(nèi)部公共服務(wù)器上資源訪問的功能。訪問對(duì)方主機(jī):訪問對(duì)方主機(jī)用于兩人聊天情況下對(duì)對(duì)方主機(jī)的訪問和控制的功能。3.2 可行性分析3.2.1可行性要求、目標(biāo)企業(yè)內(nèi)部通信系統(tǒng)必須提供網(wǎng)絡(luò)通信功能,在通信過程中禁止使用聊天表情、文件傳送等功能,避免資料外泄,或因發(fā)送錯(cuò)誤而導(dǎo)致上機(jī)資料的丟失以及其他損失。最重要的是必須適應(yīng)任何操作系統(tǒng),也就是實(shí)現(xiàn)跨平臺(tái)技術(shù),因?yàn)槠髽I(yè)內(nèi)部的工作需要,工作環(huán)境中使用了多個(gè)操作系統(tǒng)來完成不同的工作
10、。另外,系統(tǒng)不需要使用服務(wù)器中轉(zhuǎn)和記錄通信內(nèi)容,可以獨(dú)立完成通信任務(wù),排除職工對(duì)領(lǐng)導(dǎo)監(jiān)視工作進(jìn)度等行為的逆反心理。企業(yè)內(nèi)部通信系統(tǒng)的目標(biāo)是實(shí)現(xiàn)企業(yè)的信息化通信,提高企業(yè)通信能力,提高任務(wù)理解和執(zhí)行能力,減少?zèng)]有必要的人員流動(dòng)和資金損耗,以最快的速度提升企業(yè)的市場(chǎng)競(jìng)爭(zhēng)力。3.2.2技術(shù)可行性分析局域網(wǎng)通信系統(tǒng)的技術(shù)已經(jīng)非常成熟,首先,從硬件上講,計(jì)算機(jī)硬件速度現(xiàn)在已經(jīng)不是問題,高速便捷的網(wǎng)絡(luò)已經(jīng)十分普遍,這些為本系統(tǒng)的運(yùn)行打下堅(jiān)實(shí)的基礎(chǔ)。從軟件的角度上講,數(shù)據(jù)庫(kù)技術(shù)已經(jīng)相當(dāng)成熟(目前用得比較多的有sql server, javadb等),并且處理能力也非常強(qiáng),這為海量數(shù)據(jù)的存儲(chǔ)和處理打下了堅(jiān)實(shí)的
11、基礎(chǔ),同時(shí),使用java開發(fā)圖形界面程序也相當(dāng)普遍。有了這些技術(shù)的支持,我們成功開發(fā)一個(gè)局域網(wǎng)通信系統(tǒng)沒有任何技術(shù)風(fēng)險(xiǎn)。3.2.3經(jīng)濟(jì)可行性分析經(jīng)濟(jì)可行性主要是對(duì)項(xiàng)目的經(jīng)濟(jì)效益進(jìn)行評(píng)價(jià)。本系統(tǒng)開發(fā)完成后可縮減工作時(shí)間,提高工作效率,而且簡(jiǎn)單易操作,不需對(duì)使用人員進(jìn)行培訓(xùn),不管是在資金上還是效率上都能達(dá)到預(yù)期的效果。本系統(tǒng)開發(fā)經(jīng)費(fèi)對(duì)于企業(yè)在經(jīng)濟(jì)上是可以接受的,并且本系統(tǒng)實(shí)施后可以顯著提高工作效率,有助于企業(yè)的信息化管理,所以該企業(yè)內(nèi)部通信系統(tǒng)在經(jīng)濟(jì)上是可行的。4系統(tǒng)設(shè)計(jì)4.1系統(tǒng)目標(biāo)系統(tǒng)根據(jù)企業(yè)對(duì)內(nèi)部通信系統(tǒng)的要求,本系統(tǒng)可以實(shí)現(xiàn)以下目標(biāo):1.操作簡(jiǎn)單、界面簡(jiǎn)潔美觀。2.更方便訪問企業(yè)公共資源。
12、3.及時(shí)顯示企業(yè)公共信息。4.在通信窗口顯示對(duì)方ip信息。5.局域網(wǎng)內(nèi)網(wǎng)用戶自動(dòng)搜索。6.系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。 4.2 系統(tǒng)功能系統(tǒng)功能結(jié)構(gòu)圖如下:企業(yè)內(nèi)部通信系統(tǒng)信息通信系統(tǒng)設(shè)置用戶搜索訪問公共資源訪問對(duì)方主機(jī)圖4.1系統(tǒng)功能結(jié)構(gòu)圖4.3數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)4.3.1數(shù)據(jù)庫(kù)分析該系統(tǒng)是一個(gè)桌面應(yīng)用程序,它不像web應(yīng)用那樣需要配置到指定的服務(wù)器上,所以數(shù)據(jù)庫(kù)和該系統(tǒng)應(yīng)存在于同一計(jì)算機(jī)中,這樣,不僅節(jié)省了開銷,而且還提高了系統(tǒng)的安全性。該系統(tǒng)所用數(shù)據(jù)庫(kù)為javadb數(shù)據(jù)庫(kù)。由于該數(shù)據(jù)庫(kù)的運(yùn)行環(huán)境平臺(tái)要求較低,一般的電腦都可以滿足它的硬件條件2。4.3.2校園企業(yè)內(nèi)部通信系統(tǒng)的e-r圖該系統(tǒng)的實(shí)體
13、包括用戶和窗口位置兩個(gè)實(shí)體,分別記錄著通信窗口的絕對(duì)位置和用戶的信息。 (1)用戶實(shí)體用戶實(shí)體主要包括ip信息、pc名稱、用戶信息、系統(tǒng)信息等,它記錄了搜索到的用戶和所有的用戶信息。用戶實(shí)體的e-r圖如下所示:用戶實(shí)體頭 像提示文本用戶信息ip地 址主機(jī)名稱 (2)窗口位置實(shí)體窗口位置實(shí)體記錄著窗體最后的移動(dòng)位置和窗體大小等信息,主要包括窗體位置的橫坐標(biāo)和豎坐標(biāo)(下圖用x、y軸坐標(biāo)表示)、窗體的高度和寬度。窗口實(shí)體的e-r圖如下所示:x坐標(biāo)窗口實(shí)體y坐標(biāo)窗體高度窗體寬度圖4.3窗口實(shí)體e-r圖4.3.3數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)在該系統(tǒng)中的數(shù)據(jù)庫(kù)db_eq包含兩個(gè)數(shù)據(jù)表,分別為用戶信息表tb_users和
14、窗體位置信息表tb_location。(1)tb_users(用戶信息表)用戶信息表用來保存內(nèi)的通信用戶,表tb_users如下所示:表4.1用戶信息表tb_users字段名數(shù)據(jù)類型是否為空是否主鍵默認(rèn)值描述ipvarchar(16)noyes用戶iphostvarchar(30)yesnonull主機(jī)名稱namevarchar(20)yesnonull姓名tooltipvarchar(50)yesnonull提示文本iconvarchar(50)yesnonull頭像圖標(biāo)(2)tb_location(窗體位置信息表)窗體位置表用來保存窗體的位置和大小,表tb_location如下所示:表4.
15、2 窗體位置信息表tb_location字段名數(shù)據(jù)類型是否為空是否主鍵默認(rèn)值描述xlocationintyesnonullx軸坐標(biāo)ylocationintyesnonully軸坐標(biāo)heightintyesnonull窗體高度widthintyesnonull窗體寬度5詳細(xì)設(shè)計(jì)和代碼實(shí)現(xiàn)5.1主窗體模塊的設(shè)計(jì)與實(shí)現(xiàn)代碼 public eq() super(new frame();frame = this;dao = dao.getdao();location = dao.getlocation();settitle("鄭科校內(nèi)通");setbounds(location);p
16、rogressbar = new jprogressbar();progressbar.setborder(new bevelborder(bevelborder.lowered);tabbedpane = new jtabbedpane();popupmenu = new jpopupmenu();chattree = new chattree(this);user_dir = system.getproperty("user.dir"); / 程序執(zhí)行路徑用于系統(tǒng)更新localfile = new file(user_dir + file.separator + &qu
17、ot;eq.jar");/ 本地eq文件statelabel = new jlabel(); / 狀態(tài)欄標(biāo)簽addwindowlistener(new framewindowlistener();/ 添加窗體監(jiān)視器addcomponentlistener(new componentadapter() public void componentresized(final componentevent e) savelocation();public void componentmoved(final componentevent e) savelocation(););try / 啟動(dòng)
18、通訊服務(wù)端口ss = new datagramsocket(1111); catch (socketexception e2) if (e2.getmessage().startswith("address already in use")showmessagedialog("服務(wù)端口被占用,或者本軟件已經(jīng)運(yùn)行。");system.exit(0); / 初始化公共信息按鈕messagealerticon = new imageicon(eq.class.getresource("/image/messagealert.gif");me
19、ssagealertnullicon = new imageicon(eq.class.getresource("/image/messagealertnull20.gif");messagestack = new stack<string>();messagealertbutton = new jbutton();messagealertbutton.sethorizontalalignment(swingconstants.right);messagealertbutton.setcontentareafilled(false);final jpanel b
20、annerpanel = new jpanel();bannerpanel.setlayout(new borderlayout();add(bannerpanel, borderlayout.north);userinfobutton = new jbutton();bannerpanel.add(userinfobutton, borderlayout.west);userinfobutton.setmargin(new insets(0, 0, 0, 10);inituserinfobutton();/ 初始化本地用戶頭像按鈕bannerpanel.add(messagealertbut
21、ton, borderlayout.center);messagealertbutton.addactionlistener(new actionlistener() public void actionperformed(final actionevent e) if (!messagestack.empty() showmessagedialog(messagestack.pop(););messagealertbutton.seticon(messagealerticon);showmessagebar();add(tabbedpane, borderlayout.center);tab
22、bedpane.settabplacement(swingconstants.left);imageicon userticon = new imageicon(eq.class.getresource("/image/tabicon/tableft.png");tabbedpane.addtab(null, userticon, createuserlist(), "用戶列表");imageicon sysoticon = new imageicon(eq.class.getresource("/image/tabicon/tableft2.
23、png");tabbedpane.addtab(null, sysoticon, createsystoolpanel(), "系統(tǒng)操作");imageicon syssticon = new imageicon(eq.class.getresource("/image/tabicon/tableft3.png");tabbedpane.addtab(null, syssticon, createsyssetpanel(), "系統(tǒng)設(shè)置");setalwaysontop(true);5.1.1界面設(shè)計(jì)主窗體界面是本系統(tǒng)的用戶
24、列表,它由用戶列表、系統(tǒng)選項(xiàng)卡、公告提示等組成。其中系統(tǒng)選項(xiàng)卡用于切換不同的管理界面,包括系統(tǒng)設(shè)計(jì)和系統(tǒng)工具界面3。主窗體的效果圖如下所示:圖5.1 主窗體界面示意圖5.1.2實(shí)現(xiàn)過程主窗體實(shí)現(xiàn)部分包括創(chuàng)建主窗體和記錄窗體位置。其中創(chuàng)建主窗體的步驟如下:(1)創(chuàng)建jxcframe類,在類中創(chuàng)建窗體的對(duì)象,為窗體添加選項(xiàng)卡面板,并添加用戶列表、系統(tǒng)工具、系統(tǒng)設(shè)置3個(gè)選項(xiàng)卡和狀態(tài)欄標(biāo)簽、公告按鈕等屬性。在構(gòu)造方法中初始化窗體上的控件。數(shù)據(jù)庫(kù)操作類、首選項(xiàng)對(duì)象等屬性,為窗體添加時(shí)間監(jiān)聽器、為公告信息按鈕添加監(jiān)聽器等。(2)初始化socket服務(wù)器,指定端口為1111,如初始化失敗,則提示服務(wù)器端口被
25、占用或本軟件已運(yùn)行,并退出本系統(tǒng)。用于接收其他用戶發(fā)送的通信信息。關(guān)鍵代碼如下:try / 啟動(dòng)通訊服務(wù)端口ss = new datagramsocket(1111); catch (socketexception e2) if (e2.getmessage().startswith("address already in use")showmessagedialog("服務(wù)端口被占用,或者本軟件已經(jīng)運(yùn)行。");system.exit(0);(3) checkplacard方法,用于檢測(cè)系統(tǒng)公告,當(dāng)公告路徑中存在系統(tǒng)公告時(shí),將從文件中獲取完整信息,調(diào)用p
26、ushmessage()方法將信息壓入公告信息棧中。關(guān)鍵代碼如下:private void checkpacard() / 檢測(cè)公告信息方法string placarddir = preferences.get("placardpath", null);if (placarddir = null) pushmessage("未設(shè)置公告路徑");return;file placard = new file(placarddir);try if (placard.exists() && placard.isfile() stringbuild
27、er placardstr = new stringbuilder();scanner sc = new scanner(new fileinputstream(placard);while (sc.hasnextline() placardstr.append(sc.nextline();pushmessage(placardstr.tostring(); catch (filenotfoundexception e) pushmessage("公告路徑錯(cuò)誤,或公告文件不存在");(4)inituserinfobutton()方法用于初始化本地用戶信息,并在主窗體左上角顯
28、示本地用戶的頭像和名稱,會(huì)在用戶更改本地用戶名稱時(shí)同步更新。(5) main()方法,本方法首先獲取用戶設(shè)置的界面外觀,然后調(diào)用uimanager類設(shè)置指定的外觀,生成主窗體對(duì)象。最后初始化服務(wù)器端口和系統(tǒng)欄圖標(biāo)。關(guān)鍵代碼如下:public static void main(string args) try string laf = preferences.get("lookandfeel", "java默認(rèn)");/獲取用戶選擇的外觀if (laf.indexof("當(dāng)前系統(tǒng)")>-1)uimanager.setlookandf
29、eel(uimanager.getsystemlookandfeelclassname();/設(shè)置外觀eq frame = new eq();frame.setvisible(true);/顯示窗體frame.systemtrayinitial();/ 初始化系統(tǒng)欄frame.server();/啟動(dòng)服務(wù)端口frame.checkplacard();/檢測(cè)系統(tǒng)公告 catch (exception e) e.printstacktrace(); 記錄窗體的位置步驟如下:(1)為窗體添加監(jiān)聽器,當(dāng)改變窗體的位置和大小時(shí),將調(diào)用savelocation()方法將窗體和位置大小保存到數(shù)據(jù)庫(kù)中。(2)
30、savelocation(),該方法中調(diào)用了dao類中updatelocation將窗體的位置和大小保存到數(shù)據(jù)庫(kù)中。5.2公共模塊的設(shè)計(jì)與實(shí)現(xiàn)5.2.1界面設(shè)計(jì)在本系統(tǒng)的項(xiàng)目空間中,有部分模塊是公用的,或者多個(gè)模塊甚至整個(gè)系統(tǒng)的配置信息是被多個(gè)模塊重復(fù)調(diào)用完成業(yè)務(wù)的邏輯。其中有關(guān)數(shù)據(jù)庫(kù)的操作、連接數(shù)據(jù)庫(kù)、創(chuàng)建本機(jī)ip的默認(rèn)用戶(并添加到數(shù)據(jù)庫(kù)中)、從數(shù)據(jù)庫(kù)中獲取窗體位置和大小、添加或刪除指定用戶、更新用戶信息等4。5.2.2實(shí)現(xiàn)過程公共模塊包括數(shù)據(jù)庫(kù)操作類和系統(tǒng)工具類。其中dao類主要負(fù)責(zé)有關(guān)數(shù)據(jù)庫(kù)的操作,該類在構(gòu)造方法中驅(qū)動(dòng)并連接數(shù)據(jù)庫(kù),然后將構(gòu)造方法設(shè)置為private私有屬性,通過靜態(tài)的
31、getdao()獲取dao類的實(shí)例對(duì)象,這是簡(jiǎn)單的單例模式。在連接數(shù)據(jù)庫(kù)時(shí),可以指定create參數(shù)為true直接創(chuàng)建數(shù)據(jù)庫(kù),但在此之前需要調(diào)用dbexist()方法判斷數(shù)據(jù)庫(kù)是否存在。dao類的關(guān)鍵代碼如下:public class dao / 數(shù)據(jù)庫(kù)驅(qū)動(dòng)private static final string driver = "org.apache.derby.jdbc.embeddeddriver"private static string url = "jdbc:derby:db_eq"/ 數(shù)據(jù)庫(kù)urlprivate static connect
32、ion conn = null;/ 數(shù)據(jù)庫(kù)連接private static dao dao = null;private dao() try class.forname(driver);if (!dbexists() conn = drivermanager.getconnection(url + "create=true");createtable(); elseconn = drivermanager.getconnection(url);adddefuser(); catch (exception e) e.printstacktrace();joptionpane.
33、showmessagedialog(null, "數(shù)據(jù)庫(kù)連接異常,或者本軟件已經(jīng)運(yùn)行。");system.exit(0);private boolean dbexists() / 測(cè)試數(shù)據(jù)庫(kù)是否存在boolean bexists = false;file dbfiledir = new file("db_eq");if (dbfiledir.exists() bexists = true;return bexists;public static dao getdao() / 獲取dao實(shí)例if (dao = null)dao = new dao();re
34、turn dao;public list<user> getusers() / 獲取所有用戶list<user> users = new arraylist<user>();try string sql = "select * from tb_users"statement stm = conn.createstatement();resultset rs = stm.executequery(sql);while (rs.next() user user = new user();user.setip(rs.getstring(1);u
35、ser.sethost(rs.getstring(2);user.setname(rs.getstring(3);user.settiptext(rs.getstring(4);user.seticon(rs.getstring(5);users.add(user);rs.close(); catch (sqlexception e) e.printstacktrace();return users;resource類是校園內(nèi)部通信系統(tǒng)中的工具類,該類中的方法都是靜態(tài)的,可以直接調(diào)用,而不用創(chuàng)建resource類的實(shí)例對(duì)象。這些工具方法包括搜索用戶的方法、登錄公共資源的方法、信使群發(fā)的方法和單
36、條信息發(fā)送的方法。5.3系統(tǒng)托盤模塊的設(shè)計(jì)與實(shí)現(xiàn)5.3.1界面設(shè)計(jì)系統(tǒng)托盤模塊用于定義系統(tǒng)欄圖標(biāo)。本系統(tǒng)的主窗體是繼承對(duì)話框窗體編寫的,該窗體在系統(tǒng)任務(wù)欄不會(huì)顯示任務(wù)標(biāo)題,如果主窗體最小化之后將會(huì)隱藏,這時(shí)必須使用快捷鍵或者系統(tǒng)托盤中的圖標(biāo)執(zhí)行顯示窗體的命令。系統(tǒng)托盤包含相應(yīng)的菜單,右鍵點(diǎn)擊會(huì)彈出選擇菜單,菜單包括三個(gè)選項(xiàng),分別是:“訪問服務(wù)器”、“打開”、“退出”。系統(tǒng)托盤的設(shè)計(jì)效果圖如下所示: 圖5.2系統(tǒng)托盤示意圖5.3.2實(shí)現(xiàn)過程在jdk6.0中,awt新增加了systemtray類和trayicon類,它們可以在系統(tǒng)托盤區(qū)創(chuàng)建一個(gè)托盤程序。systemtray類表示桌面右下角的系統(tǒng)托
37、盤,系統(tǒng)托盤由運(yùn)行在桌面上的所有應(yīng)用程序共享,可以使用getsystemtray()方法獲取系統(tǒng)托盤對(duì)象,該方法總是對(duì)每個(gè)應(yīng)用程序返回相同的實(shí)例。并不是所有的操作系統(tǒng)都支持系統(tǒng)托盤,如果當(dāng)前系統(tǒng)不支持托盤的話,該方法將自動(dòng)拋出異常。為避免程序出現(xiàn)錯(cuò)誤,在獲取系統(tǒng)托盤實(shí)例之前,需要檢查系統(tǒng)托盤是否支持??梢哉{(diào)用issupport()來實(shí)現(xiàn)5。systemtray類可以包含一個(gè)或多個(gè)trayicon類的實(shí)例,即系統(tǒng)欄圖標(biāo),可以使用add()將它們添加到托盤,trayicon對(duì)象由圖像、彈出菜單和一組相關(guān)監(jiān)聽器組成。創(chuàng)建系統(tǒng)托盤的關(guān)鍵代碼如下:try string title = "鄭科校
38、內(nèi)通"/系統(tǒng)欄提示文本的標(biāo)題string company = "java項(xiàng)目小組"/系統(tǒng)欄提示文本systemtray systray = systemtray.getsystemtray();/獲取系統(tǒng)托盤對(duì)象image image = toolkit.getdefaulttoolkit().getimage(eq.class.getresource("/icons/systray.png");/ 系統(tǒng)欄圖標(biāo)trayicon = new trayicon(image, title + "n" + company, crea
39、temenu(); /創(chuàng)建系統(tǒng)欄圖標(biāo)對(duì)象trayicon.setimageautosize(true);/設(shè)置自動(dòng)大小trayicon.addactionlistener(new systrayactionlistener();/添加監(jiān)聽器systray.add(trayicon);/添加系統(tǒng)欄圖標(biāo)到系統(tǒng)托盤trayicon.displaymessage(title, company, messagetype.info); catch (exception e) e.printstacktrace();5.4系統(tǒng)工具模塊的設(shè)計(jì)與實(shí)現(xiàn)5.4.1界面設(shè)計(jì)本系統(tǒng)的工具模塊起到維護(hù)系統(tǒng)的作用,包括更換
40、程序外觀、。設(shè)置ip范圍、用戶搜索和系統(tǒng)更新、設(shè)置系統(tǒng)公告路徑、設(shè)置公共程序路徑、系統(tǒng)登錄等功能。在該系統(tǒng)第一次運(yùn)行的時(shí),用戶搜索功能可以搜索內(nèi)部網(wǎng)絡(luò)中所有正在運(yùn)行的計(jì)算機(jī)。本系統(tǒng)工具模塊中使用了java的lookandfeel外觀技術(shù),不同的外觀中控件的外觀也會(huì)不同,就比如我們常用的電腦中,windows經(jīng)典樣式和windowsxp樣式外觀的按鈕、列表、菜單、工具欄甚至窗體的外觀都不相同。在本系統(tǒng)中提供了“當(dāng)前系統(tǒng)”和“java默認(rèn)值”兩個(gè)外觀選項(xiàng),其中“java默認(rèn)值”是swing默認(rèn)的外觀,不需要特別設(shè)置,而“當(dāng)前系統(tǒng)”外觀需要使用相應(yīng)的方法獲取當(dāng)前系統(tǒng)的外觀名稱,然后將該外觀應(yīng)用于默認(rèn)
41、的外觀6。系統(tǒng)工具的設(shè)計(jì)效果圖如下所示:圖5.3系統(tǒng)工具界面示意圖5.4.2實(shí)現(xiàn)過程(1)createsystoolpanel()方法,用于創(chuàng)建系統(tǒng)工具選項(xiàng)卡,在該選項(xiàng)卡中包括界面選擇、用戶搜索和系統(tǒng)操作3部分,其中系統(tǒng)操作用于程序更新,它們都被添加到系統(tǒng)工具面板中,createsystoolpanel()方法必須設(shè)置好面板的布局和初始化工作。關(guān)鍵代碼如下:private jscrollpane createuserlist() / 用戶列表面板jscrollpane scrollpane = new jscrollpane(); scrollpane.sethorizontalscrollb
42、arpolicy(scrollpaneconstants.horizontal_scrollbar_never);adduserpopup(chattree, getpopupmenu();/ 為用戶添加彈出菜單scrollpane.setviewportview(chattree);scrollpane.setborder(new emptyborder(0, 0, 0, 0);chattree.addmouselistener(new chattreemouselistener();return scrollpane;(2)在createsystoolpanel()方法中創(chuàng)建界面選擇部分,
43、該部分以列表控件顯示了兩種外觀選擇,當(dāng)用戶選擇其中以種外觀并單擊“確定”按鈕之后,選擇外觀會(huì)保存到首選項(xiàng)中,然后提示重新運(yùn)行本軟件。(3)在createsystoolpanel()方法中創(chuàng)建用戶搜索部分,包括搜索列表、搜索進(jìn)度條和“搜索新用戶”3個(gè)控件,當(dāng)單擊“搜索新用戶”按鈕時(shí),系統(tǒng)會(huì)根據(jù)用戶在系統(tǒng)設(shè)置界面所設(shè)置的ip搜索范圍搜索所有計(jì)算機(jī)信息,并創(chuàng)建相應(yīng)的用戶對(duì)象,然后保存到數(shù)據(jù)庫(kù)中。(4)創(chuàng)建“搜索新用戶”按鈕的事件searchuseractionlistener類,調(diào)用resource工具類的searchusers()方法搜索指定ip范圍內(nèi)的所有用戶。系統(tǒng)工具類中的searchuser
44、s()方法,該方法用于搜索局域網(wǎng)內(nèi)的通信用戶,也就是搜索企業(yè)內(nèi)的所有職工。本方法將獲取用戶指定的ip范圍,并在該范圍內(nèi)搜索所有可以訪問的計(jì)算機(jī),如果用戶沒有指定ip范圍,系統(tǒng)默認(rèn)的是-55。關(guān)鍵代碼如下:try for (int l = ipsint0; l <= ipeint0; l+) boolean b0 = l < ipeint0; / 記錄第一層循環(huán)的條件int k = l != ipsint0 ? 0 : ipsint1; / 從第二次循環(huán)以后k賦值0for (; b0 ? k < 256 : k <= ipein
45、t1; k+) boolean b1 = b0 | k < ipeint1; / 記錄第二層循環(huán)的條件int j = k != ipsint1 ? 0 : ipsint2; / 從第二次循環(huán)以后j賦值0for (; b1 ? j < 256 : j <= ipeint2; j+) boolean b2 = b1 | b1 ? j < 256 : j < ipeint2;int i = j != ipsint2 ? 0 : ipsint3;for (; b2 ? i < 256 : i <= ipeint3; i+) if(!button.isselec
46、ted()progressbar.setindeterminate(false);return;thread.sleep(100);/線程休息100毫秒string ip = l + "." + k + "." + j + "." + i;progressbar.setstring("正在搜索:" + ip);/取消進(jìn)度條的滾動(dòng)if (tree.adduser(ip, "search")/添加新用戶model.addelement("<html><b><f
47、ont color=green>添加"+ ip + "</font></b></html>");catch(exception e) e.printstacktrace();5.5 用戶管理模塊的設(shè)計(jì)與實(shí)現(xiàn)5.5.1界面設(shè)計(jì)用戶管理模塊類似于聊天軟件的好友列表,其中包含所有用戶信息,另外在用戶名稱上單擊鼠標(biāo)右鍵,會(huì)彈出相應(yīng)的管理菜單,在該菜單中包含“添加用戶”、“更名”、“刪除用戶”、“信使群發(fā)(在沒有多選用戶的情況下無(wú)法進(jìn)行信使群發(fā))”、“訪問主機(jī)資源”和“訪問公共程序”,其中“訪問主機(jī)資源”是訪問該用戶的共享文件夾7。
48、界面設(shè)計(jì)的效果圖如下所示: 圖5.4用戶管理界面示意圖5.5.2實(shí)現(xiàn)過程(1)創(chuàng)建usertreeranderer類,該類繼承jpanel類成為一個(gè)面板控件,同時(shí)該類也實(shí)現(xiàn)了treecellrenderer接口成為樹節(jié)點(diǎn)的渲染器。該類的構(gòu)造方法接受3個(gè)圖標(biāo)參數(shù),分別用于樹節(jié)點(diǎn)的打開、關(guān)閉和葉節(jié)點(diǎn)的圖標(biāo)。(2)在usertreeranderer類gettreecellrenderercomponent()方法,渲染樹節(jié)點(diǎn)的界面樣式。本方法獲取主窗體的寬度,并使用該寬度設(shè)置節(jié)點(diǎn)的寬度,是節(jié)點(diǎn)與窗體同寬度,當(dāng)選擇某個(gè)節(jié)點(diǎn)時(shí),該方法將使用指定顏色繪制節(jié)點(diǎn)的邊框,以突出該節(jié)點(diǎn)被選擇的效果。(3)創(chuàng)建ch
49、attree類,該類繼承jtree自定義的樹控件,并且使用了之前定義的usertreeranderer樹節(jié)點(diǎn)渲染器, sortusers()方法,此方法是一個(gè)內(nèi)部線程,該線程獲取本地的ip地址,使用該地址從數(shù)據(jù)庫(kù)中獲取本地用戶對(duì)象,并將本地用戶設(shè)置在用戶列表首位。然后從數(shù)據(jù)庫(kù)中獲取其它用戶對(duì)象。使第一個(gè)用戶處于被選擇狀態(tài),并更新狀態(tài)欄的用戶人數(shù)。關(guān)鍵代碼如下:private synchronized void sortusers() /排序用戶列表new thread(new runnable() public void run() try thread.sleep(100);root.rem
50、oveallchildren();string ip = inetaddress.getlocalhost().gethostaddress(); /獲取本地ipuser localuser = dao.getuser(ip);/從數(shù)據(jù)庫(kù)中獲取自己的信息if (localuser != null) / 把自己顯示在首位defaultmutabletreenode node = new defaultmutabletreenode(localuser);root.add(node);usermap = dao.getusers();iterator<user> iterator =
51、usermap.iterator();while (iterator.hasnext() / 遍歷用戶集合user user = iterator.next();if(user.getip().equals(localuser.getip()continue;root.add(new defaultmutabletreenode(user);/添加用戶到根節(jié)點(diǎn)treemodel.reload();chattree.this.setselectionrow(0);/使第一個(gè)節(jié)點(diǎn)被選擇if (eq != null)eq.setstatic("總?cè)藬?shù):" + getrowcoun
52、t();/更新狀態(tài)欄標(biāo)簽 catch (exception e) e.printstacktrace();).start();(4)在chattree中的deluser()方法,用于刪除當(dāng)前用戶列表中選擇的用戶對(duì)象。該方法首先獲取選擇的樹節(jié)點(diǎn),從該節(jié)點(diǎn)中獲取綁定的用戶對(duì)象,經(jīng)用戶確認(rèn)后刪除用戶信息,最后調(diào)用根節(jié)點(diǎn)的remove()方法刪除該用戶節(jié)點(diǎn)。另外是adduser()方法,用于在用戶列表中添加新用戶。本方法首先使用傳遞的ip參數(shù)到數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)的用戶對(duì)象,如成功獲取,說明數(shù)據(jù)庫(kù)已存在該用戶,系統(tǒng)會(huì)提示“已存在”,當(dāng)確定該ip可以訪問后,為該ip地址創(chuàng)建一個(gè)新的用戶并添加到數(shù)據(jù)庫(kù)中。關(guān)鍵代碼如下:public boolean adduser(string ip, string opration) / 添加用戶try if (ip = null)return false;user olduser = dao.getuser(ip);/從數(shù)據(jù)庫(kù)中獲取ip相同用戶if (olduser = null) / 如果數(shù)據(jù)庫(kù)中不存在該用戶inetaddress addr = inetaddress.getbyname(ip);/該用戶可以訪問if (addr.isreachable(1500) string
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司員工非競(jìng)爭(zhēng)行為協(xié)議書
- 航空器材維護(hù)服務(wù)協(xié)議
- 關(guān)于調(diào)整辦公時(shí)間的內(nèi)部通知及后續(xù)措施安排
- 現(xiàn)代企業(yè)戰(zhàn)略管理知識(shí)要點(diǎn)梳理
- 故都的秋知識(shí)點(diǎn)梳理教案
- 工業(yè)設(shè)備采購(gòu)及安裝協(xié)議條款書
- 運(yùn)維流程管理培訓(xùn)
- 地產(chǎn)中介勞動(dòng)合同協(xié)議書
- 定語(yǔ)從句的構(gòu)成與運(yùn)用:高中高級(jí)英語(yǔ)語(yǔ)法課堂實(shí)錄
- 電源適配器行業(yè)相關(guān)投資計(jì)劃提議
- 硬筆書法全冊(cè)教案共20課時(shí)
- 人民幣上的風(fēng)景名勝課件
- 小學(xué)雙減作業(yè)設(shè)計(jì)小學(xué)語(yǔ)文五年級(jí)下冊(cè)第八單元作業(yè)設(shè)計(jì)案例
- 2.0MWp屋頂太陽(yáng)能分布式光伏發(fā)電項(xiàng)目監(jiān)理大綱2
- 山的飛花令經(jīng)典1000首小學(xué)
- 煉油廠化工廠車間崗位勝任力素質(zhì)模型設(shè)計(jì)
- 電子課件-《市場(chǎng)營(yíng)銷》-A45-2298完整版教學(xué)課件全書電子講義(最新)
- 紅土鎳礦濕法冶煉技術(shù)綜述
- 隧道開挖作業(yè)臺(tái)車計(jì)算書
- 水利水電工程金屬結(jié)構(gòu)與機(jī)電設(shè)備安裝安全技術(shù)規(guī)程
- 新視野大學(xué)英語(yǔ)讀寫譯4U校園第一單元課后測(cè)試答案
評(píng)論
0/150
提交評(píng)論