版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
北京郵電大學(xué)畢業(yè)設(shè)計緒論1.1引言在網(wǎng)絡(luò)飛速發(fā)展的今天,互聯(lián)網(wǎng)成為人們快速獲取、發(fā)布和傳遞信息的重要渠道,它在人們政治、經(jīng)濟、生活等各個方面發(fā)揮著重要的作用?;ヂ?lián)網(wǎng)上存在大量的信息所以信息交換也顯得尤為重要。人們一直在尋找一種方便、低廉的交流信息的工具,因此網(wǎng)上聊天便成為人們的首選?;贘ava網(wǎng)絡(luò)編程的強大功能,本次畢業(yè)設(shè)計使用Java編寫一個工作板即基于局域網(wǎng)工作交流平臺系統(tǒng)。工作板即基于局域網(wǎng)工作交流平臺利用的是互聯(lián)網(wǎng)線路,通過文字、文件的信息交流與互動,有效節(jié)省了溝通雙方的時間與經(jīng)濟成本;工作板即基于局域網(wǎng)工作交流平臺不但成為人們的溝通工具,還成為了人們利用其進行電子商務(wù)、工作、學(xué)習(xí)等交流的平臺,致力于幫助企業(yè)提高運作效率,降低溝通成本、拓展商業(yè)機會,它給員工提供更方便的溝通方式,增強了企業(yè)的信息共享和溝通能力,提高員工日常工作效率,減少企業(yè)內(nèi)部通訊費用和出差次數(shù),從而為企業(yè)節(jié)省開支,同時也提高了員工的合作意識,增強了企業(yè)的凝聚力。一般來說,聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機/服務(wù)器架構(gòu)模式通過Java提供的Socket類來連接客戶機和服務(wù)器并使客戶機和服務(wù)器之間相互通信,由于聊天是多點對多點的而Java提供的多線程功能用多線程可完成多點對多點的聊天,數(shù)據(jù)庫管理系統(tǒng)用Oracle11g完成并通過JDBC訪問數(shù)據(jù)庫。本系統(tǒng)建立在JAVA平臺上,系統(tǒng)的設(shè)計使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過Socket傳送消息。使用JAVA語言編寫,開發(fā)工具采用MyEclipse。服務(wù)器端設(shè)計與實現(xiàn)過程中,采用了多線程技術(shù),可以在單個程序當(dāng)中同時運行多個不同的線程,執(zhí)行不同的任務(wù)。大大增強了程序?qū)Ψ?wù)器資源的利用?;诰钟蚓W(wǎng)工作交流平臺系統(tǒng)完成后將可進行用戶間的聊天、對好友進行添加、對新用戶的注冊、發(fā)送消息、接受消息等等功能。1.2國內(nèi)外企業(yè)即時通訊(工作交流平臺)研究現(xiàn)狀企業(yè)即時通信:簡稱EIM(EnterpriseInstantMessaging),它是一種面向企業(yè)終端使用者的網(wǎng)絡(luò)溝通工具服務(wù),使用者可以通過安裝了即時通信的終端機進行兩人或多人之間的實時溝通。交流內(nèi)容包括文字、界面、語音、視頻及文件互發(fā)等。相對于個人即時通信工具而言,企業(yè)即時通信工具剔除了娛樂等因素,且更加強調(diào)安全。
目前,市場上的企業(yè)級即時通信工具主要包括:騰訊公司的RTX、IBM公司的LotusSametime、微軟公司的UC、點擊科技的GKE、中國互聯(lián)網(wǎng)辦公室的IMO、紅杉樹公司的EasyTouch、億企通的Jingoal等。經(jīng)過幾年來的市場考驗和同行競爭,提供企業(yè)級即時通信軟件服務(wù)的廠商也經(jīng)歷了大浪淘沙的艱難歷程,目前的市場格局主要分為三類:第一類是介入即時通信領(lǐng)域時間較早的國際企業(yè),如IBM、微軟等。其優(yōu)勢在于起步早,產(chǎn)品在進入中國前已在國外企業(yè)用戶中得到了廣泛應(yīng)用,企業(yè)知名度和產(chǎn)品知名度較高;缺點是在面對中國企業(yè)用戶的特定需求時,其產(chǎn)品的適應(yīng)度還較差,另外,國際廠商為了實現(xiàn)大而全的目的,它們的即時通信產(chǎn)品往往與自身的其他軟件系統(tǒng)關(guān)聯(lián)度、依賴度很強(如微軟OCS和ExchangeServer2003的緊密捆綁,IBMSametime與Lotus的緊密結(jié)合),這無疑會增加企業(yè)用戶的采購成本。第二類是以騰訊為代表的國產(chǎn)軟件企業(yè)。它們的產(chǎn)品設(shè)計更加貼近中國企業(yè)的實際需求,產(chǎn)品操作更加貼近中國人的使用習(xí)慣,并亦具有很高的品牌知名度。目前,此類企業(yè)已經(jīng)成為中國企業(yè)級即時通信市場的主導(dǎo)力量,據(jù)第三方統(tǒng)計數(shù)據(jù),僅騰訊RTX就已占到超過70%的市場份額。第三類是眾多創(chuàng)業(yè)性的新興企業(yè)。他們的特點是靈活性高,每個項目的定制性強;缺點是產(chǎn)品不成熟,品牌影響力差。該類企業(yè)由于其自身的資金和技術(shù)等薄弱環(huán)節(jié),目前還不足以對企業(yè)即時通信市場造成影響。
總之,目前中國企業(yè)即時通信領(lǐng)域的一個顯著特征就是,國內(nèi)外廠商都在爭奪這個未來被普遍看好的市場,未來中國企業(yè)即時通訊行業(yè)發(fā)展的方向為:統(tǒng)一通信化、功能定制化、移動終端化、競爭激烈化和行業(yè)整合化。1.3研究的意義近年來,隨著全球信息化的不斷發(fā)展,網(wǎng)絡(luò)也在飛速發(fā)展。出于高效、快速地處理各種事務(wù)的目的,越來越多的企業(yè)在其內(nèi)部使用局域網(wǎng)來進行工作。在內(nèi)部局域網(wǎng)的幫助下,企業(yè)得以簡化信息流程,提高信息交換的速度,從而提高工作效率。然而,隨著企業(yè)規(guī)模的擴大,業(yè)務(wù)量地增加,企業(yè)內(nèi)部多的信息越來越私密,企業(yè)只希望員工通過內(nèi)部局域網(wǎng)進行溝通與交流,避免企業(yè)內(nèi)部機密通過Internet泄露到外部。為了解決上述矛盾,人們提出了開發(fā)工作板即局域網(wǎng)工作交流平臺的構(gòu)想,通過局域網(wǎng)工作交流平臺軟件,企業(yè)員工可以隨時的進行即時信息傳遞,鑿開網(wǎng)絡(luò)會議等,有利于提高工作效率,同時有保護了企業(yè)內(nèi)部的信息安全。1.4本文的主要工作隨著用戶對軟件功能的需求不斷提高,企業(yè)即時通訊的產(chǎn)品也不斷地更新?lián)Q代。企業(yè)即時通訊的發(fā)展不論是在基礎(chǔ)應(yīng)用方面還是在擴展應(yīng)用方面都有著飛躍。本文首先對工作板即基于局域網(wǎng)工作交流平臺軟件的發(fā)展以及其對人們的生活有何影響作了簡述,并對開發(fā)環(huán)境和工具進行了相應(yīng)說明并對此工作交流平臺軟件系統(tǒng)進行了較為詳細的分析;進而提出了該多功能交流平臺軟件的設(shè)計方案。在本次多功能工作交流平臺軟件的設(shè)計與開發(fā)中,本人主要設(shè)計開發(fā)登錄模塊、注冊模塊、聊天模塊、并對此工作交流平臺軟件系統(tǒng)的登錄模塊、注冊模塊、聊天模塊的設(shè)計與實現(xiàn)進行了較詳細的說明和分析。
2相關(guān)技術(shù)及環(huán)境簡介在確定系統(tǒng)的開發(fā)前景、意義、目標(biāo)之后,就是選擇好開發(fā)工具以及運用相關(guān)的技術(shù)來開發(fā)系統(tǒng)。在模式上,我們選擇C/S架構(gòu)的操作模式,這樣可以方便公司統(tǒng)一管理,使得公司只需維護服務(wù)器,員工只要安裝客戶端即可做相關(guān)操作。接下來,將對本系統(tǒng)所用到的開發(fā)環(huán)境、語言和相關(guān)技術(shù)進行介紹,主要是對本次開發(fā)涉及到的理論知識和用到的開發(fā)工具做相關(guān)闡述。2.1MyEclipse介紹MyEclipse企業(yè)級工作平臺(MyEclipseEnterpriseWorkbench,簡稱MyEclipse)是對EclipseIDE的擴展,利用它我們可以在數(shù)據(jù)庫和JavaEE的開發(fā)、發(fā)布以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的JavaEE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML,Struts,,JSP,CSS,Javascript,Spring,SQL,Hibernate。MyEclipse是一個十分優(yōu)秀的用于開發(fā)Java,J2EE的Eclipse插件集合,MyEclipse的功能非常強大,支持也十分廣泛,尤其是對各種開源產(chǎn)品的支持十分不錯。MyEclipse目前支持JavaServlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC數(shù)據(jù)庫鏈接工具等多項功能??梢哉fMyEclipse是幾乎囊括了目前所有主流開源產(chǎn)品的專屬eclipse開發(fā)工具。在結(jié)構(gòu)上,MyEclipse的特征可以被分為7類:JavaEE模型WEB開發(fā)工具EJB開發(fā)工具應(yīng)用程序服務(wù)器的連接器JavaEE項目部署服務(wù)數(shù)據(jù)庫服務(wù)MyEclipse整合幫助對于以上每一種功能上的類別,在Eclipse中都有相應(yīng)的功能部件,并通過一系列的插件來實現(xiàn)它們。MyEclipse結(jié)構(gòu)上的這種模塊化,可以讓我們在不影響其他模塊的情況下,對任一模塊進行單獨的擴展和升級。簡單而言,MyEclipse是Eclipse的插件,也是一款功能強大的JavaEE集成開發(fā)環(huán)境,支持代碼編寫、配置、測試以及除錯,MyEclipse5.5以前版本需先安裝Eclipse。MyEclipse5.5以后版本安裝時不需安裝Eclipse。2.2Java語言Java語言是SUN公司于1995年5月推出的新一代面向?qū)ο蟮挠嬎銠C通用編程語言,是繼WWW之后又一引起世界轟動的產(chǎn)品。Java語言的特點是跨平臺和強大的網(wǎng)絡(luò)編程功能。在Java語言誕生之前,Internet已存在,所以Java語言本身就封裝了大量進行網(wǎng)絡(luò)編程的類庫,使得網(wǎng)絡(luò)編程功能強大,同時又簡化了網(wǎng)絡(luò)編程的操作。因此利用Java語言可以開發(fā)出功能強大的網(wǎng)絡(luò)應(yīng)用程序。2.2.1Jar命令功能:Java歸檔工具語法:jar[命令選項][manifest]destinationinput-file[input-files]jar工具是個java應(yīng)用程序,可將多個文件合并為單個JAR歸檔文件。jar是個多用途的存檔及壓縮工具,它基于ZIP和ZLIB壓縮格式。然而,設(shè)計jar的主要目的是便于將javaapplet或應(yīng)用程序打包成單個歸檔文件。將applet或應(yīng)用程序的組件(.class文件、圖像和聲音)合并成單個歸檔文件時,可以用java代理(如瀏覽器)在一次HTTP事務(wù)處理過程中對它們進行下載,而不是對每個組件都要求一個新連接。這大大縮短了下載時間。jar還能壓縮文件,從而進一步提高了下載速度。此外,它允許applet的作者對文件中的各個項進行簽名,因而可認證其來源。jar工具的語法基本上與tar命令的語法相同。命令選項:-c:在標(biāo)準(zhǔn)輸出上創(chuàng)建新歸檔或空歸檔。-t:在標(biāo)準(zhǔn)輸出上列出內(nèi)容表。-x[file]:從標(biāo)準(zhǔn)輸入提取所有文件,或只提取指定的文件。如果省略了file,則提取所有文件;否則只提取指定文件。-f:第二個參數(shù)指定要處理的jar文件。在-c(創(chuàng)建)情形中,第二個參數(shù)指的是要創(chuàng)建的jar文件的名稱(不是在標(biāo)準(zhǔn)輸出上)。在-t(表(或-x(抽取)這兩種情形中,第二個參數(shù)指定要列出或抽取的jar文件。-v:在標(biāo)準(zhǔn)錯誤輸出設(shè)備上生成長格式的輸出結(jié)果。-m:包括指定的現(xiàn)有清單文件中的清單信息。用法舉例:“jarcmfmyManifestFilemyJarFile*.class”-0:只儲存,不進行ZIP壓縮。-M:不創(chuàng)建項目的清單文件。-u:通過添加文件或更改清單來更新現(xiàn)有的JAR文件。例如:“jar-uffoo.jarfoo.class”將文件foo.class添加到現(xiàn)有的JAR文件foo.jar中,而“jarumfmanifestfoo.jar”則用manifest中的信息更新foo.jar的清單。-C:在執(zhí)行jar命令期間更改目錄。例如:“jar-uffoo.jar-Cclasses*”將classes目錄內(nèi)的所有文件加到foo.jar中,但不添加類目錄本身。2.2.2Java和InternetTCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是internet的主要協(xié)議,定義了計算機和外設(shè)進行通信所使用的規(guī)則(應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層)。大多數(shù)基于internet的應(yīng)用程序被看作TCP/IP協(xié)議的上一層.如:ftp,http,smtp,pop3,telnet,nntp等。Java提供的網(wǎng)絡(luò)功能有三大類:URL,Socket,Datagram.其中,URL是三大功能中最高級的一種,通過URLJava程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù)。Socket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡(luò)的通信信道。Datagram是更低級的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上。2.3C/S模式介紹20世紀(jì)90年代出現(xiàn)并迅速占據(jù)主導(dǎo)地位的一種計算模式為客戶機/服務(wù)器模式,簡稱為C/S模式,它實際上就是把主機—終端模式中原來全部集中在主機部分的任務(wù)一分為二,保留在主機上的部分負責(zé)集中處理和匯總運算,成為服務(wù)器;而下放到終端的部分負責(zé)為用戶提供友好的交互界面,稱為客戶機。相對于以前的模式,C/S模式最大的改進是不再把所有軟件都裝進一臺計算機,而是把應(yīng)用系統(tǒng)分成兩個不同的角色和兩個不同的地位:一般在運算能力較強的計算機上安裝服務(wù)器端程序,而在一般的PC上安裝客戶機程序。正是由于個人PC機的出現(xiàn)使客戶機/服務(wù)器模式成為可能,因為PC機具有一定的運算能力,用它代替了上面第一種模式的啞終端后,就可以把主機端的一部分工作放在客戶機端完成,從而減輕了主機的負擔(dān),也增加了系統(tǒng)對用戶的響應(yīng)速度和響應(yīng)能力??蛻魴C和服務(wù)器之間通過相應(yīng)的網(wǎng)絡(luò)協(xié)議來進行通訊??蛻魴C向服務(wù)器發(fā)出數(shù)據(jù)請求,服務(wù)器將數(shù)據(jù)傳送給客戶機進行計算,計算完畢,計算結(jié)果可返回給服務(wù)器。這種模式的優(yōu)點充分利用了客戶機的性能,使計算能力大大提高;另外,由于客戶機和服務(wù)器之間的通訊是通過網(wǎng)絡(luò)協(xié)議進行的,是一種邏輯的聯(lián)系,因此物理上在客戶機和服務(wù)器兩端是易于擴充的。C/S模式是目前占主流的網(wǎng)絡(luò)計算模式。該模式在操作過程中采取的是主動請示方式:首先服務(wù)器方要先啟動,并根據(jù)請示提供相應(yīng)服務(wù)(過程如下):打開一個通信通道同時通知本地主機,服務(wù)器愿意在某一個公認地址上接收客戶請求。等待某個客戶請求到達該端口。接收到重復(fù)服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號。返回第二步,等待另一客戶請求。關(guān)閉該服務(wù)器??蛻舳耍捍蜷_一個通信通道,并連接到服務(wù)器所在主機的特定端口。向服務(wù)器發(fā)送服務(wù)請求報文,等待并接收應(yīng)答;繼續(xù)提出請求。請求結(jié)束后關(guān)閉通信通道并終止。分布運算和分布管理是客戶機/服務(wù)器模式的特點。最后選擇了C/S模式。2.4Socket編程2.4.1Socket簡介Socket,簡稱套接字,用于實現(xiàn)網(wǎng)絡(luò)上客戶和服務(wù)器之間的連接。也就是說網(wǎng)絡(luò)上兩個或兩個以上雙工方式通信的進程之間總有一個連接,這個連接的端點成為套接字,套接字是在比較低的層次上通信的。具體的說:一個服務(wù)器應(yīng)用程序一般偵聽一個特定的端口等待客戶端的連接請求,當(dāng)一個連接請求到達時,客戶端和服武器端建立一個通信連接,在連接過程中,客戶端被分配一個本地端口與一個Socket建立連接,客戶端通過寫Socket來通知服務(wù)器,以讀Socket中的信息,類似的服務(wù)器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務(wù)器也通過它的本地端口連接一個Socket,通過讀寫和客戶端通信。Socket程序的工作過程:建立Socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接通道。數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進行通道。關(guān)閉:通信結(jié)束時,再將所建的虛擬連接拆除。具體如下圖2-17.關(guān)閉3.客戶端socket6.寫5.讀5.讀6.寫7.關(guān)閉4.接收2.監(jiān)聽1.服務(wù)器socket:7.關(guān)閉3.客戶端socket6.寫5.讀5.讀6.寫7.關(guān)閉4.接收2.監(jiān)聽1.服務(wù)器socket圖2-1Socket套接字原理圖2.4.2關(guān)于TCP/IP協(xié)議TCP協(xié)議是網(wǎng)絡(luò)通信的基石,對此Java專門提供了Socket的類庫,在其中抽象出TCP協(xié)議通信的常用方法:TCP協(xié)議與三次握手。為了實現(xiàn)客戶端同服務(wù)器端的通信,客戶端首先發(fā)送一個“SYN”數(shù)據(jù)包。如果服務(wù)器收到SYN標(biāo)記,它將發(fā)回一個“SYN+ACK”數(shù)據(jù)包。接著,客戶端為了表示收到了這個SYN+ACK信息,會向服務(wù)器發(fā)送一個最終確認信息(ACK包)。這種SYN,SYN+ACK,ACK的步驟被稱為TCP連接建立時的“三次握手”,在這之后,連接就建立起來了,這個連接將一直保持活動狀態(tài),直到超時或者任何一方發(fā)出一個FIN(結(jié)束)信號。這種通信模式也叫客戶端/服務(wù)器(C/S)模式。如下圖2-2:第一次握手,主機A向主機B發(fā)送連接請求第一次握手,主機A向主機B發(fā)送連接請求第二次握手,主機B收到主機A的請求,向主機A回發(fā)一個確認,同時向主機A發(fā)送一個連接請求第二次握手,主機B收到主機A的請求,向主機A回發(fā)一個確認,同時向主機A發(fā)送一個連接請求主機A主機B SYN=1,SEQ= ACK=1,SYN=1,SEQ=第三次握手,主機A收到主機B發(fā)送的數(shù)據(jù)包再向主機B發(fā)送一個確認連接第三次握手,主機A收到主機B發(fā)送的數(shù)據(jù)包再向主機B發(fā)送一個確認連接 ACK=1圖2-2三次握手協(xié)議由此可見,通過客戶端和服務(wù)器的“三次握手”,雙方可以建立暢通的通信信道,在此信道上雙方互相傳輸數(shù)據(jù)。2.4.3服務(wù)器和客戶機網(wǎng)絡(luò)最基本的目的就是讓兩臺機器連接到一起,并相互“交談”或者“溝通”。一旦兩臺機器都發(fā)現(xiàn)了對方,就可以展開一次令人愉快的雙向?qū)υ?。但它們怎樣才能“發(fā)現(xiàn)”對方呢?這就像在游樂園里那樣,一臺機器不得不停留在一個地方,偵聽其他機器說:“嘿!你在哪里呢?”
“停留在一個地方”的機器叫做“服務(wù)器”(Server),到處“找人”的機器則叫做“客戶機”(Client)或者“客戶”。它們之間的區(qū)別只有在客戶機試圖同服務(wù)器連接的時候才顯得非常明顯。一旦連通,就變成了一種雙向通信,誰來扮演服務(wù)器或者客戶機便顯得不那么重要了。
所以服務(wù)器的主要任務(wù)是偵聽建立連接的請求,這是由我們創(chuàng)建的特定服務(wù)器對象完成的。而客戶機的任務(wù)是試著與一臺服務(wù)器建立連接,這是由我們創(chuàng)建的特定客戶機對象完成的。一旦連接建好,那么無論在服務(wù)器端還是客戶機端,連接只是魔術(shù)般地變成了一個IO數(shù)據(jù)流對象。從這時開始,我們可以像讀寫一個普通的文件那樣對待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是Java聯(lián)網(wǎng)最方便的一個地方。如下圖2-3:服務(wù)器服務(wù)器 Socket(TCP)Socket(TCP)Socket(TCP)………… UDPUDPUDP圖2-3服務(wù)器和客戶機的連接2.5編程運行環(huán)境1.硬件環(huán)境:CPU:Inter(R)Core(TM)i5CPU內(nèi)存:3GB硬盤:500GB2.軟件環(huán)境:操作系統(tǒng):Windows7應(yīng)用軟件:MyEclipse8.5+JDK1.7+Oracle11g2.6ORACLE數(shù)據(jù)庫簡介ORACLE數(shù)據(jù)庫系統(tǒng)是美國ORACLE公司(甲骨文)提供的以分布式數(shù)據(jù)庫為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫之一。比如SilverStream就是基于數(shù)據(jù)庫的一種中間件。ORACLE數(shù)據(jù)庫是目前世界上使用最為廣泛的數(shù)據(jù)庫管理系統(tǒng),作為一個通用的數(shù)據(jù)庫系統(tǒng),它具有完整的數(shù)據(jù)管理功能;作為一個關(guān)系數(shù)據(jù)庫,它是一個完備關(guān)系的產(chǎn)品;作為分布式數(shù)據(jù)庫它實現(xiàn)了分布式處理功能。但它的所有知識,只要在一種機型上學(xué)習(xí)了ORACLE知識,便能在各種類型的機器上使用它。Oracle數(shù)據(jù)庫最新版本為OracleDatabase12c。Oracle數(shù)據(jù)庫12c引入了一個新的多承租方架構(gòu),使用該架構(gòu)可輕松部署和管理數(shù)據(jù)庫云。此外,一些創(chuàng)新特性可最大限度地提高資源使用率和靈活性,如OracleMultitenant可快速整合多個數(shù)據(jù)庫,而AutomaticDataOptimization和HeatMap能以更高的密度壓縮數(shù)據(jù)和對數(shù)據(jù)分層。這些獨一無二的技術(shù)進步再加上在可用性、安全性和大數(shù)據(jù)支持方面的主要增強,使得Oracle數(shù)據(jù)庫12c2.7JDBCJDBC(JavaDataBaseConnectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫開發(fā)人員提供了一個標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠用純JavaAPI編寫數(shù)據(jù)庫應(yīng)用程序,同時,JDBC也是個商標(biāo)名。有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語句就是一件很容易的事。換言之,有了JDBCAPI,就不必為訪問Sybase數(shù)據(jù)庫專門寫一個程序,為訪問Oracle數(shù)據(jù)庫又專門寫一個程序,或為訪問Informix數(shù)據(jù)庫又編寫另一個程序等等,程序員只需用JDBCAPI寫一個程序就夠了,它可向相應(yīng)數(shù)據(jù)庫發(fā)送SQL調(diào)用。同時,將Java語言和JDBC結(jié)合起來使程序員不必為不同的平臺編寫不同的應(yīng)用程序,只須寫一遍程序就可以讓它在任何平臺上運行,這也是Java語言“編寫一次,處處運行”的優(yōu)勢。Java數(shù)據(jù)庫連接體系結(jié)構(gòu)是用于Java應(yīng)用程序連接數(shù)據(jù)庫的標(biāo)準(zhǔn)方法。JDBC對Java程序員而言是API,對實現(xiàn)與數(shù)據(jù)庫連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫廠商及第三方中間件廠商實現(xiàn)與數(shù)據(jù)庫的連接提供了標(biāo)準(zhǔn)方法。JDBC使用已有的SQL標(biāo)準(zhǔn)并支持與其它數(shù)據(jù)庫連接標(biāo)準(zhǔn),如ODBC之間的橋接。JDBC實現(xiàn)了所有這些面向標(biāo)準(zhǔn)的目標(biāo)并且具有簡單、嚴(yán)格類型定義且高性能實現(xiàn)的接口。2.8小結(jié)本章主要是介紹本系統(tǒng)設(shè)計及開發(fā)所要涉及的相關(guān)技術(shù)。從程序員的角度簡單概括性地介紹了相關(guān)知識,如用到的開發(fā)工具、開發(fā)環(huán)境、系統(tǒng)需要的技術(shù)支持,系統(tǒng)運行環(huán)境等,從而能從整體上對現(xiàn)系統(tǒng)的技術(shù)層次有一定的了解。本章作為此次設(shè)計的第二章,主要是考慮到有些知識事先介紹能讓讀者對于系統(tǒng)的框架和內(nèi)容初步的認識,而且能夠更好的理清此次設(shè)計思路和開發(fā)方案。
3需求分析3.1可行性分析3.1.1經(jīng)濟可行性由于本系統(tǒng)的主要背景是畢業(yè)課程設(shè)計,不注重直接的經(jīng)濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟要求也不高,只要有一臺能運行Java軟件的電腦便可,相關(guān)資料參考文獻可從網(wǎng)上和圖書館查找,所以不用考慮到經(jīng)濟問題。3.1.2技術(shù)可行性技術(shù)上的可行性分析主要分析技術(shù)條件能順利完成開發(fā)工作,硬、軟件能滿足開發(fā)者的需要等。系統(tǒng)的軟件開發(fā)平臺已成熟可行。硬件方面,科技飛速發(fā)展的今天,硬件更新的速度越來越快,容量越來越大,可靠性越來越高,價格越來越低,其硬件平臺完全能滿足此系統(tǒng)的需要。本系統(tǒng)的開發(fā)利用Oracle11g作為本系統(tǒng)的數(shù)據(jù)庫,它是一個支持多用戶的新型數(shù)據(jù)庫,適用于大中規(guī)模的數(shù)據(jù)量需求。學(xué)校校園網(wǎng)的建設(shè)也為新系統(tǒng)服務(wù)器/客戶端的結(jié)構(gòu)提供了硬件的支持。使用Java作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它提供完善的指令控制語句、類與對象的支持及豐富的數(shù)據(jù)類型,給開發(fā)高性能系統(tǒng)提供的保障為開發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴展與修改。3.1.3操作可行性本系統(tǒng)為一個小型的局域網(wǎng)聊天系統(tǒng),所耗費的資源非常的小,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運行上是可行的。3.1.4需求可行性分析可靠性高,能在由于系統(tǒng)問題或其它原因產(chǎn)生錯誤后,作出相對應(yīng)處理,比如網(wǎng)絡(luò)初始化失敗、服務(wù)器不在線等,可以提示用戶安全退出本程序,在出現(xiàn)不可知的錯誤以后,可以盡量安全的退出程序。在程序的設(shè)計過程中,要求能盡可能多的設(shè)想到用戶使用過程中可能發(fā)生的事件,并能在判斷事件后做出相應(yīng)的處理,使程序具有較高的容錯性能。宜操作性,程序簡單易懂,容易上手使用。設(shè)計界面是,簡化界面的復(fù)雜性,模擬QQ等現(xiàn)有即時通訊工具的界面,使用戶能很容易看懂并使用。開發(fā)文檔易理解,保證以后自己二次開發(fā)或他人接手開發(fā)時,能夠清晰的理解整個系統(tǒng)的設(shè)計思路和實現(xiàn)細節(jié)。模塊化設(shè)計此軟件的功能,不同的模塊實現(xiàn)不同的功能,使得軟件易于以后的維護與擴展,在以后可以更好的完善本軟件的功能,更方便于在工作中的應(yīng)用。3.1.5性能可行性從時間上看,在三個月的時間里學(xué)習(xí)相關(guān)知識,并開發(fā)系統(tǒng),時間上是有點緊,但是可以實現(xiàn),通過三個多月的努力功能基本上是可以實現(xiàn)的。綜上所述,本系統(tǒng)的設(shè)計與開發(fā)在技術(shù)上和軟、硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。3.2系統(tǒng)功能需求本系統(tǒng)主要通過客戶端、服務(wù)器端來體現(xiàn)工作板系統(tǒng)的基本功能。1、服務(wù)器端處理用戶注冊處理用戶登錄處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過濾非法內(nèi)容處理用戶得到信息處理用戶退出存用戶聊天信息。2、客戶端(1)用戶注冊界面及結(jié)果
(2)用戶登錄界面及結(jié)果
(3)用戶發(fā)送信息界面及結(jié)果
(4)用戶得到信息界面及結(jié)果
(5)用戶退出界面及結(jié)果3.3系統(tǒng)性能需求1.實用性:為局域網(wǎng)交流提供方便,有效進行作業(yè)管理??蓱?yīng)用于企業(yè)辦公室,以及校園電子閱覽室
2.操作簡單:本系統(tǒng)應(yīng)該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時系統(tǒng)不應(yīng)太復(fù)雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡單易行。
3.技術(shù)先進:產(chǎn)品的系統(tǒng)設(shè)計和開發(fā)應(yīng)緊跟著整個計算機發(fā)展潮流,采用當(dāng)時最先進的設(shè)計思想,利用最新的開發(fā)技術(shù)和開發(fā)工具。使系統(tǒng)能夠無論在功能設(shè)計上,還是在技術(shù)實現(xiàn)上,都處于同行業(yè)的領(lǐng)先地位。4.安裝使用簡便:服務(wù)器端的安裝簡潔明了,客戶機無需再裝任何軟件就可以直接注冊登陸聊天。5.代碼可讀性好:文中的代碼將盡可能簡潔、易懂。3.4系統(tǒng)運行環(huán)境運行環(huán)境Windows7必要環(huán)境JDK1.6以上
硬件環(huán)境CPU400MHz以上,內(nèi)存64MB以上
4概要設(shè)計在這里我們將該工作板即基于局域網(wǎng)工作交流平臺系統(tǒng)命名為IMessaging,現(xiàn)在對該系統(tǒng)進行概要設(shè)計。采用客戶機/服務(wù)器(C/S)的模式來設(shè)計,是一個2層的C/S結(jié)構(gòu):應(yīng)用程序服務(wù)器→應(yīng)用程序客戶端,其分層機構(gòu)如圖4-1所示。圖4-1C/S客戶層也叫做應(yīng)用表示層,也就是我們說的客戶端,這是應(yīng)用程序的用戶接口部分。給即時通訊工具設(shè)計一個客戶層具有很多優(yōu)點,這是因為客戶層擔(dān)負著用戶與應(yīng)用間的對話功能。它用于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能直接地進行操作,客戶層需要使用圖形用戶接口。若通訊用戶變更,系統(tǒng)只需要改寫顯示控制和數(shù)據(jù)檢查程序就可以了,而不會影響其他兩層。服務(wù)層又叫做功能層,相當(dāng)于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中。例如,用戶需要檢查數(shù)據(jù),系統(tǒng)設(shè)法將有關(guān)檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結(jié)果數(shù)據(jù),它也是一次性傳送給表示層的。在應(yīng)用設(shè)計中,必須避免在表示層和功能層之間進行多次的數(shù)據(jù)交換,這就需要盡可能進行一次性的業(yè)務(wù)處理,達到優(yōu)化整體設(shè)計的目的。軟件開發(fā)過程中的概要設(shè)計,主要解決實現(xiàn)該系統(tǒng)需求的程序模塊設(shè)計問題。包括如何把該系統(tǒng)劃分成若干個模塊、決定各個模塊之間的接口、模塊之間傳遞的信息,以及模塊結(jié)構(gòu)的設(shè)計等。4.1工作板即基于局域網(wǎng)工作交流平臺系統(tǒng)的實施原理4.1.1工作方式和技術(shù)原理本系統(tǒng)的IM工作方式如下:登陸IMessaging通訊服務(wù)器,獲取一個自建立的歷史的交流對象列表(同事列表),然后自身標(biāo)志為在線狀態(tài),當(dāng)好友列表中的某人在任何時候登錄上線并試圖通過你的計算機聯(lián)系你時,IM系統(tǒng)會發(fā)一個消息提醒你,然后你能與他建立一個聊天會話通道進行各種消息如鍵入文字、通過語音等的交流,從技術(shù)上來說,聊天系統(tǒng)的基本技術(shù)原理如下:第一步,用戶A輸入自己的用戶名和密碼登錄IM服務(wù)器,服務(wù)器通過讀取用戶數(shù)據(jù)庫來驗證用戶身份,如果驗證通過,登記用戶A的IP地址、IM客戶端軟件的版本號及使用的TCP/UDP端口號,然后返回用戶A登錄成功的標(biāo)志,此時用戶A在IM系統(tǒng)中的狀態(tài)為在線(OnlinePresence)。第二步,根據(jù)用戶A存儲在IM服務(wù)器上的好友列表(BuddyList),服務(wù)器將用戶A在線的相關(guān)信息發(fā)送給也同時在線的IM好友的PC機,這些信息包括在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號等,IM好友的客戶端收到此信息后將在予以提示。第三步是IM服務(wù)器把用戶A存儲在服務(wù)器上的好友列表及相關(guān)信息回送到他的客戶端機,這些信息包括也在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號等信息,用戶A的IM客戶端收到后將顯示這些好友列表及其在線狀態(tài)。4.1.2通訊方式在本系統(tǒng)中,如果用戶A想與他的在線好友用戶B聊天,他將直接通過服務(wù)器發(fā)送過來的用戶B的IP地址、TCP端口號等信息,直接向用戶B的PC機發(fā)出聊天信息,用戶B的IM客戶端軟件收到后顯示在屏幕上,然后用戶B再直接回復(fù)到用戶A的PC機,這樣雙方的即時文字消息就不再IM服務(wù)器中轉(zhuǎn),而是直接通過網(wǎng)絡(luò)進行點對點的通訊,即對等通訊方式(PeerToPeer)。4.2軟件設(shè)計流程因為該系統(tǒng)其需求是十分明確的,所以該系統(tǒng)的開發(fā)流程采用瀑布模型進行設(shè)計,分為幾大步驟:先進行需求分析,再是系統(tǒng)設(shè)計,然后是詳細設(shè)計與編碼,其次是軟件的測試,最后是軟件的運行和維護。在實際過程中這些步驟經(jīng)常是重疊和彼此間有信息交換,它不是一個簡單線性過程,而是包括開發(fā)步驟的多個反復(fù)。如圖4-2所示。需求分析需求分析系統(tǒng)設(shè)計詳細設(shè)計與編碼軟件測試 軟件運行與維護圖4-2工作板即基于局域網(wǎng)工作交流平臺系統(tǒng)開發(fā)流程圖4.3系統(tǒng)功能模塊根據(jù)以上分析,本系統(tǒng)主要完成以下幾方面的功能,如圖4-3客戶端工作板(工作交流平臺)操作數(shù)據(jù)庫服務(wù)器端聊天添加好友查找好友用戶登錄用戶注冊監(jiān)聽客戶建立連接客戶端工作板(工作交流平臺)操作數(shù)據(jù)庫服務(wù)器端聊天添加好友查找好友用戶登錄用戶注冊監(jiān)聽客戶建立連接交互圖4-3系統(tǒng)功能模塊1、服務(wù)器端在服務(wù)器端,主要的功能模塊是建立連接、操作數(shù)據(jù)庫和監(jiān)聽客戶。2、客戶端在客戶端,系統(tǒng)主要實現(xiàn)的功能模塊有用戶注冊、用戶登錄、查找好友、添加好友、聊天和文件傳輸。4.4客戶端實現(xiàn)流程圖客戶端的實現(xiàn)流程具體如下:用戶首先進行注冊,注冊成功后,將注冊信息保存到數(shù)據(jù)庫中。接下來用戶就可以登陸系統(tǒng),通過數(shù)據(jù)庫驗證用戶名和密碼,若用戶名和密碼存在且正確,則登陸成功,反之,則重新注冊。登陸成功后,系統(tǒng)會自動從數(shù)據(jù)庫中更新用戶的好友列表,雙擊好友頭像,打開聊天窗口就可以同好友進行交流。如圖4-4所示:登錄點擊登錄,連接到數(shù)據(jù)庫用戶名和密碼是否為空登錄點擊登錄,連接到數(shù)據(jù)庫用戶名和密碼是否為空是是注冊是否成功 注冊是否成功否否 驗證用戶名注冊用戶名是否存在 否注冊用戶名是否存在開始密碼是否正確 是開始密碼是否正確 是我的好友列表 我的好友列表雙擊我的好友雙擊我的好友聊天窗口聊天窗口結(jié)束結(jié)束圖4-4客戶端實現(xiàn)流程圖4.5類模塊設(shè)計各類模塊設(shè)計概要:LoginFrame類:用戶登陸,主程序入口類,啟動各個主要線程ChatFrame類:用戶交流
RegFrame類:用戶注冊
RecvThread類:接收消息線程
SendFileThread類:發(fā)送文件FileRecvListenThread類:文件傳輸監(jiān)聽線程FileReceiverThread類:接受文件………由于該系統(tǒng)文件很多,更多請參照系統(tǒng)源文件4.6程序設(shè)計的重點1、界面設(shè)計
界面統(tǒng)一,色彩大氣,通用,操作流程化,按鈕、字體中規(guī)中矩,快捷鍵一致。2、功能設(shè)計由于該系統(tǒng)牽涉到的功能很多,設(shè)計的時候應(yīng)該注意主次分明,應(yīng)該把每一個模塊設(shè)計好,各個模塊之間互不干擾。4.7接口設(shè)計1.外部接口
(1)用戶界面本軟件的屏幕格式,按鈕格式,輸入輸出方式等都是完全按照人性化的設(shè)計,方便用戶執(zhí)行各種操作。各個按鈕簡單明了,互動性強,適用于各類人群。用戶通過主界面的按鈕進行系統(tǒng)的控制,同時系統(tǒng)返回一個信息。
(2)硬件接口
本軟件產(chǎn)品的用戶需要通過鍵盤及鼠標(biāo)進行操作,進入主界面后點擊相應(yīng)的按鈕,進行規(guī)定的鍵盤操作,然后分別在主界面有相應(yīng)的動作反應(yīng)。
(3)本軟件與操作平臺無關(guān),能適用于各種操作系統(tǒng)。2.內(nèi)部接口
內(nèi)部模塊之間的接口是通過內(nèi)部函數(shù)完成,在程序設(shè)計中用設(shè)計軟件本身所帶的調(diào)用函數(shù)實現(xiàn)。
5詳細設(shè)計5.1系統(tǒng)功能要求5.1.1基于局域網(wǎng)工作交流平臺的要求此軟件是模擬現(xiàn)今國內(nèi)最為流行的即時性通訊工具QQ而設(shè)計的,能夠?qū)崿F(xiàn)注冊、登錄、添加好友、文字聊天、等功能。該軟件是采用C/S結(jié)構(gòu),即客戶端與服務(wù)器端的結(jié)構(gòu)體系?;趯υ撥浖δ艿姆治觯疚姆謩e對客戶端與服務(wù)器端進行了設(shè)計。該軟件服務(wù)器端的功能是實現(xiàn)對客戶端提交的用戶信息進行處理。服務(wù)器設(shè)計內(nèi)容包含:信息接收、注冊、登錄、添加好友等?!靶畔⒔邮铡笔翘峁┓?wù)器接受客戶端發(fā)送信息的功能;“注冊”是服務(wù)器端接受到用戶的注冊信息請求后,將請求信息寫入到數(shù)據(jù)庫,為用戶的注冊提了相關(guān)服務(wù);“登錄”是服務(wù)器通過驗證登錄信息來實現(xiàn)相關(guān)的服務(wù);“好友添加”是服務(wù)器對添加的好友信息進行處理等相關(guān)操作??蛻舳思从脩羰褂玫膽?yīng)用程序端。用戶通過該軟件的客戶端來實現(xiàn)網(wǎng)上聊天的相關(guān)功能:注冊、登錄、添加好友、文字聊天、聊天等。注冊功能是提交用戶相關(guān)信息以及獲得一個屬于自己登錄該聊天軟件系統(tǒng)的用戶ID號;登錄功能是實現(xiàn)驗證用戶信息與合法使用該聊天軟件系統(tǒng)的權(quán)限;添加好友是實現(xiàn)用戶之間好友添加的操作;添加好友成功后,就可以與好友之間開始文字聊天、文件傳輸、聊天等功能。5.1.2基于局域網(wǎng)工作交流平臺的管理子系統(tǒng)要求對數(shù)據(jù)庫中的在線用戶信息進行管理。對數(shù)據(jù)庫中的非在線用戶信息進行管理。對數(shù)據(jù)庫中的聊天信息進行管理。5.2系統(tǒng)性能要求系統(tǒng)的性能要求一般包括:計算和查詢響應(yīng)時間、處理容量、存儲容量、人機交互的友好性、系統(tǒng)的安全性、可靠性以及容錯能力等,如果是網(wǎng)絡(luò)系統(tǒng)還應(yīng)包括系統(tǒng)傳輸交換能力。本系統(tǒng)非網(wǎng)絡(luò)系統(tǒng),所以符合系統(tǒng)的一般性能要求即可。系統(tǒng)的性能要求應(yīng)從以下幾個方面確定:(1)容量要求:確定系統(tǒng)的容量要求,如處理的記錄數(shù)和處理數(shù)據(jù)的最大容量等(2)精度要求:確定系統(tǒng)的精度要求,如數(shù)據(jù)或數(shù)值檢索的精度要求、數(shù)據(jù)傳輸?shù)木纫蟮取?3)時間特性要求:確定系統(tǒng)的時間特性要求。如處理時間、響應(yīng)時間及其峰值負載期間允許偏離范圍,系統(tǒng)各項功能的順序關(guān)系,由于輸入類型的不同和操作方式的變化引起的有限順序的變化。(4)適應(yīng)性要求:必須指明反映系統(tǒng)環(huán)境變化的系統(tǒng)適應(yīng)能力和系統(tǒng)適應(yīng)能力的各種參數(shù)。說明當(dāng)需求發(fā)生變化時系統(tǒng)的適應(yīng)能力,指出為適應(yīng)這些變化而需要設(shè)計的軟件和過程。(5)人機交互友好性:要有適應(yīng)與用戶特點的智能化人機交互界面,便于用戶操作使用。(6)系統(tǒng)可靠性:為提高系統(tǒng)可靠性必須采用模塊化、結(jié)構(gòu)化設(shè)計,需要對容錯處理的模塊提供備份,以減少系統(tǒng)故障。(7)系統(tǒng)可維修性:系統(tǒng)應(yīng)具有奧好的可維修性,以便在系統(tǒng)故障時能迅速恢復(fù)運行。本系統(tǒng)應(yīng)具有如下性能:(1)數(shù)據(jù)庫系統(tǒng)的擴充能力(2)快速的信息交換能力(3)快速的響應(yīng)能力(4)具有較大的數(shù)據(jù)存儲能力(5)系統(tǒng)迅速恢復(fù)能力5.3數(shù)據(jù)庫設(shè)計基于局域網(wǎng)工作交流平臺是一個數(shù)據(jù)庫應(yīng)用系統(tǒng),系統(tǒng)的所有信息都是保存在數(shù)據(jù)庫中。在數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)中,數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計是一個非常重要的問題。我們這里所說的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計是指數(shù)據(jù)庫中各個表結(jié)構(gòu)的設(shè)計,包括信息存在哪個表中、各個表的結(jié)構(gòu)如何以及各個表之間的關(guān)系。數(shù)據(jù)庫結(jié)構(gòu)設(shè)計的好壞,將直接對應(yīng)用系統(tǒng)的效率以及實現(xiàn)的效果產(chǎn)生影響,好的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計會減少數(shù)據(jù)庫的存儲量,數(shù)據(jù)的完整性和一致性比較高,系統(tǒng)具有較快的響應(yīng)速度,簡化基于此數(shù)據(jù)庫的應(yīng)用程序的實現(xiàn)等。本系統(tǒng)使用的是ORACLE數(shù)據(jù)庫。5.3.1數(shù)據(jù)庫需求分析數(shù)據(jù)庫結(jié)構(gòu)設(shè)計的第一個階段,也是非常重要的一個階段時數(shù)據(jù)庫需求分心。在這個階段主要時收集基本數(shù)據(jù)以及數(shù)據(jù)處理的流程,為以后進一步設(shè)計打下基礎(chǔ)。1.內(nèi)容:調(diào)查應(yīng)用系統(tǒng)用戶所需要操作的數(shù)據(jù),決定在數(shù)據(jù)庫中存儲什么數(shù)據(jù)。2.處理:調(diào)查應(yīng)用系統(tǒng)用戶要求對數(shù)據(jù)進行什么樣的處理,理清數(shù)據(jù)庫中各種數(shù)據(jù)之間的關(guān)系。3.數(shù)據(jù)項:包括名稱、含義、類型、取值范圍、長度以及和其他數(shù)據(jù)項之間的邏輯關(guān)系。4.數(shù)據(jù)結(jié)構(gòu):若干個數(shù)據(jù)項有意義的集合,包括名稱、含義以及組成數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)項。5.3.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計概念結(jié)構(gòu)是獨立于實際數(shù)據(jù)模型的信息結(jié)構(gòu),必須將其轉(zhuǎn)化為邏輯結(jié)構(gòu)后才能進行數(shù)據(jù)庫應(yīng)用的設(shè)計.也就是要將概念上的結(jié)構(gòu)轉(zhuǎn)化為數(shù)據(jù)庫系統(tǒng)所支持的實際數(shù)據(jù)模型。第一種轉(zhuǎn)化是將實體轉(zhuǎn)化為關(guān)系表。這種轉(zhuǎn)化比較簡單,只需要將實體的屬性定義為表的屬性即可。第二種轉(zhuǎn)化是聯(lián)系的轉(zhuǎn)化。即將各個實體之間的聯(lián)系轉(zhuǎn)化為表格之間的關(guān)系,如外部鍵的定義。在上面工作的基礎(chǔ)上的基礎(chǔ)上歸納出人員管理數(shù)據(jù)庫表格的組成、列的屬性、表格之間的聯(lián)系等等。該數(shù)據(jù)庫系統(tǒng)要求具有以下方面的特點:結(jié)構(gòu)合理;所建立的數(shù)據(jù)冗余度小,獨立性強;建檔、修改、查詢、統(tǒng)計快準(zhǔn)確;保密性、可靠性好。。5.3.3數(shù)據(jù)庫表的創(chuàng)建工作板即基于局域網(wǎng)工作交流平臺系統(tǒng)中各個表格的設(shè)計結(jié)果如下面的各表格所示。每個表格表示數(shù)據(jù)庫中的一個表。本系統(tǒng)中,主要包含兩個表:一個是保存用戶用戶名和密碼的P_user表,另一個是保存用戶基本信息的dtproperties表。具體內(nèi)容如下:表5-1dtproperties表列名數(shù)據(jù)類型說明ID主鍵Number包含一個作為記錄識別標(biāo)志的長整數(shù)的數(shù)字域。是用戶表的主索引。ObjectidNumber包含用戶的ID。PropertyVarchar2包含用戶存儲個人信息ValueVarchar2包含用戶注冊密碼UvalueVarchar2包含用戶昵稱LvalueBlob包含用戶頭像表5-2P_user表列名數(shù)據(jù)類型說明P_usernameVarchar2包含用戶名P_passwordVarchar2包含用戶登錄密碼5.4系統(tǒng)基本功能設(shè)計與實現(xiàn)本設(shè)計主要完成的是服務(wù)器程序模塊,以及客戶端登錄、注冊模塊、添加好友模塊、聊天模塊和文件傳輸模塊,本節(jié)對系統(tǒng)主要功能模塊設(shè)計進行詳細的說明。5.4.1服務(wù)器程序模塊設(shè)計與實現(xiàn)服務(wù)器與客戶間通過套接口Socket(TCP)連接。在java中使用套接口相當(dāng)簡單,JavaAPI為處理套接口的通信提供了一個類.Socket,使得編寫網(wǎng)絡(luò)應(yīng)用程序相對容易。服務(wù)器采用多線程以滿足多用戶的請求,并通過創(chuàng)建一個ServerSocket對象來監(jiān)聽來自客戶的連接請求,默認端口為8000,然后無限循環(huán)調(diào)用accept()方法接受客戶程序的連接。服務(wù)器具有以下功能:啟動服務(wù),建立偵聽,接受客戶端連接。從流中讀取經(jīng)過序列化的對象。分析讀取的對象進行相應(yīng)的操作(登錄信息的驗證反饋、注冊信息的驗證和反饋、轉(zhuǎn)發(fā)聊天信息等)。向客戶端發(fā)送系統(tǒng)消息。保存日志。關(guān)閉服務(wù),并向客戶端發(fā)送服務(wù)器關(guān)閉消息。服務(wù)器程序模塊源碼:ServerSocketserverSocket;//服務(wù)器套接字staticVectoru=newVector(1,1);//初始聊天用戶對象集staticVectorv=newVector(1,1);//初始聊天信息對象集publicvoidrun() { Try //無限循環(huán)實現(xiàn)多線程,實現(xiàn)與多個用戶的同時連接 while(true) { //監(jiān)聽并接受客戶的請求 Socketclient=serverSocket.accept(); //繼承Thread支持多線程 newConnection(client,u,v); }} catch(IOExceptione) {fail(e,"不能監(jiān)聽!");} }當(dāng)用戶發(fā)送聊天信息時,服務(wù)端將會收到客戶端用Socket傳輸過來的聊天信息對象,然后將其強制轉(zhuǎn)換為Chat對象,并將本次用戶的聊天信息對象添加到聊天對象集Message中,以供所有聊天用戶訪問。5.4.2用戶注冊模塊設(shè)計與實現(xiàn)客戶端通過RegFrame.java請求注冊,填寫用戶名、密碼、昵稱和頭像等注冊信息,并驗證用戶名是否與數(shù)據(jù)庫中的用戶名重復(fù),用戶名和密碼是否為空。如果用戶名不與數(shù)據(jù)庫中的信息重復(fù),且用戶名和密碼不為空,則注冊成功;反之,則系統(tǒng)提示重新輸入。相關(guān)界面如圖5-1。驗證要求如下:1、驗證用戶名是否為空:即用戶名的字符長度不為0,,如果驗證通過,就繼續(xù)下面驗證,否則返回錯誤信息。2、驗證密碼是否為空:即密碼的字符長度不為0,如果驗證通過,就繼續(xù)下面驗證,否則返回錯誤信息。圖5-1注冊界面主要實現(xiàn)代碼如下:jb1.addActionListener(newActionListener(){@Override publicvoidactionPerformed(ActionEventarg0){ lf1.isreg=true; Propertiesp=lf1.p; try{Socketsock=newSocket(p.getProperty("server"),Integer.parseInt(p.getProperty("port")));lf1.socket=sock; Stringusername=usertext.getText(); Stringpwd=jtf2.getText(); OutputStreamos=sock.getOutputStream(); PrintStreamps=newPrintStream(os); //發(fā)送驗證信息 ps.println("reg:"+username+":"+pwd); BufferedReaderbr=newBufferedReader(newInputStreamReader(sock.getInputStream())); //接受驗證結(jié)果 Stringresult=br.readLine(); if(result.equals("ok")) { //注冊成功,在服務(wù)器寫入用戶名和密碼,在本地生成相應(yīng)的文件 jLabel.setText("注冊成功"); Filefile=newFile(".\\"+username); file.mkdir(); file=newFile(".\\"+username+"\\my.txt"); file.createNewFile(); Filef2=newFile(".\\"+username+"\\friends.txt"); f2.createNewFile(); Stringindex=newInteger(jcb1.getSelectedIndex()).toString(); Propertiesp2=newProperties(); p2.setProperty("myQname",jtf3.getText()); p2.setProperty("mytitle",titletext.getText()); p2.setProperty("myimg",index);FileOutputStreamoStream=newFileOutputStream(file.getAbsolutePath()); p2.store(oStream,null); } else{ jLabel.setText("注冊失敗"); } }catch(NumberFormatExceptione){ e.printStackTrace(); }catch(UnknownHostExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace();} }});5.4.3用戶登錄模塊設(shè)計與實現(xiàn)系統(tǒng)的登錄模塊是比較重要的,這是用戶的一個身份驗證,是通訊系統(tǒng)必須的一個功能模塊。用戶在注冊獲得賬號和密碼后,在LoginFrame.java登錄界面填寫用戶名和密碼,并封裝成對象,通過建立在Socket的連接至上的對象輸出流將用戶登錄信息提交給服務(wù)器,服務(wù)器通過用戶提交過來的信息和數(shù)據(jù)庫中原有的用戶信息進行比較和驗證,如果結(jié)果一致表明驗證成功,并將該用戶的狀態(tài)改為在線,最后將登錄結(jié)果返回給客戶端。如果登錄成功,客戶端將繼續(xù)啟動聊天主界面。如果不一致,給用戶返回登錄錯誤信息。驗證要求如下:1、驗證用戶名是否為空:即用戶名的字符長度不為0,如果驗證通過,就進行繼續(xù)下面驗證,否則返回錯誤信息。2、驗證密碼是否為空:即密碼的字符長度不為0,如果驗證通過,就進行繼續(xù)下面驗證,否則返回錯誤信息。以下為登錄驗證的流程圖:驗證輸入信息登錄系統(tǒng)開始驗證輸入信息登錄系統(tǒng)開始 不符合結(jié)束進入系統(tǒng)符合結(jié)束進入系統(tǒng)圖5-2用戶登錄流程圖當(dāng)以上信息驗證成功時,客戶端將打開與服務(wù)之間的Socket連接,用對象輸出流包裝后將用戶登錄的信息發(fā)送給服務(wù)器端,并接收服務(wù)器處理完用戶登錄的信息。
當(dāng)客戶端收到服務(wù)器返回的信息時,將會用信息對話框的形式告知用戶是否登錄成功,若成功則顯示收發(fā)主界面MainFrame,關(guān)閉Socket連接。相關(guān)界面如圖5-3。圖5-3登錄界面主要實現(xiàn)代碼如下://登錄界面publicLoginFrame(){//讀取配置文件,連接服務(wù)器需要 HelpTool.ReadServerConfig(p,".\\server.txt"); System.out.println(p.getProperty("server")+p.getProperty("port")); //設(shè)置窗體關(guān)閉事件 jf1.addWindowListener(newWindowAdapter(){ @Override publicvoidwindowClosing(WindowEventarg0){ System.exit(1); } }); //設(shè)置發(fā)送密碼驗證按鈕事件 jb1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventarg0){ try{ //創(chuàng)建Socket來發(fā)送驗證信息 if(!isreg) socket=newSocket(HelpTool.server_ip,HelpTool.port); OutputStreamos=socket.getOutputStream(); PrintStreamps=newPrintStream(os); ps.println("new:"+jtf1.getText()+":"+jtf2.getText()); //等待服務(wù)器發(fā)送驗證結(jié)果BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream())); Stringresult=br.readLine(); if(result.equals("right")) { jf1.setVisible(false); MainFramemf=newMainFrame(socket,jtf1.getText()); } }catch(UnknownHostExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } } });5.4.4添加好友模塊設(shè)計與實現(xiàn)用戶在登錄成功后會進入客戶端界面。如果想和朋友進行聊天,就將好友的用戶名輸入到文本框中并用鼠標(biāo)點擊擊添加好友,好友收到對方請求后,點擊“是”,則成功添加好友。相關(guān)界面如圖5-4。圖5-4添加好友界面主要實現(xiàn)代碼如下: 1.在MainFrame.java界面中,當(dāng)用戶點擊“添加好友”按鈕時,觸發(fā)添加好友事件。代碼如下://添加好友事件 set.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEventarg0){ Stringname=addfriend.getText(); if(!name.isEmpty()) { try{ OutputStreamos=clientSocket.getOutputStream(); PrintStreamps=newPrintStream(os); ps.println("addfriend:"+name+":"+me); }catch(IOExceptione){ e.printStackTrace(); } } } });2.在RecvThread.java中,當(dāng)添加好友的請求傳送到服務(wù)器時,服務(wù)器啟動線程處理添加好友的請求,處理代碼如下://有人請求添加好友 elseif(ss[0].equals("addfriend")) { Stringinfo=ss[1]+"想加你為好友,你是否接受?";intresult=javax.swing.JOptionPane.showConfirmDialog(null,info,"添加好友",javax.swing.JOptionPane.YES_NO_OPTION,javax.swing.JOptionPane.INFORMATION_MESSAGE);if(result==JOptionPane.YES_OPTION) { OutputStreamos=s.getOutputStream(); PrintStreamps=newPrintStream(os);ps.println("sendfriend:"+ss[1]+":"+me.getName()+":"+me.getQname()+":"+me.getTitle()+":"+me.getImg()); Propertiesp=newProperties(); Personperson=newPerson(ss[1],ss[2],ss[3],Integer.parseInt(ss[4])); HelpTool.ReadServerConfig(p,".\\"+me.getName()+"\\friends.txt"); p.setProperty(ss[1],ss[2]+","+ss[3]+","+ss[4]); FileWriterfos=newFileWriter(".\\"+me.getName()+"\\friends.txt"); p.store(fos,null); friends.put(ss[1],person); listModel.addElement(person); changeStatus(ss[1],1); }}5.4.5聊天模塊設(shè)計與實現(xiàn)聊天信息的發(fā)送與接收都是通過Socket類實現(xiàn)的。將要發(fā)送的內(nèi)容輸入文本框,當(dāng)用戶點擊完發(fā)送按鈕后,程序開始將當(dāng)前用戶名、聊天對象和聊天內(nèi)容進行封裝,然后獲取Socket連接,再用對象輸出流包裝Socket的輸出流將聊天信息對象發(fā)送給服務(wù)器端。圖5-5好友聊天界面主要實現(xiàn)代碼如下:1.在MainFrame.java界面中,在成功添加好友,雙擊好友頭像,即打開了聊天界面ChatFrame.java(如圖5-5),具體實現(xiàn)代碼如下://雙擊好友頭像事件 MouseListenermouseListener=newMouseAdapter(){ publicvoidmouseClicked(MouseEvente){ if(e.getClickCount()==2){ intindex=friendList.locationToIndex(e.getPoint()); Personperson=(Person)listModel.get(index); try{ Objecttmp=ChatFrames.get(person.getName()); if(tmp==null) { ChatFramecFrame=newChatFrame(clientSocket,person); ChatFrames.put(person.getName(),cFrame); cFrame.jf.setVisible(true); } else { ChatFramecf=(ChatFrame)tmp; cf.jf.setVisible(true); } }catch(NumberFormatExceptione1){ e1.printStackTrace(); }System.out.println("DoubleclickedonItem"+person.getQname());}}};2.在ChatFrame.java界面中的文本框中輸入要發(fā)送給好友的內(nèi)容,當(dāng)用戶點擊完“發(fā)送”按鈕后,程序開始將當(dāng)前用戶名、聊天對象和聊天內(nèi)容進行封裝,然后獲取Socket連接,再用對象輸出流包裝Socket的輸出流將聊天信息對象發(fā)送給服務(wù)器端。具體實現(xiàn)代碼如下://確認添加好友,并發(fā)送自己的信息 elseif(ss[0].equals("sendfriend")) { System.out.println(str); Propertiesp=newProperties(); Personps=newPerson(ss[1],ss[2],ss[3],Integer.parseInt(ss[4])); HelpTool.ReadServerConfig(p,".\\"+me.getName()+"\\friends.txt"); p.setProperty(ss[1],ss[2]+","+ss[3]+","+ss[4]); FileWriterfos=newFileWriter(".\\"+me.getName()+"\\friends.txt"); p.store(fos,null); listModel.addElement(ps); friends.put(ss[1],ps); changeStatus(ss[1],1);}//設(shè)置發(fā)送按鈕的發(fā)送事件 sendbtn.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventarg0){ Stringsendstr=ChatStr.getText(); try{ OutputStreamos=client.getOutputStream(); PrintStreamps=newPrintStream(os); ps.println("talk:"+op.getName()+":"+sendstr); Stringrecord=ChatRecord.getText(); ChatRecord.setText(record+"我說:"+sendstr+"\n"); ChatStr.setText(""); }catch(IOExceptione1){ e1.printStackTrace(); } } });5.4.6文件傳輸模塊設(shè)計與實現(xiàn)在用戶聊天窗口中,點擊“發(fā)送文件”,在發(fā)送文件窗口中選擇要發(fā)送的文件,好友收到對方請求后,好友同意,此時就可以給好友發(fā)送文件。相關(guān)界面如圖5-6,5-7,,5-8。圖5-6選擇文件界面圖5-7是否接收文件對話框圖5-8文件傳輸界面主要實現(xiàn)代碼如下:1.在ChatFrame.java界面中,當(dāng)用戶點擊完“發(fā)送文件”按鈕后,觸發(fā)發(fā)送文件事件,出現(xiàn)如圖5-6的選擇文件窗口。代碼如下://設(shè)置發(fā)送文件按鈕的發(fā)送事件 sendfilebtn.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventarg0){ JFileChooserjfc=newJFileChooser("choosefile"); jfc.setDialogTitle("Chose..."); intresult=jfc.showOpenDialog(null); jfc.setVisible(true); FileselectedFile=null; if(result==JFileChooser.APPROVE_OPTION){ selectedFile=jfc.getSelectedFile(); if(selectedFile.exists()){ OutputStreamos; try{ os=client.getOutputStream(); PrintStreamps=newPrintStream(os);ps.println("sendfile:"+op.getName()+":"+selectedFile.getName()); Sockets=newSocket(HelpTool.server_ip,HelpTool.fileport); SendFileThreadsfr=newSendFileThread(selectedFile,s); sfr.start(); }catch(IOExceptione){ e.printStackTrace(); } System.out.println("Yes!Youhaveselectedtherightfile."+selectedFile.getName()); }else{ System.out.println("No!Youdidnotselecttherightfile."); } }elseif(result==JFileChooser.CANCEL_OPTION){ System.out.println("Cancelbuttonispushed."); }elseif(result==JFileChooser.ERROR_OPTION){ System.err.println("Errorwhenselectfile."); } } });2.在選擇文件窗口中,選擇好準(zhǔn)備發(fā)送給好友的文件,點擊“打開”,系統(tǒng)則自動為好友彈出一個確認是否接收文件的對話框(如圖5-7)。代碼如下//確認接收文件 elseif(ss[0].equals("sendfile")) { Stringinfo=ss[1]+"想給你傳送文件:"+ss[2]+",你是否接受?";intresult=javax.swing.JOptionPane.showConfirmDialog(null,info,"文件傳輸",javax.swing.JOptionPane.YES_NO_OPTION,javax.swing.JOptionPane.INFORMATION_MESSAGE); if(result==JOptionPane.YES_OPTION) { JFileChooserjfc=newJFileChooser("choosefile"); jfc.setDialogTitle("Chose..."); jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); intresult1=jfc.showOpen
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職(針織技術(shù)與針織服裝)針織服裝制版測試題及答案
- 2025年大學(xué)第一學(xué)年(地理學(xué))自然地理學(xué)基礎(chǔ)階段測試試題及答案
- 2025年大學(xué)大三(土木工程)混凝土結(jié)構(gòu)設(shè)計試題及答案
- 2025-2026年高一化學(xué)(基礎(chǔ)復(fù)習(xí))上學(xué)期考題及答案
- 2025年大學(xué)大二(材料科學(xué)與工程)材料力學(xué)性能階段測試試題及答案
- 2025年大學(xué)(藥事管理)藥品經(jīng)營質(zhì)量管理期末試題及答案
- 小學(xué)二年級(語文)2027年下學(xué)期期末知識鞏固卷
- 2025美容師美甲案例實戰(zhàn)題庫及答案
- 深度解析(2026)《GBT 18210-2000晶體硅光伏(PV)方陣 I-V特性的現(xiàn)場測量》
- 深度解析(2026)《GBT 18052-2000套管、油管和管線管螺紋的測量和檢驗方法》
- 2026年云南中煙工業(yè)有限責(zé)任公司畢業(yè)生招聘(502人)筆試考試參考試題及答案解析
- 2025江蘇蘇州大學(xué)勞務(wù)派遣制人員招聘3人(第五批)筆試考試參考試題及答案解析
- 海洋信息安全:大數(shù)據(jù)平臺建設(shè)保障
- 爐底和爐墻砌筑分項工程質(zhì)量檢查評估表
- 2026年沈陽職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試必刷測試卷帶答案
- 2025年鐵路專業(yè)基礎(chǔ)知識考試題庫(含答案)
- 2025年地面裝飾工(地磚鋪貼)考試試卷及答案
- 全媒體運營師培訓(xùn)
- 天橋養(yǎng)護施工方案
- 低壓故障排除培訓(xùn)課件
- 鼻鼽(變應(yīng)性鼻炎)診療方案
評論
0/150
提交評論